@dotcraft/avatar 0.6.3 → 0.6.5

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 (83) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +46 -43
  3. package/dist/accessories.css +14 -14
  4. package/dist/avatar.css +62 -62
  5. package/dist/composer/ComposerMascot.d.ts +1 -1
  6. package/dist/composer/ComposerMascot.d.ts.map +1 -1
  7. package/dist/composer/ComposerMascot.js +33 -107
  8. package/dist/composer/ComposerMascot.js.map +1 -1
  9. package/dist/composer/MascotIdleStage.d.ts +11 -0
  10. package/dist/composer/MascotIdleStage.d.ts.map +1 -0
  11. package/dist/composer/MascotIdleStage.js +9 -0
  12. package/dist/composer/MascotIdleStage.js.map +1 -0
  13. package/dist/composer/constants.d.ts +12 -1
  14. package/dist/composer/constants.d.ts.map +1 -1
  15. package/dist/composer/constants.js +9 -4
  16. package/dist/composer/constants.js.map +1 -1
  17. package/dist/composer/styles/energy.css +99 -99
  18. package/dist/composer/styles/expressions.css +20 -20
  19. package/dist/composer/styles/feedback.css +188 -188
  20. package/dist/composer/styles/focus.css +72 -72
  21. package/dist/composer/styles/foundation.css +301 -287
  22. package/dist/composer/styles/idle.css +449 -438
  23. package/dist/composer/styles/overdrive.css +264 -264
  24. package/dist/composer/styles/props.css +21 -21
  25. package/dist/composer/types.d.ts +1 -0
  26. package/dist/composer/types.d.ts.map +1 -1
  27. package/dist/composer/useComposerAvatarBehavior.d.ts +1 -0
  28. package/dist/composer/useComposerAvatarBehavior.d.ts.map +1 -1
  29. package/dist/composer/useComposerAvatarBehavior.js +2 -2
  30. package/dist/composer/useComposerAvatarBehavior.js.map +1 -1
  31. package/dist/composer/useMascotActiveIdle.d.ts +33 -0
  32. package/dist/composer/useMascotActiveIdle.d.ts.map +1 -0
  33. package/dist/composer/useMascotActiveIdle.js +128 -0
  34. package/dist/composer/useMascotActiveIdle.js.map +1 -0
  35. package/dist/react.d.ts +5 -0
  36. package/dist/react.d.ts.map +1 -1
  37. package/dist/react.js +4 -0
  38. package/dist/react.js.map +1 -1
  39. package/dist/rig.css +265 -265
  40. package/dist/styles.css +13 -13
  41. package/package.json +56 -55
  42. package/src/AnimatedDecoration.tsx +43 -0
  43. package/src/AppearanceRig.tsx +15 -0
  44. package/src/Avatar.tsx +85 -0
  45. package/src/DecorationShapes.tsx +8 -0
  46. package/src/Decorations.tsx +31 -0
  47. package/src/Faces.tsx +37 -0
  48. package/src/HatDecorations.tsx +75 -0
  49. package/src/HeldDecorations.tsx +48 -0
  50. package/src/MascotRig.tsx +191 -0
  51. package/src/ObjectDecorations.tsx +55 -0
  52. package/src/accessories.css +14 -0
  53. package/src/appearanceModel.ts +65 -0
  54. package/src/avatar.css +62 -0
  55. package/src/characters.ts +5 -0
  56. package/src/composer/ComposerMascot.tsx +445 -0
  57. package/src/composer/ComposerMascotShadow.tsx +5 -0
  58. package/src/composer/MascotIdleStage.tsx +23 -0
  59. package/src/composer/constants.ts +89 -0
  60. package/src/composer/mascotHandoff.ts +19 -0
  61. package/src/composer/styles/energy.css +99 -0
  62. package/src/composer/styles/expressions.css +20 -0
  63. package/src/composer/styles/feedback.css +188 -0
  64. package/src/composer/styles/focus.css +72 -0
  65. package/src/composer/styles/foundation.css +301 -0
  66. package/src/composer/styles/idle.css +449 -0
  67. package/src/composer/styles/overdrive.css +264 -0
  68. package/src/composer/styles/props.css +21 -0
  69. package/src/composer/types.ts +32 -0
  70. package/src/composer/useComposerAvatarBehavior.ts +98 -0
  71. package/src/composer/useComposerMotion.ts +15 -0
  72. package/src/composer/useComposerProfile.ts +50 -0
  73. package/src/composer/useMascotActiveIdle.ts +170 -0
  74. package/src/decorationCatalog.ts +45 -0
  75. package/src/decorationMotion.ts +68 -0
  76. package/src/environment.ts +46 -0
  77. package/src/index.ts +5 -0
  78. package/src/palette.ts +52 -0
  79. package/src/react.ts +11 -0
  80. package/src/rig.css +265 -0
  81. package/src/styles.css +13 -0
  82. package/src/useEventReplay.ts +13 -0
  83. package/src/useGesture.ts +51 -0
