@wix/interact 1.90.0 → 1.92.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.
Files changed (51) hide show
  1. package/dist/cjs/__tests__/interact.spec.js +130 -1
  2. package/dist/cjs/__tests__/interact.spec.js.map +1 -1
  3. package/dist/cjs/core/Interact.js +4 -0
  4. package/dist/cjs/core/Interact.js.map +1 -1
  5. package/dist/cjs/core/add.js +4 -1
  6. package/dist/cjs/core/add.js.map +1 -1
  7. package/dist/cjs/handlers/animationEnd.js +2 -2
  8. package/dist/cjs/handlers/animationEnd.js.map +1 -1
  9. package/dist/cjs/handlers/click.js +29 -7
  10. package/dist/cjs/handlers/click.js.map +1 -1
  11. package/dist/cjs/handlers/hover.js +33 -8
  12. package/dist/cjs/handlers/hover.js.map +1 -1
  13. package/dist/cjs/handlers/index.js +12 -1
  14. package/dist/cjs/handlers/index.js.map +1 -1
  15. package/dist/cjs/handlers/pointerMove.js +3 -3
  16. package/dist/cjs/handlers/pointerMove.js.map +1 -1
  17. package/dist/cjs/handlers/viewEnter.js +2 -2
  18. package/dist/cjs/handlers/viewEnter.js.map +1 -1
  19. package/dist/cjs/handlers/viewProgress.js +2 -2
  20. package/dist/cjs/handlers/viewProgress.js.map +1 -1
  21. package/dist/cjs/types.js.map +1 -1
  22. package/dist/esm/__tests__/interact.spec.js +130 -1
  23. package/dist/esm/__tests__/interact.spec.js.map +1 -1
  24. package/dist/esm/core/Interact.js +4 -0
  25. package/dist/esm/core/Interact.js.map +1 -1
  26. package/dist/esm/core/add.js +4 -1
  27. package/dist/esm/core/add.js.map +1 -1
  28. package/dist/esm/handlers/animationEnd.js +2 -5
  29. package/dist/esm/handlers/animationEnd.js.map +1 -1
  30. package/dist/esm/handlers/click.js +29 -13
  31. package/dist/esm/handlers/click.js.map +1 -1
  32. package/dist/esm/handlers/hover.js +33 -14
  33. package/dist/esm/handlers/hover.js.map +1 -1
  34. package/dist/esm/handlers/index.js +12 -1
  35. package/dist/esm/handlers/index.js.map +1 -1
  36. package/dist/esm/handlers/pointerMove.js +3 -6
  37. package/dist/esm/handlers/pointerMove.js.map +1 -1
  38. package/dist/esm/handlers/viewEnter.js +2 -5
  39. package/dist/esm/handlers/viewEnter.js.map +1 -1
  40. package/dist/esm/handlers/viewProgress.js +2 -5
  41. package/dist/esm/handlers/viewProgress.js.map +1 -1
  42. package/dist/esm/types.js.map +1 -1
  43. package/dist/types/core/Interact.d.ts +2 -0
  44. package/dist/types/handlers/animationEnd.d.ts +2 -2
  45. package/dist/types/handlers/click.d.ts +2 -2
  46. package/dist/types/handlers/hover.d.ts +2 -2
  47. package/dist/types/handlers/pointerMove.d.ts +2 -2
  48. package/dist/types/handlers/viewEnter.d.ts +2 -2
  49. package/dist/types/handlers/viewProgress.d.ts +2 -2
  50. package/dist/types/types.d.ts +8 -2
  51. package/package.json +2 -2
@@ -105,6 +105,9 @@ export class Interact {
105
105
  if (options.viewEnter) {
106
106
  TRIGGER_TO_HANDLER_MODULE_MAP.viewEnter.setOptions(options.viewEnter);
107
107
  }
108
+ if (options.allowA11yTriggers !== undefined) {
109
+ Interact.allowA11yTriggers = options.allowA11yTriggers;
110
+ }
108
111
  }
