@dotcraft/avatar 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +43 -0
  3. package/dist/AnimatedDecoration.d.ts +10 -0
  4. package/dist/AnimatedDecoration.d.ts.map +1 -0
  5. package/dist/AnimatedDecoration.js +43 -0
  6. package/dist/AnimatedDecoration.js.map +1 -0
  7. package/dist/AppearanceRig.d.ts +12 -0
  8. package/dist/AppearanceRig.d.ts.map +1 -0
  9. package/dist/AppearanceRig.js +9 -0
  10. package/dist/AppearanceRig.js.map +1 -0
  11. package/dist/Avatar.d.ts +22 -0
  12. package/dist/Avatar.d.ts.map +1 -0
  13. package/dist/Avatar.js +71 -0
  14. package/dist/Avatar.js.map +1 -0
  15. package/dist/DecorationShapes.d.ts +10 -0
  16. package/dist/DecorationShapes.d.ts.map +1 -0
  17. package/dist/DecorationShapes.js +8 -0
  18. package/dist/DecorationShapes.js.map +1 -0
  19. package/dist/Decorations.d.ts +15 -0
  20. package/dist/Decorations.d.ts.map +1 -0
  21. package/dist/Decorations.js +26 -0
  22. package/dist/Decorations.js.map +1 -0
  23. package/dist/Faces.d.ts +7 -0
  24. package/dist/Faces.d.ts.map +1 -0
  25. package/dist/Faces.js +8 -0
  26. package/dist/Faces.js.map +1 -0
  27. package/dist/HatDecorations.d.ts +5 -0
  28. package/dist/HatDecorations.d.ts.map +1 -0
  29. package/dist/HatDecorations.js +20 -0
  30. package/dist/HatDecorations.js.map +1 -0
  31. package/dist/HeldDecorations.d.ts +5 -0
  32. package/dist/HeldDecorations.d.ts.map +1 -0
  33. package/dist/HeldDecorations.js +5 -0
  34. package/dist/HeldDecorations.js.map +1 -0
  35. package/dist/MascotRig.d.ts +25 -0
  36. package/dist/MascotRig.d.ts.map +1 -0
  37. package/dist/MascotRig.js +58 -0
  38. package/dist/MascotRig.js.map +1 -0
  39. package/dist/ObjectDecorations.d.ts +5 -0
  40. package/dist/ObjectDecorations.d.ts.map +1 -0
  41. package/dist/ObjectDecorations.js +16 -0
  42. package/dist/ObjectDecorations.js.map +1 -0
  43. package/dist/accessories.css +14 -0
  44. package/dist/appearanceModel.d.ts +28 -0
  45. package/dist/appearanceModel.d.ts.map +1 -0
  46. package/dist/appearanceModel.js +58 -0
  47. package/dist/appearanceModel.js.map +1 -0
  48. package/dist/avatar.css +62 -0
  49. package/dist/characters.d.ts +6 -0
  50. package/dist/characters.d.ts.map +1 -0
  51. package/dist/characters.js +2 -0
  52. package/dist/characters.js.map +1 -0
  53. package/dist/composer/ComposerMascot.d.ts +3 -0
  54. package/dist/composer/ComposerMascot.d.ts.map +1 -0
  55. package/dist/composer/ComposerMascot.js +433 -0
  56. package/dist/composer/ComposerMascot.js.map +1 -0
  57. package/dist/composer/ComposerMascotShadow.d.ts +4 -0
  58. package/dist/composer/ComposerMascotShadow.d.ts.map +1 -0
  59. package/dist/composer/ComposerMascotShadow.js +7 -0
  60. package/dist/composer/ComposerMascotShadow.js.map +1 -0
  61. package/dist/composer/constants.d.ts +32 -0
  62. package/dist/composer/constants.d.ts.map +1 -0
  63. package/dist/composer/constants.js +50 -0
  64. package/dist/composer/constants.js.map +1 -0
  65. package/dist/composer/mascotHandoff.d.ts +3 -0
  66. package/dist/composer/mascotHandoff.d.ts.map +1 -0
  67. package/dist/composer/mascotHandoff.js +15 -0
  68. package/dist/composer/mascotHandoff.js.map +1 -0
  69. package/dist/composer/styles/energy.css +99 -0
  70. package/dist/composer/styles/expressions.css +20 -0
  71. package/dist/composer/styles/feedback.css +188 -0
  72. package/dist/composer/styles/focus.css +72 -0
  73. package/dist/composer/styles/foundation.css +287 -0
  74. package/dist/composer/styles/idle.css +438 -0
  75. package/dist/composer/styles/overdrive.css +264 -0
  76. package/dist/composer/styles/props.css +21 -0
  77. package/dist/composer/types.d.ts +40 -0
  78. package/dist/composer/types.d.ts.map +1 -0
  79. package/dist/composer/types.js +2 -0
  80. package/dist/composer/types.js.map +1 -0
  81. package/dist/composer/useComposerAvatarBehavior.d.ts +24 -0
  82. package/dist/composer/useComposerAvatarBehavior.d.ts.map +1 -0
  83. package/dist/composer/useComposerAvatarBehavior.js +72 -0
  84. package/dist/composer/useComposerAvatarBehavior.js.map +1 -0
  85. package/dist/composer/useComposerMotion.d.ts +2 -0
  86. package/dist/composer/useComposerMotion.d.ts.map +1 -0
  87. package/dist/composer/useComposerMotion.js +16 -0
  88. package/dist/composer/useComposerMotion.js.map +1 -0
  89. package/dist/composer/useComposerProfile.d.ts +7 -0
  90. package/dist/composer/useComposerProfile.d.ts.map +1 -0
  91. package/dist/composer/useComposerProfile.js +46 -0
  92. package/dist/composer/useComposerProfile.js.map +1 -0
  93. package/dist/decorationCatalog.d.ts +14 -0
  94. package/dist/decorationCatalog.d.ts.map +1 -0
  95. package/dist/decorationCatalog.js +37 -0
  96. package/dist/decorationCatalog.js.map +1 -0
  97. package/dist/decorationMotion.d.ts +35 -0
  98. package/dist/decorationMotion.d.ts.map +1 -0
  99. package/dist/decorationMotion.js +73 -0
  100. package/dist/decorationMotion.js.map +1 -0
  101. package/dist/environment.d.ts +6 -0
  102. package/dist/environment.d.ts.map +1 -0
  103. package/dist/environment.js +48 -0
  104. package/dist/environment.js.map +1 -0
  105. package/dist/index.d.ts +6 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +6 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/palette.d.ts +26 -0
  110. package/dist/palette.d.ts.map +1 -0
  111. package/dist/palette.js +35 -0
  112. package/dist/palette.js.map +1 -0
  113. package/dist/react.d.ts +6 -0
  114. package/dist/react.d.ts.map +1 -0
  115. package/dist/react.js +5 -0
  116. package/dist/react.js.map +1 -0
  117. package/dist/rig.css +265 -0
  118. package/dist/styles.css +13 -0
  119. package/dist/useEventReplay.d.ts +3 -0
  120. package/dist/useEventReplay.d.ts.map +1 -0
  121. package/dist/useEventReplay.js +15 -0
  122. package/dist/useEventReplay.js.map +1 -0
  123. package/dist/useGesture.d.ts +4 -0
  124. package/dist/useGesture.d.ts.map +1 -0
  125. package/dist/useGesture.js +59 -0
  126. package/dist/useGesture.js.map +1 -0
  127. package/package.json +55 -0