@@ -0,0 +1,33 @@
1
+ import { type AnimationEvent } from 'react';
2
+ import { type MascotActiveIdle, type MascotActiveIdleMotion, type MascotActiveIdlePhase, type MascotActiveIdlePlan, type MascotIdleDirection } from './constants.js';
3
+ export interface MascotActiveIdleAttributes {
4
+ 'data-mascot-active-idle'?: MascotActiveIdleMotion;
5
+ 'data-mascot-idle-phase'?: MascotActiveIdlePhase;
6
+ 'data-mascot-idle-direction'?: MascotIdleDirection;
7
+ 'data-mascot-idle-travel'?: MascotIdleDirection;
8
+ }
9
+ export interface MascotActiveIdleOptions {
10
+ /** True while the character is free to wander: idle, awake, unfocused, and motion allowed. */
11
+ enabled: boolean;
12
+ onStart?: () => void;
13
+ /** Runs on user activity, before the schedule-reset throttle. */
14
+ onActivity?: () => void;
15
+ /** Decides direction and motion pool at launch; `null` skips this round. */
16
+ plan?: () => MascotActiveIdlePlan | null;
17
+ /** Whether pointer movement aborts a trip in flight; it always defers the next one. */
18
+ interruptOnPointerMove?: boolean;
19
+ }
20
+ export interface MascotActiveIdleHandle {
21
+ activeIdle: MascotActiveIdle | null;
22
+ activityRevision: number;
23
+ className: 'composer-mascot-active-idle' | undefined;
24
+ attributes: MascotActiveIdleAttributes;
25
+ cancel: () => void;
26
+ onAnimationEnd: (event: AnimationEvent<Element>) => void;
27
+ }
28
+ /**
29
+ * Schedules the traveling idle antics (hop, rocket, hover) after a quiet stretch. Any host that
30
+ * renders the stage classes (see MascotIdleStage) can spread the returned attributes on its root.
31
+ */
32
+ export declare function useMascotActiveIdle(options: MascotActiveIdleOptions): MascotActiveIdleHandle;
33
+ //# sourceMappingURL=useMascotActiveIdle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMascotActiveIdle.d.ts","sourceRoot":"","sources":["../../src/composer/useMascotActiveIdle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AACrF,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,0BAA0B;IACzC,yBAAyB,CAAC,EAAE,sBAAsB,CAAA;IAClD,wBAAwB,CAAC,EAAE,qBAAqB,CAAA;IAChD,4BAA4B,CAAC,EAAE,mBAAmB,CAAA;IAClD,yBAAyB,CAAC,EAAE,mBAAmB,CAAA;CAChD;AAED,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAA;IACxC,uFAAuF;IACvF,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACnC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpD,UAAU,EAAE,0BAA0B,CAAA;IACtC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CACzD;AAsBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAsG5F"}
@@ -0,0 +1,128 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS, MASCOT_ACTIVE_IDLE_HOLD_MS, MASCOT_ACTIVE_IDLE_JITTER_MS, MASCOT_ACTIVE_IDLE_MIN_MS, MASCOT_ACTIVE_IDLE_TRAVEL_MS, pickMascotActiveIdle } from './constants.js';
3
+ const RETRY_MS = 5000;
4
+ const LEG_SETTLE_MS = 160;
5
+ function opposite(direction) {
6
+ return direction === 'left' ? 'right' : 'left';
7
+ }
8
+ function finisherOf(trip) {
9
+ if (trip.motion === 'hop')
10
+ return 'composer-mascot-idle-hop-travel';
11
+ if (trip.motion === 'rocket')
12
+ return 'composer-mascot-idle-rocket-flight-x';
13
+ return trip.phase === 'outbound' ? 'composer-mascot-idle-hover-launch-body' : 'composer-mascot-idle-hover-land-body';
14
+ }
15
+ function advance(trip) {
16
+ if (!trip)
17
+ return null;
18
+ if (trip.phase === 'outbound')
19
+ return { ...trip, phase: 'away' };
20
+ if (trip.phase === 'away')
21
+ return { ...trip, phase: 'inbound', travel: opposite(trip.direction) };
22
+ return null;
23
+ }
24
+ /**
25
+ * Schedules the traveling idle antics (hop, rocket, hover) after a quiet stretch. Any host that
26
+ * renders the stage classes (see MascotIdleStage) can spread the returned attributes on its root.
27
+ */
28
+ export function useMascotActiveIdle(options) {
29
+ const { enabled, interruptOnPointerMove = true } = options;
30
+ const [activeIdle, setActiveIdle] = useState(null);
31
+ const [activityRevision, setActivityRevision] = useState(0);
32
+ const optionsRef = useRef(options);
33
+ optionsRef.current = options;
34
+ const activeRef = useRef(activeIdle);
35
+ activeRef.current = activeIdle;
36
+ const lastActivityRef = useRef(0);
37
+ const lastMotionRef = useRef(null);
38
+ const cancel = useCallback(() => setActiveIdle(null), []);
39
+ const markActivity = useCallback((interrupt) => {
40
+ if (interrupt)
41
+ setActiveIdle(null);
42
+ optionsRef.current.onActivity?.();
43
+ const now = Date.now();
44
+ if (now - lastActivityRef.current < MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS)
45
+ return;
46
+ lastActivityRef.current = now;
47
+ setActivityRevision((value) => value + 1);
48
+ }, []);
49
+ useEffect(() => {
50
+ const interrupt = () => markActivity(true);
51
+ const pointerMove = () => {
52
+ if (Date.now() - lastActivityRef.current >= MASCOT_ACTIVE_IDLE_ACTIVITY_THROTTLE_MS) {
53
+ markActivity(interruptOnPointerMove);
54
+ }
55
+ };
56
+ window.addEventListener('keydown', interrupt);
57
+ window.addEventListener('pointerdown', interrupt);
58
+ window.addEventListener('pointermove', pointerMove, { passive: true });
59
+ window.addEventListener('wheel', interrupt, { passive: true });
60
+ window.addEventListener('focusin', interrupt);
61
+ return () => {
62
+ window.removeEventListener('keydown', interrupt);
63
+ window.removeEventListener('pointerdown', interrupt);
64
+ window.removeEventListener('pointermove', pointerMove);
65
+ window.removeEventListener('wheel', interrupt);
66
+ window.removeEventListener('focusin', interrupt);
67
+ };
68
+ }, [markActivity, interruptOnPointerMove]);
69
+ useEffect(() => {
70
+ if (!enabled) {
71
+ setActiveIdle(null);
72
+ return undefined;
73
+ }
74
+ let timer = 0;
75
+ const wait = () => MASCOT_ACTIVE_IDLE_MIN_MS + Math.random() * MASCOT_ACTIVE_IDLE_JITTER_MS;
76
+ const start = () => {
77
+ if (document.hidden || activeRef.current) {
78
+ timer = window.setTimeout(start, RETRY_MS);
79
+ return;
80
+ }
81
+ const plan = optionsRef.current.plan?.();
82
+ if (plan === null) {
83
+ timer = window.setTimeout(start, wait());
84
+ return;
85
+ }
86
+ const motion = pickMascotActiveIdle(Math.random(), lastMotionRef.current, plan?.motions);
87
+ lastMotionRef.current = motion;
88
+ optionsRef.current.onStart?.();
89
+ const direction = plan?.direction ?? 'left';
90
+ setActiveIdle({ motion, phase: 'outbound', direction, travel: direction });
91
+ };
92
+ timer = window.setTimeout(start, wait());
93
+ return () => window.clearTimeout(timer);
94
+ }, [enabled, activityRevision]);
95
+ useEffect(() => {
96
+ if (!activeIdle)
97
+ return undefined;
98
+ const delay = activeIdle.phase === 'away'
99
+ ? MASCOT_ACTIVE_IDLE_HOLD_MS[activeIdle.motion]
100
+ : MASCOT_ACTIVE_IDLE_TRAVEL_MS[activeIdle.motion] + LEG_SETTLE_MS;
101
+ const timer = window.setTimeout(() => setActiveIdle(advance), delay);
102
+ return () => window.clearTimeout(timer);
103
+ }, [activeIdle]);
104
+ const onAnimationEnd = useCallback((event) => {
105
+ setActiveIdle((current) => {
106
+ if (!current || event.animationName !== finisherOf(current))
107
+ return current;
108
+ return current.phase === 'outbound' ? { ...current, phase: 'away' } : null;
109
+ });
110
+ }, []);
111
+ const attributes = activeIdle
112
+ ? {
113
+ 'data-mascot-active-idle': activeIdle.motion,
114
+ 'data-mascot-idle-phase': activeIdle.phase,
115
+ 'data-mascot-idle-direction': activeIdle.direction,
116
+ 'data-mascot-idle-travel': activeIdle.travel
117
+ }
118
+ : {};
119
+ return {
120
+ activeIdle,
121
+ activityRevision,
122
+ className: activeIdle ? 'composer-mascot-active-idle' : undefined,
123
+ attributes,
124
+ cancel,
125
+ onAnimationEnd
126
+ };
127
+ }
128
+ //# sourceMappingURL=useMascotActiveIdle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMascotActiveIdle.js","sourceRoot":"","sources":["../../src/composer/useMascotActiveIdle.ts"],"names":[],"mappings":"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"}
package/dist/react.d.ts CHANGED
@@ -3,4 +3,9 @@ export { DecorationSwatch, PrimaryDecoration, SecondaryDecoration } from './Deco
3
3
  export { ComposerMascot } from './composer/ComposerMascot.js';
