@wix/interact 1.93.0 → 1.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/cjs/__tests__/interact.spec.js +170 -0
  2. package/dist/cjs/__tests__/interact.spec.js.map +1 -1
  3. package/dist/cjs/__tests__/viewEnter.spec.js +23 -6
  4. package/dist/cjs/__tests__/viewEnter.spec.js.map +1 -1
  5. package/dist/cjs/core/add.js.map +1 -1
  6. package/dist/cjs/handlers/animationEnd.js +6 -1
  7. package/dist/cjs/handlers/animationEnd.js.map +1 -1
  8. package/dist/cjs/handlers/click.js +12 -2
  9. package/dist/cjs/handlers/click.js.map +1 -1
  10. package/dist/cjs/handlers/hover.js +13 -3
  11. package/dist/cjs/handlers/hover.js.map +1 -1
  12. package/dist/cjs/handlers/viewEnter.js +7 -2
  13. package/dist/cjs/handlers/viewEnter.js.map +1 -1
  14. package/dist/cjs/handlers/viewProgress.js +3 -1
  15. package/dist/cjs/handlers/viewProgress.js.map +1 -1
  16. package/dist/esm/__tests__/interact.spec.js +170 -0
  17. package/dist/esm/__tests__/interact.spec.js.map +1 -1
  18. package/dist/esm/__tests__/viewEnter.spec.js +23 -6
  19. package/dist/esm/__tests__/viewEnter.spec.js.map +1 -1
  20. package/dist/esm/core/add.js.map +1 -1
  21. package/dist/esm/handlers/animationEnd.js +6 -1
  22. package/dist/esm/handlers/animationEnd.js.map +1 -1
  23. package/dist/esm/handlers/click.js +12 -2
  24. package/dist/esm/handlers/click.js.map +1 -1
  25. package/dist/esm/handlers/hover.js +13 -3
  26. package/dist/esm/handlers/hover.js.map +1 -1
  27. package/dist/esm/handlers/viewEnter.js +7 -2
  28. package/dist/esm/handlers/viewEnter.js.map +1 -1
  29. package/dist/esm/handlers/viewProgress.js +3 -1
  30. package/dist/esm/handlers/viewProgress.js.map +1 -1
  31. package/dist/types/__tests__/viewEnter.spec.d.ts +7 -0
  32. package/package.json +3 -3
@@ -1,10 +1,11 @@
1
+ const mockAnimation = {
2
+ play: jest.fn(),
3
+ cancel: jest.fn(),
4
+ onFinish: jest.fn(),
5
+ isCSS: false
6
+ };
1
7
  jest.mock('@wix/motion', () => ({
2
- getAnimation: jest.fn().mockReturnValue({
3
- play: jest.fn(),
4
- cancel: jest.fn(),
5
- onFinish: jest.fn(),
6
- isCSS: false
7
- })
8
+ getAnimation: jest.fn().mockReturnValue(mockAnimation)
8
9
  }));
