@adia-ai/web-components 0.2.3 → 0.2.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/components/button/button.js +3 -0
- package/components/demo-toggle/demo-toggle.a2ui.json +144 -0
- package/components/demo-toggle/demo-toggle.css +120 -0
- package/components/demo-toggle/demo-toggle.js +144 -0
- package/components/demo-toggle/demo-toggle.test.js +102 -0
- package/components/demo-toggle/demo-toggle.yaml +144 -0
- package/components/index.js +1 -0
- package/components/input/input.js +11 -0
- package/components/list/list.css +21 -0
- package/components/textarea/textarea.js +10 -0
- package/core/icons.js +12 -1
- package/package.json +1 -1
- package/styles/components.css +1 -0
- package/styles/typography.css +1 -1
- package/traits/_catalog.json +257 -4
- package/traits/active-state.test.js +1 -1
- package/traits/anchor-positioning.js +205 -52
- package/traits/anchor-positioning.test.js +77 -4
- package/traits/announcer-stage.js +157 -0
- package/traits/announcer.js +145 -0
- package/traits/announcer.test.js +268 -0
- package/traits/arrow-grid-nav.js +234 -0
- package/traits/arrow-grid-nav.test.js +375 -0
- package/traits/attention-pulse.js +1 -1
- package/traits/attention-pulse.test.js +1 -1
- package/traits/confetti-burst.js +67 -63
- package/traits/confetti-burst.test.js +16 -8
- package/traits/confetti-stage.js +143 -0
- package/traits/confetti.js +44 -47
- package/traits/confetti.test.js +24 -5
- package/traits/count-up.js +31 -6
- package/traits/count-up.test.js +1 -1
- package/traits/declarative.test.js +1 -1
- package/traits/dirty-state.test.js +1 -1
- package/traits/drag-ghost.js +43 -3
- package/traits/drag-ghost.test.js +1 -1
- package/traits/draggable-list-item.js +279 -0
- package/traits/draggable-list-item.test.js +51 -0
- package/traits/draggable.js +14 -4
- package/traits/draggable.test.js +1 -1
- package/traits/drop-target.js +223 -0
- package/traits/drop-target.test.js +241 -0
- package/traits/droppable-collection.js +89 -0
- package/traits/droppable-collection.test.js +99 -0
- package/traits/droppable.js +125 -0
- package/traits/droppable.test.js +54 -0
- package/traits/error-shake.js +157 -0
- package/traits/error-shake.test.js +114 -0
- package/traits/fade-presence.test.js +1 -1
- package/traits/focus-restore.js +135 -0
- package/traits/focus-restore.test.js +202 -0
- package/traits/focus-trap.test.js +1 -1
- package/traits/focusable.test.js +1 -1
- package/traits/glow-focus.js +1 -1
- package/traits/glow-focus.test.js +1 -1
- package/traits/gradient-shift.js +1 -1
- package/traits/gradient-shift.test.js +1 -1
- package/traits/haptic-feedback.test.js +1 -1
- package/traits/hotkey.test.js +1 -1
- package/traits/hoverable.test.js +1 -1
- package/traits/index.js +15 -0
- package/traits/inertia-drag.js +9 -0
- package/traits/inertia-drag.test.js +1 -1
- package/traits/input-mask.js +328 -0
- package/traits/input-mask.test.js +151 -0
- package/traits/intersection-observer.test.js +1 -1
- package/traits/keyboard-nav.test.js +1 -1
- package/traits/keyboard-reorderable.js +254 -0
- package/traits/keyboard-reorderable.test.js +45 -0
- package/traits/layout-animation.js +229 -0
- package/traits/layout-animation.test.js +114 -0
- package/traits/long-press.js +212 -0
- package/traits/long-press.test.js +244 -0
- package/traits/magnetic-hover.js +1 -1
- package/traits/magnetic-hover.test.js +1 -1
- package/traits/noise-texture.js +7 -3
- package/traits/noise-texture.test.js +1 -1
- package/traits/parallax.js +1 -1
- package/traits/parallax.test.js +1 -1
- package/traits/portal.test.js +1 -1
- package/traits/pressable.test.js +1 -1
- package/traits/resettable.js +29 -3
- package/traits/resettable.test.js +34 -1
- package/traits/resizable.test.js +1 -1
- package/traits/resize-observer.test.js +1 -1
- package/traits/ripple.js +1 -1
- package/traits/ripple.test.js +1 -1
- package/traits/roving-tabindex.test.js +1 -1
- package/traits/scale-press.test.js +1 -1
- package/traits/scroll-lock.test.js +1 -1
- package/traits/scroll-progress.js +201 -0
- package/traits/scroll-progress.test.js +182 -0
- package/traits/shimmer-loading.js +1 -1
- package/traits/shimmer-loading.test.js +1 -1
- package/traits/{_smoke.test.js → smoke.test.js} +1 -1
- package/traits/snap-to-grid.test.js +1 -1
- package/traits/sound-feedback.test.js +1 -1
- package/traits/spring-animate.test.js +1 -1
- package/traits/success-checkmark.js +222 -0
- package/traits/success-checkmark.test.js +120 -0
- package/traits/tilt-hover.js +1 -1
- package/traits/tilt-hover.test.js +1 -1
- package/traits/tossable.js +9 -0
- package/traits/tossable.test.js +1 -1
- package/traits/traits-host.test.js +1 -1
- package/traits/typeahead.test.js +1 -1
- package/traits/typewriter.js +1 -1
- package/traits/typewriter.test.js +1 -1
- package/traits/validation.test.js +1 -1
- package/traits/view-transition.js +140 -0
- package/traits/view-transition.test.js +268 -0
- /package/traits/{_motion.js → motion.js} +0 -0
- /package/traits/{_test-helpers.js → test-helpers.js} +0 -0
|
@@ -120,10 +120,14 @@ class UIInput extends UIFormElement {
|
|
|
120
120
|
render() {
|
|
121
121
|
if (!this.#textEl) return;
|
|
122
122
|
|
|
123
|
+
const text = this.value || '';
|
|
124
|
+
|
|
123
125
|
if (this.#isNativeInput) {
|
|
124
126
|
this.#textEl.placeholder = this.placeholder;
|
|
125
127
|
this.#textEl.disabled = this.disabled;
|
|
126
128
|
this.#textEl.readOnly = this.readonly;
|
|
129
|
+
// Sync programmatic value writes (form.reset(), trait assignments).
|
|
130
|
+
if (this.#textEl.value !== text) this.#textEl.value = text;
|
|
127
131
|
} else {
|
|
128
132
|
this.#textEl.setAttribute('data-placeholder', this.placeholder);
|
|
129
133
|
if (this.disabled || this.readonly) {
|
|
@@ -131,6 +135,13 @@ class UIInput extends UIFormElement {
|
|
|
131
135
|
} else {
|
|
132
136
|
this.#textEl.contentEditable = 'plaintext-only';
|
|
133
137
|
}
|
|
138
|
+
// Sync programmatic value writes into the contenteditable surface.
|
|
139
|
+
// Skip when already in sync to avoid clobbering an in-flight edit's
|
|
140
|
+
// caret position.
|
|
141
|
+
if (this.#textEl.textContent !== text) {
|
|
142
|
+
this.#textEl.textContent = text;
|
|
143
|
+
this.#textEl.toggleAttribute('data-empty', !text);
|
|
144
|
+
}
|
|
134
145
|
}
|
|
135
146
|
|
|
136
147
|
if (this.#labelEl) this.#labelEl.textContent = this.label || '';
|
package/components/list/list.css
CHANGED
|
@@ -121,6 +121,9 @@
|
|
|
121
121
|
font-size: var(--list-item-font-size);
|
|
122
122
|
color: var(--list-item-text-color);
|
|
123
123
|
line-height: 1.4;
|
|
124
|
+
/* Defensive floor: empty list-item-ui (no text/icon/children) collapses
|
|
125
|
+
to 0 height and disappears. Keep a visible row instead. */
|
|
126
|
+
min-height: var(--a-space-6);
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
:scope > [slot="icon"] {
|
|
@@ -150,4 +153,22 @@
|
|
|
150
153
|
:scope > [slot="content"] {
|
|
151
154
|
grid-column: 1 / -1;
|
|
152
155
|
}
|
|
156
|
+
|
|
157
|
+
/* ── Active state ──
|
|
158
|
+
`[data-active]` is the consumer-driven "current item" hook used by
|
|
159
|
+
keyboard-nav-style demos and any host that owns its own active-index
|
|
160
|
+
model (separate from list-ui[selectable] / aria-selected). Reuses
|
|
161
|
+
the accent-muted/accent-strong pair so the two mechanisms paint
|
|
162
|
+
consistently. No border-radius on the row itself — dividers (when
|
|
163
|
+
present) span full-width and rounded corners would clash. */
|
|
164
|
+
:scope[data-active] {
|
|
165
|
+
background: var(--a-accent-muted);
|
|
166
|
+
color: var(--a-accent-strong);
|
|
167
|
+
box-shadow: inset 2px 0 0 var(--a-accent-strong);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
:scope[data-active] > [slot="icon"],
|
|
171
|
+
:scope[data-active] > [slot="description"] {
|
|
172
|
+
color: var(--a-accent-strong);
|
|
173
|
+
}
|
|
153
174
|
}
|
|
@@ -55,6 +55,16 @@ class UITextarea extends UIFormElement {
|
|
|
55
55
|
this.#textEl.contentEditable = 'plaintext-only';
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
// Sync programmatic `value` assignments (form.reset(), trait writes,
|
|
59
|
+
// controlled-input patterns) into the contenteditable surface. Skip
|
|
60
|
+
// when the surface already matches to avoid clobbering an in-flight
|
|
61
|
+
// edit's caret.
|
|
62
|
+
const text = this.value || '';
|
|
63
|
+
if (this.#textEl.textContent !== text) {
|
|
64
|
+
this.#textEl.textContent = text;
|
|
65
|
+
this.#textEl.toggleAttribute('data-empty', !text);
|
|
66
|
+
}
|
|
67
|
+
|
|
58
68
|
const label = this.querySelector('[slot="label"]');
|
|
59
69
|
if (label && this.label) label.setAttribute('label', this.label);
|
|
60
70
|
|
package/core/icons.js
CHANGED
|
@@ -212,7 +212,18 @@ const ICON_ALIASES = {
|
|
|
212
212
|
'phone': 'phone', 'location': 'map-pin', 'calendar': 'calendar-blank',
|
|
213
213
|
'time': 'clock', 'user': 'user', 'users': 'users-three',
|
|
214
214
|
'menu': 'list', 'more': 'dots-three', 'dots-vertical': 'dots-three-vertical', 'filter': 'funnel',
|
|
215
|
-
'inbox': 'tray',
|
|
215
|
+
'inbox': 'tray',
|
|
216
|
+
'text-bold': 'text-b', 'bold': 'text-b', 'italic': 'text-italic', 'underline': 'text-underline',
|
|
217
|
+
'reset': 'arrow-counter-clockwise', 'undo': 'arrow-counter-clockwise', 'redo': 'arrow-clockwise',
|
|
218
|
+
'success-checkmark': 'seal-check', 'circuit': 'circuitry',
|
|
219
|
+
'contrast': 'circle-half', 'theme': 'circle-half', 'dark-mode': 'moon', 'light-mode': 'sun',
|
|
220
|
+
'alert-triangle': 'warning', 'alert-octagon': 'warning-octagon', 'alert-diamond': 'warning-diamond',
|
|
221
|
+
'number': 'hash', 'numbered-list': 'list-numbers', 'numeric': 'hash',
|
|
222
|
+
// Phosphor uses suffix-circle for these, but consumers reach for the
|
|
223
|
+
// prefix form ("circle-warning") just as often. Resolve both shapes.
|
|
224
|
+
'circle-warning': 'warning-circle', 'circle-x': 'x-circle',
|
|
225
|
+
'circle-check': 'check-circle', 'circle-info': 'info',
|
|
226
|
+
'circle-question': 'question', 'circle-plus': 'plus-circle', 'circle-minus': 'minus-circle',
|
|
216
227
|
'sort': 'sort-ascending', 'refresh': 'arrow-clockwise', 'download': 'download-simple',
|
|
217
228
|
'upload': 'upload-simple', 'share': 'share-network', 'copy': 'copy-simple',
|
|
218
229
|
'link': 'link-simple', 'external-link': 'arrow-square-out',
|
package/package.json
CHANGED
package/styles/components.css
CHANGED
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
@import "../components/block/block.css";
|
|
84
84
|
@import "../components/text/text.css";
|
|
85
85
|
@import "../components/toggle-group/toggle-group.css";
|
|
86
|
+
@import "../components/demo-toggle/demo-toggle.css";
|
|
86
87
|
@import "../components/richtext/richtext.css";
|
|
87
88
|
@import "../components/stream/stream.css";
|
|
88
89
|
@import "../components/canvas/canvas.css";
|
package/styles/typography.css
CHANGED
|
@@ -256,7 +256,7 @@
|
|
|
256
256
|
|
|
257
257
|
/* section — h2/h3, major division within content */
|
|
258
258
|
--a-section-family: var(--a-font-family-heading);
|
|
259
|
-
--a-section-weight: var(--a-weight-
|
|
259
|
+
--a-section-weight: var(--a-weight-normal);
|
|
260
260
|
--a-section-sm: 16px;
|
|
261
261
|
--a-section-md: 17px;
|
|
262
262
|
--a-section-lg: 19px;
|
package/traits/_catalog.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generated": "scripts/build/traits-catalog.mjs",
|
|
3
3
|
"note": "Generated from packages/web-components/traits/*.js. Do not hand-edit. Run `node scripts/build/traits-catalog.mjs`.",
|
|
4
|
-
"count":
|
|
4
|
+
"count": 56,
|
|
5
5
|
"categories": [
|
|
6
6
|
"animation-feedback",
|
|
7
7
|
"audio-haptics-sensory",
|
|
@@ -14,6 +14,22 @@
|
|
|
14
14
|
"visual-dynamics"
|
|
15
15
|
],
|
|
16
16
|
"traits": [
|
|
17
|
+
{
|
|
18
|
+
"name": "error-shake",
|
|
19
|
+
"category": "animation-feedback",
|
|
20
|
+
"description": "Horizontal lateral oscillation on validation failure",
|
|
21
|
+
"attributes": [
|
|
22
|
+
"data-error-shake-active"
|
|
23
|
+
],
|
|
24
|
+
"events": [
|
|
25
|
+
"error-shake-done"
|
|
26
|
+
],
|
|
27
|
+
"config": [
|
|
28
|
+
"data-error-shake-amplitude",
|
|
29
|
+
"data-error-shake-duration",
|
|
30
|
+
"data-error-shake-trigger"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
17
33
|
{
|
|
18
34
|
"name": "fade-presence",
|
|
19
35
|
"category": "animation-feedback",
|
|
@@ -61,6 +77,21 @@
|
|
|
61
77
|
"data-spring-damping"
|
|
62
78
|
]
|
|
63
79
|
},
|
|
80
|
+
{
|
|
81
|
+
"name": "success-checkmark",
|
|
82
|
+
"category": "animation-feedback",
|
|
83
|
+
"description": "Stroke-draw checkmark on validation success",
|
|
84
|
+
"attributes": [
|
|
85
|
+
"data-success-checkmark-active"
|
|
86
|
+
],
|
|
87
|
+
"events": [
|
|
88
|
+
"success-checkmark-done"
|
|
89
|
+
],
|
|
90
|
+
"config": [
|
|
91
|
+
"data-success-checkmark-position",
|
|
92
|
+
"data-success-checkmark-trigger"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
64
95
|
{
|
|
65
96
|
"name": "tilt-hover",
|
|
66
97
|
"category": "animation-feedback",
|
|
@@ -71,6 +102,23 @@
|
|
|
71
102
|
"events": [],
|
|
72
103
|
"config": []
|
|
73
104
|
},
|
|
105
|
+
{
|
|
106
|
+
"name": "announcer",
|
|
107
|
+
"category": "audio-haptics-sensory",
|
|
108
|
+
"description": "aria-live mirror for AT — announces host state changes via singleton polite/assertive regions",
|
|
109
|
+
"attributes": [
|
|
110
|
+
"data-announcer-active"
|
|
111
|
+
],
|
|
112
|
+
"events": [
|
|
113
|
+
"announcement-made"
|
|
114
|
+
],
|
|
115
|
+
"config": [
|
|
116
|
+
"data-announce-on",
|
|
117
|
+
"data-announce-message",
|
|
118
|
+
"data-announce-priority",
|
|
119
|
+
"data-announce-throttle"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
74
122
|
{
|
|
75
123
|
"name": "attention-pulse",
|
|
76
124
|
"category": "audio-haptics-sensory",
|
|
@@ -95,7 +143,11 @@
|
|
|
95
143
|
],
|
|
96
144
|
"config": [
|
|
97
145
|
"data-count-up-target",
|
|
98
|
-
"data-count-duration"
|
|
146
|
+
"data-count-duration",
|
|
147
|
+
"data-count-prefix",
|
|
148
|
+
"data-count-suffix",
|
|
149
|
+
"data-count-decimals",
|
|
150
|
+
"data-count-locale"
|
|
99
151
|
]
|
|
100
152
|
},
|
|
101
153
|
{
|
|
@@ -147,6 +199,22 @@
|
|
|
147
199
|
"events": [],
|
|
148
200
|
"config": []
|
|
149
201
|
},
|
|
202
|
+
{
|
|
203
|
+
"name": "input-mask",
|
|
204
|
+
"category": "forms-data",
|
|
205
|
+
"description": "Locale-aware as-you-type formatter (phone, credit-card, date, currency)",
|
|
206
|
+
"attributes": [
|
|
207
|
+
"data-input-mask-active",
|
|
208
|
+
"data-input-mask-complete"
|
|
209
|
+
],
|
|
210
|
+
"events": [
|
|
211
|
+
"mask-commit"
|
|
212
|
+
],
|
|
213
|
+
"config": [
|
|
214
|
+
"data-mask-pattern",
|
|
215
|
+
"data-mask-strip-on-commit"
|
|
216
|
+
]
|
|
217
|
+
},
|
|
150
218
|
{
|
|
151
219
|
"name": "resettable",
|
|
152
220
|
"category": "forms-data",
|
|
@@ -185,6 +253,35 @@
|
|
|
185
253
|
"events": [],
|
|
186
254
|
"config": []
|
|
187
255
|
},
|
|
256
|
+
{
|
|
257
|
+
"name": "droppable",
|
|
258
|
+
"category": "input-interaction",
|
|
259
|
+
"description": "Marks an element as a drop target for draggable-list-item; emits dnd-drop-enter / leave / receive",
|
|
260
|
+
"attributes": [
|
|
261
|
+
"data-droppable-id",
|
|
262
|
+
"data-droppable-over",
|
|
263
|
+
"data-droppable-valid"
|
|
264
|
+
],
|
|
265
|
+
"events": [
|
|
266
|
+
"dnd-drop-enter",
|
|
267
|
+
"dnd-drop-leave",
|
|
268
|
+
"dnd-drop-receive"
|
|
269
|
+
],
|
|
270
|
+
"config": []
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"name": "droppable-collection",
|
|
274
|
+
"category": "input-interaction",
|
|
275
|
+
"description": "Coordinates droppable children; re-emits drops as dnd-collection-drop",
|
|
276
|
+
"attributes": [
|
|
277
|
+
"data-droppable-collection-active",
|
|
278
|
+
"data-droppable-collection-dragging"
|
|
279
|
+
],
|
|
280
|
+
"events": [
|
|
281
|
+
"dnd-collection-drop"
|
|
282
|
+
],
|
|
283
|
+
"config": []
|
|
284
|
+
},
|
|
188
285
|
{
|
|
189
286
|
"name": "focusable",
|
|
190
287
|
"category": "input-interaction",
|
|
@@ -205,6 +302,26 @@
|
|
|
205
302
|
"events": [],
|
|
206
303
|
"config": []
|
|
207
304
|
},
|
|
305
|
+
{
|
|
306
|
+
"name": "long-press",
|
|
307
|
+
"category": "input-interaction",
|
|
308
|
+
"description": "Press-and-hold trigger: fires after configurable duration with progress events",
|
|
309
|
+
"attributes": [
|
|
310
|
+
"data-long-press-active",
|
|
311
|
+
"data-long-press-progress",
|
|
312
|
+
"data-long-press-fired"
|
|
313
|
+
],
|
|
314
|
+
"events": [
|
|
315
|
+
"long-press",
|
|
316
|
+
"long-press-cancelled",
|
|
317
|
+
"long-press-progress"
|
|
318
|
+
],
|
|
319
|
+
"config": [
|
|
320
|
+
"data-long-press-duration",
|
|
321
|
+
"data-long-press-tolerance",
|
|
322
|
+
"data-long-press-progress-interval"
|
|
323
|
+
]
|
|
324
|
+
},
|
|
208
325
|
{
|
|
209
326
|
"name": "pressable",
|
|
210
327
|
"category": "input-interaction",
|
|
@@ -249,6 +366,39 @@
|
|
|
249
366
|
"events": [],
|
|
250
367
|
"config": []
|
|
251
368
|
},
|
|
369
|
+
{
|
|
370
|
+
"name": "arrow-grid-nav",
|
|
371
|
+
"category": "keyboard-navigation",
|
|
372
|
+
"description": "2D arrow-key navigation for grids, calendars, menubars (APG grid pattern)",
|
|
373
|
+
"attributes": [
|
|
374
|
+
"data-arrow-grid-nav-active",
|
|
375
|
+
"data-grid-active-row",
|
|
376
|
+
"data-grid-active-col"
|
|
377
|
+
],
|
|
378
|
+
"events": [
|
|
379
|
+
"grid-activate",
|
|
380
|
+
"grid-edge",
|
|
381
|
+
"grid-cell-change"
|
|
382
|
+
],
|
|
383
|
+
"config": [
|
|
384
|
+
"data-grid-columns",
|
|
385
|
+
"data-grid-mode"
|
|
386
|
+
]
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"name": "focus-restore",
|
|
390
|
+
"category": "keyboard-navigation",
|
|
391
|
+
"description": "Capture previously-focused element on connect, restore focus on disconnect",
|
|
392
|
+
"attributes": [
|
|
393
|
+
"data-focus-restore-active"
|
|
394
|
+
],
|
|
395
|
+
"events": [
|
|
396
|
+
"focus-restored"
|
|
397
|
+
],
|
|
398
|
+
"config": [
|
|
399
|
+
"data-focus-restore-on-mount"
|
|
400
|
+
]
|
|
401
|
+
},
|
|
252
402
|
{
|
|
253
403
|
"name": "focus-trap",
|
|
254
404
|
"category": "keyboard-navigation",
|
|
@@ -291,6 +441,22 @@
|
|
|
291
441
|
],
|
|
292
442
|
"config": []
|
|
293
443
|
},
|
|
444
|
+
{
|
|
445
|
+
"name": "keyboard-reorderable",
|
|
446
|
+
"category": "keyboard-navigation",
|
|
447
|
+
"description": "Keyboard alternative to draggable-list-item: arrow keys + Space to lift / drop / Esc to cancel",
|
|
448
|
+
"attributes": [
|
|
449
|
+
"data-keyboard-reorderable-lifting",
|
|
450
|
+
"data-keyboard-reorderable-id"
|
|
451
|
+
],
|
|
452
|
+
"events": [
|
|
453
|
+
"dnd-lift",
|
|
454
|
+
"dnd-drop-target-change",
|
|
455
|
+
"dnd-drop",
|
|
456
|
+
"dnd-drop-cancel"
|
|
457
|
+
],
|
|
458
|
+
"config": []
|
|
459
|
+
},
|
|
294
460
|
{
|
|
295
461
|
"name": "roving-tabindex",
|
|
296
462
|
"category": "keyboard-navigation",
|
|
@@ -317,7 +483,8 @@
|
|
|
317
483
|
"description": "Positions relative to an anchor element",
|
|
318
484
|
"attributes": [
|
|
319
485
|
"data-anchor-positioning-placed",
|
|
320
|
-
"data-anchor-placement-actual"
|
|
486
|
+
"data-anchor-placement-actual",
|
|
487
|
+
"data-anchor-mode"
|
|
321
488
|
],
|
|
322
489
|
"events": [
|
|
323
490
|
"anchor-placed"
|
|
@@ -380,6 +547,22 @@
|
|
|
380
547
|
"events": [],
|
|
381
548
|
"config": []
|
|
382
549
|
},
|
|
550
|
+
{
|
|
551
|
+
"name": "scroll-progress",
|
|
552
|
+
"category": "layout-measurement",
|
|
553
|
+
"description": "Page or element scroll progress as 0..1 attribute + CSS variable + event",
|
|
554
|
+
"attributes": [
|
|
555
|
+
"data-scroll-progress-active",
|
|
556
|
+
"data-scroll-progress"
|
|
557
|
+
],
|
|
558
|
+
"events": [
|
|
559
|
+
"scroll-progress"
|
|
560
|
+
],
|
|
561
|
+
"config": [
|
|
562
|
+
"data-scroll-progress-mode",
|
|
563
|
+
"data-scroll-container"
|
|
564
|
+
]
|
|
565
|
+
},
|
|
383
566
|
{
|
|
384
567
|
"name": "drag-ghost",
|
|
385
568
|
"category": "motion-positioning",
|
|
@@ -402,6 +585,41 @@
|
|
|
402
585
|
],
|
|
403
586
|
"config": []
|
|
404
587
|
},
|
|
588
|
+
{
|
|
589
|
+
"name": "draggable-list-item",
|
|
590
|
+
"category": "motion-positioning",
|
|
591
|
+
"description": "Pointer drag for list reordering; emits dnd-lift/drop-target-change/drop/drop-cancel",
|
|
592
|
+
"attributes": [
|
|
593
|
+
"data-draggable-list-item-lifting",
|
|
594
|
+
"data-draggable-list-item-id"
|
|
595
|
+
],
|
|
596
|
+
"events": [
|
|
597
|
+
"dnd-lift",
|
|
598
|
+
"dnd-drop-target-change",
|
|
599
|
+
"dnd-drop",
|
|
600
|
+
"dnd-drop-cancel"
|
|
601
|
+
],
|
|
602
|
+
"config": []
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"name": "drop-target",
|
|
606
|
+
"category": "motion-positioning",
|
|
607
|
+
"description": "Declarative drop zone: hit-testing, accept-reject, drag-over feedback",
|
|
608
|
+
"attributes": [
|
|
609
|
+
"data-drop-target-active",
|
|
610
|
+
"data-drop-target-over",
|
|
611
|
+
"data-drop-target-rejected"
|
|
612
|
+
],
|
|
613
|
+
"events": [
|
|
614
|
+
"drop-enter",
|
|
615
|
+
"drop-leave",
|
|
616
|
+
"drop-receive",
|
|
617
|
+
"drop-rejected"
|
|
618
|
+
],
|
|
619
|
+
"config": [
|
|
620
|
+
"data-drop-target-accepts"
|
|
621
|
+
]
|
|
622
|
+
},
|
|
405
623
|
{
|
|
406
624
|
"name": "inertia-drag",
|
|
407
625
|
"category": "motion-positioning",
|
|
@@ -414,6 +632,22 @@
|
|
|
414
632
|
],
|
|
415
633
|
"config": []
|
|
416
634
|
},
|
|
635
|
+
{
|
|
636
|
+
"name": "layout-animation",
|
|
637
|
+
"category": "motion-positioning",
|
|
638
|
+
"description": "FLIP-style layout transition: animate from old to new bounds without explicit coordinates",
|
|
639
|
+
"attributes": [
|
|
640
|
+
"data-layout-animation-active"
|
|
641
|
+
],
|
|
642
|
+
"events": [
|
|
643
|
+
"layout-animation-done"
|
|
644
|
+
],
|
|
645
|
+
"config": [
|
|
646
|
+
"data-layout-animate-duration",
|
|
647
|
+
"data-layout-animate-easing",
|
|
648
|
+
"data-layout-animate-trigger"
|
|
649
|
+
]
|
|
650
|
+
},
|
|
417
651
|
{
|
|
418
652
|
"name": "resizable",
|
|
419
653
|
"category": "motion-positioning",
|
|
@@ -453,6 +687,23 @@
|
|
|
453
687
|
"data-tossable-bounds"
|
|
454
688
|
]
|
|
455
689
|
},
|
|
690
|
+
{
|
|
691
|
+
"name": "view-transition",
|
|
692
|
+
"category": "motion-positioning",
|
|
693
|
+
"description": "Wraps document.startViewTransition() for morph animations between DOM states",
|
|
694
|
+
"attributes": [
|
|
695
|
+
"data-view-transition-active"
|
|
696
|
+
],
|
|
697
|
+
"events": [
|
|
698
|
+
"view-transition-start",
|
|
699
|
+
"view-transition-end"
|
|
700
|
+
],
|
|
701
|
+
"config": [
|
|
702
|
+
"data-view-transition-name",
|
|
703
|
+
"data-view-transition-duration",
|
|
704
|
+
"data-view-transition-easing"
|
|
705
|
+
]
|
|
706
|
+
},
|
|
456
707
|
{
|
|
457
708
|
"name": "glow-focus",
|
|
458
709
|
"category": "visual-dynamics",
|
|
@@ -481,7 +732,9 @@
|
|
|
481
732
|
"data-noise-texture-active"
|
|
482
733
|
],
|
|
483
734
|
"events": [],
|
|
484
|
-
"config": [
|
|
735
|
+
"config": [
|
|
736
|
+
"data-noise-strength"
|
|
737
|
+
]
|
|
485
738
|
},
|
|
486
739
|
{
|
|
487
740
|
"name": "parallax",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
2
|
import { activeState } from './active-state.js';
|
|
3
|
-
import { mountHost, connectTrait, resetDOM } from './
|
|
3
|
+
import { mountHost, connectTrait, resetDOM } from './test-helpers.js';
|
|
4
4
|
|
|
5
5
|
describe('active-state', () => {
|
|
6
6
|
beforeEach(resetDOM);
|