@ranjeet_/digital-pet 0.2.0
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/LICENSE +17 -0
- package/README.md +283 -0
- package/assets/README.md +10 -0
- package/assets/bark-cute.mp3 +0 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30387 -0
- package/dist/index.js.map +7 -0
- package/dist/three-renderer.d.ts +54 -0
- package/dist/three-renderer.d.ts.map +1 -0
- package/package.json +55 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Digital Pet contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
package/README.md
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# Digital Pet for the Web
|
|
2
|
+
|
|
3
|
+
`@ranjeet_/digital-pet` is a framework-neutral Web Component that adds an
|
|
4
|
+
animated companion to any website. The default pet is Shiro, a golden retriever,
|
|
5
|
+
but the displayed name is customizable.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- Switchable 2D illustrated and 3D WebGL views
|
|
10
|
+
- Golden-retriever coat, feathering, flexible tail, balls, and fetch animation
|
|
11
|
+
- Sit, walk, run, jump, down, sleep, roll over, handshake, hi-five, salute,
|
|
12
|
+
namaste, speak, quiet, fetch, feed, treat, and surprise commands
|
|
13
|
+
- Optional barking sound with volume controls
|
|
14
|
+
- Cursor awareness, drag interaction, autonomous behavior, and corner naps
|
|
15
|
+
- Small, normal, large, and extra-large sizes saved in `localStorage`
|
|
16
|
+
- Accessible controls, Shadow DOM style isolation, reduced motion, and print handling
|
|
17
|
+
- Works with plain HTML, React, Next.js, Vue, Nuxt, Angular, Svelte, SvelteKit,
|
|
18
|
+
Astro, and other frameworks that support Custom Elements
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install @ranjeet_/digital-pet
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Import the package once in browser code:
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
import "@ranjeet_/digital-pet";
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Then render the custom element:
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<digital-pet
|
|
36
|
+
name="Shiro"
|
|
37
|
+
size="normal"
|
|
38
|
+
renderer="3d"
|
|
39
|
+
controls="true"
|
|
40
|
+
sound="false"
|
|
41
|
+
></digital-pet>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Direct Script
|
|
45
|
+
|
|
46
|
+
Use the hosted ES module without a package manager:
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<script
|
|
50
|
+
type="module"
|
|
51
|
+
src="https://ranjeet447.github.io/digital-pet/downloads/digital-pet-v0.2.0.js"
|
|
52
|
+
></script>
|
|
53
|
+
|
|
54
|
+
<digital-pet renderer="3d" controls="true"></digital-pet>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Use the versioned URL in production so a later release cannot change behavior
|
|
58
|
+
without an intentional update. `digital-pet.js` is also published as a moving
|
|
59
|
+
alias for demos and users who explicitly want the latest version.
|
|
60
|
+
|
|
61
|
+
## Frameworks
|
|
62
|
+
|
|
63
|
+
### React and Next.js
|
|
64
|
+
|
|
65
|
+
Load Digital Pet in a client component because it uses browser APIs:
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
"use client";
|
|
69
|
+
|
|
70
|
+
import { createElement, useEffect } from "react";
|
|
71
|
+
|
|
72
|
+
export function DigitalPet() {
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
void import("@ranjeet_/digital-pet");
|
|
75
|
+
}, []);
|
|
76
|
+
|
|
77
|
+
return createElement("digital-pet", {
|
|
78
|
+
name: "Shiro",
|
|
79
|
+
renderer: "3d",
|
|
80
|
+
controls: "true",
|
|
81
|
+
sound: "false",
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Render this component once in the root layout. `createElement` avoids requiring
|
|
87
|
+
custom JSX type declarations.
|
|
88
|
+
|
|
89
|
+
### Vue
|
|
90
|
+
|
|
91
|
+
```vue
|
|
92
|
+
<script setup>
|
|
93
|
+
import "@ranjeet_/digital-pet";
|
|
94
|
+
</script>
|
|
95
|
+
|
|
96
|
+
<template>
|
|
97
|
+
<digital-pet renderer="3d" controls="true" />
|
|
98
|
+
</template>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If Vue reports an unresolved component warning, configure the compiler:
|
|
102
|
+
|
|
103
|
+
```js
|
|
104
|
+
// vite.config.js
|
|
105
|
+
vue({
|
|
106
|
+
template: {
|
|
107
|
+
compilerOptions: {
|
|
108
|
+
isCustomElement: (tag) => tag === "digital-pet",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Nuxt
|
|
115
|
+
|
|
116
|
+
Create `plugins/digital-pet.client.ts`:
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
import "@ranjeet_/digital-pet";
|
|
120
|
+
|
|
121
|
+
export default defineNuxtPlugin(() => {});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Add the Vue custom-element configuration in `nuxt.config.ts`:
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
export default defineNuxtConfig({
|
|
128
|
+
vue: {
|
|
129
|
+
compilerOptions: {
|
|
130
|
+
isCustomElement: (tag) => tag === "digital-pet",
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Angular
|
|
137
|
+
|
|
138
|
+
Import the package in `main.ts`:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import "@ranjeet_/digital-pet";
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Allow the Custom Element in the component:
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
|
|
148
|
+
|
|
149
|
+
@Component({
|
|
150
|
+
selector: "app-root",
|
|
151
|
+
standalone: true,
|
|
152
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
153
|
+
template: `<digital-pet renderer="3d" controls="true"></digital-pet>`,
|
|
154
|
+
})
|
|
155
|
+
export class AppComponent {}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Svelte
|
|
159
|
+
|
|
160
|
+
```svelte
|
|
161
|
+
<script>
|
|
162
|
+
import { onMount } from "svelte";
|
|
163
|
+
|
|
164
|
+
onMount(() => import("@ranjeet_/digital-pet"));
|
|
165
|
+
</script>
|
|
166
|
+
|
|
167
|
+
<digital-pet renderer="3d" controls="true"></digital-pet>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### SvelteKit
|
|
171
|
+
|
|
172
|
+
Use the same component and import it inside `onMount`, or disable SSR for the
|
|
173
|
+
small wrapper component that renders `<digital-pet>`.
|
|
174
|
+
|
|
175
|
+
### Astro
|
|
176
|
+
|
|
177
|
+
```astro
|
|
178
|
+
<digital-pet renderer="3d" controls="true"></digital-pet>
|
|
179
|
+
|
|
180
|
+
<script>
|
|
181
|
+
import "@ranjeet_/digital-pet";
|
|
182
|
+
</script>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
The Custom Element upgrades in the browser; no framework hydration directive is
|
|
186
|
+
required.
|
|
187
|
+
|
|
188
|
+
## JavaScript API
|
|
189
|
+
|
|
190
|
+
```js
|
|
191
|
+
import { mountDigitalPet } from "@ranjeet_/digital-pet";
|
|
192
|
+
|
|
193
|
+
const shiro = mountDigitalPet({
|
|
194
|
+
name: "Shiro",
|
|
195
|
+
size: "normal",
|
|
196
|
+
renderer: "3d",
|
|
197
|
+
controls: true,
|
|
198
|
+
cursorInteraction: true,
|
|
199
|
+
sound: false,
|
|
200
|
+
volume: 0.65,
|
|
201
|
+
startCorner: "bottom-right",
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
shiro.command("sit");
|
|
205
|
+
shiro.command("fetch");
|
|
206
|
+
shiro.command("feed");
|
|
207
|
+
shiro.command("treat");
|
|
208
|
+
shiro.command("sleep");
|
|
209
|
+
shiro.setSize("large");
|
|
210
|
+
shiro.setRenderer("2d");
|
|
211
|
+
shiro.bringToPointer();
|
|
212
|
+
shiro.bringTo(500, 600);
|
|
213
|
+
shiro.hide();
|
|
214
|
+
shiro.show();
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Commands:
|
|
218
|
+
|
|
219
|
+
```text
|
|
220
|
+
sit, walk, run, jump, down, sleep, roll-over, handshake, hi-five,
|
|
221
|
+
salute, namaste, speak, quiet, fetch, feed, treat, surprise
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Attributes:
|
|
225
|
+
|
|
226
|
+
| Attribute | Values | Default |
|
|
227
|
+
| --- | --- | --- |
|
|
228
|
+
| `name` | any non-empty name | `Shiro` |
|
|
229
|
+
| `size` | `small`, `normal`, `large`, `extra-large` | saved value or `normal` |
|
|
230
|
+
| `remember-size` | `true`, `false` | `true` |
|
|
231
|
+
| `controls` | `true`, `false` | `true` |
|
|
232
|
+
| `renderer` | `2d`, `3d`, `auto` | `auto` |
|
|
233
|
+
| `sound` | `true`, `false` | `false` |
|
|
234
|
+
| `volume` | number from `0` to `1` | `0.65` |
|
|
235
|
+
| `cursor-interaction` | `true`, `false` | `true` |
|
|
236
|
+
| `start-corner` | `bottom-left`, `bottom-right` | `bottom-right` |
|
|
237
|
+
| `z-index` | any valid integer | `2147483000` |
|
|
238
|
+
|
|
239
|
+
Events:
|
|
240
|
+
|
|
241
|
+
```js
|
|
242
|
+
shiro.addEventListener("digital-pet-command", (event) => {
|
|
243
|
+
console.log(event.detail.command);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
shiro.addEventListener("digital-pet-size-change", (event) => {
|
|
247
|
+
console.log(event.detail.size);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
shiro.addEventListener("digital-pet-renderer-change", (event) => {
|
|
251
|
+
console.log(event.detail.renderer);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
shiro.addEventListener("digital-pet-care", (event) => {
|
|
255
|
+
console.log(event.detail.action, event.detail.hunger);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
shiro.addEventListener("digital-pet-name-change", (event) => {
|
|
259
|
+
console.log(event.detail.name);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
shiro.addEventListener("digital-pet-visibility-change", (event) => {
|
|
263
|
+
console.log(event.detail.visible);
|
|
264
|
+
});
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Development
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
npm install
|
|
271
|
+
npm run check
|
|
272
|
+
npm run build
|
|
273
|
+
python3 -m http.server 4173 -d .
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Open `http://localhost:4173/demo/`.
|
|
277
|
+
|
|
278
|
+
## Publishing
|
|
279
|
+
|
|
280
|
+
1. Update the version in `package.json`.
|
|
281
|
+
2. Run `npm run check`, `npm run build`, and `npm pack --dry-run`.
|
|
282
|
+
3. Authenticate with npm.
|
|
283
|
+
4. Run `npm publish --access public`.
|
package/assets/README.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Sound Asset
|
|
2
|
+
|
|
3
|
+
`bark-cute.mp3` is used for optional Digital Pet bark effects.
|
|
4
|
+
|
|
5
|
+
- Source: [Barking Dog Cute Sound](https://pixabay.com/sound-effects/nature-barking-dog-cute-sound-463192/)
|
|
6
|
+
- Provider: Pixabay
|
|
7
|
+
- License: [Pixabay Content License](https://pixabay.com/service/license-summary/)
|
|
8
|
+
|
|
9
|
+
The application keeps sounds disabled by default. Users must enable them through
|
|
10
|
+
the pet controls or the `sound="true"` attribute.
|
|
Binary file
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export declare const DIGITAL_PET_COMMANDS: readonly ["sit", "walk", "run", "jump", "down", "sleep", "roll-over", "handshake", "hi-five", "salute", "namaste", "speak", "quiet", "fetch", "feed", "treat", "surprise"];
|
|
2
|
+
export declare const DIGITAL_PET_SIZES: readonly ["small", "normal", "large", "extra-large"];
|
|
3
|
+
export declare const DIGITAL_PET_RENDERERS: readonly ["2d", "3d"];
|
|
4
|
+
export type DigitalPetCommand = (typeof DIGITAL_PET_COMMANDS)[number];
|
|
5
|
+
export type DigitalPetSize = (typeof DIGITAL_PET_SIZES)[number];
|
|
6
|
+
export type DigitalPetRenderer = (typeof DIGITAL_PET_RENDERERS)[number];
|
|
7
|
+
export interface DigitalPetOptions {
|
|
8
|
+
name?: string;
|
|
9
|
+
controls?: boolean;
|
|
10
|
+
cursorInteraction?: boolean;
|
|
11
|
+
sound?: boolean;
|
|
12
|
+
volume?: number;
|
|
13
|
+
renderer?: "auto" | DigitalPetRenderer;
|
|
14
|
+
size?: DigitalPetSize;
|
|
15
|
+
zIndex?: number;
|
|
16
|
+
startCorner?: "bottom-left" | "bottom-right";
|
|
17
|
+
}
|
|
18
|
+
export declare class DigitalPetElement extends HTMLElement {
|
|
19
|
+
static readonly tagName = "digital-pet";
|
|
20
|
+
static get observedAttributes(): string[];
|
|
21
|
+
private canvas;
|
|
22
|
+
private readonly fallbackCanvas;
|
|
23
|
+
private readonly webglCanvas;
|
|
24
|
+
private readonly context;
|
|
25
|
+
private readonly launcher;
|
|
26
|
+
private readonly panel;
|
|
27
|
+
private readonly commandsContainer;
|
|
28
|
+
private readonly sizesContainer;
|
|
29
|
+
private readonly reducedMotion;
|
|
30
|
+
private readonly barkAudio;
|
|
31
|
+
private threeRenderer;
|
|
32
|
+
private animationFrame;
|
|
33
|
+
private lastFrame;
|
|
34
|
+
private nextDecisionAt;
|
|
35
|
+
private behaviorStartedAt;
|
|
36
|
+
private behaviorEndsAt;
|
|
37
|
+
private behavior;
|
|
38
|
+
private sizeValue;
|
|
39
|
+
private position;
|
|
40
|
+
private targetX;
|
|
41
|
+
private direction;
|
|
42
|
+
private facingScale;
|
|
43
|
+
private horizontalVelocity;
|
|
44
|
+
private renderedBounce;
|
|
45
|
+
private pointer;
|
|
46
|
+
private pointerMovedAt;
|
|
47
|
+
private dragging;
|
|
48
|
+
private dragOffset;
|
|
49
|
+
private dragStart;
|
|
50
|
+
private didDrag;
|
|
51
|
+
private ballColor;
|
|
52
|
+
private visible;
|
|
53
|
+
private connected;
|
|
54
|
+
private resizeObserver;
|
|
55
|
+
private soundEnabled;
|
|
56
|
+
private volume;
|
|
57
|
+
private rendererValue;
|
|
58
|
+
private hunger;
|
|
59
|
+
private lastHungerUpdate;
|
|
60
|
+
constructor();
|
|
61
|
+
connectedCallback(): void;
|
|
62
|
+
disconnectedCallback(): void;
|
|
63
|
+
attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
64
|
+
command(command: DigitalPetCommand): void;
|
|
65
|
+
randomTrick(): void;
|
|
66
|
+
setSize(size: DigitalPetSize, persist?: boolean): void;
|
|
67
|
+
setRenderer(renderer: DigitalPetRenderer): void;
|
|
68
|
+
bringToPointer(): void;
|
|
69
|
+
bringTo(x: number, y: number): void;
|
|
70
|
+
show(): void;
|
|
71
|
+
hide(): void;
|
|
72
|
+
get isVisible(): boolean;
|
|
73
|
+
private get displayWidth();
|
|
74
|
+
private get displayHeight();
|
|
75
|
+
private get cursorInteractionEnabled();
|
|
76
|
+
private get petName();
|
|
77
|
+
private updatePetName;
|
|
78
|
+
private dispatchCareEvent;
|
|
79
|
+
private dispatchVisibilityChange;
|
|
80
|
+
private playBark;
|
|
81
|
+
private requireElement;
|
|
82
|
+
private renderControlButtons;
|
|
83
|
+
private bindControls;
|
|
84
|
+
private openPanel;
|
|
85
|
+
private closePanel;
|
|
86
|
+
private readInitialSize;
|
|
87
|
+
private placeInStartCorner;
|
|
88
|
+
private applyCanvasSize;
|
|
89
|
+
private initializeRenderer;
|
|
90
|
+
private dispatchRendererChange;
|
|
91
|
+
private syncRendererControls;
|
|
92
|
+
private syncSoundControls;
|
|
93
|
+
private syncSizeButtons;
|
|
94
|
+
private readonly handleGlobalPointerMove;
|
|
95
|
+
private readonly handlePointerDown;
|
|
96
|
+
private readonly handleCanvasPointerMove;
|
|
97
|
+
private readonly handlePointerUp;
|
|
98
|
+
private readonly handleResize;
|
|
99
|
+
private readonly handleVisibilityChange;
|
|
100
|
+
private readonly handleReducedMotionChange;
|
|
101
|
+
private readonly tick;
|
|
102
|
+
private update;
|
|
103
|
+
private updateCursorReaction;
|
|
104
|
+
private updateMovement;
|
|
105
|
+
private updateChase;
|
|
106
|
+
private chooseAutonomousBehavior;
|
|
107
|
+
private startMoving;
|
|
108
|
+
private setBehavior;
|
|
109
|
+
private setTimedBehavior;
|
|
110
|
+
private moveToNearestCorner;
|
|
111
|
+
private clampPosition;
|
|
112
|
+
private say;
|
|
113
|
+
private draw;
|
|
114
|
+
private bodyBounce;
|
|
115
|
+
private bodyLean;
|
|
116
|
+
private wagAngle;
|
|
117
|
+
private get behaviorProgress();
|
|
118
|
+
private applyTrickTransform;
|
|
119
|
+
private drawStandingShiro;
|
|
120
|
+
private drawLyingShiro;
|
|
121
|
+
private drawRollingShiro;
|
|
122
|
+
private drawSittingShiro;
|
|
123
|
+
private drawHead;
|
|
124
|
+
private get mouthOpen();
|
|
125
|
+
private legOffset;
|
|
126
|
+
private drawPlumeTail;
|
|
127
|
+
private drawChestRuff;
|
|
128
|
+
private drawFeatheredLeg;
|
|
129
|
+
private drawRaisedPaw;
|
|
130
|
+
private drawNamastePaws;
|
|
131
|
+
private drawEar;
|
|
132
|
+
private drawFaceDetails;
|
|
133
|
+
private drawEarFeathering;
|
|
134
|
+
private drawFurTufts;
|
|
135
|
+
private drawEye;
|
|
136
|
+
private drawClosedEye;
|
|
137
|
+
private drawSoundLines;
|
|
138
|
+
private drawFetchBall;
|
|
139
|
+
private drawRestingBalls;
|
|
140
|
+
private drawBall;
|
|
141
|
+
private drawShadow;
|
|
142
|
+
}
|
|
143
|
+
export declare function defineDigitalPet(tagName?: string): void;
|
|
144
|
+
export declare function mountDigitalPet(options?: DigitalPetOptions): DigitalPetElement;
|
|
145
|
+
declare global {
|
|
146
|
+
interface HTMLElementTagNameMap {
|
|
147
|
+
"digital-pet": DigitalPetElement;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|