4
4
  export type { ComposerMascotProps, ComposerMascotContext, MascotExpression, MascotLight } from './composer/types.js';
5
5
  export { ComposerMascotShadow } from './composer/ComposerMascotShadow.js';
6
+ export { useComposerAvatarBehavior } from './composer/useComposerAvatarBehavior.js';
7
+ export { useMascotActiveIdle, type MascotActiveIdleAttributes, type MascotActiveIdleHandle, type MascotActiveIdleOptions } from './composer/useMascotActiveIdle.js';
8
+ export { MascotIdleStage } from './composer/MascotIdleStage.js';
9
+ export { MASCOT_SLEEP_AFTER_MS } from './composer/constants.js';
10
+ export type { MascotActiveIdle, MascotActiveIdleMotion, MascotActiveIdlePhase, MascotActiveIdlePlan, MascotIdleDirection } from './composer/constants.js';
6
11
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACpH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACpH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,KAAK,sBAAsB,EAAE,KAAK,uBAAuB,EAAE,MAAM,mCAAmC,CAAA;AACnK,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
package/dist/react.js CHANGED
@@ -2,4 +2,8 @@ export { Avatar, AppearanceAvatar } from './Avatar.js';
2
2
  export { DecorationSwatch, PrimaryDecoration, SecondaryDecoration } from './Decorations.js';
3
3
  export { ComposerMascot } from './composer/ComposerMascot.js';
4
4
  export { ComposerMascotShadow } from './composer/ComposerMascotShadow.js';
5
+ export { useComposerAvatarBehavior } from './composer/useComposerAvatarBehavior.js';
6
+ export { useMascotActiveIdle } from './composer/useMascotActiveIdle.js';
7
+ export { MascotIdleStage } from './composer/MascotIdleStage.js';
8
+ export { MASCOT_SLEEP_AFTER_MS } from './composer/constants.js';
5
9
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAgD,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAgD,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAA8F,MAAM,mCAAmC,CAAA;AACnK,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA"}