@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.
- package/dist/cjs/index.js +2 -23
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react.js +15 -0
- package/dist/cjs/react.js.map +1 -0
- package/dist/cjs/web.js +2 -0
- package/dist/cjs/web.js.map +1 -0
- package/dist/es/index.js +8 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/react.js +650 -0
- package/dist/es/react.js.map +1 -0
- package/dist/es/web.js +56 -0
- package/dist/es/web.js.map +1 -0
- package/dist/index-BoEj_7uB.js +18 -0
- package/dist/index-BoEj_7uB.js.map +1 -0
- package/dist/index-DUTdIvfw.mjs +7969 -0
- package/dist/index-DUTdIvfw.mjs.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types/core/Interact.d.ts +25 -10
- package/dist/types/core/Interact.d.ts.map +1 -0
- package/dist/types/core/InteractionController.d.ts +24 -0
- package/dist/types/core/InteractionController.d.ts.map +1 -0
- package/dist/types/core/add.d.ts +4 -3
- package/dist/types/core/add.d.ts.map +1 -0
- package/dist/types/core/css.d.ts +3 -0
- package/dist/types/core/css.d.ts.map +1 -0
- package/dist/types/core/remove.d.ts +3 -1
- package/dist/types/core/remove.d.ts.map +1 -0
- package/dist/types/core/utilities.d.ts +1 -0
- package/dist/types/core/utilities.d.ts.map +1 -0
- package/dist/types/dom/api.d.ts +3 -0
- package/dist/types/dom/api.d.ts.map +1 -0
- package/dist/types/handlers/animationEnd.d.ts +3 -2
- package/dist/types/handlers/animationEnd.d.ts.map +1 -0
- package/dist/types/handlers/click.d.ts +3 -2
- package/dist/types/handlers/click.d.ts.map +1 -0
- package/dist/types/handlers/hover.d.ts +3 -2
- package/dist/types/handlers/hover.d.ts.map +1 -0
- package/dist/types/handlers/index.d.ts +1 -0
- package/dist/types/handlers/index.d.ts.map +1 -0
- package/dist/types/handlers/pointerMove.d.ts +3 -2
- package/dist/types/handlers/pointerMove.d.ts.map +1 -0
- package/dist/types/handlers/utilities.d.ts +1 -0
- package/dist/types/handlers/utilities.d.ts.map +1 -0
- package/dist/types/handlers/viewEnter.d.ts +3 -2
- package/dist/types/handlers/viewEnter.d.ts.map +1 -0
- package/dist/types/handlers/viewProgress.d.ts +4 -3
- package/dist/types/handlers/viewProgress.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/react/Interaction.d.ts +10 -0
- package/dist/types/react/Interaction.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +8 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/react/interactRef.d.ts +3 -0
- package/dist/types/react/interactRef.d.ts.map +1 -0
- package/dist/types/types.d.ts +31 -12
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils.d.ts +2 -1
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/{InteractElement.d.ts → web/InteractElement.d.ts} +117 -77
- package/dist/types/web/InteractElement.d.ts.map +1 -0
- package/dist/types/web/defineInteractElement.d.ts +2 -0
- package/dist/types/web/defineInteractElement.d.ts.map +1 -0
- package/dist/types/web/index.d.ts +6 -0
- package/dist/types/web/index.d.ts.map +1 -0
- package/docs/README.md +211 -0
- package/docs/advanced/README.md +164 -0
- package/docs/api/README.md +157 -0
- package/docs/api/element-selection.md +607 -0
- package/docs/api/functions.md +638 -0
- package/docs/api/interact-class.md +663 -0
- package/docs/api/interact-element.md +565 -0
- package/docs/api/interaction-controller.md +450 -0
- package/docs/api/types.md +957 -0
- package/docs/examples/README.md +212 -0
- package/docs/examples/click-interactions.md +977 -0
- package/docs/examples/entrance-animations.md +935 -0
- package/docs/examples/hover-effects.md +930 -0
- package/docs/examples/list-patterns.md +737 -0
- package/docs/guides/README.md +49 -0
- package/docs/guides/conditions-and-media-queries.md +1068 -0
- package/docs/guides/configuration-structure.md +726 -0
- package/docs/guides/custom-elements.md +327 -0
- package/docs/guides/effects-and-animations.md +634 -0
- package/docs/guides/getting-started.md +379 -0
- package/docs/guides/lists-and-dynamic-content.md +713 -0
- package/docs/guides/state-management.md +747 -0
- package/docs/guides/understanding-triggers.md +690 -0
- package/docs/integration/README.md +264 -0
- package/docs/integration/react.md +605 -0
- package/package.json +73 -56
- package/rules/Integration.md +255 -0
- package/rules/click-rules.md +533 -0
- package/rules/full-lean.md +346 -0
- package/rules/hover-rules.md +593 -0
- package/rules/pointermove-rules.md +1341 -0
- package/rules/scroll-list-rules.md +900 -0
- package/rules/viewenter-rules.md +1015 -0
- package/rules/viewprogress-rules.md +1044 -0
- package/dist/cjs/InteractElement.js +0 -163
- package/dist/cjs/InteractElement.js.map +0 -1
- package/dist/cjs/__tests__/interact.spec.js +0 -2094
- package/dist/cjs/__tests__/interact.spec.js.map +0 -1
- package/dist/cjs/__tests__/viewEnter.spec.js +0 -207
- package/dist/cjs/__tests__/viewEnter.spec.js.map +0 -1
- package/dist/cjs/core/Interact.js +0 -257
- package/dist/cjs/core/Interact.js.map +0 -1
- package/dist/cjs/core/add.js +0 -250
- package/dist/cjs/core/add.js.map +0 -1
- package/dist/cjs/core/remove.js +0 -35
- package/dist/cjs/core/remove.js.map +0 -1
- package/dist/cjs/core/utilities.js +0 -16
- package/dist/cjs/core/utilities.js.map +0 -1
- package/dist/cjs/external-types.d.js +0 -2
- package/dist/cjs/external-types.d.js.map +0 -1
- package/dist/cjs/handlers/animationEnd.js +0 -37
- package/dist/cjs/handlers/animationEnd.js.map +0 -1
- package/dist/cjs/handlers/click.js +0 -122
- package/dist/cjs/handlers/click.js.map +0 -1
- package/dist/cjs/handlers/hover.js +0 -147
- package/dist/cjs/handlers/hover.js.map +0 -1
- package/dist/cjs/handlers/index.js +0 -32
- package/dist/cjs/handlers/index.js.map +0 -1
- package/dist/cjs/handlers/pointerMove.js +0 -49
- package/dist/cjs/handlers/pointerMove.js.map +0 -1
- package/dist/cjs/handlers/utilities.js +0 -49
- package/dist/cjs/handlers/utilities.js.map +0 -1
- package/dist/cjs/handlers/viewEnter.js +0 -131
- package/dist/cjs/handlers/viewEnter.js.map +0 -1
- package/dist/cjs/handlers/viewProgress.js +0 -79
- package/dist/cjs/handlers/viewProgress.js.map +0 -1
- package/dist/cjs/test-types.d.js +0 -2
- package/dist/cjs/test-types.d.js.map +0 -1
- package/dist/cjs/types.js +0 -2
- package/dist/cjs/types.js.map +0 -1
- package/dist/cjs/utils.js +0 -98
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/InteractElement.js +0 -157
- package/dist/esm/InteractElement.js.map +0 -1
- package/dist/esm/__tests__/interact.spec.js +0 -2102
- package/dist/esm/__tests__/interact.spec.js.map +0 -1
- package/dist/esm/__tests__/viewEnter.spec.js +0 -210
- package/dist/esm/__tests__/viewEnter.spec.js.map +0 -1
- package/dist/esm/core/Interact.js +0 -251
- package/dist/esm/core/Interact.js.map +0 -1
- package/dist/esm/core/add.js +0 -245
- package/dist/esm/core/add.js.map +0 -1
- package/dist/esm/core/remove.js +0 -30
- package/dist/esm/core/remove.js.map +0 -1
- package/dist/esm/core/utilities.js +0 -14
- package/dist/esm/core/utilities.js.map +0 -1
- package/dist/esm/external-types.d.js +0 -2
- package/dist/esm/external-types.d.js.map +0 -1
- package/dist/esm/handlers/animationEnd.js +0 -33
- package/dist/esm/handlers/animationEnd.js.map +0 -1
- package/dist/esm/handlers/click.js +0 -122
- package/dist/esm/handlers/click.js.map +0 -1
- package/dist/esm/handlers/hover.js +0 -147
- package/dist/esm/handlers/hover.js.map +0 -1
- package/dist/esm/handlers/index.js +0 -27
- package/dist/esm/handlers/index.js.map +0 -1
- package/dist/esm/handlers/pointerMove.js +0 -48
- package/dist/esm/handlers/pointerMove.js.map +0 -1
- package/dist/esm/handlers/utilities.js +0 -43
- package/dist/esm/handlers/utilities.js.map +0 -1
- package/dist/esm/handlers/viewEnter.js +0 -133
- package/dist/esm/handlers/viewEnter.js.map +0 -1
- package/dist/esm/handlers/viewProgress.js +0 -75
- package/dist/esm/handlers/viewProgress.js.map +0 -1
- package/dist/esm/index.js +0 -5
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/test-types.d.js +0 -2
- package/dist/esm/test-types.d.js.map +0 -1
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/utils.js +0 -92
- package/dist/esm/utils.js.map +0 -1
- package/dist/types/__tests__/interact.spec.d.ts +0 -1
- package/dist/types/__tests__/viewEnter.spec.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,73 +1,90 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/interact",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
|
|
6
|
-
"email": "wow-dev@wix.com"
|
|
7
|
-
},
|
|
8
|
-
"license": "UNLICENSED",
|
|
3
|
+
"version": "2.0.0-rc.4",
|
|
4
|
+
"description": "A powerful, declarative interaction library for creating engaging web apps.",
|
|
5
|
+
"license": "MIT",
|
|
9
6
|
"main": "dist/cjs/index.js",
|
|
10
|
-
"module": "dist/
|
|
11
|
-
"sideEffects": false,
|
|
7
|
+
"module": "dist/es/index.js",
|
|
12
8
|
"types": "dist/types/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/types/index.d.ts",
|
|
12
|
+
"import": "./dist/es/index.js",
|
|
13
|
+
"require": "./dist/cjs/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./react": {
|
|
16
|
+
"types": "./dist/types/react/index.d.ts",
|
|
17
|
+
"import": "./dist/es/react.js",
|
|
18
|
+
"require": "./dist/cjs/react.js"
|
|
19
|
+
},
|
|
20
|
+
"./web": {
|
|
21
|
+
"types": "./dist/types/web/index.d.ts",
|
|
22
|
+
"import": "./dist/es/web.js",
|
|
23
|
+
"require": "./dist/cjs/web.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
13
26
|
"files": [
|
|
14
|
-
"dist
|
|
15
|
-
"
|
|
16
|
-
"
|
|
27
|
+
"dist",
|
|
28
|
+
"rules",
|
|
29
|
+
"docs"
|
|
17
30
|
],
|
|
18
|
-
"
|
|
19
|
-
"registry": "https://registry.npmjs.org/",
|
|
20
|
-
"access": "public"
|
|
21
|
-
},
|
|
31
|
+
"sideEffects": false,
|
|
22
32
|
"scripts": {
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
33
|
+
"dev": "vite dev --open",
|
|
34
|
+
"build": "rimraf dist && vite build && npm run build:types",
|
|
35
|
+
"build:types": "tsc -p tsconfig.build.json",
|
|
36
|
+
"lint": "tsc --noEmit",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"coverage": "vitest run --coverage"
|
|
29
39
|
},
|
|
30
|
-
"
|
|
31
|
-
"
|
|
40
|
+
"keywords": [
|
|
41
|
+
"animation",
|
|
42
|
+
"javascript",
|
|
43
|
+
"css",
|
|
44
|
+
"waapi"
|
|
45
|
+
],
|
|
46
|
+
"author": {
|
|
47
|
+
"name": "wow!Team",
|
|
48
|
+
"email": "wow-dev@wix.com"
|
|
49
|
+
},
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "https://github.com/wix-incubator/interact"
|
|
53
|
+
},
|
|
54
|
+
"bugs": {
|
|
55
|
+
"url": "https://github.com/wix-incubator/interact/issues"
|
|
32
56
|
},
|
|
33
57
|
"dependencies": {
|
|
34
|
-
"@
|
|
35
|
-
"@wix/motion": "1.656.0",
|
|
58
|
+
"@wix/motion": "^1.0.0",
|
|
36
59
|
"fastdom": "^1.0.12",
|
|
37
|
-
"fizban": "^0.7.
|
|
60
|
+
"fizban": "^0.7.2",
|
|
38
61
|
"kuliso": "^0.4.13"
|
|
39
62
|
},
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"@wix/eslint-config-yoshi": "^6.163.0",
|
|
44
|
-
"@wix/jest-yoshi-preset": "^6.163.0",
|
|
45
|
-
"@wix/yoshi-flow-library": "^6.163.0",
|
|
46
|
-
"ts-jest": "^29.2.5",
|
|
47
|
-
"typescript": "~4.9.5"
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"react": "^18.3.1",
|
|
65
|
+
"react-dom": "^18.3.1"
|
|
48
66
|
},
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
"yoshiFlowLibrary": {
|
|
53
|
-
"buildEsmWithBabel": true
|
|
54
|
-
},
|
|
55
|
-
"eslintConfig": {
|
|
56
|
-
"extends": "@wix/eslint-config-yoshi"
|
|
57
|
-
},
|
|
58
|
-
"wix": {
|
|
59
|
-
"artifact": {
|
|
60
|
-
"groupId": "com.wixpress.wow",
|
|
61
|
-
"artifactId": "interact"
|
|
67
|
+
"peerDependenciesMeta": {
|
|
68
|
+
"react": {
|
|
69
|
+
"optional": true
|
|
62
70
|
},
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"lint"
|
|
66
|
-
]
|
|
71
|
+
"react-dom": {
|
|
72
|
+
"optional": true
|
|
67
73
|
}
|
|
68
74
|
},
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
"devDependencies": {
|
|
76
|
+
"@testing-library/dom": "^10.4.0",
|
|
77
|
+
"@testing-library/react": "^16.1.0",
|
|
78
|
+
"@types/react": "^18.3.2",
|
|
79
|
+
"@types/react-dom": "^18.3.0",
|
|
80
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
81
|
+
"@vitest/coverage-v8": "^4.0.14",
|
|
82
|
+
"jsdom": "^24.0.0",
|
|
83
|
+
"react": "^18.3.1",
|
|
84
|
+
"react-dom": "^18.3.1",
|
|
85
|
+
"rimraf": "^6.0.1",
|
|
86
|
+
"typescript": "^5.9.3",
|
|
87
|
+
"vite": "^7.2.2",
|
|
88
|
+
"vitest": "^4.0.14"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# @wix/interact Integration Rules
|
|
2
|
+
|
|
3
|
+
This document outlines the rules and best practices for generating code that integrates `@wix/interact` into a webpage.
|
|
4
|
+
|
|
5
|
+
## 1. Overview
|
|
6
|
+
|
|
7
|
+
`@wix/interact` is a library for creating interactive animations and effects triggered by user actions (click, hover, scroll, etc.). It works by binding **Triggers** and **Effects** to specific **Elements**.
|
|
8
|
+
|
|
9
|
+
## 2. Core Components
|
|
10
|
+
|
|
11
|
+
### `<interact-element>`
|
|
12
|
+
The custom element wrapper is **required** for any element that triggers an interaction or recieves an effect.
|
|
13
|
+
|
|
14
|
+
**Rules:**
|
|
15
|
+
- MUST have a `data-interact-key` attribute that is unique within the scope.
|
|
16
|
+
- MUST contain at least one child element.
|
|
17
|
+
- **Usage:**
|
|
18
|
+
```html
|
|
19
|
+
<interact-element data-interact-key="my-button">
|
|
20
|
+
<button>Click Me</button>
|
|
21
|
+
</interact-element>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### `Interact.create(config)`
|
|
25
|
+
The entry point for initializing interactions.
|
|
26
|
+
|
|
27
|
+
**Rules:**
|
|
28
|
+
- MUST be called at least once with the full configuration, or per page for single-page apps.
|
|
29
|
+
- **Usage:**
|
|
30
|
+
```javascript
|
|
31
|
+
import { Interact } from '@wix/interact';
|
|
32
|
+
Interact.create(config);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 3. Configuration Schema
|
|
36
|
+
|
|
37
|
+
The `InteractConfig` object defines the behavior.
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
type InteractConfig = {
|
|
41
|
+
interactions: Interaction[]; // Required: Array of interaction definitions
|
|
42
|
+
effects?: Record<string, Effect>; // Optional: Reusable named effects
|
|
43
|
+
conditions?: Record<string, Condition>; // Optional: Reusable conditions (media queries)
|
|
44
|
+
};
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Interaction Definition
|
|
48
|
+
```typescript
|
|
49
|
+
{
|
|
50
|
+
key: 'element-key', // Matches data-interact-key
|
|
51
|
+
trigger: 'trigger-type', // e.g., 'hover', 'click'
|
|
52
|
+
selector?: '.child-cls', // Optional: Targets specific child inside the interact-element
|
|
53
|
+
listContainer?: '.list', // Optional: A selector for the element containing a list, for interactions on lists
|
|
54
|
+
params?: { ... }, // Trigger-specific parameters
|
|
55
|
+
conditions?: ['cond-id'], // Array of condition IDs
|
|
56
|
+
effects: [ ... ] // Array of effects to apply
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Element Selection Hierarchy
|
|
61
|
+
1. **`listContainer`**: If present, selects a container to target its immediate children as list items.
|
|
62
|
+
2. **`selector`**: Matches elements within the root, or within each list item.
|
|
63
|
+
3. **Fallback**: If neither is provided, targets the **first child** of `<interact-element>`.
|
|
64
|
+
|
|
65
|
+
## 4. Generating Critical CSS for Entrance Animations
|
|
66
|
+
|
|
67
|
+
### `generate(config)`
|
|
68
|
+
Generates critical CSS styles that prevent flash-of-unstyled-content (FOUC) for elements with `viewEnter` entrance animations.
|
|
69
|
+
|
|
70
|
+
**Rules:**
|
|
71
|
+
- MUST be called server-side or at build time to generate static CSS.
|
|
72
|
+
- The generated CSS hides the first child of elements marked with `data-interact-initial="true"` until their entrance animation completes.
|
|
73
|
+
- Only affects users who have not requested reduced motion (`prefers-reduced-motion: no-preference`).
|
|
74
|
+
- The `<interact-element>` MUST have `data-interact-initial="true"` attribute to be affected by the generated CSS.
|
|
75
|
+
|
|
76
|
+
**Usage:**
|
|
77
|
+
```javascript
|
|
78
|
+
import { generate } from '@wix/interact';
|
|
79
|
+
|
|
80
|
+
const config = {/*...*/};
|
|
81
|
+
|
|
82
|
+
// Generate CSS at build time or on server
|
|
83
|
+
const css = generate(config);
|
|
84
|
+
|
|
85
|
+
// Include in your HTML template
|
|
86
|
+
const html = `
|
|
87
|
+
<!DOCTYPE html>
|
|
88
|
+
<html>
|
|
89
|
+
<head>
|
|
90
|
+
<style>${css}</style>
|
|
91
|
+
</head>
|
|
92
|
+
<body>
|
|
93
|
+
<interact-element data-interact-key="hero" data-interact-initial="true">
|
|
94
|
+
<section class="hero">
|
|
95
|
+
...
|
|
96
|
+
</section>
|
|
97
|
+
</interact-element>
|
|
98
|
+
<script type="module" src="./main.js"></script>
|
|
99
|
+
</body>
|
|
100
|
+
</html>
|
|
101
|
+
`;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**When to Use:**
|
|
105
|
+
- For elements that have a `viewEnter` trigger with `type: 'once'` and an effect on same element
|
|
106
|
+
- To prevent elements from being visible before their entrance animation plays
|
|
107
|
+
- For server-side rendering (SSR) or static site generation (SSG) scenarios
|
|
108
|
+
|
|
109
|
+
**Important Notes:**
|
|
110
|
+
- The attribute `data-motion-enter="done"` is automatically set by the runtime when the entrance animation completes
|
|
111
|
+
- Users with `prefers-reduced-motion: reduce` will see elements immediately (no hiding)
|
|
112
|
+
- The CSS resets transform properties to prevent any inherited transforms from affecting the hidden state
|
|
113
|
+
|
|
114
|
+
## 5. Triggers & Behaviors
|
|
115
|
+
|
|
116
|
+
| Trigger | Description | Key Parameters |
|
|
117
|
+
| :--- | :--- | :--- |
|
|
118
|
+
| `hover` | Mouse enter/leave | `type`: 'once', 'alternate', 'repeat', 'state' for animations, or `method`: 'add', 'remove', 'toggle', 'clear' for states |
|
|
119
|
+
| `click` | Mouse click | `type`: 'once', 'alternate', 'repeat', 'state' for animations, or `method`: 'add', 'remove', 'toggle', 'clear' for states |
|
|
120
|
+
| `viewEnter` | Element enters viewport | `type`: 'once', 'alternate', 'repeat', 'state'; `threshold` (0-1) |
|
|
121
|
+
| `viewProgress` | Scroll progress inside viewport | (No specific params, uses effect ranges) |
|
|
122
|
+
| `pointerMove` | Mouse movement | `hitArea`: 'self' (default) or 'root' |
|
|
123
|
+
| `animationEnd` | Chaining animations | `effectId`: ID of the previous effect |
|
|
124
|
+
|
|
125
|
+
## 6. Effects & Animations
|
|
126
|
+
|
|
127
|
+
Effects define *what* happens. They can be inline or referenced by ID.
|
|
128
|
+
|
|
129
|
+
### Effect Types
|
|
130
|
+
|
|
131
|
+
#### 1. Named Effects (Pre-built)
|
|
132
|
+
Use Motion effect presets for consistency.
|
|
133
|
+
```typescript
|
|
134
|
+
{
|
|
135
|
+
namedEffect: { type: 'FadeIn' },
|
|
136
|
+
duration: 800,
|
|
137
|
+
easing: 'ease-out'
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### 2. Keyframe Effects (Custom)
|
|
142
|
+
Define explicit Web Animations API-like keyframes.
|
|
143
|
+
```typescript
|
|
144
|
+
{
|
|
145
|
+
keyframeEffect: {
|
|
146
|
+
name: 'custom-slide',
|
|
147
|
+
keyframes: [
|
|
148
|
+
{ transform: 'translateY(20px)', opacity: 0 },
|
|
149
|
+
{ transform: 'translateY(0)', opacity: 1 }
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
duration: 500
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### 3. Transition Effects
|
|
157
|
+
Smoothly transition CSS properties.
|
|
158
|
+
```typescript
|
|
159
|
+
{
|
|
160
|
+
transition: {
|
|
161
|
+
duration: 300,
|
|
162
|
+
styleProperties: [{ name: 'backgroundColor', value: 'red' }]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
#### 4. Scroll Effects
|
|
168
|
+
Used with `viewProgress`, linked to scroll progress while element is inside viewport.
|
|
169
|
+
```typescript
|
|
170
|
+
{
|
|
171
|
+
keyframeEffect: { ... },
|
|
172
|
+
rangeStart: { name: 'cover', offset: { value: 0, type: 'percentage' } },
|
|
173
|
+
rangeEnd: { name: 'cover', offset: { value: 100, type: 'percentage' } }
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
#### 5. Mouse Effects
|
|
178
|
+
Used with `pointerMove`, linked to mouse progress while moving over an element.
|
|
179
|
+
```typescript
|
|
180
|
+
{
|
|
181
|
+
namedEffect: { type: 'Track3DMouse' },
|
|
182
|
+
centeredToTarget: true
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Targeting
|
|
187
|
+
- **Self**: Omit `key` in the effect to target the trigger element. If using `selector` for trigger, also specify it again for the effect target.
|
|
188
|
+
- **Cross-Targeting**: Specify a different `key` and/or `selector` in the effect to animate a different element.
|
|
189
|
+
|
|
190
|
+
## 7. Examples
|
|
191
|
+
|
|
192
|
+
### Basic Hover (Scale)
|
|
193
|
+
```typescript
|
|
194
|
+
const config = {
|
|
195
|
+
effects: {
|
|
196
|
+
scaleUp: {
|
|
197
|
+
transitionProperties: [
|
|
198
|
+
{
|
|
199
|
+
name: 'transform',
|
|
200
|
+
value: 'scale(1.1)',
|
|
201
|
+
duration: 300,
|
|
202
|
+
delay: 100,
|
|
203
|
+
easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)'
|
|
204
|
+
}
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
interactions: [{
|
|
209
|
+
key: 'btn',
|
|
210
|
+
trigger: 'hover',
|
|
211
|
+
effects: [{
|
|
212
|
+
effectId: 'scaleUp'
|
|
213
|
+
}]
|
|
214
|
+
}]
|
|
215
|
+
};
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Viewport Entrance
|
|
219
|
+
```typescript
|
|
220
|
+
const config = {
|
|
221
|
+
interactions: [{
|
|
222
|
+
key: 'hero',
|
|
223
|
+
trigger: 'viewEnter',
|
|
224
|
+
params: { type: 'once', threshold: 0.2 },
|
|
225
|
+
effects: [{
|
|
226
|
+
namedEffect: { type: 'FadeIn' },
|
|
227
|
+
duration: 800
|
|
228
|
+
}]
|
|
229
|
+
}]
|
|
230
|
+
};
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Interactive Toggle (Click)
|
|
234
|
+
```typescript
|
|
235
|
+
const config = {
|
|
236
|
+
interactions: [{
|
|
237
|
+
key: 'menu-btn',
|
|
238
|
+
trigger: 'click',
|
|
239
|
+
params: { type: 'alternate' },
|
|
240
|
+
effects: [{
|
|
241
|
+
key: 'menu-content',
|
|
242
|
+
effectId: 'menu-open', // Creates state 'menu-open'
|
|
243
|
+
keyframeEffect: {
|
|
244
|
+
name: 'slide',
|
|
245
|
+
keyframes: [
|
|
246
|
+
{ transform: 'translateX(-100%)' },
|
|
247
|
+
{ transform: 'translateX(0)' }
|
|
248
|
+
]
|
|
249
|
+
},
|
|
250
|
+
duration: 300
|
|
251
|
+
}]
|
|
252
|
+
}]
|
|
253
|
+
};
|
|
254
|
+
```
|
|
255
|
+
|