@wix/interact 1.77.0 → 1.78.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 +3 -0
- package/dist/cjs/WixInteractElement.js.map +1 -1
- package/dist/cjs/__tests__/interact.spec.js +87 -18
- package/dist/cjs/__tests__/interact.spec.js.map +1 -1
- package/dist/cjs/core/Interact.js +7 -0
- package/dist/cjs/core/Interact.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/WixInteractElement.js +3 -0
- package/dist/esm/WixInteractElement.js.map +1 -1
- package/dist/esm/__tests__/interact.spec.js +87 -18
- package/dist/esm/__tests__/interact.spec.js.map +1 -1
- package/dist/esm/core/Interact.js +7 -0
- package/dist/esm/core/Interact.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/types/WixInteractElement.d.ts +1 -0
- package/dist/types/core/Interact.d.ts +1 -0
- package/dist/types/types.d.ts +1 -0
- package/package.json +3 -3
|
@@ -56,6 +56,13 @@ class Interact {
|
|
|
56
56
|
instance.init(config);
|
|
57
57
|
return instance;
|
|
58
58
|
}
|
|
59
|
+
static destroy() {
|
|
60
|
+
Interact.elementCache.forEach(element => {
|
|
61
|
+
element.disconnect();
|
|
62
|
+
});
|
|
63
|
+
Interact.instances.length = 0;
|
|
64
|
+
Interact.elementCache.clear();
|
|
65
|
+
}
|
|
59
66
|
static getInstance(key) {
|
|
60
67
|
return Interact.instances.find(instance => instance.has(key));
|
|
61
68
|
}
|
|
@@ -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","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 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","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":";;;;;;;AAQA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsC,IAAAE,SAAA;AAEtC,SAASC,0BAA0BA,CAAA,EAAG;EACpC,IAAI,CAACC,cAAc,CAACC,GAAG,CAAC,sBAAsB,CAAC,EAAE;IAC/C,MAAMC,kBAAkB,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IAClDH,cAAc,CAACI,MAAM,CAAC,sBAAsB,EAAEF,kBAAkB,CAAC;IAEjE,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd;AAEO,MAAMG,QAAQ,CAAC;EAUpBC,WAAWA,CAAA,EAAG;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IACZ,IAAI,CAACC,SAAS,GAAG;MAAEC,OAAO,EAAE,CAAC,CAAC;MAAEC,UAAU,EAAE,CAAC,CAAC;MAAEC,YAAY,EAAE,CAAC;IAAE,CAAC;IAClE,IAAI,CAACC,iBAAiB,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACC,qBAAqB,GAAG,CAAC,CAAC;EACjC;EAEAC,IAAIA,CAACC,MAAsB,EAAQ;IACjC,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAI,CAACA,MAAM,CAACjB,cAAc,EAAE;MAC3D;IACF;IAEA,IAAI,CAACS,SAAS,GAAGS,WAAW,CAACF,MAAM,CAAC;IAEpC,MAAMG,WAAW,GAAGpB,0BAA0B,CAAC,CAAC;IAEhD,IAAI,CAACoB,WAAW,EAAE;MAChBd,QAAQ,CAACe,YAAY,CAACC,OAAO,CAAC,CAACC,OAA4B,EAAEC,GAAG,KAC9DD,OAAO,CAACE,OAAO,CAACD,GAAG,CACrB,CAAC;IACH;EACF;EAEAE,GAAGA,CAACF,GAAW,EAAW;IACxB,OAAO,CAAC,CAAC,IAAI,CAACd,SAAS,CAACG,YAAY,CAACW,GAAG,CAAC;EAC3C;EAEAG,2BAA2BA,CAACH,GAAW,EAAQ;IAAA,IAAAI,qBAAA;IAC7C,MAAMC,cAAc,GAClB,EAAAD,qBAAA,OAAI,CAAClB,SAAS,CAACG,YAAY,CAACW,GAAG,CAAC,qBAAhCI,qBAAA,CAAkCC,cAAc,KAAI,EAAE;IAExDA,cAAc,CAACP,OAAO,CAAEQ,aAAa,IAAK;MACxC;MACA,OAAO,IAAI,CAAChB,iBAAiB,CAACgB,aAAa,CAAC;IAC9C,CAAC,CAAC;EACJ;EAEA,OAAOC,MAAMA,CAACd,MAAsB,EAAY;IAC9C,MAAMe,QAAQ,GAAG,IAAI1B,QAAQ,CAAC,CAAC;IAC/BA,QAAQ,CAAC2B,SAAS,CAACC,IAAI,CAACF,QAAQ,CAAC;IAEjCA,QAAQ,CAAChB,IAAI,CAACC,MAAM,CAAC;IAErB,OAAOe,QAAQ;EACjB;EAEA,OAAOG,OAAOA,CAAA,EAAS;IACrB7B,QAAQ,CAACe,YAAY,CAACC,OAAO,CAAEC,OAA4B,IAAK;MAC9DA,OAAO,CAACa,UAAU,CAAC,CAAC;IACtB,CAAC,CAAC;IACF9B,QAAQ,CAAC2B,SAAS,CAACI,MAAM,GAAG,CAAC;IAC7B/B,QAAQ,CAACe,YAAY,CAACiB,KAAK,CAAC,CAAC;EAC/B;EAEA,OAAOC,WAAWA,CAACf,GAAW,EAAwB;IACpD,OAAOlB,QAAQ,CAAC2B,SAAS,CAACO,IAAI,CAAER,QAAQ,IAAKA,QAAQ,CAACN,GAAG,CAACF,GAAG,CAAC,CAAC;EACjE;EAEA,OAAOiB,UAAUA,CAACjB,GAAW,EAAmC;IAC9D,OAAOlB,QAAQ,CAACe,YAAY,CAACnB,GAAG,CAACsB,GAAG,CAAC;EACvC;EAEA,OAAOkB,UAAUA,CAAClB,GAAW,EAAED,OAA4B,EAAQ;IACjEjB,QAAQ,CAACe,YAAY,CAACsB,GAAG,CAACnB,GAAG,EAAED,OAAO,CAAC;EACzC;AACF;AAACqB,OAAA,CAAAtC,QAAA,GAAAA,QAAA;AAAAP,SAAA,GA1EYO,QAAQ;AAAA,IAAAE,gBAAA,CAAAC,OAAA,EAARH,QAAQ,wBAMkB,KAAK;AAAA,IAAAE,gBAAA,CAAAC,OAAA,EAN/BH,QAAQ,eAOY,EAAE;AAAA,IAAAE,gBAAA,CAAAC,OAAA,EAPtBH,QAAQ,kBAQG,IAAIuC,GAAG,CAA8B,CAAC;AAoE9D,IAAIC,oBAAoB,GAAG,CAAC;AAErB,SAASC,WAAWA,CACzBC,CAAuB,EACvBC,YAAqB,GAAG,KAAK,EACrB;EACR,IAAID,CAAC,CAACE,aAAa,EAAE;IACnB,IAAIF,CAAC,CAACG,QAAQ,EAAE;MACd,OAAO,GAAGH,CAAC,CAACE,aAAa,IAAIF,CAAC,CAACG,QAAQ,EAAE;IAC3C;IAEA,OAAO,GAAGH,CAAC,CAACE,aAAa,MAAM;EACjC,CAAC,MAAM,IAAIF,CAAC,CAACG,QAAQ,EAAE;IACrB,OAAOH,CAAC,CAACG,QAAQ;EACnB;;EAEA;EACA,OAAOF,YAAY,GAAG,gBAAgB,GAAG,uBAAuB;AAClE;;AAEA;AACA;AACA;AACA,SAAS9B,WAAWA,CAACF,MAAsB,EAAiB;EAAA,IAAAmC,oBAAA;EAC1D,MAAMxC,UAAU,GAAGK,MAAM,CAACL,UAAU,IAAI,CAAC,CAAC;EAC1C,MAAMC,YAA2C,GAAG,CAAC,CAAC;EAEtD,CAAAuC,oBAAA,GAAAnC,MAAM,CAACJ,YAAY,aAAnBuC,oBAAA,CAAqB9B,OAAO,CAAE+B,WAAW,IAAK;IAAA,IAAAC,oBAAA,EAAAC,qBAAA;IAC5C,MAAMC,MAAM,GAAGH,WAAW,CAAC7B,GAAG;IAC9B,MAAMiC,cAAc,GAAG,EAAEX,oBAAoB;IAE7C,IAAI,CAACU,MAAM,EAAE;MACXE,OAAO,CAACC,KAAK,CACX,eAAeF,cAAc,uCAC/B,CAAC;MACD;IACF;IAEA,IAAI,CAAC5C,YAAY,CAAC2C,MAAM,CAAC,EAAE;MACzB3C,YAAY,CAAC2C,MAAM,CAAC,GAAG;QACrBI,QAAQ,EAAE,EAAE;QACZjD,OAAO,EAAE,CAAC,CAAC;QACXkB,cAAc,EAAE,IAAIgC,GAAG,CAAC,CAAC;QACzBC,SAAS,EAAE,IAAID,GAAG,CAAC;MACrB,CAAC;IACH;;IAEA;AACJ;AACA;IACI,CAAAP,oBAAA,GAAAD,WAAW,CAAC1C,OAAO,aAAnB2C,oBAAA,CAAqBS,OAAO,CAAC,CAAC,CAAC,CAAC;;IAEhClD,YAAY,CAAC2C,MAAM,CAAC,CAACI,QAAQ,CAAC1B,IAAI,CAACmB,WAAW,CAAC;IAC/CxC,YAAY,CAAC2C,MAAM,CAAC,CAACM,SAAS,CAACE,GAAG,CAACjB,WAAW,CAACM,WAAW,CAAC,CAAC;IAE5D,MAAMH,aAAa,GAAGG,WAAW,CAACH,aAAa;IAE/C,CAAAK,qBAAA,GAAAF,WAAW,CAAC1C,OAAO,aAAnB4C,qBAAA,CAAqBjC,OAAO,CAAE2C,MAAM,IAAK;MACvC;AACN;AACA;AACA;AACA;AACA;MACM,IAAIC,MAAM,GAAGD,MAAM,CAACzC,GAAG;MAEvB,IAAI,CAAC0C,MAAM,IAAKD,MAAM,CAAeE,QAAQ,EAAE;QAC7C,MAAMC,gBAAgB,GAAGnD,MAAM,CAACN,OAAO,CAAEsD,MAAM,CAAeE,QAAQ,CAAC;QAEvE,IAAIC,gBAAgB,EAAE;UACpBF,MAAM,GAAGE,gBAAgB,CAAC5C,GAAG;QAC/B;MACF;MAEA,IAAI,CAAEyC,MAAM,CAAeE,QAAQ,EAAE;QAClCF,MAAM,CAAeE,QAAQ,GAAG,IAAAE,iBAAU,EAAC,CAAC;MAC/C;;MAEA;MACAH,MAAM,GAAGA,MAAM,IAAIV,MAAM;MACzBS,MAAM,CAACzC,GAAG,GAAG0C,MAAM;MACnB,MAAMC,QAAQ,GAAIF,MAAM,CAAeE,QAAQ;MAE/C,IAAIjB,aAAa,IAAIe,MAAM,CAACf,aAAa,EAAE;QACzC;QACA,IAAIgB,MAAM,KAAKV,MAAM,IAAIS,MAAM,CAACf,aAAa,KAAKA,aAAa,EAAE;UAC/D;QACF;MACF;MAEA,MAAMpB,aAAa,GAAG,GAAGoC,MAAM,KAAKC,QAAQ,KAAKV,cAAc,EAAE;MACjEQ,MAAM,CAACnC,aAAa,GAAGA,aAAa;MACpCjB,YAAY,CAAC2C,MAAM,CAAC,CAAC3B,cAAc,CAACmC,GAAG,CAAClC,aAAa,CAAC;MAEtD,IAAIoC,MAAM,KAAKV,MAAM,EAAE;QACrB;QACA;MACF;;MAEA;AACN;AACA;MACM,IAAI,CAAC3C,YAAY,CAACqD,MAAM,CAAC,EAAE;QACzBrD,YAAY,CAACqD,MAAM,CAAC,GAAG;UACrBN,QAAQ,EAAE,EAAE;UACZjD,OAAO,EAAE;YACP,CAACmB,aAAa,GAAG;UACnB,CAAC;UACDD,cAAc,EAAE,IAAIgC,GAAG,CAAC,CAAC;UACzBC,SAAS,EAAE,IAAID,GAAG,CAAC;QACrB,CAAC;MACH,CAAC,MAAM,IAAI,CAAChD,YAAY,CAACqD,MAAM,CAAC,CAACvD,OAAO,CAACmB,aAAa,CAAC,EAAE;QACvDjB,YAAY,CAACqD,MAAM,CAAC,CAACvD,OAAO,CAACmB,aAAa,CAAC,GAAG,EAAE;QAChDjB,YAAY,CAACqD,MAAM,CAAC,CAACrC,cAAc,CAACmC,GAAG,CAAClC,aAAa,CAAC;MACxD;MAEA,MAAM;QAAEnB,OAAO;QAAE,GAAG2D;MAAK,CAAC,GAAGjB,WAAW;MAExCxC,YAAY,CAACqD,MAAM,CAAC,CAACvD,OAAO,CAACmB,aAAa,CAAC,CAACI,IAAI,CAAC;QAAE,GAAGoC,IAAI;QAAEL;MAAO,CAAC,CAAC;MACrEpD,YAAY,CAACqD,MAAM,CAAC,CAACJ,SAAS,CAACE,GAAG,CAACjB,WAAW,CAACkB,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAO;IACLtD,OAAO,EAAEM,MAAM,CAACN,OAAO,IAAI,CAAC,CAAC;IAC7BC,UAAU;IACVC;EACF,CAAC;AACH","ignoreList":[]}
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -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 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 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 +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","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 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","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":[]}
|
|
@@ -399,23 +399,8 @@ describe('interact', () => {
|
|
|
399
399
|
}
|
|
400
400
|
afterEach(() => {
|
|
401
401
|
jest.clearAllMocks();
|
|
402
|
-
remove('logo-entrance');
|
|
403
|
-
remove('logo-loop');
|
|
404
|
-
remove('logo-animation-end');
|
|
405
|
-
remove('logo-mouse');
|
|
406
|
-
remove('logo-click');
|
|
407
|
-
remove('logo-hover');
|
|
408
|
-
remove('logo-scroll');
|
|
409
|
-
// Clean up cascading test elements
|
|
410
|
-
remove('cascade-source');
|
|
411
|
-
remove('cascade-target');
|
|
412
|
-
remove('cascade-target-1');
|
|
413
|
-
remove('cascade-target-2');
|
|
414
|
-
remove('multi-source-1');
|
|
415
|
-
remove('multi-source-2');
|
|
416
402
|
// Clear Interact instances to ensure test isolation
|
|
417
|
-
Interact.
|
|
418
|
-
Interact.elementCache.clear();
|
|
403
|
+
Interact.destroy();
|
|
419
404
|
// Reset forceReducedMotion to default
|
|
420
405
|
Interact.forceReducedMotion = false;
|
|
421
406
|
});
|
|
@@ -425,6 +410,86 @@ describe('interact', () => {
|
|
|
425
410
|
expect(customElements.get('wix-interact-element')).toBeDefined();
|
|
426
411
|
});
|
|
427
412
|
});
|
|
413
|
+
describe('destroy Interact', () => {
|
|
414
|
+
it('should clear all instances', () => {
|
|
415
|
+
Interact.create(mockConfig);
|
|
416
|
+
Interact.create(mockConfig);
|
|
417
|
+
expect(Interact.instances.length).toBe(2);
|
|
418
|
+
Interact.destroy();
|
|
419
|
+
expect(Interact.instances.length).toBe(0);
|
|
420
|
+
});
|
|
421
|
+
it('should clear all elements from cache', () => {
|
|
422
|
+
Interact.create(mockConfig);
|
|
423
|
+
element = document.createElement('wix-interact-element');
|
|
424
|
+
const div = document.createElement('div');
|
|
425
|
+
element.append(div);
|
|
426
|
+
add(element, 'logo-hover');
|
|
427
|
+
expect(Interact.elementCache.size).toBeGreaterThan(0);
|
|
428
|
+
Interact.destroy();
|
|
429
|
+
expect(Interact.elementCache.size).toBe(0);
|
|
430
|
+
});
|
|
431
|
+
it('should call disconnect on all cached elements', () => {
|
|
432
|
+
Interact.create(mockConfig);
|
|
433
|
+
const element1 = document.createElement('wix-interact-element');
|
|
434
|
+
const div1 = document.createElement('div');
|
|
435
|
+
element1.append(div1);
|
|
436
|
+
const element2 = document.createElement('wix-interact-element');
|
|
437
|
+
const div2 = document.createElement('div');
|
|
438
|
+
element2.append(div2);
|
|
439
|
+
add(element1, 'logo-hover');
|
|
440
|
+
add(element2, 'logo-click');
|
|
441
|
+
const disconnectSpy1 = jest.spyOn(element1, 'disconnect');
|
|
442
|
+
const disconnectSpy2 = jest.spyOn(element2, 'disconnect');
|
|
443
|
+
Interact.destroy();
|
|
444
|
+
expect(disconnectSpy1).toHaveBeenCalled();
|
|
445
|
+
expect(disconnectSpy2).toHaveBeenCalled();
|
|
446
|
+
});
|
|
447
|
+
it('should clean up interactions after destroy', () => {
|
|
448
|
+
Interact.create(mockConfig);
|
|
449
|
+
element = document.createElement('wix-interact-element');
|
|
450
|
+
const div = document.createElement('div');
|
|
451
|
+
element.append(div);
|
|
452
|
+
add(element, 'logo-click');
|
|
453
|
+
Interact.destroy();
|
|
454
|
+
|
|
455
|
+
// After destroy, getInstance should return undefined
|
|
456
|
+
expect(Interact.getInstance('logo-click')).toBeUndefined();
|
|
457
|
+
|
|
458
|
+
// Re-create instance and verify it works independently
|
|
459
|
+
Interact.create(mockConfig);
|
|
460
|
+
const newElement = document.createElement('wix-interact-element');
|
|
461
|
+
const newDiv = document.createElement('div');
|
|
462
|
+
newElement.append(newDiv);
|
|
463
|
+
const newAddEventListenerSpy = jest.spyOn(newDiv, 'addEventListener');
|
|
464
|
+
add(newElement, 'logo-click');
|
|
465
|
+
expect(newAddEventListenerSpy).toHaveBeenCalled();
|
|
466
|
+
expect(Interact.getInstance('logo-click')).toBeDefined();
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
// TODO: fix this test - when adding this test it causes 2 other tests to fail
|
|
470
|
+
// it('should remove event listeners and styles when disconnect is called', () => {
|
|
471
|
+
// Interact.create(mockConfig);
|
|
472
|
+
|
|
473
|
+
// element = document.createElement(
|
|
474
|
+
// 'wix-interact-element',
|
|
475
|
+
// ) as IWixInteractElement;
|
|
476
|
+
// element.dataset.wixPath = 'logo-click';
|
|
477
|
+
// const div = document.createElement('div');
|
|
478
|
+
// element.append(div);
|
|
479
|
+
|
|
480
|
+
// add(element, 'logo-click');
|
|
481
|
+
|
|
482
|
+
// const removeEventListenerSpy = jest.spyOn(div, 'removeEventListener');
|
|
483
|
+
|
|
484
|
+
// Interact.destroy();
|
|
485
|
+
|
|
486
|
+
// expect(removeEventListenerSpy).toHaveBeenCalled();
|
|
487
|
+
// expect(removeEventListenerSpy).toHaveBeenCalledWith(
|
|
488
|
+
// 'click',
|
|
489
|
+
// expect.any(Function),
|
|
490
|
+
// );
|
|
491
|
+
// });
|
|
492
|
+
});
|
|
428
493
|
describe('reduced motion', () => {
|
|
429
494
|
it('should pass reducedMotion=true to getWebAnimation when forceReducedMotion is true', () => {
|
|
430
495
|
const {
|
|
@@ -466,6 +531,10 @@ describe('interact', () => {
|
|
|
466
531
|
beforeEach(() => {
|
|
467
532
|
Interact.create(mockConfig);
|
|
468
533
|
});
|
|
534
|
+
afterEach(() => {
|
|
535
|
+
Interact.destroy();
|
|
536
|
+
jest.clearAllMocks();
|
|
537
|
+
});
|
|
469
538
|
describe('hover', () => {
|
|
470
539
|
it('should add handler for hover trigger with alternate type', () => {
|
|
471
540
|
const {
|
|
@@ -528,11 +597,11 @@ describe('interact', () => {
|
|
|
528
597
|
} = require('@wix/motion');
|
|
529
598
|
element = document.createElement('wix-interact-element');
|
|
530
599
|
const div = document.createElement('div');
|
|
531
|
-
|
|
600
|
+
element.dataset.wixPath = 'logo-entrance';
|
|
532
601
|
element.append(div);
|
|
533
602
|
const elementClick = document.createElement('wix-interact-element');
|
|
534
603
|
const divClick = document.createElement('div');
|
|
535
|
-
|
|
604
|
+
elementClick.dataset.wixPath = 'logo-click';
|
|
536
605
|
elementClick.append(divClick);
|
|
537
606
|
add(elementClick, 'logo-click');
|
|
538
607
|
add(element, 'logo-entrance');
|