@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
|
@@ -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
|