@wix/interact 1.93.0 → 2.0.0-rc.4

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 (179) hide show
  1. package/dist/cjs/index.js +2 -23
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/react.js +15 -0
  4. package/dist/cjs/react.js.map +1 -0
  5. package/dist/cjs/web.js +2 -0
  6. package/dist/cjs/web.js.map +1 -0
  7. package/dist/es/index.js +8 -0
  8. package/dist/es/index.js.map +1 -0
  9. package/dist/es/react.js +650 -0
  10. package/dist/es/react.js.map +1 -0
  11. package/dist/es/web.js +56 -0
  12. package/dist/es/web.js.map +1 -0
  13. package/dist/index-BoEj_7uB.js +18 -0
  14. package/dist/index-BoEj_7uB.js.map +1 -0
  15. package/dist/index-DUTdIvfw.mjs +7969 -0
  16. package/dist/index-DUTdIvfw.mjs.map +1 -0
  17. package/dist/tsconfig.build.tsbuildinfo +1 -0
  18. package/dist/types/core/Interact.d.ts +25 -10
  19. package/dist/types/core/Interact.d.ts.map +1 -0
  20. package/dist/types/core/InteractionController.d.ts +24 -0
  21. package/dist/types/core/InteractionController.d.ts.map +1 -0
  22. package/dist/types/core/add.d.ts +4 -3
  23. package/dist/types/core/add.d.ts.map +1 -0
  24. package/dist/types/core/css.d.ts +3 -0
  25. package/dist/types/core/css.d.ts.map +1 -0
  26. package/dist/types/core/remove.d.ts +3 -1
  27. package/dist/types/core/remove.d.ts.map +1 -0
  28. package/dist/types/core/utilities.d.ts +1 -0
  29. package/dist/types/core/utilities.d.ts.map +1 -0
  30. package/dist/types/dom/api.d.ts +3 -0
  31. package/dist/types/dom/api.d.ts.map +1 -0
  32. package/dist/types/handlers/animationEnd.d.ts +3 -2
  33. package/dist/types/handlers/animationEnd.d.ts.map +1 -0
  34. package/dist/types/handlers/click.d.ts +3 -2
  35. package/dist/types/handlers/click.d.ts.map +1 -0
  36. package/dist/types/handlers/hover.d.ts +3 -2
  37. package/dist/types/handlers/hover.d.ts.map +1 -0
  38. package/dist/types/handlers/index.d.ts +1 -0
  39. package/dist/types/handlers/index.d.ts.map +1 -0
  40. package/dist/types/handlers/pointerMove.d.ts +3 -2
  41. package/dist/types/handlers/pointerMove.d.ts.map +1 -0
  42. package/dist/types/handlers/utilities.d.ts +1 -0
  43. package/dist/types/handlers/utilities.d.ts.map +1 -0
  44. package/dist/types/handlers/viewEnter.d.ts +3 -2
  45. package/dist/types/handlers/viewEnter.d.ts.map +1 -0
  46. package/dist/types/handlers/viewProgress.d.ts +4 -3
  47. package/dist/types/handlers/viewProgress.d.ts.map +1 -0
  48. package/dist/types/index.d.ts +3 -2
  49. package/dist/types/index.d.ts.map +1 -0
  50. package/dist/types/react/Interaction.d.ts +10 -0
  51. package/dist/types/react/Interaction.d.ts.map +1 -0
  52. package/dist/types/react/index.d.ts +8 -0
  53. package/dist/types/react/index.d.ts.map +1 -0
  54. package/dist/types/react/interactRef.d.ts +3 -0
  55. package/dist/types/react/interactRef.d.ts.map +1 -0
  56. package/dist/types/types.d.ts +31 -12
  57. package/dist/types/types.d.ts.map +1 -0
  58. package/dist/types/utils.d.ts +2 -1
  59. package/dist/types/utils.d.ts.map +1 -0
  60. package/dist/types/{InteractElement.d.ts → web/InteractElement.d.ts} +117 -77
  61. package/dist/types/web/InteractElement.d.ts.map +1 -0
  62. package/dist/types/web/defineInteractElement.d.ts +2 -0
  63. package/dist/types/web/defineInteractElement.d.ts.map +1 -0
  64. package/dist/types/web/index.d.ts +6 -0
  65. package/dist/types/web/index.d.ts.map +1 -0
  66. package/docs/README.md +211 -0
  67. package/docs/advanced/README.md +164 -0
  68. package/docs/api/README.md +157 -0
  69. package/docs/api/element-selection.md +607 -0
  70. package/docs/api/functions.md +638 -0
  71. package/docs/api/interact-class.md +663 -0
  72. package/docs/api/interact-element.md +565 -0
  73. package/docs/api/interaction-controller.md +450 -0
  74. package/docs/api/types.md +957 -0
  75. package/docs/examples/README.md +212 -0
  76. package/docs/examples/click-interactions.md +977 -0
  77. package/docs/examples/entrance-animations.md +935 -0
  78. package/docs/examples/hover-effects.md +930 -0
  79. package/docs/examples/list-patterns.md +737 -0
  80. package/docs/guides/README.md +49 -0
  81. package/docs/guides/conditions-and-media-queries.md +1068 -0
  82. package/docs/guides/configuration-structure.md +726 -0
  83. package/docs/guides/custom-elements.md +327 -0
  84. package/docs/guides/effects-and-animations.md +634 -0
  85. package/docs/guides/getting-started.md +379 -0
  86. package/docs/guides/lists-and-dynamic-content.md +713 -0
  87. package/docs/guides/state-management.md +747 -0
  88. package/docs/guides/understanding-triggers.md +690 -0
  89. package/docs/integration/README.md +264 -0
  90. package/docs/integration/react.md +605 -0
  91. package/package.json +73 -56
  92. package/rules/Integration.md +255 -0
  93. package/rules/click-rules.md +533 -0
  94. package/rules/full-lean.md +346 -0
  95. package/rules/hover-rules.md +593 -0
  96. package/rules/pointermove-rules.md +1341 -0
  97. package/rules/scroll-list-rules.md +900 -0
  98. package/rules/viewenter-rules.md +1015 -0
  99. package/rules/viewprogress-rules.md +1044 -0
  100. package/dist/cjs/InteractElement.js +0 -163
  101. package/dist/cjs/InteractElement.js.map +0 -1
  102. package/dist/cjs/__tests__/interact.spec.js +0 -2094
  103. package/dist/cjs/__tests__/interact.spec.js.map +0 -1
  104. package/dist/cjs/__tests__/viewEnter.spec.js +0 -207
  105. package/dist/cjs/__tests__/viewEnter.spec.js.map +0 -1
  106. package/dist/cjs/core/Interact.js +0 -257
  107. package/dist/cjs/core/Interact.js.map +0 -1
  108. package/dist/cjs/core/add.js +0 -250
  109. package/dist/cjs/core/add.js.map +0 -1
  110. package/dist/cjs/core/remove.js +0 -35
  111. package/dist/cjs/core/remove.js.map +0 -1
  112. package/dist/cjs/core/utilities.js +0 -16
  113. package/dist/cjs/core/utilities.js.map +0 -1
  114. package/dist/cjs/external-types.d.js +0 -2
  115. package/dist/cjs/external-types.d.js.map +0 -1
  116. package/dist/cjs/handlers/animationEnd.js +0 -37
  117. package/dist/cjs/handlers/animationEnd.js.map +0 -1
  118. package/dist/cjs/handlers/click.js +0 -122
  119. package/dist/cjs/handlers/click.js.map +0 -1
  120. package/dist/cjs/handlers/hover.js +0 -147
  121. package/dist/cjs/handlers/hover.js.map +0 -1
  122. package/dist/cjs/handlers/index.js +0 -32
  123. package/dist/cjs/handlers/index.js.map +0 -1
  124. package/dist/cjs/handlers/pointerMove.js +0 -49
  125. package/dist/cjs/handlers/pointerMove.js.map +0 -1
  126. package/dist/cjs/handlers/utilities.js +0 -49
  127. package/dist/cjs/handlers/utilities.js.map +0 -1
  128. package/dist/cjs/handlers/viewEnter.js +0 -131
  129. package/dist/cjs/handlers/viewEnter.js.map +0 -1
  130. package/dist/cjs/handlers/viewProgress.js +0 -79
  131. package/dist/cjs/handlers/viewProgress.js.map +0 -1
  132. package/dist/cjs/test-types.d.js +0 -2
  133. package/dist/cjs/test-types.d.js.map +0 -1
  134. package/dist/cjs/types.js +0 -2
  135. package/dist/cjs/types.js.map +0 -1
  136. package/dist/cjs/utils.js +0 -98
  137. package/dist/cjs/utils.js.map +0 -1
  138. package/dist/esm/InteractElement.js +0 -157
  139. package/dist/esm/InteractElement.js.map +0 -1
  140. package/dist/esm/__tests__/interact.spec.js +0 -2102
  141. package/dist/esm/__tests__/interact.spec.js.map +0 -1
  142. package/dist/esm/__tests__/viewEnter.spec.js +0 -210
  143. package/dist/esm/__tests__/viewEnter.spec.js.map +0 -1
  144. package/dist/esm/core/Interact.js +0 -251
  145. package/dist/esm/core/Interact.js.map +0 -1
  146. package/dist/esm/core/add.js +0 -245
  147. package/dist/esm/core/add.js.map +0 -1
  148. package/dist/esm/core/remove.js +0 -30
  149. package/dist/esm/core/remove.js.map +0 -1
  150. package/dist/esm/core/utilities.js +0 -14
  151. package/dist/esm/core/utilities.js.map +0 -1
  152. package/dist/esm/external-types.d.js +0 -2
  153. package/dist/esm/external-types.d.js.map +0 -1
  154. package/dist/esm/handlers/animationEnd.js +0 -33
  155. package/dist/esm/handlers/animationEnd.js.map +0 -1
  156. package/dist/esm/handlers/click.js +0 -122
  157. package/dist/esm/handlers/click.js.map +0 -1
  158. package/dist/esm/handlers/hover.js +0 -147
  159. package/dist/esm/handlers/hover.js.map +0 -1
  160. package/dist/esm/handlers/index.js +0 -27
  161. package/dist/esm/handlers/index.js.map +0 -1
  162. package/dist/esm/handlers/pointerMove.js +0 -48
  163. package/dist/esm/handlers/pointerMove.js.map +0 -1
  164. package/dist/esm/handlers/utilities.js +0 -43
  165. package/dist/esm/handlers/utilities.js.map +0 -1
  166. package/dist/esm/handlers/viewEnter.js +0 -133
  167. package/dist/esm/handlers/viewEnter.js.map +0 -1
  168. package/dist/esm/handlers/viewProgress.js +0 -75
  169. package/dist/esm/handlers/viewProgress.js.map +0 -1
  170. package/dist/esm/index.js +0 -5
  171. package/dist/esm/index.js.map +0 -1
  172. package/dist/esm/test-types.d.js +0 -2
  173. package/dist/esm/test-types.d.js.map +0 -1
  174. package/dist/esm/types.js +0 -2
  175. package/dist/esm/types.js.map +0 -1
  176. package/dist/esm/utils.js +0 -92
  177. package/dist/esm/utils.js.map +0 -1
  178. package/dist/types/__tests__/interact.spec.d.ts +0 -1
  179. package/dist/types/__tests__/viewEnter.spec.d.ts +0 -0
