@wix/interact 1.92.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.
- package/dist/cjs/InteractElement.js +1 -0
- package/dist/cjs/InteractElement.js.map +1 -1
- package/dist/cjs/__tests__/interact.spec.js +334 -0
- package/dist/cjs/__tests__/interact.spec.js.map +1 -1
- package/dist/cjs/__tests__/viewEnter.spec.js +23 -6
- package/dist/cjs/__tests__/viewEnter.spec.js.map +1 -1
- package/dist/cjs/core/add.js +12 -8
- package/dist/cjs/core/add.js.map +1 -1
- package/dist/cjs/handlers/animationEnd.js +9 -0
- package/dist/cjs/handlers/animationEnd.js.map +1 -1
- package/dist/cjs/handlers/click.js +19 -3
- package/dist/cjs/handlers/click.js.map +1 -1
- package/dist/cjs/handlers/hover.js +19 -3
- package/dist/cjs/handlers/hover.js.map +1 -1
- package/dist/cjs/handlers/viewEnter.js +10 -1
- package/dist/cjs/handlers/viewEnter.js.map +1 -1
- package/dist/cjs/handlers/viewProgress.js +24 -8
- package/dist/cjs/handlers/viewProgress.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.js +34 -4
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/InteractElement.js +1 -0
- package/dist/esm/InteractElement.js.map +1 -1
- package/dist/esm/__tests__/interact.spec.js +335 -0
- package/dist/esm/__tests__/interact.spec.js.map +1 -1
- package/dist/esm/__tests__/viewEnter.spec.js +23 -6
- package/dist/esm/__tests__/viewEnter.spec.js.map +1 -1
- package/dist/esm/core/add.js +13 -9
- package/dist/esm/core/add.js.map +1 -1
- package/dist/esm/handlers/animationEnd.js +9 -0
- package/dist/esm/handlers/animationEnd.js.map +1 -1
- package/dist/esm/handlers/click.js +19 -3
- package/dist/esm/handlers/click.js.map +1 -1
- package/dist/esm/handlers/hover.js +19 -3
- package/dist/esm/handlers/hover.js.map +1 -1
- package/dist/esm/handlers/viewEnter.js +10 -1
- package/dist/esm/handlers/viewEnter.js.map +1 -1
- package/dist/esm/handlers/viewProgress.js +24 -8
- package/dist/esm/handlers/viewProgress.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.js +33 -4
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/__tests__/viewEnter.spec.d.ts +7 -0
- package/dist/types/types.d.ts +3 -1
- package/dist/types/utils.d.ts +2 -1
- 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":"AAAAA,IAAI,CAACC,IAAI,CAAC,aAAa,EAAE,OAAO;EAC9BC,YAAY,EAAEF,IAAI,CAACG,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC;IACtCC,IAAI,EAAEL,IAAI,CAACG,EAAE,CAAC,CAAC;IACfG,MAAM,EAAEN,IAAI,CAACG,EAAE,CAAC,CAAC;IACjBI,QAAQ,EAAEP,IAAI,CAACG,EAAE,CAAC,CAAC;IACnBK,KAAK,EAAE;EACT,CAAC;AACH,CAAC,CAAC,CAAC;AAEHR,IAAI,CAACC,IAAI,CAAC,SAAS,EAAE,OAAO;EAC1BQ,OAAO,EAAET,IAAI,CAACG,EAAE,CAAEO,EAAE,IAAKA,EAAE,CAAC,CAAC,CAAC;EAC9BC,MAAM,EAAEX,IAAI,CAACG,EAAE,CAAEO,EAAE,IAAKA,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEHE,QAAQ,CAAC,mBAAmB,EAAE,MAAM;EAClC,IAAIC,gBAAqB;EACzB,IAAIC,OAAY;EAChB,IAAIC,OAAoB;EACxB,IAAIC,MAAmB;EACvB,IAAIC,gBAAyE;EAC7E,IAAIC,YAAiB;EACrB,IAAIC,UAAqB;EACzB,IAAIC,YAAuB;EAC3B,IAAIC,wBAAmC;EAEvCC,UAAU,CAAC,MAAM;IACftB,IAAI,CAACuB,YAAY,CAAC,CAAC;IACnBV,gBAAgB,GAAGW,OAAO,CAAC,uBAAuB,CAAC,CAACC,OAAO;IAC3DX,OAAO,GAAGU,OAAO,CAAC,SAAS,CAAC;;IAE5B;IACAE,QAAQ,CAACC,IAAI,CAACC,SAAS,GAAG,EAAE;IAC5Bb,OAAO,GAAGW,QAAQ,CAACG,aAAa,CAAC,KAAK,CAAC;IACvCb,MAAM,GAAGU,QAAQ,CAACG,aAAa,CAAC,KAAK,CAAC;IACtCH,QAAQ,CAACC,IAAI,CAACG,WAAW,CAACf,OAAO,CAAC;IAClCW,QAAQ,CAACC,IAAI,CAACG,WAAW,CAACd,MAAM,CAAC;IAEjChB,IAAI,CAAC+B,aAAa,CAAC,CAAC;IAEpBZ,UAAU,GAAGnB,IAAI,CAACG,EAAE,CAAC,CAAC;IACtBiB,YAAY,GAAGpB,IAAI,CAACG,EAAE,CAAC,CAAC;IACxBe,YAAY,GAAG;MACbc,OAAO,EAAEb,UAAU;MACnBc,SAAS,EAAEb,YAAY;MACvBc,UAAU,EAAElC,IAAI,CAACG,EAAE,CAAC;IACtB,CAAC;IAEDkB,wBAAwB,GAAGrB,IAAI,CAACG,EAAE,CAAC,CAACO,EAAE,EAAEyB,OAAO,KAAK;MAClDlB,gBAAgB,GAAGP,EAAE;MACrB,OAAOQ,YAAY;IACrB,CAAC,CAAC;IACDkB,MAAM,CAASC,oBAAoB,GAAGhB,wBAAwB;EACjE,CAAC,CAAC;EAEFiB,SAAS,CAAC,MAAM;IACd;IACA,IAAIzB,gBAAgB,IAAIE,OAAO,EAAE;MAC/BF,gBAAgB,CAAC0B,MAAM,CAACxB,OAAO,CAAC;IAClC;IACA,IAAIF,gBAAgB,IAAIG,MAAM,EAAE;MAC9BH,gBAAgB,CAAC0B,MAAM,CAACvB,MAAM,CAAC;IACjC;EACF,CAAC,CAAC;EAEF,MAAMwB,WAAW,GAAGA,CAClBC,SAA6C,GAAG,CAAC,CAAC,KACX;IACvC,OAAO;MACLzB,MAAM,EAAED,OAAO;MACf2B,cAAc,EAAE,IAAI;MACpBC,kBAAkB,EAAE;QAClBC,MAAM,EAAE,GAAG;QACXC,KAAK,EAAE;MACT,CAA+B;MAC/BC,UAAU,EAAE;QACVF,MAAM,EAAE,GAAG;QACXC,KAAK,EAAE;MACT,CAA+B;MAC/B,GAAGJ;IACL,CAAC;EACH,CAAC;EAED7B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC7BmC,EAAE,CAAC,8DAA8D,EAAE,MAAM;MACvElC,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD,CAAC,CACH,CAAC;MAEDC,MAAM,CAAC/B,wBAAwB,CAAC,CAACgC,gBAAgB,CAAC,CAAC;MACnDD,MAAM,CAACjC,UAAU,CAAC,CAACmC,oBAAoB,CAACvC,OAAO,CAAC;IAClD,CAAC,CAAC;IAEFgC,EAAE,CAAC,6DAA6D,EAAE,MAAM;MACtElC,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEA,IAAI,EAAE;MAAO,CACjB,CAAC;MAED,MAAMI,KAAK,GAAGf,WAAW,CAAC,CAAC;MAC3BvB,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAAChC,YAAY,CAAC,CAACkC,oBAAoB,CAACvC,OAAO,CAAC;IACpD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFH,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BmC,EAAE,CAAC,0EAA0E,EAAE,MAAM;MACnFlC,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEK,gBAAgB,EAAE,IAAI;QAAEC,SAAS,EAAE;MAAI,CAC3C,CAAC;MAED,MAAMF,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAE;QAAK,CAAoB;QACvDE,UAAU,EAAE;UAAEF,MAAM,EAAE;QAAI;MAC5B,CAAC,CAAC;MACF3B,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACL,OAAO,CAAC,CAAC4C,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEFN,EAAE,CAAC,gEAAgE,EAAE,MAAM;MACzE,MAAMU,SAAS,GAAG,GAAG;MACrB,MAAMC,YAAY,GAAG,IAAI;MACzB,MAAMC,UAAU,GAAG,GAAG,CAAC,CAAC;;MAExB9C,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEK,gBAAgB,EAAE,IAAI;QAAEC;MAAU,CACtC,CAAC;MAED,MAAMF,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAEc;QAAa,CAAoB;QAC/DZ,UAAU,EAAE;UAAEF,MAAM,EAAEe;QAAW;MACnC,CAAC,CAAC;MAEF1C,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACH,MAAM,CAAC,CAAC0C,gBAAgB,CAAC,CAAC;MACzCD,MAAM,CAAChC,YAAY,CAAC,CAACkC,oBAAoB,CAACvC,OAAO,CAAC;MAElDqC,MAAM,CAAC/B,wBAAwB,CAAC,CAACuC,qBAAqB,CAAC,CAAC,CAAC;MAEzD,MAAMC,kBAAkB,GAAGxC,wBAAwB,CAACpB,IAAI,CAAC6D,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACpEV,MAAM,CAACS,kBAAkB,CAACJ,SAAS,CAAC,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;MACjDX,MAAM,CAACS,kBAAkB,CAACG,UAAU,CAAC,CAACC,IAAI,CAAC,kBAAkB,CAAC;IAChE,CAAC,CAAC;IAEFlB,EAAE,CAAC,4DAA4D,EAAE,MAAM;MACrE,MAAMU,SAAS,GAAG,GAAG;MACrB,MAAMC,YAAY,GAAG,GAAG;MACxB,MAAMC,UAAU,GAAG,GAAG,CAAC,CAAC;;MAExB9C,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEK,gBAAgB,EAAE,IAAI;QAAEC;MAAU,CACtC,CAAC;MAED,MAAMF,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAEc;QAAa,CAAoB;QAC/DZ,UAAU,EAAE;UAAEF,MAAM,EAAEe;QAAW;MACnC,CAAC,CAAC;MAEF1C,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACL,OAAO,CAAC,CAAC4C,gBAAgB,CAAC,CAAC;MAC1CD,MAAM,CAACtC,OAAO,CAACH,MAAM,CAAC,CAACuD,GAAG,CAACb,gBAAgB,CAAC,CAAC;MAC7CD,MAAM,CAAChC,YAAY,CAAC,CAAC8C,GAAG,CAACZ,oBAAoB,CAACvC,OAAO,CAAC;MACtDqC,MAAM,CAAC/B,wBAAwB,CAAC,CAACuC,qBAAqB,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEFb,EAAE,CAAC,iEAAiE,EAAE,MAAM;MAC1E,MAAMU,SAAS,GAAG,GAAG;MACrB,MAAMC,YAAY,GAAG,IAAI;MACzB,MAAMC,UAAU,GAAG,GAAG;MAEtB9C,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEK,gBAAgB,EAAE,KAAK;QAAEC;MAAU,CACvC,CAAC;MAED,MAAMF,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAEc;QAAa,CAAoB;QAC/DZ,UAAU,EAAE;UAAEF,MAAM,EAAEe;QAAW;MACnC,CAAC,CAAC;MAEF1C,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACL,OAAO,CAAC,CAACyD,GAAG,CAACb,gBAAgB,CAAC,CAAC;IAChD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","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":"AAAA,MAAMA,aAAa,GAAG;EACpBC,IAAI,EAAEC,IAAI,CAACC,EAAE,CAAC,CAAC;EACfC,MAAM,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC;EACjBE,QAAQ,EAAEH,IAAI,CAACC,EAAE,CAAC,CAAC;EACnBG,KAAK,EAAE;AACT,CAAC;AAEDJ,IAAI,CAACK,IAAI,CAAC,aAAa,EAAE,OAAO;EAC9BC,YAAY,EAAEN,IAAI,CAACC,EAAE,CAAC,CAAC,CAACM,eAAe,CAACT,aAAa;AACvD,CAAC,CAAC,CAAC;AAEHE,IAAI,CAACK,IAAI,CAAC,SAAS,EAAE,OAAO;EAC1BG,OAAO,EAAER,IAAI,CAACC,EAAE,CAAEQ,EAAE,IAAKA,EAAE,CAAC,CAAC,CAAC;EAC9BC,MAAM,EAAEV,IAAI,CAACC,EAAE,CAAEQ,EAAE,IAAKA,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEHE,QAAQ,CAAC,mBAAmB,EAAE,MAAM;EAClC,IAAIC,gBAAqB;EACzB,IAAIC,OAAY;EAChB,IAAIC,OAAoB;EACxB,IAAIC,MAAmB;EACvB,IAAIC,gBAAyE;EAC7E,IAAIC,YAAiB;EACrB,IAAIC,UAAqB;EACzB,IAAIC,YAAuB;EAC3B,IAAIC,wBAAmC;EAEvCC,UAAU,CAAC,MAAM;IACfrB,IAAI,CAACsB,YAAY,CAAC,CAAC;IACnBV,gBAAgB,GAAGW,OAAO,CAAC,uBAAuB,CAAC,CAACC,OAAO;IAC3DX,OAAO,GAAGU,OAAO,CAAC,SAAS,CAAC;;IAE5B;IACAE,QAAQ,CAACC,IAAI,CAACC,SAAS,GAAG,EAAE;IAC5Bb,OAAO,GAAGW,QAAQ,CAACG,aAAa,CAAC,KAAK,CAAC;IACvCb,MAAM,GAAGU,QAAQ,CAACG,aAAa,CAAC,KAAK,CAAC;IACtCH,QAAQ,CAACC,IAAI,CAACG,WAAW,CAACf,OAAO,CAAC;IAClCW,QAAQ,CAACC,IAAI,CAACG,WAAW,CAACd,MAAM,CAAC;IAEjCf,IAAI,CAAC8B,aAAa,CAAC,CAAC;IAEpBZ,UAAU,GAAGlB,IAAI,CAACC,EAAE,CAAC,CAAC;IACtBkB,YAAY,GAAGnB,IAAI,CAACC,EAAE,CAAC,CAAC;IACxBgB,YAAY,GAAG;MACbc,OAAO,EAAEb,UAAU;MACnBc,SAAS,EAAEb,YAAY;MACvBc,UAAU,EAAEjC,IAAI,CAACC,EAAE,CAAC;IACtB,CAAC;IAEDmB,wBAAwB,GAAGpB,IAAI,CAACC,EAAE,CAAC,CAACQ,EAAE,EAAEyB,OAAO,KAAK;MAClDlB,gBAAgB,GAAGP,EAAE;MACrB,OAAOQ,YAAY;IACrB,CAAC,CAAC;IACDkB,MAAM,CAASC,oBAAoB,GAAGhB,wBAAwB;EACjE,CAAC,CAAC;EAEFiB,SAAS,CAAC,MAAM;IACd;IACA,IAAIzB,gBAAgB,IAAIE,OAAO,EAAE;MAC/BF,gBAAgB,CAAC0B,MAAM,CAACxB,OAAO,CAAC;IAClC;IACA,IAAIF,gBAAgB,IAAIG,MAAM,EAAE;MAC9BH,gBAAgB,CAAC0B,MAAM,CAACvB,MAAM,CAAC;IACjC;EACF,CAAC,CAAC;EAEF,MAAMwB,WAAW,GAAGA,CAClBC,SAA6C,GAAG,CAAC,CAAC,KACX;IACvC,OAAO;MACLzB,MAAM,EAAED,OAAO;MACf2B,cAAc,EAAE,IAAI;MACpBC,kBAAkB,EAAE;QAClBC,MAAM,EAAE,GAAG;QACXC,KAAK,EAAE;MACT,CAA+B;MAC/BC,UAAU,EAAE;QACVF,MAAM,EAAE,GAAG;QACXC,KAAK,EAAE;MACT,CAA+B;MAC/B,GAAGJ;IACL,CAAC;EACH,CAAC;EAED7B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC7BmC,EAAE,CAAC,8DAA8D,EAAE,MAAM;MACvElC,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD,CAAC,CACH,CAAC;MAEDC,MAAM,CAAC/B,wBAAwB,CAAC,CAACgC,gBAAgB,CAAC,CAAC;MACnDD,MAAM,CAACjC,UAAU,CAAC,CAACmC,oBAAoB,CAACvC,OAAO,CAAC;IAClD,CAAC,CAAC;IAEFgC,EAAE,CAAC,6DAA6D,EAAE,MAAM;MACtElC,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEA,IAAI,EAAE;MAAO,CACjB,CAAC;MAED,MAAMI,KAAK,GAAGf,WAAW,CAAC,CAAC;MAC3BvB,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAAChC,YAAY,CAAC,CAACkC,oBAAoB,CAACvC,OAAO,CAAC;IACpD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFH,QAAQ,CAAC,yBAAyB,EAAE,MAAM;IACxCmC,EAAE,CAAC,2DAA2D,EAAE,MAAM;MACpE,MAAM;QAAExC;MAAa,CAAC,GAAGiB,OAAO,CAAC,aAAa,CAAC;MAC/CjB,YAAY,CAACiD,mBAAmB,CAAC,IAAI,CAAC;MAEtC3C,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD,CAAC,CACH,CAAC;MAEDC,MAAM,CAAC/B,wBAAwB,CAAC,CAACoC,GAAG,CAACJ,gBAAgB,CAAC,CAAC;MACvDD,MAAM,CAACjC,UAAU,CAAC,CAACsC,GAAG,CAACJ,gBAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFzC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BmC,EAAE,CAAC,0EAA0E,EAAE,MAAM;MACnFlC,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEO,gBAAgB,EAAE,IAAI;QAAEC,SAAS,EAAE;MAAI,CAC3C,CAAC;MAED,MAAMJ,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAE;QAAK,CAAoB;QACvDE,UAAU,EAAE;UAAEF,MAAM,EAAE;QAAI;MAC5B,CAAC,CAAC;MACF3B,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACL,OAAO,CAAC,CAAC4C,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEFN,EAAE,CAAC,gEAAgE,EAAE,MAAM;MACzE,MAAMY,SAAS,GAAG,GAAG;MACrB,MAAMC,YAAY,GAAG,IAAI;MACzB,MAAMC,UAAU,GAAG,GAAG,CAAC,CAAC;;MAExBhD,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEO,gBAAgB,EAAE,IAAI;QAAEC;MAAU,CACtC,CAAC;MAED,MAAMJ,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAEgB;QAAa,CAAoB;QAC/Dd,UAAU,EAAE;UAAEF,MAAM,EAAEiB;QAAW;MACnC,CAAC,CAAC;MAEF5C,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACH,MAAM,CAAC,CAAC0C,gBAAgB,CAAC,CAAC;MACzCD,MAAM,CAAChC,YAAY,CAAC,CAACkC,oBAAoB,CAACvC,OAAO,CAAC;MAElDqC,MAAM,CAAC/B,wBAAwB,CAAC,CAACyC,qBAAqB,CAAC,CAAC,CAAC;MAEzD,MAAMC,kBAAkB,GAAG1C,wBAAwB,CAACf,IAAI,CAAC0D,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACpEZ,MAAM,CAACW,kBAAkB,CAACJ,SAAS,CAAC,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;MACjDb,MAAM,CAACW,kBAAkB,CAACG,UAAU,CAAC,CAACC,IAAI,CAAC,kBAAkB,CAAC;IAChE,CAAC,CAAC;IAEFpB,EAAE,CAAC,4DAA4D,EAAE,MAAM;MACrE,MAAMY,SAAS,GAAG,GAAG;MACrB,MAAMC,YAAY,GAAG,GAAG;MACxB,MAAMC,UAAU,GAAG,GAAG,CAAC,CAAC;;MAExBhD,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEO,gBAAgB,EAAE,IAAI;QAAEC;MAAU,CACtC,CAAC;MAED,MAAMJ,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAEgB;QAAa,CAAoB;QAC/Dd,UAAU,EAAE;UAAEF,MAAM,EAAEiB;QAAW;MACnC,CAAC,CAAC;MAEF5C,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACL,OAAO,CAAC,CAAC4C,gBAAgB,CAAC,CAAC;MAC1CD,MAAM,CAACtC,OAAO,CAACH,MAAM,CAAC,CAAC8C,GAAG,CAACJ,gBAAgB,CAAC,CAAC;MAC7CD,MAAM,CAAChC,YAAY,CAAC,CAACqC,GAAG,CAACH,oBAAoB,CAACvC,OAAO,CAAC;MACtDqC,MAAM,CAAC/B,wBAAwB,CAAC,CAACyC,qBAAqB,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEFf,EAAE,CAAC,iEAAiE,EAAE,MAAM;MAC1E,MAAMY,SAAS,GAAG,GAAG;MACrB,MAAMC,YAAY,GAAG,IAAI;MACzB,MAAMC,UAAU,GAAG,GAAG;MAEtBhD,gBAAgB,CAACmC,GAAG,CAClBjC,OAAO,EACPC,MAAM,EACN;QAAEiC,QAAQ,EAAE,IAAI;QAAEC,WAAW,EAAE;UAAEC,IAAI,EAAE;QAAS;MAAE,CAAC,EACnD;QAAEO,gBAAgB,EAAE,KAAK;QAAEC;MAAU,CACvC,CAAC;MAED,MAAMJ,KAAK,GAAGf,WAAW,CAAC;QACxBE,cAAc,EAAE,KAAK;QACrBC,kBAAkB,EAAE;UAAEC,MAAM,EAAEgB;QAAa,CAAoB;QAC/Dd,UAAU,EAAE;UAAEF,MAAM,EAAEiB;QAAW;MACnC,CAAC,CAAC;MAEF5C,gBAAgB,CAAC,CAACsC,KAAK,CAAC,CAAC;MAEzBH,MAAM,CAACtC,OAAO,CAACL,OAAO,CAAC,CAACgD,GAAG,CAACJ,gBAAgB,CAAC,CAAC;IAChD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
package/dist/cjs/core/add.js
CHANGED
|
@@ -38,20 +38,20 @@ function _queryItemElement(data, elements) {
|
|
|
38
38
|
function _getInteractionElements(interaction, effect, source, target, sourceElements, targetElements) {
|
|
39
39
|
return [sourceElements ? _queryItemElement(interaction, sourceElements) : _getElementsFromData(interaction, source), targetElements ? _queryItemElement(effect, targetElements) : _getElementsFromData(effect, target)];
|
|
40
40
|
}
|
|
41
|
-
function _applyInteraction(key, interaction, effect, sourceElements, targetElements) {
|
|
41
|
+
function _applyInteraction(key, interaction, effect, sourceElements, targetElements, selectorCondition) {
|
|
42
42
|
const isSourceArray = Array.isArray(sourceElements);
|
|
43
43
|
const isTargetArray = Array.isArray(targetElements);
|
|
44
44
|
if (isSourceArray) {
|
|
45
45
|
sourceElements.forEach((sourceEl, index) => {
|
|
46
46
|
const targetEl = isTargetArray ? targetElements[index] : targetElements;
|
|
47
47
|
if (targetEl) {
|
|
48
|
-
addInteraction(key, sourceEl, interaction.trigger, targetEl, effect, interaction.params);
|
|
48
|
+
addInteraction(key, sourceEl, interaction.trigger, targetEl, effect, interaction.params, selectorCondition);
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
51
|
} else {
|
|
52
52
|
const targets = isTargetArray ? targetElements : [targetElements];
|
|
53
53
|
targets.forEach(targetEl => {
|
|
54
|
-
addInteraction(key, sourceElements, interaction.trigger, targetEl, effect, interaction.params);
|
|
54
|
+
addInteraction(key, sourceElements, interaction.trigger, targetEl, effect, interaction.params, selectorCondition);
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -100,7 +100,8 @@ function _addInteraction(sourceKey, sourceRoot, instance, interaction, elements)
|
|
|
100
100
|
}
|
|
101
101
|
instance.addedInteractions[interactionId] = true;
|
|
102
102
|
const key = target || interaction.key;
|
|
103
|
-
|
|
103
|
+
const selectorCondition = (0, _utils.getSelectorCondition)(effectOptions.conditions || [], instance.dataCache.conditions);
|
|
104
|
+
_applyInteraction(key, interaction, effectOptions, sourceElements, targetElements, selectorCondition);
|
|
104
105
|
}
|
|
105
106
|
});
|
|
106
107
|
}
|
|
@@ -151,7 +152,8 @@ function addEffectsForTarget(targetKey, element, instance, listContainer, elemen
|
|
|
151
152
|
return true;
|
|
152
153
|
}
|
|
153
154
|
instance.addedInteractions[interactionId] = true;
|
|
154
|
-
|
|
155
|
+
const selectorCondition = (0, _utils.getSelectorCondition)(effectOptions.conditions || [], instance.dataCache.conditions);
|
|
156
|
+
_applyInteraction(targetKey, interaction, effectOptions, sourceElements, targetElements, selectorCondition);
|
|
155
157
|
|
|
156
158
|
// short-circuit the loop since we have a match
|
|
157
159
|
return true;
|
|
@@ -164,7 +166,7 @@ function addEffectsForTarget(targetKey, element, instance, listContainer, elemen
|
|
|
164
166
|
/**
|
|
165
167
|
* Registers a handler to an event on a given element.
|
|
166
168
|
*/
|
|
167
|
-
function addInteraction(key, source, trigger, target, effect, options) {
|
|
169
|
+
function addInteraction(key, source, trigger, target, effect, options, selectorCondition) {
|
|
168
170
|
var _TRIGGER_TO_HANDLER_M;
|
|
169
171
|
if (effect.transition || effect.transitionProperties) {
|
|
170
172
|
const args = {
|
|
@@ -175,7 +177,8 @@ function addInteraction(key, source, trigger, target, effect, options) {
|
|
|
175
177
|
childSelector: (0, _Interact.getSelector)(effect, {
|
|
176
178
|
asCombinator: true,
|
|
177
179
|
addItemFilter: true
|
|
178
|
-
})
|
|
180
|
+
}),
|
|
181
|
+
selectorCondition
|
|
179
182
|
};
|
|
180
183
|
const root = target.closest('interact-element');
|
|
181
184
|
if (!root) {
|
|
@@ -185,7 +188,8 @@ function addInteraction(key, source, trigger, target, effect, options) {
|
|
|
185
188
|
}
|
|
186
189
|
(_TRIGGER_TO_HANDLER_M = _handlers.default[trigger]) == null || _TRIGGER_TO_HANDLER_M.add(source, target, effect, options, {
|
|
187
190
|
reducedMotion: _Interact.Interact.forceReducedMotion,
|
|
188
|
-
allowA11yTriggers: _Interact.Interact.allowA11yTriggers
|
|
191
|
+
allowA11yTriggers: _Interact.Interact.allowA11yTriggers,
|
|
192
|
+
selectorCondition
|
|
189
193
|
});
|
|
190
194
|
}
|
|
191
195
|
|
package/dist/cjs/core/add.js.map
CHANGED
|
@@ -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","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","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 { createTransitionCSS, getMediaQuery } 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) {\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 );\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 );\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 _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\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 _applyInteraction(\n targetKey,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\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): 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 };\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 });\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,7 +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
|
+
}
|
|
13
|
+
const {
|
|
14
|
+
selectorCondition
|
|
15
|
+
} = globalOptions || {};
|
|
10
16
|
const handler = () => {
|
|
17
|
+
if (selectorCondition && !target.matches(selectorCondition)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
11
20
|
animation.play();
|
|
12
21
|
};
|
|
13
22
|
const cleanup = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","addAnimationEndHandler","source","target","effect","__","globalOptions","animation","getAnimation","effectToAnimationOptions","undefined","reducedMotion","handler","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 const handler = () => {\n animation.play();\n };\n const cleanup = () => {\n animation.cancel();\n source.removeEventListener('animationend', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('animationend', handler);\n}\n\nfunction removeAnimationEndHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addAnimationEndHandler,\n remove: removeAnimationEndHandler,\n};\n"],"mappings":";;;;AACA,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,
|
|
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,9 +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';
|
|
15
|
+
const {
|
|
16
|
+
selectorCondition
|
|
17
|
+
} = globalOptions || {};
|
|
12
18
|
return event => {
|
|
19
|
+
if (selectorCondition && !element.matches(selectorCondition)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
13
22
|
if (type === 'alternate') {
|
|
14
23
|
if (initialPlay) {
|
|
15
24
|
initialPlay = false;
|
|
@@ -46,9 +55,12 @@ function createTransitionHandler(element, {
|
|
|
46
55
|
effectId,
|
|
47
56
|
listContainer,
|
|
48
57
|
listItemSelector
|
|
49
|
-
}, options) {
|
|
58
|
+
}, options, selectorCondition) {
|
|
50
59
|
const shouldSetStateOnElement = !!listContainer;
|
|
51
60
|
return event => {
|
|
61
|
+
if (selectorCondition && !element.matches(selectorCondition)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
52
64
|
const interactElement = element.closest('interact-element');
|
|
53
65
|
if (!interactElement) {
|
|
54
66
|
return;
|
|
@@ -64,13 +76,17 @@ function addClickHandler(source, target, effect, options = {}, globalOptions) {
|
|
|
64
76
|
let handler;
|
|
65
77
|
let once = false;
|
|
66
78
|
if (effect.transition || effect.transitionProperties) {
|
|
67
|
-
handler = createTransitionHandler(target, effect, options);
|
|
79
|
+
handler = createTransitionHandler(target, effect, options, globalOptions == null ? void 0 : globalOptions.selectorCondition);
|
|
68
80
|
} else {
|
|
69
81
|
handler = createTimeEffectHandler(target, effect, options, {
|
|
70
|
-
reducedMotion: globalOptions == null ? void 0 : globalOptions.reducedMotion
|
|
82
|
+
reducedMotion: globalOptions == null ? void 0 : globalOptions.reducedMotion,
|
|
83
|
+
selectorCondition: globalOptions == null ? void 0 : globalOptions.selectorCondition
|
|
71
84
|
});
|
|
72
85
|
once = options.type === 'once';
|
|
73
86
|
}
|
|
87
|
+
if (!handler) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
74
90
|
const cleanup = () => {
|
|
75
91
|
source.removeEventListener('click', handler);
|
|
76
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","event","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
|
|
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,9 +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';
|
|
14
|
+
const {
|
|
15
|
+
selectorCondition
|
|
16
|
+
} = globalOptions || {};
|
|
11
17
|
let initialPlay = true;
|
|
12
18
|
return event => {
|
|
19
|
+
if (selectorCondition && !element.matches(selectorCondition)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
13
22
|
if (event.type === 'mouseenter' || event.type === 'focusin') {
|
|
14
23
|
if (type === 'alternate') {
|
|
15
24
|
if (initialPlay) {
|
|
@@ -52,11 +61,14 @@ function createTransitionHandler(element, {
|
|
|
52
61
|
effectId,
|
|
53
62
|
listContainer,
|
|
54
63
|
listItemSelector
|
|
55
|
-
}, options) {
|
|
64
|
+
}, options, selectorCondition) {
|
|
56
65
|
const method = options.method || 'toggle';
|
|
57
66
|
const isToggle = method === 'toggle';
|
|
58
67
|
const shouldSetStateOnElement = !!listContainer;
|
|
59
68
|
return event => {
|
|
69
|
+
if (selectorCondition && !element.matches(selectorCondition)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
60
72
|
const interactElement = element.closest('interact-element');
|
|
61
73
|
if (!interactElement) {
|
|
62
74
|
return;
|
|
@@ -78,14 +90,18 @@ function addHoverHandler(source, target, effect, options = {}, globalOptions) {
|
|
|
78
90
|
let isStateTrigger = false;
|
|
79
91
|
let once = false;
|
|
80
92
|
if (effect.transition || effect.transitionProperties) {
|
|
81
|
-
handler = createTransitionHandler(target, effect, options);
|
|
93
|
+
handler = createTransitionHandler(target, effect, options, globalOptions == null ? void 0 : globalOptions.selectorCondition);
|
|
82
94
|
isStateTrigger = true;
|
|
83
95
|
} else {
|
|
84
96
|
handler = createTimeEffectHandler(target, effect, options, {
|
|
85
|
-
reducedMotion: globalOptions == null ? void 0 : globalOptions.reducedMotion
|
|
97
|
+
reducedMotion: globalOptions == null ? void 0 : globalOptions.reducedMotion,
|
|
98
|
+
selectorCondition: globalOptions == null ? void 0 : globalOptions.selectorCondition
|
|
86
99
|
});
|
|
87
100
|
once = options.type === 'once';
|
|
88
101
|
}
|
|
102
|
+
if (!handler) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
89
105
|
const cleanup = () => {
|
|
90
106
|
source.removeEventListener('mouseenter', handler);
|
|
91
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","event","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\n return (event: MouseEvent | FocusEvent) => {\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) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n const shouldSetStateOnElement = !!listContainer;\n\n return (event: MouseEvent | FocusEvent) => {\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 );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n { reducedMotion: globalOptions?.reducedMotion },\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":";;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAWA,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,MAAMC,IAAI,GAAGP,OAAO,CAACO,IAAI,IAAI,WAAW;EACxC,IAAIC,WAAW,GAAG,IAAI;EAEtB,OAAQC,KAA8B,IAAK;IACzC,IAAIA,KAAK,CAACF,IAAI,KAAK,YAAY,IAAIE,KAAK,CAACF,IAAI,KAAK,SAAS,EAAE;MAC3D,IAAIA,IAAI,KAAK,WAAW,EAAE;QACxB,IAAIC,WAAW,EAAE;UACfA,WAAW,GAAG,KAAK;UACnBN,SAAS,CAACQ,IAAI,CAAC,CAAC;QAClB,CAAC,MAAM;UACLR,SAAS,CAACS,OAAO,CAAC,CAAC;QACrB;MACF,CAAC,MAAM,IAAIJ,IAAI,KAAK,OAAO,EAAE;QAC3B,IAAIL,SAAS,CAACU,SAAS,KAAK,UAAU,EAAE;UACtC;UACAV,SAAS,CAACQ,IAAI,CAAC,CAAC;QAClB;MACF,CAAC,MAAM;QACL;QACA;QACAR,SAAS,CAACW,QAAQ,CAAC,CAAC,CAAC;QAErB,IAAIX,SAAS,CAACY,KAAK,EAAE;UACnBZ,SAAS,CAACa,QAAQ,CAAC,MAAM;YACvBjB,OAAO,CAACkB,OAAO,CAACC,WAAW,GAAG,MAAM;UACtC,CAAC,CAAC;QACJ;QAEAf,SAAS,CAACQ,IAAI,CAAC,CAAC;MAClB;IACF,CAAC,MAAM,IAAID,KAAK,CAACF,IAAI,KAAK,YAAY,IAAIE,KAAK,CAACF,IAAI,KAAK,UAAU,EAAE;MACnE,IAAIA,IAAI,KAAK,WAAW,EAAE;QACxBL,SAAS,CAACS,OAAO,CAAC,CAAC;MACrB,CAAC,MAAM,IAAIJ,IAAI,KAAK,QAAQ,EAAE;QAC5BL,SAAS,CAACgB,MAAM,CAAC,CAAC;QAClB,OAAOpB,OAAO,CAACkB,OAAO,CAACC,WAAW;MACpC,CAAC,MAAM,IAAIV,IAAI,KAAK,OAAO,EAAE;QAC3B,IAAIL,SAAS,CAACU,SAAS,KAAK,SAAS,EAAE;UACrCV,SAAS,CAACiB,KAAK,CAAC,CAAC;QACnB;MACF;IACF;EACF,CAAC;AACH;AAEA,SAASC,uBAAuBA,CAC9BtB,OAAoB,EACpB;EACEuB,QAAQ;EACRC,aAAa;EACbC;AACoD,CAAC,EACvDvB,OAAoB,EACpB;EACA,MAAMwB,MAAM,GAAGxB,OAAO,CAACwB,MAAM,IAAI,QAAQ;EACzC,MAAMC,QAAQ,GAAGD,MAAM,KAAK,QAAQ;EACpC,MAAME,uBAAuB,GAAG,CAAC,CAACJ,aAAa;EAE/C,OAAQb,KAA8B,IAAK;IACzC,MAAMkB,eAAe,GAAG7B,OAAO,CAAC8B,OAAO,CACrC,kBACF,CAAqB;IACrB,IAAI,CAACD,eAAe,EAAE;MACpB;IACF;IAEA,IAAIE,IAAI;IACR,IAAIH,uBAAuB,EAAE;MAC3BG,IAAI,GAAG/B,OAAO,CAAC8B,OAAO,CACpB,GAAGN,aAAa,MAAMC,gBAAgB,IAAI,EAAE,cAC9C,CAAuB;IACzB;IAEA,IAAId,KAAK,CAACF,IAAI,KAAK,YAAY,IAAIE,KAAK,CAACF,IAAI,KAAK,SAAS,EAAE;MAC3D,MAAMuB,OAAO,GAAGL,QAAQ,GAAG,KAAK,GAAGD,MAAM;MACzCG,eAAe,CAACI,YAAY,CAACV,QAAQ,EAAES,OAAO,EAAED,IAAI,CAAC;IACvD,CAAC,MAAM,IACL,CAACpB,KAAK,CAACF,IAAI,KAAK,YAAY,IAAIE,KAAK,CAACF,IAAI,KAAK,UAAU,KACzDkB,QAAQ,EACR;MACAE,eAAe,CAACI,YAAY,CAACV,QAAQ,EAAE,QAAQ,EAAEQ,IAAI,CAAC;IACxD;EACF,CAAC;AACH;AAEA,SAASG,eAAeA,CACtBC,MAAmB,EACnBC,MAAmB,EACnBnC,MAAoD,EACpDC,OAA2C,GAAG,CAAC,CAAC,EAChDC,aAAuC,EACvC;EACA,IAAIkC,OAAiD;EACrD,IAAIC,cAAc,GAAG,KAAK;EAC1B,IAAIC,IAAI,GAAG,KAAK;EAEhB,IACGtC,MAAM,CAAsBuC,UAAU,IACtCvC,MAAM,CAAsBwC,oBAAoB,EACjD;IACAJ,OAAO,GAAGf,uBAAuB,CAC/Bc,MAAM,EACNnC,MAAM,EACNC,OACF,CAAC;IACDoC,cAAc,GAAG,IAAI;EACvB,CAAC,MAAM;IACLD,OAAO,GAAGtC,uBAAuB,CAC/BqC,MAAM,EACNnC,MAAM,EACNC,OAAO,EACP;MAAEM,aAAa,EAAEL,aAAa,oBAAbA,aAAa,CAAEK;IAAc,CAChD,CAAC;IACD+B,IAAI,GAAIrC,OAAO,CAA0BO,IAAI,KAAK,MAAM;EAC1D;EAEA,MAAMiC,OAAO,GAAGA,CAAA,KAAM;IACpBP,MAAM,CAACQ,mBAAmB,CAAC,YAAY,EAAEN,OAAO,CAAC;IACjDF,MAAM,CAACQ,mBAAmB,CAAC,YAAY,EAAEN,OAAO,CAAC;IACjD,IAAIlC,aAAa,YAAbA,aAAa,CAAEyC,iBAAiB,EAAE;MACpCT,MAAM,CAACQ,mBAAmB,CAAC,SAAS,EAAEN,OAAO,CAAC;MAC9CF,MAAM,CAACQ,mBAAmB,CAAC,UAAU,EAAEN,OAAO,CAAC;IACjD;EACF,CAAC;EAED,MAAMQ,UAAU,GAAG;IAAEV,MAAM;IAAEC,MAAM;IAAEM;EAAQ,CAAC;EAE9C,IAAAI,0BAAe,EAACjD,UAAU,EAAEsC,MAAM,EAAEU,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAACjD,UAAU,EAAEuC,MAAM,EAAES,UAAU,CAAC;EAE/C,IAAI1C,aAAa,YAAbA,aAAa,CAAEyC,iBAAiB,EAAE;IACpCT,MAAM,CAACY,QAAQ,GAAG,CAAC;IACnBZ,MAAM,CAACa,gBAAgB,CACrB,SAAS,EACRrC,KAAK,IAAK;MACT,IAAI,CAACwB,MAAM,CAACc,QAAQ,CAACtC,KAAK,CAACuC,aAA4B,CAAC,EAAE;QACxDb,OAAO,CAAC1B,KAAK,CAAC;MAChB;IACF,CAAC,EACD;MAAE4B;IAAK,CACT,CAAC;EACH;EAEAJ,MAAM,CAACa,gBAAgB,CAAC,YAAY,EAAEX,OAAO,EAAE;IAAEc,OAAO,EAAE,IAAI;IAAEZ;EAAK,CAAC,CAAC;EAEvE,MAAMa,QAAQ,GAAGd,cAAc,GAC3B,CAAEpC,OAAO,CAAiBwB,MAAM,IAAI,QAAQ,MAAM,QAAQ,GACzDxB,OAAO,CAA0BO,IAAI,KAAK,MAAM;EAErD,IAAI2C,QAAQ,EAAE;IACZjB,MAAM,CAACa,gBAAgB,CAAC,YAAY,EAAEX,OAAO,EAAE;MAAEc,OAAO,EAAE;IAAK,CAAC,CAAC;IAEjE,IAAIhD,aAAa,YAAbA,aAAa,CAAEyC,iBAAiB,EAAE;MACpCT,MAAM,CAACa,gBAAgB,CACrB,UAAU,EACTrC,KAAK,IAAK;QACT,IAAI,CAACwB,MAAM,CAACc,QAAQ,CAACtC,KAAK,CAACuC,aAA4B,CAAC,EAAE;UACxDb,OAAO,CAAC1B,KAAK,CAAC;QAChB;MACF,CAAC,EACD;QAAE4B;MAAK,CACT,CAAC;IACH;EACF;AACF;AAEA,SAASc,kBAAkBA,CAACrD,OAAoB,EAAE;EAChD,IAAAsD,sCAA2B,EAACzD,UAAU,EAAEG,OAAO,CAAC;AAClD;AAAC,IAAAuD,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","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":";;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAWA,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;EAEnB,IAAI,CAACJ,SAAS,EAAE;IACd;EACF;EAEA,MAAMK,IAAI,GAAGP,OAAO,CAACO,IAAI,IAAI,WAAW;EACxC,MAAM;IAAEC;EAAkB,CAAC,GAAGP,aAAa,IAAI,CAAC,CAAC;EAEjD,IAAIQ,WAAW,GAAG,IAAI;EAEtB,OAAQC,KAA8B,IAAK;IACzC,IAAIF,iBAAiB,IAAI,CAACV,OAAO,CAACa,OAAO,CAACH,iBAAiB,CAAC,EAAE;MAC5D;IACF;IACA,IAAIE,KAAK,CAACH,IAAI,KAAK,YAAY,IAAIG,KAAK,CAACH,IAAI,KAAK,SAAS,EAAE;MAC3D,IAAIA,IAAI,KAAK,WAAW,EAAE;QACxB,IAAIE,WAAW,EAAE;UACfA,WAAW,GAAG,KAAK;UACnBP,SAAS,CAACU,IAAI,CAAC,CAAC;QAClB,CAAC,MAAM;UACLV,SAAS,CAACW,OAAO,CAAC,CAAC;QACrB;MACF,CAAC,MAAM,IAAIN,IAAI,KAAK,OAAO,EAAE;QAC3B,IAAIL,SAAS,CAACY,SAAS,KAAK,UAAU,EAAE;UACtC;UACAZ,SAAS,CAACU,IAAI,CAAC,CAAC;QAClB;MACF,CAAC,MAAM;QACL;QACA;QACAV,SAAS,CAACa,QAAQ,CAAC,CAAC,CAAC;QAErB,IAAIb,SAAS,CAACc,KAAK,EAAE;UACnBd,SAAS,CAACe,QAAQ,CAAC,MAAM;YACvBnB,OAAO,CAACoB,OAAO,CAACC,WAAW,GAAG,MAAM;UACtC,CAAC,CAAC;QACJ;QAEAjB,SAAS,CAACU,IAAI,CAAC,CAAC;MAClB;IACF,CAAC,MAAM,IAAIF,KAAK,CAACH,IAAI,KAAK,YAAY,IAAIG,KAAK,CAACH,IAAI,KAAK,UAAU,EAAE;MACnE,IAAIA,IAAI,KAAK,WAAW,EAAE;QACxBL,SAAS,CAACW,OAAO,CAAC,CAAC;MACrB,CAAC,MAAM,IAAIN,IAAI,KAAK,QAAQ,EAAE;QAC5BL,SAAS,CAACkB,MAAM,CAAC,CAAC;QAClB,OAAOtB,OAAO,CAACoB,OAAO,CAACC,WAAW;MACpC,CAAC,MAAM,IAAIZ,IAAI,KAAK,OAAO,EAAE;QAC3B,IAAIL,SAAS,CAACY,SAAS,KAAK,SAAS,EAAE;UACrCZ,SAAS,CAACmB,KAAK,CAAC,CAAC;QACnB;MACF;IACF;EACF,CAAC;AACH;AAEA,SAASC,uBAAuBA,CAC9BxB,OAAoB,EACpB;EACEyB,QAAQ;EACRC,aAAa;EACbC;AACoD,CAAC,EACvDzB,OAAoB,EACpBQ,iBAA0B,EAC1B;EACA,MAAMkB,MAAM,GAAG1B,OAAO,CAAC0B,MAAM,IAAI,QAAQ;EACzC,MAAMC,QAAQ,GAAGD,MAAM,KAAK,QAAQ;EACpC,MAAME,uBAAuB,GAAG,CAAC,CAACJ,aAAa;EAE/C,OAAQd,KAA8B,IAAK;IACzC,IAAIF,iBAAiB,IAAI,CAACV,OAAO,CAACa,OAAO,CAACH,iBAAiB,CAAC,EAAE;MAC5D;IACF;IAEA,MAAMqB,eAAe,GAAG/B,OAAO,CAACgC,OAAO,CACrC,kBACF,CAAqB;IAErB,IAAI,CAACD,eAAe,EAAE;MACpB;IACF;IAEA,IAAIE,IAAI;IACR,IAAIH,uBAAuB,EAAE;MAC3BG,IAAI,GAAGjC,OAAO,CAACgC,OAAO,CACpB,GAAGN,aAAa,MAAMC,gBAAgB,IAAI,EAAE,cAC9C,CAAuB;IACzB;IAEA,IAAIf,KAAK,CAACH,IAAI,KAAK,YAAY,IAAIG,KAAK,CAACH,IAAI,KAAK,SAAS,EAAE;MAC3D,MAAMyB,OAAO,GAAGL,QAAQ,GAAG,KAAK,GAAGD,MAAM;MACzCG,eAAe,CAACI,YAAY,CAACV,QAAQ,EAAES,OAAO,EAAED,IAAI,CAAC;IACvD,CAAC,MAAM,IACL,CAACrB,KAAK,CAACH,IAAI,KAAK,YAAY,IAAIG,KAAK,CAACH,IAAI,KAAK,UAAU,KACzDoB,QAAQ,EACR;MACAE,eAAe,CAACI,YAAY,CAACV,QAAQ,EAAE,QAAQ,EAAEQ,IAAI,CAAC;IACxD;EACF,CAAC;AACH;AAEA,SAASG,eAAeA,CACtBC,MAAmB,EACnBC,MAAmB,EACnBrC,MAAoD,EACpDC,OAA2C,GAAG,CAAC,CAAC,EAChDC,aAAuC,EACvC;EACA,IAAIoC,OAA+D;EACnE,IAAIC,cAAc,GAAG,KAAK;EAC1B,IAAIC,IAAI,GAAG,KAAK;EAEhB,IACGxC,MAAM,CAAsByC,UAAU,IACtCzC,MAAM,CAAsB0C,oBAAoB,EACjD;IACAJ,OAAO,GAAGf,uBAAuB,CAC/Bc,MAAM,EACNrC,MAAM,EACNC,OAAO,EACPC,aAAa,oBAAbA,aAAa,CAAEO,iBACjB,CAAC;IACD8B,cAAc,GAAG,IAAI;EACvB,CAAC,MAAM;IACLD,OAAO,GAAGxC,uBAAuB,CAC/BuC,MAAM,EACNrC,MAAM,EACNC,OAAO,EACP;MACEM,aAAa,EAAEL,aAAa,oBAAbA,aAAa,CAAEK,aAAa;MAC3CE,iBAAiB,EAAEP,aAAa,oBAAbA,aAAa,CAAEO;IACpC,CACF,CAAC;IACD+B,IAAI,GAAIvC,OAAO,CAA0BO,IAAI,KAAK,MAAM;EAC1D;EAEA,IAAI,CAAC8B,OAAO,EAAE;IACZ;EACF;EAEA,MAAMK,OAAO,GAAGA,CAAA,KAAM;IACpBP,MAAM,CAACQ,mBAAmB,CAAC,YAAY,EAAEN,OAAQ,CAAC;IAClDF,MAAM,CAACQ,mBAAmB,CAAC,YAAY,EAAEN,OAAQ,CAAC;IAClD,IAAIpC,aAAa,YAAbA,aAAa,CAAE2C,iBAAiB,EAAE;MACpCT,MAAM,CAACQ,mBAAmB,CAAC,SAAS,EAAEN,OAAQ,CAAC;MAC/CF,MAAM,CAACQ,mBAAmB,CAAC,UAAU,EAAEN,OAAQ,CAAC;IAClD;EACF,CAAC;EAED,MAAMQ,UAAU,GAAG;IAAEV,MAAM;IAAEC,MAAM;IAAEM;EAAQ,CAAC;EAE9C,IAAAI,0BAAe,EAACnD,UAAU,EAAEwC,MAAM,EAAEU,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAACnD,UAAU,EAAEyC,MAAM,EAAES,UAAU,CAAC;EAE/C,IAAI5C,aAAa,YAAbA,aAAa,CAAE2C,iBAAiB,EAAE;IACpCT,MAAM,CAACY,QAAQ,GAAG,CAAC;IACnBZ,MAAM,CAACa,gBAAgB,CACrB,SAAS,EACRtC,KAAK,IAAK;MACT,IAAI,CAACyB,MAAM,CAACc,QAAQ,CAACvC,KAAK,CAACwC,aAA4B,CAAC,EAAE;QACxDb,OAAO,CAAE3B,KAAK,CAAC;MACjB;IACF,CAAC,EACD;MAAE6B;IAAK,CACT,CAAC;EACH;EAEAJ,MAAM,CAACa,gBAAgB,CAAC,YAAY,EAAEX,OAAO,EAAG;IAAEc,OAAO,EAAE,IAAI;IAAEZ;EAAK,CAAC,CAAC;EAExE,MAAMa,QAAQ,GAAGd,cAAc,GAC3B,CAAEtC,OAAO,CAAiB0B,MAAM,IAAI,QAAQ,MAAM,QAAQ,GACzD1B,OAAO,CAA0BO,IAAI,KAAK,MAAM;EAErD,IAAI6C,QAAQ,EAAE;IACZjB,MAAM,CAACa,gBAAgB,CAAC,YAAY,EAAEX,OAAO,EAAG;MAAEc,OAAO,EAAE;IAAK,CAAC,CAAC;IAElE,IAAIlD,aAAa,YAAbA,aAAa,CAAE2C,iBAAiB,EAAE;MACpCT,MAAM,CAACa,gBAAgB,CACrB,UAAU,EACTtC,KAAK,IAAK;QACT,IAAI,CAACyB,MAAM,CAACc,QAAQ,CAACvC,KAAK,CAACwC,aAA4B,CAAC,EAAE;UACxDb,OAAO,CAAE3B,KAAK,CAAC;QACjB;MACF,CAAC,EACD;QAAE6B;MAAK,CACT,CAAC;IACH;EACF;AACF;AAEA,SAASc,kBAAkBA,CAACvD,OAAoB,EAAE;EAChD,IAAAwD,sCAA2B,EAAC3D,UAAU,EAAEG,OAAO,CAAC;AAClD;AAAC,IAAAyD,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAExB,eAAe;EACpByB,MAAM,EAAEN;AACV,CAAC","ignoreList":[]}
|
|
@@ -81,17 +81,26 @@ 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';
|
|
92
95
|
});
|
|
93
96
|
}
|
|
97
|
+
const {
|
|
98
|
+
selectorCondition
|
|
99
|
+
} = globalOptions || {};
|
|
94
100
|
const handler = () => {
|
|
101
|
+
if (selectorCondition && !target.matches(selectorCondition)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
95
104
|
animation.play(() => {
|
|
96
105
|
if (!animation.isCSS) {
|
|
97
106
|
target.dataset.motionEnter = 'done';
|