109
112
  static getInstance(key) {
110
113
  return Interact.instances.find(instance => instance.has(key));
@@ -118,6 +121,7 @@ export class Interact {
118
121
  }
119
122
  _Interact = Interact;
120
123
  _defineProperty(Interact, "forceReducedMotion", false);
124
+ _defineProperty(Interact, "allowA11yTriggers", true);
121
125
  _defineProperty(Interact, "instances", []);
122
126
  _defineProperty(Interact, "elementCache", new Map());
123
127
  let interactionIdCounter = 0;
@@ -1 +1 @@
1
- {"version":3,"names":["getInterpolatedKey","getInteractElement","generateId","TRIGGER_TO_HANDLER_MODULE_MAP","registerInteractElement","customElements","get","interactElement","define","_convertToKeyTemplate","key","replace","Interact","constructor","_defineProperty","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","elements","Set","init","config","window","parseConfig","didRegister","elementCache","forEach","element","connect","destroy","disconnect","clear","instances","splice","indexOf","setElement","add","deleteElement","clearInteractionStateForKey","delete","has","processedKey","_this$get","interactionIds","interactionId_","interactionId","create","instance","push","length","setup","options","scrollOptionsGetter","viewProgress","registerOptionsGetter","pointerOptionsGetter","pointerMove","viewEnter","setOptions","getInstance","find","getElement","undefined","set","_Interact","Map","interactionIdCounter","getSelector","d","_temp","asCombinator","addItemFilter","listContainer","itemFilter","listItemSelector","selector","_config$interactions","interaction_","source","interactionIdx","effects_","rest","console","error","triggers","selectors","Array","from","reverse","interaction","effect","target","effectId","referencedEffect"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n ViewEnterParams,\n ViewEnterHandlerModule,\n} from '../types';\nimport { getInterpolatedKey } from './utilities';\nimport { getInteractElement } from '../InteractElement';\nimport { generateId } from '../utils';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\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 setup(options: {\n scrollOptionsGetter?: () => Partial<scrollConfig>;\n pointerOptionsGetter?: () => Partial<PointerConfig>;\n viewEnter?: Partial<ViewEnterParams>;\n }): void {\n if (options.scrollOptionsGetter) {\n TRIGGER_TO_HANDLER_MODULE_MAP.viewProgress.registerOptionsGetter?.(\n options.scrollOptionsGetter,\n );\n }\n\n if (options.pointerOptionsGetter) {\n TRIGGER_TO_HANDLER_MODULE_MAP.pointerMove.registerOptionsGetter?.(\n options.pointerOptionsGetter,\n );\n }\n\n if (options.viewEnter) {\n (\n TRIGGER_TO_HANDLER_MODULE_MAP.viewEnter as ViewEnterHandlerModule\n ).setOptions(options.viewEnter);\n }\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":[]}
1
+ {"version":3,"names":["getInterpolatedKey","getInteractElement","generateId","TRIGGER_TO_HANDLER_MODULE_MAP","registerInteractElement","customElements","get","interactElement","define","_convertToKeyTemplate","key","replace","Interact","constructor","_defineProperty","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","elements","Set","init","config","window","parseConfig","didRegister","elementCache","forEach","element","connect","destroy","disconnect","clear","instances","splice","indexOf","setElement","add","deleteElement","clearInteractionStateForKey","delete","has","processedKey","_this$get","interactionIds","interactionId_","interactionId","create","instance","push","length","setup","options","scrollOptionsGetter","viewProgress","registerOptionsGetter","pointerOptionsGetter","pointerMove","viewEnter","setOptions","allowA11yTriggers","undefined","getInstance","find","getElement","set","_Interact","Map","interactionIdCounter","getSelector","d","_temp","asCombinator","addItemFilter","listContainer","itemFilter","listItemSelector","selector","_config$interactions","interaction_","source","interactionIdx","effects_","rest","console","error","triggers","selectors","Array","from","reverse","interaction","effect","target","effectId","referencedEffect"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n ViewEnterParams,\n ViewEnterHandlerModule,\n} from '../types';\nimport { getInterpolatedKey } from './utilities';\nimport { getInteractElement } from '../InteractElement';\nimport { generateId } from '../utils';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\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 allowA11yTriggers: boolean = true;\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 setup(options: {\n scrollOptionsGetter?: () => Partial<scrollConfig>;\n pointerOptionsGetter?: () => Partial<PointerConfig>;\n viewEnter?: Partial<ViewEnterParams>;\n allowA11yTriggers?: boolean;\n }): void {\n if (options.scrollOptionsGetter) {\n TRIGGER_TO_HANDLER_MODULE_MAP.viewProgress.registerOptionsGetter?.(\n options.scrollOptionsGetter,\n );\n }\n\n if (options.pointerOptionsGetter) {\n TRIGGER_TO_HANDLER_MODULE_MAP.pointerMove.registerOptionsGetter?.(\n options.pointerOptionsGetter,\n );\n }\n\n if (options.viewEnter) {\n (\n TRIGGER_TO_HANDLER_MODULE_MAP.viewEnter as ViewEnterHandlerModule\n ).setOptions(options.viewEnter);\n }\n\n if (options.allowA11yTriggers !== undefined) {\n Interact.allowA11yTriggers = options.allowA11yTriggers;\n }\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":[]}
@@ -178,7 +178,10 @@ function addInteraction(key, source, trigger, target, effect, options) {
178
178
  }
179
179
  root.renderStyle(createTransitionCSS(args));
180
180
  }
181
- (_TRIGGER_TO_HANDLER_M = TRIGGER_TO_HANDLER_MODULE_MAP[trigger]) == null || _TRIGGER_TO_HANDLER_M.add(source, target, effect, options, Interact.forceReducedMotion);
181
+ (_TRIGGER_TO_HANDLER_M = TRIGGER_TO_HANDLER_MODULE_MAP[trigger]) == null || _TRIGGER_TO_HANDLER_M.add(source, target, effect, options, {
182
+ reducedMotion: Interact.forceReducedMotion,
183
+ allowA11yTriggers: Interact.allowA11yTriggers
184
+ });
182
185
  }
183
186
 
184
187
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["createTransitionCSS","getMediaQuery","getInterpolatedKey","Interact","getSelector","TRIGGER_TO_HANDLER_MODULE_MAP","_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","addedInteractions","mql","conditions","matches","targetElement","getElement","watchChildList","addEffectsForTarget","targetKey","_instance$get","get","interactionIds","Object","keys","interactionId_","effectVariations","some","_ref","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","asCombinator","addItemFilter","closest","renderStyle","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":[]}
1
+ {"version":3,"names":["createTransitionCSS","getMediaQuery","getInterpolatedKey","Interact","getSelector","TRIGGER_TO_HANDLER_MODULE_MAP","_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","addedInteractions","mql","conditions","matches","targetElement","getElement","watchChildList","addEffectsForTarget","targetKey","_instance$get","get","interactionIds","Object","keys","interactionId_","effectVariations","some","_ref","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","asCombinator","addItemFilter","closest","renderStyle","add","reducedMotion","forceReducedMotion","allowA11yTriggers","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(source, target, effect, options, {\n reducedMotion: Interact.forceReducedMotion,\n allowA11yTriggers: Interact.allowA11yTriggers,\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":[]}
@@ -1,11 +1,8 @@
1
1
  import { getAnimation } from '@wix/motion';
2
2
  import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
3
  const handlerMap = new WeakMap();
4
- function addAnimationEndHandler(source, target, effect, __, reducedMotion) {
5
- if (reducedMotion === void 0) {
6
- reducedMotion = false;
7
- }
8
- const animation = getAnimation(target, effectToAnimationOptions(effect), undefined, reducedMotion);
4
+ function addAnimationEndHandler(source, target, effect, __, globalOptions) {
5
+ const animation = getAnimation(target, effectToAnimationOptions(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
9
6
  const handler = () => {
10
7
  animation.play();
11
8
  };
@@ -1 +1 @@
1
- {"version":3,"names":["getAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","addAnimationEndHandler","source","target","effect","__","reducedMotion","animation","undefined","handler","play","cleanup","cancel","removeEventListener","handlerObj","addEventListener","removeAnimationEndHandler","element","add","remove"],"sources":["../../../src/handlers/animationEnd.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n AnimationEndParams,\n TimeEffect,\n HandlerObjectMap,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction addAnimationEndHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n __: AnimationEndParams,\n reducedMotion: boolean = false,\n): void {\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n reducedMotion,\n ) as AnimationGroup;\n\n const handler = () => {\n animation.play();\n };\n const cleanup = () => {\n animation.cancel();\n source.removeEventListener('animationend', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('animationend', handler);\n}\n\nfunction removeAnimationEndHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addAnimationEndHandler,\n remove: removeAnimationEndHandler,\n};\n"],"mappings":"AACA,SAASA,YAAY,QAAQ,aAAa;AAM1C,SACEC,wBAAwB,EACxBC,eAAe,EACfC,2BAA2B,QACtB,aAAa;AAEpB,MAAMC,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,sBAAsBA,CAC7BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAkB,EAClBC,EAAsB,EACtBC,aAAsB,EAChB;EAAA,IADNA,aAAsB;IAAtBA,aAAsB,GAAG,KAAK;EAAA;EAE9B,MAAMC,SAAS,GAAGZ,YAAY,CAC5BQ,MAAM,EACNP,wBAAwB,CAACQ,MAAM,CAAC,EAChCI,SAAS,EACTF,aACF,CAAmB;EAEnB,MAAMG,OAAO,GAAGA,CAAA,KAAM;IACpBF,SAAS,CAACG,IAAI,CAAC,CAAC;EAClB,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBJ,SAAS,CAACK,MAAM,CAAC,CAAC;IAClBV,MAAM,CAACW,mBAAmB,CAAC,cAAc,EAAEJ,OAAO,CAAC;EACrD,CAAC;EAED,MAAMK,UAAU,GAAG;IAAEZ,MAAM;IAAEC,MAAM;IAAEQ;EAAQ,CAAC;EAC9Cd,eAAe,CAACE,UAAU,EAAEG,MAAM,EAAEY,UAAU,CAAC;EAC/CjB,eAAe,CAACE,UAAU,EAAEI,MAAM,EAAEW,UAAU,CAAC;EAE/CZ,MAAM,CAACa,gBAAgB,CAAC,cAAc,EAAEN,OAAO,CAAC;AAClD;AAEA,SAASO,yBAAyBA,CAACC,OAAoB,EAAQ;EAC7DnB,2BAA2B,CAACC,UAAU,EAAEkB,OAAO,CAAC;AAClD;AAEA,eAAe;EACbC,GAAG,EAAEjB,sBAAsB;EAC3BkB,MAAM,EAAEH;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","addAnimationEndHandler","source","target","effect","__","globalOptions","animation","undefined","reducedMotion","handler","play","cleanup","cancel","removeEventListener","handlerObj","addEventListener","removeAnimationEndHandler","element","add","remove"],"sources":["../../../src/handlers/animationEnd.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getAnimation } from '@wix/motion';\nimport type {\n AnimationEndParams,\n TimeEffect,\n HandlerObjectMap,\n InteractionGlobalOptions,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction addAnimationEndHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n __: AnimationEndParams,\n globalOptions?: InteractionGlobalOptions,\n): void {\n const animation = getAnimation(\n target,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n\n const handler = () => {\n animation.play();\n };\n const cleanup = () => {\n animation.cancel();\n source.removeEventListener('animationend', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('animationend', handler);\n}\n\nfunction removeAnimationEndHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addAnimationEndHandler,\n remove: removeAnimationEndHandler,\n};\n"],"mappings":"AACA,SAASA,YAAY,QAAQ,aAAa;AAO1C,SACEC,wBAAwB,EACxBC,eAAe,EACfC,2BAA2B,QACtB,aAAa;AAEpB,MAAMC,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,sBAAsBA,CAC7BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAkB,EAClBC,EAAsB,EACtBC,aAAwC,EAClC;EACN,MAAMC,SAAS,GAAGZ,YAAY,CAC5BQ,MAAM,EACNP,wBAAwB,CAACQ,MAAM,CAAC,EAChCI,SAAS,EACTF,aAAa,oBAAbA,aAAa,CAAEG,aACjB,CAAmB;EAEnB,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBH,SAAS,CAACI,IAAI,CAAC,CAAC;EAClB,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBL,SAAS,CAACM,MAAM,CAAC,CAAC;IAClBX,MAAM,CAACY,mBAAmB,CAAC,cAAc,EAAEJ,OAAO,CAAC;EACrD,CAAC;EAED,MAAMK,UAAU,GAAG;IAAEb,MAAM;IAAEC,MAAM;IAAES;EAAQ,CAAC;EAC9Cf,eAAe,CAACE,UAAU,EAAEG,MAAM,EAAEa,UAAU,CAAC;EAC/ClB,eAAe,CAACE,UAAU,EAAEI,MAAM,EAAEY,UAAU,CAAC;EAE/Cb,MAAM,CAACc,gBAAgB,CAAC,cAAc,EAAEN,OAAO,CAAC;AAClD;AAEA,SAASO,yBAAyBA,CAACC,OAAoB,EAAQ;EAC7DpB,2BAA2B,CAACC,UAAU,EAAEmB,OAAO,CAAC;AAClD;AAEA,eAAe;EACbC,GAAG,EAAElB,sBAAsB;EAC3BmB,MAAM,EAAEH;AACV,CAAC","ignoreList":[]}
@@ -1,14 +1,11 @@
1
1
  import { getAnimation } from '@wix/motion';
2
2
  import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
3
  const handlerMap = new WeakMap();
4
- function createTimeEffectHandler(element, effect, options, reducedMotion) {
5
- if (reducedMotion === void 0) {
6
- reducedMotion = false;
7
- }
8
- const animation = getAnimation(element, effectToAnimationOptions(effect), undefined, reducedMotion);
4
+ function createTimeEffectHandler(element, effect, options, globalOptions) {
5
+ const animation = getAnimation(element, effectToAnimationOptions(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
9
6
  let initialPlay = true;
10
7
  const type = options.type || 'alternate';
11
- return __ => {
8
+ return event => {
12
9
  if (type === 'alternate') {
13
10
  if (initialPlay) {
14
11
  initialPlay = false;
@@ -48,7 +45,7 @@ function createTransitionHandler(element, _ref, options) {
48
45
  listItemSelector
49
46
  } = _ref;
50
47
  const shouldSetStateOnElement = !!listContainer;
51
- return __ => {
48
+ return event => {
52
49
  const interactElement = element.closest('interact-element');
53
50
  if (!interactElement) {
54
51
  return;
@@ -60,23 +57,25 @@ function createTransitionHandler(element, _ref, options) {
60
57
  interactElement.toggleEffect(effectId, options.method || 'toggle', item);
61
58
  };
62
59
  }
63
- function addClickHandler(source, target, effect, options, reducedMotion) {
60
+ function addClickHandler(source, target, effect, options, globalOptions) {
64
61
  if (options === void 0) {
65
62
  options = {};
66
63
  }
67
- if (reducedMotion === void 0) {
68
- reducedMotion = false;
69
- }
70
64
  let handler;
71
65
  let once = false;
72
66
  if (effect.transition || effect.transitionProperties) {
73
67
  handler = createTransitionHandler(target, effect, options);
74
68
  } else {
75
- handler = createTimeEffectHandler(target, effect, options, reducedMotion);
69
+ handler = createTimeEffectHandler(target, effect, options, {
70
+ reducedMotion: globalOptions == null ? void 0 : globalOptions.reducedMotion
71
+ });
76
72
  once = options.type === 'once';
77
73
  }
78
74
  const cleanup = () => {
79
75
  source.removeEventListener('click', handler);
76
+ if (globalOptions != null && globalOptions.allowA11yTriggers) {
77
+ source.removeEventListener('keydown', handler);
78
+ }
80
79
  };
81
80
  const handlerObj = {
82
81
  source,
@@ -85,10 +84,27 @@ function addClickHandler(source, target, effect, options, reducedMotion) {
85
84
  };
86
85
  addHandlerToMap(handlerMap, source, handlerObj);
87
86
  addHandlerToMap(handlerMap, target, handlerObj);
88
- source.addEventListener('click', handler, {
87
+ source.addEventListener('click', e => {
88
+ if (e.pointerType) {
89
+ handler(e);
90
+ }
91
+ }, {
89
92
  passive: true,
90
93
  once
91
94
  });
95
+ if (globalOptions != null && globalOptions.allowA11yTriggers) {
96
+ source.tabIndex = 0;
97
+ source.addEventListener('keydown', event => {
98
+ if (event.code === 'Space') {
99
+ event.preventDefault();
100
+ handler(event);
101
+ } else if (event.code === 'Enter') {
102
+ handler(event);
103
+ }
104
+ }, {
105
+ once
106
+ });
107
+ }
92
108
  }
93
109
  function removeClickHandler(element) {
94
110
  removeElementFromHandlerMap(handlerMap, element);
@@ -1 +1 @@
1
- {"version":3,"names":["getAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","undefined","initialPlay","type","__","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","_ref","effectId","listContainer","listItemSelector","shouldSetStateOnElement","interactElement","closest","item","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addEventListener","passive","removeClickHandler","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":[]}
1
+ {"version":3,"names":["getAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","globalOptions","animation","undefined","reducedMotion","initialPlay","type","event","play","reverse","playState","pause","progress","isCSS","onFinish","dataset","motionEnter","createTransitionHandler","_ref","effectId","listContainer","listItemSelector","shouldSetStateOnElement","interactElement","closest","item","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","allowA11yTriggers","handlerObj","addEventListener","e","pointerType","passive","tabIndex","code","preventDefault","removeClickHandler","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 InteractionGlobalOptions,\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 globalOptions: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n let initialPlay = true;\n const type = options.type || 'alternate';\n\n return (event: MouseEvent | KeyboardEvent) => {\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 (event: MouseEvent | KeyboardEvent) => {\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 globalOptions?: InteractionGlobalOptions,\n) {\n let handler: (event: MouseEvent | KeyboardEvent) => 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: globalOptions?.reducedMotion },\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('click', handler);\n if (globalOptions?.allowA11yTriggers) {\n source.removeEventListener('keydown', handler);\n }\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener(\n 'click',\n (e) => {\n if ((e as PointerEvent).pointerType) {\n handler(e);\n }\n },\n { passive: true, once },\n );\n\n if (globalOptions?.allowA11yTriggers) {\n source.tabIndex = 0;\n\n source.addEventListener(\n 'keydown',\n (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n event.preventDefault();\n handler(event);\n } else if (event.code === 'Enter') {\n handler(event);\n }\n },\n { once },\n );\n }\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":[]}
@@ -1,15 +1,12 @@
1
1
  import { getAnimation } from '@wix/motion';
2
2
  import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
3
  const handlerMap = new WeakMap();
4
- function createTimeEffectHandler(element, effect, options, reducedMotion) {
5
- if (reducedMotion === void 0) {
6
- reducedMotion = false;
7
- }
8
- const animation = getAnimation(element, effectToAnimationOptions(effect), undefined, reducedMotion);
4
+ function createTimeEffectHandler(element, effect, options, globalOptions) {
5
+ const animation = getAnimation(element, effectToAnimationOptions(effect), undefined, globalOptions == null ? void 0 : globalOptions.reducedMotion);
9
6
  const type = options.type || 'alternate';
10
7
  let initialPlay = true;
11
8
  return event => {
12
- if (event.type === 'mouseenter') {
9
+ if (event.type === 'mouseenter' || event.type === 'focusin') {
13
10
  if (type === 'alternate') {
14
11
  if (initialPlay) {
15
12
  initialPlay = false;
@@ -33,7 +30,7 @@ function createTimeEffectHandler(element, effect, options, reducedMotion) {
33
30
  }
34
31
  animation.play();
35
32
  }
36
- } else if (event.type === 'mouseleave') {
33
+ } else if (event.type === 'mouseleave' || event.type === 'focusout') {
37
34
  if (type === 'alternate') {
38
35
  animation.reverse();
39
36
  } else if (type === 'repeat') {
@@ -65,21 +62,18 @@ function createTransitionHandler(element, _ref, options) {
65
62
  if (shouldSetStateOnElement) {
66
63
  item = element.closest(`${listContainer} > ${listItemSelector || ''}:has(:scope)`);
67
64
  }
68
- if (event.type === 'mouseenter') {
65
+ if (event.type === 'mouseenter' || event.type === 'focusin') {
69
66
  const method_ = isToggle ? 'add' : method;
70
67
  interactElement.toggleEffect(effectId, method_, item);
71
- } else if (event.type === 'mouseleave' && isToggle) {
68
+ } else if ((event.type === 'mouseleave' || event.type === 'focusout') && isToggle) {
72
69
  interactElement.toggleEffect(effectId, 'remove', item);
73
70
  }
74
71
  };
75
72
  }
76
- function addHoverHandler(source, target, effect, options, reducedMotion) {
73
+ function addHoverHandler(source, target, effect, options, globalOptions) {
77
74
  if (options === void 0) {
78
75
  options = {};
79
76
  }
80
- if (reducedMotion === void 0) {
81
- reducedMotion = false;
82
- }
83
77
  let handler;
84
78
  let isStateTrigger = false;
85
79
  let once = false;
@@ -87,12 +81,18 @@ function addHoverHandler(source, target, effect, options, reducedMotion) {
87
81
  handler = createTransitionHandler(target, effect, options);
88
82
  isStateTrigger = true;
89
83
  } else {
90
- handler = createTimeEffectHandler(target, effect, options, reducedMotion);
84
+ handler = createTimeEffectHandler(target, effect, options, {
85
+ reducedMotion: globalOptions == null ? void 0 : globalOptions.reducedMotion
86
+ });
91
87
  once = options.type === 'once';
92
88
  }
93
89
  const cleanup = () => {
94
90
  source.removeEventListener('mouseenter', handler);
95
91
  source.removeEventListener('mouseleave', handler);
92
+ if (globalOptions != null && globalOptions.allowA11yTriggers) {
93
+ source.removeEventListener('focusin', handler);
94
+ source.removeEventListener('focusout', handler);
95
+ }
96
96
  };
97
97
  const handlerObj = {
98
98
  source,
@@ -101,6 +101,16 @@ function addHoverHandler(source, target, effect, options, reducedMotion) {
101
101
  };
102
102
  addHandlerToMap(handlerMap, source, handlerObj);
103
103
  addHandlerToMap(handlerMap, target, handlerObj);
104
+ if (globalOptions != null && globalOptions.allowA11yTriggers) {
105
+ source.tabIndex = 0;
106
+ source.addEventListener('focusin', event => {
107
+ if (!source.contains(event.relatedTarget)) {
108
+ handler(event);
109
+ }
110
+ }, {
111
+ once
112
+ });
113
+ }
104
114
  source.addEventListener('mouseenter', handler, {
105
115
  passive: true,
106
116
  once
@@ -110,6 +120,15 @@ function addHoverHandler(source, target, effect, options, reducedMotion) {
110
120
  source.addEventListener('mouseleave', handler, {
111
121
  passive: true
112
122
  });
123
+ if (globalOptions != null && globalOptions.allowA11yTriggers) {
124
+ source.addEventListener('focusout', event => {
125
+ if (!source.contains(event.relatedTarget)) {
126
+ handler(event);
127
+ }
128
+ }, {
129
+ once
130
+ });
131
+ }
113
132
  }
114
133
  }
115
134
  function removeHoverHandler(element) {
@@ -1 +1 @@
1
- {"version":3,"names":["getAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","reducedMotion","animation","undefined","type","initialPlay","event","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","_ref","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","interactElement","closest","item","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addEventListener","passive","addLeave","removeHoverHandler","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":"AACA,SAASA,YAAY,QAAQ,aAAa;AAU1C,SACEC,wBAAwB,EACxBC,eAAe,EACfC,2BAA2B,QACtB,aAAa;AAEpB,MAAMC,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,uBAAuBA,CAC9BC,OAAoB,EACpBC,MAA+B,EAC/BC,OAA6B,EAC7BC,aAAsB,EACtB;EAAA,IADAA,aAAsB;IAAtBA,aAAsB,GAAG,KAAK;EAAA;EAE9B,MAAMC,SAAS,GAAGX,YAAY,CAC5BO,OAAO,EACPN,wBAAwB,CAACO,MAAM,CAAC,EAChCI,SAAS,EACTF,aACF,CAAmB;EACnB,MAAMG,IAAI,GAAGJ,OAAO,CAACI,IAAI,IAAI,WAAW;EACxC,IAAIC,WAAW,GAAG,IAAI;EAEtB,OAAQC,KAAiB,IAAK;IAC5B,IAAIA,KAAK,CAACF,IAAI,KAAK,YAAY,EAAE;MAC/B,IAAIA,IAAI,KAAK,WAAW,EAAE;QACxB,IAAIC,WAAW,EAAE;UACfA,WAAW,GAAG,KAAK;UACnBH,SAAS,CAACK,IAAI,CAAC,CAAC;QAClB,CAAC,MAAM;UACLL,SAAS,CAACM,OAAO,CAAC,CAAC;QACrB;MACF,CAAC,MAAM,IAAIJ,IAAI,KAAK,OAAO,EAAE;QAC3B,IAAIF,SAAS,CAACO,SAAS,KAAK,UAAU,EAAE;UACtC;UACAP,SAAS,CAACK,IAAI,CAAC,CAAC;QAClB;MACF,CAAC,MAAM;QACL;QACA;QACAL,SAAS,CAACQ,QAAQ,CAAC,CAAC,CAAC;QAErB,IAAIR,SAAS,CAACS,KAAK,EAAE;UACnBT,SAAS,CAACU,QAAQ,CAAC,MAAM;YACvBd,OAAO,CAACe,OAAO,CAACC,WAAW,GAAG,MAAM;UACtC,CAAC,CAAC;QACJ;QAEAZ,SAAS,CAACK,IAAI,CAAC,CAAC;MAClB;IACF,CAAC,MAAM,IAAID,KAAK,CAACF,IAAI,KAAK,YAAY,EAAE;MACtC,IAAIA,IAAI,KAAK,WAAW,EAAE;QACxBF,SAAS,CAACM,OAAO,CAAC,CAAC;MACrB,CAAC,MAAM,IAAIJ,IAAI,KAAK,QAAQ,EAAE;QAC5BF,SAAS,CAACa,MAAM,CAAC,CAAC;QAClB,OAAOjB,OAAO,CAACe,OAAO,CAACC,WAAW;MACpC,CAAC,MAAM,IAAIV,IAAI,KAAK,OAAO,EAAE;QAC3B,IAAIF,SAAS,CAACO,SAAS,KAAK,SAAS,EAAE;UACrCP,SAAS,CAACc,KAAK,CAAC,CAAC;QACnB;MACF;IACF;EACF,CAAC;AACH;AAEA,SAASC,uBAAuBA,CAC9BnB,OAAoB,EAAAoB,IAAA,EAMpBlB,OAAoB,EACpB;EAAA,IANA;IACEmB,QAAQ;IACRC,aAAa;IACbC;EACoD,CAAC,GAAAH,IAAA;EAGvD,MAAMI,MAAM,GAAGtB,OAAO,CAACsB,MAAM,IAAI,QAAQ;EACzC,MAAMC,QAAQ,GAAGD,MAAM,KAAK,QAAQ;EACpC,MAAME,uBAAuB,GAAG,CAAC,CAACJ,aAAa;EAE/C,OAAQd,KAAiB,IAAK;IAC5B,MAAMmB,eAAe,GAAG3B,OAAO,CAAC4B,OAAO,CACrC,kBACF,CAAqB;IACrB,IAAI,CAACD,eAAe,EAAE;MACpB;IACF;IAEA,IAAIE,IAAI;IACR,IAAIH,uBAAuB,EAAE;MAC3BG,IAAI,GAAG7B,OAAO,CAAC4B,OAAO,CACpB,GAAGN,aAAa,MAAMC,gBAAgB,IAAI,EAAE,cAC9C,CAAuB;IACzB;IAEA,IAAIf,KAAK,CAACF,IAAI,KAAK,YAAY,EAAE;MAC/B,MAAMwB,OAAO,GAAGL,QAAQ,GAAG,KAAK,GAAGD,MAAM;MACzCG,eAAe,CAACI,YAAY,CAACV,QAAQ,EAAES,OAAO,EAAED,IAAI,CAAC;IACvD,CAAC,MAAM,IAAIrB,KAAK,CAACF,IAAI,KAAK,YAAY,IAAImB,QAAQ,EAAE;MAClDE,eAAe,CAACI,YAAY,CAACV,QAAQ,EAAE,QAAQ,EAAEQ,IAAI,CAAC;IACxD;EACF,CAAC;AACH;AAEA,SAASG,eAAeA,CACtBC,MAAmB,EACnBC,MAAmB,EACnBjC,MAAoD,EACpDC,OAA2C,EAC3CC,aAAsB,EACtB;EAAA,IAFAD,OAA2C;IAA3CA,OAA2C,GAAG,CAAC,CAAC;EAAA;EAAA,IAChDC,aAAsB;IAAtBA,aAAsB,GAAG,KAAK;EAAA;EAE9B,IAAIgC,OAAoC;EACxC,IAAIC,cAAc,GAAG,KAAK;EAC1B,IAAIC,IAAI,GAAG,KAAK;EAEhB,IACGpC,MAAM,CAAsBqC,UAAU,IACtCrC,MAAM,CAAsBsC,oBAAoB,EACjD;IACAJ,OAAO,GAAGhB,uBAAuB,CAC/Be,MAAM,EACNjC,MAAM,EACNC,OACF,CAAC;IACDkC,cAAc,GAAG,IAAI;EACvB,CAAC,MAAM;IACLD,OAAO,GAAGpC,uBAAuB,CAC/BmC,MAAM,EACNjC,MAAM,EACNC,OAAO,EACPC,aACF,CAAC;IACDkC,IAAI,GAAInC,OAAO,CAA0BI,IAAI,KAAK,MAAM;EAC1D;EAEA,MAAMkC,OAAO,GAAGA,CAAA,KAAM;IACpBP,MAAM,CAACQ,mBAAmB,CAAC,YAAY,EAAEN,OAAO,CAAC;IACjDF,MAAM,CAACQ,mBAAmB,CAAC,YAAY,EAAEN,OAAO,CAAC;EACnD,CAAC;EAED,MAAMO,UAAU,GAAG;IAAET,MAAM;IAAEC,MAAM;IAAEM;EAAQ,CAAC;EAE9C7C,eAAe,CAACE,UAAU,EAAEoC,MAAM,EAAES,UAAU,CAAC;EAC/C/C,eAAe,CAACE,UAAU,EAAEqC,MAAM,EAAEQ,UAAU,CAAC;EAE/CT,MAAM,CAACU,gBAAgB,CAAC,YAAY,EAAER,OAAO,EAAE;IAAES,OAAO,EAAE,IAAI;IAAEP;EAAK,CAAC,CAAC;EAEvE,MAAMQ,QAAQ,GAAGT,cAAc,GAC3B,CAAElC,OAAO,CAAiBsB,MAAM,IAAI,QAAQ,MAAM,QAAQ,GACzDtB,OAAO,CAA0BI,IAAI,KAAK,MAAM;EACrD,IAAIuC,QAAQ,EAAE;IACZZ,MAAM,CAACU,gBAAgB,CAAC,YAAY,EAAER,OAAO,EAAE;MAAES,OAAO,EAAE;IAAK,CAAC,CAAC;EACnE;AACF;AAEA,SAASE,kBAAkBA,CAAC9C,OAAoB,EAAE;EAChDJ,2BAA2B,CAACC,UAAU,EAAEG,OAAO,CAAC;AAClD;AAEA,eAAe;EACb+C,GAAG,EAAEf,eAAe;EACpBgB,MAAM,EAAEF;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","globalOptions","animation","undefined","reducedMotion","type","initialPlay","event","play","reverse","playState","progress","isCSS","onFinish","dataset","motionEnter","cancel","pause","createTransitionHandler","_ref","effectId","listContainer","listItemSelector","method","isToggle","shouldSetStateOnElement","interactElement","closest","item","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","allowA11yTriggers","handlerObj","tabIndex","addEventListener","contains","relatedTarget","passive","addLeave","removeHoverHandler","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 InteractionGlobalOptions,\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 globalOptions: InteractionGlobalOptions,\n) {\n const animation = getAnimation(\n element,\n effectToAnimationOptions(effect),\n undefined,\n globalOptions?.reducedMotion,\n ) as AnimationGroup;\n const type = options.type || 'alternate';\n let initialPlay = true;\n\n return (event: MouseEvent | FocusEvent) => {\n if (event.type === 'mouseenter' || event.type === 'focusin') {\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' || event.type === 'focusout') {\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 | FocusEvent) => {\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' || event.type === 'focusin') {\n const method_ = isToggle ? 'add' : method;\n interactElement.toggleEffect(effectId, method_, item);\n } else if (\n (event.type === 'mouseleave' || event.type === 'focusout') &&\n isToggle\n ) {\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 globalOptions: InteractionGlobalOptions,\n) {\n let handler: (event: MouseEvent | FocusEvent) => 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: globalOptions?.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 if (globalOptions?.allowA11yTriggers) {\n source.removeEventListener('focusin', handler);\n source.removeEventListener('focusout', handler);\n }\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n if (globalOptions?.allowA11yTriggers) {\n source.tabIndex = 0;\n source.addEventListener(\n 'focusin',\n (event) => {\n if (!source.contains(event.relatedTarget as HTMLElement)) {\n handler(event);\n }\n },\n { once },\n );\n }\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\n if (addLeave) {\n source.addEventListener('mouseleave', handler, { passive: true });\n\n if (globalOptions?.allowA11yTriggers) {\n source.addEventListener(\n 'focusout',\n (event) => {\n if (!source.contains(event.relatedTarget as HTMLElement)) {\n handler(event);\n }\n },\n { once },\n );\n }\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":[]}
@@ -4,6 +4,15 @@ import hoverHandler from './hover';
4
4
  import clickHandler from './click';
5
5
  import pointerMoveHandler from './pointerMove';
6
6
  import animationEndHandler from './animationEnd';
7
+ function withA11y(handler) {
8
+ return {
9
+ add: (source, target, effect, options, globalOptions) => handler.add(source, target, effect, options, {
10
+ ...globalOptions,
11
+ allowA11yTriggers: true
12
+ }),
13
+ remove: handler.remove
14
+ };
15
+ }
7
16
  export default {
8
17
  viewEnter: viewEnterHandler,
9
18
  hover: hoverHandler,
@@ -11,6 +20,8 @@ export default {
11
20
  pageVisible: viewEnterHandler,
12
21
  animationEnd: animationEndHandler,
13
22
  viewProgress: viewProgressHandler,
14
- pointerMove: pointerMoveHandler
23
+ pointerMove: pointerMoveHandler,
24
+ activate: withA11y(clickHandler),
25
+ interest: withA11y(hoverHandler)
15
26
  };
16
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["viewEnterHandler","viewProgressHandler","hoverHandler","clickHandler","pointerMoveHandler","animationEndHandler","viewEnter","hover","click","pageVisible","animationEnd","viewProgress","pointerMove"],"sources":["../../../src/handlers/index.ts"],"sourcesContent":["import type { TriggerHandlerMap, TriggerType } from '../types';\nimport viewEnterHandler from './viewEnter';\nimport viewProgressHandler from './viewProgress';\nimport hoverHandler from './hover';\nimport clickHandler from './click';\nimport pointerMoveHandler from './pointerMove';\nimport animationEndHandler from './animationEnd';\n\nexport default {\n viewEnter: viewEnterHandler,\n hover: hoverHandler,\n click: clickHandler,\n pageVisible: viewEnterHandler,\n animationEnd: animationEndHandler,\n viewProgress: viewProgressHandler,\n pointerMove: pointerMoveHandler,\n} as TriggerHandlerMap<TriggerType>;\n"],"mappings":"AACA,OAAOA,gBAAgB,MAAM,aAAa;AAC1C,OAAOC,mBAAmB,MAAM,gBAAgB;AAChD,OAAOC,YAAY,MAAM,SAAS;AAClC,OAAOC,YAAY,MAAM,SAAS;AAClC,OAAOC,kBAAkB,MAAM,eAAe;AAC9C,OAAOC,mBAAmB,MAAM,gBAAgB;AAEhD,eAAe;EACbC,SAAS,EAAEN,gBAAgB;EAC3BO,KAAK,EAAEL,YAAY;EACnBM,KAAK,EAAEL,YAAY;EACnBM,WAAW,EAAET,gBAAgB;EAC7BU,YAAY,EAAEL,mBAAmB;EACjCM,YAAY,EAAEV,mBAAmB;EACjCW,WAAW,EAAER;AACf,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["viewEnterHandler","viewProgressHandler","hoverHandler","clickHandler","pointerMoveHandler","animationEndHandler","withA11y","handler","add","source","target","effect","options","globalOptions","allowA11yTriggers","remove","viewEnter","hover","click","pageVisible","animationEnd","viewProgress","pointerMove","activate","interest"],"sources":["../../../src/handlers/index.ts"],"sourcesContent":["import type {\n TriggerHandlerMap,\n TriggerType,\n Effect,\n InteractionGlobalOptions,\n StateParams,\n PointerTriggerParams,\n} from '../types';\nimport viewEnterHandler from './viewEnter';\nimport viewProgressHandler from './viewProgress';\nimport hoverHandler from './hover';\nimport clickHandler from './click';\nimport pointerMoveHandler from './pointerMove';\nimport animationEndHandler from './animationEnd';\n\nfunction withA11y<T extends typeof clickHandler | typeof hoverHandler>(\n handler: T,\n): T {\n return {\n add: (\n source: HTMLElement,\n target: HTMLElement,\n effect: Effect,\n options: StateParams | PointerTriggerParams,\n globalOptions?: InteractionGlobalOptions,\n ) =>\n handler.add(source, target, effect, options, {\n ...globalOptions,\n allowA11yTriggers: true,\n }),\n remove: handler.remove,\n } as T;\n}\n\nexport default {\n viewEnter: viewEnterHandler,\n hover: hoverHandler,\n click: clickHandler,\n pageVisible: viewEnterHandler,\n animationEnd: animationEndHandler,\n viewProgress: viewProgressHandler,\n pointerMove: pointerMoveHandler,\n activate: withA11y(clickHandler),\n interest: withA11y(hoverHandler),\n} as TriggerHandlerMap<TriggerType>;\n"],"mappings":"AAQA,OAAOA,gBAAgB,MAAM,aAAa;AAC1C,OAAOC,mBAAmB,MAAM,gBAAgB;AAChD,OAAOC,YAAY,MAAM,SAAS;AAClC,OAAOC,YAAY,MAAM,SAAS;AAClC,OAAOC,kBAAkB,MAAM,eAAe;AAC9C,OAAOC,mBAAmB,MAAM,gBAAgB;AAEhD,SAASC,QAAQA,CACfC,OAAU,EACP;EACH,OAAO;IACLC,GAAG,EAAEA,CACHC,MAAmB,EACnBC,MAAmB,EACnBC,MAAc,EACdC,OAA2C,EAC3CC,aAAwC,KAExCN,OAAO,CAACC,GAAG,CAACC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAE;MAC3C,GAAGC,aAAa;MAChBC,iBAAiB,EAAE;IACrB,CAAC,CAAC;IACJC,MAAM,EAAER,OAAO,CAACQ;EAClB,CAAC;AACH;AAEA,eAAe;EACbC,SAAS,EAAEhB,gBAAgB;EAC3BiB,KAAK,EAAEf,YAAY;EACnBgB,KAAK,EAAEf,YAAY;EACnBgB,WAAW,EAAEnB,gBAAgB;EAC7BoB,YAAY,EAAEf,mBAAmB;EACjCgB,YAAY,EAAEpB,mBAAmB;EACjCqB,WAAW,EAAElB,kBAAkB;EAC/BmB,QAAQ,EAAEjB,QAAQ,CAACH,YAAY,CAAC;EAChCqB,QAAQ,EAAElB,QAAQ,CAACJ,YAAY;AACjC,CAAC","ignoreList":[]}
@@ -6,14 +6,11 @@ let pointerOptionsGetter = () => ({});
6
6
  function registerOptionsGetter(getter) {
7
7
  pointerOptionsGetter = getter;
8
8
  }
9
- function addPointerMoveHandler(source, target, effect, options, reducedMotion) {
9
+ function addPointerMoveHandler(source, target, effect, options, globalOptions) {
10
10
  if (options === void 0) {
11
11
  options = {};
12
12
  }
13
- if (reducedMotion === void 0) {
14
- reducedMotion = false;
15
- }
16
- if (reducedMotion) {
13
+ if (globalOptions != null && globalOptions.reducedMotion) {
17
14
  return;
18
15
  }
19
16
  const triggerParams = {
@@ -23,7 +20,7 @@ function addPointerMoveHandler(source, target, effect, options, reducedMotion) {
23
20
  const scene = getScrubScene(target, effectToAnimationOptions(effect), triggerParams);
24
21
  if (scene) {
25
22
  const pointer = new Pointer({
26
- root: options.hitArea === 'root' ? document.documentElement : source,
23
+ root: options.hitArea === 'self' ? source : undefined,
27
24
  scenes: Array.isArray(scene) ? scene : [scene],
28
25
  ...pointerOptionsGetter()
29
26
  });