@wix/interact 1.80.0 → 1.82.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 +9 -0
- package/dist/cjs/WixInteractElement.js.map +1 -1
- package/dist/cjs/__tests__/interact.spec.js +8 -0
- package/dist/cjs/__tests__/interact.spec.js.map +1 -1
- package/dist/cjs/core/add.js +3 -2
- package/dist/cjs/core/add.js.map +1 -1
- package/dist/esm/WixInteractElement.js +9 -0
- package/dist/esm/WixInteractElement.js.map +1 -1
- package/dist/esm/__tests__/interact.spec.js +8 -0
- package/dist/esm/__tests__/interact.spec.js.map +1 -1
- package/dist/esm/core/add.js +3 -2
- package/dist/esm/core/add.js.map +1 -1
- package/dist/types/WixInteractElement.d.ts +1 -0
- package/package.json +3 -3
package/dist/cjs/core/add.js
CHANGED
|
@@ -186,14 +186,15 @@ function add(element, key) {
|
|
|
186
186
|
const instance = _Interact.Interact.getInstance(key);
|
|
187
187
|
if (!instance) {
|
|
188
188
|
console.warn(`No instance found for key: ${key}`);
|
|
189
|
+
|
|
190
|
+
// even if we don't find a matching instance, we still want to cache the element
|
|
191
|
+
_Interact.Interact.setElement(key, element);
|
|
189
192
|
return false;
|
|
190
193
|
}
|
|
191
194
|
const {
|
|
192
195
|
triggers = []
|
|
193
196
|
} = (instance == null ? void 0 : instance.dataCache.interactions[key]) || {};
|
|
194
197
|
const hasTriggers = triggers.length > 0;
|
|
195
|
-
|
|
196
|
-
// even if we don't find a matching instance, we still want to cache the element
|
|
197
198
|
instance.setElement(key, element);
|
|
198
199
|
triggers.forEach(interaction => {
|
|
199
200
|
const mql = (0, _utils.getMediaQuery)(interaction.conditions, instance.dataCache.conditions);
|
package/dist/cjs/core/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","matches","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","instance","sourceRoot","interactionVariations","effects","effectId","interactionId","effectOptions","dataCache","addedInteractions","mql","getMediaQuery","conditions","targetElement","Interact","getElement","watchChildList","addEffectsForTarget","_instance$dataCache$i","interactions","interactionIds","Object","keys","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","forceReducedMotion","getInstance","triggers","hasTriggers","setElement","hasEffects","addListItems"],"sources":["../../../src/core/add.ts"],"sourcesContent":["import type {\n Effect,\n TriggerType,\n EffectRef,\n InteractionParamsTypes,\n TransitionEffect,\n IWixInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport { createTransitionCSS, getMediaQuery } from '../utils';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: IWixInteractElement,\n): HTMLElement | HTMLElement[] | null {\n if (data.listContainer) {\n const container = root.querySelector(data.listContainer);\n\n if (!container) {\n console.warn(\n `WixInteract: 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 `WixInteract: 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.matches(data.selector)\n ? element\n : element.querySelector(data.selector);\n })\n .filter(Boolean) as HTMLElement[];\n}\n\nfunction _getInteractionElements(\n interaction: InteractionTrigger,\n effect: Effect,\n source: IWixInteractElement,\n target: IWixInteractElement,\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 listContainer: string | undefined,\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 listContainer,\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 listContainer,\n );\n });\n }\n}\n\nfunction _addInteraction(\n instance: Interact,\n interaction: Interaction,\n sourceRoot: IWixInteractElement,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n const interactionId = effect.interactionId;\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (instance.addedInteractions[effectOptions.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[effect.interactionId!] = true;\n\n const target = effectOptions.key;\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[effectOptions.interactionId!] = true;\n\n const key = target || interaction.key;\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n effectOptions.listContainer || '',\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n key: string,\n element: IWixInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.dataCache.interactions[key]?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId) => {\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 sourceElement = Interact.getElement(interaction.key);\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 key,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\n effectOptions.listContainer || '',\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 listContainer: string | undefined,\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: string }).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, true),\n };\n\n const root = target.closest('wix-interact-element') as IWixInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(\n source,\n target,\n effect,\n options,\n Interact.forceReducedMotion,\n );\n}\n\n/**\n * Adds all events and effects to an element based on config\n */\nexport function add(element: IWixInteractElement, key: string): boolean {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n console.warn(`No instance found for key: ${key}`);\n return false;\n }\n\n const { triggers = [] } = instance?.dataCache.interactions[key] || {};\n const hasTriggers = triggers.length > 0;\n\n // even if we don't find a matching instance, we still want to cache the element\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(instance!, interaction, element);\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: IWixInteractElement,\n key: string,\n listContainer: string,\n elements: HTMLElement[],\n) {\n const instance = Interact.getInstance(key);\n\n if (instance) {\n const { triggers = [] } = instance?.dataCache.interactions[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(instance!, interaction, root, 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","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","matches","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","instance","sourceRoot","interactionVariations","effects","effectId","interactionId","effectOptions","dataCache","addedInteractions","mql","getMediaQuery","conditions","targetElement","Interact","getElement","watchChildList","addEffectsForTarget","_instance$dataCache$i","interactions","interactionIds","Object","keys","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","forceReducedMotion","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 IWixInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport { createTransitionCSS, getMediaQuery } from '../utils';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: IWixInteractElement,\n): HTMLElement | HTMLElement[] | null {\n if (data.listContainer) {\n const container = root.querySelector(data.listContainer);\n\n if (!container) {\n console.warn(\n `WixInteract: 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 `WixInteract: 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.matches(data.selector)\n ? element\n : element.querySelector(data.selector);\n })\n .filter(Boolean) as HTMLElement[];\n}\n\nfunction _getInteractionElements(\n interaction: InteractionTrigger,\n effect: Effect,\n source: IWixInteractElement,\n target: IWixInteractElement,\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 listContainer: string | undefined,\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 listContainer,\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 listContainer,\n );\n });\n }\n}\n\nfunction _addInteraction(\n instance: Interact,\n interaction: Interaction,\n sourceRoot: IWixInteractElement,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n const interactionId = effect.interactionId;\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (instance.addedInteractions[effectOptions.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[effect.interactionId!] = true;\n\n const target = effectOptions.key;\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[effectOptions.interactionId!] = true;\n\n const key = target || interaction.key;\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n effectOptions.listContainer || '',\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n key: string,\n element: IWixInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.dataCache.interactions[key]?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId) => {\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 sourceElement = Interact.getElement(interaction.key);\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 key,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\n effectOptions.listContainer || '',\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 listContainer: string | undefined,\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: string }).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, true),\n };\n\n const root = target.closest('wix-interact-element') as IWixInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(\n source,\n target,\n effect,\n options,\n Interact.forceReducedMotion,\n );\n}\n\n/**\n * Adds all events and effects to an element based on config\n */\nexport function add(element: IWixInteractElement, 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?.dataCache.interactions[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(instance!, interaction, element);\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: IWixInteractElement,\n key: string,\n listContainer: string,\n elements: HTMLElement[],\n) {\n const instance = Interact.getInstance(key);\n\n if (instance) {\n const { triggers = [] } = instance?.dataCache.interactions[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(instance!, interaction, root, elements);\n }\n });\n\n addEffectsForTarget(key, root, instance, listContainer, elements);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -106,6 +106,15 @@ export function getWixInteractElement() {
|
|
|
106
106
|
this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR] = Array.from(currentEffects).join(' ');
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
+
getActiveEffects() {
|
|
110
|
+
if (this._internals) {
|
|
111
|
+
const effects = Array.from(this._internals.states);
|
|
112
|
+
return isLegacyStateSyntax ? effects.map(effect => effect.replace(/^--/g, '')) : effects;
|
|
113
|
+
}
|
|
114
|
+
const raw = this.dataset[WIX_INTERACT_EFFECT_DATA_ATTR] || '';
|
|
115
|
+
const trimmed = raw.trim();
|
|
116
|
+
return trimmed ? trimmed.split(/\s+/) : [];
|
|
117
|
+
}
|
|
109
118
|
watchChildList(listContainer) {
|
|
110
119
|
const list = this.querySelector(listContainer);
|
|
111
120
|
if (list) {
|
|
@@ -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","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 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","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":[]}
|
|
@@ -1771,5 +1771,13 @@ describe('interact', () => {
|
|
|
1771
1771
|
});
|
|
1772
1772
|
});
|
|
1773
1773
|
});
|
|
1774
|
+
describe('element caching', () => {
|
|
1775
|
+
it('should cache element in elementCache even when no instance was found for it', () => {
|
|
1776
|
+
const keyWithoutInstance = 'key-without-instance';
|
|
1777
|
+
add(element, keyWithoutInstance);
|
|
1778
|
+
expect(Interact.elementCache.has(keyWithoutInstance)).toBe(true);
|
|
1779
|
+
expect(Interact.elementCache.get(keyWithoutInstance)).toBe(element);
|
|
1780
|
+
});
|
|
1781
|
+
});
|
|
1774
1782
|
});
|
|
1775
1783
|
//# sourceMappingURL=interact.spec.js.map
|