@wix/interact 1.85.0 → 1.86.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/README.md +7 -7
- package/dist/cjs/{WixInteractElement.js → InteractElement.js} +14 -14
- package/dist/cjs/InteractElement.js.map +1 -0
- package/dist/cjs/__tests__/interact.spec.js +55 -55
- package/dist/cjs/__tests__/interact.spec.js.map +1 -1
- package/dist/cjs/core/Interact.js +7 -7
- package/dist/cjs/core/Interact.js.map +1 -1
- package/dist/cjs/core/add.js +3 -3
- package/dist/cjs/core/add.js.map +1 -1
- package/dist/cjs/handlers/click.js +3 -3
- package/dist/cjs/handlers/click.js.map +1 -1
- package/dist/cjs/handlers/hover.js +4 -4
- package/dist/cjs/handlers/hover.js.map +1 -1
- package/dist/cjs/handlers/utilities.js +0 -2
- package/dist/cjs/handlers/utilities.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.js +2 -2
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/{WixInteractElement.js → InteractElement.js} +12 -12
- package/dist/esm/InteractElement.js.map +1 -0
- package/dist/esm/__tests__/interact.spec.js +55 -55
- package/dist/esm/__tests__/interact.spec.js.map +1 -1
- package/dist/esm/core/Interact.js +7 -7
- package/dist/esm/core/Interact.js.map +1 -1
- package/dist/esm/core/add.js +3 -3
- package/dist/esm/core/add.js.map +1 -1
- package/dist/esm/handlers/click.js +3 -3
- package/dist/esm/handlers/click.js.map +1 -1
- package/dist/esm/handlers/hover.js +4 -4
- package/dist/esm/handlers/hover.js.map +1 -1
- package/dist/esm/handlers/utilities.js +0 -2
- package/dist/esm/handlers/utilities.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.js +2 -2
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/{WixInteractElement.d.ts → InteractElement.d.ts} +2 -2
- package/dist/types/core/Interact.d.ts +6 -6
- package/dist/types/core/add.d.ts +3 -3
- package/dist/types/types.d.ts +3 -3
- package/package.json +3 -3
- package/dist/cjs/WixInteractElement.js.map +0 -1
- package/dist/esm/WixInteractElement.js.map +0 -1
|
@@ -6,13 +6,13 @@ exports.Interact = void 0;
|
|
|
6
6
|
exports.getSelector = getSelector;
|
|
7
7
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
8
|
var _utilities = require("./utilities");
|
|
9
|
-
var
|
|
9
|
+
var _InteractElement = require("../InteractElement");
|
|
10
10
|
var _utils = require("../utils");
|
|
11
11
|
var _Interact;
|
|
12
|
-
function
|
|
13
|
-
if (!customElements.get('
|
|
14
|
-
const
|
|
15
|
-
customElements.define('
|
|
12
|
+
function registerInteractElement() {
|
|
13
|
+
if (!customElements.get('interact-element')) {
|
|
14
|
+
const interactElement = (0, _InteractElement.getInteractElement)();
|
|
15
|
+
customElements.define('interact-element', interactElement);
|
|
16
16
|
return true;
|
|
17
17
|
}
|
|
18
18
|
return false;
|
|
@@ -40,13 +40,13 @@ class Interact {
|
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
this.dataCache = parseConfig(config);
|
|
43
|
-
const didRegister =
|
|
43
|
+
const didRegister = registerInteractElement();
|
|
44
44
|
if (!didRegister) {
|
|
45
45
|
Interact.elementCache.forEach((element, key) => element.connect(key));
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
destroy() {
|
|
49
|
-
for (
|
|
49
|
+
for (const element of this.elements) {
|
|
50
50
|
element.disconnect();
|
|
51
51
|
}
|
|
52
52
|
this.addedInteractions = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utilities","require","_WixInteractElement","_utils","_Interact","registerWixInteractElement","customElements","get","wixInteractElement","getWixInteractElement","define","_convertToKeyTemplate","key","replace","Interact","constructor","_defineProperty2","default","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","elements","Set","init","config","window","parseConfig","didRegister","elementCache","forEach","element","connect","destroy","disconnect","clear","instances","splice","indexOf","setElement","add","deleteElement","clearInteractionStateForKey","delete","has","processedKey","_this$get","interactionIds","interactionId_","interactionId","getInterpolatedKey","create","instance","push","length","getInstance","find","getElement","undefined","set","exports","Map","interactionIdCounter","getSelector","d","asCombinator","addItemFilter","listContainer","itemFilter","listItemSelector","selector","_config$interactions","interaction_","source","interactionIdx","effects_","rest","console","error","triggers","selectors","Array","from","reverse","interaction","effect","target","effectId","referencedEffect","generateId"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IWixInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n} from '../types';\nimport { getInterpolatedKey } from './utilities';\nimport { getWixInteractElement } from '../WixInteractElement';\nimport { generateId } from '../utils';\n\nfunction registerWixInteractElement() {\n if (!customElements.get('wix-interact-element')) {\n const wixInteractElement = getWixInteractElement();\n customElements.define('wix-interact-element', wixInteractElement);\n\n return true;\n }\n\n return false;\n}\n\nfunction _convertToKeyTemplate(key: string) {\n return key.replace(/\\[([-\\w]+)]/g, '[]');\n}\n\nexport class Interact {\n dataCache: InteractCache;\n addedInteractions: { [interactionId: string]: boolean };\n listInteractionsCache: {\n [listContainer: string]: { [interactionId: string]: boolean };\n };\n elements: Set<IWixInteractElement>;\n static forceReducedMotion: boolean = false;\n static instances: Interact[] = [];\n static elementCache = new Map<string, IWixInteractElement>();\n\n constructor() {\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n this.elements = new Set();\n }\n\n init(config: InteractConfig): void {\n if (typeof window === 'undefined' || !window.customElements) {\n return;\n }\n\n this.dataCache = parseConfig(config);\n\n const didRegister = registerWixInteractElement();\n\n if (!didRegister) {\n Interact.elementCache.forEach((element: IWixInteractElement, key) =>\n element.connect(key),\n );\n }\n }\n\n destroy(): void {\n for (let element of this.elements) {\n element.disconnect();\n }\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n this.elements.clear();\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n Interact.instances.splice(Interact.instances.indexOf(this), 1);\n }\n\n setElement(key: string, element: IWixInteractElement) {\n this.elements.add(element);\n\n Interact.setElement(key, element);\n }\n\n deleteElement(key: string) {\n const element = Interact.elementCache.get(key);\n\n this.clearInteractionStateForKey(key);\n\n if (element) {\n this.elements.delete(element);\n Interact.elementCache.delete(key);\n }\n }\n\n has(key: string): boolean {\n return !!this.get(key);\n }\n\n get(key: string): InteractCache['interactions'][string] | undefined {\n const processedKey = _convertToKeyTemplate(key);\n return this.dataCache.interactions[processedKey];\n }\n\n clearInteractionStateForKey(key: string): void {\n const interactionIds = this.get(key)?.interactionIds || [];\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, key);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.addedInteractions[interactionId];\n });\n }\n\n static create(config: InteractConfig): Interact {\n const instance = new Interact();\n Interact.instances.push(instance);\n\n instance.init(config);\n\n return instance;\n }\n\n static destroy(): void {\n Interact.elementCache.forEach((element: IWixInteractElement) => {\n element.disconnect();\n });\n Interact.instances.length = 0;\n Interact.elementCache.clear();\n }\n\n static getInstance(key: string): Interact | undefined {\n return Interact.instances.find((instance) => instance.has(key));\n }\n\n static getElement(key: string | undefined): IWixInteractElement | undefined {\n return key ? Interact.elementCache.get(key) : undefined;\n }\n\n static setElement(key: string, element: IWixInteractElement): void {\n Interact.elementCache.set(key, element);\n }\n}\n\nlet interactionIdCounter = 0;\n\nexport function getSelector(\n d: Interaction | Effect,\n {\n asCombinator = false,\n addItemFilter = false,\n }: { asCombinator?: boolean; addItemFilter?: boolean } = {},\n): string {\n if (d.listContainer) {\n const itemFilter = `${\n addItemFilter && d.listItemSelector ? ` > ${d.listItemSelector}` : ''\n }`;\n\n if (d.selector) {\n return `${d.listContainer}${itemFilter} ${d.selector}`;\n }\n\n return `${d.listContainer}${itemFilter || ' > *'}`;\n } else if (d.selector) {\n return d.selector;\n }\n\n // TODO: consider moving :scope to be configurable since it may lead to unexpected results in some cases\n return asCombinator ? '> :first-child' : ':scope > :first-child';\n}\n\n/**\n * Parses the config object and caches interactions, effects, and conditions\n */\nfunction parseConfig(config: InteractConfig): InteractCache {\n const conditions = config.conditions || {};\n const interactions: InteractCache['interactions'] = {};\n\n config.interactions?.forEach((interaction_) => {\n const source = interaction_.key;\n const interactionIdx = ++interactionIdCounter;\n const { effects: effects_, ...rest } = interaction_;\n\n if (!source) {\n console.error(\n `Interaction ${interactionIdx} is missing a key for source element.`,\n );\n return;\n }\n\n if (!interactions[source]) {\n interactions[source] = {\n triggers: [],\n effects: {},\n interactionIds: new Set(),\n selectors: new Set(),\n };\n }\n\n /*\n * Cache interaction trigger by source element\n */\n const effects = Array.from(effects_);\n effects.reverse(); // reverse to ensure the first effect is the one that will be applied first\n const interaction = { ...rest, effects };\n\n interactions[source].triggers.push(interaction);\n interactions[source].selectors.add(getSelector(interaction));\n\n const listContainer = interaction.listContainer;\n\n effects.forEach((effect) => {\n /*\n * Target cascade order is the first of:\n * -> Config.interactions.effects.effect.key\n * -> Config.effects.effect.key\n * -> Config.interactions.interaction.key\n */\n let target = effect.key;\n\n if (!target && (effect as EffectRef).effectId) {\n const referencedEffect = config.effects[(effect as EffectRef).effectId];\n\n if (referencedEffect) {\n target = referencedEffect.key;\n }\n }\n\n if (!(effect as EffectRef).effectId) {\n (effect as EffectRef).effectId = generateId();\n }\n\n // if no target is specified, use the source element as the target\n target = target || source;\n effect.key = target;\n const effectId = (effect as EffectRef).effectId;\n\n if (listContainer && effect.listContainer) {\n // we do not support having 2 separate lists for same interaction\n if (target !== source || effect.listContainer !== listContainer) {\n return;\n }\n }\n\n const interactionId = `${target}::${effectId}::${interactionIdx}`;\n effect.interactionId = interactionId;\n interactions[source].interactionIds.add(interactionId);\n\n if (target === source) {\n // if target is the source element, no need to add an interaction to `effects`\n return;\n }\n\n /*\n * Cache interaction effect by target element\n */\n if (!interactions[target]) {\n interactions[target] = {\n triggers: [],\n effects: {\n [interactionId]: [],\n },\n interactionIds: new Set(),\n selectors: new Set(),\n };\n } else if (!interactions[target].effects[interactionId]) {\n interactions[target].effects[interactionId] = [];\n interactions[target].interactionIds.add(interactionId);\n }\n\n interactions[target].effects[interactionId].push({ ...rest, effect });\n interactions[target].selectors.add(getSelector(effect));\n });\n });\n\n return {\n effects: config.effects || {},\n conditions,\n interactions,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_utilities","require","_InteractElement","_utils","_Interact","registerInteractElement","customElements","get","interactElement","getInteractElement","define","_convertToKeyTemplate","key","replace","Interact","constructor","_defineProperty2","default","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","elements","Set","init","config","window","parseConfig","didRegister","elementCache","forEach","element","connect","destroy","disconnect","clear","instances","splice","indexOf","setElement","add","deleteElement","clearInteractionStateForKey","delete","has","processedKey","_this$get","interactionIds","interactionId_","interactionId","getInterpolatedKey","create","instance","push","length","getInstance","find","getElement","undefined","set","exports","Map","interactionIdCounter","getSelector","d","asCombinator","addItemFilter","listContainer","itemFilter","listItemSelector","selector","_config$interactions","interaction_","source","interactionIdx","effects_","rest","console","error","triggers","selectors","Array","from","reverse","interaction","effect","target","effectId","referencedEffect","generateId"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n} from '../types';\nimport { getInterpolatedKey } from './utilities';\nimport { getInteractElement } from '../InteractElement';\nimport { generateId } from '../utils';\n\nfunction registerInteractElement() {\n if (!customElements.get('interact-element')) {\n const interactElement = getInteractElement();\n customElements.define('interact-element', interactElement);\n\n return true;\n }\n\n return false;\n}\n\nfunction _convertToKeyTemplate(key: string) {\n return key.replace(/\\[([-\\w]+)]/g, '[]');\n}\n\nexport class Interact {\n dataCache: InteractCache;\n addedInteractions: { [interactionId: string]: boolean };\n listInteractionsCache: {\n [listContainer: string]: { [interactionId: string]: boolean };\n };\n elements: Set<IInteractElement>;\n static forceReducedMotion: boolean = false;\n static instances: Interact[] = [];\n static elementCache = new Map<string, IInteractElement>();\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 = registerInteractElement();\n\n if (!didRegister) {\n Interact.elementCache.forEach((element: IInteractElement, key) =>\n element.connect(key),\n );\n }\n }\n\n destroy(): void {\n for (const 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: IInteractElement) {\n this.elements.add(element);\n\n Interact.setElement(key, element);\n }\n\n deleteElement(key: string) {\n const element = Interact.elementCache.get(key);\n\n this.clearInteractionStateForKey(key);\n\n if (element) {\n this.elements.delete(element);\n Interact.elementCache.delete(key);\n }\n }\n\n has(key: string): boolean {\n return !!this.get(key);\n }\n\n get(key: string): InteractCache['interactions'][string] | undefined {\n const processedKey = _convertToKeyTemplate(key);\n return this.dataCache.interactions[processedKey];\n }\n\n clearInteractionStateForKey(key: string): void {\n const interactionIds = this.get(key)?.interactionIds || [];\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, key);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.addedInteractions[interactionId];\n });\n }\n\n static create(config: InteractConfig): Interact {\n const instance = new Interact();\n Interact.instances.push(instance);\n\n instance.init(config);\n\n return instance;\n }\n\n static destroy(): void {\n Interact.elementCache.forEach((element: IInteractElement) => {\n element.disconnect();\n });\n Interact.instances.length = 0;\n Interact.elementCache.clear();\n }\n\n static getInstance(key: string): Interact | undefined {\n return Interact.instances.find((instance) => instance.has(key));\n }\n\n static getElement(key: string | undefined): IInteractElement | undefined {\n return key ? Interact.elementCache.get(key) : undefined;\n }\n\n static setElement(key: string, element: IInteractElement): void {\n Interact.elementCache.set(key, element);\n }\n}\n\nlet interactionIdCounter = 0;\n\nexport function getSelector(\n d: Interaction | Effect,\n {\n asCombinator = false,\n addItemFilter = false,\n }: { asCombinator?: boolean; addItemFilter?: boolean } = {},\n): string {\n if (d.listContainer) {\n const itemFilter = `${\n addItemFilter && d.listItemSelector ? ` > ${d.listItemSelector}` : ''\n }`;\n\n if (d.selector) {\n return `${d.listContainer}${itemFilter} ${d.selector}`;\n }\n\n return `${d.listContainer}${itemFilter || ' > *'}`;\n } else if (d.selector) {\n return d.selector;\n }\n\n // TODO: consider moving :scope to be configurable since it may lead to unexpected results in some cases\n return asCombinator ? '> :first-child' : ':scope > :first-child';\n}\n\n/**\n * Parses the config object and caches interactions, effects, and conditions\n */\nfunction parseConfig(config: InteractConfig): InteractCache {\n const conditions = config.conditions || {};\n const interactions: InteractCache['interactions'] = {};\n\n config.interactions?.forEach((interaction_) => {\n const source = interaction_.key;\n const interactionIdx = ++interactionIdCounter;\n const { effects: effects_, ...rest } = interaction_;\n\n if (!source) {\n console.error(\n `Interaction ${interactionIdx} is missing a key for source element.`,\n );\n return;\n }\n\n if (!interactions[source]) {\n interactions[source] = {\n triggers: [],\n effects: {},\n interactionIds: new Set(),\n selectors: new Set(),\n };\n }\n\n /*\n * Cache interaction trigger by source element\n */\n const effects = Array.from(effects_);\n effects.reverse(); // reverse to ensure the first effect is the one that will be applied first\n const interaction = { ...rest, effects };\n\n interactions[source].triggers.push(interaction);\n interactions[source].selectors.add(getSelector(interaction));\n\n const listContainer = interaction.listContainer;\n\n effects.forEach((effect) => {\n /*\n * Target cascade order is the first of:\n * -> Config.interactions.effects.effect.key\n * -> Config.effects.effect.key\n * -> Config.interactions.interaction.key\n */\n let target = effect.key;\n\n if (!target && (effect as EffectRef).effectId) {\n const referencedEffect = config.effects[(effect as EffectRef).effectId];\n\n if (referencedEffect) {\n target = referencedEffect.key;\n }\n }\n\n if (!(effect as EffectRef).effectId) {\n (effect as EffectRef).effectId = generateId();\n }\n\n // if no target is specified, use the source element as the target\n target = target || source;\n effect.key = target;\n const effectId = (effect as EffectRef).effectId;\n\n if (listContainer && effect.listContainer) {\n // we do not support having 2 separate lists for same interaction\n if (target !== source || effect.listContainer !== listContainer) {\n return;\n }\n }\n\n const interactionId = `${target}::${effectId}::${interactionIdx}`;\n effect.interactionId = interactionId;\n interactions[source].interactionIds.add(interactionId);\n\n if (target === source) {\n // if target is the source element, no need to add an interaction to `effects`\n return;\n }\n\n /*\n * Cache interaction effect by target element\n */\n if (!interactions[target]) {\n interactions[target] = {\n triggers: [],\n effects: {\n [interactionId]: [],\n },\n interactionIds: new Set(),\n selectors: new Set(),\n };\n } else if (!interactions[target].effects[interactionId]) {\n interactions[target].effects[interactionId] = [];\n interactions[target].interactionIds.add(interactionId);\n }\n\n interactions[target].effects[interactionId].push({ ...rest, effect });\n interactions[target].selectors.add(getSelector(effect));\n });\n });\n\n return {\n effects: config.effects || {},\n conditions,\n interactions,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/core/add.js
CHANGED
|
@@ -12,7 +12,7 @@ function _getElementsFromData(data, root) {
|
|
|
12
12
|
if (data.listContainer) {
|
|
13
13
|
const container = root.querySelector(data.listContainer);
|
|
14
14
|
if (!container) {
|
|
15
|
-
console.warn(`
|
|
15
|
+
console.warn(`Interact: No container found for list container "${data.listContainer}"`);
|
|
16
16
|
return [];
|
|
17
17
|
}
|
|
18
18
|
if (data.selector) {
|
|
@@ -25,7 +25,7 @@ function _getElementsFromData(data, root) {
|
|
|
25
25
|
if (element) {
|
|
26
26
|
return element;
|
|
27
27
|
} else {
|
|
28
|
-
console.warn(`
|
|
28
|
+
console.warn(`Interact: No element found for selector "${data.selector}"`);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
return root.firstElementChild;
|
|
@@ -177,7 +177,7 @@ function addInteraction(key, source, trigger, target, effect, options) {
|
|
|
177
177
|
addItemFilter: true
|
|
178
178
|
})
|
|
179
179
|
};
|
|
180
|
-
const root = target.closest('
|
|
180
|
+
const root = target.closest('interact-element');
|
|
181
181
|
if (!root) {
|
|
182
182
|
return;
|
|
183
183
|
}
|
package/dist/cjs/core/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","_utilities","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","sourceKey","sourceRoot","instance","interactionVariations","effects","effectId","effectOptions","dataCache","targetKey_","interactionId","getInterpolatedKey","addedInteractions","mql","getMediaQuery","conditions","matches","targetElement","Interact","getElement","watchChildList","addEffectsForTarget","targetKey","_instance$get","get","interactionIds","Object","keys","interactionId_","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","asCombinator","addItemFilter","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","forceReducedMotion","getInstance","setElement","triggers","hasTriggers","hasEffects","addListItems"],"sources":["../../../src/core/add.ts"],"sourcesContent":["import type {\n Effect,\n TriggerType,\n EffectRef,\n InteractionParamsTypes,\n TransitionEffect,\n IWixInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport { createTransitionCSS, getMediaQuery } from '../utils';\nimport { getInterpolatedKey } from './utilities';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: 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.querySelector(data.selector) : element;\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) {\n const isSourceArray = Array.isArray(sourceElements);\n const isTargetArray = Array.isArray(targetElements);\n\n if (isSourceArray) {\n sourceElements.forEach((sourceEl, index) => {\n const targetEl = isTargetArray ? targetElements[index] : targetElements;\n\n if (targetEl) {\n addInteraction(\n key,\n sourceEl,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n );\n }\n });\n } else {\n const targets = isTargetArray ? targetElements : [targetElements];\n targets.forEach((targetEl) => {\n addInteraction(\n key,\n sourceElements,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n );\n });\n }\n}\n\nfunction _addInteraction(\n sourceKey: string,\n sourceRoot: IWixInteractElement,\n instance: Interact,\n interaction: Interaction,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n const targetKey_ = effectOptions.key;\n\n const interactionId = getInterpolatedKey(effect.interactionId!, sourceKey);\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n if (instance.addedInteractions[interactionId!] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n interactionVariations[interactionId!] = true;\n\n const target = targetKey_ && getInterpolatedKey(targetKey_, sourceKey);\n\n let targetElement;\n if (target) {\n targetElement = Interact.getElement(target);\n\n if (!targetElement) {\n // Bail out :: no target element in cache\n return;\n }\n\n if (effectOptions.listContainer) {\n targetElement.watchChildList(effectOptions.listContainer);\n }\n } else {\n // target is not specified - fallback to same as source\n targetElement = sourceRoot;\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceRoot,\n targetElement!,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n return;\n }\n\n instance.addedInteractions[interactionId!] = true;\n\n const key = target || interaction.key;\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n targetKey: string,\n element: IWixInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.get(targetKey)?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, targetKey);\n\n if (instance.addedInteractions[interactionId] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n const effectVariations = effects[interactionId_];\n\n // use `some` to short-circuit after the first effect that matches the conditions\n // eslint-disable-next-line array-callback-return\n effectVariations.some(({ effect, ...interaction }) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance!.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (listContainer && effectOptions.listContainer !== listContainer) {\n // skip this effect if a listContainer was provided and it's not matching this effect.listContainer\n return false;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n const sourceKey =\n interaction.key && getInterpolatedKey(interaction.key, targetKey);\n const sourceElement = Interact.getElement(sourceKey);\n\n if (!sourceElement) {\n // Bail out :: no source or target elements in cache\n return true;\n }\n\n if (effectOptions.listContainer) {\n element.watchChildList(effectOptions.listContainer);\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceElement,\n element,\n undefined,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n // Bail out :: no source or target elements found in DOM\n return true;\n }\n\n instance!.addedInteractions[interactionId] = true;\n\n _applyInteraction(\n targetKey,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\n );\n\n // short-circuit the loop since we have a match\n return true;\n }\n });\n });\n\n return interactionIds.length > 0;\n}\n\n/**\n * Registers a handler to an event on a given element.\n */\nfunction addInteraction<T extends TriggerType>(\n key: string,\n source: HTMLElement,\n trigger: T,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n): void {\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n const args: CreateTransitionCSSParams = {\n key,\n effectId: (effect as Effect).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, {\n asCombinator: true,\n addItemFilter: true,\n }),\n };\n\n const root = target.closest('wix-interact-element') as IWixInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(\n source,\n target,\n effect,\n options,\n Interact.forceReducedMotion,\n );\n}\n\n/**\n * Adds all events and effects to an element based on config\n */\nexport function add(element: IWixInteractElement, key: string): boolean {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n console.warn(`No instance found for key: ${key}`);\n\n // even if we don't find a matching instance, we still want to cache the element\n Interact.setElement(key, element);\n return false;\n }\n\n const { triggers = [] } = instance?.get(key) || {};\n const hasTriggers = triggers.length > 0;\n\n instance.setElement(key, element);\n\n triggers.forEach((interaction) => {\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n if (interaction.listContainer) {\n element.watchChildList(interaction.listContainer);\n }\n\n _addInteraction(key, element, instance!, interaction);\n }\n });\n\n let hasEffects = false;\n if (instance) {\n hasEffects = addEffectsForTarget(key, element, instance);\n }\n\n return hasTriggers || hasEffects;\n}\n\nexport function addListItems(\n root: 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?.get(key) || {};\n\n triggers.forEach((interaction) => {\n if (interaction.listContainer !== listContainer) {\n return;\n }\n\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n _addInteraction(key, root, instance!, interaction, elements);\n }\n });\n\n addEffectsForTarget(key, root, instance, listContainer, elements);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_utils","require","_utilities","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","sourceKey","sourceRoot","instance","interactionVariations","effects","effectId","effectOptions","dataCache","targetKey_","interactionId","getInterpolatedKey","addedInteractions","mql","getMediaQuery","conditions","matches","targetElement","Interact","getElement","watchChildList","addEffectsForTarget","targetKey","_instance$get","get","interactionIds","Object","keys","interactionId_","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","asCombinator","addItemFilter","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","forceReducedMotion","getInstance","setElement","triggers","hasTriggers","hasEffects","addListItems"],"sources":["../../../src/core/add.ts"],"sourcesContent":["import type {\n Effect,\n TriggerType,\n EffectRef,\n InteractionParamsTypes,\n TransitionEffect,\n IInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport { createTransitionCSS, getMediaQuery } from '../utils';\nimport { getInterpolatedKey } from './utilities';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: IInteractElement,\n): HTMLElement | HTMLElement[] | null {\n if (data.listContainer) {\n const container = root.querySelector(data.listContainer);\n\n if (!container) {\n console.warn(\n `Interact: No container found for list container \"${data.listContainer}\"`,\n );\n\n return [];\n }\n\n if (data.selector) {\n return Array.from(\n container.querySelectorAll(data.selector),\n ) as HTMLElement[];\n }\n\n return Array.from(container.children) as HTMLElement[];\n }\n\n if (data.selector) {\n const element = root.querySelector(data.selector);\n\n if (element) {\n return element as HTMLElement;\n } else {\n console.warn(\n `Interact: No element found for selector \"${data.selector}\"`,\n );\n }\n }\n\n return root.firstElementChild as HTMLElement | null;\n}\n\nfunction _queryItemElement(\n data: Interaction | Effect,\n elements: HTMLElement[],\n): HTMLElement[] {\n return elements\n .map((element) => {\n return data.selector ? element.querySelector(data.selector) : element;\n })\n .filter(Boolean) as HTMLElement[];\n}\n\nfunction _getInteractionElements(\n interaction: InteractionTrigger,\n effect: Effect,\n source: IInteractElement,\n target: IInteractElement,\n sourceElements?: HTMLElement[],\n targetElements?: HTMLElement[],\n): [HTMLElement | HTMLElement[] | null, HTMLElement | HTMLElement[] | null] {\n return [\n sourceElements\n ? _queryItemElement(interaction, sourceElements)\n : _getElementsFromData(interaction, source),\n targetElements\n ? _queryItemElement(effect, targetElements)\n : _getElementsFromData(effect, target),\n ];\n}\n\nfunction _applyInteraction(\n key: string,\n interaction: InteractionTrigger,\n effect: Effect,\n sourceElements: HTMLElement | HTMLElement[],\n targetElements: HTMLElement | HTMLElement[],\n) {\n const isSourceArray = Array.isArray(sourceElements);\n const isTargetArray = Array.isArray(targetElements);\n\n if (isSourceArray) {\n sourceElements.forEach((sourceEl, index) => {\n const targetEl = isTargetArray ? targetElements[index] : targetElements;\n\n if (targetEl) {\n addInteraction(\n key,\n sourceEl,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n );\n }\n });\n } else {\n const targets = isTargetArray ? targetElements : [targetElements];\n targets.forEach((targetEl) => {\n addInteraction(\n key,\n sourceElements,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n );\n });\n }\n}\n\nfunction _addInteraction(\n sourceKey: string,\n sourceRoot: IInteractElement,\n instance: Interact,\n interaction: Interaction,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n const targetKey_ = effectOptions.key;\n\n const interactionId = getInterpolatedKey(effect.interactionId!, sourceKey);\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n if (instance.addedInteractions[interactionId!] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n interactionVariations[interactionId!] = true;\n\n const target = targetKey_ && getInterpolatedKey(targetKey_, sourceKey);\n\n let targetElement;\n if (target) {\n targetElement = Interact.getElement(target);\n\n if (!targetElement) {\n // Bail out :: no target element in cache\n return;\n }\n\n if (effectOptions.listContainer) {\n targetElement.watchChildList(effectOptions.listContainer);\n }\n } else {\n // target is not specified - fallback to same as source\n targetElement = sourceRoot;\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceRoot,\n targetElement!,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n return;\n }\n\n instance.addedInteractions[interactionId!] = true;\n\n const key = target || interaction.key;\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n targetKey: string,\n element: IInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.get(targetKey)?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId_) => {\n const interactionId = getInterpolatedKey(interactionId_, targetKey);\n\n if (instance.addedInteractions[interactionId] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n const effectVariations = effects[interactionId_];\n\n // use `some` to short-circuit after the first effect that matches the conditions\n // eslint-disable-next-line array-callback-return\n effectVariations.some(({ effect, ...interaction }) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance!.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (listContainer && effectOptions.listContainer !== listContainer) {\n // skip this effect if a listContainer was provided and it's not matching this effect.listContainer\n return false;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n const sourceKey =\n interaction.key && getInterpolatedKey(interaction.key, targetKey);\n const sourceElement = Interact.getElement(sourceKey);\n\n if (!sourceElement) {\n // Bail out :: no source or target elements in cache\n return true;\n }\n\n if (effectOptions.listContainer) {\n element.watchChildList(effectOptions.listContainer);\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceElement,\n element,\n undefined,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n // Bail out :: no source or target elements found in DOM\n return true;\n }\n\n instance!.addedInteractions[interactionId] = true;\n\n _applyInteraction(\n targetKey,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\n );\n\n // short-circuit the loop since we have a match\n return true;\n }\n });\n });\n\n return interactionIds.length > 0;\n}\n\n/**\n * Registers a handler to an event on a given element.\n */\nfunction addInteraction<T extends TriggerType>(\n key: string,\n source: HTMLElement,\n trigger: T,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n): void {\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n const args: CreateTransitionCSSParams = {\n key,\n effectId: (effect as Effect).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, {\n asCombinator: true,\n addItemFilter: true,\n }),\n };\n\n const root = target.closest('interact-element') as IInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(\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: IInteractElement, key: string): boolean {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n console.warn(`No instance found for key: ${key}`);\n\n // even if we don't find a matching instance, we still want to cache the element\n Interact.setElement(key, element);\n return false;\n }\n\n const { triggers = [] } = instance?.get(key) || {};\n const hasTriggers = triggers.length > 0;\n\n instance.setElement(key, element);\n\n triggers.forEach((interaction) => {\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n if (interaction.listContainer) {\n element.watchChildList(interaction.listContainer);\n }\n\n _addInteraction(key, element, instance!, interaction);\n }\n });\n\n let hasEffects = false;\n if (instance) {\n hasEffects = addEffectsForTarget(key, element, instance);\n }\n\n return hasTriggers || hasEffects;\n}\n\nexport function addListItems(\n root: IInteractElement,\n key: string,\n listContainer: string,\n elements: HTMLElement[],\n) {\n const instance = Interact.getInstance(key);\n\n if (instance) {\n const { triggers = [] } = instance?.get(key) || {};\n\n triggers.forEach((interaction) => {\n if (interaction.listContainer !== listContainer) {\n return;\n }\n\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n _addInteraction(key, root, instance!, interaction, elements);\n }\n });\n\n addEffectsForTarget(key, root, instance, listContainer, elements);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -49,15 +49,15 @@ function createTransitionHandler(element, {
|
|
|
49
49
|
}, options) {
|
|
50
50
|
const shouldSetStateOnElement = !!listContainer;
|
|
51
51
|
return __ => {
|
|
52
|
-
const
|
|
53
|
-
if (!
|
|
52
|
+
const interactElement = element.closest('interact-element');
|
|
53
|
+
if (!interactElement) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
let item;
|
|
57
57
|
if (shouldSetStateOnElement) {
|
|
58
58
|
item = element.closest(`${listContainer} > ${listItemSelector || ''}:has(:scope)`);
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
interactElement.toggleEffect(effectId, options.method || 'toggle', item);
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
function addClickHandler(source, target, effect, options = {}, reducedMotion = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","initialPlay","type","__","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","effectId","listContainer","listItemSelector","shouldSetStateOnElement","
|
|
1
|
+
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","initialPlay","type","__","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","effectId","listContainer","listItemSelector","shouldSetStateOnElement","interactElement","closest","item","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addHandlerToMap","addEventListener","passive","removeClickHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/click.ts"],"sourcesContent":["import { getAnimation } from '@wix/motion';\nimport type { AnimationGroup } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IInteractElement,\n PointerTriggerParams,\n EffectBase,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect & EffectBase,\n options: PointerTriggerParams,\n reducedMotion: boolean = false,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n let initialPlay = true;\n const type = options.type || 'alternate';\n\n return (__: MouseEvent) => {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n if (animation.playState === 'running') {\n animation.pause();\n } else if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\n if (animation.isCSS) {\n animation.onFinish(() => {\n element.dataset.motionEnter = 'done';\n });\n }\n\n animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {\n effectId,\n listContainer,\n listItemSelector,\n }: TransitionEffect & EffectBase & { effectId: string },\n options: StateParams,\n) {\n const shouldSetStateOnElement = !!listContainer;\n\n return (__: MouseEvent) => {\n const interactElement = element.closest(\n 'interact-element',\n ) as IInteractElement;\n if (!interactElement) {\n return;\n }\n\n let item;\n if (shouldSetStateOnElement) {\n item = element.closest(\n `${listContainer} > ${listItemSelector || ''}:has(:scope)`,\n ) as HTMLElement | null;\n }\n\n interactElement.toggleEffect(effectId, options.method || 'toggle', item);\n };\n}\n\nfunction addClickHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: (TimeEffect | TransitionEffect) & EffectBase,\n options: StateParams | PointerTriggerParams = {} as StateParams,\n reducedMotion: boolean = false,\n) {\n let handler: (event: MouseEvent) => void;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n reducedMotion,\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('click', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('click', handler, { passive: true, once });\n}\n\nfunction removeClickHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addClickHandler,\n remove: removeClickHandler,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -57,8 +57,8 @@ function createTransitionHandler(element, {
|
|
|
57
57
|
const isToggle = method === 'toggle';
|
|
58
58
|
const shouldSetStateOnElement = !!listContainer;
|
|
59
59
|
return event => {
|
|
60
|
-
const
|
|
61
|
-
if (!
|
|
60
|
+
const interactElement = element.closest('interact-element');
|
|
61
|
+
if (!interactElement) {
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
let item;
|
|
@@ -67,9 +67,9 @@ function createTransitionHandler(element, {
|
|
|
67
67
|
}
|
|
68
68
|
if (event.type === 'mouseenter') {
|
|
69
69
|
const method_ = isToggle ? 'add' : method;
|
|
70
|
-
|
|
70
|
+
interactElement.toggleEffect(effectId, method_, item);
|
|
71
71
|
} else if (event.type === 'mouseleave' && isToggle) {
|
|
72
|
-
|
|
72
|
+
interactElement.toggleEffect(effectId, 'remove', item);
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","type","initialPlay","event","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","
|
|
1
|
+
{"version":3,"names":["_motion","require","_utilities","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","getAnimation","effectToAnimationOptions","undefined","type","initialPlay","event","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","interactElement","closest","item","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addHandlerToMap","addEventListener","passive","addLeave","removeHoverHandler","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/hover.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IInteractElement,\n PointerTriggerParams,\n EffectBase,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect & EffectBase,\n options: PointerTriggerParams,\n reducedMotion: boolean = false,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n const type = options.type || 'alternate';\n let initialPlay = true;\n\n return (event: MouseEvent) => {\n if (event.type === 'mouseenter') {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n\n if (animation.isCSS) {\n animation.onFinish(() => {\n element.dataset.motionEnter = 'done';\n });\n }\n\n animation.play();\n }\n } else if (event.type === 'mouseleave') {\n if (type === 'alternate') {\n animation.reverse();\n } else if (type === 'repeat') {\n animation.cancel();\n delete element.dataset.motionEnter;\n } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n {\n effectId,\n listContainer,\n listItemSelector,\n }: TransitionEffect & EffectBase & { effectId: string },\n options: StateParams,\n) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n const shouldSetStateOnElement = !!listContainer;\n\n return (event: MouseEvent) => {\n const interactElement = element.closest(\n 'interact-element',\n ) as IInteractElement;\n if (!interactElement) {\n return;\n }\n\n let item;\n if (shouldSetStateOnElement) {\n item = element.closest(\n `${listContainer} > ${listItemSelector || ''}:has(:scope)`,\n ) as HTMLElement | null;\n }\n\n if (event.type === 'mouseenter') {\n const method_ = isToggle ? 'add' : method;\n interactElement.toggleEffect(effectId, method_, item);\n } else if (event.type === 'mouseleave' && isToggle) {\n interactElement.toggleEffect(effectId, 'remove', item);\n }\n };\n}\n\nfunction addHoverHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: (TransitionEffect | TimeEffect) & EffectBase,\n options: StateParams | PointerTriggerParams = {},\n reducedMotion: boolean = false,\n) {\n let handler: (event: MouseEvent) => void;\n let isStateTrigger = false;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & EffectBase & { effectId: string },\n options as StateParams,\n );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect & EffectBase,\n options as PointerTriggerParams,\n reducedMotion,\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('mouseenter', handler);\n source.removeEventListener('mouseleave', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('mouseenter', handler, { passive: true, once });\n\n const addLeave = isStateTrigger\n ? ((options as StateParams).method || 'toggle') === 'toggle'\n : (options as PointerTriggerParams).type !== 'once';\n if (addLeave) {\n source.addEventListener('mouseleave', handler, { passive: true });\n }\n}\n\nfunction removeHoverHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addHoverHandler,\n remove: removeHoverHandler,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,7 +7,6 @@ exports.removeElementFromHandlerMap = removeElementFromHandlerMap;
|
|
|
7
7
|
function effectToAnimationOptions(effect) {
|
|
8
8
|
if (effect.duration) {
|
|
9
9
|
return {
|
|
10
|
-
type: 'TimeAnimationOptions',
|
|
11
10
|
id: '',
|
|
12
11
|
...effect
|
|
13
12
|
};
|
|
@@ -18,7 +17,6 @@ function effectToAnimationOptions(effect) {
|
|
|
18
17
|
...rest
|
|
19
18
|
} = effect;
|
|
20
19
|
return {
|
|
21
|
-
type: 'ScrubAnimationOptions',
|
|
22
20
|
id: '',
|
|
23
21
|
startOffset: rangeStart,
|
|
24
22
|
endOffset: rangeEnd,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["effectToAnimationOptions","effect","duration","
|
|
1
|
+
{"version":3,"names":["effectToAnimationOptions","effect","duration","id","rangeStart","rangeEnd","rest","startOffset","endOffset","addHandlerToMap","handlersMap","element","handlerObj","handlers","get","Set","set","add","removeElementFromHandlerMap","handlerMap","forEach","source","target","cleanup","otherKey","otherHandlers","delete"],"sources":["../../../src/handlers/utilities.ts"],"sourcesContent":["import type {\n TimeEffect,\n ScrubEffect,\n HandlerObject,\n HandlerObjectMap,\n AnimationOptions,\n} from '../types';\n\nexport function effectToAnimationOptions(effect: TimeEffect | ScrubEffect) {\n if ((effect as TimeEffect).duration) {\n return {\n id: '',\n ...effect,\n } as AnimationOptions<'time'>;\n }\n\n const { rangeStart, rangeEnd, ...rest } = effect as ScrubEffect;\n return {\n id: '',\n startOffset: rangeStart,\n endOffset: rangeEnd,\n ...rest,\n } as AnimationOptions<'scrub'>;\n}\n\nexport function addHandlerToMap(\n handlersMap: HandlerObjectMap,\n element: HTMLElement,\n handlerObj: HandlerObject,\n) {\n let handlers = handlersMap.get(element);\n\n if (!handlers) {\n handlers = new Set();\n handlersMap.set(element, handlers);\n }\n\n handlers.add(handlerObj);\n}\n\nexport function removeElementFromHandlerMap(\n handlerMap: HandlerObjectMap,\n element: HTMLElement,\n) {\n const handlers = handlerMap.get(element);\n\n handlers?.forEach((handlerObj) => {\n const { source, target, cleanup } = handlerObj;\n cleanup();\n\n const otherKey = source === element ? target : source;\n const otherHandlers = handlerMap.get(otherKey);\n otherHandlers?.delete(handlerObj);\n });\n\n handlerMap.delete(element);\n}\n"],"mappings":";;;;;;AAQO,SAASA,wBAAwBA,CAACC,MAAgC,EAAE;EACzE,IAAKA,MAAM,CAAgBC,QAAQ,EAAE;IACnC,OAAO;MACLC,EAAE,EAAE,EAAE;MACN,GAAGF;IACL,CAAC;EACH;EAEA,MAAM;IAAEG,UAAU;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,GAAGL,MAAqB;EAC/D,OAAO;IACLE,EAAE,EAAE,EAAE;IACNI,WAAW,EAAEH,UAAU;IACvBI,SAAS,EAAEH,QAAQ;IACnB,GAAGC;EACL,CAAC;AACH;AAEO,SAASG,eAAeA,CAC7BC,WAA6B,EAC7BC,OAAoB,EACpBC,UAAyB,EACzB;EACA,IAAIC,QAAQ,GAAGH,WAAW,CAACI,GAAG,CAACH,OAAO,CAAC;EAEvC,IAAI,CAACE,QAAQ,EAAE;IACbA,QAAQ,GAAG,IAAIE,GAAG,CAAC,CAAC;IACpBL,WAAW,CAACM,GAAG,CAACL,OAAO,EAAEE,QAAQ,CAAC;EACpC;EAEAA,QAAQ,CAACI,GAAG,CAACL,UAAU,CAAC;AAC1B;AAEO,SAASM,2BAA2BA,CACzCC,UAA4B,EAC5BR,OAAoB,EACpB;EACA,MAAME,QAAQ,GAAGM,UAAU,CAACL,GAAG,CAACH,OAAO,CAAC;EAExCE,QAAQ,YAARA,QAAQ,CAAEO,OAAO,CAAER,UAAU,IAAK;IAChC,MAAM;MAAES,MAAM;MAAEC,MAAM;MAAEC;IAAQ,CAAC,GAAGX,UAAU;IAC9CW,OAAO,CAAC,CAAC;IAET,MAAMC,QAAQ,GAAGH,MAAM,KAAKV,OAAO,GAAGW,MAAM,GAAGD,MAAM;IACrD,MAAMI,aAAa,GAAGN,UAAU,CAACL,GAAG,CAACU,QAAQ,CAAC;IAC9CC,aAAa,YAAbA,aAAa,CAAEC,MAAM,CAACd,UAAU,CAAC;EACnC,CAAC,CAAC;EAEFO,UAAU,CAACO,MAAM,CAACf,OAAO,CAAC;AAC5B","ignoreList":[]}
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../src/types.ts"],"sourcesContent":["import type {\n NamedEffect,\n RangeOffset,\n ScrubTransitionEasing,\n MotionAnimationOptions,\n} from '@wix/motion';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n '
|
|
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 'interact-element': React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement>,\n HTMLElement\n > & {\n 'data-interact-key'?: string;\n };\n }\n }\n}\n\nexport type TriggerType =\n | 'hover'\n | 'click'\n | 'viewEnter'\n | 'pageVisible'\n | 'animationEnd'\n | 'viewProgress'\n | 'pointerMove';\n\nexport type ViewEnterType = 'once' | 'repeat' | 'alternate';\n\nexport type TransitionMethod = 'add' | 'remove' | 'toggle' | 'clear';\n\nexport type StateParams = {\n method: TransitionMethod;\n};\n\nexport type PointerTriggerParams = {\n type?: ViewEnterType | 'state';\n};\n\nexport type ViewEnterParams = {\n type?: ViewEnterType;\n threshold?: number;\n inset?: string;\n};\n\nexport type PointerMoveParams = {\n hitArea?: 'root' | 'self';\n};\n\nexport type AnimationEndParams = {\n effectId: string;\n};\n\nexport type TriggerParams =\n | StateParams\n | PointerTriggerParams\n | ViewEnterParams\n | PointerMoveParams\n | AnimationEndParams;\n\ntype Fill = 'none' | 'forwards' | 'backwards' | 'both';\n\ntype MotionKeyframeEffect = {\n name: string;\n keyframes: Keyframe[];\n};\n\ntype EffectEffectProperty =\n | {\n keyframeEffect: MotionKeyframeEffect;\n }\n | {\n namedEffect: NamedEffect;\n }\n | {\n customEffect: (element: Element, progress: any) => void;\n };\n\nexport type TimeEffect = {\n duration: number;\n easing?: string;\n iterations?: number;\n alternate?: boolean;\n fill?: Fill;\n reversed?: boolean;\n delay?: number;\n} & EffectEffectProperty;\n\nexport type ScrubEffect = {\n easing?: string;\n iterations?: number;\n alternate?: boolean;\n fill?: Fill;\n reversed?: boolean;\n rangeStart?: RangeOffset;\n rangeEnd?: RangeOffset;\n centeredToTarget?: boolean;\n transitionDuration?: number;\n transitionDelay?: number;\n transitionEasing?: ScrubTransitionEasing;\n} & EffectEffectProperty;\n\nexport type TransitionOptions = {\n duration?: number;\n delay?: number;\n easing?: string;\n};\n\nexport type StyleProperty = {\n name: string;\n value: string;\n};\n\nexport type TransitionProperty = StyleProperty & TransitionOptions;\n\nexport type TransitionEffect = {\n key?: string;\n effectId?: string;\n} & {\n transition?: TransitionOptions & {\n styleProperties: StyleProperty[];\n };\n transitionProperties?: TransitionProperty[];\n};\n\nexport type EffectBase = {\n key?: string;\n listContainer?: string;\n listItemSelector?: string;\n conditions?: string[];\n selector?: string;\n effectId?: string;\n};\n\nexport type EffectRef = EffectBase & { effectId: string };\n\nexport type Effect = EffectBase & (TimeEffect | ScrubEffect | TransitionEffect);\n\nexport type Condition = {\n type: 'media' | 'container';\n predicate?: string;\n};\n\nexport type InteractionTrigger = {\n key: string;\n listContainer?: string;\n listItemSelector?: string;\n trigger: TriggerType;\n params?: TriggerParams;\n conditions?: string[];\n selector?: string;\n};\n\nexport type Interaction = InteractionTrigger & {\n effects: ((Effect | EffectRef) & { interactionId?: string })[];\n};\n\nexport type InteractConfig = {\n effects: Record<string, Effect>;\n conditions?: Record<string, Condition>;\n interactions: Interaction[];\n};\n\nexport type AnimationOptions<T extends 'time' | 'scrub'> =\n MotionAnimationOptions<T> & EffectEffectProperty;\n\n/// ////////////////////////////////////////////////////////\n/// ////////////////////////////////////////////////////////\n/// ////////////////////////////////////////////////////////\n\nexport interface IInteractElement extends HTMLElement {\n _internals: (ElementInternals & { states: Set<string> }) | null;\n connected: boolean;\n sheet: CSSStyleSheet | null;\n _observers: WeakMap<HTMLElement, MutationObserver>;\n connectedCallback(): void;\n disconnectedCallback(): void;\n connect(path?: string): void;\n disconnect(): void;\n renderStyle(cssRules: string[]): void;\n toggleEffect(\n effectId: string,\n method: StateParams['method'],\n item?: HTMLElement | null,\n ): void;\n watchChildList(listContainer: string): void;\n}\n\nexport type InteractionParamsTypes = {\n hover: StateParams | PointerTriggerParams;\n click: StateParams | PointerTriggerParams;\n viewEnter: ViewEnterParams;\n pageVisible: ViewEnterParams;\n animationEnd: AnimationEndParams;\n viewProgress: ViewEnterParams;\n pointerMove: PointerMoveParams;\n};\n\nexport type InteractionHandlerModule<T extends TriggerType> = {\n add: (\n source: HTMLElement,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n reducedMotion?: boolean,\n ) => void;\n remove: (element: HTMLElement) => void;\n};\n\nexport type TriggerHandlerMap<T extends TriggerType> = {\n [K in T]: InteractionHandlerModule<K>;\n};\n\nexport type HandlerObject = {\n source: HTMLElement;\n target: HTMLElement;\n cleanup: () => void;\n handler?: () => void;\n};\n\nexport type HandlerObjectMap = WeakMap<HTMLElement, Set<HandlerObject>>;\n\nexport type InteractCache = {\n effects: {\n [effectId: string]: Effect;\n };\n conditions: {\n [conditionId: string]: Condition;\n };\n interactions: {\n [path: string]: {\n triggers: Interaction[];\n effects: Record<\n string,\n (InteractionTrigger & { effect: Effect | EffectRef })[]\n >;\n interactionIds: Set<string>;\n selectors: Set<string>;\n };\n };\n};\n\nexport type CreateTransitionCSSParams = {\n key: string;\n effectId: string;\n transition?: TransitionEffect['transition'];\n properties?: TransitionProperty[];\n childSelector?: string;\n};\n"],"mappings":"","ignoreList":[]}
|
package/dist/cjs/utils.js
CHANGED
|
@@ -41,12 +41,12 @@ function createTransitionCSS({
|
|
|
41
41
|
const styleProperties = ((_properties2 = properties) == null ? void 0 : _properties2.map(property => `${property.name}: ${property.value};`)) || [];
|
|
42
42
|
const escapedKey = key.replace(/"/g, "'");
|
|
43
43
|
const result = [`:is(:state(${effectId}), :--${effectId}) ${childSelector},
|
|
44
|
-
[data-
|
|
44
|
+
[data-interact-effect~="${effectId}"] ${childSelector} {
|
|
45
45
|
${styleProperties.join(`
|
|
46
46
|
`)}
|
|
47
47
|
}`];
|
|
48
48
|
if (transitions.length) {
|
|
49
|
-
result.push(`@media (prefers-reduced-motion: no-preference) { [data-
|
|
49
|
+
result.push(`@media (prefers-reduced-motion: no-preference) { [data-interact-key="${escapedKey}"] ${childSelector} {
|
|
50
50
|
transition: ${transitions.join(', ')};
|
|
51
51
|
} }`);
|
|
52
52
|
}
|
package/dist/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_motion","require","generateId","replace","c","String","fromCharCode","crypto","getRandomValues","Uint8Array","createTransitionCSS","key","effectId","transition","properties","childSelector","_properties2","transitions","styleProperties","duration","easing","delay","hasCustomPropertiesTransition","some","styleProperty","name","startsWith","getEasing","map","_properties","filter","property","value","escapedKey","result","join","length","push","getMediaQuery","conditionNames","conditions","conditionContent","conditionName","_conditions$condition","type","predicate","condition","mql","window","matchMedia"],"sources":["../../src/utils.ts"],"sourcesContent":["import { getEasing } from '@wix/motion';\nimport type { Condition, CreateTransitionCSSParams } from './types';\n\nexport function generateId() {\n return 'wi-12343210'.replace(\n /\\d/g,\n (c) =>\n String.fromCharCode(\n (+c ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))) +\n 97,\n ), // 97 for \"a\"\n );\n}\n\nexport function createTransitionCSS({\n key,\n effectId,\n transition,\n properties,\n childSelector = '> :first-child',\n}: CreateTransitionCSSParams): string[] {\n let transitions: string[] = [];\n\n if (transition?.styleProperties) {\n const { duration, easing, delay } = transition;\n\n if (duration) {\n const hasCustomPropertiesTransition = transition.styleProperties.some(\n (styleProperty) => styleProperty.name.startsWith('--'),\n );\n\n if (hasCustomPropertiesTransition) {\n // If there are custom properties in the transition, we need to fall back to Viewer's legacy implementation\n transitions = [\n `all ${duration}ms ${getEasing(easing || 'ease')}${\n delay ? ` ${delay}ms` : ''\n }`,\n 'visibility 0s',\n ];\n } else {\n transitions = transition.styleProperties.map(\n (styleProperty) =>\n `${styleProperty.name} ${duration}ms ${getEasing(\n easing || 'ease',\n )}${delay ? ` ${delay}ms` : ''}`,\n );\n }\n }\n\n properties = transition.styleProperties;\n } else {\n transitions =\n properties\n ?.filter((property) => property.duration)\n .map(\n (property) =>\n `${property.name} ${property.duration}ms ${\n getEasing(property.easing) || 'ease'\n }${property.delay ? ` ${property.delay}ms` : ''}`,\n ) || [];\n }\n\n const styleProperties =\n properties?.map((property) => `${property.name}: ${property.value};`) || [];\n const escapedKey = key.replace(/\"/g, \"'\");\n\n const result = [\n `:is(:state(${effectId}), :--${effectId}) ${childSelector},\n [data-
|
|
1
|
+
{"version":3,"names":["_motion","require","generateId","replace","c","String","fromCharCode","crypto","getRandomValues","Uint8Array","createTransitionCSS","key","effectId","transition","properties","childSelector","_properties2","transitions","styleProperties","duration","easing","delay","hasCustomPropertiesTransition","some","styleProperty","name","startsWith","getEasing","map","_properties","filter","property","value","escapedKey","result","join","length","push","getMediaQuery","conditionNames","conditions","conditionContent","conditionName","_conditions$condition","type","predicate","condition","mql","window","matchMedia"],"sources":["../../src/utils.ts"],"sourcesContent":["import { getEasing } from '@wix/motion';\nimport type { Condition, CreateTransitionCSSParams } from './types';\n\nexport function generateId() {\n return 'wi-12343210'.replace(\n /\\d/g,\n (c) =>\n String.fromCharCode(\n (+c ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))) +\n 97,\n ), // 97 for \"a\"\n );\n}\n\nexport function createTransitionCSS({\n key,\n effectId,\n transition,\n properties,\n childSelector = '> :first-child',\n}: CreateTransitionCSSParams): string[] {\n let transitions: string[] = [];\n\n if (transition?.styleProperties) {\n const { duration, easing, delay } = transition;\n\n if (duration) {\n const hasCustomPropertiesTransition = transition.styleProperties.some(\n (styleProperty) => styleProperty.name.startsWith('--'),\n );\n\n if (hasCustomPropertiesTransition) {\n // If there are custom properties in the transition, we need to fall back to Viewer's legacy implementation\n transitions = [\n `all ${duration}ms ${getEasing(easing || 'ease')}${\n delay ? ` ${delay}ms` : ''\n }`,\n 'visibility 0s',\n ];\n } else {\n transitions = transition.styleProperties.map(\n (styleProperty) =>\n `${styleProperty.name} ${duration}ms ${getEasing(\n easing || 'ease',\n )}${delay ? ` ${delay}ms` : ''}`,\n );\n }\n }\n\n properties = transition.styleProperties;\n } else {\n transitions =\n properties\n ?.filter((property) => property.duration)\n .map(\n (property) =>\n `${property.name} ${property.duration}ms ${\n getEasing(property.easing) || 'ease'\n }${property.delay ? ` ${property.delay}ms` : ''}`,\n ) || [];\n }\n\n const styleProperties =\n properties?.map((property) => `${property.name}: ${property.value};`) || [];\n const escapedKey = key.replace(/\"/g, \"'\");\n\n const result = [\n `:is(:state(${effectId}), :--${effectId}) ${childSelector},\n [data-interact-effect~=\"${effectId}\"] ${childSelector} {\n ${styleProperties.join(`\n `)}\n }`,\n ];\n\n if (transitions.length) {\n result.push(`@media (prefers-reduced-motion: no-preference) { [data-interact-key=\"${escapedKey}\"] ${childSelector} {\n transition: ${transitions.join(', ')};\n } }`);\n }\n return result;\n}\n\nexport function getMediaQuery(\n conditionNames: string[] | undefined,\n conditions: Record<string, Condition>,\n) {\n const conditionContent = (conditionNames || [])\n .filter((conditionName) => {\n return (\n conditions[conditionName]?.type === 'media' &&\n conditions[conditionName].predicate\n );\n })\n .map((conditionName) => {\n return conditions[conditionName].predicate;\n })\n .join(') and (');\n\n const condition = conditionContent && `(${conditionContent})`;\n const mql = condition && window.matchMedia(condition);\n\n if (mql) {\n return mql;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import { add, addListItems } from './core/add';
|
|
3
3
|
import { remove, removeListItems } from './core/remove';
|
|
4
|
-
export const
|
|
5
|
-
export function
|
|
4
|
+
export const INTERACT_EFFECT_DATA_ATTR = 'interactEffect';
|
|
5
|
+
export function getInteractElement() {
|
|
6
6
|
let checkedForLegacyStateSyntax = false;
|
|
7
7
|
let isLegacyStateSyntax = false;
|
|
8
|
-
return class
|
|
8
|
+
return class InteractElement extends HTMLElement {
|
|
9
9
|
constructor() {
|
|
10
10
|
super();
|
|
11
11
|
_defineProperty(this, "_internals", void 0);
|
|
@@ -38,7 +38,7 @@ export function getWixInteractElement() {
|
|
|
38
38
|
this.disconnect();
|
|
39
39
|
}
|
|
40
40
|
disconnect() {
|
|
41
|
-
const key = this.dataset.
|
|
41
|
+
const key = this.dataset.interactKey;
|
|
42
42
|
if (key) {
|
|
43
43
|
remove(key);
|
|
44
44
|
}
|
|
@@ -53,9 +53,9 @@ export function getWixInteractElement() {
|
|
|
53
53
|
if (this.connected) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
|
-
key = key || this.dataset.
|
|
56
|
+
key = key || this.dataset.interactKey;
|
|
57
57
|
if (!key) {
|
|
58
|
-
console.warn('
|
|
58
|
+
console.warn('InteractElement: No key provided');
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
this.connected = add(this, key);
|
|
@@ -95,8 +95,8 @@ export function getWixInteractElement() {
|
|
|
95
95
|
this._internals.states.clear();
|
|
96
96
|
}
|
|
97
97
|
} else {
|
|
98
|
-
var _this$dataset$
|
|
99
|
-
const currentEffects = new Set(((_this$dataset$
|
|
98
|
+
var _this$dataset$INTERAC;
|
|
99
|
+
const currentEffects = new Set(((_this$dataset$INTERAC = this.dataset[INTERACT_EFFECT_DATA_ATTR]) == null ? void 0 : _this$dataset$INTERAC.split(' ')) || []);
|
|
100
100
|
if (method === 'toggle') {
|
|
101
101
|
currentEffects.has(effectId) ? currentEffects.delete(effectId) : currentEffects.add(effectId);
|
|
102
102
|
} else if (method === 'add') {
|
|
@@ -106,7 +106,7 @@ export function getWixInteractElement() {
|
|
|
106
106
|
} else if (method === 'clear') {
|
|
107
107
|
currentEffects.clear();
|
|
108
108
|
}
|
|
109
|
-
(item || this).dataset[
|
|
109
|
+
(item || this).dataset[INTERACT_EFFECT_DATA_ATTR] = Array.from(currentEffects).join(' ');
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
getActiveEffects() {
|
|
@@ -114,7 +114,7 @@ export function getWixInteractElement() {
|
|
|
114
114
|
const effects = Array.from(this._internals.states);
|
|
115
115
|
return isLegacyStateSyntax ? effects.map(effect => effect.replace(/^--/g, '')) : effects;
|
|
116
116
|
}
|
|
117
|
-
const raw = this.dataset[
|
|
117
|
+
const raw = this.dataset[INTERACT_EFFECT_DATA_ATTR] || '';
|
|
118
118
|
const trimmed = raw.trim();
|
|
119
119
|
return trimmed ? trimmed.split(/\s+/) : [];
|
|
120
120
|
}
|
|
@@ -133,7 +133,7 @@ export function getWixInteractElement() {
|
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
_childListChangeHandler(listContainer, entries) {
|
|
136
|
-
const key = this.dataset.
|
|
136
|
+
const key = this.dataset.interactKey;
|
|
137
137
|
const removedElements = [];
|
|
138
138
|
const addedElements = [];
|
|
139
139
|
entries.forEach(entry => {
|
|
@@ -153,4 +153,4 @@ export function getWixInteractElement() {
|
|
|
153
153
|
}
|
|
154
154
|
};
|
|
155
155
|
}
|
|
156
|
-
//# sourceMappingURL=
|
|
156
|
+
//# sourceMappingURL=InteractElement.js.map
|