@@ -0,0 +1,327 @@
1
+ # Custom Elements
2
+
3
+ The `<interact-element>` custom element is the foundation of `@wix/interact`. This guide explains how it works, when to use it, and how to integrate it effectively into your applications.
4
+
5
+ ## What is interact-element?
6
+
7
+ `<interact-element>` is a custom HTML element that serves as a bridge between your HTML content and the `@wix/interact` system. It:
8
+
9
+ - **Wraps your interactive content** to enable trigger detection
10
+ - **Manages element state** using CSS custom states
11
+ - **Handles lifecycle events** for adding/removing interactions
12
+ - **Provides a unique identifier** via `data-interact-key`
13
+
14
+ ## Basic Usage
15
+
16
+ ### HTML Structure
17
+ ```html
18
+ <interact-element data-interact-key="my-button">
19
+ <button id="my-button">Click me</button>
20
+ </interact-element>
21
+ ```
22
+
23
+ ### React/JSX Usage
24
+ ```tsx
25
+ import React from 'react';
26
+
27
+ function InteractiveButton() {
28
+ return (
29
+ <interact-element data-interact-key="my-button">
30
+ <button id="my-button">Click me</button>
31
+ </interact-element>
32
+ );
33
+ }
34
+ ```
35
+
36
+ ### Key Requirements
37
+ 1. **Unique `data-interact-key`** - Must match your interaction `key` property
38
+ 2. **Child element** - The custom element must contain at least one child
39
+
40
+ ## The data-interact-key Attribute
41
+
42
+ The `data-interact-key` attribute is crucial - it connects your HTML to your interaction configuration.
43
+
44
+ ### Matching Keys
45
+ The key must match your interaction's key property:
46
+
47
+ ```typescript
48
+ // Configuration
49
+ {
50
+ key: 'my-button', // This key...
51
+ trigger: 'hover',
52
+ effects: [/* ... */]
53
+ }
54
+ ```
55
+
56
+ ```html
57
+ <!-- Must match this key -->
58
+ <interact-element data-interact-key="my-button">
59
+ <button id="my-button">Hover me</button>
60
+ </interact-element>
61
+ ```
62
+
63
+ ## Element Lifecycle
64
+
65
+ When `<interact-element>` connects to the DOM:
66
+
67
+ 1. **Custom element registration** - Registers the element class if not already done
68
+ 2. **Key validation** - Checks for valid `data-interact-key`
69
+ 3. **Child validation** - Ensures at least one child element exists
70
+ 4. **Interaction activation** - Calls `add()` to enable interactions when connected to DOM
71
+ 5. **Automatic cleanup** - Calls `remove()` to clean up interactions when disconnected from DOM
72
+
73
+ ## State Management
74
+
75
+ ### CSS Custom States
76
+ `<interact-element>` uses modern CSS custom states for effect management:
77
+
78
+ ```css
79
+ /* Target elements in specific states */
80
+ interact-element:state(hover-active) .my-element {
81
+ transform: scale(1.1);
82
+ transition: transform 0.2s ease;
83
+ }
84
+
85
+ interact-element:state(clicked) .my-element {
86
+ background-color: #blue;
87
+ }
88
+ ```
89
+
90
+ ### Legacy Browser Support
91
+ For browsers without custom state support, falls back to CSS classes:
92
+
93
+ ```css
94
+ /* Legacy fallback */
95
+ interact-element.--hover-active .my-element {
96
+ transform: scale(1.1);
97
+ }
98
+ ```
99
+
100
+ ### State Toggle Methods
101
+ The element provides methods to manage states:
102
+
103
+ 1. `add`: adds a state named by `effectId`
104
+ 2. `remove`: removes a state named by `effectId`
105
+ 3. `toggle`: toggles a state named by `effectId`
106
+ 4. `clear`: removes all states
107
+
108
+ ## Integration Patterns
109
+
110
+ ### React Integration
111
+
112
+ TBD
113
+
114
+ ### Vue Integration
115
+ ```vue
116
+ <template>
117
+ <interact-element :data-interact-key="`${elementId}`">
118
+ <div :id="elementId" class="interactive-element">
119
+ <slot />
120
+ </div>
121
+ </interact-element>
122
+ </template>
123
+
124
+ <script>
125
+ import { Interact } from '@wix/interact';
126
+
127
+ export default {
128
+ props: ['elementId'],
129
+ mounted() {
130
+ const config = {
131
+ interactions: [
132
+ {
133
+ key: this.elementId,
134
+ trigger: 'hover',
135
+ effects: [
136
+ {
137
+ key: this.elementId,
138
+ namedEffect: {
139
+ type: 'FadeIn'
140
+ },
141
+ duration: 300
142
+ }
143
+ ]
144
+ }
145
+ ]
146
+ };
147
+
148
+ Interact.create(config);
149
+ }
150
+ };
151
+ </script>
152
+ ```
153
+
154
+ ### Vanilla JavaScript
155
+ ```javascript
156
+ // Create element programmatically
157
+ function createInteractiveElement(id, content) {
158
+ const wixElement = document.createElement('interact-element');
159
+ wixElement.dataset.wixPath = id;
160
+
161
+ const childElement = document.createElement('div');
162
+ childElement.id = id;
163
+ childElement.innerHTML = content;
164
+
165
+ wixElement.appendChild(childElement);
166
+
167
+ return wixElement;
168
+ }
169
+
170
+ // Usage
171
+ const interactive = createInteractiveElement('my-element', 'Interactive content');
172
+ document.body.appendChild(interactive);
173
+ ```
174
+
175
+ ## Advanced Usage
176
+
177
+ ### Multiple Children
178
+ You can have multiple children, but only the first one is used for interaction targeting:
179
+
180
+ ```html
181
+ <interact-element data-interact-key="main-target">
182
+ <div id="main-target">Primary interactive element</div>
183
+ <div>Supporting content (not interactive)</div>
184
+ <span>Additional content</span>
185
+ </interact-element>
186
+ ```
187
+
188
+ ### Nested interact-elements
189
+ Nesting is supported for complex interactions:
190
+
191
+ ```html
192
+ <interact-element data-interact-key="outer-container">
193
+ <div id="outer-container">
194
+ <interact-element data-interact-key="inner-button">
195
+ <button id="inner-button">Nested interactive button</button>
196
+ </interact-element>
197
+ <p>Other content in outer container</p>
198
+ </div>
199
+ </interact-element>
200
+ ```
201
+
202
+ ### Dynamic Key Updates
203
+ You can change the key dynamically:
204
+
205
+ ```javascript
206
+ const element = document.querySelector('interact-element');
207
+
208
+ // Remove old interactions
209
+ if (element.dataset.wixPath) {
210
+ remove(element.dataset.wixPath);
211
+ }
212
+
213
+ // Update key
214
+ element.dataset.wixPath = 'new-target';
215
+
216
+ // Reconnect with new key
217
+ element.connect('new-target');
218
+ ```
219
+
220
+ ## Styling interact-element
221
+
222
+ ### Default Display
223
+ The custom element has minimal default styling:
224
+
225
+ ```css
226
+ interact-element {
227
+ display: contents; /* Doesn't affect layout */
228
+ }
229
+ ```
230
+
231
+ ### Custom Styling
232
+ You can style the element wrapper if needed:
233
+
234
+ ```css
235
+ /* Make wrapper a block container */
236
+ interact-element.card-wrapper {
237
+ display: block;
238
+ padding: 1rem;
239
+ border-radius: 8px;
240
+ }
241
+
242
+ /* Style based on state */
243
+ interact-element:state(hover-active) {
244
+ background-color: rgba(0, 0, 0, 0.05);
245
+ }
246
+ ```
247
+
248
+ ## Troubleshooting
249
+
250
+ ### Common Issues
251
+
252
+ #### "No key provided" Warning
253
+ ```html
254
+ <!-- Wrong - missing data-interact-key -->
255
+ <interact-element>
256
+ <div>Content</div>
257
+ </interact-element>
258
+
259
+ <!-- Correct -->
260
+ <interact-element data-interact-key="my-element">
261
+ <div id="my-element">Content</div>
262
+ </interact-element>
263
+ ```
264
+
265
+ #### "No child element found" Warning
266
+ ```html
267
+ <!-- Wrong - empty element -->
268
+ <interact-element data-interact-key="my-element"></interact-element>
269
+
270
+ <!-- Correct -->
271
+ <interact-element data-interact-key="my-element">
272
+ <div id="my-element">Content</div>
273
+ </interact-element>
274
+ ```
275
+
276
+ ### Debugging Tips
277
+
278
+ #### Check Element Registration
279
+ ```javascript
280
+ // Verify custom element is registered
281
+ console.log('interact-element registered:',
282
+ customElements.get('interact-element') !== undefined);
283
+ ```
284
+
285
+ #### Inspect Element State
286
+ ```javascript
287
+ const element = document.querySelector('interact-element');
288
+ console.log('Connected:', element.connected);
289
+ console.log('Key:', element.dataset.wixPath);
290
+ console.log('Has child:', element.firstElementChild !== null);
291
+ ```
292
+
293
+ #### Monitor State Changes
294
+ ```javascript
295
+ const element = document.querySelector('interact-element');
296
+ if (element._internals) {
297
+ console.log('Current states:', Array.from(element._internals.states));
298
+ }
299
+ ```
300
+
301
+ ## Performance Considerations
302
+
303
+ ### Element Creation
304
+ - Custom elements are lightweight but avoid creating thousands
305
+ - Use the `selector` property to target elements inside a single custom element component
306
+ - Consider using event delegation for dynamic content
307
+
308
+ ### Memory Management
309
+ - Elements automatically clean up when removed from DOM
310
+ - For SPA routing, ensure proper cleanup during navigation
311
+ - Use `remove()` explicitly if needed for manual cleanup
312
+
313
+ ## Browser Support
314
+
315
+ ### Modern Browsers
316
+ - Adopted style sheets for dynamic CSS
317
+
318
+ ## Best Practices
319
+
320
+ TBD
321
+
322
+ ## Next Steps
323
+
324
+ Now that you understand custom elements:
325
+ - **[State Management](./state-management.md)** - Learn about CSS states vs data attributes
326
+ - **[Conditions and Media Queries](./conditions-and-media-queries.md)** - Create responsive interactions
327
+ - **[Understanding Triggers](./understanding-triggers.md)** - Master trigger types and behaviors