@wix/interact 1.74.0 → 1.76.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 (52) hide show
  1. package/README.md +33 -21
  2. package/dist/cjs/WixInteractElement.js +61 -17
  3. package/dist/cjs/WixInteractElement.js.map +1 -1
  4. package/dist/cjs/__tests__/interact.spec.js +761 -109
  5. package/dist/cjs/__tests__/interact.spec.js.map +1 -1
  6. package/dist/cjs/core/Interact.js +190 -0
  7. package/dist/cjs/core/Interact.js.map +1 -0
  8. package/dist/cjs/core/add.js +231 -0
  9. package/dist/cjs/core/add.js.map +1 -0
  10. package/dist/cjs/core/remove.js +37 -0
  11. package/dist/cjs/core/remove.js.map +1 -0
  12. package/dist/cjs/handlers/click.js +1 -1
  13. package/dist/cjs/handlers/click.js.map +1 -1
  14. package/dist/cjs/handlers/hover.js +1 -1
  15. package/dist/cjs/handlers/hover.js.map +1 -1
  16. package/dist/cjs/index.js +6 -4
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/types.js.map +1 -1
  19. package/dist/cjs/utils.js +12 -10
  20. package/dist/cjs/utils.js.map +1 -1
  21. package/dist/esm/WixInteractElement.js +61 -17
  22. package/dist/esm/WixInteractElement.js.map +1 -1
  23. package/dist/esm/__tests__/interact.spec.js +743 -91
  24. package/dist/esm/__tests__/interact.spec.js.map +1 -1
  25. package/dist/esm/core/Interact.js +186 -0
  26. package/dist/esm/core/Interact.js.map +1 -0
  27. package/dist/esm/core/add.js +226 -0
  28. package/dist/esm/core/add.js.map +1 -0
  29. package/dist/esm/core/remove.js +32 -0
  30. package/dist/esm/core/remove.js.map +1 -0
  31. package/dist/esm/handlers/click.js +1 -1
  32. package/dist/esm/handlers/click.js.map +1 -1
  33. package/dist/esm/handlers/hover.js +1 -1
  34. package/dist/esm/handlers/hover.js.map +1 -1
  35. package/dist/esm/index.js +3 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/types.js.map +1 -1
  38. package/dist/esm/utils.js +12 -10
  39. package/dist/esm/utils.js.map +1 -1
  40. package/dist/types/WixInteractElement.d.ts +5 -2
  41. package/dist/types/core/Interact.d.ts +24 -0
  42. package/dist/types/core/add.d.ts +6 -0
  43. package/dist/types/core/remove.d.ts +5 -0
  44. package/dist/types/index.d.ts +3 -1
  45. package/dist/types/types.d.ts +22 -9
  46. package/dist/types/utils.d.ts +1 -1
  47. package/package.json +7 -6
  48. package/dist/cjs/interact.js +0 -308
  49. package/dist/cjs/interact.js.map +0 -1
  50. package/dist/esm/interact.js +0 -301
  51. package/dist/esm/interact.js.map +0 -1
  52. package/dist/types/interact.d.ts +0 -26
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.Interact = void 0;
6
+ exports.getSelector = getSelector;
7
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+ var _WixInteractElement = require("../WixInteractElement");
9
+ var _utils = require("../utils");
10
+ var _Interact;
11
+ function registerWixInteractElement() {
12
+ if (!customElements.get('wix-interact-element')) {
13
+ const wixInteractElement = (0, _WixInteractElement.getWixInteractElement)();
14
+ customElements.define('wix-interact-element', wixInteractElement);
15
+ return true;
16
+ }
17
+ return false;
18
+ }
19
+ class Interact {
20
+ constructor() {
21
+ (0, _defineProperty2.default)(this, "dataCache", void 0);
22
+ (0, _defineProperty2.default)(this, "addedInteractions", void 0);
23
+ (0, _defineProperty2.default)(this, "listInteractionsCache", void 0);
24
+ this.dataCache = {
25
+ effects: {},
26
+ conditions: {},
27
+ interactions: {}
28
+ };
29
+ this.addedInteractions = {};
30
+ this.listInteractionsCache = {};
31
+ }
32
+ init(config) {
33
+ if (typeof window === 'undefined' || !window.customElements) {
34
+ return;
35
+ }
36
+ this.dataCache = parseConfig(config);
37
+ const didRegister = registerWixInteractElement();
38
+ if (!didRegister) {
39
+ Interact.elementCache.forEach((element, key) => element.connect(key));
40
+ }
41
+ }
42
+ has(key) {
43
+ return !!this.dataCache.interactions[key];
44
+ }
45
+ clearInteractionStateForKey(key) {
46
+ var _this$dataCache$inter;
47
+ const interactionIds = ((_this$dataCache$inter = this.dataCache.interactions[key]) == null ? void 0 : _this$dataCache$inter.interactionIds) || [];
48
+ interactionIds.forEach(interactionId => {
49
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
50
+ delete this.addedInteractions[interactionId];
51
+ });
52
+ }
53
+ static create(config) {
54
+ const instance = new Interact();
55
+ Interact.instances.push(instance);
56
+ instance.init(config);
57
+ return instance;
58
+ }
59
+ static getInstance(key) {
60
+ return Interact.instances.find(instance => instance.has(key));
61
+ }
62
+ static getElement(key) {
63
+ return Interact.elementCache.get(key);
64
+ }
65
+ static setElement(key, element) {
66
+ Interact.elementCache.set(key, element);
67
+ }
68
+ }
69
+ exports.Interact = Interact;
70
+ _Interact = Interact;
71
+ (0, _defineProperty2.default)(Interact, "forceReducedMotion", false);
72
+ (0, _defineProperty2.default)(Interact, "instances", []);
73
+ (0, _defineProperty2.default)(Interact, "elementCache", new Map());
74
+ let interactionIdCounter = 0;
75
+ function getSelector(d, asCombinator = false) {
76
+ if (d.listContainer) {
77
+ if (d.selector) {
78
+ return `${d.listContainer} ${d.selector}`;
79
+ }
80
+ return `${d.listContainer} > *`;
81
+ } else if (d.selector) {
82
+ return d.selector;
83
+ }
84
+
85
+ // TODO: consider moving :scope to be configurable since it may lead to unexpected results in some cases
86
+ return asCombinator ? '> :first-child' : ':scope > :first-child';
87
+ }
88
+
89
+ /**
90
+ * Parses the config object and caches interactions, effects, and conditions
91
+ */
92
+ function parseConfig(config) {
93
+ var _config$interactions;
94
+ const conditions = config.conditions || {};
95
+ const interactions = {};
96
+ (_config$interactions = config.interactions) == null || _config$interactions.forEach(interaction => {
97
+ var _interaction$effects, _interaction$effects2;
98
+ const source = interaction.key;
99
+ const interactionIdx = ++interactionIdCounter;
100
+ if (!source) {
101
+ console.error(`Interaction ${interactionIdx} is missing a key for source element.`);
102
+ return;
103
+ }
104
+ if (!interactions[source]) {
105
+ interactions[source] = {
106
+ triggers: [],
107
+ effects: {},
108
+ interactionIds: new Set(),
109
+ selectors: new Set()
110
+ };
111
+ }
112
+
113
+ /*
114
+ * Cache interaction trigger by source element
115
+ */
116
+ (_interaction$effects = interaction.effects) == null || _interaction$effects.reverse(); // reverse to ensure the first effect is the one that will be applied first
117
+
118
+ interactions[source].triggers.push(interaction);
119
+ interactions[source].selectors.add(getSelector(interaction));
120
+ const listContainer = interaction.listContainer;
121
+ (_interaction$effects2 = interaction.effects) == null || _interaction$effects2.forEach(effect => {
122
+ /*
123
+ * Target cascade order is the first of:
124
+ * -> Config.interactions.effects.effect.key
125
+ * -> Config.effects.effect.key
126
+ * -> Config.interactions.interaction.key
127
+ */
128
+ let target = effect.key;
129
+ if (!target && effect.effectId) {
130
+ const referencedEffect = config.effects[effect.effectId];
131
+ if (referencedEffect) {
132
+ target = referencedEffect.key;
133
+ }
134
+ }
135
+ if (!effect.effectId) {
136
+ effect.effectId = (0, _utils.generateId)();
137
+ }
138
+
139
+ // if no target is specified, use the source element as the target
140
+ target = target || source;
141
+ effect.key = target;
142
+ const effectId = effect.effectId;
143
+ if (listContainer && effect.listContainer) {
144
+ // we do not support having 2 separate lists for same interaction
145
+ if (target !== source || effect.listContainer !== listContainer) {
146
+ return;
147
+ }
148
+ }
149
+ const interactionId = `${target}::${effectId}::${interactionIdx}`;
150
+ effect.interactionId = interactionId;
151
+ interactions[source].interactionIds.add(interactionId);
152
+ if (target === source) {
153
+ // if target is the source element, no need to add an interaction to `effects`
154
+ return;
155
+ }
156
+
157
+ /*
158
+ * Cache interaction effect by target element
159
+ */
160
+ if (!interactions[target]) {
161
+ interactions[target] = {
162
+ triggers: [],
163
+ effects: {
164
+ [interactionId]: []
165
+ },
166
+ interactionIds: new Set(),
167
+ selectors: new Set()
168
+ };
169
+ } else if (!interactions[target].effects[interactionId]) {
170
+ interactions[target].effects[interactionId] = [];
171
+ interactions[target].interactionIds.add(interactionId);
172
+ }
173
+ const {
174
+ effects,
175
+ ...rest
176
+ } = interaction;
177
+ interactions[target].effects[interactionId].push({
178
+ ...rest,
179
+ effect
180
+ });
181
+ interactions[target].selectors.add(getSelector(effect));
182
+ });
183
+ });
184
+ return {
185
+ effects: config.effects || {},
186
+ conditions,
187
+ interactions
188
+ };
189
+ }
190
+ //# sourceMappingURL=Interact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_WixInteractElement","require","_utils","_Interact","registerWixInteractElement","customElements","get","wixInteractElement","getWixInteractElement","define","Interact","constructor","_defineProperty2","default","dataCache","effects","conditions","interactions","addedInteractions","listInteractionsCache","init","config","window","parseConfig","didRegister","elementCache","forEach","element","key","connect","has","clearInteractionStateForKey","_this$dataCache$inter","interactionIds","interactionId","create","instance","instances","push","getInstance","find","getElement","setElement","set","exports","Map","interactionIdCounter","getSelector","d","asCombinator","listContainer","selector","_config$interactions","interaction","_interaction$effects","_interaction$effects2","source","interactionIdx","console","error","triggers","Set","selectors","reverse","add","effect","target","effectId","referencedEffect","generateId","rest"],"sources":["../../../src/core/Interact.ts"],"sourcesContent":["import {\n InteractCache,\n IWixInteractElement,\n InteractConfig,\n EffectRef,\n Effect,\n Interaction,\n} from '../types';\nimport { getWixInteractElement } from '../WixInteractElement';\nimport { generateId } from '../utils';\n\nfunction registerWixInteractElement() {\n if (!customElements.get('wix-interact-element')) {\n const wixInteractElement = getWixInteractElement();\n customElements.define('wix-interact-element', wixInteractElement);\n\n return true;\n }\n\n return false;\n}\n\nexport class Interact {\n dataCache: InteractCache;\n addedInteractions: { [interactionId: string]: boolean };\n listInteractionsCache: {\n [listContainer: string]: { [interactionId: string]: boolean };\n };\n static forceReducedMotion: boolean = false;\n static instances: Interact[] = [];\n static elementCache = new Map<string, IWixInteractElement>();\n\n constructor() {\n this.dataCache = { effects: {}, conditions: {}, interactions: {} };\n this.addedInteractions = {};\n this.listInteractionsCache = {};\n }\n\n init(config: InteractConfig): void {\n if (typeof window === 'undefined' || !window.customElements) {\n return;\n }\n\n this.dataCache = parseConfig(config);\n\n const didRegister = registerWixInteractElement();\n\n if (!didRegister) {\n Interact.elementCache.forEach((element: IWixInteractElement, key) =>\n element.connect(key),\n );\n }\n }\n\n has(key: string): boolean {\n return !!this.dataCache.interactions[key];\n }\n\n clearInteractionStateForKey(key: string): void {\n const interactionIds =\n this.dataCache.interactions[key]?.interactionIds || [];\n\n interactionIds.forEach((interactionId) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.addedInteractions[interactionId];\n });\n }\n\n static create(config: InteractConfig): Interact {\n const instance = new Interact();\n Interact.instances.push(instance);\n\n instance.init(config);\n\n return instance;\n }\n\n static getInstance(key: string): Interact | undefined {\n return Interact.instances.find((instance) => instance.has(key));\n }\n\n static getElement(key: string): IWixInteractElement | undefined {\n return Interact.elementCache.get(key);\n }\n\n static setElement(key: string, element: IWixInteractElement): void {\n Interact.elementCache.set(key, element);\n }\n}\n\nlet interactionIdCounter = 0;\n\nexport function getSelector(\n d: Interaction | Effect,\n asCombinator: boolean = false,\n): string {\n if (d.listContainer) {\n if (d.selector) {\n return `${d.listContainer} ${d.selector}`;\n }\n\n return `${d.listContainer} > *`;\n } else if (d.selector) {\n return d.selector;\n }\n\n // TODO: consider moving :scope to be configurable since it may lead to unexpected results in some cases\n return asCombinator ? '> :first-child' : ':scope > :first-child';\n}\n\n/**\n * Parses the config object and caches interactions, effects, and conditions\n */\nfunction parseConfig(config: InteractConfig): InteractCache {\n const conditions = config.conditions || {};\n const interactions: InteractCache['interactions'] = {};\n\n config.interactions?.forEach((interaction) => {\n const source = interaction.key;\n const interactionIdx = ++interactionIdCounter;\n\n if (!source) {\n console.error(\n `Interaction ${interactionIdx} is missing a key for source element.`,\n );\n return;\n }\n\n if (!interactions[source]) {\n interactions[source] = {\n triggers: [],\n effects: {},\n interactionIds: new Set(),\n selectors: new Set(),\n };\n }\n\n /*\n * Cache interaction trigger by source element\n */\n interaction.effects?.reverse(); // reverse to ensure the first effect is the one that will be applied first\n\n interactions[source].triggers.push(interaction);\n interactions[source].selectors.add(getSelector(interaction));\n\n const listContainer = interaction.listContainer;\n\n interaction.effects?.forEach((effect) => {\n /*\n * Target cascade order is the first of:\n * -> Config.interactions.effects.effect.key\n * -> Config.effects.effect.key\n * -> Config.interactions.interaction.key\n */\n let target = effect.key;\n\n if (!target && (effect as EffectRef).effectId) {\n const referencedEffect = config.effects[(effect as EffectRef).effectId];\n\n if (referencedEffect) {\n target = referencedEffect.key;\n }\n }\n\n if (!(effect as EffectRef).effectId) {\n (effect as EffectRef).effectId = generateId();\n }\n\n // if no target is specified, use the source element as the target\n target = target || source;\n effect.key = target;\n const effectId = (effect as EffectRef).effectId;\n\n if (listContainer && effect.listContainer) {\n // we do not support having 2 separate lists for same interaction\n if (target !== source || effect.listContainer !== listContainer) {\n return;\n }\n }\n\n const interactionId = `${target}::${effectId}::${interactionIdx}`;\n effect.interactionId = interactionId;\n interactions[source].interactionIds.add(interactionId);\n\n if (target === source) {\n // if target is the source element, no need to add an interaction to `effects`\n return;\n }\n\n /*\n * Cache interaction effect by target element\n */\n if (!interactions[target]) {\n interactions[target] = {\n triggers: [],\n effects: {\n [interactionId]: [],\n },\n interactionIds: new Set(),\n selectors: new Set(),\n };\n } else if (!interactions[target].effects[interactionId]) {\n interactions[target].effects[interactionId] = [];\n interactions[target].interactionIds.add(interactionId);\n }\n\n const { effects, ...rest } = interaction;\n\n interactions[target].effects[interactionId].push({ ...rest, effect });\n interactions[target].selectors.add(getSelector(effect));\n });\n });\n\n return {\n effects: config.effects || {},\n conditions,\n interactions,\n };\n}\n"],"mappings":";;;;;;;AAQA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsC,IAAAE,SAAA;AAEtC,SAASC,0BAA0BA,CAAA,EAAG;EACpC,IAAI,CAACC,cAAc,CAACC,GAAG,CAAC,sBAAsB,CAAC,EAAE;IAC/C,MAAMC,kBAAkB,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IAClDH,cAAc,CAACI,MAAM,CAAC,sBAAsB,EAAEF,kBAAkB,CAAC;IAEjE,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd;AAEO,MAAMG,QAAQ,CAAC;EAUpBC,WAAWA,CAAA,EAAG;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IACZ,IAAI,CAACC,SAAS,GAAG;MAAEC,OAAO,EAAE,CAAC,CAAC;MAAEC,UAAU,EAAE,CAAC,CAAC;MAAEC,YAAY,EAAE,CAAC;IAAE,CAAC;IAClE,IAAI,CAACC,iBAAiB,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACC,qBAAqB,GAAG,CAAC,CAAC;EACjC;EAEAC,IAAIA,CAACC,MAAsB,EAAQ;IACjC,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAI,CAACA,MAAM,CAACjB,cAAc,EAAE;MAC3D;IACF;IAEA,IAAI,CAACS,SAAS,GAAGS,WAAW,CAACF,MAAM,CAAC;IAEpC,MAAMG,WAAW,GAAGpB,0BAA0B,CAAC,CAAC;IAEhD,IAAI,CAACoB,WAAW,EAAE;MAChBd,QAAQ,CAACe,YAAY,CAACC,OAAO,CAAC,CAACC,OAA4B,EAAEC,GAAG,KAC9DD,OAAO,CAACE,OAAO,CAACD,GAAG,CACrB,CAAC;IACH;EACF;EAEAE,GAAGA,CAACF,GAAW,EAAW;IACxB,OAAO,CAAC,CAAC,IAAI,CAACd,SAAS,CAACG,YAAY,CAACW,GAAG,CAAC;EAC3C;EAEAG,2BAA2BA,CAACH,GAAW,EAAQ;IAAA,IAAAI,qBAAA;IAC7C,MAAMC,cAAc,GAClB,EAAAD,qBAAA,OAAI,CAAClB,SAAS,CAACG,YAAY,CAACW,GAAG,CAAC,qBAAhCI,qBAAA,CAAkCC,cAAc,KAAI,EAAE;IAExDA,cAAc,CAACP,OAAO,CAAEQ,aAAa,IAAK;MACxC;MACA,OAAO,IAAI,CAAChB,iBAAiB,CAACgB,aAAa,CAAC;IAC9C,CAAC,CAAC;EACJ;EAEA,OAAOC,MAAMA,CAACd,MAAsB,EAAY;IAC9C,MAAMe,QAAQ,GAAG,IAAI1B,QAAQ,CAAC,CAAC;IAC/BA,QAAQ,CAAC2B,SAAS,CAACC,IAAI,CAACF,QAAQ,CAAC;IAEjCA,QAAQ,CAAChB,IAAI,CAACC,MAAM,CAAC;IAErB,OAAOe,QAAQ;EACjB;EAEA,OAAOG,WAAWA,CAACX,GAAW,EAAwB;IACpD,OAAOlB,QAAQ,CAAC2B,SAAS,CAACG,IAAI,CAAEJ,QAAQ,IAAKA,QAAQ,CAACN,GAAG,CAACF,GAAG,CAAC,CAAC;EACjE;EAEA,OAAOa,UAAUA,CAACb,GAAW,EAAmC;IAC9D,OAAOlB,QAAQ,CAACe,YAAY,CAACnB,GAAG,CAACsB,GAAG,CAAC;EACvC;EAEA,OAAOc,UAAUA,CAACd,GAAW,EAAED,OAA4B,EAAQ;IACjEjB,QAAQ,CAACe,YAAY,CAACkB,GAAG,CAACf,GAAG,EAAED,OAAO,CAAC;EACzC;AACF;AAACiB,OAAA,CAAAlC,QAAA,GAAAA,QAAA;AAAAP,SAAA,GAlEYO,QAAQ;AAAA,IAAAE,gBAAA,CAAAC,OAAA,EAARH,QAAQ,wBAMkB,KAAK;AAAA,IAAAE,gBAAA,CAAAC,OAAA,EAN/BH,QAAQ,eAOY,EAAE;AAAA,IAAAE,gBAAA,CAAAC,OAAA,EAPtBH,QAAQ,kBAQG,IAAImC,GAAG,CAA8B,CAAC;AA4D9D,IAAIC,oBAAoB,GAAG,CAAC;AAErB,SAASC,WAAWA,CACzBC,CAAuB,EACvBC,YAAqB,GAAG,KAAK,EACrB;EACR,IAAID,CAAC,CAACE,aAAa,EAAE;IACnB,IAAIF,CAAC,CAACG,QAAQ,EAAE;MACd,OAAO,GAAGH,CAAC,CAACE,aAAa,IAAIF,CAAC,CAACG,QAAQ,EAAE;IAC3C;IAEA,OAAO,GAAGH,CAAC,CAACE,aAAa,MAAM;EACjC,CAAC,MAAM,IAAIF,CAAC,CAACG,QAAQ,EAAE;IACrB,OAAOH,CAAC,CAACG,QAAQ;EACnB;;EAEA;EACA,OAAOF,YAAY,GAAG,gBAAgB,GAAG,uBAAuB;AAClE;;AAEA;AACA;AACA;AACA,SAAS1B,WAAWA,CAACF,MAAsB,EAAiB;EAAA,IAAA+B,oBAAA;EAC1D,MAAMpC,UAAU,GAAGK,MAAM,CAACL,UAAU,IAAI,CAAC,CAAC;EAC1C,MAAMC,YAA2C,GAAG,CAAC,CAAC;EAEtD,CAAAmC,oBAAA,GAAA/B,MAAM,CAACJ,YAAY,aAAnBmC,oBAAA,CAAqB1B,OAAO,CAAE2B,WAAW,IAAK;IAAA,IAAAC,oBAAA,EAAAC,qBAAA;IAC5C,MAAMC,MAAM,GAAGH,WAAW,CAACzB,GAAG;IAC9B,MAAM6B,cAAc,GAAG,EAAEX,oBAAoB;IAE7C,IAAI,CAACU,MAAM,EAAE;MACXE,OAAO,CAACC,KAAK,CACX,eAAeF,cAAc,uCAC/B,CAAC;MACD;IACF;IAEA,IAAI,CAACxC,YAAY,CAACuC,MAAM,CAAC,EAAE;MACzBvC,YAAY,CAACuC,MAAM,CAAC,GAAG;QACrBI,QAAQ,EAAE,EAAE;QACZ7C,OAAO,EAAE,CAAC,CAAC;QACXkB,cAAc,EAAE,IAAI4B,GAAG,CAAC,CAAC;QACzBC,SAAS,EAAE,IAAID,GAAG,CAAC;MACrB,CAAC;IACH;;IAEA;AACJ;AACA;IACI,CAAAP,oBAAA,GAAAD,WAAW,CAACtC,OAAO,aAAnBuC,oBAAA,CAAqBS,OAAO,CAAC,CAAC,CAAC,CAAC;;IAEhC9C,YAAY,CAACuC,MAAM,CAAC,CAACI,QAAQ,CAACtB,IAAI,CAACe,WAAW,CAAC;IAC/CpC,YAAY,CAACuC,MAAM,CAAC,CAACM,SAAS,CAACE,GAAG,CAACjB,WAAW,CAACM,WAAW,CAAC,CAAC;IAE5D,MAAMH,aAAa,GAAGG,WAAW,CAACH,aAAa;IAE/C,CAAAK,qBAAA,GAAAF,WAAW,CAACtC,OAAO,aAAnBwC,qBAAA,CAAqB7B,OAAO,CAAEuC,MAAM,IAAK;MACvC;AACN;AACA;AACA;AACA;AACA;MACM,IAAIC,MAAM,GAAGD,MAAM,CAACrC,GAAG;MAEvB,IAAI,CAACsC,MAAM,IAAKD,MAAM,CAAeE,QAAQ,EAAE;QAC7C,MAAMC,gBAAgB,GAAG/C,MAAM,CAACN,OAAO,CAAEkD,MAAM,CAAeE,QAAQ,CAAC;QAEvE,IAAIC,gBAAgB,EAAE;UACpBF,MAAM,GAAGE,gBAAgB,CAACxC,GAAG;QAC/B;MACF;MAEA,IAAI,CAAEqC,MAAM,CAAeE,QAAQ,EAAE;QAClCF,MAAM,CAAeE,QAAQ,GAAG,IAAAE,iBAAU,EAAC,CAAC;MAC/C;;MAEA;MACAH,MAAM,GAAGA,MAAM,IAAIV,MAAM;MACzBS,MAAM,CAACrC,GAAG,GAAGsC,MAAM;MACnB,MAAMC,QAAQ,GAAIF,MAAM,CAAeE,QAAQ;MAE/C,IAAIjB,aAAa,IAAIe,MAAM,CAACf,aAAa,EAAE;QACzC;QACA,IAAIgB,MAAM,KAAKV,MAAM,IAAIS,MAAM,CAACf,aAAa,KAAKA,aAAa,EAAE;UAC/D;QACF;MACF;MAEA,MAAMhB,aAAa,GAAG,GAAGgC,MAAM,KAAKC,QAAQ,KAAKV,cAAc,EAAE;MACjEQ,MAAM,CAAC/B,aAAa,GAAGA,aAAa;MACpCjB,YAAY,CAACuC,MAAM,CAAC,CAACvB,cAAc,CAAC+B,GAAG,CAAC9B,aAAa,CAAC;MAEtD,IAAIgC,MAAM,KAAKV,MAAM,EAAE;QACrB;QACA;MACF;;MAEA;AACN;AACA;MACM,IAAI,CAACvC,YAAY,CAACiD,MAAM,CAAC,EAAE;QACzBjD,YAAY,CAACiD,MAAM,CAAC,GAAG;UACrBN,QAAQ,EAAE,EAAE;UACZ7C,OAAO,EAAE;YACP,CAACmB,aAAa,GAAG;UACnB,CAAC;UACDD,cAAc,EAAE,IAAI4B,GAAG,CAAC,CAAC;UACzBC,SAAS,EAAE,IAAID,GAAG,CAAC;QACrB,CAAC;MACH,CAAC,MAAM,IAAI,CAAC5C,YAAY,CAACiD,MAAM,CAAC,CAACnD,OAAO,CAACmB,aAAa,CAAC,EAAE;QACvDjB,YAAY,CAACiD,MAAM,CAAC,CAACnD,OAAO,CAACmB,aAAa,CAAC,GAAG,EAAE;QAChDjB,YAAY,CAACiD,MAAM,CAAC,CAACjC,cAAc,CAAC+B,GAAG,CAAC9B,aAAa,CAAC;MACxD;MAEA,MAAM;QAAEnB,OAAO;QAAE,GAAGuD;MAAK,CAAC,GAAGjB,WAAW;MAExCpC,YAAY,CAACiD,MAAM,CAAC,CAACnD,OAAO,CAACmB,aAAa,CAAC,CAACI,IAAI,CAAC;QAAE,GAAGgC,IAAI;QAAEL;MAAO,CAAC,CAAC;MACrEhD,YAAY,CAACiD,MAAM,CAAC,CAACJ,SAAS,CAACE,GAAG,CAACjB,WAAW,CAACkB,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAO;IACLlD,OAAO,EAAEM,MAAM,CAACN,OAAO,IAAI,CAAC,CAAC;IAC7BC,UAAU;IACVC;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.add = add;
6
+ exports.addListItems = addListItems;
7
+ var _utils = require("../utils");
8
+ var _Interact = require("./Interact");
9
+ var _handlers = _interopRequireDefault(require("../handlers"));
10
+ function _getElementsFromData(data, root) {
11
+ if (data.listContainer) {
12
+ const container = root.querySelector(data.listContainer);
13
+ if (!container) {
14
+ console.warn(`WixInteract: No container found for list container "${data.listContainer}"`);
15
+ return [];
16
+ }
17
+ if (data.selector) {
18
+ return Array.from(container.querySelectorAll(data.selector));
19
+ }
20
+ return Array.from(container.children);
21
+ }
22
+ if (data.selector) {
23
+ const element = root.querySelector(data.selector);
24
+ if (element) {
25
+ return element;
26
+ } else {
27
+ console.warn(`WixInteract: No element found for selector "${data.selector}"`);
28
+ }
29
+ }
30
+ return root.firstElementChild;
31
+ }
32
+ function _queryItemElement(data, elements) {
33
+ return elements.map(element => {
34
+ return !data.selector || element.matches(data.selector) ? element : element.querySelector(data.selector);
35
+ }).filter(Boolean);
36
+ }
37
+ function _getInteractionElements(interaction, effect, source, target, sourceElements, targetElements) {
38
+ return [sourceElements ? _queryItemElement(interaction, sourceElements) : _getElementsFromData(interaction, source), targetElements ? _queryItemElement(effect, targetElements) : _getElementsFromData(effect, target)];
39
+ }
40
+ function _applyInteraction(key, interaction, effect, sourceElements, targetElements, listContainer) {
41
+ const isSourceArray = Array.isArray(sourceElements);
42
+ const isTargetArray = Array.isArray(targetElements);
43
+ if (isSourceArray) {
44
+ sourceElements.forEach((sourceEl, index) => {
45
+ const targetEl = isTargetArray ? targetElements[index] : targetElements;
46
+ if (targetEl) {
47
+ addInteraction(key, sourceEl, interaction.trigger, targetEl, effect, interaction.params, listContainer);
48
+ }
49
+ });
50
+ } else {
51
+ const targets = isTargetArray ? targetElements : [targetElements];
52
+ targets.forEach(targetEl => {
53
+ addInteraction(key, sourceElements, interaction.trigger, targetEl, effect, interaction.params, listContainer);
54
+ });
55
+ }
56
+ }
57
+ function _addInteraction(instance, interaction, sourceRoot, elements) {
58
+ const interactionVariations = {};
59
+ interaction.effects.forEach(effect => {
60
+ const effectId = effect.effectId;
61
+ const interactionId = effect.interactionId;
62
+ if (interactionVariations[interactionId]) {
63
+ // Skip this effect if it has already been added
64
+ return;
65
+ }
66
+ const effectOptions = {
67
+ ...(instance.dataCache.effects[effectId] || {}),
68
+ ...effect,
69
+ effectId
70
+ };
71
+ if (instance.addedInteractions[effectOptions.interactionId] && !elements) {
72
+ // Skip this interaction if it has already been added
73
+ return;
74
+ }
75
+
76
+ // TODO: implement watching for condition `change` events and add/remove interactions accordingly
77
+ const mql = (0, _utils.getMediaQuery)(effectOptions.conditions || [], instance.dataCache.conditions);
78
+ if (!mql || mql.matches) {
79
+ interactionVariations[effect.interactionId] = true;
80
+ const target = effectOptions.key;
81
+ let targetElement;
82
+ if (target) {
83
+ targetElement = _Interact.Interact.getElement(target);
84
+ if (!targetElement) {
85
+ // Bail out :: no target element in cache
86
+ return;
87
+ }
88
+ if (effectOptions.listContainer) {
89
+ targetElement.watchChildList(effectOptions.listContainer);
90
+ }
91
+ } else {
92
+ // target is not specified - fallback to same as source
93
+ targetElement = sourceRoot;
94
+ }
95
+ const [sourceElements, targetElements] = _getInteractionElements(interaction, effectOptions, sourceRoot, targetElement, elements);
96
+ if (!sourceElements || !targetElements) {
97
+ return;
98
+ }
99
+ instance.addedInteractions[effectOptions.interactionId] = true;
100
+ const key = target || interaction.key;
101
+ _applyInteraction(key, interaction, effectOptions, sourceElements, targetElements, effectOptions.listContainer || '');
102
+ }
103
+ });
104
+ }
105
+ function addEffectsForTarget(key, element, instance, listContainer, elements) {
106
+ var _instance$dataCache$i;
107
+ const effects = ((_instance$dataCache$i = instance.dataCache.interactions[key]) == null ? void 0 : _instance$dataCache$i.effects) || {};
108
+ const interactionIds = Object.keys(effects);
109
+ interactionIds.forEach(interactionId => {
110
+ if (instance.addedInteractions[interactionId] && !elements) {
111
+ // Skip this interaction if it has already been added
112
+ return;
113
+ }
114
+ const effectVariations = effects[interactionId];
115
+
116
+ // use `some` to short-circuit after the first effect that matches the conditions
117
+ // eslint-disable-next-line array-callback-return
118
+ effectVariations.some(({
119
+ effect,
120
+ ...interaction
121
+ }) => {
122
+ const effectId = effect.effectId;
123
+ const effectOptions = {
124
+ ...(instance.dataCache.effects[effectId] || {}),
125
+ ...effect,
126
+ effectId
127
+ };
128
+ if (listContainer && effectOptions.listContainer !== listContainer) {
129
+ // skip this effect if a listContainer was provided and it's not matching this effect.listContainer
130
+ return false;
131
+ }
132
+
133
+ // TODO: implement watching for condition `change` events and add/remove interactions accordingly
134
+ const mql = (0, _utils.getMediaQuery)(effectOptions.conditions || [], instance.dataCache.conditions);
135
+ if (!mql || mql.matches) {
136
+ const sourceElement = _Interact.Interact.getElement(interaction.key);
137
+ if (!sourceElement) {
138
+ // Bail out :: no source or target elements in cache
139
+ return true;
140
+ }
141
+ if (effectOptions.listContainer) {
142
+ element.watchChildList(effectOptions.listContainer);
143
+ }
144
+ const [sourceElements, targetElements] = _getInteractionElements(interaction, effectOptions, sourceElement, element, undefined, elements);
145
+ if (!sourceElements || !targetElements) {
146
+ // Bail out :: no source or target elements found in DOM
147
+ return true;
148
+ }
149
+ instance.addedInteractions[interactionId] = true;
150
+ _applyInteraction(key, interaction, effectOptions, sourceElements, targetElements, effectOptions.listContainer || '');
151
+
152
+ // short-circuit the loop since we have a match
153
+ return true;
154
+ }
155
+ });
156
+ });
157
+ return interactionIds.length > 0;
158
+ }
159
+
160
+ /**
161
+ * Registers a handler to an event on a given element.
162
+ */
163
+ function addInteraction(key, source, trigger, target, effect, options, listContainer) {
164
+ var _TRIGGER_TO_HANDLER_M;
165
+ if (effect.transition || effect.transitionProperties) {
166
+ const args = {
167
+ key,
168
+ effectId: effect.effectId,
169
+ transition: effect.transition,
170
+ properties: effect.transitionProperties,
171
+ childSelector: (0, _Interact.getSelector)(effect, true)
172
+ };
173
+ const root = target.closest('wix-interact-element');
174
+ if (!root) {
175
+ return;
176
+ }
177
+ root.renderStyle((0, _utils.createTransitionCSS)(args));
178
+ }
179
+ (_TRIGGER_TO_HANDLER_M = _handlers.default[trigger]) == null || _TRIGGER_TO_HANDLER_M.add(source, target, effect, options, _Interact.Interact.forceReducedMotion);
180
+ }
181
+
182
+ /**
183
+ * Adds all events and effects to an element based on config
184
+ */
185
+ function add(element, key) {
186
+ const instance = _Interact.Interact.getInstance(key);
187
+ const {
188
+ triggers = []
189
+ } = (instance == null ? void 0 : instance.dataCache.interactions[key]) || {};
190
+ const hasTriggers = triggers.length > 0;
191
+
192
+ // even if we don't find a matching instance, we still want to cache the element
193
+ _Interact.Interact.setElement(key, element);
194
+ triggers.forEach(interaction => {
195
+ const mql = (0, _utils.getMediaQuery)(interaction.conditions, instance.dataCache.conditions);
196
+
197
+ // TODO: implement watching for condition `change` events and add/remove interactions accordingly
198
+ if (!mql || mql.matches) {
199
+ if (interaction.listContainer) {
200
+ element.watchChildList(interaction.listContainer);
201
+ }
202
+ _addInteraction(instance, interaction, element);
203
+ }
204
+ });
205
+ let hasEffects = false;
206
+ if (instance) {
207
+ hasEffects = addEffectsForTarget(key, element, instance);
208
+ }
209
+ return hasTriggers || hasEffects;
210
+ }
211
+ function addListItems(root, key, listContainer, elements) {
212
+ const instance = _Interact.Interact.getInstance(key);
213
+ if (instance) {
214
+ const {
215
+ triggers = []
216
+ } = (instance == null ? void 0 : instance.dataCache.interactions[key]) || {};
217
+ triggers.forEach(interaction => {
218
+ if (interaction.listContainer !== listContainer) {
219
+ return;
220
+ }
221
+ const mql = (0, _utils.getMediaQuery)(interaction.conditions, instance.dataCache.conditions);
222
+
223
+ // TODO: implement watching for condition `change` events and add/remove interactions accordingly
224
+ if (!mql || mql.matches) {
225
+ _addInteraction(instance, interaction, root, elements);
226
+ }
227
+ });
228
+ addEffectsForTarget(key, root, instance, listContainer, elements);
229
+ }
230
+ }
231
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_utils","require","_Interact","_handlers","_interopRequireDefault","_getElementsFromData","data","root","listContainer","container","querySelector","console","warn","selector","Array","from","querySelectorAll","children","element","firstElementChild","_queryItemElement","elements","map","matches","filter","Boolean","_getInteractionElements","interaction","effect","source","target","sourceElements","targetElements","_applyInteraction","key","isSourceArray","isArray","isTargetArray","forEach","sourceEl","index","targetEl","addInteraction","trigger","params","targets","_addInteraction","instance","sourceRoot","interactionVariations","effects","effectId","interactionId","effectOptions","dataCache","addedInteractions","mql","getMediaQuery","conditions","targetElement","Interact","getElement","watchChildList","addEffectsForTarget","_instance$dataCache$i","interactions","interactionIds","Object","keys","effectVariations","some","sourceElement","undefined","length","options","_TRIGGER_TO_HANDLER_M","transition","transitionProperties","args","properties","childSelector","getSelector","closest","renderStyle","createTransitionCSS","TRIGGER_TO_HANDLER_MODULE_MAP","add","forceReducedMotion","getInstance","triggers","hasTriggers","setElement","hasEffects","addListItems"],"sources":["../../../src/core/add.ts"],"sourcesContent":["import type {\n Effect,\n TriggerType,\n EffectRef,\n InteractionParamsTypes,\n TransitionEffect,\n IWixInteractElement,\n Interaction,\n InteractionTrigger,\n CreateTransitionCSSParams,\n} from '../types';\nimport { createTransitionCSS, getMediaQuery } from '../utils';\nimport { Interact, getSelector } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\nfunction _getElementsFromData(\n data: Interaction | Effect,\n root: IWixInteractElement,\n): HTMLElement | HTMLElement[] | null {\n if (data.listContainer) {\n const container = root.querySelector(data.listContainer);\n\n if (!container) {\n console.warn(\n `WixInteract: No container found for list container \"${data.listContainer}\"`,\n );\n\n return [];\n }\n\n if (data.selector) {\n return Array.from(\n container.querySelectorAll(data.selector),\n ) as HTMLElement[];\n }\n\n return Array.from(container.children) as HTMLElement[];\n }\n\n if (data.selector) {\n const element = root.querySelector(data.selector);\n\n if (element) {\n return element as HTMLElement;\n } else {\n console.warn(\n `WixInteract: No element found for selector \"${data.selector}\"`,\n );\n }\n }\n\n return root.firstElementChild as HTMLElement | null;\n}\n\nfunction _queryItemElement(\n data: Interaction | Effect,\n elements: HTMLElement[],\n): HTMLElement[] {\n return elements\n .map((element) => {\n return !data.selector || element.matches(data.selector)\n ? element\n : element.querySelector(data.selector);\n })\n .filter(Boolean) as HTMLElement[];\n}\n\nfunction _getInteractionElements(\n interaction: InteractionTrigger,\n effect: Effect,\n source: IWixInteractElement,\n target: IWixInteractElement,\n sourceElements?: HTMLElement[],\n targetElements?: HTMLElement[],\n): [HTMLElement | HTMLElement[] | null, HTMLElement | HTMLElement[] | null] {\n return [\n sourceElements\n ? _queryItemElement(interaction, sourceElements)\n : _getElementsFromData(interaction, source),\n targetElements\n ? _queryItemElement(effect, targetElements)\n : _getElementsFromData(effect, target),\n ];\n}\n\nfunction _applyInteraction(\n key: string,\n interaction: InteractionTrigger,\n effect: Effect,\n sourceElements: HTMLElement | HTMLElement[],\n targetElements: HTMLElement | HTMLElement[],\n listContainer: string | undefined,\n) {\n const isSourceArray = Array.isArray(sourceElements);\n const isTargetArray = Array.isArray(targetElements);\n\n if (isSourceArray) {\n sourceElements.forEach((sourceEl, index) => {\n const targetEl = isTargetArray ? targetElements[index] : targetElements;\n\n if (targetEl) {\n addInteraction(\n key,\n sourceEl,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n listContainer,\n );\n }\n });\n } else {\n const targets = isTargetArray ? targetElements : [targetElements];\n targets.forEach((targetEl) => {\n addInteraction(\n key,\n sourceElements,\n interaction.trigger,\n targetEl,\n effect as Effect,\n interaction.params!,\n listContainer,\n );\n });\n }\n}\n\nfunction _addInteraction(\n instance: Interact,\n interaction: Interaction,\n sourceRoot: IWixInteractElement,\n elements?: HTMLElement[],\n) {\n const interactionVariations: Record<string, boolean> = {};\n\n interaction.effects.forEach((effect) => {\n const effectId = (effect as EffectRef).effectId;\n const interactionId = effect.interactionId;\n\n if (interactionVariations[interactionId!]) {\n // Skip this effect if it has already been added\n return;\n }\n\n const effectOptions = {\n ...(instance.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (instance.addedInteractions[effectOptions.interactionId!] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n interactionVariations[effect.interactionId!] = true;\n\n const target = effectOptions.key;\n\n let targetElement;\n if (target) {\n targetElement = Interact.getElement(target);\n\n if (!targetElement) {\n // Bail out :: no target element in cache\n return;\n }\n\n if (effectOptions.listContainer) {\n targetElement.watchChildList(effectOptions.listContainer);\n }\n } else {\n // target is not specified - fallback to same as source\n targetElement = sourceRoot;\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceRoot,\n targetElement!,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n return;\n }\n\n instance.addedInteractions[effectOptions.interactionId!] = true;\n\n const key = target || interaction.key;\n\n _applyInteraction(\n key,\n interaction,\n effectOptions,\n sourceElements,\n targetElements,\n effectOptions.listContainer || '',\n );\n }\n });\n}\n\nfunction addEffectsForTarget(\n key: string,\n element: IWixInteractElement,\n instance: Interact,\n listContainer?: string,\n elements?: HTMLElement[],\n) {\n const effects = instance.dataCache.interactions[key]?.effects || {};\n const interactionIds = Object.keys(effects);\n\n interactionIds.forEach((interactionId) => {\n if (instance.addedInteractions[interactionId] && !elements) {\n // Skip this interaction if it has already been added\n return;\n }\n\n const effectVariations = effects[interactionId];\n\n // use `some` to short-circuit after the first effect that matches the conditions\n // eslint-disable-next-line array-callback-return\n effectVariations.some(({ effect, ...interaction }) => {\n const effectId = (effect as EffectRef).effectId;\n\n const effectOptions = {\n ...(instance!.dataCache.effects[effectId] || {}),\n ...effect,\n effectId,\n };\n\n if (listContainer && effectOptions.listContainer !== listContainer) {\n // skip this effect if a listContainer was provided and it's not matching this effect.listContainer\n return false;\n }\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n const mql = getMediaQuery(\n effectOptions.conditions || [],\n instance!.dataCache.conditions,\n );\n\n if (!mql || mql.matches) {\n const sourceElement = Interact.getElement(interaction.key);\n\n if (!sourceElement) {\n // Bail out :: no source or target elements in cache\n return true;\n }\n\n if (effectOptions.listContainer) {\n element.watchChildList(effectOptions.listContainer);\n }\n\n const [sourceElements, targetElements] = _getInteractionElements(\n interaction,\n effectOptions,\n sourceElement,\n element,\n undefined,\n elements,\n );\n\n if (!sourceElements || !targetElements) {\n // Bail out :: no source or target elements found in DOM\n return true;\n }\n\n instance!.addedInteractions[interactionId] = true;\n\n _applyInteraction(\n key,\n interaction,\n effectOptions as Effect,\n sourceElements,\n targetElements,\n effectOptions.listContainer || '',\n );\n\n // short-circuit the loop since we have a match\n return true;\n }\n });\n });\n\n return interactionIds.length > 0;\n}\n\n/**\n * Registers a handler to an event on a given element.\n */\nfunction addInteraction<T extends TriggerType>(\n key: string,\n source: HTMLElement,\n trigger: T,\n target: HTMLElement,\n effect: Effect,\n options: InteractionParamsTypes[T],\n listContainer: string | undefined,\n): void {\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n const args: CreateTransitionCSSParams = {\n key,\n effectId: (effect as Effect & { effectId: string }).effectId!,\n transition: (effect as TransitionEffect).transition,\n properties: (effect as TransitionEffect).transitionProperties,\n childSelector: getSelector(effect, true),\n };\n\n const root = target.closest('wix-interact-element') as IWixInteractElement;\n if (!root) {\n return;\n }\n\n root.renderStyle(createTransitionCSS(args));\n }\n\n TRIGGER_TO_HANDLER_MODULE_MAP[trigger]?.add(\n source,\n target,\n effect,\n options,\n Interact.forceReducedMotion,\n );\n}\n\n/**\n * Adds all events and effects to an element based on config\n */\nexport function add(element: IWixInteractElement, key: string): boolean {\n const instance = Interact.getInstance(key);\n\n const { triggers = [] } = instance?.dataCache.interactions[key] || {};\n const hasTriggers = triggers.length > 0;\n\n // even if we don't find a matching instance, we still want to cache the element\n Interact.setElement(key, element);\n\n triggers.forEach((interaction) => {\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n if (interaction.listContainer) {\n element.watchChildList(interaction.listContainer);\n }\n\n _addInteraction(instance!, interaction, element);\n }\n });\n\n let hasEffects = false;\n if (instance) {\n hasEffects = addEffectsForTarget(key, element, instance);\n }\n\n return hasTriggers || hasEffects;\n}\n\nexport function addListItems(\n root: IWixInteractElement,\n key: string,\n listContainer: string,\n elements: HTMLElement[],\n) {\n const instance = Interact.getInstance(key);\n\n if (instance) {\n const { triggers = [] } = instance?.dataCache.interactions[key] || {};\n\n triggers.forEach((interaction) => {\n if (interaction.listContainer !== listContainer) {\n return;\n }\n\n const mql = getMediaQuery(\n interaction.conditions,\n instance!.dataCache.conditions,\n );\n\n // TODO: implement watching for condition `change` events and add/remove interactions accordingly\n if (!mql || mql.matches) {\n _addInteraction(instance!, interaction, root, elements);\n }\n });\n\n addEffectsForTarget(key, root, instance, listContainer, elements);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.remove = remove;
6
+ exports.removeListItems = removeListItems;
7
+ var _Interact = require("./Interact");
8
+ var _handlers = _interopRequireDefault(require("../handlers"));
9
+ /**
10
+ * Removes all events and effects from an element based on config
11
+ */
12
+ function remove(key) {
13
+ var _instance$dataCache$i, _Interact$getInstance;
14
+ const instance = _Interact.Interact.getInstance(key);
15
+ if (!instance) {
16
+ return;
17
+ }
18
+ const root = _Interact.Interact.getElement(key);
19
+ if (!root) {
20
+ return;
21
+ }
22
+ const selectors = [...((_instance$dataCache$i = instance.dataCache.interactions[key]) == null ? void 0 : _instance$dataCache$i.selectors.values())].join(',');
23
+ const elements = root.querySelectorAll(selectors);
24
+ for (const element of elements) {
25
+ Object.values(_handlers.default).forEach(module => {
26
+ module.remove(element);
27
+ });
28
+ }
29
+ (_Interact$getInstance = _Interact.Interact.getInstance(key)) == null || _Interact$getInstance.clearInteractionStateForKey(key);
30
+ _Interact.Interact.elementCache.delete(key);
31
+ }
32
+ function removeListItems(elements) {
33
+ elements.forEach(element => {
34
+ Object.values(_handlers.default).forEach(module => module.remove(element));
35
+ });
36
+ }
37
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Interact","require","_handlers","_interopRequireDefault","remove","key","_instance$dataCache$i","_Interact$getInstance","instance","Interact","getInstance","root","getElement","selectors","dataCache","interactions","values","join","elements","querySelectorAll","element","Object","TRIGGER_TO_HANDLER_MODULE_MAP","forEach","module","clearInteractionStateForKey","elementCache","delete","removeListItems"],"sources":["../../../src/core/remove.ts"],"sourcesContent":["import { Interact } from './Interact';\nimport TRIGGER_TO_HANDLER_MODULE_MAP from '../handlers';\n\n/**\n * Removes all events and effects from an element based on config\n */\nexport function remove(key: string): void {\n const instance = Interact.getInstance(key);\n\n if (!instance) {\n return;\n }\n\n const root = Interact.getElement(key);\n if (!root) {\n return;\n }\n\n const selectors = [\n ...instance.dataCache.interactions[key]?.selectors.values(),\n ].join(',');\n const elements = root.querySelectorAll(selectors);\n\n for (const element of elements) {\n Object.values(TRIGGER_TO_HANDLER_MODULE_MAP).forEach((module) => {\n module.remove(element as HTMLElement);\n });\n }\n\n Interact.getInstance(key)?.clearInteractionStateForKey(key);\n Interact.elementCache.delete(key);\n}\n\nexport function removeListItems(elements: HTMLElement[]) {\n elements.forEach((element) => {\n Object.values(TRIGGER_TO_HANDLER_MODULE_MAP).forEach((module) =>\n module.remove(element),\n );\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA;AACA;AACA;AACO,SAASG,MAAMA,CAACC,GAAW,EAAQ;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACxC,MAAMC,QAAQ,GAAGC,kBAAQ,CAACC,WAAW,CAACL,GAAG,CAAC;EAE1C,IAAI,CAACG,QAAQ,EAAE;IACb;EACF;EAEA,MAAMG,IAAI,GAAGF,kBAAQ,CAACG,UAAU,CAACP,GAAG,CAAC;EACrC,IAAI,CAACM,IAAI,EAAE;IACT;EACF;EAEA,MAAME,SAAS,GAAG,CAChB,KAAAP,qBAAA,GAAGE,QAAQ,CAACM,SAAS,CAACC,YAAY,CAACV,GAAG,CAAC,qBAApCC,qBAAA,CAAsCO,SAAS,CAACG,MAAM,CAAC,CAAC,EAC5D,CAACC,IAAI,CAAC,GAAG,CAAC;EACX,MAAMC,QAAQ,GAAGP,IAAI,CAACQ,gBAAgB,CAACN,SAAS,CAAC;EAEjD,KAAK,MAAMO,OAAO,IAAIF,QAAQ,EAAE;IAC9BG,MAAM,CAACL,MAAM,CAACM,iBAA6B,CAAC,CAACC,OAAO,CAAEC,MAAM,IAAK;MAC/DA,MAAM,CAACpB,MAAM,CAACgB,OAAsB,CAAC;IACvC,CAAC,CAAC;EACJ;EAEA,CAAAb,qBAAA,GAAAE,kBAAQ,CAACC,WAAW,CAACL,GAAG,CAAC,aAAzBE,qBAAA,CAA2BkB,2BAA2B,CAACpB,GAAG,CAAC;EAC3DI,kBAAQ,CAACiB,YAAY,CAACC,MAAM,CAACtB,GAAG,CAAC;AACnC;AAEO,SAASuB,eAAeA,CAACV,QAAuB,EAAE;EACvDA,QAAQ,CAACK,OAAO,CAAEH,OAAO,IAAK;IAC5BC,MAAM,CAACL,MAAM,CAACM,iBAA6B,CAAC,CAACC,OAAO,CAAEC,MAAM,IAC1DA,MAAM,CAACpB,MAAM,CAACgB,OAAO,CACvB,CAAC;EACH,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -41,7 +41,7 @@ function createTransitionHandler(element, {
41
41
  effectId
42
42
  }, options) {
43
43
  return __ => {
44
- const wixInteractElement = element.parentElement;
44
+ const wixInteractElement = element.closest('wix-interact-element');
45
45
  if (!wixInteractElement) {
46
46
  return;
47
47
  }
@@ -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","createTransitionHandler","effectId","wixInteractElement","parentElement","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 IWixInteractElement,\n PointerTriggerParams,\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,\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 animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n { effectId }: TransitionEffect & { effectId: string },\n options: StateParams,\n) {\n return (__: MouseEvent) => {\n const wixInteractElement = element.parentElement as IWixInteractElement;\n if (!wixInteractElement) {\n return;\n }\n\n wixInteractElement.toggleEffect(effectId, options.method || 'toggle');\n };\n}\n\nfunction addClickHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect | TransitionEffect,\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 & { effectId: string },\n options as StateParams,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect,\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":";;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAUA,IAAAC,UAAA,GAAAD,OAAA;AAMA,MAAME,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,uBAAuBA,CAC9BC,OAAoB,EACpBC,MAAkB,EAClBC,OAA6B,EAC7BC,aAAsB,GAAG,KAAK,EAC9B;EACA,MAAMC,SAAS,GAAG,IAAAC,oBAAY,EAC5BL,OAAO,EACP,IAAAM,mCAAwB,EAACL,MAAM,CAAC,EAChCM,SAAS,EACTJ,aACF,CAAmB;EACnB,IAAIK,WAAW,GAAG,IAAI;EACtB,MAAMC,IAAI,GAAGP,OAAO,CAACO,IAAI,IAAI,WAAW;EAExC,OAAQC,EAAc,IAAK;IACzB,IAAID,IAAI,KAAK,WAAW,EAAE;MACxB,IAAID,WAAW,EAAE;QACfA,WAAW,GAAG,KAAK;QACnBJ,SAAS,CAACO,IAAI,CAAC,CAAC;MAClB,CAAC,MAAM;QACLP,SAAS,CAACQ,OAAO,CAAC,CAAC;MACrB;IACF,CAAC,MAAM,IAAIH,IAAI,KAAK,OAAO,EAAE;MAC3B,IAAID,WAAW,EAAE;QACfA,WAAW,GAAG,KAAK;QACnBJ,SAAS,CAACO,IAAI,CAAC,CAAC;MAClB,CAAC,MAAM;QACL,IAAIP,SAAS,CAACS,SAAS,KAAK,SAAS,EAAE;UACrCT,SAAS,CAACU,KAAK,CAAC,CAAC;QACnB,CAAC,MAAM,IAAIV,SAAS,CAACS,SAAS,KAAK,UAAU,EAAE;UAC7C;UACAT,SAAS,CAACO,IAAI,CAAC,CAAC;QAClB;MACF;IACF,CAAC,MAAM;MACL;MACA;MACAP,SAAS,CAACW,QAAQ,CAAC,CAAC,CAAC;MACrBX,SAAS,CAACO,IAAI,CAAC,CAAC;IAClB;EACF,CAAC;AACH;AAEA,SAASK,uBAAuBA,CAC9BhB,OAAoB,EACpB;EAAEiB;AAAkD,CAAC,EACrDf,OAAoB,EACpB;EACA,OAAQQ,EAAc,IAAK;IACzB,MAAMQ,kBAAkB,GAAGlB,OAAO,CAACmB,aAAoC;IACvE,IAAI,CAACD,kBAAkB,EAAE;MACvB;IACF;IAEAA,kBAAkB,CAACE,YAAY,CAACH,QAAQ,EAAEf,OAAO,CAACmB,MAAM,IAAI,QAAQ,CAAC;EACvE,CAAC;AACH;AAEA,SAASC,eAAeA,CACtBC,MAAmB,EACnBC,MAAmB,EACnBvB,MAAqC,EACrCC,OAA2C,GAAG,CAAC,CAAgB,EAC/DC,aAAsB,GAAG,KAAK,EAC9B;EACA,IAAIsB,OAAoC;EACxC,IAAIC,IAAI,GAAG,KAAK;EAEhB,IACGzB,MAAM,CAAsB0B,UAAU,IACtC1B,MAAM,CAAsB2B,oBAAoB,EACjD;IACAH,OAAO,GAAGT,uBAAuB,CAC/BQ,MAAM,EACNvB,MAAM,EACNC,OACF,CAAC;EACH,CAAC,MAAM;IACLuB,OAAO,GAAG1B,uBAAuB,CAC/ByB,MAAM,EACNvB,MAAM,EACNC,OAAO,EACPC,aACF,CAAC;IACDuB,IAAI,GAAIxB,OAAO,CAA0BO,IAAI,KAAK,MAAM;EAC1D;EAEA,MAAMoB,OAAO,GAAGA,CAAA,KAAM;IACpBN,MAAM,CAACO,mBAAmB,CAAC,OAAO,EAAEL,OAAO,CAAC;EAC9C,CAAC;EAED,MAAMM,UAAU,GAAG;IAAER,MAAM;IAAEC,MAAM;IAAEK;EAAQ,CAAC;EAE9C,IAAAG,0BAAe,EAACnC,UAAU,EAAE0B,MAAM,EAAEQ,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAACnC,UAAU,EAAE2B,MAAM,EAAEO,UAAU,CAAC;EAE/CR,MAAM,CAACU,gBAAgB,CAAC,OAAO,EAAER,OAAO,EAAE;IAAES,OAAO,EAAE,IAAI;IAAER;EAAK,CAAC,CAAC;AACpE;AAEA,SAASS,kBAAkBA,CAACnC,OAAoB,EAAE;EAChD,IAAAoC,sCAA2B,EAACvC,UAAU,EAAEG,OAAO,CAAC;AAClD;AAAC,IAAAqC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAElB,eAAe;EACpBmB,MAAM,EAAEN;AACV,CAAC","ignoreList":[]}
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","createTransitionHandler","effectId","wixInteractElement","closest","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 IWixInteractElement,\n PointerTriggerParams,\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,\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 animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n { effectId }: TransitionEffect & { effectId: string },\n options: StateParams,\n) {\n return (__: MouseEvent) => {\n const wixInteractElement = element.closest(\n 'wix-interact-element',\n ) as IWixInteractElement;\n if (!wixInteractElement) {\n return;\n }\n\n wixInteractElement.toggleEffect(effectId, options.method || 'toggle');\n };\n}\n\nfunction addClickHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect | TransitionEffect,\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 & { effectId: string },\n options as StateParams,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect,\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":[]}
@@ -48,7 +48,7 @@ function createTransitionHandler(element, {
48
48
  const method = options.method || 'toggle';
49
49
  const isToggle = method === 'toggle';
50
50
  return event => {
51
- const wixInteractElement = element.parentElement;
51
+ const wixInteractElement = element.closest('wix-interact-element');
52
52
  if (!wixInteractElement) {
53
53
  return;
54
54
  }
@@ -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","cancel","pause","createTransitionHandler","effectId","method","isToggle","wixInteractElement","parentElement","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 IWixInteractElement,\n PointerTriggerParams,\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,\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 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 } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n { effectId }: TransitionEffect & { effectId: string },\n options: StateParams,\n) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n\n return (event: MouseEvent) => {\n const wixInteractElement = element.parentElement as IWixInteractElement;\n if (!wixInteractElement) {\n return;\n }\n\n if (event.type === 'mouseenter') {\n const method_ = isToggle ? 'add' : method;\n wixInteractElement.toggleEffect(effectId, method_);\n } else if (event.type === 'mouseleave' && isToggle) {\n wixInteractElement.toggleEffect(effectId, 'remove');\n }\n };\n}\n\nfunction addHoverHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TransitionEffect | TimeEffect,\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 & { effectId: string },\n options as StateParams,\n );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect,\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":[]}
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","cancel","pause","createTransitionHandler","effectId","method","isToggle","wixInteractElement","closest","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 IWixInteractElement,\n PointerTriggerParams,\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,\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 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 } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n { effectId }: TransitionEffect & { effectId: string },\n options: StateParams,\n) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n\n return (event: MouseEvent) => {\n const wixInteractElement = element.closest(\n 'wix-interact-element',\n ) as IWixInteractElement;\n if (!wixInteractElement) {\n return;\n }\n\n if (event.type === 'mouseenter') {\n const method_ = isToggle ? 'add' : method;\n wixInteractElement.toggleEffect(effectId, method_);\n } else if (event.type === 'mouseleave' && isToggle) {\n wixInteractElement.toggleEffect(effectId, 'remove');\n }\n };\n}\n\nfunction addHoverHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TransitionEffect | TimeEffect,\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 & { effectId: string },\n options as StateParams,\n );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect,\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":[]}