@wix/interact 1.78.0 → 1.80.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.
@@ -21,6 +21,7 @@ class Interact {
21
21
  (0, _defineProperty2.default)(this, "dataCache", void 0);
22
22
  (0, _defineProperty2.default)(this, "addedInteractions", void 0);
23
23
  (0, _defineProperty2.default)(this, "listInteractionsCache", void 0);
24
+ (0, _defineProperty2.default)(this, "elements", void 0);
24
25
  this.dataCache = {
25
26
  effects: {},
26
27
  conditions: {},
@@ -28,6 +29,7 @@ class Interact {
28
29
  };
29
30
  this.addedInteractions = {};
30
31
  this.listInteractionsCache = {};
32
+ this.elements = new Set();
31
33
  }
32
34
  init(config) {
33
35
  if (typeof window === 'undefined' || !window.customElements) {
@@ -39,6 +41,32 @@ class Interact {
39
41
  Interact.elementCache.forEach((element, key) => element.connect(key));
40
42
  }
41
43
  }
44
+ destroy() {
45
+ for (let element of this.elements) {
46
+ element.disconnect();
47
+ }
48
+ this.addedInteractions = {};
49
+ this.listInteractionsCache = {};
50
+ this.elements.clear();
51
+ this.dataCache = {
52
+ effects: {},
53
+ conditions: {},
54
+ interactions: {}
55
+ };
56
+ Interact.instances.splice(Interact.instances.indexOf(this), 1);
57
+ }
58
+ setElement(key, element) {
59
+ this.elements.add(element);
60
+ Interact.setElement(key, element);
61
+ }
62
+ deleteElement(key) {
63
+ const element = Interact.elementCache.get(key);
64
+ this.clearInteractionStateForKey(key);
65
+ if (element) {
66
+ this.elements.delete(element);
67
+ Interact.elementCache.delete(key);
68
+ }
69
+ }
42
70
  has(key) {
43
71
  return !!this.dataCache.interactions[key];
44
72
  }
@@ -100,10 +128,13 @@ function parseConfig(config) {
100
128
  var _config$interactions;
101
129
  const conditions = config.conditions || {};
102
130
  const interactions = {};
103
- (_config$interactions = config.interactions) == null || _config$interactions.forEach(interaction => {
104
- var _interaction$effects, _interaction$effects2;
105
- const source = interaction.key;
131
+ (_config$interactions = config.interactions) == null || _config$interactions.forEach(interaction_ => {
132
+ const source = interaction_.key;
106
133
  const interactionIdx = ++interactionIdCounter;
134
+ const {
135
+ effects: effects_,
136
+ ...rest
137
+ } = interaction_;
107
138
  if (!source) {
108
139
  console.error(`Interaction ${interactionIdx} is missing a key for source element.`);
109
140
  return;
@@ -120,12 +151,16 @@ function parseConfig(config) {
120
151
  /*
121
152
  * Cache interaction trigger by source element
122
153
  */
123
- (_interaction$effects = interaction.effects) == null || _interaction$effects.reverse(); // reverse to ensure the first effect is the one that will be applied first
124
-
154
+ const effects = Array.from(effects_);
155
+ effects.reverse(); // reverse to ensure the first effect is the one that will be applied first
156
+ const interaction = {
157
+ ...rest,
158
+ effects
159
+ };
125
160
  interactions[source].triggers.push(interaction);
126
161
  interactions[source].selectors.add(getSelector(interaction));
127
162
  const listContainer = interaction.listContainer;
128
- (_interaction$effects2 = interaction.effects) == null || _interaction$effects2.forEach(effect => {
163
+ effects.forEach(effect => {
129
164
  /*
130
165
  * Target cascade order is the first of:
131
166
  * -> Config.interactions.effects.effect.key
@@ -177,10 +212,6 @@ function parseConfig(config) {
177
212
  interactions[target].effects[interactionId] = [];
178
213
  interactions[target].interactionIds.add(interactionId);
179
214
  }
180
- const {
181
- effects,
182
- ...rest
183
- } = interaction;
184
215
  interactions[target].effects[interactionId].push({
185
216
  ...rest,
186
217
  effect
@@ -1 +1 @@
1
- {"version":3,"names":["_WixInteractElement","require","_utils","_Interact","registerWixInteractElement","customElements","get","wixInteractElement","getWixInteractElement","define","Interact","constructor","_defineProperty2","default","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","init","config","window","parseConfig","didRegister","elementCache","forEach","element","key","connect","has","clearInteractionStateForKey","_this$dataCache$inter","interactionIds","interactionId","create","instance","instances","push","destroy","disconnect","length","clear","getInstance","find","getElement","setElement","set","exports","Map","interactionIdCounter","getSelector","d","asCombinator","listContainer","selector","_config$interactions","interaction","_interaction$effects","_interaction$effects2","source","interactionIdx","console","error","triggers","Set","selectors","reverse","add","effect","target","effectId","referencedEffect","generateId","rest"],"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 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 }\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 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\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 interaction.effects?.reverse(); // reverse to ensure the first effect is the one that will be applied first\n\n interactions[source].triggers.push(interaction);\n interactions[source].selectors.add(getSelector(interaction));\n\n const listContainer = interaction.listContainer;\n\n interaction.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 const { effects, ...rest } = interaction;\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":["_WixInteractElement","require","_utils","_Interact","registerWixInteractElement","customElements","get","wixInteractElement","getWixInteractElement","define","Interact","constructor","_defineProperty2","default","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","exports","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","generateId"],"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":[]}
@@ -184,13 +184,17 @@ function addInteraction(key, source, trigger, target, effect, options, listConta
184
184
  */
185
185
  function add(element, key) {
186
186
  const instance = _Interact.Interact.getInstance(key);
187
+ if (!instance) {
188
+ console.warn(`No instance found for key: ${key}`);
189
+ return false;
190
+ }
187
191
  const {
188
192
  triggers = []
189
193
  } = (instance == null ? void 0 : instance.dataCache.interactions[key]) || {};
190
194
  const hasTriggers = triggers.length > 0;
191
195
 
192
196
  // even if we don't find a matching instance, we still want to cache the element
193
- _Interact.Interact.setElement(key, element);
197
+ instance.setElement(key, element);
194
198
  triggers.forEach(interaction => {
195
199
  const mql = (0, _utils.getMediaQuery)(interaction.conditions, instance.dataCache.conditions);
196
200
 
@@ -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 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 Interact.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","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":";;;;;;AAWA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,SAASI,oBAAoBA,CAC3BC,IAA0B,EAC1BC,IAAyB,EACW;EACpC,IAAID,IAAI,CAACE,aAAa,EAAE;IACtB,MAAMC,SAAS,GAAGF,IAAI,CAACG,aAAa,CAACJ,IAAI,CAACE,aAAa,CAAC;IAExD,IAAI,CAACC,SAAS,EAAE;MACdE,OAAO,CAACC,IAAI,CACV,uDAAuDN,IAAI,CAACE,aAAa,GAC3E,CAAC;MAED,OAAO,EAAE;IACX;IAEA,IAAIF,IAAI,CAACO,QAAQ,EAAE;MACjB,OAAOC,KAAK,CAACC,IAAI,CACfN,SAAS,CAACO,gBAAgB,CAACV,IAAI,CAACO,QAAQ,CAC1C,CAAC;IACH;IAEA,OAAOC,KAAK,CAACC,IAAI,CAACN,SAAS,CAACQ,QAAQ,CAAC;EACvC;EAEA,IAAIX,IAAI,CAACO,QAAQ,EAAE;IACjB,MAAMK,OAAO,GAAGX,IAAI,CAACG,aAAa,CAACJ,IAAI,CAACO,QAAQ,CAAC;IAEjD,IAAIK,OAAO,EAAE;MACX,OAAOA,OAAO;IAChB,CAAC,MAAM;MACLP,OAAO,CAACC,IAAI,CACV,+CAA+CN,IAAI,CAACO,QAAQ,GAC9D,CAAC;IACH;EACF;EAEA,OAAON,IAAI,CAACY,iBAAiB;AAC/B;AAEA,SAASC,iBAAiBA,CACxBd,IAA0B,EAC1Be,QAAuB,EACR;EACf,OAAOA,QAAQ,CACZC,GAAG,CAAEJ,OAAO,IAAK;IAChB,OAAO,CAACZ,IAAI,CAACO,QAAQ,IAAIK,OAAO,CAACK,OAAO,CAACjB,IAAI,CAACO,QAAQ,CAAC,GACnDK,OAAO,GACPA,OAAO,CAACR,aAAa,CAACJ,IAAI,CAACO,QAAQ,CAAC;EAC1C,CAAC,CAAC,CACDW,MAAM,CAACC,OAAO,CAAC;AACpB;AAEA,SAASC,uBAAuBA,CAC9BC,WAA+B,EAC/BC,MAAc,EACdC,MAA2B,EAC3BC,MAA2B,EAC3BC,cAA8B,EAC9BC,cAA8B,EAC4C;EAC1E,OAAO,CACLD,cAAc,GACVX,iBAAiB,CAACO,WAAW,EAAEI,cAAc,CAAC,GAC9C1B,oBAAoB,CAACsB,WAAW,EAAEE,MAAM,CAAC,EAC7CG,cAAc,GACVZ,iBAAiB,CAACQ,MAAM,EAAEI,cAAc,CAAC,GACzC3B,oBAAoB,CAACuB,MAAM,EAAEE,MAAM,CAAC,CACzC;AACH;AAEA,SAASG,iBAAiBA,CACxBC,GAAW,EACXP,WAA+B,EAC/BC,MAAc,EACdG,cAA2C,EAC3CC,cAA2C,EAC3CxB,aAAiC,EACjC;EACA,MAAM2B,aAAa,GAAGrB,KAAK,CAACsB,OAAO,CAACL,cAAc,CAAC;EACnD,MAAMM,aAAa,GAAGvB,KAAK,CAACsB,OAAO,CAACJ,cAAc,CAAC;EAEnD,IAAIG,aAAa,EAAE;IACjBJ,cAAc,CAACO,OAAO,CAAC,CAACC,QAAQ,EAAEC,KAAK,KAAK;MAC1C,MAAMC,QAAQ,GAAGJ,aAAa,GAAGL,cAAc,CAACQ,KAAK,CAAC,GAAGR,cAAc;MAEvE,IAAIS,QAAQ,EAAE;QACZC,cAAc,CACZR,GAAG,EACHK,QAAQ,EACRZ,WAAW,CAACgB,OAAO,EACnBF,QAAQ,EACRb,MAAM,EACND,WAAW,CAACiB,MAAM,EAClBpC,aACF,CAAC;MACH;IACF,CAAC,CAAC;EACJ,CAAC,MAAM;IACL,MAAMqC,OAAO,GAAGR,aAAa,GAAGL,cAAc,GAAG,CAACA,cAAc,CAAC;IACjEa,OAAO,CAACP,OAAO,CAAEG,QAAQ,IAAK;MAC5BC,cAAc,CACZR,GAAG,EACHH,cAAc,EACdJ,WAAW,CAACgB,OAAO,EACnBF,QAAQ,EACRb,MAAM,EACND,WAAW,CAACiB,MAAM,EAClBpC,aACF,CAAC;IACH,CAAC,CAAC;EACJ;AACF;AAEA,SAASsC,eAAeA,CACtBC,QAAkB,EAClBpB,WAAwB,EACxBqB,UAA+B,EAC/B3B,QAAwB,EACxB;EACA,MAAM4B,qBAA8C,GAAG,CAAC,CAAC;EAEzDtB,WAAW,CAACuB,OAAO,CAACZ,OAAO,CAAEV,MAAM,IAAK;IACtC,MAAMuB,QAAQ,GAAIvB,MAAM,CAAeuB,QAAQ;IAC/C,MAAMC,aAAa,GAAGxB,MAAM,CAACwB,aAAa;IAE1C,IAAIH,qBAAqB,CAACG,aAAa,CAAE,EAAE;MACzC;MACA;IACF;IAEA,MAAMC,aAAa,GAAG;MACpB,IAAIN,QAAQ,CAACO,SAAS,CAACJ,OAAO,CAACC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;MAC/C,GAAGvB,MAAM;MACTuB;IACF,CAAC;IAED,IAAIJ,QAAQ,CAACQ,iBAAiB,CAACF,aAAa,CAACD,aAAa,CAAE,IAAI,CAAC/B,QAAQ,EAAE;MACzE;MACA;IACF;;IAEA;IACA,MAAMmC,GAAG,GAAG,IAAAC,oBAAa,EACvBJ,aAAa,CAACK,UAAU,IAAI,EAAE,EAC9BX,QAAQ,CAACO,SAAS,CAACI,UACrB,CAAC;IAED,IAAI,CAACF,GAAG,IAAIA,GAAG,CAACjC,OAAO,EAAE;MACvB0B,qBAAqB,CAACrB,MAAM,CAACwB,aAAa,CAAE,GAAG,IAAI;MAEnD,MAAMtB,MAAM,GAAGuB,aAAa,CAACnB,GAAG;MAEhC,IAAIyB,aAAa;MACjB,IAAI7B,MAAM,EAAE;QACV6B,aAAa,GAAGC,kBAAQ,CAACC,UAAU,CAAC/B,MAAM,CAAC;QAE3C,IAAI,CAAC6B,aAAa,EAAE;UAClB;UACA;QACF;QAEA,IAAIN,aAAa,CAAC7C,aAAa,EAAE;UAC/BmD,aAAa,CAACG,cAAc,CAACT,aAAa,CAAC7C,aAAa,CAAC;QAC3D;MACF,CAAC,MAAM;QACL;QACAmD,aAAa,GAAGX,UAAU;MAC5B;MAEA,MAAM,CAACjB,cAAc,EAAEC,cAAc,CAAC,GAAGN,uBAAuB,CAC9DC,WAAW,EACX0B,aAAa,EACbL,UAAU,EACVW,aAAa,EACbtC,QACF,CAAC;MAED,IAAI,CAACU,cAAc,IAAI,CAACC,cAAc,EAAE;QACtC;MACF;MAEAe,QAAQ,CAACQ,iBAAiB,CAACF,aAAa,CAACD,aAAa,CAAE,GAAG,IAAI;MAE/D,MAAMlB,GAAG,GAAGJ,MAAM,IAAIH,WAAW,CAACO,GAAG;MAErCD,iBAAiB,CACfC,GAAG,EACHP,WAAW,EACX0B,aAAa,EACbtB,cAAc,EACdC,cAAc,EACdqB,aAAa,CAAC7C,aAAa,IAAI,EACjC,CAAC;IACH;EACF,CAAC,CAAC;AACJ;AAEA,SAASuD,mBAAmBA,CAC1B7B,GAAW,EACXhB,OAA4B,EAC5B6B,QAAkB,EAClBvC,aAAsB,EACtBa,QAAwB,EACxB;EAAA,IAAA2C,qBAAA;EACA,MAAMd,OAAO,GAAG,EAAAc,qBAAA,GAAAjB,QAAQ,CAACO,SAAS,CAACW,YAAY,CAAC/B,GAAG,CAAC,qBAApC8B,qBAAA,CAAsCd,OAAO,KAAI,CAAC,CAAC;EACnE,MAAMgB,cAAc,GAAGC,MAAM,CAACC,IAAI,CAAClB,OAAO,CAAC;EAE3CgB,cAAc,CAAC5B,OAAO,CAAEc,aAAa,IAAK;IACxC,IAAIL,QAAQ,CAACQ,iBAAiB,CAACH,aAAa,CAAC,IAAI,CAAC/B,QAAQ,EAAE;MAC1D;MACA;IACF;IAEA,MAAMgD,gBAAgB,GAAGnB,OAAO,CAACE,aAAa,CAAC;;IAE/C;IACA;IACAiB,gBAAgB,CAACC,IAAI,CAAC,CAAC;MAAE1C,MAAM;MAAE,GAAGD;IAAY,CAAC,KAAK;MACpD,MAAMwB,QAAQ,GAAIvB,MAAM,CAAeuB,QAAQ;MAE/C,MAAME,aAAa,GAAG;QACpB,IAAIN,QAAQ,CAAEO,SAAS,CAACJ,OAAO,CAACC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,GAAGvB,MAAM;QACTuB;MACF,CAAC;MAED,IAAI3C,aAAa,IAAI6C,aAAa,CAAC7C,aAAa,KAAKA,aAAa,EAAE;QAClE;QACA,OAAO,KAAK;MACd;;MAEA;MACA,MAAMgD,GAAG,GAAG,IAAAC,oBAAa,EACvBJ,aAAa,CAACK,UAAU,IAAI,EAAE,EAC9BX,QAAQ,CAAEO,SAAS,CAACI,UACtB,CAAC;MAED,IAAI,CAACF,GAAG,IAAIA,GAAG,CAACjC,OAAO,EAAE;QACvB,MAAMgD,aAAa,GAAGX,kBAAQ,CAACC,UAAU,CAAClC,WAAW,CAACO,GAAG,CAAC;QAE1D,IAAI,CAACqC,aAAa,EAAE;UAClB;UACA,OAAO,IAAI;QACb;QAEA,IAAIlB,aAAa,CAAC7C,aAAa,EAAE;UAC/BU,OAAO,CAAC4C,cAAc,CAACT,aAAa,CAAC7C,aAAa,CAAC;QACrD;QAEA,MAAM,CAACuB,cAAc,EAAEC,cAAc,CAAC,GAAGN,uBAAuB,CAC9DC,WAAW,EACX0B,aAAa,EACbkB,aAAa,EACbrD,OAAO,EACPsD,SAAS,EACTnD,QACF,CAAC;QAED,IAAI,CAACU,cAAc,IAAI,CAACC,cAAc,EAAE;UACtC;UACA,OAAO,IAAI;QACb;QAEAe,QAAQ,CAAEQ,iBAAiB,CAACH,aAAa,CAAC,GAAG,IAAI;QAEjDnB,iBAAiB,CACfC,GAAG,EACHP,WAAW,EACX0B,aAAa,EACbtB,cAAc,EACdC,cAAc,EACdqB,aAAa,CAAC7C,aAAa,IAAI,EACjC,CAAC;;QAED;QACA,OAAO,IAAI;MACb;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAO0D,cAAc,CAACO,MAAM,GAAG,CAAC;AAClC;;AAEA;AACA;AACA;AACA,SAAS/B,cAAcA,CACrBR,GAAW,EACXL,MAAmB,EACnBc,OAAU,EACVb,MAAmB,EACnBF,MAAc,EACd8C,OAAkC,EAClClE,aAAiC,EAC3B;EAAA,IAAAmE,qBAAA;EACN,IACG/C,MAAM,CAAsBgD,UAAU,IACtChD,MAAM,CAAsBiD,oBAAoB,EACjD;IACA,MAAMC,IAA+B,GAAG;MACtC5C,GAAG;MACHiB,QAAQ,EAAGvB,MAAM,CAAmCuB,QAAS;MAC7DyB,UAAU,EAAGhD,MAAM,CAAsBgD,UAAU;MACnDG,UAAU,EAAGnD,MAAM,CAAsBiD,oBAAoB;MAC7DG,aAAa,EAAE,IAAAC,qBAAW,EAACrD,MAAM,EAAE,IAAI;IACzC,CAAC;IAED,MAAMrB,IAAI,GAAGuB,MAAM,CAACoD,OAAO,CAAC,sBAAsB,CAAwB;IAC1E,IAAI,CAAC3E,IAAI,EAAE;MACT;IACF;IAEAA,IAAI,CAAC4E,WAAW,CAAC,IAAAC,0BAAmB,EAACN,IAAI,CAAC,CAAC;EAC7C;EAEA,CAAAH,qBAAA,GAAAU,iBAA6B,CAAC1C,OAAO,CAAC,aAAtCgC,qBAAA,CAAwCW,GAAG,CACzCzD,MAAM,EACNC,MAAM,EACNF,MAAM,EACN8C,OAAO,EACPd,kBAAQ,CAAC2B,kBACX,CAAC;AACH;;AAEA;AACA;AACA;AACO,SAASD,GAAGA,CAACpE,OAA4B,EAAEgB,GAAW,EAAW;EACtE,MAAMa,QAAQ,GAAGa,kBAAQ,CAAC4B,WAAW,CAACtD,GAAG,CAAC;EAE1C,IAAI,CAACa,QAAQ,EAAE;IACbpC,OAAO,CAACC,IAAI,CAAC,8BAA8BsB,GAAG,EAAE,CAAC;IACjD,OAAO,KAAK;EACd;EAEA,MAAM;IAAEuD,QAAQ,GAAG;EAAG,CAAC,GAAG,CAAA1C,QAAQ,oBAARA,QAAQ,CAAEO,SAAS,CAACW,YAAY,CAAC/B,GAAG,CAAC,KAAI,CAAC,CAAC;EACrE,MAAMwD,WAAW,GAAGD,QAAQ,CAAChB,MAAM,GAAG,CAAC;;EAEvC;EACA1B,QAAQ,CAAC4C,UAAU,CAACzD,GAAG,EAAEhB,OAAO,CAAC;EAEjCuE,QAAQ,CAACnD,OAAO,CAAEX,WAAW,IAAK;IAChC,MAAM6B,GAAG,GAAG,IAAAC,oBAAa,EACvB9B,WAAW,CAAC+B,UAAU,EACtBX,QAAQ,CAAEO,SAAS,CAACI,UACtB,CAAC;;IAED;IACA,IAAI,CAACF,GAAG,IAAIA,GAAG,CAACjC,OAAO,EAAE;MACvB,IAAII,WAAW,CAACnB,aAAa,EAAE;QAC7BU,OAAO,CAAC4C,cAAc,CAACnC,WAAW,CAACnB,aAAa,CAAC;MACnD;MAEAsC,eAAe,CAACC,QAAQ,EAAGpB,WAAW,EAAET,OAAO,CAAC;IAClD;EACF,CAAC,CAAC;EAEF,IAAI0E,UAAU,GAAG,KAAK;EACtB,IAAI7C,QAAQ,EAAE;IACZ6C,UAAU,GAAG7B,mBAAmB,CAAC7B,GAAG,EAAEhB,OAAO,EAAE6B,QAAQ,CAAC;EAC1D;EAEA,OAAO2C,WAAW,IAAIE,UAAU;AAClC;AAEO,SAASC,YAAYA,CAC1BtF,IAAyB,EACzB2B,GAAW,EACX1B,aAAqB,EACrBa,QAAuB,EACvB;EACA,MAAM0B,QAAQ,GAAGa,kBAAQ,CAAC4B,WAAW,CAACtD,GAAG,CAAC;EAE1C,IAAIa,QAAQ,EAAE;IACZ,MAAM;MAAE0C,QAAQ,GAAG;IAAG,CAAC,GAAG,CAAA1C,QAAQ,oBAARA,QAAQ,CAAEO,SAAS,CAACW,YAAY,CAAC/B,GAAG,CAAC,KAAI,CAAC,CAAC;IAErEuD,QAAQ,CAACnD,OAAO,CAAEX,WAAW,IAAK;MAChC,IAAIA,WAAW,CAACnB,aAAa,KAAKA,aAAa,EAAE;QAC/C;MACF;MAEA,MAAMgD,GAAG,GAAG,IAAAC,oBAAa,EACvB9B,WAAW,CAAC+B,UAAU,EACtBX,QAAQ,CAAEO,SAAS,CAACI,UACtB,CAAC;;MAED;MACA,IAAI,CAACF,GAAG,IAAIA,GAAG,CAACjC,OAAO,EAAE;QACvBuB,eAAe,CAACC,QAAQ,EAAGpB,WAAW,EAAEpB,IAAI,EAAEc,QAAQ,CAAC;MACzD;IACF,CAAC,CAAC;IAEF0C,mBAAmB,CAAC7B,GAAG,EAAE3B,IAAI,EAAEwC,QAAQ,EAAEvC,aAAa,EAAEa,QAAQ,CAAC;EACnE;AACF","ignoreList":[]}
@@ -10,7 +10,7 @@ var _handlers = _interopRequireDefault(require("../handlers"));
10
10
  * Removes all events and effects from an element based on config
11
11
  */
12
12
  function remove(key) {
13
- var _instance$dataCache$i, _Interact$getInstance;
13
+ var _instance$dataCache$i;
14
14
  const instance = _Interact.Interact.getInstance(key);
15
15
  if (!instance) {
16
16
  return;
@@ -26,8 +26,7 @@ function remove(key) {
26
26
  module.remove(element);
27
27
  });
28
28
  }
29
- (_Interact$getInstance = _Interact.Interact.getInstance(key)) == null || _Interact$getInstance.clearInteractionStateForKey(key);
30
- _Interact.Interact.elementCache.delete(key);
29
+ instance == null || instance.deleteElement(key);
31
30
  }
32
31
  function removeListItems(elements) {
33
32
  elements.forEach(element => {
@@ -1 +1 @@
1
- {"version":3,"names":["_Interact","require","_handlers","_interopRequireDefault","remove","key","_instance$dataCache$i","_Interact$getInstance","instance","Interact","getInstance","root","getElement","selectors","dataCache","interactions","values","join","elements","querySelectorAll","element","Object","TRIGGER_TO_HANDLER_MODULE_MAP","forEach","module","clearInteractionStateForKey","elementCache","delete","removeListItems"],"sources":["../../../src/core/remove.ts"],"sourcesContent":["import { Interact } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\n/**\n * Removes all events and effects from an element based on config\n */\nexport function remove(key: string): void {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n return;\n }\n\n const root = Interact.getElement(key);\n if (!root) {\n return;\n }\n\n const selectors = [\n ...instance.dataCache.interactions[key]?.selectors.values(),\n ].join(',');\n const elements = root.querySelectorAll(selectors);\n\n for (const element of elements) {\n Object.values(TRIGGER_TO_HANDLER_MODULE_MAP).forEach((module) => {\n module.remove(element as HTMLElement);\n });\n }\n\n Interact.getInstance(key)?.clearInteractionStateForKey(key);\n Interact.elementCache.delete(key);\n}\n\nexport function removeListItems(elements: HTMLElement[]) {\n elements.forEach((element) => {\n Object.values(TRIGGER_TO_HANDLER_MODULE_MAP).forEach((module) =>\n module.remove(element),\n );\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA;AACA;AACA;AACO,SAASG,MAAMA,CAACC,GAAW,EAAQ;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACxC,MAAMC,QAAQ,GAAGC,kBAAQ,CAACC,WAAW,CAACL,GAAG,CAAC;EAE1C,IAAI,CAACG,QAAQ,EAAE;IACb;EACF;EAEA,MAAMG,IAAI,GAAGF,kBAAQ,CAACG,UAAU,CAACP,GAAG,CAAC;EACrC,IAAI,CAACM,IAAI,EAAE;IACT;EACF;EAEA,MAAME,SAAS,GAAG,CAChB,KAAAP,qBAAA,GAAGE,QAAQ,CAACM,SAAS,CAACC,YAAY,CAACV,GAAG,CAAC,qBAApCC,qBAAA,CAAsCO,SAAS,CAACG,MAAM,CAAC,CAAC,EAC5D,CAACC,IAAI,CAAC,GAAG,CAAC;EACX,MAAMC,QAAQ,GAAGP,IAAI,CAACQ,gBAAgB,CAACN,SAAS,CAAC;EAEjD,KAAK,MAAMO,OAAO,IAAIF,QAAQ,EAAE;IAC9BG,MAAM,CAACL,MAAM,CAACM,iBAA6B,CAAC,CAACC,OAAO,CAAEC,MAAM,IAAK;MAC/DA,MAAM,CAACpB,MAAM,CAACgB,OAAsB,CAAC;IACvC,CAAC,CAAC;EACJ;EAEA,CAAAb,qBAAA,GAAAE,kBAAQ,CAACC,WAAW,CAACL,GAAG,CAAC,aAAzBE,qBAAA,CAA2BkB,2BAA2B,CAACpB,GAAG,CAAC;EAC3DI,kBAAQ,CAACiB,YAAY,CAACC,MAAM,CAACtB,GAAG,CAAC;AACnC;AAEO,SAASuB,eAAeA,CAACV,QAAuB,EAAE;EACvDA,QAAQ,CAACK,OAAO,CAAEH,OAAO,IAAK;IAC5BC,MAAM,CAACL,MAAM,CAACM,iBAA6B,CAAC,CAACC,OAAO,CAAEC,MAAM,IAC1DA,MAAM,CAACpB,MAAM,CAACgB,OAAO,CACvB,CAAC;EACH,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["_Interact","require","_handlers","_interopRequireDefault","remove","key","_instance$dataCache$i","instance","Interact","getInstance","root","getElement","selectors","dataCache","interactions","values","join","elements","querySelectorAll","element","Object","TRIGGER_TO_HANDLER_MODULE_MAP","forEach","module","deleteElement","removeListItems"],"sources":["../../../src/core/remove.ts"],"sourcesContent":["import { Interact } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\n/**\n * Removes all events and effects from an element based on config\n */\nexport function remove(key: string): void {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n return;\n }\n\n const root = Interact.getElement(key);\n if (!root) {\n return;\n }\n\n const selectors = [\n ...instance.dataCache.interactions[key]?.selectors.values(),\n ].join(',');\n const elements = root.querySelectorAll(selectors);\n\n for (const element of elements) {\n Object.values(TRIGGER_TO_HANDLER_MODULE_MAP).forEach((module) => {\n module.remove(element as HTMLElement);\n });\n }\n\n instance?.deleteElement(key);\n}\n\nexport function removeListItems(elements: HTMLElement[]) {\n elements.forEach((element) => {\n Object.values(TRIGGER_TO_HANDLER_MODULE_MAP).forEach((module) =>\n module.remove(element),\n );\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA;AACA;AACA;AACO,SAASG,MAAMA,CAACC,GAAW,EAAQ;EAAA,IAAAC,qBAAA;EACxC,MAAMC,QAAQ,GAAGC,kBAAQ,CAACC,WAAW,CAACJ,GAAG,CAAC;EAE1C,IAAI,CAACE,QAAQ,EAAE;IACb;EACF;EAEA,MAAMG,IAAI,GAAGF,kBAAQ,CAACG,UAAU,CAACN,GAAG,CAAC;EACrC,IAAI,CAACK,IAAI,EAAE;IACT;EACF;EAEA,MAAME,SAAS,GAAG,CAChB,KAAAN,qBAAA,GAAGC,QAAQ,CAACM,SAAS,CAACC,YAAY,CAACT,GAAG,CAAC,qBAApCC,qBAAA,CAAsCM,SAAS,CAACG,MAAM,CAAC,CAAC,EAC5D,CAACC,IAAI,CAAC,GAAG,CAAC;EACX,MAAMC,QAAQ,GAAGP,IAAI,CAACQ,gBAAgB,CAACN,SAAS,CAAC;EAEjD,KAAK,MAAMO,OAAO,IAAIF,QAAQ,EAAE;IAC9BG,MAAM,CAACL,MAAM,CAACM,iBAA6B,CAAC,CAACC,OAAO,CAAEC,MAAM,IAAK;MAC/DA,MAAM,CAACnB,MAAM,CAACe,OAAsB,CAAC;IACvC,CAAC,CAAC;EACJ;EAEAZ,QAAQ,YAARA,QAAQ,CAAEiB,aAAa,CAACnB,GAAG,CAAC;AAC9B;AAEO,SAASoB,eAAeA,CAACR,QAAuB,EAAE;EACvDA,QAAQ,CAACK,OAAO,CAAEH,OAAO,IAAK;IAC5BC,MAAM,CAACL,MAAM,CAACM,iBAA6B,CAAC,CAACC,OAAO,CAAEC,MAAM,IAC1DA,MAAM,CAACnB,MAAM,CAACe,OAAO,CACvB,CAAC;EACH,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/types.ts"],"sourcesContent":["import type {\n NamedEffect,\n CustomEffect,\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: CustomEffect;\n };\n\nexport type TimeEffect = {\n key?: string;\n duration: number;\n easing?: string;\n iterations?: number;\n alternate?: boolean;\n fill?: Fill;\n reversed?: boolean;\n delay?: number;\n effectId?: string;\n} & EffectEffectProperty;\n\nexport type ScrubEffect = {\n key?: string;\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 EffectRef = {\n key?: string;\n effectId: string;\n listContainer?: string;\n conditions?: string[];\n selector?: string;\n};\n\nexport type Effect = (TimeEffect | ScrubEffect | TransitionEffect) & {\n listContainer?: string;\n conditions?: string[];\n selector?: string;\n};\n\nexport type Condition = {\n type: 'media' | 'container';\n predicate?: string;\n};\n\nexport type InteractionTrigger = {\n key: string;\n listContainer?: 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(effectId: string, method: StateParams['method']): 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":[]}
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: HTMLElement, progress: any) => void;\n };\n\nexport type TimeEffect = {\n key?: string;\n duration: number;\n easing?: string;\n iterations?: number;\n alternate?: boolean;\n fill?: Fill;\n reversed?: boolean;\n delay?: number;\n effectId?: string;\n} & EffectEffectProperty;\n\nexport type ScrubEffect = {\n key?: string;\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 EffectRef = {\n key?: string;\n effectId: string;\n listContainer?: string;\n conditions?: string[];\n selector?: string;\n};\n\nexport type Effect = (TimeEffect | ScrubEffect | TransitionEffect) & {\n listContainer?: string;\n conditions?: string[];\n selector?: string;\n};\n\nexport type Condition = {\n type: 'media' | 'container';\n predicate?: string;\n};\n\nexport type InteractionTrigger = {\n key: string;\n listContainer?: 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(effectId: string, method: StateParams['method']): 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":[]}
@@ -39,7 +39,8 @@ jest.mock('fizban', () => ({
39
39
  }));
40
40
  describe('interact', () => {
41
41
  let element;
42
- const mockConfig = {
42
+ let mockConfig;
43
+ const getMockConfig = () => ({
43
44
  interactions: [{
44
45
  trigger: 'viewEnter',
45
46
  key: 'logo-entrance',
@@ -246,7 +247,7 @@ describe('interact', () => {
246
247
  duration: 500
247
248
  }
248
249
  }
249
- };
250
+ });
250
251
  beforeEach(() => {
251
252
  element = document.createElement('wix-interact-element');
252
253
  const div = document.createElement('div');
@@ -404,22 +405,40 @@ describe('interact', () => {
404
405
  // Reset forceReducedMotion to default
405
406
  Interact.forceReducedMotion = false;
406
407
  });
407
- describe('init Interact', () => {
408
+ describe('init Interact instance', () => {
408
409
  it('should initialize with valid config', () => {
409
410
  Interact.create({});
410
411
  expect(customElements.get('wix-interact-element')).toBeDefined();
411
412
  });
412
413
  });
414
+ describe('destroy Interact instance', () => {
415
+ it('should clear an instance entire cache', () => {
416
+ const instance = Interact.create(getMockConfig());
417
+ element = document.createElement('wix-interact-element');
418
+ element.dataset.wixPath = 'logo-entrance';
419
+ const div = document.createElement('div');
420
+ element.append(div);
421
+ add(element, 'logo-entrance');
422
+ expect(Object.keys(instance.dataCache.interactions).length).toBe(11);
423
+ expect(instance.elements.size).toBe(1);
424
+ expect(Interact.instances.length).toBe(1);
425
+ instance.destroy();
426
+ expect(Object.keys(instance.dataCache.interactions).length).toBe(0);
427
+ expect(instance.elements.size).toBe(0);
428
+ expect(Interact.instances.length).toBe(0);
429
+ expect(Interact.elementCache.size).toBe(0);
430
+ });
431
+ });
413
432
  describe('destroy Interact', () => {
414
433
  it('should clear all instances', () => {
415
- Interact.create(mockConfig);
416
- Interact.create(mockConfig);
434
+ Interact.create(getMockConfig());
435
+ Interact.create(getMockConfig());
417
436
  expect(Interact.instances.length).toBe(2);
418
437
  Interact.destroy();
419
438
  expect(Interact.instances.length).toBe(0);
420
439
  });
421
440
  it('should clear all elements from cache', () => {
422
- Interact.create(mockConfig);
441
+ Interact.create(getMockConfig());
423
442
  element = document.createElement('wix-interact-element');
424
443
  const div = document.createElement('div');
425
444
  element.append(div);
@@ -429,7 +448,7 @@ describe('interact', () => {
429
448
  expect(Interact.elementCache.size).toBe(0);
430
449
  });
431
450
  it('should call disconnect on all cached elements', () => {
432
- Interact.create(mockConfig);
451
+ Interact.create(getMockConfig());
433
452
  const element1 = document.createElement('wix-interact-element');
434
453
  const div1 = document.createElement('div');
435
454
  element1.append(div1);
@@ -445,7 +464,7 @@ describe('interact', () => {
445
464
  expect(disconnectSpy2).toHaveBeenCalled();
446
465
  });
447
466
  it('should clean up interactions after destroy', () => {
448
- Interact.create(mockConfig);
467
+ Interact.create(getMockConfig());
449
468
  element = document.createElement('wix-interact-element');
450
469
  const div = document.createElement('div');
451
470
  element.append(div);
@@ -456,7 +475,7 @@ describe('interact', () => {
456
475
  expect(Interact.getInstance('logo-click')).toBeUndefined();
457
476
 
458
477
  // Re-create instance and verify it works independently
459
- Interact.create(mockConfig);
478
+ Interact.create(getMockConfig());
460
479
  const newElement = document.createElement('wix-interact-element');
461
480
  const newDiv = document.createElement('div');
462
481
  newElement.append(newDiv);
@@ -524,11 +543,12 @@ describe('interact', () => {
524
543
  reducedMotion: true
525
544
  });
526
545
  Interact.forceReducedMotion = false;
527
- remove('logo-hover');
546
+ Interact.destroy();
528
547
  });
529
548
  });
530
549
  describe('add interaction', () => {
531
550
  beforeEach(() => {
551
+ mockConfig = getMockConfig();
532
552
  Interact.create(mockConfig);
533
553
  });
534
554
  afterEach(() => {
@@ -544,6 +564,7 @@ describe('interact', () => {
544
564
  const div = document.createElement('div');
545
565
  element.append(div);
546
566
  const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
567
+ expect(getWebAnimation).toHaveBeenCalledTimes(0);
547
568
  add(element, 'logo-hover');
548
569
  expect(addEventListenerSpy).toHaveBeenCalledTimes(4);
549
570
  expect(addEventListenerSpy).toHaveBeenCalledWith('mouseenter', expect.any(Function), expect.objectContaining({
@@ -597,18 +618,20 @@ describe('interact', () => {
597
618
  } = require('@wix/motion');
598
619
  element = document.createElement('wix-interact-element');
599
620
  const div = document.createElement('div');
621
+ div.id = 'logo-entrance';
600
622
  element.dataset.wixPath = 'logo-entrance';
601
623
  element.append(div);
602
624
  const elementClick = document.createElement('wix-interact-element');
603
625
  const divClick = document.createElement('div');
626
+ divClick.id = 'logo-click';
604
627
  elementClick.dataset.wixPath = 'logo-click';
605
628
  elementClick.append(divClick);
606
629
  add(elementClick, 'logo-click');
607
630
  add(element, 'logo-entrance');
608
631
  expect(getWebAnimation).toHaveBeenCalledTimes(3);
609
632
  expect(getWebAnimation.mock.calls[0][0]).toBe(divClick);
610
- expect(getWebAnimation.mock.calls[1][0]).toBe(div);
611
- expect(getWebAnimation.mock.calls[2][0]).toBe(divClick);
633
+ expect(getWebAnimation.mock.calls[1][0]).toBe(divClick);
634
+ expect(getWebAnimation.mock.calls[2][0]).toBe(div);
612
635
  expect(getWebAnimation.mock.calls[0][3]).toMatchObject({
613
636
  reducedMotion: false
614
637
  });
@@ -668,7 +691,7 @@ describe('interact', () => {
668
691
  element.append(div);
669
692
  add(element, 'logo-mouse');
670
693
  expect(getScrubScene).toHaveBeenCalledTimes(1);
671
- expect(getScrubScene).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining(effectToAnimationOptions(mockConfig.effects['logo-track-mouse'])), expect.objectContaining({
694
+ expect(getScrubScene).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining(effectToAnimationOptions(getMockConfig().effects['logo-track-mouse'])), expect.objectContaining({
672
695
  trigger: 'pointer-move'
673
696
  }));
674
697
  expect(pointerInstance.start).toHaveBeenCalled();
@@ -684,7 +707,7 @@ describe('interact', () => {
684
707
  element.append(div);
685
708
  add(element, 'logo-scroll');
686
709
  expect(getWebAnimation).toHaveBeenCalledTimes(1);
687
- expect(getWebAnimation).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining(effectToAnimationOptions(mockConfig.effects['logo-fade-scroll'])), expect.objectContaining({
710
+ expect(getWebAnimation).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining(effectToAnimationOptions(getMockConfig().effects['logo-fade-scroll'])), expect.objectContaining({
688
711
  trigger: 'view-progress'
689
712
  }));
690
713
  });
@@ -707,7 +730,7 @@ describe('interact', () => {
707
730
  element.append(div);
708
731
  add(element, 'logo-scroll');
709
732
  expect(getScrubScene).toHaveBeenCalledTimes(1);
710
- expect(getScrubScene).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining(effectToAnimationOptions(mockConfig.effects['logo-fade-scroll'])), expect.objectContaining({
733
+ expect(getScrubScene).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining(effectToAnimationOptions(getMockConfig().effects['logo-fade-scroll'])), expect.objectContaining({
711
734
  trigger: 'view-progress'
712
735
  }));
713
736
  setTimeout(() => {
@@ -810,17 +833,17 @@ describe('interact', () => {
810
833
  expect(getWebAnimation).toHaveBeenCalledTimes(0);
811
834
  add(targetElement, 'logo-scroll-items');
812
835
  expect(getWebAnimation).toHaveBeenCalledTimes(2);
813
- expect(getWebAnimation).toHaveBeenCalledWith(li, expect.objectContaining(effectToAnimationOptions(mockConfig.effects['logo-fade-scroll'])), expect.objectContaining({
836
+ expect(getWebAnimation).toHaveBeenCalledWith(li, expect.objectContaining(effectToAnimationOptions(getMockConfig().effects['logo-fade-scroll'])), expect.objectContaining({
814
837
  trigger: 'view-progress'
815
838
  }));
816
- expect(getWebAnimation).toHaveBeenCalledWith(li2, expect.objectContaining(effectToAnimationOptions(mockConfig.effects['logo-fade-scroll'])), expect.objectContaining({
839
+ expect(getWebAnimation).toHaveBeenCalledWith(li2, expect.objectContaining(effectToAnimationOptions(getMockConfig().effects['logo-fade-scroll'])), expect.objectContaining({
817
840
  trigger: 'view-progress'
818
841
  }));
819
842
  const li3 = document.createElement('li');
820
843
  ul.append(li3);
821
844
  addListItems(targetElement, 'logo-scroll-items', '#logo-scroll-list', [li3]);
822
845
  expect(getWebAnimation).toHaveBeenCalledTimes(3);
823
- expect(getWebAnimation).toHaveBeenCalledWith(li3, expect.objectContaining(effectToAnimationOptions(mockConfig.effects['logo-fade-scroll'])), expect.objectContaining({
846
+ expect(getWebAnimation).toHaveBeenCalledWith(li3, expect.objectContaining(effectToAnimationOptions(getMockConfig().effects['logo-fade-scroll'])), expect.objectContaining({
824
847
  trigger: 'view-progress'
825
848
  }));
826
849
  });
@@ -828,7 +851,10 @@ describe('interact', () => {
828
851
  });
829
852
  describe('remove interaction', () => {
830
853
  beforeEach(() => {
831
- Interact.create(mockConfig);
854
+ Interact.create(getMockConfig());
855
+ });
856
+ afterEach(() => {
857
+ Interact.destroy();
832
858
  });
833
859
  it('should remove event listeners', () => {
834
860
  element = document.createElement('wix-interact-element');