@wix/interact 1.83.0 → 1.85.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/WixInteractElement.js +6 -3
- package/dist/cjs/WixInteractElement.js.map +1 -1
- package/dist/cjs/core/Interact.js +21 -8
- package/dist/cjs/core/Interact.js.map +1 -1
- package/dist/cjs/core/add.js +35 -28
- package/dist/cjs/core/add.js.map +1 -1
- package/dist/cjs/core/remove.js +9 -10
- package/dist/cjs/core/remove.js.map +1 -1
- package/dist/cjs/core/utilities.js +16 -0
- package/dist/cjs/core/utilities.js.map +1 -0
- package/dist/cjs/handlers/click.js +14 -2
- package/dist/cjs/handlers/click.js.map +1 -1
- package/dist/cjs/handlers/hover.js +16 -3
- package/dist/cjs/handlers/hover.js.map +1 -1
- package/dist/cjs/handlers/viewEnter.js +3 -5
- package/dist/cjs/handlers/viewEnter.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/WixInteractElement.js +6 -3
- package/dist/esm/WixInteractElement.js.map +1 -1
- package/dist/esm/core/Interact.js +22 -11
- package/dist/esm/core/Interact.js.map +1 -1
- package/dist/esm/core/add.js +35 -28
- package/dist/esm/core/add.js.map +1 -1
- package/dist/esm/core/remove.js +9 -10
- package/dist/esm/core/remove.js.map +1 -1
- package/dist/esm/core/utilities.js +14 -0
- package/dist/esm/core/utilities.js.map +1 -0
- package/dist/esm/handlers/click.js +14 -2
- package/dist/esm/handlers/click.js.map +1 -1
- package/dist/esm/handlers/hover.js +16 -3
- package/dist/esm/handlers/hover.js.map +1 -1
- package/dist/esm/handlers/viewEnter.js +3 -5
- package/dist/esm/handlers/viewEnter.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/types/WixInteractElement.d.ts +1 -1
- package/dist/types/core/Interact.d.ts +6 -2
- package/dist/types/core/utilities.d.ts +2 -0
- package/dist/types/handlers/click.d.ts +2 -2
- package/dist/types/handlers/hover.d.ts +2 -2
- package/dist/types/types.d.ts +9 -11
- package/package.json +3 -3
|
@@ -33,19 +33,31 @@ function createTimeEffectHandler(element, effect, options, reducedMotion = false
|
|
|
33
33
|
// type === 'repeat'
|
|
34
34
|
// type === 'once'
|
|
35
35
|
animation.progress(0);
|
|
36
|
+
if (animation.isCSS) {
|
|
37
|
+
animation.onFinish(() => {
|
|
38
|
+
element.dataset.motionEnter = 'done';
|
|
39
|
+
});
|
|
40
|
+
}
|
|
36
41
|
animation.play();
|
|
37
42
|
}
|
|
38
43
|
};
|
|
39
44
|
}
|
|
40
45
|
function createTransitionHandler(element, {
|
|
41
|
-
effectId
|
|
46
|
+
effectId,
|
|
47
|
+
listContainer,
|
|
48
|
+
listItemSelector
|
|
42
49
|
}, options) {
|
|
50
|
+
const shouldSetStateOnElement = !!listContainer;
|
|
43
51
|
return __ => {
|
|
44
52
|
const wixInteractElement = element.closest('wix-interact-element');
|
|
45
53
|
if (!wixInteractElement) {
|
|
46
54
|
return;
|
|
47
55
|
}
|
|
48
|
-
|
|
56
|
+
let item;
|
|
57
|
+
if (shouldSetStateOnElement) {
|
|
58
|
+
item = element.closest(`${listContainer} > ${listItemSelector || ''}:has(:scope)`);
|
|
59
|
+
}
|
|
60
|
+
wixInteractElement.toggleEffect(effectId, options.method || 'toggle', item);
|
|
49
61
|
};
|
|
50
62
|
}
|
|
51
63
|
function addClickHandler(source, target, effect, options = {}, reducedMotion = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","initialPlay","type","__","play","reverse","playState","pause","progress","createTransitionHandler","effectId","wixInteractElement","closest","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addHandlerToMap","addEventListener","passive","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 IWixInteractElement,\n PointerTriggerParams,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect,\n options: PointerTriggerParams,\n reducedMotion: boolean = false,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n let initialPlay = true;\n const type = options.type || 'alternate';\n\n return (__: MouseEvent) => {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n if (animation.playState === 'running') {\n animation.pause();\n } else if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {
|
|
1
|
+
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","initialPlay","type","__","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","effectId","listContainer","listItemSelector","shouldSetStateOnElement","wixInteractElement","closest","item","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addHandlerToMap","addEventListener","passive","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 IWixInteractElement,\n PointerTriggerParams,\n EffectBase,\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 reducedMotion: boolean = false,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n let initialPlay = true;\n const type = options.type || 'alternate';\n\n return (__: MouseEvent) => {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n if (animation.playState === 'running') {\n animation.pause();\n } else if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\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) {\n const shouldSetStateOnElement = !!listContainer;\n\n return (__: MouseEvent) => {\n const wixInteractElement = element.closest(\n 'wix-interact-element',\n ) as IWixInteractElement;\n if (!wixInteractElement) {\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 wixInteractElement.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 reducedMotion: boolean = false,\n) {\n let handler: (event: MouseEvent) => void;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n reducedMotion,\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('click', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('click', handler, { passive: true, once });\n}\n\nfunction removeClickHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addClickHandler,\n remove: removeClickHandler,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,6 +27,11 @@ function createTimeEffectHandler(element, effect, options, reducedMotion = false
|
|
|
27
27
|
// type === 'repeat'
|
|
28
28
|
// type === 'once'
|
|
29
29
|
animation.progress(0);
|
|
30
|
+
if (animation.isCSS) {
|
|
31
|
+
animation.onFinish(() => {
|
|
32
|
+
element.dataset.motionEnter = 'done';
|
|
33
|
+
});
|
|
34
|
+
}
|
|
30
35
|
animation.play();
|
|
31
36
|
}
|
|
32
37
|
} else if (event.type === 'mouseleave') {
|
|
@@ -34,6 +39,7 @@ function createTimeEffectHandler(element, effect, options, reducedMotion = false
|
|
|
34
39
|
animation.reverse();
|
|
35
40
|
} else if (type === 'repeat') {
|
|
36
41
|
animation.cancel();
|
|
42
|
+
delete element.dataset.motionEnter;
|
|
37
43
|
} else if (type === 'state') {
|
|
38
44
|
if (animation.playState === 'running') {
|
|
39
45
|
animation.pause();
|
|
@@ -43,20 +49,27 @@ function createTimeEffectHandler(element, effect, options, reducedMotion = false
|
|
|
43
49
|
};
|
|
44
50
|
}
|
|
45
51
|
function createTransitionHandler(element, {
|
|
46
|
-
effectId
|
|
52
|
+
effectId,
|
|
53
|
+
listContainer,
|
|
54
|
+
listItemSelector
|
|
47
55
|
}, options) {
|
|
48
56
|
const method = options.method || 'toggle';
|
|
49
57
|
const isToggle = method === 'toggle';
|
|
58
|
+
const shouldSetStateOnElement = !!listContainer;
|
|
50
59
|
return event => {
|
|
51
60
|
const wixInteractElement = element.closest('wix-interact-element');
|
|
52
61
|
if (!wixInteractElement) {
|
|
53
62
|
return;
|
|
54
63
|
}
|
|
64
|
+
let item;
|
|
65
|
+
if (shouldSetStateOnElement) {
|
|
66
|
+
item = element.closest(`${listContainer} > ${listItemSelector || ''}:has(:scope)`);
|
|
67
|
+
}
|
|
55
68
|
if (event.type === 'mouseenter') {
|
|
56
69
|
const method_ = isToggle ? 'add' : method;
|
|
57
|
-
wixInteractElement.toggleEffect(effectId, method_);
|
|
70
|
+
wixInteractElement.toggleEffect(effectId, method_, item);
|
|
58
71
|
} else if (event.type === 'mouseleave' && isToggle) {
|
|
59
|
-
wixInteractElement.toggleEffect(effectId, 'remove');
|
|
72
|
+
wixInteractElement.toggleEffect(effectId, 'remove', item);
|
|
60
73
|
}
|
|
61
74
|
};
|
|
62
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","type","initialPlay","event","play","reverse","playState","progress","cancel","pause","createTransitionHandler","effectId","method","isToggle","wixInteractElement","closest","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addHandlerToMap","addEventListener","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 IWixInteractElement,\n PointerTriggerParams,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect,\n options: PointerTriggerParams,\n reducedMotion: boolean = false,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n const type = options.type || 'alternate';\n let initialPlay = true;\n\n return (event: MouseEvent) => {\n if (event.type === 'mouseenter') {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n animation.play();\n }\n } else if (event.type === 'mouseleave') {\n if (type === 'alternate') {\n animation.reverse();\n } else if (type === 'repeat') {\n animation.cancel();\n } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {
|
|
1
|
+
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","type","initialPlay","event","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","wixInteractElement","closest","item","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addHandlerToMap","addEventListener","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 IWixInteractElement,\n PointerTriggerParams,\n EffectBase,\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 reducedMotion: boolean = false,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n const type = options.type || 'alternate';\n let initialPlay = true;\n\n return (event: MouseEvent) => {\n if (event.type === 'mouseenter') {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\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') {\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) => {\n const wixInteractElement = element.closest(\n 'wix-interact-element',\n ) as IWixInteractElement;\n if (!wixInteractElement) {\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') {\n const method_ = isToggle ? 'add' : method;\n wixInteractElement.toggleEffect(effectId, method_, item);\n } else if (event.type === 'mouseleave' && isToggle) {\n wixInteractElement.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 reducedMotion: boolean = false,\n) {\n let handler: (event: MouseEvent) => void;\n let isStateTrigger = false;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & 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,\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('mouseenter', handler);\n source.removeEventListener('mouseleave', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('mouseenter', handler, { passive: true, once });\n\n const addLeave = isStateTrigger\n ? ((options as StateParams).method || 'toggle') === 'toggle'\n : (options as PointerTriggerParams).type !== 'once';\n if (addLeave) {\n source.addEventListener('mouseleave', handler, { passive: true });\n }\n}\n\nfunction removeHoverHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addHoverHandler,\n remove: removeHoverHandler,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -39,16 +39,14 @@ function getObserver(options) {
|
|
|
39
39
|
function addViewEnterHandler(source, target, effect, options = {}, reducedMotion = false) {
|
|
40
40
|
const observer = getObserver(options);
|
|
41
41
|
const animation = (0, _motion.getAnimation)(target, (0, _utilities.effectToAnimationOptions)(effect), undefined, reducedMotion);
|
|
42
|
-
if (animation) {
|
|
42
|
+
if (animation != null && animation.isCSS && options.type === 'once') {
|
|
43
43
|
animation.onFinish(() => {
|
|
44
|
-
|
|
45
|
-
target.dispatchEvent(endEvent);
|
|
44
|
+
target.dataset.motionEnter = 'done';
|
|
46
45
|
});
|
|
47
46
|
}
|
|
48
47
|
const handler = () => {
|
|
49
48
|
animation.play(() => {
|
|
50
|
-
if (animation.
|
|
51
|
-
// hack this here until we solve initial state properly
|
|
49
|
+
if (!animation.isCSS) {
|
|
52
50
|
target.dataset.motionEnter = 'done';
|
|
53
51
|
}
|
|
54
52
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","_utilities","observers","handlerMap","WeakMap","getObserver","options","key","JSON","stringify","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","handlers","get","target","source","handler","type","unobserve","root","rootMargin","inset","threshold","addViewEnterHandler","effect","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","
|
|
1
|
+
{"version":3,"names":["_motion","require","_utilities","observers","handlerMap","WeakMap","getObserver","options","key","JSON","stringify","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","handlers","get","target","source","handler","type","unobserve","root","rootMargin","inset","threshold","addViewEnterHandler","effect","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","isCSS","onFinish","dataset","motionEnter","play","cleanup","cancel","handlerObj","addHandlerToMap","observe","removeViewEnterHandler","element","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type { TimeEffect, HandlerObjectMap, ViewEnterParams } from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction getObserver(options: ViewEnterParams) {\n const key = JSON.stringify(options);\n\n if (observers[key]) {\n return observers[key];\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(entry.target as HTMLElement);\n\n handlers?.forEach(({ source, handler }) => {\n if (source === entry.target) {\n handler!();\n }\n });\n\n if (options.type === 'once') {\n observer.unobserve(entry.target);\n }\n }\n });\n },\n {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n },\n );\n\n observers[key] = observer;\n\n return observer;\n}\n\nfunction addViewEnterHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n options: ViewEnterParams = {},\n reducedMotion: boolean = false,\n) {\n const observer = getObserver(options);\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n\n if (animation?.isCSS && options.type === 'once') {\n animation.onFinish(() => {\n target.dataset.motionEnter = 'done';\n });\n }\n\n const handler = () => {\n animation.play(() => {\n if (!animation.isCSS) {\n target.dataset.motionEnter = 'done';\n }\n });\n };\n const cleanup = () => {\n observer.unobserve(source);\n animation.cancel();\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n observer.observe(source);\n}\n\nfunction removeViewEnterHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addViewEnterHandler,\n remove: removeViewEnterHandler,\n};\n"],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../src/types.ts"],"sourcesContent":["import type {\n NamedEffect,\n RangeOffset,\n ScrubTransitionEasing,\n MotionAnimationOptions,\n} from '@wix/motion';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'wix-interact-element': React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement>,\n HTMLElement\n > & {\n 'data-wix-path'?: string;\n };\n }\n }\n}\n\nexport type TriggerType =\n | 'hover'\n | 'click'\n | 'viewEnter'\n | 'pageVisible'\n | 'animationEnd'\n | 'viewProgress'\n | 'pointerMove';\n\nexport type ViewEnterType = 'once' | 'repeat' | 'alternate';\n\nexport type TransitionMethod = 'add' | 'remove' | 'toggle' | 'clear';\n\nexport type StateParams = {\n method: TransitionMethod;\n};\n\nexport type PointerTriggerParams = {\n type?: ViewEnterType | 'state';\n};\n\nexport type ViewEnterParams = {\n type?: ViewEnterType;\n threshold?: number;\n inset?: string;\n};\n\nexport type PointerMoveParams = {\n hitArea?: 'root' | 'self';\n};\n\nexport type AnimationEndParams = {\n effectId: string;\n};\n\nexport type TriggerParams =\n | StateParams\n | PointerTriggerParams\n | ViewEnterParams\n | PointerMoveParams\n | AnimationEndParams;\n\ntype Fill = 'none' | 'forwards' | 'backwards' | 'both';\n\ntype MotionKeyframeEffect = {\n name: string;\n keyframes: Keyframe[];\n};\n\ntype EffectEffectProperty =\n | {\n keyframeEffect: MotionKeyframeEffect;\n }\n | {\n namedEffect: NamedEffect;\n }\n | {\n customEffect: (element:
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/types.ts"],"sourcesContent":["import type {\n NamedEffect,\n RangeOffset,\n ScrubTransitionEasing,\n MotionAnimationOptions,\n} from '@wix/motion';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'wix-interact-element': React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement>,\n HTMLElement\n > & {\n 'data-wix-path'?: string;\n };\n }\n }\n}\n\nexport type TriggerType =\n | 'hover'\n | 'click'\n | 'viewEnter'\n | 'pageVisible'\n | 'animationEnd'\n | 'viewProgress'\n | 'pointerMove';\n\nexport type ViewEnterType = 'once' | 'repeat' | 'alternate';\n\nexport type TransitionMethod = 'add' | 'remove' | 'toggle' | 'clear';\n\nexport type StateParams = {\n method: TransitionMethod;\n};\n\nexport type PointerTriggerParams = {\n type?: ViewEnterType | 'state';\n};\n\nexport type ViewEnterParams = {\n type?: ViewEnterType;\n threshold?: number;\n inset?: string;\n};\n\nexport type PointerMoveParams = {\n hitArea?: 'root' | 'self';\n};\n\nexport type AnimationEndParams = {\n effectId: string;\n};\n\nexport type TriggerParams =\n | StateParams\n | PointerTriggerParams\n | ViewEnterParams\n | PointerMoveParams\n | AnimationEndParams;\n\ntype Fill = 'none' | 'forwards' | 'backwards' | 'both';\n\ntype MotionKeyframeEffect = {\n name: string;\n keyframes: Keyframe[];\n};\n\ntype EffectEffectProperty =\n | {\n keyframeEffect: MotionKeyframeEffect;\n }\n | {\n namedEffect: NamedEffect;\n }\n | {\n customEffect: (element: Element, progress: any) => void;\n };\n\nexport type TimeEffect = {\n duration: number;\n easing?: string;\n iterations?: number;\n alternate?: boolean;\n fill?: Fill;\n reversed?: boolean;\n delay?: number;\n} & EffectEffectProperty;\n\nexport type ScrubEffect = {\n easing?: string;\n iterations?: number;\n alternate?: boolean;\n fill?: Fill;\n reversed?: boolean;\n rangeStart?: RangeOffset;\n rangeEnd?: RangeOffset;\n centeredToTarget?: boolean;\n transitionDuration?: number;\n transitionDelay?: number;\n transitionEasing?: ScrubTransitionEasing;\n} & EffectEffectProperty;\n\nexport type TransitionOptions = {\n duration?: number;\n delay?: number;\n easing?: string;\n};\n\nexport type StyleProperty = {\n name: string;\n value: string;\n};\n\nexport type TransitionProperty = StyleProperty & TransitionOptions;\n\nexport type TransitionEffect = {\n key?: string;\n effectId?: string;\n} & {\n transition?: TransitionOptions & {\n styleProperties: StyleProperty[];\n };\n transitionProperties?: TransitionProperty[];\n};\n\nexport type EffectBase = {\n key?: string;\n listContainer?: string;\n listItemSelector?: string;\n conditions?: string[];\n selector?: string;\n effectId?: string;\n};\n\nexport type EffectRef = EffectBase & { effectId: string };\n\nexport type Effect = EffectBase & (TimeEffect | ScrubEffect | TransitionEffect);\n\nexport type Condition = {\n type: 'media' | 'container';\n predicate?: string;\n};\n\nexport type InteractionTrigger = {\n key: string;\n listContainer?: string;\n listItemSelector?: string;\n trigger: TriggerType;\n params?: TriggerParams;\n conditions?: string[];\n selector?: string;\n};\n\nexport type Interaction = InteractionTrigger & {\n effects: ((Effect | EffectRef) & { interactionId?: string })[];\n};\n\nexport type InteractConfig = {\n effects: Record<string, Effect>;\n conditions?: Record<string, Condition>;\n interactions: Interaction[];\n};\n\nexport type AnimationOptions<T extends 'time' | 'scrub'> =\n MotionAnimationOptions<T> & EffectEffectProperty;\n\n/// ////////////////////////////////////////////////////////\n/// ////////////////////////////////////////////////////////\n/// ////////////////////////////////////////////////////////\n\nexport interface IWixInteractElement extends HTMLElement {\n _internals: (ElementInternals & { states: Set<string> }) | null;\n connected: boolean;\n sheet: CSSStyleSheet | null;\n _observers: WeakMap<HTMLElement, MutationObserver>;\n connectedCallback(): void;\n disconnectedCallback(): void;\n connect(path?: string): void;\n disconnect(): void;\n renderStyle(cssRules: string[]): void;\n toggleEffect(\n effectId: string,\n method: StateParams['method'],\n item?: HTMLElement | null,\n ): void;\n watchChildList(listContainer: string): void;\n}\n\nexport type InteractionParamsTypes = {\n hover: StateParams | PointerTriggerParams;\n click: StateParams | PointerTriggerParams;\n viewEnter: ViewEnterParams;\n pageVisible: ViewEnterParams;\n animationEnd: AnimationEndParams;\n viewProgress: ViewEnterParams;\n pointerMove: PointerMoveParams;\n};\n\nexport type InteractionHandlerModule<T extends TriggerType> = {\n add: (\n source: HTMLElement,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n reducedMotion?: boolean,\n ) => void;\n remove: (element: HTMLElement) => void;\n};\n\nexport type TriggerHandlerMap<T extends TriggerType> = {\n [K in T]: InteractionHandlerModule<K>;\n};\n\nexport type HandlerObject = {\n source: HTMLElement;\n target: HTMLElement;\n cleanup: () => void;\n handler?: () => void;\n};\n\nexport type HandlerObjectMap = WeakMap<HTMLElement, Set<HandlerObject>>;\n\nexport type InteractCache = {\n effects: {\n [effectId: string]: Effect;\n };\n conditions: {\n [conditionId: string]: Condition;\n };\n interactions: {\n [path: string]: {\n triggers: Interaction[];\n effects: Record<\n string,\n (InteractionTrigger & { effect: Effect | EffectRef })[]\n >;\n interactionIds: Set<string>;\n selectors: Set<string>;\n };\n };\n};\n\nexport type CreateTransitionCSSParams = {\n key: string;\n effectId: string;\n transition?: TransitionEffect['transition'];\n properties?: TransitionProperty[];\n childSelector?: string;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -77,11 +77,14 @@ export function getWixInteractElement() {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
toggleEffect(effectId, method) {
|
|
80
|
+
toggleEffect(effectId, method, item) {
|
|
81
|
+
if (item === null) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
81
84
|
if (isLegacyStateSyntax) {
|
|
82
85
|
effectId = `--${effectId}`;
|
|
83
86
|
}
|
|
84
|
-
if (this._internals) {
|
|
87
|
+
if (this._internals && !item) {
|
|
85
88
|
if (method === 'toggle') {
|
|
86
89
|
this._internals.states.has(effectId) ? this._internals.states.delete(effectId) : this._internals.states.add(effectId);
|
|
87
90
|
} else if (method === 'add') {
|
|
@@ -103,7 +106,7 @@ export function getWixInteractElement() {
|
|
|
103
106
|
} else if (method === 'clear') {
|
|
104
107
|
currentEffects.clear();
|
|
105
108
|
}
|
|
106
|
-
this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR] = Array.from(currentEffects).join(' ');
|
|
109
|
+
(item || this).dataset[WIX_INTERACT_EFFECT_DATA_ATTR] = Array.from(currentEffects).join(' ');
|
|
107
110
|
}
|
|
108
111
|
}
|
|
109
112
|
getActiveEffects() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["add","addListItems","remove","removeListItems","WIX_INTERACT_EFFECT_DATA_ATTR","getWixInteractElement","checkedForLegacyStateSyntax","isLegacyStateSyntax","WixInteractElement","HTMLElement","constructor","_defineProperty","connected","sheet","_observers","WeakMap","attachInternals","_internals","states","delete","e","connectedCallback","connect","disconnectedCallback","disconnect","key","dataset","wixPath","index","document","adoptedStyleSheets","indexOf","splice","console","warn","renderStyle","cssRules","CSSStyleSheet","replace","join","push","position","length","cssRule","insertRule","error","toggleEffect","effectId","method","has","clear","_this$dataset$WIX_INT","currentEffects","Set","split","Array","from","getActiveEffects","effects","map","effect","raw","trimmed","trim","watchChildList","listContainer","list","querySelector","observer","get","MutationObserver","_childListChangeHandler","bind","set","observe","childList","entries","removedElements","addedElements","forEach","entry","removedNodes","el","addedNodes"],"sources":["../../src/WixInteractElement.ts"],"sourcesContent":["import type { StateParams } from './types';\nimport { add, addListItems } from './core/add';\nimport { remove, removeListItems } from './core/remove';\n\nexport const WIX_INTERACT_EFFECT_DATA_ATTR = 'wixInteractEffect';\n\nexport function getWixInteractElement() {\n let checkedForLegacyStateSyntax = false;\n let isLegacyStateSyntax = false;\n\n return class WixInteractElement extends HTMLElement {\n _internals: (ElementInternals & { states: Set<string> }) | null;\n connected: boolean;\n sheet: CSSStyleSheet | null;\n _observers: WeakMap<HTMLElement, MutationObserver>;\n\n constructor() {\n super();\n\n this.connected = false;\n this.sheet = null;\n this._observers = new WeakMap();\n\n if (this.attachInternals) {\n this._internals = this.attachInternals() as ElementInternals & {\n states: Set<string>;\n };\n\n if (!checkedForLegacyStateSyntax) {\n checkedForLegacyStateSyntax = true;\n\n try {\n this._internals.states.add('test');\n this._internals.states.delete('test');\n } catch (e) {\n isLegacyStateSyntax = true;\n }\n }\n } else {\n checkedForLegacyStateSyntax = true; // custom states not supported - skip syntax check\n this._internals = null;\n }\n }\n connectedCallback() {\n this.connect();\n }\n\n disconnectedCallback() {\n this.disconnect();\n }\n\n disconnect() {\n const key = this.dataset.wixPath;\n\n if (key) {\n remove(key);\n }\n\n if (this.sheet) {\n const index = document.adoptedStyleSheets.indexOf(this.sheet);\n document.adoptedStyleSheets.splice(index, 1);\n }\n\n this._observers = new WeakMap();\n\n this.connected = false;\n }\n\n connect(key?: string) {\n if (this.connected) {\n return;\n }\n\n key = key || this.dataset.wixPath;\n\n if (!key) {\n console.warn('WixInteractElement: No key provided');\n return;\n }\n\n this.connected = add(this, key);\n }\n\n renderStyle(cssRules: string[]) {\n if (!this.sheet) {\n this.sheet = new CSSStyleSheet();\n void this.sheet.replace(cssRules.join('\\n'));\n\n document.adoptedStyleSheets.push(this.sheet);\n } else {\n let position = this.sheet.cssRules.length;\n\n for (const cssRule of cssRules) {\n try {\n this.sheet.insertRule(cssRule, position);\n position++;\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n toggleEffect(effectId: string, method: StateParams['method']) {\n if (isLegacyStateSyntax) {\n effectId = `--${effectId}`;\n }\n\n if (this._internals) {\n if (method === 'toggle') {\n this._internals.states.has(effectId)\n ? this._internals.states.delete(effectId)\n : this._internals.states.add(effectId);\n } else if (method === 'add') {\n this._internals.states.add(effectId);\n } else if (method === 'remove') {\n this._internals.states.delete(effectId);\n } else if (method === 'clear') {\n this._internals.states.clear();\n }\n } else {\n const currentEffects = new Set(\n this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR]?.split(' ') || [],\n );\n\n if (method === 'toggle') {\n currentEffects.has(effectId)\n ? currentEffects.delete(effectId)\n : currentEffects.add(effectId);\n } else if (method === 'add') {\n currentEffects.add(effectId);\n } else if (method === 'remove') {\n currentEffects.delete(effectId);\n } else if (method === 'clear') {\n currentEffects.clear();\n }\n\n this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR] =\n Array.from(currentEffects).join(' ');\n }\n }\n\n getActiveEffects(): string[] {\n if (this._internals) {\n const effects = Array.from(this._internals.states);\n return isLegacyStateSyntax\n ? effects.map((effect) => effect.replace(/^--/g, ''))\n : effects;\n }\n\n const raw = this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR] || '';\n const trimmed = raw.trim();\n return trimmed ? trimmed.split(/\\s+/) : [];\n }\n\n watchChildList(listContainer: string): void {\n const list = this.querySelector(listContainer);\n\n if (list) {\n // TODO: we can probably improve this and use less observers, this impl. uses one per container element\n let observer = this._observers.get(list as HTMLElement);\n\n if (!observer) {\n observer = new MutationObserver(\n this._childListChangeHandler.bind(this, listContainer),\n );\n\n this._observers.set(list as HTMLElement, observer);\n\n observer.observe(list as HTMLElement, { childList: true });\n }\n }\n }\n\n _childListChangeHandler(listContainer: string, entries: MutationRecord[]) {\n const key = this.dataset.wixPath;\n const removedElements: HTMLElement[] = [];\n const addedElements: HTMLElement[] = [];\n\n entries.forEach((entry) => {\n entry.removedNodes.forEach((el) => {\n if (el instanceof HTMLElement) {\n removedElements.push(el);\n }\n });\n\n entry.addedNodes.forEach((el) => {\n if (el instanceof HTMLElement) {\n addedElements.push(el);\n }\n });\n });\n\n removeListItems(removedElements);\n key && addListItems(this, key, listContainer, addedElements);\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["add","addListItems","remove","removeListItems","WIX_INTERACT_EFFECT_DATA_ATTR","getWixInteractElement","checkedForLegacyStateSyntax","isLegacyStateSyntax","WixInteractElement","HTMLElement","constructor","_defineProperty","connected","sheet","_observers","WeakMap","attachInternals","_internals","states","delete","e","connectedCallback","connect","disconnectedCallback","disconnect","key","dataset","wixPath","index","document","adoptedStyleSheets","indexOf","splice","console","warn","renderStyle","cssRules","CSSStyleSheet","replace","join","push","position","length","cssRule","insertRule","error","toggleEffect","effectId","method","item","has","clear","_this$dataset$WIX_INT","currentEffects","Set","split","Array","from","getActiveEffects","effects","map","effect","raw","trimmed","trim","watchChildList","listContainer","list","querySelector","observer","get","MutationObserver","_childListChangeHandler","bind","set","observe","childList","entries","removedElements","addedElements","forEach","entry","removedNodes","el","addedNodes"],"sources":["../../src/WixInteractElement.ts"],"sourcesContent":["import type { StateParams } from './types';\nimport { add, addListItems } from './core/add';\nimport { remove, removeListItems } from './core/remove';\n\nexport const WIX_INTERACT_EFFECT_DATA_ATTR = 'wixInteractEffect';\n\nexport function getWixInteractElement() {\n let checkedForLegacyStateSyntax = false;\n let isLegacyStateSyntax = false;\n\n return class WixInteractElement extends HTMLElement {\n _internals: (ElementInternals & { states: Set<string> }) | null;\n connected: boolean;\n sheet: CSSStyleSheet | null;\n _observers: WeakMap<HTMLElement, MutationObserver>;\n\n constructor() {\n super();\n\n this.connected = false;\n this.sheet = null;\n this._observers = new WeakMap();\n\n if (this.attachInternals) {\n this._internals = this.attachInternals() as ElementInternals & {\n states: Set<string>;\n };\n\n if (!checkedForLegacyStateSyntax) {\n checkedForLegacyStateSyntax = true;\n\n try {\n this._internals.states.add('test');\n this._internals.states.delete('test');\n } catch (e) {\n isLegacyStateSyntax = true;\n }\n }\n } else {\n checkedForLegacyStateSyntax = true; // custom states not supported - skip syntax check\n this._internals = null;\n }\n }\n connectedCallback() {\n this.connect();\n }\n\n disconnectedCallback() {\n this.disconnect();\n }\n\n disconnect() {\n const key = this.dataset.wixPath;\n\n if (key) {\n remove(key);\n }\n\n if (this.sheet) {\n const index = document.adoptedStyleSheets.indexOf(this.sheet);\n document.adoptedStyleSheets.splice(index, 1);\n }\n\n this._observers = new WeakMap();\n\n this.connected = false;\n }\n\n connect(key?: string) {\n if (this.connected) {\n return;\n }\n\n key = key || this.dataset.wixPath;\n\n if (!key) {\n console.warn('WixInteractElement: No key provided');\n return;\n }\n\n this.connected = add(this, key);\n }\n\n renderStyle(cssRules: string[]) {\n if (!this.sheet) {\n this.sheet = new CSSStyleSheet();\n void this.sheet.replace(cssRules.join('\\n'));\n\n document.adoptedStyleSheets.push(this.sheet);\n } else {\n let position = this.sheet.cssRules.length;\n\n for (const cssRule of cssRules) {\n try {\n this.sheet.insertRule(cssRule, position);\n position++;\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n toggleEffect(\n effectId: string,\n method: StateParams['method'],\n item?: HTMLElement | null,\n ) {\n if (item === null) {\n return;\n }\n if (isLegacyStateSyntax) {\n effectId = `--${effectId}`;\n }\n\n if (this._internals && !item) {\n if (method === 'toggle') {\n this._internals.states.has(effectId)\n ? this._internals.states.delete(effectId)\n : this._internals.states.add(effectId);\n } else if (method === 'add') {\n this._internals.states.add(effectId);\n } else if (method === 'remove') {\n this._internals.states.delete(effectId);\n } else if (method === 'clear') {\n this._internals.states.clear();\n }\n } else {\n const currentEffects = new Set(\n this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR]?.split(' ') || [],\n );\n\n if (method === 'toggle') {\n currentEffects.has(effectId)\n ? currentEffects.delete(effectId)\n : currentEffects.add(effectId);\n } else if (method === 'add') {\n currentEffects.add(effectId);\n } else if (method === 'remove') {\n currentEffects.delete(effectId);\n } else if (method === 'clear') {\n currentEffects.clear();\n }\n\n (item || this).dataset[WIX_INTERACT_EFFECT_DATA_ATTR] =\n Array.from(currentEffects).join(' ');\n }\n }\n\n getActiveEffects(): string[] {\n if (this._internals) {\n const effects = Array.from(this._internals.states);\n return isLegacyStateSyntax\n ? effects.map((effect) => effect.replace(/^--/g, ''))\n : effects;\n }\n\n const raw = this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR] || '';\n const trimmed = raw.trim();\n return trimmed ? trimmed.split(/\\s+/) : [];\n }\n\n watchChildList(listContainer: string): void {\n const list = this.querySelector(listContainer);\n\n if (list) {\n // TODO: we can probably improve this and use less observers, this impl. uses one per container element\n let observer = this._observers.get(list as HTMLElement);\n\n if (!observer) {\n observer = new MutationObserver(\n this._childListChangeHandler.bind(this, listContainer),\n );\n\n this._observers.set(list as HTMLElement, observer);\n\n observer.observe(list as HTMLElement, { childList: true });\n }\n }\n }\n\n _childListChangeHandler(listContainer: string, entries: MutationRecord[]) {\n const key = this.dataset.wixPath;\n const removedElements: HTMLElement[] = [];\n const addedElements: HTMLElement[] = [];\n\n entries.forEach((entry) => {\n entry.removedNodes.forEach((el) => {\n if (el instanceof HTMLElement) {\n removedElements.push(el);\n }\n });\n\n entry.addedNodes.forEach((el) => {\n if (el instanceof HTMLElement) {\n addedElements.push(el);\n }\n });\n });\n\n removeListItems(removedElements);\n key && addListItems(this, key, listContainer, addedElements);\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
var _Interact;
|
|
3
|
+
import { getInterpolatedKey } from './utilities';
|
|
3
4
|
import { getWixInteractElement } from '../WixInteractElement';
|
|
4
5
|
import { generateId } from '../utils';
|
|
5
6
|
function registerWixInteractElement() {
|
|
@@ -10,6 +11,9 @@ function registerWixInteractElement() {
|
|
|
10
11
|
}
|
|
11
12
|
return false;
|
|
12
13
|
}
|
|
14
|
+
function _convertToKeyTemplate(key) {
|
|
15
|
+
return key.replace(/\[([-\w]+)]/g, '[]');
|
|
16
|
+
}
|
|
13
17
|
export class Interact {
|
|
14
18
|
constructor() {
|
|
15
19
|
_defineProperty(this, "dataCache", void 0);
|
|
@@ -62,12 +66,17 @@ export class Interact {
|
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
has(key) {
|
|
65
|
-
return !!this.
|
|
69
|
+
return !!this.get(key);
|
|
70
|
+
}
|
|
71
|
+
get(key) {
|
|
72
|
+
const processedKey = _convertToKeyTemplate(key);
|
|
73
|
+
return this.dataCache.interactions[processedKey];
|
|
66
74
|
}
|
|
67
75
|
clearInteractionStateForKey(key) {
|
|
68
|
-
var _this$
|
|
69
|
-
const interactionIds = ((_this$
|
|
70
|
-
interactionIds.forEach(
|
|
76
|
+
var _this$get;
|
|
77
|
+
const interactionIds = ((_this$get = this.get(key)) == null ? void 0 : _this$get.interactionIds) || [];
|
|
78
|
+
interactionIds.forEach(interactionId_ => {
|
|
79
|
+
const interactionId = getInterpolatedKey(interactionId_, key);
|
|
71
80
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
72
81
|
delete this.addedInteractions[interactionId];
|
|
73
82
|
});
|
|
@@ -89,7 +98,7 @@ export class Interact {
|
|
|
89
98
|
return Interact.instances.find(instance => instance.has(key));
|
|
90
99
|
}
|
|
91
100
|
static getElement(key) {
|
|
92
|
-
return Interact.elementCache.get(key);
|
|
101
|
+
return key ? Interact.elementCache.get(key) : undefined;
|
|
93
102
|
}
|
|
94
103
|
static setElement(key, element) {
|
|
95
104
|
Interact.elementCache.set(key, element);
|
|
@@ -100,15 +109,17 @@ _defineProperty(Interact, "forceReducedMotion", false);
|
|
|
100
109
|
_defineProperty(Interact, "instances", []);
|
|
101
110
|
_defineProperty(Interact, "elementCache", new Map());
|
|
102
111
|
let interactionIdCounter = 0;
|
|
103
|
-
export function getSelector(d,
|
|
104
|
-
|
|
105
|
-
asCombinator = false
|
|
106
|
-
|
|
112
|
+
export function getSelector(d, _temp) {
|
|
113
|
+
let {
|
|
114
|
+
asCombinator = false,
|
|
115
|
+
addItemFilter = false
|
|
116
|
+
} = _temp === void 0 ? {} : _temp;
|
|
107
117
|
if (d.listContainer) {
|
|
118
|
+
const itemFilter = `${addItemFilter && d.listItemSelector ? ` > ${d.listItemSelector}` : ''}`;
|
|
108
119
|
if (d.selector) {
|
|
109
|
-
return `${d.listContainer} ${d.selector}`;
|
|
120
|
+
return `${d.listContainer}${itemFilter} ${d.selector}`;
|
|
110
121
|
}
|
|
111
|
-
return `${d.listContainer} >
|
|
122
|
+
return `${d.listContainer}${itemFilter || ' > *'}`;
|
|
112
123
|
} else if (d.selector) {
|
|
113
124
|
return d.selector;
|
|
114
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getWixInteractElement","generateId","registerWixInteractElement","customElements","get","wixInteractElement","define","Interact","constructor","_defineProperty","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","elements","Set","init","config","window","parseConfig","didRegister","elementCache","forEach","element","key","connect","destroy","disconnect","clear","instances","splice","indexOf","setElement","add","deleteElement","clearInteractionStateForKey","delete","has","_this$dataCache$inter","interactionIds","interactionId","create","instance","push","length","getInstance","find","getElement","set","_Interact","Map","interactionIdCounter","getSelector","d","asCombinator","listContainer","selector","_config$interactions","interaction_","source","interactionIdx","effects_","rest","console","error","triggers","selectors","Array","from","reverse","interaction","effect","target","effectId","referencedEffect"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IWixInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n} from '../types';\nimport { getWixInteractElement } from '../WixInteractElement';\nimport { generateId } from '../utils';\n\nfunction registerWixInteractElement() {\n if (!customElements.get('wix-interact-element')) {\n const wixInteractElement = getWixInteractElement();\n customElements.define('wix-interact-element', wixInteractElement);\n\n return true;\n }\n\n return false;\n}\n\nexport class Interact {\n dataCache: InteractCache;\n addedInteractions: { [interactionId: string]: boolean };\n listInteractionsCache: {\n [listContainer: string]: { [interactionId: string]: boolean };\n };\n elements: Set<IWixInteractElement>;\n static forceReducedMotion: boolean = false;\n static instances: Interact[] = [];\n static elementCache = new Map<string, IWixInteractElement>();\n\n constructor() {\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n this.elements = new Set();\n }\n\n init(config: InteractConfig): void {\n if (typeof window === 'undefined' || !window.customElements) {\n return;\n }\n\n this.dataCache = parseConfig(config);\n\n const didRegister = registerWixInteractElement();\n\n if (!didRegister) {\n Interact.elementCache.forEach((element: IWixInteractElement, key) =>\n element.connect(key),\n );\n }\n }\n\n destroy(): void {\n for (let element of this.elements) {\n element.disconnect();\n }\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n this.elements.clear();\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n Interact.instances.splice(Interact.instances.indexOf(this), 1);\n }\n\n setElement(key: string, element: IWixInteractElement) {\n this.elements.add(element);\n\n Interact.setElement(key, element);\n }\n\n deleteElement(key: string) {\n const element = Interact.elementCache.get(key);\n\n this.clearInteractionStateForKey(key);\n\n if (element) {\n this.elements.delete(element);\n Interact.elementCache.delete(key);\n }\n }\n\n has(key: string): boolean {\n return !!this.dataCache.interactions[key];\n }\n\n clearInteractionStateForKey(key: string): void {\n const interactionIds =\n this.dataCache.interactions[key]?.interactionIds || [];\n\n interactionIds.forEach((interactionId) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.addedInteractions[interactionId];\n });\n }\n\n static create(config: InteractConfig): Interact {\n const instance = new Interact();\n Interact.instances.push(instance);\n\n instance.init(config);\n\n return instance;\n }\n\n static destroy(): void {\n Interact.elementCache.forEach((element: IWixInteractElement) => {\n element.disconnect();\n });\n Interact.instances.length = 0;\n Interact.elementCache.clear();\n }\n\n static getInstance(key: string): Interact | undefined {\n return Interact.instances.find((instance) => instance.has(key));\n }\n\n static getElement(key: string): IWixInteractElement | undefined {\n return Interact.elementCache.get(key);\n }\n\n static setElement(key: string, element: IWixInteractElement): void {\n Interact.elementCache.set(key, element);\n }\n}\n\nlet interactionIdCounter = 0;\n\nexport function getSelector(\n d: Interaction | Effect,\n asCombinator: boolean = false,\n): string {\n if (d.listContainer) {\n if (d.selector) {\n return `${d.listContainer} ${d.selector}`;\n }\n\n return `${d.listContainer} > *`;\n } else if (d.selector) {\n return d.selector;\n }\n\n // TODO: consider moving :scope to be configurable since it may lead to unexpected results in some cases\n return asCombinator ? '> :first-child' : ':scope > :first-child';\n}\n\n/**\n * Parses the config object and caches interactions, effects, and conditions\n */\nfunction parseConfig(config: InteractConfig): InteractCache {\n const conditions = config.conditions || {};\n const interactions: InteractCache['interactions'] = {};\n\n config.interactions?.forEach((interaction_) => {\n const source = interaction_.key;\n const interactionIdx = ++interactionIdCounter;\n const { effects: effects_, ...rest } = interaction_;\n\n if (!source) {\n console.error(\n `Interaction ${interactionIdx} is missing a key for source element.`,\n );\n return;\n }\n\n if (!interactions[source]) {\n interactions[source] = {\n triggers: [],\n effects: {},\n interactionIds: new Set(),\n selectors: new Set(),\n };\n }\n\n /*\n * Cache interaction trigger by source element\n */\n const effects = Array.from(effects_);\n effects.reverse(); // reverse to ensure the first effect is the one that will be applied first\n const interaction = { ...rest, effects };\n\n interactions[source].triggers.push(interaction);\n interactions[source].selectors.add(getSelector(interaction));\n\n const listContainer = interaction.listContainer;\n\n effects.forEach((effect) => {\n /*\n * Target cascade order is the first of:\n * -> Config.interactions.effects.effect.key\n * -> Config.effects.effect.key\n * -> Config.interactions.interaction.key\n */\n let target = effect.key;\n\n if (!target && (effect as EffectRef).effectId) {\n const referencedEffect = config.effects[(effect as EffectRef).effectId];\n\n if (referencedEffect) {\n target = referencedEffect.key;\n }\n }\n\n if (!(effect as EffectRef).effectId) {\n (effect as EffectRef).effectId = generateId();\n }\n\n // if no target is specified, use the source element as the target\n target = target || source;\n effect.key = target;\n const effectId = (effect as EffectRef).effectId;\n\n if (listContainer && effect.listContainer) {\n // we do not support having 2 separate lists for same interaction\n if (target !== source || effect.listContainer !== listContainer) {\n return;\n }\n }\n\n const interactionId = `${target}::${effectId}::${interactionIdx}`;\n effect.interactionId = interactionId;\n interactions[source].interactionIds.add(interactionId);\n\n if (target === source) {\n // if target is the source element, no need to add an interaction to `effects`\n return;\n }\n\n /*\n * Cache interaction effect by target element\n */\n if (!interactions[target]) {\n interactions[target] = {\n triggers: [],\n effects: {\n [interactionId]: [],\n },\n interactionIds: new Set(),\n selectors: new Set(),\n };\n } else if (!interactions[target].effects[interactionId]) {\n interactions[target].effects[interactionId] = [];\n interactions[target].interactionIds.add(interactionId);\n }\n\n interactions[target].effects[interactionId].push({ ...rest, effect });\n interactions[target].selectors.add(getSelector(effect));\n });\n });\n\n return {\n effects: config.effects || {},\n conditions,\n interactions,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["getInterpolatedKey","getWixInteractElement","generateId","registerWixInteractElement","customElements","get","wixInteractElement","define","_convertToKeyTemplate","key","replace","Interact","constructor","_defineProperty","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","elements","Set","init","config","window","parseConfig","didRegister","elementCache","forEach","element","connect","destroy","disconnect","clear","instances","splice","indexOf","setElement","add","deleteElement","clearInteractionStateForKey","delete","has","processedKey","_this$get","interactionIds","interactionId_","interactionId","create","instance","push","length","getInstance","find","getElement","undefined","set","_Interact","Map","interactionIdCounter","getSelector","d","_temp","asCombinator","addItemFilter","listContainer","itemFilter","listItemSelector","selector","_config$interactions","interaction_","source","interactionIdx","effects_","rest","console","error","triggers","selectors","Array","from","reverse","interaction","effect","target","effectId","referencedEffect"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IWixInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n} from '../types';\nimport { getInterpolatedKey } from './utilities';\nimport { getWixInteractElement } from '../WixInteractElement';\nimport { generateId } from '../utils';\n\nfunction registerWixInteractElement() {\n if (!customElements.get('wix-interact-element')) {\n const wixInteractElement = getWixInteractElement();\n customElements.define('wix-interact-element', wixInteractElement);\n\n return true;\n }\n\n return false;\n}\n\nfunction _convertToKeyTemplate(key: string) {\n return key.replace(/\\[([-\\w]+)]/g, '[]');\n}\n\nexport class Interact {\n dataCache: InteractCache;\n addedInteractions: { [interactionId: string]: boolean };\n listInteractionsCache: {\n [listContainer: string]: { [interactionId: string]: boolean };\n };\n elements: Set<IWixInteractElement>;\n static forceReducedMotion: boolean = false;\n static instances: Interact[] = [];\n static elementCache = new Map<string, IWixInteractElement>();\n\n constructor() {\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n this.elements = new Set();\n }\n\n init(config: InteractConfig): void {\n if (typeof window === 'undefined' || !window.customElements) {\n return;\n }\n\n this.dataCache = parseConfig(config);\n\n const didRegister = registerWixInteractElement();\n\n if (!didRegister) {\n Interact.elementCache.forEach((element: IWixInteractElement, key) =>\n element.connect(key),\n );\n }\n }\n\n destroy(): void {\n for (let element of this.elements) {\n element.disconnect();\n }\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n this.elements.clear();\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n Interact.instances.splice(Interact.instances.indexOf(this), 1);\n }\n\n setElement(key: string, element: IWixInteractElement) {\n this.elements.add(element);\n\n Interact.setElement(key, element);\n }\n\n deleteElement(key: string) {\n const element = Interact.elementCache.get(key);\n\n this.clearInteractionStateForKey(key);\n\n if (element) {\n this.elements.delete(element);\n Interact.elementCache.delete(key);\n }\n }\n\n has(key: string): boolean {\n return !!this.get(key);\n }\n\n get(key: string): InteractCache['interactions'][string] | undefined {\n const processedKey = _convertToKeyTemplate(key);\n return this.dataCache.interactions[processedKey];\n }\n\n clearInteractionStateForKey(key: string): void {\n const interactionIds = this.get(key)?.interactionIds || [];\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, key);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.addedInteractions[interactionId];\n });\n }\n\n static create(config: InteractConfig): Interact {\n const instance = new Interact();\n Interact.instances.push(instance);\n\n instance.init(config);\n\n return instance;\n }\n\n static destroy(): void {\n Interact.elementCache.forEach((element: IWixInteractElement) => {\n element.disconnect();\n });\n Interact.instances.length = 0;\n Interact.elementCache.clear();\n }\n\n static getInstance(key: string): Interact | undefined {\n return Interact.instances.find((instance) => instance.has(key));\n }\n\n static getElement(key: string | undefined): IWixInteractElement | undefined {\n return key ? Interact.elementCache.get(key) : undefined;\n }\n\n static setElement(key: string, element: IWixInteractElement): void {\n Interact.elementCache.set(key, element);\n }\n}\n\nlet interactionIdCounter = 0;\n\nexport function getSelector(\n d: Interaction | Effect,\n {\n asCombinator = false,\n addItemFilter = false,\n }: { asCombinator?: boolean; addItemFilter?: boolean } = {},\n): string {\n if (d.listContainer) {\n const itemFilter = `${\n addItemFilter && d.listItemSelector ? ` > ${d.listItemSelector}` : ''\n }`;\n\n if (d.selector) {\n return `${d.listContainer}${itemFilter} ${d.selector}`;\n }\n\n return `${d.listContainer}${itemFilter || ' > *'}`;\n } else if (d.selector) {\n return d.selector;\n }\n\n // TODO: consider moving :scope to be configurable since it may lead to unexpected results in some cases\n return asCombinator ? '> :first-child' : ':scope > :first-child';\n}\n\n/**\n * Parses the config object and caches interactions, effects, and conditions\n */\nfunction parseConfig(config: InteractConfig): InteractCache {\n const conditions = config.conditions || {};\n const interactions: InteractCache['interactions'] = {};\n\n config.interactions?.forEach((interaction_) => {\n const source = interaction_.key;\n const interactionIdx = ++interactionIdCounter;\n const { effects: effects_, ...rest } = interaction_;\n\n if (!source) {\n console.error(\n `Interaction ${interactionIdx} is missing a key for source element.`,\n );\n return;\n }\n\n if (!interactions[source]) {\n interactions[source] = {\n triggers: [],\n effects: {},\n interactionIds: new Set(),\n selectors: new Set(),\n };\n }\n\n /*\n * Cache interaction trigger by source element\n */\n const effects = Array.from(effects_);\n effects.reverse(); // reverse to ensure the first effect is the one that will be applied first\n const interaction = { ...rest, effects };\n\n interactions[source].triggers.push(interaction);\n interactions[source].selectors.add(getSelector(interaction));\n\n const listContainer = interaction.listContainer;\n\n effects.forEach((effect) => {\n /*\n * Target cascade order is the first of:\n * -> Config.interactions.effects.effect.key\n * -> Config.effects.effect.key\n * -> Config.interactions.interaction.key\n */\n let target = effect.key;\n\n if (!target && (effect as EffectRef).effectId) {\n const referencedEffect = config.effects[(effect as EffectRef).effectId];\n\n if (referencedEffect) {\n target = referencedEffect.key;\n }\n }\n\n if (!(effect as EffectRef).effectId) {\n (effect as EffectRef).effectId = generateId();\n }\n\n // if no target is specified, use the source element as the target\n target = target || source;\n effect.key = target;\n const effectId = (effect as EffectRef).effectId;\n\n if (listContainer && effect.listContainer) {\n // we do not support having 2 separate lists for same interaction\n if (target !== source || effect.listContainer !== listContainer) {\n return;\n }\n }\n\n const interactionId = `${target}::${effectId}::${interactionIdx}`;\n effect.interactionId = interactionId;\n interactions[source].interactionIds.add(interactionId);\n\n if (target === source) {\n // if target is the source element, no need to add an interaction to `effects`\n return;\n }\n\n /*\n * Cache interaction effect by target element\n */\n if (!interactions[target]) {\n interactions[target] = {\n triggers: [],\n effects: {\n [interactionId]: [],\n },\n interactionIds: new Set(),\n selectors: new Set(),\n };\n } else if (!interactions[target].effects[interactionId]) {\n interactions[target].effects[interactionId] = [];\n interactions[target].interactionIds.add(interactionId);\n }\n\n interactions[target].effects[interactionId].push({ ...rest, effect });\n interactions[target].selectors.add(getSelector(effect));\n });\n });\n\n return {\n effects: config.effects || {},\n conditions,\n interactions,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|