agent-robot-avatar 0.2.1 → 0.3.1

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/CHANGELOG.md CHANGED
@@ -6,6 +6,44 @@ The project follows Semantic Versioning for public releases. Internal developmen
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.1] - 2026-09-10
10
+
11
+ ### Fixed
12
+
13
+ - Prevented disconnect cleanup from recreating per-instance media-query listeners and observers; reattaching now initializes connected runtime resources once without emitting cleanup-only lifecycle events.
14
+ - Decoupled automatic sleep timing from frame rendering so `motion="reduce"` can pause continuous drawing without disabling `auto-sleep`, while active waiting/input continue to take priority.
15
+ - Ensured reduced-motion state changes commit their final static SVG before rendering pauses, including the fully closed sleep pose.
16
+ - Made `stopWaiting()` terminate the action it actually resets: waiting ends normally, other active program actions are cancelled once, and idle calls emit no false terminal event.
17
+ - Separated explicit `noteActivity()` calls from ambient DOM activity so host calls inside real event handlers keep API semantics while automatic wakeups continue to obey `wake-on`.
18
+ - Restricted action alias lookup to declared keys so prototype-like names such as `constructor` and `__proto__` fail before changing waiting/action state.
19
+
20
+ ## [0.3.0] - 2026-09-10
21
+
22
+ ### Added
23
+
24
+ - Added `wake-on="activity|interaction|manual"` to control automatic wake behavior while preserving `activity` as the default.
25
+ - Added `motion="auto|reduce|full"`; `auto` follows `prefers-reduced-motion` and updates when the system preference changes.
26
+ - Added the semantic `action-state` event with `{ action, phase, source }` lifecycle data for host integrations and accessible status messaging.
27
+ - Added explicit `px` support for `size`, alongside existing numeric pixel values.
28
+ - Added Chromium, Firefox, and WebKit browser validation, including trusted Chromium touch-cancellation coverage.
29
+
30
+ ### Changed
31
+
32
+ - Unified program-action and drag cancellation so reset, replacement actions, disconnect, and pointer cancellation cannot leave delayed drag reactions behind.
33
+ - Program-controlled actions such as waiting and input now keep ownership of their expression while drag deformation remains available; suppressed drag reactions are discarded rather than replayed.
34
+ - Invalid/no-op actions are validated before destructive extension cleanup, so an invalid `wake` or unknown action cannot tear down a running action.
35
+ - Touch interaction uses `touch-action: pinch-zoom` on the avatar interaction region so single-pointer dragging remains available while page scrolling outside the avatar is unaffected and two-finger zoom remains possible.
36
+ - Reduced-motion mode removes continuous decorative motion while preserving distinct static states and semantic action lifecycles.
37
+ - Avatars pause sustained frame rendering when hidden, without layout, or outside the viewport, then resume the current state when visible again.
38
+ - High-frequency pointer updates are coalesced to the latest update per animation frame.
39
+ - Shared the head-flattening geometry used by the antenna and roundness modules.
40
+
41
+ ### Fixed
42
+
43
+ - Preserved valid `window.AgentRobotAvatarInspectConfig` values supplied before module loading and normalized missing, invalid, and out-of-range values deterministically.
44
+ - Distinguished `pointercancel` from a normal release so cancelled touch gestures recover without success/angry feedback.
45
+ - Tightened `size` parsing so unsupported units, malformed values, zero, negative, and non-finite input use the default size instead of being partially parsed as pixels.
46
+
9
47
  ## [0.2.1] - 2026-09-05
10
48
 
11
49
  ### Fixed
@@ -66,6 +104,8 @@ First public release.
66
104
  - npm-compatible package metadata for later package publication
67
105
  - Contribution guide, issue templates, pull request template, MIT License, and Ko-fi funding metadata
68
106
 
107
+ [0.3.1]: https://github.com/CX-ArtLab/agent-robot-avatar/releases/tag/v0.3.1
108
+ [0.3.0]: https://github.com/CX-ArtLab/agent-robot-avatar/releases/tag/v0.3.0
69
109
  [0.2.1]: https://github.com/CX-ArtLab/agent-robot-avatar/releases/tag/v0.2.1
70
110
  [0.2.0]: https://github.com/CX-ARTLab/agent-robot-avatar/releases/tag/v0.2.0
71
111
  [0.1.0]: https://github.com/CX-ARTLab/agent-robot-avatar/releases/tag/v0.1.0
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  [English](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/README.md) | [简体中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-CN.md) | [繁體中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-TW.md) | [日本語](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ja.md) | [한국어](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ko.md) | [Español](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.es.md) | [Português](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.pt.md) | [Deutsch](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.de.md) | [Français](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.fr.md)
8
8
 