@@ -0,0 +1,433 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ import { Avatar } from '../Avatar.js';
4
+ import { deriveAppearance, mascotPaletteOf } from '../index.js';
5
+ import { useComposerAvatarBehavior } from './useComposerAvatarBehavior.js';
6
+ import { consumeMascotHandoff, recordMascotHandoff } from './mascotHandoff.js';
7
+ import { useComposerProfile } from './useComposerProfile.js';
8
+ import { useComposerMotion } from './useComposerMotion.js';
9
+ import { MASCOT_SIZE, MASCOT_SCALE, MASCOT_HIDDEN_RATIO, MASCOT_RAISE, MASCOT_SLEEP_AFTER_MS, MASCOT_WAVE_DURATION_MS, MASCOT_ACTIVE_IDLE_MIN_MS, MASCOT_ACTIVE_IDLE_JITTER_MS, MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS, MASCOT_ACTIVE_IDLE_TRAVEL_MS, MASCOT_ACTIVE_IDLE_HOLD_MS, MASCOT_SPARKLES, pickMascotActiveIdle } from './constants.js';
10
+ export function ComposerMascot({ name, motion = 'system', focused = false, dragOver = false, bounceSignal = 0, interaction, reasoningEffort = 'off', speed = 'standard', contextMax = false, anchorOffset = 0, anchorPushSignal = 0, handoff = false, renderCharacter, renderMenu, onNameRendered }) {
11
+ const reduced = !useComposerMotion(motion);
12
+ const { avatar, profileTransition, profileTransitionRevision } = useComposerProfile(name, reduced);
13
+ useEffect(() => { onNameRendered?.(avatar); }, [avatar, onNameRendered]);
14
+ const [menuPos, setMenuPos] = useState(null);
15
+ const [ambientSleeping, setSleeping] = useState(false);
16
+ const sleeping = ambientSleeping || interaction?.expression === 'sleep';
17
+ const [waving, setWaving] = useState(false);
18
+ const [greetingSequence, setGreetingSequence] = useState(0);
19
+ const [startled, setStartled] = useState(false);
20
+ const [launching, setLaunching] = useState(false);
21
+ const [cheering, setCheering] = useState(false);
22
+ const [sparkling, setSparkling] = useState(false);
23
+ const [shaking, setShaking] = useState(false);
24
+ const [nodding, setNodding] = useState(false);
25
+ const [landing, setLanding] = useState(false);
26
+ const [pushLift, setPushLift] = useState(false);
27
+ const [activeIdle, setActiveIdle] = useState(null);
28
+ const [activityRevision, setActivityRevision] = useState(0);
29
+ const rootRef = useRef(null);
30
+ const lastActivityRef = useRef(0);
31
+ const lastActiveIdleRef = useRef(null);
32
+ const baseExpression = interaction?.expression ?? (dragOver ? 'operator' : focused ? 'happy' : 'neutral');
33
+ const light = interaction?.light ?? 'default';
34
+ const hasMenu = renderMenu != null;
35
+ const bubble = interaction?.bubble ?? null;
36
+ const holdSign = interaction?.hold === 'sign';
37
+ const laptopActive = !sleeping &&
38
+ !dragOver &&
39
+ !holdSign &&
40
+ bubble == null &&
41
+ baseExpression === 'operator' &&
42
+ light === 'default';
43
+ const expression = sleeping ? 'sleep' : waving ? 'happy' : baseExpression;
44
+ const semanticAvatarPose = light === 'error'
45
+ ? 'blocked'
46
+ : light === 'success'
47
+ ? 'done'
48
+ : sleeping
49
+ ? 'sleep'
50
+ : waving
51
+ ? 'greeting'
52
+ : holdSign || bubble != null
53
+ ? 'waiting'
54
+ : laptopActive
55
+ ? 'working'
56
+ : 'idle';
57
+ const avatarBehavior = useComposerAvatarBehavior({
58
+ semanticPose: semanticAvatarPose,
59
+ baseExpression,
60
+ focused,
61
+ dragOver,
62
+ sleeping,
63
+ waving,
64
+ activeIdle: activeIdle != null,
65
+ bounceSignal,
66
+ reducedMotion: reduced
67
+ });
68
+ const mascotPalette = mascotPaletteOf(deriveAppearance(avatar ?? ''));
69
+ const activity = light === 'error'
70
+ ? 'error'
71
+ : light === 'success'
72
+ ? 'success'
73
+ : sleeping
74
+ ? 'sleeping'
75
+ : dragOver
76
+ ? 'dragging'
77
+ : holdSign
78
+ ? 'decision'
79
+ : baseExpression === 'operator'
80
+ ? 'working'
81
+ : focused
82
+ ? 'focused'
83
+ : 'idle';
84
+ const context = {
85
+ size: MASCOT_SIZE,
86
+ activity,
87
+ expression,
88
+ light,
89
+ submitRevision: bounceSignal,
90
+ reasoningEffort,
91
+ speed,
92
+ contextMax,
93
+ reducedMotion: reduced
94
+ };
95
+ const ambient = !focused &&
96
+ !dragOver &&
97
+ !bubble &&
98
+ !holdSign &&
99
+ menuPos == null &&
100
+ baseExpression === 'neutral' &&
101
+ light === 'default';
102
+ const markActivity = useCallback(() => {
103
+ setActiveIdle(null);
104
+ setSleeping((current) => {
105
+ if (current && !reduced)
106
+ setStartled(true);
107
+ return false;
108
+ });
109
+ const now = Date.now();
110
+ if (now - lastActivityRef.current < MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS)
111
+ return;
112
+ lastActivityRef.current = now;
113
+ setActivityRevision((value) => value + 1);
114
+ }, [reduced]);
115
+ useEffect(() => {
116
+ const markPointerMoveActivity = () => {
117
+ if (Date.now() - lastActivityRef.current >= MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS) {
118
+ markActivity();
119
+ }
120
+ };
121
+ window.addEventListener('keydown', markActivity);
122
+ window.addEventListener('pointerdown', markActivity);
123
+ window.addEventListener('pointermove', markPointerMoveActivity, { passive: true });
124
+ window.addEventListener('wheel', markActivity, { passive: true });
125
+ window.addEventListener('focusin', markActivity);
126
+ return () => {
127
+ window.removeEventListener('keydown', markActivity);
128
+ window.removeEventListener('pointerdown', markActivity);
129
+ window.removeEventListener('pointermove', markPointerMoveActivity);
130
+ window.removeEventListener('wheel', markActivity);
131
+ window.removeEventListener('focusin', markActivity);
132
+ };
133
+ }, [markActivity]);
134
+ useEffect(() => {
135
+ if (!ambient || sleeping || reduced) {
136
+ setActiveIdle(null);
137
+ return undefined;
138
+ }
139
+ let timer = 0;
140
+ const start = () => {
141
+ if (document.hidden) {
142
+ timer = window.setTimeout(start, 5000);
143
+ return;
144
+ }
145
+ const motion = pickMascotActiveIdle(Math.random(), lastActiveIdleRef.current);
146
+ lastActiveIdleRef.current = motion;
147
+ avatarBehavior.clearGesture();
148
+ setActiveIdle({ motion, phase: 'outbound' });
149
+ };
150
+ timer = window.setTimeout(start, MASCOT_ACTIVE_IDLE_MIN_MS + Math.random() * MASCOT_ACTIVE_IDLE_JITTER_MS);
151
+ return () => window.clearTimeout(timer);
152
+ }, [ambient, activityRevision, sleeping, reduced, avatarBehavior.clearGesture]);
153
+ useEffect(() => {
154
+ if (!activeIdle)
155
+ return undefined;
156
+ const delay = activeIdle.phase === 'away'
157
+ ? MASCOT_ACTIVE_IDLE_HOLD_MS[activeIdle.motion]
158
+ : MASCOT_ACTIVE_IDLE_TRAVEL_MS[activeIdle.motion] + 160;
159
+ const timer = window.setTimeout(() => {
160
+ setActiveIdle((current) => {
161
+ if (!current)
162
+ return null;
163
+ if (current.phase === 'outbound')
164
+ return { ...current, phase: 'away' };
165
+ if (current.phase === 'away')
166
+ return { ...current, phase: 'inbound' };
167
+ return null;
168
+ });
169
+ }, delay);
170
+ return () => window.clearTimeout(timer);
171
+ }, [activeIdle]);
172
+ useLayoutEffect(() => {
173
+ if (!handoff)
174
+ return undefined;
175
+ const el = rootRef.current;
176
+ if (!el)
177
+ return undefined;
178
+ let timer = 0;
179
+ const dy = reduced ? null : consumeMascotHandoff(el);
180
+ if (dy != null) {
181
+ const rising = dy > 0;
182
+ el.style.transition = 'none';
183
+ el.style.transform = `translateY(${dy}px)`;
184
+ void el.offsetHeight;
185
+ el.style.transition = rising
186
+ ? 'transform 420ms cubic-bezier(0.34, 1.56, 0.64, 1)'
187
+ : 'transform 300ms cubic-bezier(0.55, 0, 0.8, 0.9)';
188
+ el.style.transform = 'translateY(0)';
189
+ if (rising)
190
+ setStartled(true);
191
+ timer = window.setTimeout(() => {
192
+ el.style.transition = '';
193
+ el.style.transform = '';
194
+ if (!rising)
195
+ setLanding(true);
196
+ }, rising ? 430 : 310);
197
+ }
198
+ return () => {
199
+ window.clearTimeout(timer);
200
+ recordMascotHandoff(el);
201
+ };
202
+ }, [handoff]);
203
+ const previousAnchorOffsetRef = useRef(anchorOffset);
204
+ useLayoutEffect(() => {
205
+ const el = rootRef.current;
206
+ const previousOffset = previousAnchorOffsetRef.current;
207
+ previousAnchorOffsetRef.current = anchorOffset;
208
+ if (!el || previousOffset === anchorOffset || reduced)
209
+ return undefined;
210
+ if (anchorOffset > previousOffset) {
211
+ el.style.transition = '';
212
+ el.style.transform = '';
213
+ setLanding(false);
214
+ return undefined;
215
+ }
216
+ const currentVisualTop = el.getBoundingClientRect().top;
217
+ const offsetDelta = anchorOffset - previousOffset;
218
+ el.style.transition = 'none';
219
+ el.style.transform = '';
220
+ const targetTop = el.getBoundingClientRect().top;
221
+ const dy = currentVisualTop + offsetDelta - targetTop;
222
+ if (Math.abs(dy) < 1)
223
+ return undefined;
224
+ const rising = dy > 0;
225
+ let timer = 0;
226
+ el.style.transform = `translateY(${dy}px)`;
227
+ void el.offsetHeight;
228
+ el.style.transition = rising
229
+ ? 'transform 420ms cubic-bezier(0.34, 1.56, 0.64, 1)'
230
+ : 'transform 300ms cubic-bezier(0.55, 0, 0.8, 0.9)';
231
+ el.style.transform = 'translateY(0)';
232
+ if (rising) {
233
+ setStartled(true);
234
+ }
235
+ else {
236
+ setStartled(false);
237
+ setPushLift(false);
238
+ }
239
+ timer = window.setTimeout(() => {
240
+ el.style.transition = '';
241
+ el.style.transform = '';
242
+ if (!rising)
243
+ setLanding(true);
244
+ }, rising ? 430 : 310);
245
+ return () => window.clearTimeout(timer);
246
+ }, [anchorOffset]);
247
+ const previousAnchorPushSignalRef = useRef(anchorPushSignal);
248
+ useEffect(() => {
249
+ if (anchorPushSignal === previousAnchorPushSignalRef.current)
250
+ return;
251
+ previousAnchorPushSignalRef.current = anchorPushSignal;
252
+ if (!reduced)
253
+ setPushLift(true);
254
+ }, [anchorPushSignal]);
255
+ const prevBounceRef = useRef(bounceSignal);
256
+ useEffect(() => {
257
+ if (bounceSignal === prevBounceRef.current)
258
+ return;
259
+ prevBounceRef.current = bounceSignal;
260
+ if (!reduced)
261
+ setLaunching(true);
262
+ }, [bounceSignal]);
263
+ const prevLightRef = useRef(light);
264
+ useEffect(() => {
265
+ const prev = prevLightRef.current;
266
+ prevLightRef.current = light;
267
+ if (light === prev || reduced)
268
+ return;
269
+ if (light === 'success') {
270
+ setCheering(true);
271
+ setSparkling(true);
272
+ }
273
+ else if (light === 'error') {
274
+ setShaking(true);
275
+ }
276
+ }, [light]);
277
+ useEffect(() => {
278
+ if (!ambient || reduced) {
279
+ setSleeping(false);
280
+ return;
281
+ }
282
+ if (sleeping || activeIdle)
283
+ return;
284
+ const timer = window.setTimeout(() => setSleeping(true), MASCOT_SLEEP_AFTER_MS);
285
+ return () => window.clearTimeout(timer);
286
+ }, [ambient, activityRevision, sleeping, activeIdle, reduced]);
287
+ const wake = useCallback(() => {
288
+ setSleeping(false);
289
+ if (!reduced)
290
+ setStartled(true);
291
+ }, [reduced]);
292
+ useEffect(() => {
293
+ if (!waving)
294
+ return;
295
+ const timer = window.setTimeout(() => setWaving(false), MASCOT_WAVE_DURATION_MS);
296
+ return () => window.clearTimeout(timer);
297
+ }, [waving]);
298
+ useEffect(() => {
299
+ if (!focused || reduced)
300
+ return;
301
+ const onKeyDown = (event) => {
302
+ if (event.ctrlKey || event.metaKey || event.altKey)
303
+ return;
304
+ setNodding(true);
305
+ };
306
+ window.addEventListener('keydown', onKeyDown);
307
+ return () => window.removeEventListener('keydown', onKeyDown);
308
+ }, [focused, reduced]);
309
+ const onAnimationEnd = (event) => {
310
+ if (activeIdle) {
311
+ const expected = activeIdle.motion === 'hop'
312
+ ? 'composer-mascot-idle-hop-travel'
313
+ : activeIdle.motion === 'rocket'
314
+ ? 'composer-mascot-idle-rocket-flight-x'
315
+ : activeIdle.phase === 'outbound'
316
+ ? 'composer-mascot-idle-hover-launch-body'
317
+ : 'composer-mascot-idle-hover-land-body';
318
+ if (event.animationName === expected) {
319
+ setActiveIdle((current) => {
320
+ if (!current)
321
+ return null;
322
+ return current.phase === 'outbound' ? { ...current, phase: 'away' } : null;
323
+ });
324
+ }
325
+ }
326
+ switch (event.animationName) {
327
+ case 'composer-mascot-launch':
328
+ setLaunching(false);
329
+ break;
330
+ case 'composer-mascot-cheer':
331
+ setCheering(false);
332
+ break;
333
+ case 'composer-mascot-sparkle':
334
+ setSparkling(false);
335
+ break;
336
+ case 'composer-mascot-shake':
337
+ setShaking(false);
338
+ break;
339
+ case 'composer-mascot-startle':
340
+ setStartled(false);
341
+ break;
342
+ case 'composer-mascot-nod':
343
+ setNodding(false);
344
+ break;
345
+ case 'composer-mascot-land':
346
+ setLanding(false);
347
+ break;
348
+ case 'composer-mascot-push-lift':
349
+ setPushLift(false);
350
+ break;
351
+ }
352
+ };
353
+ const poseTransform = sleeping
354
+ ? 'translateY(2px) rotate(2.6deg) scale(0.985)'
355
+ : light === 'error'
356
+ ? 'translateY(2px) rotate(-3deg) scale(0.98)'
357
+ : focused
358
+ ? 'scale(1.1)'
359
+ : 'scale(1)';
360
+ const shotClass = cheering
361
+ ? 'composer-mascot-cheer'
362
+ : shaking
363
+ ? 'composer-mascot-shake'
364
+ : pushLift
365
+ ? 'composer-mascot-push-lift'
366
+ : startled
367
+ ? 'composer-mascot-startle'
368
+ : landing
369
+ ? 'composer-mascot-land'
370
+ : launching
371
+ ? 'composer-mascot-launch'
372
+ : nodding
373
+ ? 'composer-mascot-nod'
374
+ : undefined;
375
+ const loopClass = sleeping
376
+ ? 'composer-mascot-sleep-breathe'
377
+ : dragOver
378
+ ? 'composer-mascot-eager'
379
+ : baseExpression === 'operator' && light === 'default'
380
+ ? 'composer-mascot-think'
381
+ : 'composer-mascot-breathe';
382
+ const rootClassName = [
383
+ activeIdle ? 'composer-mascot-active-idle' : null,
384
+ sleeping ? 'composer-mascot-sleeping' : null,
385
+ ]
386
+ .filter(Boolean)
387
+ .join(' ') || undefined;
388
+ const character = _jsx(Avatar, { name: avatar ?? '', size: MASCOT_SIZE, state: avatarBehavior.pose, expression: avatarBehavior.expression, gesture: avatarBehavior.gesture, gestureSequence: avatarBehavior.gestureSequence, onGestureComplete: avatarBehavior.completeGesture, eventSequence: bounceSignal + greetingSequence, motion: reduced ? 'off' : 'on' });
389
+ return (_jsxs("div", { "aria-hidden": interaction ? undefined : true, "data-composer-mascot-motion": reduced ? 'off' : 'on', ref: rootRef, className: rootClassName, "data-mascot-name": avatar ?? '', "data-mascot-effort": reasoningEffort, "data-mascot-speed": speed, "data-mascot-context": contextMax ? 'max' : 'default', "data-mascot-profile-transition": profileTransition ? 'active' : 'idle', "data-mascot-active-idle": activeIdle?.motion, "data-mascot-idle-phase": activeIdle?.phase, "data-mascot-anchor-offset": anchorOffset, onAnimationEnd: onAnimationEnd, style: {
390
+ '--mascot-body-dark': mascotPalette.bodyD,
391
+ '--mascot-body-mid': mascotPalette.bodyM,
392
+ '--mascot-body-light': mascotPalette.bodyL,
393
+ '--mascot-mark-dark': mascotPalette.markD,
394
+ '--mascot-mark-energy': mascotPalette.markM,
395
+ '--mascot-energy-accent': mascotPalette.accent,
396
+ '--mascot-profile-from-accent': profileTransition?.fromAccent ?? mascotPalette.accent,
397
+ '--mascot-profile-to-accent': profileTransition?.toAccent ?? mascotPalette.accent,
398
+ position: 'absolute',
399
+ right: '40px',
400
+ top: `${-(MASCOT_SIZE * (1 - MASCOT_HIDDEN_RATIO)) - MASCOT_RAISE - anchorOffset}px`,
401
+ zIndex: 0,
402
+ pointerEvents: 'none'
403
+ }, children: [bubble && (_jsx("div", { style: {
404
+ position: 'absolute',
405
+ right: 0,
406
+ bottom: 'calc(100% + 8px)',
407
+ zIndex: 5,
408
+ pointerEvents: 'auto'
409
+ }, children: bubble })), _jsxs("div", { className: "composer-mascot-motion", style: {
410
+ transformOrigin: 'bottom center',
411
+ transform: `scale(${MASCOT_SCALE})`,
412
+ filter: `drop-shadow(0 5.3px 7.3px color-mix(in srgb, ${mascotPalette.shadow} 20%, transparent))`
413
+ }, children: [_jsx("div", { style: {
414
+ transformOrigin: 'bottom center',
415
+ transition: 'transform 280ms cubic-bezier(0.34, 1.56, 0.64, 1)',
416
+ transform: poseTransform
417
+ }, children: _jsx("div", { className: shotClass, children: _jsx("div", { className: loopClass, children: _jsx("div", { className: "composer-mascot-jelly", style: { pointerEvents: 'auto', cursor: hasMenu ? 'context-menu' : undefined }, onMouseEnter: sleeping ? wake : undefined, onClick: () => {
418
+ if (sleeping) {
419
+ wake();
420
+ return;
421
+ }
422
+ if (!reduced) {
423
+ setWaving(true);
424
+ setGreetingSequence((value) => value + 1);
425
+ }
426
+ }, onContextMenu: hasMenu
427
+ ? (e) => {
428
+ e.preventDefault();
429
+ setMenuPos({ x: e.clientX, y: e.clientY });
430
+ }
431
+ : undefined, children: _jsx("div", { className: "composer-mascot-fast-echo", children: _jsx("div", { className: "composer-mascot-character-stage", children: renderCharacter ? renderCharacter(character, context) : character }) }) }) }) }) }), sleeping && (_jsxs("div", { "aria-hidden": true, className: "composer-mascot-zzz", children: [_jsx("span", { children: "z" }), _jsx("span", { children: "z" }), _jsx("span", { children: "z" })] })), sparkling && (_jsx("div", { "aria-hidden": true, className: "composer-mascot-sparkles", children: MASCOT_SPARKLES.map((s, i) => (_jsx("i", { style: { '--dx': s.dx, '--dy': s.dy, animationDelay: s.delay } }, i))) }))] }, profileTransitionRevision), menuPos && renderMenu?.(menuPos, () => setMenuPos(null))] }));
432
+ }
433
+ //# sourceMappingURL=ComposerMascot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerMascot.js","sourceRoot":"","sources":["../../src/composer/ComposerMascot.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function ComposerMascotShadow({ name }: {
2
+ name?: string;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=ComposerMascotShadow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerMascotShadow.d.ts","sourceRoot":"","sources":["../../src/composer/ComposerMascotShadow.tsx"],"names":[],"mappings":"AACA,wBAAgB,oBAAoB,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGpE"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { deriveAppearance, mascotPaletteOf } from '../index.js';
3
+ export function ComposerMascotShadow({ name = '' }) {
4
+ const palette = mascotPaletteOf(deriveAppearance(name));
5
+ return _jsx("div", { "aria-hidden": true, className: "composer-mascot-contact-shadow", style: { background: `radial-gradient(50% 100% at 50% 0%, color-mix(in srgb, ${palette.shadow} 10%, transparent) 0%, transparent 72%)` } });
6
+ }
7
+ //# sourceMappingURL=ComposerMascotShadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerMascotShadow.js","sourceRoot":"","sources":["../../src/composer/ComposerMascotShadow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC/D,MAAM,UAAU,oBAAoB,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB;IACnE,MAAM,OAAO,GAAG,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;IACvD,OAAO,mCAAiB,SAAS,EAAC,gCAAgC,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,0DAA0D,OAAO,CAAC,MAAM,yCAAyC,EAAE,GAAI,CAAA;AACjN,CAAC"}
@@ -0,0 +1,32 @@
1
+ export declare const MASCOT_SIZE = 58;
2
+ export declare const MASCOT_SCALE = 0.75;
3
+ export declare const MASCOT_HIDDEN_RATIO = 0.06;
4
+ export declare const MASCOT_RAISE = 3;
5
+ export declare const MASCOT_SLEEP_AFTER_MS = 90000;
6
+ export declare const MASCOT_WAVE_DURATION_MS = 1600;
7
+ export declare const MASCOT_ACTIVE_IDLE_MIN_MS = 35000;
8
+ export declare const MASCOT_ACTIVE_IDLE_JITTER_MS = 30000;
9
+ export declare const MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS = 500;
10
+ export type MascotActiveIdleMotion = 'hop' | 'rocket' | 'hover';
11
+ export type MascotActiveIdlePhase = 'outbound' | 'away' | 'inbound';
12
+ export interface MascotActiveIdleState {
13
+ motion: MascotActiveIdleMotion;
14
+ phase: MascotActiveIdlePhase;
15
+ }
16
+ export interface MascotProfileTransition {
17
+ fromAccent: string;
18
+ toAccent: string;
19
+ }
20
+ export declare const MASCOT_PROFILE_TRANSITION_SWAP_MS = 620;
21
+ export declare const MASCOT_PROFILE_TRANSITION_DURATION_MS = 1240;
22
+ export declare const MASCOT_ACTIVE_IDLE_TRAVEL_MS: Record<MascotActiveIdleMotion, number>;
23
+ export declare const MASCOT_ACTIVE_IDLE_HOLD_MS: Record<MascotActiveIdleMotion, number>;
24
+ export declare function pickMascotActiveIdle(random: number, previous: MascotActiveIdleMotion | null): MascotActiveIdleMotion;
25
+ export declare const MASCOT_SPARKLES: {
26
+ dx: string;
27
+ dy: string;
28
+ delay: string;
29
+ }[];
30
+ export declare function prefersReducedMotion(): boolean;
31
+ export declare function mascotNameKey(name?: string): string;
32
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/composer/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,KAAK,CAAA;AAC7B,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,mBAAmB,OAAO,CAAA;AACvC,eAAO,MAAM,YAAY,IAAI,CAAA;AAC7B,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAC3C,eAAO,MAAM,uBAAuB,OAAQ,CAAA;AAC5C,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAC/C,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAClD,eAAO,MAAM,uCAAuC,MAAM,CAAA;AAE1D,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAA;AAC/D,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAEnE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAA;IAC9B,KAAK,EAAE,qBAAqB,CAAA;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,iCAAiC,MAAM,CAAA;AACpD,eAAO,MAAM,qCAAqC,OAAO,CAAA;AAEzD,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAI/E,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAI7E,CAAA;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GAAG,sBAAsB,CAIpH;AAED,eAAO,MAAM,eAAe;;;;GAQ1B,CAAA;AAEF,wBAAgB,oBAAoB,IAAI,OAAO,CAS9C;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,50 @@
1
+ export const MASCOT_SIZE = 58;
2
+ export const MASCOT_SCALE = 0.75;
3
+ export const MASCOT_HIDDEN_RATIO = 0.06;
4
+ export const MASCOT_RAISE = 3;
5
+ export const MASCOT_SLEEP_AFTER_MS = 90_000;
6
+ export const MASCOT_WAVE_DURATION_MS = 1_600;
7
+ export const MASCOT_ACTIVE_IDLE_MIN_MS = 35_000;
8
+ export const MASCOT_ACTIVE_IDLE_JITTER_MS = 30_000;
9
+ export const MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS = 500;
10
+ export const MASCOT_PROFILE_TRANSITION_SWAP_MS = 620;
11
+ export const MASCOT_PROFILE_TRANSITION_DURATION_MS = 1240;
12
+ export const MASCOT_ACTIVE_IDLE_TRAVEL_MS = {
13
+ hop: 2400,
14
+ rocket: 1800,
15
+ hover: 1800
16
+ };
17
+ export const MASCOT_ACTIVE_IDLE_HOLD_MS = {
18
+ hop: 1400,
19
+ rocket: 1400,
20
+ hover: 2800
21
+ };
22
+ export function pickMascotActiveIdle(random, previous) {
23
+ const selected = random < 0.65 ? 'hop' : random < 0.9 ? 'rocket' : 'hover';
24
+ if (selected !== previous)
25
+ return selected;
26
+ return selected === 'hop' ? 'rocket' : selected === 'rocket' ? 'hop' : 'rocket';
27
+ }
28
+ export const MASCOT_SPARKLES = Array.from({ length: 7 }, (_, i) => {
29
+ const angle = ((-150 + i * 40) * Math.PI) / 180;
30
+ const radius = 26 + (i % 3) * 9;
31
+ return {
32
+ dx: `${(Math.cos(angle) * radius).toFixed(1)}px`,
33
+ dy: `${(Math.sin(angle) * radius - 8).toFixed(1)}px`,
34
+ delay: `${i * 40}ms`
35
+ };
36
+ });
37
+ export function prefersReducedMotion() {
38
+ const configuredPreference = typeof document !== 'undefined' ? document.documentElement.dataset.reduceMotion : undefined;
39
+ if (configuredPreference === 'on')
40
+ return true;
41
+ if (configuredPreference === 'off')
42
+ return false;
43
+ return typeof window !== 'undefined' && typeof window.matchMedia === 'function'
44
+ ? window.matchMedia('(prefers-reduced-motion: reduce)')?.matches ?? false
45
+ : false;
46
+ }
47
+ export function mascotNameKey(name) {
48
+ return name?.trim().normalize('NFC') ?? '';
49
+ }
50
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/composer/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAA;AAC7B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAA;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAA;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAClD,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAG,CAAA;AAe1D,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAA;AACpD,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAI,CAAA;AAEzD,MAAM,CAAC,MAAM,4BAA4B,GAA2C;IAClF,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;CACZ,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAA2C;IAChF,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;CACZ,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,QAAuC;IAC1F,MAAM,QAAQ,GAA2B,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAA;IAClG,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC1C,OAAO,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AACjF,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;IAC/C,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAC/B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QAChD,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACpD,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI;KACrB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,UAAU,oBAAoB;IAClC,MAAM,oBAAoB,GACxB,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7F,IAAI,oBAAoB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9C,IAAI,oBAAoB,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAEhD,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QAC7E,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,EAAE,OAAO,IAAI,KAAK;QACzE,CAAC,CAAC,KAAK,CAAA;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function recordMascotHandoff(el: HTMLElement): void;
2
+ export declare function consumeMascotHandoff(el: HTMLElement): number | null;
3
+ //# sourceMappingURL=mascotHandoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mascotHandoff.d.ts","sourceRoot":"","sources":["../../src/composer/mascotHandoff.ts"],"names":[],"mappings":"AAOA,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAOnE"}
@@ -0,0 +1,15 @@
1
+ let record = null;
2
+ export function recordMascotHandoff(el) {
3
+ record = { top: el.getBoundingClientRect().top, time: performance.now() };
4
+ }
5
+ export function consumeMascotHandoff(el) {
6
+ if (!record)
7
+ return null;
8
+ const { top, time } = record;
9
+ record = null;
10
+ if (performance.now() - time > 400)
11
+ return null;
12
+ const dy = top - el.getBoundingClientRect().top;
13
+ return Math.abs(dy) < 8 ? null : dy;
14
+ }
15
+ //# sourceMappingURL=mascotHandoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mascotHandoff.js","sourceRoot":"","sources":["../../src/composer/mascotHandoff.ts"],"names":[],"mappings":"AAKA,IAAI,MAAM,GAA+B,IAAI,CAAA;AAE7C,MAAM,UAAU,mBAAmB,CAAC,EAAe;IACjD,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAe;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC5B,MAAM,GAAG,IAAI,CAAA;IACb,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG;QAAE,OAAO,IAAI,CAAA;IAC/C,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAA;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;AACrC,CAAC"}