9
10
  jest.mock('fastdom', () => ({
10
11
  measure: jest.fn(cb => cb()),
@@ -94,6 +95,22 @@ describe('viewEnter handler', () => {
94
95
  expect(unobserveSpy).toHaveBeenCalledWith(element);
95
96
  });
96
97
  });
98
+ describe('Null animation handling', () => {
99
+ it('should not create observer when getAnimation returns null', () => {
100
+ const {
101
+ getAnimation
102
+ } = require('@wix/motion');
103
+ getAnimation.mockReturnValueOnce(null);
104
+ viewEnterHandler.add(element, target, {
105
+ duration: 1000,
106
+ namedEffect: {
107
+ type: 'FadeIn'
108
+ }
109
+ }, {});
110
+ expect(IntersectionObserverMock).not.toHaveBeenCalled();
111
+ expect(observeSpy).not.toHaveBeenCalled();
112
+ });
113
+ });
97
114
  describe('Safe flow', () => {
98
115
  it('should check for safe mode conditions on first run when not intersecting', () => {
99
116
  viewEnterHandler.add(element, target, {
@@ -1 +1 @@
1
- {"version":3,"names":["jest","mock","getAnimation","fn","mockReturnValue","play","cancel","onFinish","isCSS","measure","cb","mutate","describe","viewEnterHandler","fastdom","element","target","observerCallback","observerMock","observeSpy","unobserveSpy","IntersectionObserverMock","beforeEach","resetModules","require","default","document","body","innerHTML","createElement","appendChild","clearAllMocks","observe","unobserve","disconnect","options","window","IntersectionObserver","afterEach","remove","createEntry","overrides","isIntersecting","boundingClientRect","height","width","rootBounds","it","add","duration","namedEffect","type","expect","toHaveBeenCalled","toHaveBeenCalledWith","entry","useSafeViewEnter","threshold","sourceHeight","rootHeight","toHaveBeenCalledTimes","safeObserverConfig","calls","toEqual","rootMargin","toBe","not"],"sources":["../../../src/__tests__/viewEnter.spec.ts"],"sourcesContent":["jest.mock('@wix/motion', () => ({\n getAnimation: jest.fn().mockReturnValue({\n play: jest.fn(),\n cancel: jest.fn(),\n onFinish: jest.fn(),\n isCSS: false,\n }),\n}));\n\njest.mock('fastdom', () => ({\n measure: jest.fn((cb) => cb()),\n mutate: jest.fn((cb) => cb()),\n}));\n\ndescribe('viewEnter handler', () => {\n let viewEnterHandler: any;\n let fastdom: any;\n let element: HTMLElement;\n let target: HTMLElement;\n let observerCallback: (entries: Partial<IntersectionObserverEntry>[]) => void;\n let observerMock: any;\n let observeSpy: jest.Mock;\n let unobserveSpy: jest.Mock;\n let IntersectionObserverMock: jest.Mock;\n\n beforeEach(() => {\n jest.resetModules();\n viewEnterHandler = require('../handlers/viewEnter').default;\n fastdom = require('fastdom');\n\n // Reset DOM\n document.body.innerHTML = '';\n element = document.createElement('div');\n target = document.createElement('div');\n document.body.appendChild(element);\n document.body.appendChild(target);\n\n jest.clearAllMocks();\n\n observeSpy = jest.fn();\n unobserveSpy = jest.fn();\n observerMock = {\n observe: observeSpy,\n unobserve: unobserveSpy,\n disconnect: jest.fn(),\n };\n\n IntersectionObserverMock = jest.fn((cb, options) => {\n observerCallback = cb;\n return observerMock;\n });\n (window as any).IntersectionObserver = IntersectionObserverMock;\n });\n\n afterEach(() => {\n // Clean up handlers to prevent state leakage between tests\n if (viewEnterHandler && element) {\n viewEnterHandler.remove(element);\n }\n if (viewEnterHandler && target) {\n viewEnterHandler.remove(target);\n }\n });\n\n const createEntry = (\n overrides: Partial<IntersectionObserverEntry> = {},\n ): Partial<IntersectionObserverEntry> => {\n return {\n target: element,\n isIntersecting: true,\n boundingClientRect: {\n height: 100,\n width: 100,\n } as unknown as DOMRectReadOnly,\n rootBounds: {\n height: 100,\n width: 100,\n } as unknown as DOMRectReadOnly,\n ...overrides,\n };\n };\n\n describe('Regular flow', () => {\n it('should create an IntersectionObserver and observe the source', () => {\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n {},\n );\n\n expect(IntersectionObserverMock).toHaveBeenCalled();\n expect(observeSpy).toHaveBeenCalledWith(element);\n });\n\n it('should unobserve after first intersection if type is \"once\"', () => {\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { type: 'once' },\n );\n\n const entry = createEntry();\n observerCallback([entry]);\n\n expect(unobserveSpy).toHaveBeenCalledWith(element);\n });\n });\n\n describe('Safe flow', () => {\n it('should check for safe mode conditions on first run when not intersecting', () => {\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: true, threshold: 0.5 },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: 1000 } as DOMRectReadOnly,\n rootBounds: { height: 400 } as DOMRectReadOnly,\n });\n observerCallback([entry]);\n\n expect(fastdom.measure).toHaveBeenCalled();\n });\n\n it('should switch to safe observer if element is too tall for root', () => {\n const threshold = 0.5;\n const sourceHeight = 1000;\n const rootHeight = 400; // 1000 * 0.5 = 500 > 400 -> Should trigger safe mode\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: true, threshold },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: sourceHeight } as DOMRectReadOnly,\n rootBounds: { height: rootHeight } as DOMRectReadOnly,\n });\n\n observerCallback([entry]);\n\n expect(fastdom.mutate).toHaveBeenCalled();\n expect(unobserveSpy).toHaveBeenCalledWith(element);\n\n expect(IntersectionObserverMock).toHaveBeenCalledTimes(2);\n\n const safeObserverConfig = IntersectionObserverMock.mock.calls[1][1];\n expect(safeObserverConfig.threshold).toEqual([0]);\n expect(safeObserverConfig.rootMargin).toBe('0px 0px -10% 0px');\n });\n\n it('should NOT switch to safe observer if element fits in root', () => {\n const threshold = 0.5;\n const sourceHeight = 600;\n const rootHeight = 400; // 600 * 0.5 = 300 < 400 -> No safe mode needed\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: true, threshold },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: sourceHeight } as DOMRectReadOnly,\n rootBounds: { height: rootHeight } as DOMRectReadOnly,\n });\n\n observerCallback([entry]);\n\n expect(fastdom.measure).toHaveBeenCalled();\n expect(fastdom.mutate).not.toHaveBeenCalled();\n expect(unobserveSpy).not.toHaveBeenCalledWith(element);\n expect(IntersectionObserverMock).toHaveBeenCalledTimes(1);\n });\n\n it('should NOT switch to safe observer if useSafeViewEnter is false', () => {\n const threshold = 0.5;\n const sourceHeight = 1000;\n const rootHeight = 400;\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: false, threshold },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: sourceHeight } as DOMRectReadOnly,\n rootBounds: { height: rootHeight } as DOMRectReadOnly,\n });\n\n observerCallback([entry]);\n\n expect(fastdom.measure).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["mockAnimation","play","jest","fn","cancel","onFinish","isCSS","mock","getAnimation","mockReturnValue","measure","cb","mutate","describe","viewEnterHandler","fastdom","element","target","observerCallback","observerMock","observeSpy","unobserveSpy","IntersectionObserverMock","beforeEach","resetModules","require","default","document","body","innerHTML","createElement","appendChild","clearAllMocks","observe","unobserve","disconnect","options","window","IntersectionObserver","afterEach","remove","createEntry","overrides","isIntersecting","boundingClientRect","height","width","rootBounds","it","add","duration","namedEffect","type","expect","toHaveBeenCalled","toHaveBeenCalledWith","entry","mockReturnValueOnce","not","useSafeViewEnter","threshold","sourceHeight","rootHeight","toHaveBeenCalledTimes","safeObserverConfig","calls","toEqual","rootMargin","toBe"],"sources":["../../../src/__tests__/viewEnter.spec.ts"],"sourcesContent":["const mockAnimation = {\n play: jest.fn(),\n cancel: jest.fn(),\n onFinish: jest.fn(),\n isCSS: false,\n};\n\njest.mock('@wix/motion', () => ({\n getAnimation: jest.fn().mockReturnValue(mockAnimation),\n}));\n\njest.mock('fastdom', () => ({\n measure: jest.fn((cb) => cb()),\n mutate: jest.fn((cb) => cb()),\n}));\n\ndescribe('viewEnter handler', () => {\n let viewEnterHandler: any;\n let fastdom: any;\n let element: HTMLElement;\n let target: HTMLElement;\n let observerCallback: (entries: Partial<IntersectionObserverEntry>[]) => void;\n let observerMock: any;\n let observeSpy: jest.Mock;\n let unobserveSpy: jest.Mock;\n let IntersectionObserverMock: jest.Mock;\n\n beforeEach(() => {\n jest.resetModules();\n viewEnterHandler = require('../handlers/viewEnter').default;\n fastdom = require('fastdom');\n\n // Reset DOM\n document.body.innerHTML = '';\n element = document.createElement('div');\n target = document.createElement('div');\n document.body.appendChild(element);\n document.body.appendChild(target);\n\n jest.clearAllMocks();\n\n observeSpy = jest.fn();\n unobserveSpy = jest.fn();\n observerMock = {\n observe: observeSpy,\n unobserve: unobserveSpy,\n disconnect: jest.fn(),\n };\n\n IntersectionObserverMock = jest.fn((cb, options) => {\n observerCallback = cb;\n return observerMock;\n });\n (window as any).IntersectionObserver = IntersectionObserverMock;\n });\n\n afterEach(() => {\n // Clean up handlers to prevent state leakage between tests\n if (viewEnterHandler && element) {\n viewEnterHandler.remove(element);\n }\n if (viewEnterHandler && target) {\n viewEnterHandler.remove(target);\n }\n });\n\n const createEntry = (\n overrides: Partial<IntersectionObserverEntry> = {},\n ): Partial<IntersectionObserverEntry> => {\n return {\n target: element,\n isIntersecting: true,\n boundingClientRect: {\n height: 100,\n width: 100,\n } as unknown as DOMRectReadOnly,\n rootBounds: {\n height: 100,\n width: 100,\n } as unknown as DOMRectReadOnly,\n ...overrides,\n };\n };\n\n describe('Regular flow', () => {\n it('should create an IntersectionObserver and observe the source', () => {\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n {},\n );\n\n expect(IntersectionObserverMock).toHaveBeenCalled();\n expect(observeSpy).toHaveBeenCalledWith(element);\n });\n\n it('should unobserve after first intersection if type is \"once\"', () => {\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { type: 'once' },\n );\n\n const entry = createEntry();\n observerCallback([entry]);\n\n expect(unobserveSpy).toHaveBeenCalledWith(element);\n });\n });\n\n describe('Null animation handling', () => {\n it('should not create observer when getAnimation returns null', () => {\n const { getAnimation } = require('@wix/motion');\n getAnimation.mockReturnValueOnce(null);\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n {},\n );\n\n expect(IntersectionObserverMock).not.toHaveBeenCalled();\n expect(observeSpy).not.toHaveBeenCalled();\n });\n });\n\n describe('Safe flow', () => {\n it('should check for safe mode conditions on first run when not intersecting', () => {\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: true, threshold: 0.5 },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: 1000 } as DOMRectReadOnly,\n rootBounds: { height: 400 } as DOMRectReadOnly,\n });\n observerCallback([entry]);\n\n expect(fastdom.measure).toHaveBeenCalled();\n });\n\n it('should switch to safe observer if element is too tall for root', () => {\n const threshold = 0.5;\n const sourceHeight = 1000;\n const rootHeight = 400; // 1000 * 0.5 = 500 > 400 -> Should trigger safe mode\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: true, threshold },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: sourceHeight } as DOMRectReadOnly,\n rootBounds: { height: rootHeight } as DOMRectReadOnly,\n });\n\n observerCallback([entry]);\n\n expect(fastdom.mutate).toHaveBeenCalled();\n expect(unobserveSpy).toHaveBeenCalledWith(element);\n\n expect(IntersectionObserverMock).toHaveBeenCalledTimes(2);\n\n const safeObserverConfig = IntersectionObserverMock.mock.calls[1][1];\n expect(safeObserverConfig.threshold).toEqual([0]);\n expect(safeObserverConfig.rootMargin).toBe('0px 0px -10% 0px');\n });\n\n it('should NOT switch to safe observer if element fits in root', () => {\n const threshold = 0.5;\n const sourceHeight = 600;\n const rootHeight = 400; // 600 * 0.5 = 300 < 400 -> No safe mode needed\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: true, threshold },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: sourceHeight } as DOMRectReadOnly,\n rootBounds: { height: rootHeight } as DOMRectReadOnly,\n });\n\n observerCallback([entry]);\n\n expect(fastdom.measure).toHaveBeenCalled();\n expect(fastdom.mutate).not.toHaveBeenCalled();\n expect(unobserveSpy).not.toHaveBeenCalledWith(element);\n expect(IntersectionObserverMock).toHaveBeenCalledTimes(1);\n });\n\n it('should NOT switch to safe observer if useSafeViewEnter is false', () => {\n const threshold = 0.5;\n const sourceHeight = 1000;\n const rootHeight = 400;\n\n viewEnterHandler.add(\n element,\n target,\n { duration: 1000, namedEffect: { type: 'FadeIn' } },\n { useSafeViewEnter: false, threshold },\n );\n\n const entry = createEntry({\n isIntersecting: false,\n boundingClientRect: { height: sourceHeight } as DOMRectReadOnly,\n rootBounds: { height: rootHeight } as DOMRectReadOnly,\n });\n\n observerCallback([entry]);\n\n expect(fastdom.measure).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_utilities","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","selectorCondition","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","sourceKey","sourceRoot","instance","interactionVariations","effects","effectId","effectOptions","dataCache","targetKey_","interactionId","getInterpolatedKey","addedInteractions","mql","getMediaQuery","conditions","matches","targetElement","Interact","getElement","watchChildList","getSelectorCondition","addEffectsForTarget","targetKey","_instance$get","get","interactionIds","Object","keys","interactionId_","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","asCombinator","addItemFilter","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","reducedMotion","forceReducedMotion","allowA11yTriggers","getInstance","setElement","triggers","hasTriggers","hasEffects","addListItems"],"sources":["../../../src/core/add.ts"],"sourcesContent":["import type {\n Effect,\n TriggerType,\n EffectRef,\n InteractionParamsTypes,\n TransitionEffect,\n IInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport {\n createTransitionCSS,\n getMediaQuery,\n getSelectorCondition,\n} from '../utils';\nimport { getInterpolatedKey } from './utilities';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: IInteractElement,\n): HTMLElement | HTMLElement[] | null {\n if (data.listContainer) {\n const container = root.querySelector(data.listContainer);\n\n if (!container) {\n console.warn(\n `Interact: No container found for list container \"${data.listContainer}\"`,\n );\n\n return [];\n }\n\n if (data.selector) {\n return Array.from(\n container.querySelectorAll(data.selector),\n ) as HTMLElement[];\n }\n\n return Array.from(container.children) as HTMLElement[];\n }\n\n if (data.selector) {\n const element = root.querySelector(data.selector);\n\n if (element) {\n return element as HTMLElement;\n } else {\n console.warn(\n `Interact: No element found for selector \"${data.selector}\"`,\n );\n }\n }\n\n return root.firstElementChild as HTMLElement | null;\n}\n\nfunction _queryItemElement(\n data: Interaction | Effect,\n elements: HTMLElement[],\n): HTMLElement[] {\n return elements\n .map((element) => {\n return data.selector ? element.querySelector(data.selector) : element;\n })\n .filter(Boolean) as HTMLElement[];\n}\n\nfunction _getInteractionElements(\n interaction: InteractionTrigger,\n effect: Effect,\n source: IInteractElement,\n target: IInteractElement,\n sourceElements?: HTMLElement[],\n targetElements?: HTMLElement[],\n): [HTMLElement | HTMLElement[] | null, HTMLElement | HTMLElement[] | null] {\n return [\n sourceElements\n ? _queryItemElement(interaction, sourceElements)\n : _getElementsFromData(interaction, source),\n targetElements\n ? _queryItemElement(effect, targetElements)\n : _getElementsFromData(effect, target),\n ];\n}\n\nfunction _applyInteraction(\n key: string,\n interaction: InteractionTrigger,\n effect: Effect,\n sourceElements: HTMLElement | HTMLElement[],\n targetElements: HTMLElement | HTMLElement[],\n selectorCondition?: string,\n) {\n const isSourceArray = Array.isArray(sourceElements);\n const isTargetArray = Array.isArray(targetElements);\n\n if (isSourceArray) {\n sourceElements.forEach((sourceEl, index) => {\n const targetEl = isTargetArray ? targetElements[index] : targetElements;\n\n if (targetEl) {\n addInteraction(\n key,\n sourceEl,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n selectorCondition,\n );\n }\n });\n } else {\n const targets = isTargetArray ? targetElements : [targetElements];\n targets.forEach((targetEl) => {\n addInteraction(\n key,\n sourceElements,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n selectorCondition,\n );\n });\n }\n}\n\nfunction _addInteraction(\n sourceKey: string,\n sourceRoot: IInteractElement,\n instance: Interact,\n interaction: Interaction,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n const targetKey_ = effectOptions.key;\n\n const interactionId = getInterpolatedKey(effect.interactionId!, sourceKey);\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n if (instance.addedInteractions[interactionId!] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n interactionVariations[interactionId!] = true;\n\n const target = targetKey_ && getInterpolatedKey(targetKey_, sourceKey);\n\n let targetElement;\n if (target) {\n targetElement = Interact.getElement(target);\n\n if (!targetElement) {\n // Bail out :: no target element in cache\n return;\n }\n\n if (effectOptions.listContainer) {\n targetElement.watchChildList(effectOptions.listContainer);\n }\n } else {\n // target is not specified - fallback to same as source\n targetElement = sourceRoot;\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceRoot,\n targetElement!,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n return;\n }\n\n instance.addedInteractions[interactionId!] = true;\n\n const key = target || interaction.key;\n \n const selectorCondition = getSelectorCondition(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n selectorCondition,\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n targetKey: string,\n element: IInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.get(targetKey)?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, targetKey);\n\n if (instance.addedInteractions[interactionId] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n const effectVariations = effects[interactionId_];\n\n // use `some` to short-circuit after the first effect that matches the conditions\n // eslint-disable-next-line array-callback-return\n effectVariations.some(({ effect, ...interaction }) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance!.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (listContainer && effectOptions.listContainer !== listContainer) {\n // skip this effect if a listContainer was provided and it's not matching this effect.listContainer\n return false;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n const sourceKey =\n interaction.key && getInterpolatedKey(interaction.key, targetKey);\n const sourceElement = Interact.getElement(sourceKey);\n\n if (!sourceElement) {\n // Bail out :: no source or target elements in cache\n return true;\n }\n\n if (effectOptions.listContainer) {\n element.watchChildList(effectOptions.listContainer);\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceElement,\n element,\n undefined,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n // Bail out :: no source or target elements found in DOM\n return true;\n }\n\n instance!.addedInteractions[interactionId] = true;\n\n\n const selectorCondition = getSelectorCondition(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n _applyInteraction(\n targetKey,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements, \n selectorCondition,\n );\n\n // short-circuit the loop since we have a match\n return true;\n }\n });\n });\n\n return interactionIds.length > 0;\n}\n\n/**\n * Registers a handler to an event on a given element.\n */\nfunction addInteraction<T extends TriggerType>(\n key: string,\n source: HTMLElement,\n trigger: T,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n selectorCondition?: string,\n): void {\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n const args: CreateTransitionCSSParams = {\n key,\n effectId: (effect as Effect).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, {\n asCombinator: true,\n addItemFilter: true,\n }),\n selectorCondition\n };\n\n const root = target.closest('interact-element') as IInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(source, target, effect, options, {\n reducedMotion: Interact.forceReducedMotion,\n allowA11yTriggers: Interact.allowA11yTriggers,\n selectorCondition,\n });\n}\n\n/**\n * Adds all events and effects to an element based on config\n */\nexport function add(element: IInteractElement, key: string): boolean {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n console.warn(`No instance found for key: ${key}`);\n\n // even if we don't find a matching instance, we still want to cache the element\n Interact.setElement(key, element);\n return false;\n }\n\n const { triggers = [] } = instance?.get(key) || {};\n const hasTriggers = triggers.length > 0;\n\n instance.setElement(key, element);\n\n triggers.forEach((interaction) => {\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n if (interaction.listContainer) {\n element.watchChildList(interaction.listContainer);\n }\n\n _addInteraction(key, element, instance!, interaction);\n }\n });\n\n let hasEffects = false;\n if (instance) {\n hasEffects = addEffectsForTarget(key, element, instance);\n }\n\n return hasTriggers || hasEffects;\n}\n\nexport function addListItems(\n root: IInteractElement,\n key: string,\n listContainer: string,\n elements: HTMLElement[],\n) {\n const instance = Interact.getInstance(key);\n\n if (instance) {\n const { triggers = [] } = instance?.get(key) || {};\n\n triggers.forEach((interaction) => {\n if (interaction.listContainer !== listContainer) {\n return;\n }\n\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n _addInteraction(key, root, instance!, interaction, elements);\n }\n });\n\n addEffectsForTarget(key, root, instance, listContainer, elements);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_utils","require","_utilities","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","selectorCondition","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","sourceKey","sourceRoot","instance","interactionVariations","effects","effectId","effectOptions","dataCache","targetKey_","interactionId","getInterpolatedKey","addedInteractions","mql","getMediaQuery","conditions","matches","targetElement","Interact","getElement","watchChildList","getSelectorCondition","addEffectsForTarget","targetKey","_instance$get","get","interactionIds","Object","keys","interactionId_","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","asCombinator","addItemFilter","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","reducedMotion","forceReducedMotion","allowA11yTriggers","getInstance","setElement","triggers","hasTriggers","hasEffects","addListItems"],"sources":["../../../src/core/add.ts"],"sourcesContent":["import type {\n Effect,\n TriggerType,\n EffectRef,\n InteractionParamsTypes,\n TransitionEffect,\n IInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport {\n createTransitionCSS,\n getMediaQuery,\n getSelectorCondition,\n} from '../utils';\nimport { getInterpolatedKey } from './utilities';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: IInteractElement,\n): HTMLElement | HTMLElement[] | null {\n if (data.listContainer) {\n const container = root.querySelector(data.listContainer);\n\n if (!container) {\n console.warn(\n `Interact: No container found for list container \"${data.listContainer}\"`,\n );\n\n return [];\n }\n\n if (data.selector) {\n return Array.from(\n container.querySelectorAll(data.selector),\n ) as HTMLElement[];\n }\n\n return Array.from(container.children) as HTMLElement[];\n }\n\n if (data.selector) {\n const element = root.querySelector(data.selector);\n\n if (element) {\n return element as HTMLElement;\n } else {\n console.warn(\n `Interact: No element found for selector \"${data.selector}\"`,\n );\n }\n }\n\n return root.firstElementChild as HTMLElement | null;\n}\n\nfunction _queryItemElement(\n data: Interaction | Effect,\n elements: HTMLElement[],\n): HTMLElement[] {\n return elements\n .map((element) => {\n return data.selector ? element.querySelector(data.selector) : element;\n })\n .filter(Boolean) as HTMLElement[];\n}\n\nfunction _getInteractionElements(\n interaction: InteractionTrigger,\n effect: Effect,\n source: IInteractElement,\n target: IInteractElement,\n sourceElements?: HTMLElement[],\n targetElements?: HTMLElement[],\n): [HTMLElement | HTMLElement[] | null, HTMLElement | HTMLElement[] | null] {\n return [\n sourceElements\n ? _queryItemElement(interaction, sourceElements)\n : _getElementsFromData(interaction, source),\n targetElements\n ? _queryItemElement(effect, targetElements)\n : _getElementsFromData(effect, target),\n ];\n}\n\nfunction _applyInteraction(\n key: string,\n interaction: InteractionTrigger,\n effect: Effect,\n sourceElements: HTMLElement | HTMLElement[],\n targetElements: HTMLElement | HTMLElement[],\n selectorCondition?: string,\n) {\n const isSourceArray = Array.isArray(sourceElements);\n const isTargetArray = Array.isArray(targetElements);\n\n if (isSourceArray) {\n sourceElements.forEach((sourceEl, index) => {\n const targetEl = isTargetArray ? targetElements[index] : targetElements;\n\n if (targetEl) {\n addInteraction(\n key,\n sourceEl,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n selectorCondition,\n );\n }\n });\n } else {\n const targets = isTargetArray ? targetElements : [targetElements];\n targets.forEach((targetEl) => {\n addInteraction(\n key,\n sourceElements,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n selectorCondition,\n );\n });\n }\n}\n\nfunction _addInteraction(\n sourceKey: string,\n sourceRoot: IInteractElement,\n instance: Interact,\n interaction: Interaction,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n const targetKey_ = effectOptions.key;\n\n const interactionId = getInterpolatedKey(effect.interactionId!, sourceKey);\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n if (instance.addedInteractions[interactionId!] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n interactionVariations[interactionId!] = true;\n\n const target = targetKey_ && getInterpolatedKey(targetKey_, sourceKey);\n\n let targetElement;\n if (target) {\n targetElement = Interact.getElement(target);\n\n if (!targetElement) {\n // Bail out :: no target element in cache\n return;\n }\n\n if (effectOptions.listContainer) {\n targetElement.watchChildList(effectOptions.listContainer);\n }\n } else {\n // target is not specified - fallback to same as source\n targetElement = sourceRoot;\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceRoot,\n targetElement!,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n return;\n }\n\n instance.addedInteractions[interactionId!] = true;\n\n const key = target || interaction.key;\n\n const selectorCondition = getSelectorCondition(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n selectorCondition,\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n targetKey: string,\n element: IInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.get(targetKey)?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, targetKey);\n\n if (instance.addedInteractions[interactionId] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n const effectVariations = effects[interactionId_];\n\n // use `some` to short-circuit after the first effect that matches the conditions\n // eslint-disable-next-line array-callback-return\n effectVariations.some(({ effect, ...interaction }) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance!.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (listContainer && effectOptions.listContainer !== listContainer) {\n // skip this effect if a listContainer was provided and it's not matching this effect.listContainer\n return false;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n const sourceKey =\n interaction.key && getInterpolatedKey(interaction.key, targetKey);\n const sourceElement = Interact.getElement(sourceKey);\n\n if (!sourceElement) {\n // Bail out :: no source or target elements in cache\n return true;\n }\n\n if (effectOptions.listContainer) {\n element.watchChildList(effectOptions.listContainer);\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceElement,\n element,\n undefined,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n // Bail out :: no source or target elements found in DOM\n return true;\n }\n\n instance!.addedInteractions[interactionId] = true;\n\n const selectorCondition = getSelectorCondition(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n _applyInteraction(\n targetKey,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\n selectorCondition,\n );\n\n // short-circuit the loop since we have a match\n return true;\n }\n });\n });\n\n return interactionIds.length > 0;\n}\n\n/**\n * Registers a handler to an event on a given element.\n */\nfunction addInteraction<T extends TriggerType>(\n key: string,\n source: HTMLElement,\n trigger: T,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n selectorCondition?: string,\n): void {\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n const args: CreateTransitionCSSParams = {\n key,\n effectId: (effect as Effect).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, {\n asCombinator: true,\n addItemFilter: true,\n }),\n selectorCondition,\n };\n\n const root = target.closest('interact-element') as IInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(source, target, effect, options, {\n reducedMotion: Interact.forceReducedMotion,\n allowA11yTriggers: Interact.allowA11yTriggers,\n selectorCondition,\n });\n}\n\n/**\n * Adds all events and effects to an element based on config\n */\nexport function add(element: IInteractElement, key: string): boolean {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n console.warn(`No instance found for key: ${key}`);\n\n // even if we don't find a matching instance, we still want to cache the element\n Interact.setElement(key, element);\n return false;\n }\n\n const { triggers = [] } = instance?.get(key) || {};\n const hasTriggers = triggers.length > 0;\n\n instance.setElement(key, element);\n\n triggers.forEach((interaction) => {\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n if (interaction.listContainer) {\n element.watchChildList(interaction.listContainer);\n }\n\n _addInteraction(key, element, instance!, interaction);\n }\n });\n\n let hasEffects = false;\n if (instance) {\n hasEffects = addEffectsForTarget(key, element, instance);\n }\n\n return hasTriggers || hasEffects;\n}\n\nexport function addListItems(\n root: IInteractElement,\n key: string,\n listContainer: string,\n elements: HTMLElement[],\n) {\n const instance = Interact.getInstance(key);\n\n if (instance) {\n const { triggers = [] } = instance?.get(key) || {};\n\n triggers.forEach((interaction) => {\n if (interaction.listContainer !== listContainer) {\n return;\n }\n\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n _addInteraction(key, root, instance!, interaction, elements);\n }\n });\n\n addEffectsForTarget(key, root, instance, listContainer, elements);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,11 +7,16 @@ var _utilities = require("./utilities");
7
7
  const handlerMap = new WeakMap();
8
8
  function addAnimationEndHandler(source, target, effect, __, globalOptions) {
9
9
  const animation = (0, _motion.getAnimation)(target, (0, _utilities.effectToAnimationOptions)(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
10
+ if (!animation) {
11
+ return;
12
+ }
10
13
  const {
11
14
  selectorCondition
12
15
  } = globalOptions || {};
13
16
  const handler = () => {
14
- if (selectorCondition && !target.matches(selectorCondition)) return;
17
+ if (selectorCondition && !target.matches(selectorCondition)) {
18
+ return;
19
+ }
15
20
  animation.play();
16
21
  };
17
22
  const cleanup = () => {
@@ -1 +1 @@
1
- {"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","addAnimationEndHandler","source","target","effect","__","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","selectorCondition","handler","matches","play","cleanup","cancel","removeEventListener","handlerObj","addHandlerToMap","addEventListener","removeAnimationEndHandler","element","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/animationEnd.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n AnimationEndParams,\n TimeEffect,\n HandlerObjectMap,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction addAnimationEndHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n __: AnimationEndParams,\n globalOptions?: InteractionGlobalOptions,\n): void {\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n const {selectorCondition} = globalOptions || {};\n const handler = () => {\n if (selectorCondition && !target.matches(selectorCondition)) return;\n animation.play();\n };\n const cleanup = () => {\n animation.cancel();\n source.removeEventListener('animationend', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('animationend', handler);\n}\n\nfunction removeAnimationEndHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addAnimationEndHandler,\n remove: removeAnimationEndHandler,\n};\n"],"mappings":";;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAOA,IAAAC,UAAA,GAAAD,OAAA;AAMA,MAAME,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,sBAAsBA,CAC7BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAkB,EAClBC,EAAsB,EACtBC,aAAwC,EAClC;EACN,MAAMC,SAAS,GAAG,IAAAC,oBAAY,EAC5BL,MAAM,EACN,IAAAM,mCAAwB,EAACL,MAAM,CAAC,EAChCM,SAAS,EACTJ,aAAa,oBAAbA,aAAa,CAAEK,aACjB,CAAmB;EACnB,MAAM;IAACC;EAAiB,CAAC,GAAGN,aAAa,IAAI,CAAC,CAAC;EAC/C,MAAMO,OAAO,GAAGA,CAAA,KAAM;IACpB,IAAID,iBAAiB,IAAI,CAACT,MAAM,CAACW,OAAO,CAACF,iBAAiB,CAAC,EAAE;IAC7DL,SAAS,CAACQ,IAAI,CAAC,CAAC;EAClB,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBT,SAAS,CAACU,MAAM,CAAC,CAAC;IAClBf,MAAM,CAACgB,mBAAmB,CAAC,cAAc,EAAEL,OAAO,CAAC;EACrD,CAAC;EAED,MAAMM,UAAU,GAAG;IAAEjB,MAAM;IAAEC,MAAM;IAAEa;EAAQ,CAAC;EAC9C,IAAAI,0BAAe,EAACrB,UAAU,EAAEG,MAAM,EAAEiB,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAACrB,UAAU,EAAEI,MAAM,EAAEgB,UAAU,CAAC;EAE/CjB,MAAM,CAACmB,gBAAgB,CAAC,cAAc,EAAER,OAAO,CAAC;AAClD;AAEA,SAASS,yBAAyBA,CAACC,OAAoB,EAAQ;EAC7D,IAAAC,sCAA2B,EAACzB,UAAU,EAAEwB,OAAO,CAAC;AAClD;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAE3B,sBAAsB;EAC3B4B,MAAM,EAAEP;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","addAnimationEndHandler","source","target","effect","__","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","selectorCondition","handler","matches","play","cleanup","cancel","removeEventListener","handlerObj","addHandlerToMap","addEventListener","removeAnimationEndHandler","element","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/animationEnd.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n AnimationEndParams,\n TimeEffect,\n HandlerObjectMap,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction addAnimationEndHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n __: AnimationEndParams,\n globalOptions?: InteractionGlobalOptions,\n): void {\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n\n if (!animation) {\n return;\n }\n\n const { selectorCondition } = globalOptions || {};\n const handler = () => {\n if (selectorCondition && !target.matches(selectorCondition)) {\n return;\n }\n animation.play();\n };\n const cleanup = () => {\n animation.cancel();\n source.removeEventListener('animationend', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('animationend', handler);\n}\n\nfunction removeAnimationEndHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addAnimationEndHandler,\n remove: removeAnimationEndHandler,\n};\n"],"mappings":";;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAOA,IAAAC,UAAA,GAAAD,OAAA;AAMA,MAAME,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,sBAAsBA,CAC7BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAkB,EAClBC,EAAsB,EACtBC,aAAwC,EAClC;EACN,MAAMC,SAAS,GAAG,IAAAC,oBAAY,EAC5BL,MAAM,EACN,IAAAM,mCAAwB,EAACL,MAAM,CAAC,EAChCM,SAAS,EACTJ,aAAa,oBAAbA,aAAa,CAAEK,aACjB,CAAmB;EAEnB,IAAI,CAACJ,SAAS,EAAE;IACd;EACF;EAEA,MAAM;IAAEK;EAAkB,CAAC,GAAGN,aAAa,IAAI,CAAC,CAAC;EACjD,MAAMO,OAAO,GAAGA,CAAA,KAAM;IACpB,IAAID,iBAAiB,IAAI,CAACT,MAAM,CAACW,OAAO,CAACF,iBAAiB,CAAC,EAAE;MAC3D;IACF;IACAL,SAAS,CAACQ,IAAI,CAAC,CAAC;EAClB,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBT,SAAS,CAACU,MAAM,CAAC,CAAC;IAClBf,MAAM,CAACgB,mBAAmB,CAAC,cAAc,EAAEL,OAAO,CAAC;EACrD,CAAC;EAED,MAAMM,UAAU,GAAG;IAAEjB,MAAM;IAAEC,MAAM;IAAEa;EAAQ,CAAC;EAC9C,IAAAI,0BAAe,EAACrB,UAAU,EAAEG,MAAM,EAAEiB,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAACrB,UAAU,EAAEI,MAAM,EAAEgB,UAAU,CAAC;EAE/CjB,MAAM,CAACmB,gBAAgB,CAAC,cAAc,EAAER,OAAO,CAAC;AAClD;AAEA,SAASS,yBAAyBA,CAACC,OAAoB,EAAQ;EAC7D,IAAAC,sCAA2B,EAACzB,UAAU,EAAEwB,OAAO,CAAC;AAClD;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAE3B,sBAAsB;EAC3B4B,MAAM,EAAEP;AACV,CAAC","ignoreList":[]}
@@ -7,13 +7,18 @@ var _utilities = require("./utilities");
7
7
  const handlerMap = new WeakMap();
8
8
  function createTimeEffectHandler(element, effect, options, globalOptions) {
9
9
  const animation = (0, _motion.getAnimation)(element, (0, _utilities.effectToAnimationOptions)(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
10
+ if (!animation) {
11
+ return;
12
+ }
10
13
  let initialPlay = true;
11
14
  const type = options.type || 'alternate';
12
15
  const {
13
16
  selectorCondition
14
17
  } = globalOptions || {};
15
18
  return event => {
16
- if (selectorCondition && !element.matches(selectorCondition)) return;
19
+ if (selectorCondition && !element.matches(selectorCondition)) {
20
+ return;
21
+ }
17
22
  if (type === 'alternate') {
18
23
  if (initialPlay) {
19
24
  initialPlay = false;
@@ -53,7 +58,9 @@ function createTransitionHandler(element, {
53
58
  }, options, selectorCondition) {
54
59
  const shouldSetStateOnElement = !!listContainer;
55
60
  return event => {
56
- if (selectorCondition && !element.matches(selectorCondition)) return;
61
+ if (selectorCondition && !element.matches(selectorCondition)) {
62
+ return;
63
+ }
57
64
  const interactElement = element.closest('interact-element');
58
65
  if (!interactElement) {
59
66
  return;
@@ -77,6 +84,9 @@ function addClickHandler(source, target, effect, options = {}, globalOptions) {
77
84
  });
78
85
  once = options.type === 'once';
79
86
  }
87
+ if (!handler) {
88
+ return;
89
+ }
80
90
  const cleanup = () => {
81
91
  source.removeEventListener('click', handler);
82
92
  if (globalOptions != null && globalOptions.allowA11yTriggers) {
@@ -1 +1 @@
1
- {"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","initialPlay","type","selectorCondition","event","matches","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","effectId","listContainer","listItemSelector","shouldSetStateOnElement","interactElement","closest","item","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","allowA11yTriggers","handlerObj","addHandlerToMap","addEventListener","e","pointerType","passive","tabIndex","code","preventDefault","removeClickHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/click.ts"],"sourcesContent":["import { getAnimation } from '@wix/motion';\nimport type { AnimationGroup } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IInteractElement,\n PointerTriggerParams,\n EffectBase,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect & EffectBase,\n options: PointerTriggerParams,\n globalOptions: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n let initialPlay = true;\n const type = options.type || 'alternate';\n const {selectorCondition} = globalOptions || {};\n return (event: MouseEvent | KeyboardEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) return;\n \n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n if (animation.playState === 'running') {\n animation.pause();\n } else if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\n if (animation.isCSS) {\n animation.onFinish(() => {\n element.dataset.motionEnter = 'done';\n });\n }\n\n animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {\n effectId,\n listContainer,\n listItemSelector,\n }: TransitionEffect & EffectBase & { effectId: string },\n options: StateParams,\n selectorCondition?: string,\n) {\n const shouldSetStateOnElement = !!listContainer;\n \n return (event: MouseEvent | KeyboardEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) return;\n const interactElement = element.closest(\n 'interact-element',\n ) as IInteractElement;\n if (!interactElement) {\n return;\n }\n\n let item;\n if (shouldSetStateOnElement) {\n item = element.closest(\n `${listContainer} > ${listItemSelector || ''}:has(:scope)`,\n ) as HTMLElement | null;\n }\n\n interactElement.toggleEffect(effectId, options.method || 'toggle', item);\n };\n}\n\nfunction addClickHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: (TimeEffect | TransitionEffect) & EffectBase,\n options: StateParams | PointerTriggerParams = {} as StateParams,\n globalOptions?: InteractionGlobalOptions,\n) {\n let handler: (event: MouseEvent | KeyboardEvent) => void;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n globalOptions?.selectorCondition,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n { reducedMotion: globalOptions?.reducedMotion, selectorCondition: globalOptions?.selectorCondition },\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('click', handler);\n if (globalOptions?.allowA11yTriggers) {\n source.removeEventListener('keydown', handler);\n }\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener(\n 'click',\n (e) => {\n if ((e as PointerEvent).pointerType) {\n handler(e);\n }\n },\n { passive: true, once },\n );\n\n if (globalOptions?.allowA11yTriggers) {\n source.tabIndex = 0;\n\n source.addEventListener(\n 'keydown',\n (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n event.preventDefault();\n handler(event);\n } else if (event.code === 'Enter') {\n handler(event);\n }\n },\n { once },\n );\n }\n}\n\nfunction removeClickHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addClickHandler,\n remove: removeClickHandler,\n};\n"],"mappings":";;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAYA,IAAAC,UAAA,GAAAD,OAAA;AAMA,MAAME,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,uBAAuBA,CAC9BC,OAAoB,EACpBC,MAA+B,EAC/BC,OAA6B,EAC7BC,aAAuC,EACvC;EACA,MAAMC,SAAS,GAAG,IAAAC,oBAAY,EAC5BL,OAAO,EACP,IAAAM,mCAAwB,EAACL,MAAM,CAAC,EAChCM,SAAS,EACTJ,aAAa,oBAAbA,aAAa,CAAEK,aACjB,CAAmB;EACnB,IAAIC,WAAW,GAAG,IAAI;EACtB,MAAMC,IAAI,GAAGR,OAAO,CAACQ,IAAI,IAAI,WAAW;EACxC,MAAM;IAACC;EAAiB,CAAC,GAAGR,aAAa,IAAI,CAAC,CAAC;EAC/C,OAAQS,KAAiC,IAAK;IAC5C,IAAID,iBAAiB,IAAI,CAACX,OAAO,CAACa,OAAO,CAACF,iBAAiB,CAAC,EAAE;IAE9D,IAAID,IAAI,KAAK,WAAW,EAAE;MACxB,IAAID,WAAW,EAAE;QACfA,WAAW,GAAG,KAAK;QACnBL,SAAS,CAACU,IAAI,CAAC,CAAC;MAClB,CAAC,MAAM;QACLV,SAAS,CAACW,OAAO,CAAC,CAAC;MACrB;IACF,CAAC,MAAM,IAAIL,IAAI,KAAK,OAAO,EAAE;MAC3B,IAAID,WAAW,EAAE;QACfA,WAAW,GAAG,KAAK;QACnBL,SAAS,CAACU,IAAI,CAAC,CAAC;MAClB,CAAC,MAAM;QACL,IAAIV,SAAS,CAACY,SAAS,KAAK,SAAS,EAAE;UACrCZ,SAAS,CAACa,KAAK,CAAC,CAAC;QACnB,CAAC,MAAM,IAAIb,SAAS,CAACY,SAAS,KAAK,UAAU,EAAE;UAC7C;UACAZ,SAAS,CAACU,IAAI,CAAC,CAAC;QAClB;MACF;IACF,CAAC,MAAM;MACL;MACA;MACAV,SAAS,CAACc,QAAQ,CAAC,CAAC,CAAC;MAErB,IAAId,SAAS,CAACe,KAAK,EAAE;QACnBf,SAAS,CAACgB,QAAQ,CAAC,MAAM;UACvBpB,OAAO,CAACqB,OAAO,CAACC,WAAW,GAAG,MAAM;QACtC,CAAC,CAAC;MACJ;MAEAlB,SAAS,CAACU,IAAI,CAAC,CAAC;IAClB;EACF,CAAC;AACH;AAEA,SAASS,uBAAuBA,CAC9BvB,OAAoB,EACpB;EACEwB,QAAQ;EACRC,aAAa;EACbC;AACoD,CAAC,EACvDxB,OAAoB,EACpBS,iBAA0B,EAC1B;EACA,MAAMgB,uBAAuB,GAAG,CAAC,CAACF,aAAa;EAE/C,OAAQb,KAAiC,IAAK;IAC5C,IAAID,iBAAiB,IAAI,CAACX,OAAO,CAACa,OAAO,CAACF,iBAAiB,CAAC,EAAE;IAC9D,MAAMiB,eAAe,GAAG5B,OAAO,CAAC6B,OAAO,CACrC,kBACF,CAAqB;IACrB,IAAI,CAACD,eAAe,EAAE;MACpB;IACF;IAEA,IAAIE,IAAI;IACR,IAAIH,uBAAuB,EAAE;MAC3BG,IAAI,GAAG9B,OAAO,CAAC6B,OAAO,CACpB,GAAGJ,aAAa,MAAMC,gBAAgB,IAAI,EAAE,cAC9C,CAAuB;IACzB;IAEAE,eAAe,CAACG,YAAY,CAACP,QAAQ,EAAEtB,OAAO,CAAC8B,MAAM,IAAI,QAAQ,EAAEF,IAAI,CAAC;EAC1E,CAAC;AACH;AAEA,SAASG,eAAeA,CACtBC,MAAmB,EACnBC,MAAmB,EACnBlC,MAAoD,EACpDC,OAA2C,GAAG,CAAC,CAAgB,EAC/DC,aAAwC,EACxC;EACA,IAAIiC,OAAoD;EACxD,IAAIC,IAAI,GAAG,KAAK;EAEhB,IACGpC,MAAM,CAAsBqC,UAAU,IACtCrC,MAAM,CAAsBsC,oBAAoB,EACjD;IACAH,OAAO,GAAGb,uBAAuB,CAC/BY,MAAM,EACNlC,MAAM,EACNC,OAAO,EACPC,aAAa,oBAAbA,aAAa,CAAEQ,iBACjB,CAAC;EACH,CAAC,MAAM;IACLyB,OAAO,GAAGrC,uBAAuB,CAC/BoC,MAAM,EACNlC,MAAM,EACNC,OAAO,EACP;MAAEM,aAAa,EAAEL,aAAa,oBAAbA,aAAa,CAAEK,aAAa;MAAEG,iBAAiB,EAAER,aAAa,oBAAbA,aAAa,CAAEQ;IAAkB,CACrG,CAAC;IACD0B,IAAI,GAAInC,OAAO,CAA0BQ,IAAI,KAAK,MAAM;EAC1D;EAEA,MAAM8B,OAAO,GAAGA,CAAA,KAAM;IACpBN,MAAM,CAACO,mBAAmB,CAAC,OAAO,EAAEL,OAAO,CAAC;IAC5C,IAAIjC,aAAa,YAAbA,aAAa,CAAEuC,iBAAiB,EAAE;MACpCR,MAAM,CAACO,mBAAmB,CAAC,SAAS,EAAEL,OAAO,CAAC;IAChD;EACF,CAAC;EAED,MAAMO,UAAU,GAAG;IAAET,MAAM;IAAEC,MAAM;IAAEK;EAAQ,CAAC;EAE9C,IAAAI,0BAAe,EAAC/C,UAAU,EAAEqC,MAAM,EAAES,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAAC/C,UAAU,EAAEsC,MAAM,EAAEQ,UAAU,CAAC;EAE/CT,MAAM,CAACW,gBAAgB,CACrB,OAAO,EACNC,CAAC,IAAK;IACL,IAAKA,CAAC,CAAkBC,WAAW,EAAE;MACnCX,OAAO,CAACU,CAAC,CAAC;IACZ;EACF,CAAC,EACD;IAAEE,OAAO,EAAE,IAAI;IAAEX;EAAK,CACxB,CAAC;EAED,IAAIlC,aAAa,YAAbA,aAAa,CAAEuC,iBAAiB,EAAE;IACpCR,MAAM,CAACe,QAAQ,GAAG,CAAC;IAEnBf,MAAM,CAACW,gBAAgB,CACrB,SAAS,EACRjC,KAAoB,IAAK;MACxB,IAAIA,KAAK,CAACsC,IAAI,KAAK,OAAO,EAAE;QAC1BtC,KAAK,CAACuC,cAAc,CAAC,CAAC;QACtBf,OAAO,CAACxB,KAAK,CAAC;MAChB,CAAC,MAAM,IAAIA,KAAK,CAACsC,IAAI,KAAK,OAAO,EAAE;QACjCd,OAAO,CAACxB,KAAK,CAAC;MAChB;IACF,CAAC,EACD;MAAEyB;IAAK,CACT,CAAC;EACH;AACF;AAEA,SAASe,kBAAkBA,CAACpD,OAAoB,EAAE;EAChD,IAAAqD,sCAA2B,EAACxD,UAAU,EAAEG,OAAO,CAAC;AAClD;AAAC,IAAAsD,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAExB,eAAe;EACpByB,MAAM,EAAEN;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","initialPlay","type","selectorCondition","event","matches","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","effectId","listContainer","listItemSelector","shouldSetStateOnElement","interactElement","closest","item","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","allowA11yTriggers","handlerObj","addHandlerToMap","addEventListener","e","pointerType","passive","tabIndex","code","preventDefault","removeClickHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/click.ts"],"sourcesContent":["import { getAnimation } from '@wix/motion';\nimport type { AnimationGroup } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IInteractElement,\n PointerTriggerParams,\n EffectBase,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect & EffectBase,\n options: PointerTriggerParams,\n globalOptions: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n\n if (!animation) {\n return;\n }\n\n let initialPlay = true;\n const type = options.type || 'alternate';\n const { selectorCondition } = globalOptions || {};\n return (event: MouseEvent | KeyboardEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) {\n return;\n }\n\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n if (animation.playState === 'running') {\n animation.pause();\n } else if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\n if (animation.isCSS) {\n animation.onFinish(() => {\n element.dataset.motionEnter = 'done';\n });\n }\n\n animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {\n effectId,\n listContainer,\n listItemSelector,\n }: TransitionEffect & EffectBase & { effectId: string },\n options: StateParams,\n selectorCondition?: string,\n) {\n const shouldSetStateOnElement = !!listContainer;\n\n return (event: MouseEvent | KeyboardEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) {\n return;\n }\n const interactElement = element.closest(\n 'interact-element',\n ) as IInteractElement;\n if (!interactElement) {\n return;\n }\n\n let item;\n if (shouldSetStateOnElement) {\n item = element.closest(\n `${listContainer} > ${listItemSelector || ''}:has(:scope)`,\n ) as HTMLElement | null;\n }\n\n interactElement.toggleEffect(effectId, options.method || 'toggle', item);\n };\n}\n\nfunction addClickHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: (TimeEffect | TransitionEffect) & EffectBase,\n options: StateParams | PointerTriggerParams = {} as StateParams,\n globalOptions?: InteractionGlobalOptions,\n) {\n let handler: ((event: MouseEvent | KeyboardEvent) => void) | undefined;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n globalOptions?.selectorCondition,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n {\n reducedMotion: globalOptions?.reducedMotion,\n selectorCondition: globalOptions?.selectorCondition,\n },\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n if (!handler) {\n return;\n }\n\n const cleanup = () => {\n source.removeEventListener('click', handler!);\n if (globalOptions?.allowA11yTriggers) {\n source.removeEventListener('keydown', handler!);\n }\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener(\n 'click',\n (e) => {\n if ((e as PointerEvent).pointerType) {\n handler!(e);\n }\n },\n { passive: true, once },\n );\n\n if (globalOptions?.allowA11yTriggers) {\n source.tabIndex = 0;\n\n source.addEventListener(\n 'keydown',\n (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n event.preventDefault();\n handler!(event);\n } else if (event.code === 'Enter') {\n handler!(event);\n }\n },\n { once },\n );\n }\n}\n\nfunction removeClickHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addClickHandler,\n remove: removeClickHandler,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -7,13 +7,18 @@ var _utilities = require("./utilities");
7
7
  const handlerMap = new WeakMap();
8
8
  function createTimeEffectHandler(element, effect, options, globalOptions) {
9
9
  const animation = (0, _motion.getAnimation)(element, (0, _utilities.effectToAnimationOptions)(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
10
+ if (!animation) {
11
+ return;
12
+ }
10
13
  const type = options.type || 'alternate';
11
- let initialPlay = true;
12
14
  const {
13
15
  selectorCondition
14
16
  } = globalOptions || {};
17
+ let initialPlay = true;
15
18
  return event => {
16
- if (selectorCondition && !element.matches(selectorCondition)) return;
19
+ if (selectorCondition && !element.matches(selectorCondition)) {
20
+ return;
21
+ }
17
22
  if (event.type === 'mouseenter' || event.type === 'focusin') {
18
23
  if (type === 'alternate') {
19
24
  if (initialPlay) {
@@ -61,7 +66,9 @@ function createTransitionHandler(element, {
61
66
  const isToggle = method === 'toggle';
62
67
  const shouldSetStateOnElement = !!listContainer;
63
68
  return event => {
64
- if (selectorCondition && !element.matches(selectorCondition)) return;
69
+ if (selectorCondition && !element.matches(selectorCondition)) {
70
+ return;
71
+ }
65
72
  const interactElement = element.closest('interact-element');
66
73
  if (!interactElement) {
67
74
  return;
@@ -92,6 +99,9 @@ function addHoverHandler(source, target, effect, options = {}, globalOptions) {
92
99
  });
93
100
  once = options.type === 'once';
94
101
  }
102
+ if (!handler) {
103
+ return;
104
+ }
95
105
  const cleanup = () => {
96
106
  source.removeEventListener('mouseenter', handler);
97
107
  source.removeEventListener('mouseleave', handler);
@@ -1 +1 @@
1
- {"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","type","initialPlay","selectorCondition","event","matches","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","interactElement","closest","item","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","allowA11yTriggers","handlerObj","addHandlerToMap","tabIndex","addEventListener","contains","relatedTarget","passive","addLeave","removeHoverHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/hover.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IInteractElement,\n PointerTriggerParams,\n EffectBase,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect & EffectBase,\n options: PointerTriggerParams,\n globalOptions: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n const type = options.type || 'alternate';\n let initialPlay = true;\n const {selectorCondition} = globalOptions || {};\n return (event: MouseEvent | FocusEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) return;\n if (event.type === 'mouseenter' || event.type === 'focusin') {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\n if (animation.isCSS) {\n animation.onFinish(() => {\n element.dataset.motionEnter = 'done';\n });\n }\n\n animation.play();\n }\n } else if (event.type === 'mouseleave' || event.type === 'focusout') {\n if (type === 'alternate') {\n animation.reverse();\n } else if (type === 'repeat') {\n animation.cancel();\n delete element.dataset.motionEnter;\n } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {\n effectId,\n listContainer,\n listItemSelector,\n }: TransitionEffect & EffectBase & { effectId: string },\n options: StateParams,\n selectorCondition?: string,\n) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n const shouldSetStateOnElement = !!listContainer;\n\n return (event: MouseEvent | FocusEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) return;\n const interactElement = element.closest(\n 'interact-element',\n ) as IInteractElement;\n if (!interactElement) {\n return;\n }\n\n let item;\n if (shouldSetStateOnElement) {\n item = element.closest(\n `${listContainer} > ${listItemSelector || ''}:has(:scope)`,\n ) as HTMLElement | null;\n }\n\n if (event.type === 'mouseenter' || event.type === 'focusin') {\n const method_ = isToggle ? 'add' : method;\n interactElement.toggleEffect(effectId, method_, item);\n } else if (\n (event.type === 'mouseleave' || event.type === 'focusout') &&\n isToggle\n ) {\n interactElement.toggleEffect(effectId, 'remove', item);\n }\n };\n}\n\nfunction addHoverHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: (TransitionEffect | TimeEffect) & EffectBase,\n options: StateParams | PointerTriggerParams = {},\n globalOptions: InteractionGlobalOptions,\n) {\n let handler: (event: MouseEvent | FocusEvent) => void;\n let isStateTrigger = false;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n globalOptions?.selectorCondition,\n );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n { reducedMotion: globalOptions?.reducedMotion, selectorCondition: globalOptions?.selectorCondition },\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('mouseenter', handler);\n source.removeEventListener('mouseleave', handler);\n if (globalOptions?.allowA11yTriggers) {\n source.removeEventListener('focusin', handler);\n source.removeEventListener('focusout', handler);\n }\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n if (globalOptions?.allowA11yTriggers) {\n source.tabIndex = 0;\n source.addEventListener(\n 'focusin',\n (event) => {\n if (!source.contains(event.relatedTarget as HTMLElement)) {\n handler(event);\n }\n },\n { once },\n );\n }\n\n source.addEventListener('mouseenter', handler, { passive: true, once });\n\n const addLeave = isStateTrigger\n ? ((options as StateParams).method || 'toggle') === 'toggle'\n : (options as PointerTriggerParams).type !== 'once';\n\n if (addLeave) {\n source.addEventListener('mouseleave', handler, { passive: true });\n\n if (globalOptions?.allowA11yTriggers) {\n source.addEventListener(\n 'focusout',\n (event) => {\n if (!source.contains(event.relatedTarget as HTMLElement)) {\n handler(event);\n }\n },\n { once },\n );\n }\n }\n}\n\nfunction removeHoverHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addHoverHandler,\n remove: removeHoverHandler,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","type","selectorCondition","initialPlay","event","matches","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","interactElement","closest","item","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","allowA11yTriggers","handlerObj","addHandlerToMap","tabIndex","addEventListener","contains","relatedTarget","passive","addLeave","removeHoverHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/hover.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IInteractElement,\n PointerTriggerParams,\n EffectBase,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect & EffectBase,\n options: PointerTriggerParams,\n globalOptions: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n\n if (!animation) {\n return;\n }\n\n const type = options.type || 'alternate';\n const { selectorCondition } = globalOptions || {};\n\n let initialPlay = true;\n\n return (event: MouseEvent | FocusEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) {\n return;\n }\n if (event.type === 'mouseenter' || event.type === 'focusin') {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\n if (animation.isCSS) {\n animation.onFinish(() => {\n element.dataset.motionEnter = 'done';\n });\n }\n\n animation.play();\n }\n } else if (event.type === 'mouseleave' || event.type === 'focusout') {\n if (type === 'alternate') {\n animation.reverse();\n } else if (type === 'repeat') {\n animation.cancel();\n delete element.dataset.motionEnter;\n } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {\n effectId,\n listContainer,\n listItemSelector,\n }: TransitionEffect & EffectBase & { effectId: string },\n options: StateParams,\n selectorCondition?: string,\n) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n const shouldSetStateOnElement = !!listContainer;\n\n return (event: MouseEvent | FocusEvent) => {\n if (selectorCondition && !element.matches(selectorCondition)) {\n return;\n }\n\n const interactElement = element.closest(\n 'interact-element',\n ) as IInteractElement;\n\n if (!interactElement) {\n return;\n }\n\n let item;\n if (shouldSetStateOnElement) {\n item = element.closest(\n `${listContainer} > ${listItemSelector || ''}:has(:scope)`,\n ) as HTMLElement | null;\n }\n\n if (event.type === 'mouseenter' || event.type === 'focusin') {\n const method_ = isToggle ? 'add' : method;\n interactElement.toggleEffect(effectId, method_, item);\n } else if (\n (event.type === 'mouseleave' || event.type === 'focusout') &&\n isToggle\n ) {\n interactElement.toggleEffect(effectId, 'remove', item);\n }\n };\n}\n\nfunction addHoverHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: (TransitionEffect | TimeEffect) & EffectBase,\n options: StateParams | PointerTriggerParams = {},\n globalOptions: InteractionGlobalOptions,\n) {\n let handler: ((event: MouseEvent | FocusEvent) => void) | undefined;\n let isStateTrigger = false;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n globalOptions?.selectorCondition,\n );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n {\n reducedMotion: globalOptions?.reducedMotion,\n selectorCondition: globalOptions?.selectorCondition,\n },\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n if (!handler) {\n return;\n }\n\n const cleanup = () => {\n source.removeEventListener('mouseenter', handler!);\n source.removeEventListener('mouseleave', handler!);\n if (globalOptions?.allowA11yTriggers) {\n source.removeEventListener('focusin', handler!);\n source.removeEventListener('focusout', handler!);\n }\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n if (globalOptions?.allowA11yTriggers) {\n source.tabIndex = 0;\n source.addEventListener(\n 'focusin',\n (event) => {\n if (!source.contains(event.relatedTarget as HTMLElement)) {\n handler!(event);\n }\n },\n { once },\n );\n }\n\n source.addEventListener('mouseenter', handler!, { passive: true, once });\n\n const addLeave = isStateTrigger\n ? ((options as StateParams).method || 'toggle') === 'toggle'\n : (options as PointerTriggerParams).type !== 'once';\n\n if (addLeave) {\n source.addEventListener('mouseleave', handler!, { passive: true });\n\n if (globalOptions?.allowA11yTriggers) {\n source.addEventListener(\n 'focusout',\n (event) => {\n if (!source.contains(event.relatedTarget as HTMLElement)) {\n handler!(event);\n }\n },\n { once },\n );\n }\n }\n}\n\nfunction removeHoverHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addHoverHandler,\n remove: removeHoverHandler,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -81,11 +81,14 @@ function getObserver(options, isSafeMode = false) {
81
81
  return observer;
82
82
  }
83
83
  function addViewEnterHandler(source, target, effect, options = {}, globalOptions) {
84
+ const animation = (0, _motion.getAnimation)(target, (0, _utilities.effectToAnimationOptions)(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
85
+ if (!animation) {
86
+ return;
87
+ }
84
88
  const observer = getObserver({
85
89
  ...viewEnterOptions,
86
90
  ...options
87
91
  });
88
- const animation = (0, _motion.getAnimation)(target, (0, _utilities.effectToAnimationOptions)(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
89
92
  if (animation != null && animation.isCSS && options.type === 'once') {
90
93
  animation.onFinish(() => {
91
94
  target.dataset.motionEnter = 'done';
@@ -95,7 +98,9 @@ function addViewEnterHandler(source, target, effect, options = {}, globalOptions
95
98
  selectorCondition
96
99
  } = globalOptions || {};
97
100
  const handler = () => {
98
- if (selectorCondition && !target.matches(selectorCondition)) return;
101
+ if (selectorCondition && !target.matches(selectorCondition)) {
102
+ return;
103
+ }
99
104
  animation.play(() => {
100
105
  if (!animation.isCSS) {
101
106
  target.dataset.motionEnter = 'done';
@@ -1 +1 @@
1
- {"version":3,"names":["_motion","require","_utilities","_fastdom","_interopRequireDefault","SAFE_OBSERVER_CONFIG","root","rootMargin","threshold","observers","handlerMap","WeakMap","elementFirstRun","WeakSet","elementObserverMap","viewEnterOptions","setOptions","options","getObserver","isSafeMode","key","JSON","stringify","config","inset","observer","IntersectionObserver","entries","forEach","entry","target","isFirstRun","has","add","useSafeViewEnter","isIntersecting","fastdom","measure","_entry$rootBounds","sourceHeight","boundingClientRect","height","rootHeight","rootBounds","Array","isArray","Math","min","needsSafeObserver","mutate","unobserve","safeObserver","set","observe","handlers","get","source","handler","type","delete","addViewEnterHandler","effect","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","isCSS","onFinish","dataset","motionEnter","selectorCondition","matches","play","cleanup","currentObserver","cancel","handlerObj","addHandlerToMap","removeViewEnterHandler","element","removeElementFromHandlerMap","_default","exports","default","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n TimeEffect,\n HandlerObjectMap,\n ViewEnterParams,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\nimport fastdom from 'fastdom';\n\nconst SAFE_OBSERVER_CONFIG: IntersectionObserverInit = {\n root: null,\n rootMargin: '0px 0px -10% 0px',\n threshold: [0],\n};\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\nconst elementFirstRun = new WeakSet<HTMLElement>();\nconst elementObserverMap = new WeakMap<HTMLElement, IntersectionObserver>();\nlet viewEnterOptions: Partial<ViewEnterParams> = {};\n\nfunction setOptions(options: Partial<ViewEnterParams>) {\n viewEnterOptions = options;\n}\n\nfunction getObserver(options: ViewEnterParams, isSafeMode: boolean = false) {\n const key = JSON.stringify({ ...options, isSafeMode });\n\n if (observers[key]) {\n return observers[key];\n }\n\n const config: IntersectionObserverInit = isSafeMode\n ? SAFE_OBSERVER_CONFIG\n : {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n };\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const target = entry.target as HTMLElement;\n const isFirstRun = !elementFirstRun.has(target);\n\n if (isFirstRun) {\n elementFirstRun.add(target);\n\n if (options.useSafeViewEnter && !entry.isIntersecting) {\n fastdom.measure(() => {\n const sourceHeight = entry.boundingClientRect.height;\n const rootHeight = entry.rootBounds?.height;\n\n if (!rootHeight) {\n return;\n }\n\n const threshold = Array.isArray(options.threshold)\n ? Math.min(...options.threshold)\n : options.threshold;\n\n const needsSafeObserver =\n threshold && sourceHeight * threshold > rootHeight;\n\n if (needsSafeObserver) {\n fastdom.mutate(() => {\n observer.unobserve(target);\n const safeObserver = getObserver(options, true);\n elementObserverMap.set(target, safeObserver);\n safeObserver.observe(target);\n });\n }\n });\n return;\n }\n }\n\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(target);\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 elementFirstRun.delete(target);\n }\n }\n });\n }, config);\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 globalOptions?: InteractionGlobalOptions,\n) {\n const observer = getObserver({ ...viewEnterOptions, ...options });\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n\n if (animation?.isCSS && options.type === 'once') {\n animation.onFinish(() => {\n target.dataset.motionEnter = 'done';\n });\n }\n const {selectorCondition} = globalOptions || {};\n const handler = () => {\n if (selectorCondition && !target.matches(selectorCondition)) return;\n animation.play(() => {\n if (!animation.isCSS) {\n target.dataset.motionEnter = 'done';\n }\n });\n };\n const cleanup = () => {\n const currentObserver = elementObserverMap.get(source) || observer;\n currentObserver.unobserve(source);\n animation.cancel();\n elementFirstRun.delete(source);\n elementObserverMap.delete(source);\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n elementObserverMap.set(source, observer);\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 setOptions,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_motion","require","_utilities","_fastdom","_interopRequireDefault","SAFE_OBSERVER_CONFIG","root","rootMargin","threshold","observers","handlerMap","WeakMap","elementFirstRun","WeakSet","elementObserverMap","viewEnterOptions","setOptions","options","getObserver","isSafeMode","key","JSON","stringify","config","inset","observer","IntersectionObserver","entries","forEach","entry","target","isFirstRun","has","add","useSafeViewEnter","isIntersecting","fastdom","measure","_entry$rootBounds","sourceHeight","boundingClientRect","height","rootHeight","rootBounds","Array","isArray","Math","min","needsSafeObserver","mutate","unobserve","safeObserver","set","observe","handlers","get","source","handler","type","delete","addViewEnterHandler","effect","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","isCSS","onFinish","dataset","motionEnter","selectorCondition","matches","play","cleanup","currentObserver","cancel","handlerObj","addHandlerToMap","removeViewEnterHandler","element","removeElementFromHandlerMap","_default","exports","default","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n TimeEffect,\n HandlerObjectMap,\n ViewEnterParams,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\nimport fastdom from 'fastdom';\n\nconst SAFE_OBSERVER_CONFIG: IntersectionObserverInit = {\n root: null,\n rootMargin: '0px 0px -10% 0px',\n threshold: [0],\n};\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\nconst elementFirstRun = new WeakSet<HTMLElement>();\nconst elementObserverMap = new WeakMap<HTMLElement, IntersectionObserver>();\nlet viewEnterOptions: Partial<ViewEnterParams> = {};\n\nfunction setOptions(options: Partial<ViewEnterParams>) {\n viewEnterOptions = options;\n}\n\nfunction getObserver(options: ViewEnterParams, isSafeMode: boolean = false) {\n const key = JSON.stringify({ ...options, isSafeMode });\n\n if (observers[key]) {\n return observers[key];\n }\n\n const config: IntersectionObserverInit = isSafeMode\n ? SAFE_OBSERVER_CONFIG\n : {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n };\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const target = entry.target as HTMLElement;\n const isFirstRun = !elementFirstRun.has(target);\n\n if (isFirstRun) {\n elementFirstRun.add(target);\n\n if (options.useSafeViewEnter && !entry.isIntersecting) {\n fastdom.measure(() => {\n const sourceHeight = entry.boundingClientRect.height;\n const rootHeight = entry.rootBounds?.height;\n\n if (!rootHeight) {\n return;\n }\n\n const threshold = Array.isArray(options.threshold)\n ? Math.min(...options.threshold)\n : options.threshold;\n\n const needsSafeObserver =\n threshold && sourceHeight * threshold > rootHeight;\n\n if (needsSafeObserver) {\n fastdom.mutate(() => {\n observer.unobserve(target);\n const safeObserver = getObserver(options, true);\n elementObserverMap.set(target, safeObserver);\n safeObserver.observe(target);\n });\n }\n });\n return;\n }\n }\n\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(target);\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 elementFirstRun.delete(target);\n }\n }\n });\n }, config);\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 globalOptions?: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n\n if (!animation) {\n return;\n }\n\n const observer = getObserver({ ...viewEnterOptions, ...options });\n\n if (animation?.isCSS && options.type === 'once') {\n animation.onFinish(() => {\n target.dataset.motionEnter = 'done';\n });\n }\n const { selectorCondition } = globalOptions || {};\n const handler = () => {\n if (selectorCondition && !target.matches(selectorCondition)) {\n return;\n }\n animation.play(() => {\n if (!animation.isCSS) {\n target.dataset.motionEnter = 'done';\n }\n });\n };\n\n const cleanup = () => {\n const currentObserver = elementObserverMap.get(source) || observer;\n currentObserver.unobserve(source);\n animation.cancel();\n elementFirstRun.delete(source);\n elementObserverMap.delete(source);\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n elementObserverMap.set(source, observer);\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 setOptions,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -59,7 +59,9 @@ function addViewProgressHandler(source, target, effect, __, globalOptions) {
59
59
  });
60
60
  }
61
61
  }
62
- if (!cleanup) return;
62
+ if (!cleanup) {
63
+ return;
64
+ }
63
65
  const handlerObj = {
64
66
  source,
65
67
  target,
@@ -1 +1 @@
1
- {"version":3,"names":["_motion","require","_fizban","_utilities","scrollManagerMap","WeakMap","scrollOptionsGetter","registerOptionsGetter","getter","addViewProgressHandler","source","target","effect","__","globalOptions","reducedMotion","triggerParams","trigger","element","effectOptions","effectToAnimationOptions","cleanup","window","animationGroup","getWebAnimation","play","ready","then","cancel","handlerObj","addHandlerToMap","scene","getScrubScene","scenes","Array","isArray","scroll","Scroll","viewSource","observeViewportEntry","observeViewportResize","observeSourcesResize","root","document","body","destroy","Promise","all","map","s","resolve","start","removeViewProgressHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/viewProgress.ts"],"sourcesContent":["import type { AnimationGroup, ScrubScrollScene } from '@wix/motion';\nimport { getWebAnimation, getScrubScene } from '@wix/motion';\nimport { Scroll, scrollConfig } from 'fizban';\nimport type {\n ViewEnterParams,\n ScrubEffect,\n HandlerObjectMap,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst scrollManagerMap = new WeakMap() as HandlerObjectMap;\nlet scrollOptionsGetter: () => Partial<scrollConfig> = () => ({});\n\nfunction registerOptionsGetter(getter: () => scrollConfig) {\n scrollOptionsGetter = getter;\n}\n\nfunction addViewProgressHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: ScrubEffect,\n __: ViewEnterParams,\n globalOptions?: InteractionGlobalOptions,\n): void {\n if (globalOptions?.reducedMotion) {\n return;\n }\n\n const triggerParams = {\n trigger: 'view-progress' as const,\n element: source,\n };\n\n const effectOptions = effectToAnimationOptions(effect);\n let cleanup;\n if ('ViewTimeline' in window) {\n // Use ViewTimeline for modern browsers\n const animationGroup = getWebAnimation(\n target,\n effectOptions,\n triggerParams,\n );\n\n if (animationGroup) {\n animationGroup.play();\n\n cleanup = () => {\n (animationGroup as AnimationGroup).ready.then(() => {\n (animationGroup as AnimationGroup).cancel();\n });\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(scrollManagerMap, source, handlerObj);\n addHandlerToMap(scrollManagerMap, target, handlerObj);\n }\n } else {\n const scene = getScrubScene(target, effectOptions, triggerParams);\n\n if (scene) {\n const scenes = Array.isArray(scene) ? scene : [scene];\n const scroll = new Scroll({\n viewSource: source,\n scenes,\n observeViewportEntry: false,\n observeViewportResize: false,\n observeSourcesResize: true,\n root: document.body,\n ...scrollOptionsGetter(),\n });\n\n cleanup = () => {\n scroll.destroy();\n };\n\n Promise.all(\n (scenes as ScrubScrollScene[]).map((s) => s.ready || Promise.resolve()),\n ).then(() => {\n scroll.start();\n });\n }\n }\n if (!cleanup) return;\n \n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(scrollManagerMap, source, handlerObj);\n addHandlerToMap(scrollManagerMap, target, handlerObj);\n}\n\nfunction removeViewProgressHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(scrollManagerMap, element);\n}\n\nexport default {\n add: addViewProgressHandler,\n remove: removeViewProgressHandler,\n registerOptionsGetter,\n};\n"],"mappings":";;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAOA,IAAAE,UAAA,GAAAF,OAAA;AAMA,MAAMG,gBAAgB,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAC1D,IAAIC,mBAAgD,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAEjE,SAASC,qBAAqBA,CAACC,MAA0B,EAAE;EACzDF,mBAAmB,GAAGE,MAAM;AAC9B;AAEA,SAASC,sBAAsBA,CAC7BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAmB,EACnBC,EAAmB,EACnBC,aAAwC,EAClC;EACN,IAAIA,aAAa,YAAbA,aAAa,CAAEC,aAAa,EAAE;IAChC;EACF;EAEA,MAAMC,aAAa,GAAG;IACpBC,OAAO,EAAE,eAAwB;IACjCC,OAAO,EAAER;EACX,CAAC;EAED,MAAMS,aAAa,GAAG,IAAAC,mCAAwB,EAACR,MAAM,CAAC;EACtD,IAAIS,OAAO;EACX,IAAI,cAAc,IAAIC,MAAM,EAAE;IAC5B;IACA,MAAMC,cAAc,GAAG,IAAAC,uBAAe,EACpCb,MAAM,EACNQ,aAAa,EACbH,aACF,CAAC;IAED,IAAIO,cAAc,EAAE;MAClBA,cAAc,CAACE,IAAI,CAAC,CAAC;MAErBJ,OAAO,GAAGA,CAAA,KAAM;QACbE,cAAc,CAAoBG,KAAK,CAACC,IAAI,CAAC,MAAM;UACjDJ,cAAc,CAAoBK,MAAM,CAAC,CAAC;QAC7C,CAAC,CAAC;MACJ,CAAC;MAED,MAAMC,UAAU,GAAG;QAAEnB,MAAM;QAAEC,MAAM;QAAEU;MAAQ,CAAC;MAC9C,IAAAS,0BAAe,EAAC1B,gBAAgB,EAAEM,MAAM,EAAEmB,UAAU,CAAC;MACrD,IAAAC,0BAAe,EAAC1B,gBAAgB,EAAEO,MAAM,EAAEkB,UAAU,CAAC;IACvD;EACF,CAAC,MAAM;IACL,MAAME,KAAK,GAAG,IAAAC,qBAAa,EAACrB,MAAM,EAAEQ,aAAa,EAAEH,aAAa,CAAC;IAEjE,IAAIe,KAAK,EAAE;MACT,MAAME,MAAM,GAAGC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,GAAGA,KAAK,GAAG,CAACA,KAAK,CAAC;MACrD,MAAMK,MAAM,GAAG,IAAIC,cAAM,CAAC;QACxBC,UAAU,EAAE5B,MAAM;QAClBuB,MAAM;QACNM,oBAAoB,EAAE,KAAK;QAC3BC,qBAAqB,EAAE,KAAK;QAC5BC,oBAAoB,EAAE,IAAI;QAC1BC,IAAI,EAAEC,QAAQ,CAACC,IAAI;QACnB,GAAGtC,mBAAmB,CAAC;MACzB,CAAC,CAAC;MAEFe,OAAO,GAAGA,CAAA,KAAM;QACde,MAAM,CAACS,OAAO,CAAC,CAAC;MAClB,CAAC;MAEDC,OAAO,CAACC,GAAG,CACRd,MAAM,CAAwBe,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACvB,KAAK,IAAIoB,OAAO,CAACI,OAAO,CAAC,CAAC,CACxE,CAAC,CAACvB,IAAI,CAAC,MAAM;QACXS,MAAM,CAACe,KAAK,CAAC,CAAC;MAChB,CAAC,CAAC;IACJ;EACF;EACA,IAAI,CAAC9B,OAAO,EAAE;EAEd,MAAMQ,UAAU,GAAG;IAAEnB,MAAM;IAAEC,MAAM;IAAEU;EAAQ,CAAC;EAE9C,IAAAS,0BAAe,EAAC1B,gBAAgB,EAAEM,MAAM,EAAEmB,UAAU,CAAC;EACrD,IAAAC,0BAAe,EAAC1B,gBAAgB,EAAEO,MAAM,EAAEkB,UAAU,CAAC;AACvD;AAEA,SAASuB,yBAAyBA,CAAClC,OAAoB,EAAQ;EAC7D,IAAAmC,sCAA2B,EAACjD,gBAAgB,EAAEc,OAAO,CAAC;AACxD;AAAC,IAAAoC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAEhD,sBAAsB;EAC3BiD,MAAM,EAAEN,yBAAyB;EACjC7C;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_motion","require","_fizban","_utilities","scrollManagerMap","WeakMap","scrollOptionsGetter","registerOptionsGetter","getter","addViewProgressHandler","source","target","effect","__","globalOptions","reducedMotion","triggerParams","trigger","element","effectOptions","effectToAnimationOptions","cleanup","window","animationGroup","getWebAnimation","play","ready","then","cancel","handlerObj","addHandlerToMap","scene","getScrubScene","scenes","Array","isArray","scroll","Scroll","viewSource","observeViewportEntry","observeViewportResize","observeSourcesResize","root","document","body","destroy","Promise","all","map","s","resolve","start","removeViewProgressHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/viewProgress.ts"],"sourcesContent":["import type { AnimationGroup, ScrubScrollScene } from '@wix/motion';\nimport { getWebAnimation, getScrubScene } from '@wix/motion';\nimport { Scroll, scrollConfig } from 'fizban';\nimport type {\n ViewEnterParams,\n ScrubEffect,\n HandlerObjectMap,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst scrollManagerMap = new WeakMap() as HandlerObjectMap;\nlet scrollOptionsGetter: () => Partial<scrollConfig> = () => ({});\n\nfunction registerOptionsGetter(getter: () => scrollConfig) {\n scrollOptionsGetter = getter;\n}\n\nfunction addViewProgressHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: ScrubEffect,\n __: ViewEnterParams,\n globalOptions?: InteractionGlobalOptions,\n): void {\n if (globalOptions?.reducedMotion) {\n return;\n }\n\n const triggerParams = {\n trigger: 'view-progress' as const,\n element: source,\n };\n\n const effectOptions = effectToAnimationOptions(effect);\n let cleanup;\n if ('ViewTimeline' in window) {\n // Use ViewTimeline for modern browsers\n const animationGroup = getWebAnimation(\n target,\n effectOptions,\n triggerParams,\n );\n\n if (animationGroup) {\n animationGroup.play();\n\n cleanup = () => {\n (animationGroup as AnimationGroup).ready.then(() => {\n (animationGroup as AnimationGroup).cancel();\n });\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(scrollManagerMap, source, handlerObj);\n addHandlerToMap(scrollManagerMap, target, handlerObj);\n }\n } else {\n const scene = getScrubScene(target, effectOptions, triggerParams);\n\n if (scene) {\n const scenes = Array.isArray(scene) ? scene : [scene];\n const scroll = new Scroll({\n viewSource: source,\n scenes,\n observeViewportEntry: false,\n observeViewportResize: false,\n observeSourcesResize: true,\n root: document.body,\n ...scrollOptionsGetter(),\n });\n\n cleanup = () => {\n scroll.destroy();\n };\n\n Promise.all(\n (scenes as ScrubScrollScene[]).map((s) => s.ready || Promise.resolve()),\n ).then(() => {\n scroll.start();\n });\n }\n }\n if (!cleanup) {\n return;\n }\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(scrollManagerMap, source, handlerObj);\n addHandlerToMap(scrollManagerMap, target, handlerObj);\n}\n\nfunction removeViewProgressHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(scrollManagerMap, element);\n}\n\nexport default {\n add: addViewProgressHandler,\n remove: removeViewProgressHandler,\n registerOptionsGetter,\n};\n"],"mappings":"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","ignoreList":[]}