9
- ![Version](https://img.shields.io/badge/version-v0.2.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](./LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
9
+ ![Version](https://img.shields.io/badge/version-v0.3.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](./LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
10
10
 
11
11
  ![Vanilla JavaScript](https://img.shields.io/badge/Vanilla-JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=000) ![Web Component](https://img.shields.io/badge/Web-Native%20Component-5A67D8?style=flat-square) ![SVG](https://img.shields.io/badge/Rendering-SVG-FFB13B?style=flat-square&logo=svg&logoColor=000) ![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-2EA44F?style=flat-square) ![14 Agent States](https://img.shields.io/badge/Agent%20states-14-8B5CF6?style=flat-square) ![Pointer Following](https://img.shields.io/badge/Pointer-following-00A67E?style=flat-square) ![Jelly Drag](https://img.shields.io/badge/Drag-jelly%20physics-FF69B4?style=flat-square)
12
12
 
@@ -20,7 +20,7 @@ Agent Robot Avatar can also be used as a visual feedback layer for AG-UI-style a
20
20
 
21
21
  Agent Robot Avatar is built with SVG and vanilla JavaScript. It has no third-party animation framework dependency, works as a native custom element, and exposes a compact API for expressions, interaction states, pointer behavior, waiting feedback, and head-shape customization.
22
22
 
23
- **Current public version: v0.2.1**
23
+ **Current public version: v0.3.1**
24
24
 
25
25
  <p align="center">
26
26
  <img src="./assets/demo/agent-robot-avatar-demo.gif" alt="Agent Robot Avatar interactive animation demo" width="560">
@@ -40,6 +40,9 @@ Try the interactive demo: [Open Agent Robot Avatar](https://cx-artlab.github.io/
40
40
  - Jelly-style local drag deformation with elastic recovery
41
41
  - Programmatically controlled Agent states and expressions
42
42
  - Distinct waiting, failure, warning, review, blocked-content, and system-error semantics
43
+ - Semantic `action-state` lifecycle events for host integrations
44
+ - Reduced-motion support and visibility-aware frame pausing
45
+ - Configurable sleep wake policy
43
46
  - Adjustable head roundness
44
47
  - Floating antenna with optional status flashing
45
48
  - Demo UI kept separate from the reusable component
@@ -60,7 +63,7 @@ Add the custom element:
60
63
 
61
64
  The avatar enters its default idle behavior automatically. No initialization code is required.
62
65
 
63
- A minimal runnable example is available at [`examples/basic.html`](./examples/basic.html).
66
+ A minimal runnable example is available at [`examples/basic.html`](./examples/basic.html). An accessibility-oriented integration example is available at [`examples/accessibility.html`](./examples/accessibility.html).
64
67
 
65
68
  Bundler-based projects can install and use the component from npm with:
66
69
 
@@ -95,7 +98,9 @@ Return to the default idle state:
95
98
  avatar.reset();
96
99
  ```
97
100
 
98
- `reset()` cancels pending animations and returns to idle. Removing the element also cancels timers, animations, waiting, and drag feedback, without emitting a `face-state` event for cleanup. Reattaching starts from idle and preserves appearance and behavior settings. Cancelled animation promises resolve normally.
101
+ `reset()` cancels the current program action, pending waits, head animations, drag/rebound state, and delayed drag reactions, then returns to idle. Cancelled animation promises continue to resolve normally rather than rejecting. Removing the element performs the same internal cleanup without emitting cleanup-only `face-state` or `action-state` notifications, and also tears down its per-instance media-query listener and observers without restarting rendering as a cleanup side effect. Reattaching starts from idle, preserves appearance and behavior attributes/settings, and installs connected runtime resources once.
102
+
103
+ A valid new action replaces the previous active action. The old semantic action receives `cancel`; it cannot resume later and overwrite the replacement. An unknown action throws before destructive cleanup. A no-op action such as `wake` while already awake leaves the current action unchanged.
99
104
 
100
105
  ## Actions and states
101
106
 
@@ -113,10 +118,10 @@ avatar.reset();
113
118
  | Blocked | `blocked` | A request is blocked, disallowed, or cannot proceed |
114
119
  | System error | `error` | Connection, service, or system failure |
115
120
  | Surprise | `surprise` | An unexpected event or result |
116
- | Sleep | `sleep` | Enter the sleep state |
117
- | Wake | `wake` | Wake from sleep |
121
+ | Sleep | `sleep` | Enter the component sleep state |
122
+ | Wake | `wake` | Wake the component from sleep |
118
123
 
119
- The state names intentionally distinguish task results from system conditions. For example, `failure` means the requested task finished unsuccessfully, while `error` is reserved for connection, service, or system failures. `waiting` represents an active pending request; `bored` represents inactivity.
124
+ The state names intentionally distinguish task results from system conditions. For example, `failure` means the requested task finished unsuccessfully, while `error` is reserved for connection, service, or system failures. `waiting` represents an active pending request; `bored` represents inactivity. `sleep` describes the avatar component state only and does not imply that the real Agent is offline.
120
125
 
121
126
  Semantic aliases are also available:
122
127
 
@@ -138,11 +143,114 @@ For real Agent workflows, use the dedicated waiting lifecycle when a request is
138
143
  ```js
139
144
  avatar.startWaiting();
140
145
 
141
- // Stop when a response or result arrives.
146
+ // Stop when the request ends without replacing it with another action.
142
147
  avatar.stopWaiting();
143
148
  ```
144
149
 
145
- Calling another action also interrupts the active waiting state.
150
+ `startWaiting()` remains active until `stopWaiting()`, `reset()`, or another program action replaces it. A replacement reports `cancel`; `stopWaiting()` reports a normal `end` when waiting is active. For backward compatibility, calling `stopWaiting()` during another active program action still returns the avatar to idle; that action now receives exactly one `cancel`. Calling it with no active action does not manufacture a lifecycle event. Drag deformation remains available while waiting, but decorative drag expressions are suppressed and discarded rather than replayed after waiting ends.
151
+
152
+ A typical request lifecycle can be written as:
153
+
154
+ ```js
155
+ avatar.startWaiting();
156
+ try {
157
+ const result = await runAgentRequest();
158
+ await avatar.play(result.ok ? 'success' : 'failure');
159
+ } catch (error) {
160
+ await avatar.play('error');
161
+ }
162
+ ```
163
+
164
+ The visual `error` action eventually returns to idle. That visual completion does not mean the underlying request, connection, or business error has been resolved; the host application remains the source of truth.
165
+
166
+ ## Semantic action event
167
+
168
+ `face-state` remains available for backward compatibility and describes visual face states. It may contain visual terms such as `happy` or `sad`, so it should not be treated as a reliable business-result event.
169
+
170
+ For semantic integration, listen to `action-state`:
171
+
172
+ ```js
173
+ avatar.addEventListener('action-state', (event) => {
174
+ const { action, phase, source } = event.detail;
175
+ console.log(action, phase, source);
176
+ });
177
+ ```
178
+
179
+ `action-state` uses this contract:
180
+
181
+ - `action`: normalized action name. Aliases such as `failed`/`fail` become `failure`; `verify`/`review` become `inspect`.
182
+ - `phase`: `start`, followed by exactly one `end` or `cancel` for each action that actually starts.
183
+ - `source`: `api`, `interaction`, or `automatic`.
184
+ - Continuous actions such as `startWaiting()` and active input do not emit `end` just because one animation cycle completes.
185
+ - Replacement or `reset()` emits `cancel`; `stopWaiting()` emits `end` for active waiting, or `cancel` for a different active action that it resets to idle.
186
+ - No-op calls emit no lifecycle event.
187
+ - Decorative drag feedback uses `action: "reaction"` and `source: "interaction"`, so it cannot be confused with an API-level task success/failure.
188
+ - The event bubbles and is `composed`, so it can be observed above the custom element/Shadow DOM boundary.
189
+ - Disconnect cleanup is silent and does not manufacture host-facing status notifications.
190
+
191
+ The event describes avatar actions, not real request outcomes. The host must decide what the underlying Agent state actually means.
192
+
193
+ ## Accessibility integration
194
+
195
+ For accessible status text, map program actions to localized host text rather than announcing every visual change:
196
+
197
+ ```html
198
+ <div id="agent-status" role="status" aria-live="polite"></div>
199
+ ```
200
+
201
+ ```js
202
+ const status = document.querySelector('#agent-status');
203
+ const messages = {
204
+ waiting: 'Processing…',
205
+ failure: 'Task failed.',
206
+ error: 'Connection problem.',
207
+ };
208
+
209
+ avatar.addEventListener('action-state', ({ detail }) => {
210
+ if (detail.source === 'interaction') return;
211
+ if (detail.phase === 'start' && messages[detail.action]) {
212
+ status.textContent = messages[detail.action];
213
+ }
214
+ });
215
+ ```
216
+
217
+ Use a normal `role="status"` for routine updates. Do not announce blinking, gaze changes, or decorative drag reactions, and do not automatically make every error an interruptive alert. If the host already announces the same status elsewhere, the avatar can remain decorative to avoid duplicate screen-reader output.
218
+
219
+ See [`examples/accessibility.html`](./examples/accessibility.html) for a runnable request-lifecycle example covering waiting, success, failure, connection errors, host cancellation, request replacement, and stale-result protection. Its live-region text follows host request state rather than low-level face changes.
220
+
221
+ ## Wake policy
222
+
223
+ The `wake-on` attribute controls automatic wake behavior:
224
+
225
+ ```html
226
+ <agent-robot-avatar wake-on="manual"></agent-robot-avatar>
227
+ ```
228
+
229
+ | Value | Behavior |
230
+ | --- | --- |
231
+ | `activity` | Default. Page pointer/keyboard activity can wake a sleeping avatar, preserving previous behavior. |
232
+ | `interaction` | Only direct interaction with this avatar wakes it automatically. Activity elsewhere does not. |
233
+ | `manual` | Environment activity, including direct avatar interaction, does not automatically wake it. |
234
+
235
+ Explicit API intent remains explicit: `avatar.play('wake')` wakes the avatar in every mode, and `avatar.noteActivity()` records activity and wakes by default even when the host calls it from inside a real `keydown`, `pointerdown`, or `click` handler. Pass `false` to `noteActivity(false)` to record activity without waking. Automatic page/direct-interaction wakeups are handled separately and still obey `wake-on`; their `action-state` source is `automatic`, while an explicit host wake remains `api`. Other program actions may leave sleep when their action semantics require a new visible state. `reset()` always returns to idle.
236
+
237
+ Different avatar instances may use different `wake-on` values.
238
+
239
+ ## Reduced motion
240
+
241
+ Use the `motion` attribute to control animation intensity:
242
+
243
+ ```html
244
+ <agent-robot-avatar motion="auto"></agent-robot-avatar>
245
+ ```
246
+
247
+ | Value | Behavior |
248
+ | --- | --- |
249
+ | `auto` | Default. Follows `prefers-reduced-motion` and responds to preference changes at runtime. |
250
+ | `reduce` | Keeps recognizable static states while suppressing continuous or elastic decorative motion. |
251
+ | `full` | Uses the normal animation style regardless of the system reduced-motion preference. |
252
+
253
+ Reduced mode suppresses continuous waiting orbits, idle wandering/blinking motion, head-follow inertia, elastic rebound, antenna spring motion, and status flashing where appropriate. Waiting/input lifecycles remain active until the host ends or replaces them, even when their visual state is static. Automatic sleep uses an independent cancellable timer rather than the draw loop, so it still works while reduced motion has paused continuous rendering; activity and runtime `auto-sleep` changes reschedule it, and active waiting/input are not overwritten. Static state changes are committed before reduced rendering pauses, including the final closed-eye sleep pose. Switching modes does not revive cancelled work or change `action-state` lifecycle semantics.
146
254
 
147
255
  ## Pointer following
148
256
 
@@ -153,6 +261,8 @@ avatar.setPointerFollow(false);
153
261
  avatar.setPointerFollow(true);
154
262
  ```
155
263
 
264
+ High-frequency pointer positions are coalesced to the latest update per animation frame. Pointer following remains active in normal mode when the avatar is not being dragged or owned by another expression.
265
+
156
266
  ## Antenna flashing
157
267
 
158
268
  Antenna status flashing is disabled by default and can be enabled per avatar:
@@ -162,6 +272,24 @@ avatar.setAntennaFlash(true);
162
272
  avatar.setAntennaFlash(false);
163
273
  ```
164
274
 
275
+ ## Inspect configuration
276
+
277
+ Inspect/review timing and geometry can be customized before loading the component:
278
+
279
+ ```html
280
+ <script>
281
+ window.AgentRobotAvatarInspectConfig = {
282
+ aperture: 24,
283
+ scanOffset: 12,
284
+ };
285
+ </script>
286
+ <script type="module" src="./agent-robot-avatar.js"></script>
287
+ ```
288
+
289
+ The existing configuration object is preserved. Values are converted with `Number(...)`, must be finite, and are clamped to supported ranges; missing or invalid values receive defaults. `aperture` is clamped to `6–40`, `scanOffset` to `0–24`, and timing values to their supported `0/40–2400 ms` ranges. The same `window.AgentRobotAvatarInspectConfig` object can still be modified after loading; values are normalized again when an inspect action begins. Invalid input cannot enter the animation calculations as `NaN`.
290
+
291
+ Default configuration keeps the existing v0.2.1 visual timing.
292
+
165
293
  ## Head roundness
166
294
 
167
295
  The head shape can be adjusted from a squarer form to a rounder form without changing the eye clipping or drag-deformation system:
@@ -184,9 +312,9 @@ avatar.addEventListener('head-roundness-change', (event) => {
184
312
  });
185
313
  ```
186
314
 
187
- ## State event
315
+ ## Visual state event
188
316
 
189
- The component emits a `face-state` event whenever its visual state changes:
317
+ The component continues to emit `face-state` whenever its visual state changes:
190
318
 
191
319
  ```js
192
320
  avatar.addEventListener('face-state', (event) => {
@@ -194,25 +322,29 @@ avatar.addEventListener('face-state', (event) => {
194
322
  });
195
323
  ```
196
324
 
197
- Host applications can use this event to synchronize interface state, logs, Agent workflows, or accessibility feedback.
325
+ Use this event for visual synchronization or legacy integrations. Prefer `action-state` for business/Agent lifecycle logic and accessibility status text.
198
326
 
199
327
  ## Attributes
200
328
 
201
329
  ```html
202
330
  <agent-robot-avatar
203
- size="160"
331
+ size="160px"
204
332
  color="#08090b"
205
- auto-sleep="30000">
333
+ auto-sleep="30000"
334
+ wake-on="activity"
335
+ motion="auto">
206
336
  </agent-robot-avatar>
207
337
  ```
208
338
 
209
339
  | Attribute | Description |
210
340
  | --- | --- |
211
- | `size` | Component size in pixels |
212
- | `color` | Main avatar color |
213
- | `auto-sleep` | Idle time before automatic sleep, in milliseconds; `0` disables automatic sleep |
341
+ | `size` | Positive pixel size. Accepts plain numbers such as `140` and explicit pixels such as `140px`. Unsupported units, malformed strings, zero, negative, and non-finite values fall back to `112px`. |
342
+ | `color` | Main avatar color. |
343
+ | `auto-sleep` | Idle time before automatic sleep, in milliseconds; `0` disables automatic sleep. |
344
+ | `wake-on` | Automatic wake policy: `activity` (default), `interaction`, or `manual`. |
345
+ | `motion` | Motion policy: `auto` (default), `reduce`, or `full`. |
214
346
 
215
- All attributes are optional.
347
+ All attributes are optional. Dynamic size changes are supported; drag coordinates and pointer following use the element's current layout size.
216
348
 
217
349
  ## Default behavior
218
350
 
@@ -225,15 +357,25 @@ Without explicit API calls, the avatar already provides subtle ambient behavior:
225
357
  - Natural return to idle
226
358
  - Optional automatic sleep
227
359
 
360
+ `motion="reduce"` or an active system reduced-motion preference simplifies these decorative behaviors.
361
+
228
362
  ## Drag interaction
229
363
 
230
- The avatar supports direct pointer dragging. The head deforms locally around the interaction point instead of moving as a rigid object.
364
+ The avatar supports direct mouse, pen, and touch pointer dragging. The head deforms locally around the interaction point instead of moving as a rigid object.
231
365
 
232
- - Strong outward pull: triggers `angry` after recovery
233
- - Strong inward push toward the center: triggers `success` after recovery
366
+ - Strong outward pull while idle: triggers an `angry` visual reaction after recovery
367
+ - Strong inward push toward the center while idle: triggers a `success` visual reaction after recovery
234
368
  - Small drag: deformation only, with no expression trigger
369
+ - Active program actions such as waiting/input keep expression ownership; drag deformation remains available but its decorative reaction is discarded
370
+ - `pointercancel`, lost capture, reset, replacement actions, and disconnect restore drag geometry without delayed reaction
371
+
372
+ The avatar interaction region uses `touch-action: pinch-zoom`: single-pointer movement remains available to the custom drag gesture, while two-pointer pinch zoom remains allowed. Page scrolling initiated outside the avatar keeps the page's normal touch behavior. Desktop mouse interaction is unchanged.
373
+
374
+ ## Rendering and visibility
235
375
 
236
- When released, the shape returns with an elastic rebound.
376
+ The component pauses sustained frame rendering when it has no visible layout area or is outside the viewport. Parent-container hiding is covered through layout/intersection observation. When it becomes visible again, the avatar resumes the current valid state rather than replaying stale actions.
377
+
378
+ Finite action timers continue to settle while visual drawing is paused, so action promises do not depend on continuous rendering. The existing hidden-page and settled-sleep pause behavior remains in place. Observers and per-instance media-query listeners are cleaned up when an avatar is disconnected.
237
379
 
238
380
  ## Interactive Demo
239
381
 
@@ -269,11 +411,13 @@ LICENSE MIT License
269
411
 
270
412
  The package is published on npm as `agent-robot-avatar`. It includes the public entry, TypeScript declarations, runtime modules, documentation, and support assets.
271
413
 
272
- The npm package intentionally includes only the public entry, TypeScript declarations, `src/` runtime, documentation, and support assets; Demo-only files are excluded.
414
+ The npm package intentionally includes only the public entry, TypeScript declarations, `src/` runtime, documentation, and support assets; Demo-only files and test files are excluded.
273
415
 
274
416
  ## Compatibility
275
417
 
276
- Agent Robot Avatar is designed for modern browsers with support for ES modules, Custom Elements, SVG, Pointer Events, and the Web Animations API.
418
+ Agent Robot Avatar is designed for modern browsers with support for ES modules, Custom Elements, SVG, Pointer Events, the Web Animations API, `IntersectionObserver`, `ResizeObserver`, and `matchMedia`.
419
+
420
+ The automated browser suite covers Chromium, Firefox, and WebKit. Trusted touch-drag cancellation is additionally exercised through Chromium's touch emulation; see the PR/release validation notes for any real-device coverage.
277
421
 
278
422
  ## Contributing
279
423
 
@@ -281,18 +425,22 @@ Issues and pull requests are welcome. See [`CONTRIBUTING.md`](./CONTRIBUTING.md)
281
425
 
282
426
  ## Project status
283
427
 
284
- v0.2.1 is the current public release. v0.1.0 remains available as the first public version. The public API is intentionally small so it can evolve carefully before a future `1.0.0` stability commitment.
428
+ v0.3.1 is the current public release. v0.1.0 remains available as the first public version. The public API is intentionally small so it can evolve carefully before a future `1.0.0` stability commitment.
285
429
 
286
430
  Agent Robot Avatar is independently developed and is not affiliated with, endorsed by, or representative of any AI platform or brand.
287
431
 
432
+ ## Character design and visual identity
433
+
434
+ The Agent Robot Avatar character, including its robot appearance and visual identity, is an original design by CX ArtLab.
435
+
436
+ The MIT License applies to the software and source code. It permits use, modification, and distribution of the software, including use of the avatar within applications, but it does not transfer ownership of the Agent Robot Avatar name, character identity, or visual identity, and does not grant the right to present them as another party's original character, trademark, or standalone brand.
437
+
438
+ References to third-party AI products describe possible use cases or product inspiration only and do not indicate affiliation, endorsement, or ownership of the character design.
439
+
288
440
  ## License
289
441
 
290
442
  MIT License. See [`LICENSE`](./LICENSE).
291
443
 
292
444
  ## Buy me a coffee
293
445
 
294
- If this project is useful to you, you can buy me a coffee. Use whichever option is most convenient:
295
-
296
- | Ko-fi | Alipay | WeChat Pay |
297
- | --- | --- | --- |
298
- | <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> | <img src="./assets/support/alipay.png" alt="Alipay QR code" width="160"> | <img src="./assets/support/wechat-pay.png" alt="WeChat Pay QR code" width="160"> |
446
+ <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
@@ -6,11 +6,20 @@ import './src/agent-robot-avatar-antenna-flash.js';
6
6
  import './src/agent-robot-avatar-inspect.js';
7
7
  import './src/agent-robot-avatar-failure.js';
8
8
  import './src/agent-robot-avatar-head-roundness.js';
9
+ import './src/agent-robot-avatar-runtime.js';
9
10
  import { VERSION } from './src/agent-robot-avatar-version.js';
10
11
 
12
+ // Elements already present in markup can upgrade while the core module is
13
+ // loading, before runtime extensions finish installing their prototype hooks.
14
+ // Initialize those existing instances once the full public entry is ready so
15
+ // runtime policies (including touch-action) are applied synchronously.
16
+ if (typeof document !== 'undefined') {
17
+ document.querySelectorAll('agent-robot-avatar').forEach(avatar => avatar._resumeFrames?.());
18
+ }
19
+
11
20
  if (typeof window !== 'undefined') {
12
21
  window.AgentRobotAvatarVersion = VERSION;
13
22
  }
14
23
 
15
24
  export { AgentRobotAvatar, VERSION };
16
- export default AgentRobotAvatar;
25
+ export default AgentRobotAvatar;
package/docs/README.de.md CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  [English](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/README.md) | [简体中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-CN.md) | [繁體中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-TW.md) | [日本語](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ja.md) | [한국어](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ko.md) | [Español](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.es.md) | [Português](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.pt.md) | [Deutsch](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.de.md) | [Français](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.fr.md)
8
8
 
9
- ![Version](https://img.shields.io/badge/version-v0.2.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
9
+ ![Version](https://img.shields.io/badge/version-v0.3.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
10
+
11
+ ![Vanilla JavaScript](https://img.shields.io/badge/Vanilla-JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=000) ![Web Component](https://img.shields.io/badge/Web-Native%20Component-5A67D8?style=flat-square) ![SVG](https://img.shields.io/badge/Rendering-SVG-FFB13B?style=flat-square&logo=svg&logoColor=000) ![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-2EA44F?style=flat-square) ![14 Agent States](https://img.shields.io/badge/Agent%20states-14-8B5CF6?style=flat-square) ![Pointer Following](https://img.shields.io/badge/Pointer-following-00A67E?style=flat-square) ![Jelly Drag](https://img.shields.io/badge/Drag-jelly%20physics-FF69B4?style=flat-square)
10
12
 
11
13
  Eine leichte, ausdrucksstarke Roboter-Avatar-Web-Component für KI-Agenten und andere interaktive Anwendungen.
12
14
 
@@ -18,7 +20,7 @@ Agent Robot Avatar kann außerdem als visuelle Feedback-Ebene für Agent-Oberfl
18
20
 
19
21
  Agent Robot Avatar basiert auf SVG und Vanilla JavaScript und benötigt kein externes Animationsframework. Die Komponente funktioniert als natives Custom Element und stellt eine kompakte API für Ausdrücke, Interaktionszustände, Pointer-Following, Wartefeedback und Kopfform bereit.
20
22
 
21
- **Aktuelle öffentliche Version: v0.2.1**
23
+ **Aktuelle öffentliche Version: v0.3.1**
22
24
 
23
25
  <p align="center">
24
26
  <img src="../assets/demo/agent-robot-avatar-demo.gif" alt="Interaktive animierte Demo von Agent Robot Avatar" width="560">
@@ -119,6 +121,8 @@ Ohne explizite API-Aufrufe bietet der Avatar zufälliges Blinzeln, subtile Blick
119
121
  - Stark zur Mitte drücken: nach der Rückkehr `success`
120
122
  - Kleine Bewegung: nur Verformung
121
123
 
124
+ Diese Drag-Ausdrücke gelten nur im idle-Zustand, wenn keine programmatisch gesteuerte Aktion den Avatar belegt. Während `waiting`, `input`, `inspect` und anderer aktiver Aktionen bleibt die Verformung erhalten, die Drag-Reaktion wird jedoch unterdrückt und später nicht nachgeholt. `pointercancel` stellt nur die Form wieder her und löst weder success noch angry aus.
125
+
122
126
  ## Interaktive Demo
123
127
 
124
128
  `demo/index.html` enthält alle öffentlichen Zustände, Pointer-Following, Jelly-Drag, den waiting-Lebenszyklus, Kopfrundung, Farb- und Verhaltenssteuerung sowie eine simulierte Agent-Unterhaltung. Demo-spezifisches JavaScript liegt unter `demo/` und ist nicht Teil des wiederverwendbaren npm-Runtimes.
@@ -149,7 +153,7 @@ Issues und Pull Requests sind willkommen. Bitte vor Änderungen [`CONTRIBUTING.m
149
153
 
150
154
  ## Projektstatus
151
155
 
152
- v0.2.1 ist die aktuelle öffentliche Version. v0.1.0 bleibt als erste öffentliche Version verfügbar. Die öffentliche API bleibt bewusst klein, damit sie vor einer späteren Stabilitätszusage mit `1.0.0` sorgfältig weiterentwickelt werden kann.
156
+ v0.3.1 ist die aktuelle öffentliche Version. v0.1.0 bleibt als erste öffentliche Version verfügbar. Die öffentliche API bleibt bewusst klein, damit sie vor einer späteren Stabilitätszusage mit `1.0.0` sorgfältig weiterentwickelt werden kann.
153
157
 
154
158
  Agent Robot Avatar ist ein unabhängig entwickeltes Open-Source-Projekt und steht in keiner offiziellen Verbindung zu einer KI-Plattform oder Marke.
155
159
 
@@ -159,6 +163,4 @@ MIT License. Siehe [`LICENSE`](../LICENSE).
159
163
 
160
164
  ## Unterstütze mich mit einem Kaffee
161
165
 
162
- | Ko-fi | Alipay | WeChat Pay |
163
- | --- | --- | --- |
164
- | <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> | <img src="../assets/support/alipay.png" alt="Alipay QR-Code" width="160"> | <img src="../assets/support/wechat-pay.png" alt="WeChat Pay QR-Code" width="160"> |
166
+ <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
package/docs/README.es.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  [English](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/README.md) | [简体中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-CN.md) | [繁體中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-TW.md) | [日本語](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ja.md) | [한국어](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ko.md) | [Español](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.es.md) | [Português](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.pt.md) | [Deutsch](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.de.md) | [Français](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.fr.md)
8
8
 
9
- ![Versión](https://img.shields.io/badge/version-v0.2.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
9
+ ![Versión](https://img.shields.io/badge/version-v0.3.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
10
10
 
11
11
  ![Vanilla JavaScript](https://img.shields.io/badge/Vanilla-JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=000) ![Web Component](https://img.shields.io/badge/Web-Native%20Component-5A67D8?style=flat-square) ![SVG](https://img.shields.io/badge/Rendering-SVG-FFB13B?style=flat-square&logo=svg&logoColor=000) ![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-2EA44F?style=flat-square) ![14 Agent States](https://img.shields.io/badge/Agent%20states-14-8B5CF6?style=flat-square) ![Pointer Following](https://img.shields.io/badge/Pointer-following-00A67E?style=flat-square) ![Jelly Drag](https://img.shields.io/badge/Drag-jelly%20physics-FF69B4?style=flat-square)
12
12
 
@@ -20,7 +20,7 @@ Agent Robot Avatar también puede funcionar como una capa de feedback visual par
20
20
 
21
21
  Agent Robot Avatar está construido con SVG y JavaScript nativo, sin depender de frameworks de animación de terceros. Funciona como un Custom Element nativo y ofrece una API compacta para expresiones, estados de interacción, seguimiento del puntero, espera y forma de la cabeza.
22
22
 
23
- **Versión pública actual: v0.2.1**
23
+ **Versión pública actual: v0.3.1**
24
24
 
25
25
  <p align="center">
26
26
  <img src="../assets/demo/agent-robot-avatar-demo.gif" alt="Demostración animada interactiva de Agent Robot Avatar" width="560">
@@ -180,6 +180,8 @@ Al arrastrar, la cabeza se deforma localmente alrededor del punto de interacció
180
180
  - Empuje fuerte hacia el centro: activa `success` después de recuperarse
181
181
  - Arrastre pequeño: solo deformación
182
182
 
183
+ Estas expresiones de arrastre solo se aplican en idle cuando ninguna acción programática controla el avatar. Durante `waiting`, `input`, `inspect` y otras acciones activas se conserva la deformación, pero la expresión de arrastre se suprime y no se reproduce después. `pointercancel` restaura la forma sin activar success ni angry.
184
+
183
185
  ## Demo interactiva
184
186
 
185
187
  `demo/index.html` incluye todos los estados públicos, seguimiento del puntero, arrastre tipo gelatina, ciclo de waiting, ajuste de redondez, controles de color y comportamiento y una simulación de conversación con Agent. El JavaScript exclusivo de la Demo está aislado en `demo/` y no forma parte del runtime reutilizable de npm.
@@ -210,7 +212,7 @@ Se aceptan Issues y Pull Requests. Consulta [`CONTRIBUTING.md`](../CONTRIBUTING.
210
212
 
211
213
  ## Estado del proyecto
212
214
 
213
- v0.2.1 es la versión pública actual. v0.1.0 continúa disponible como la primera versión pública. La API pública se mantiene deliberadamente pequeña para poder evolucionar con cuidado antes de un futuro compromiso de estabilidad `1.0.0`.
215
+ v0.3.1 es la versión pública actual. v0.1.0 continúa disponible como la primera versión pública. La API pública se mantiene deliberadamente pequeña para poder evolucionar con cuidado antes de un futuro compromiso de estabilidad `1.0.0`.
214
216
 
215
217
  Agent Robot Avatar es un proyecto independiente de código abierto y no está afiliado, respaldado ni representa a ninguna plataforma o marca de IA.
216
218
 
@@ -220,8 +222,4 @@ MIT License. Consulta [`LICENSE`](../LICENSE).
220
222
 
221
223
  ## Invítame a un café
222
224
 
223
- Si el proyecto te resulta útil, puedes apoyarlo con el método que prefieras:
224
-
225
- | Ko-fi | Alipay | WeChat Pay |
226
- | --- | --- | --- |
227
- | <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> | <img src="../assets/support/alipay.png" alt="Código QR de Alipay" width="160"> | <img src="../assets/support/wechat-pay.png" alt="Código QR de WeChat Pay" width="160"> |
225
+ <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
package/docs/README.fr.md CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  [English](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/README.md) | [简体中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-CN.md) | [繁體中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-TW.md) | [日本語](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ja.md) | [한국어](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ko.md) | [Español](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.es.md) | [Português](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.pt.md) | [Deutsch](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.de.md) | [Français](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.fr.md)
8
8
 
9
- ![Version](https://img.shields.io/badge/version-v0.2.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
9
+ ![Version](https://img.shields.io/badge/version-v0.3.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
10
+
11
+ ![Vanilla JavaScript](https://img.shields.io/badge/Vanilla-JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=000) ![Web Component](https://img.shields.io/badge/Web-Native%20Component-5A67D8?style=flat-square) ![SVG](https://img.shields.io/badge/Rendering-SVG-FFB13B?style=flat-square&logo=svg&logoColor=000) ![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-2EA44F?style=flat-square) ![14 Agent States](https://img.shields.io/badge/Agent%20states-14-8B5CF6?style=flat-square) ![Pointer Following](https://img.shields.io/badge/Pointer-following-00A67E?style=flat-square) ![Jelly Drag](https://img.shields.io/badge/Drag-jelly%20physics-FF69B4?style=flat-square)
10
12
 
11
13
  Un Web Component léger et expressif d’avatar robot pour les agents IA et d’autres applications interactives.
12
14
 
@@ -18,7 +20,7 @@ Agent Robot Avatar peut également servir de couche de retour visuel pour les in
18
20
 
19
21
  Agent Robot Avatar est construit avec SVG et JavaScript natif, sans framework d’animation tiers. Il fonctionne comme un Custom Element natif et propose une API compacte pour les expressions, les états d’interaction, le suivi du pointeur, l’attente et la forme de la tête.
20
22
 
21
- **Version publique actuelle : v0.2.1**
23
+ **Version publique actuelle : v0.3.1**
22
24
 
23
25
  <p align="center">
24
26
  <img src="../assets/demo/agent-robot-avatar-demo.gif" alt="Démonstration animée interactive d’Agent Robot Avatar" width="560">
@@ -178,6 +180,8 @@ Lors du glisser, la tête se déforme localement autour du point d’interaction
178
180
  - Forte poussée vers le centre : déclenche `success` après le retour
179
181
  - Petit glisser : déformation uniquement
180
182
 
183
+ Ces expressions de glisser ne s’appliquent à l’état idle que lorsqu’aucune action programmée ne contrôle l’avatar. Pendant `waiting`, `input`, `inspect` et les autres actions actives, la déformation reste visible mais l’expression de glisser est supprimée et n’est pas rejouée ensuite. `pointercancel` restaure uniquement la forme sans déclencher success ni angry.
184
+
181
185
  ## Demo interactive
182
186
 
183
187
  `demo/index.html` contient tous les états publics, le suivi du pointeur, le glisser type gelée, le cycle waiting, le réglage de l’arrondi, les contrôles de couleur et de comportement et une simulation de conversation Agent. Le JavaScript propre à la Demo reste dans `demo/` et n’est pas inclus dans le runtime npm réutilisable.
@@ -208,7 +212,7 @@ Issues et Pull Requests sont les bienvenus. Consultez [`CONTRIBUTING.md`](../CON
208
212
 
209
213
  ## État du projet
210
214
 
211
- v0.2.1 est la version publique actuelle. v0.1.0 reste disponible comme première version publique. L’API publique reste volontairement limitée afin d’évoluer avec prudence avant un futur engagement de stabilité `1.0.0`.
215
+ v0.3.1 est la version publique actuelle. v0.1.0 reste disponible comme première version publique. L’API publique reste volontairement limitée afin d’évoluer avec prudence avant un futur engagement de stabilité `1.0.0`.
212
216
 
213
217
  Agent Robot Avatar est un projet open source développé indépendamment ; il n’est affilié, approuvé ni représentatif d’aucune plateforme ou marque d’IA.
214
218
 
@@ -218,8 +222,4 @@ MIT License. Voir [`LICENSE`](../LICENSE).
218
222
 
219
223
  ## Offrez-moi un café
220
224
 
221
- Si ce projet vous est utile, vous pouvez le soutenir avec la méthode qui vous convient :
222
-
223
- | Ko-fi | Alipay | WeChat Pay |
224
- | --- | --- | --- |
225
- | <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> | <img src="../assets/support/alipay.png" alt="QR code Alipay" width="160"> | <img src="../assets/support/wechat-pay.png" alt="QR code WeChat Pay" width="160"> |
225
+ <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
package/docs/README.ja.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  [English](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/README.md) | [简体中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-CN.md) | [繁體中文](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.zh-TW.md) | [日本語](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ja.md) | [한국어](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.ko.md) | [Español](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.es.md) | [Português](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.pt.md) | [Deutsch](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.de.md) | [Français](https://github.com/CX-ArtLab/agent-robot-avatar/blob/main/docs/README.fr.md)
8
8
 
9
- ![Version](https://img.shields.io/badge/version-v0.2.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
9
+ ![Version](https://img.shields.io/badge/version-v0.3.1-111111?style=flat-square) [![License](https://img.shields.io/badge/license-MIT-0A7EA4?style=flat-square)](../LICENSE) [![CI](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/CX-ArtLab/agent-robot-avatar/actions/workflows/validate.yml) [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/P0E625WIOI)
10
10
 
11
11
  ![Vanilla JavaScript](https://img.shields.io/badge/Vanilla-JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=000) ![Web Component](https://img.shields.io/badge/Web-Native%20Component-5A67D8?style=flat-square) ![SVG](https://img.shields.io/badge/Rendering-SVG-FFB13B?style=flat-square&logo=svg&logoColor=000) ![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-2EA44F?style=flat-square) ![14 Agent States](https://img.shields.io/badge/Agent%20states-14-8B5CF6?style=flat-square) ![Pointer Following](https://img.shields.io/badge/Pointer-following-00A67E?style=flat-square) ![Jelly Drag](https://img.shields.io/badge/Drag-jelly%20physics-FF69B4?style=flat-square)
12
12
 
@@ -20,7 +20,7 @@ Agent Robot Avatar は、AG-UI スタイルの Agent インターフェースに
20
20
 
21
21
  Agent Robot Avatar は SVG と Vanilla JavaScript だけで構築され、サードパーティー製アニメーションフレームワークに依存しません。ネイティブ Custom Element として動作し、表情、状態、ポインター追従、待機フィードバック、頭部形状をシンプルな API で制御できます。
22
22
 
23
- **現在の公開バージョン:v0.2.1**
23
+ **現在の公開バージョン:v0.3.1**
24
24
 
25
25
  <p align="center">
26
26
  <img src="../assets/demo/agent-robot-avatar-demo.gif" alt="Agent Robot Avatar インタラクティブアニメーションデモ" width="560">
@@ -180,6 +180,8 @@ API を呼ばなくても、ランダムなまばたき、視線移動、近く
180
180
  - 強く中心へ押す:復帰後に `success`
181
181
  - 小さなドラッグ:変形のみ
182
182
 
183
+ これらのドラッグ表情は、プログラム制御のアクションがアバターを使用していない idle 時にのみ適用されます。`waiting`、`input`、`inspect` などの実行中は変形だけを残し、ドラッグ表情は抑制して後から再生しません。`pointercancel` では形状だけを復元し、成功・怒りの表情は発生しません。
184
+
183
185
  ## インタラクティブ Demo
184
186
 
185
187
  `demo/index.html` には全公開状態、ポインター追従、ゼリー風ドラッグ、waiting ライフサイクル、頭部丸み調整、色・挙動設定、Agent 会話シミュレーションが含まれます。Demo 専用 JavaScript は `demo/` に分離され、再利用用 npm runtime には含まれません。
@@ -210,7 +212,7 @@ Issue と Pull Request を歓迎します。提出前に [`CONTRIBUTING.md`](../
210
212
 
211
213
  ## プロジェクトの状態
212
214
 
213
- v0.2.1 は現在の公開バージョンです。v0.1.0 は最初の公開バージョンとして引き続き利用できます。将来の `1.0.0` に向けて慎重に進化できるよう、公開 API は意図的に小さく保っています。
215
+ v0.3.1 は現在の公開バージョンです。v0.1.0 は最初の公開バージョンとして引き続き利用できます。将来の `1.0.0` に向けて慎重に進化できるよう、公開 API は意図的に小さく保っています。
214
216
 
215
217
  Agent Robot Avatar は独立して開発されたオープンソースプロジェクトであり、特定の AI プラットフォームやブランドとは提携・公式承認関係にありません。
216
218
 
@@ -220,8 +222,4 @@ MIT License。詳細は [`LICENSE`](../LICENSE) を参照してください。
220
222
 
221
223
  ## コーヒーで支援
222
224
 
223
- このプロジェクトが役立った場合は、使いやすい方法で支援できます。
224
-
225
- | Ko-fi | Alipay | WeChat Pay |
226
- | --- | --- | --- |
227
- | <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> | <img src="../assets/support/alipay.png" alt="Alipay QR code" width="160"> | <img src="../assets/support/wechat-pay.png" alt="WeChat Pay QR code" width="160"> |
225
+ <a href='https://ko-fi.com/P0E625WIOI' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>