@fluritheme/grinch 0.0.0-stage → 0.1.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/dist/paint.js ADDED
@@ -0,0 +1,355 @@
1
+ import { clamp } from './model.js';
2
+ const TAU = Math.PI * 2;
3
+ export function paintGift(ctx, point, color, size = 1, scale = 1) {
4
+ ctx.save();
5
+ ctx.translate(point.x, point.y);
6
+ ctx.scale(size * scale, size * scale);
7
+ ctx.lineWidth = 0.8;
8
+ ctx.lineJoin = 'round';
9
+ ctx.strokeStyle = '#253222';
10
+ ctx.fillStyle = '#15251d25';
11
+ ctx.beginPath();
12
+ ctx.ellipse(0, 1, 14, 2.7, 0, 0, TAU);
13
+ ctx.fill();
14
+ ctx.fillStyle = color;
15
+ ctx.beginPath();
16
+ ctx.roundRect(-12, -22, 24, 22, 2.5);
17
+ ctx.fill();
18
+ ctx.stroke();
19
+ ctx.fillStyle = '#fff3ce';
20
+ ctx.fillRect(-2.2, -22, 4.4, 22);
21
+ ctx.fillRect(-12, -15, 24, 3.5);
22
+ ctx.strokeStyle = '#d0aa54';
23
+ ctx.lineWidth = 1.2;
24
+ ctx.beginPath();
25
+ ctx.moveTo(0, -23);
26
+ ctx.bezierCurveTo(-18, -37, -15, -17, 0, -23);
27
+ ctx.bezierCurveTo(18, -37, 15, -17, 0, -23);
28
+ ctx.stroke();
29
+ ctx.fillStyle = '#fff3ce';
30
+ ctx.beginPath();
31
+ ctx.arc(0, -23, 2.2, 0, TAU);
32
+ ctx.fill();
33
+ ctx.restore();
34
+ }
35
+ function heart(ctx, x, y, size, color) {
36
+ ctx.save();
37
+ ctx.translate(x, y);
38
+ ctx.scale(size, size);
39
+ ctx.fillStyle = color;
40
+ ctx.beginPath();
41
+ ctx.moveTo(0, 3);
42
+ ctx.bezierCurveTo(-15, -5, -9, -16, 0, -8);
43
+ ctx.bezierCurveTo(9, -16, 15, -5, 0, 3);
44
+ ctx.fill();
45
+ ctx.restore();
46
+ }
47
+ /** Original procedural character artwork, with expressive poses instead of downloaded sprites. */
48
+ export function paintGrinch(ctx, model, options, quiet) {
49
+ const a = model.actor, size = options.size, phase = a.phase, t = model.time, age = a.age;
50
+ const walking = ['arriving', 'sneaking', 'escaping', 'peeking'].includes(phase), climbing = phase === 'climbing' || (phase === 'arriving' && options.entrance === 'rope');
51
+ const caught = phase === 'caught', warm = phase === 'warming', nice = options.mood === 'friendly';
52
+ const reach = ['reaching', 'stealing'].includes(phase), stash = phase === 'stashing', wave = phase === 'waving', gloat = phase === 'gloating';
53
+ const bob = quiet
54
+ ? 0
55
+ : walking
56
+ ? Math.sin(a.gait * 2) * 1.5
57
+ : climbing
58
+ ? Math.sin(a.gait) * 1.5
59
+ : Math.sin(t * 2.2) * 0.6;
60
+ if (a.rope) {
61
+ ctx.save();
62
+ ctx.strokeStyle = '#29402a65';
63
+ ctx.lineWidth = 1.8;
64
+ ctx.beginPath();
65
+ ctx.moveTo(a.rope.x, a.rope.y);
66
+ ctx.quadraticCurveTo(a.rope.x - 5, (a.rope.y + a.y) / 2, a.x + a.facing * 16 * size, a.y - 73 * size);
67
+ ctx.stroke();
68
+ ctx.strokeStyle = '#fff6db';
69
+ ctx.lineWidth = 0.8;
70
+ ctx.stroke();
71
+ ctx.restore();
72
+ }
73
+ ctx.save();
74
+ ctx.translate(a.x, a.y + bob);
75
+ ctx.scale(size * a.facing, size);
76
+ const stroke = '#23351d', fur = options.furColor, furLight = '#b3d85a', red = options.coatColor, cream = '#fff5de';
77
+ ctx.lineCap = 'round';
78
+ ctx.lineJoin = 'round';
79
+ const ellipse = (x, y, rx, ry, fill, line = stroke) => {
80
+ ctx.fillStyle = fill;
81
+ ctx.strokeStyle = line;
82
+ ctx.lineWidth = 0.9;
83
+ ctx.beginPath();
84
+ ctx.ellipse(x, y, rx, ry, 0, 0, TAU);
85
+ ctx.fill();
86
+ if (line !== 'none')
87
+ ctx.stroke();
88
+ };
89
+ const path = (fill, draw, line = stroke, width = 1) => {
90
+ ctx.fillStyle = fill;
91
+ ctx.strokeStyle = line;
92
+ ctx.lineWidth = width;
93
+ ctx.beginPath();
94
+ draw();
95
+ ctx.fill();
96
+ if (line !== 'none')
97
+ ctx.stroke();
98
+ };
99
+ const limb = (x, y, tx, ty, width, fill) => {
100
+ ctx.lineWidth = width + 1.3;
101
+ ctx.strokeStyle = stroke;
102
+ ctx.beginPath();
103
+ ctx.moveTo(x, y);
104
+ ctx.quadraticCurveTo((x + tx) / 2 - 3, (y + ty) / 2 + 5, tx, ty);
105
+ ctx.stroke();
106
+ ctx.lineWidth = width;
107
+ ctx.strokeStyle = fill;
108
+ ctx.stroke();
109
+ };
110
+ ctx.save();
111
+ ctx.globalAlpha = 0.15;
112
+ ellipse(0, 0 - bob, 25, 3, '#0c1911', 'none');
113
+ ctx.restore();
114
+ // Sack follows the shoulder and gets rounder as illustrated presents are stashed.
115
+ const fullness = Math.min(3, model.stolen + (model.held ? 0.3 : 0));
116
+ path('#7e5438', () => {
117
+ ctx.moveTo(-20, -65);
118
+ ctx.bezierCurveTo(-45 - fullness * 2, -62, -43 - fullness * 3, -25, -26, -24);
119
+ ctx.bezierCurveTo(-8, -22, -7, -52, -20, -65);
120
+ });
121
+ ctx.strokeStyle = '#bb9160';
122
+ ctx.lineWidth = 1.1;
123
+ ctx.beginPath();
124
+ ctx.moveTo(-27, -55);
125
+ ctx.quadraticCurveTo(-35, -43, -28, -30);
126
+ ctx.stroke();
127
+ ctx.strokeStyle = cream;
128
+ ctx.lineWidth = 1;
129
+ ctx.beginPath();
130
+ ctx.moveTo(-25, -61);
131
+ ctx.lineTo(-14, -64);
132
+ ctx.stroke();
133
+ // Planted feet and alternating knee bends make the walk feel deliberately sneaky.
134
+ const step = quiet ? 0 : Math.sin(a.gait) * (walking ? 9 : climbing ? 6 : 0);
135
+ limb(-7, -27, -9 - step, -5, 5.8, fur);
136
+ limb(8, -27, 9 + step, -5, 5.8, fur);
137
+ path('#263529', () => {
138
+ ctx.moveTo(-12 - step, -9);
139
+ ctx.quadraticCurveTo(-24 - step, -5, -21 - step, -1);
140
+ ctx.lineTo(-3 - step, -1);
141
+ ctx.quadraticCurveTo(0 - step, -4, -5 - step, -7);
142
+ });
143
+ path('#263529', () => {
144
+ ctx.moveTo(6 + step, -9);
145
+ ctx.quadraticCurveTo(21 + step, -4, 22 + step, -10);
146
+ ctx.quadraticCurveTo(31 + step, 1, 8 + step, 0);
147
+ ctx.lineTo(3 + step, -3);
148
+ });
149
+ // A pear-shaped Santa coat with a soft fur hem and narrow belt.
150
+ path(red, () => {
151
+ ctx.moveTo(-12, -66);
152
+ ctx.bezierCurveTo(-22, -58, -25, -42, -23, -30);
153
+ ctx.quadraticCurveTo(0, -18, 22, -30);
154
+ ctx.bezierCurveTo(22, -45, 18, -61, 10, -66);
155
+ ctx.closePath();
156
+ });
157
+ ctx.strokeStyle = '#ef7180';
158
+ ctx.lineWidth = 1.2;
159
+ ctx.beginPath();
160
+ ctx.moveTo(12, -55);
161
+ ctx.quadraticCurveTo(17, -45, 16, -35);
162
+ ctx.stroke();
163
+ path(cream, () => {
164
+ ctx.moveTo(-23, -33);
165
+ for (let x = -23; x < 22; x += 5)
166
+ ctx.quadraticCurveTo(x + 2, -26, x + 5, -30);
167
+ ctx.lineTo(22, -24);
168
+ ctx.quadraticCurveTo(0, -17, -23, -25);
169
+ ctx.closePath();
170
+ });
171
+ ctx.fillStyle = '#f9edcd';
172
+ ctx.beginPath();
173
+ ctx.roundRect(-2, -60, 4, 32, 1);
174
+ ctx.fill();
175
+ path('#263529', () => {
176
+ ctx.moveTo(-23, -40);
177
+ ctx.quadraticCurveTo(0, -34, 22, -40);
178
+ ctx.lineTo(22, -34);
179
+ ctx.quadraticCurveTo(0, -28, -23, -34);
180
+ ctx.closePath();
181
+ });
182
+ ctx.strokeStyle = '#edc565';
183
+ ctx.lineWidth = 2;
184
+ ctx.beginPath();
185
+ ctx.roundRect(-4, -39, 10, 8, 1);
186
+ ctx.stroke();
187
+ // Thin arms, furry cuffs and long fingers have pose-specific targets.
188
+ let left = { x: -24, y: -42 }, right = { x: 23, y: -43 };
189
+ if (reach) {
190
+ right = { x: 28, y: -46 + Math.min(1, age / 0.55) * 32 };
191
+ left = { x: -16, y: -48 };
192
+ }
193
+ if (phase === 'stealing')
194
+ right = { x: 23, y: -14 - clamp(age / 0.65, 0, 1) * 37 };
195
+ if (stash) {
196
+ const p = clamp(age / 0.7, 0, 1);
197
+ right = { x: 23 - 44 * p, y: -51 - Math.sin(p * Math.PI) * 15 };
198
+ left = { x: -24, y: -60 };
199
+ }
200
+ if (caught) {
201
+ left = { x: -28, y: -79 };
202
+ right = { x: 28, y: -79 };
203
+ }
204
+ if (wave) {
205
+ right = { x: 27 + (quiet ? 0 : Math.sin(age * 12) * 4), y: -83 };
206
+ }
207
+ if (gloat) {
208
+ left = { x: -13, y: -46 };
209
+ right = { x: 16, y: -50 };
210
+ }
211
+ if (climbing) {
212
+ left = { x: -13, y: -83 + Math.sin(a.gait) * 8 };
213
+ right = { x: 16, y: -84 - Math.sin(a.gait) * 8 };
214
+ }
215
+ if (warm) {
216
+ left = { x: -8, y: -55 };
217
+ right = { x: 9, y: -55 };
218
+ }
219
+ for (const [side, hand] of [
220
+ [-1, left],
221
+ [1, right],
222
+ ]) {
223
+ limb(side * 14, -60, hand.x, hand.y, 7, red);
224
+ ellipse(hand.x, hand.y + 2, 5.8, 4.3, cream);
225
+ ellipse(hand.x, hand.y - 3, 5.1, 6, fur);
226
+ ctx.strokeStyle = stroke;
227
+ ctx.lineWidth = 1;
228
+ for (let f = 0; f < 3; f++) {
229
+ ctx.beginPath();
230
+ ctx.moveTo(hand.x - 3 + f * 2.6, hand.y - 5);
231
+ ctx.lineTo(hand.x - 4 + f * 3, hand.y - 10 + f * 0.7);
232
+ ctx.stroke();
233
+ }
234
+ }
235
+ // Broad fluffy cheeks, tapering chin and an asymmetric grin.
236
+ path(fur, () => {
237
+ ctx.moveTo(-9, -65);
238
+ ctx.quadraticCurveTo(-12, -74, -18, -76);
239
+ ctx.lineTo(-28, -80);
240
+ ctx.lineTo(-23, -84);
241
+ ctx.lineTo(-31, -89);
242
+ ctx.lineTo(-23, -91);
243
+ ctx.quadraticCurveTo(-27, -109, -10, -115);
244
+ ctx.lineTo(-12, -121);
245
+ ctx.lineTo(-5, -118);
246
+ ctx.lineTo(1, -124);
247
+ ctx.lineTo(4, -117);
248
+ ctx.lineTo(12, -122);
249
+ ctx.lineTo(11, -115);
250
+ ctx.quadraticCurveTo(27, -108, 23, -92);
251
+ ctx.lineTo(31, -90);
252
+ ctx.lineTo(24, -85);
253
+ ctx.lineTo(29, -81);
254
+ ctx.lineTo(18, -77);
255
+ ctx.quadraticCurveTo(11, -72, 8, -65);
256
+ ctx.quadraticCurveTo(0, -61, -9, -65);
257
+ });
258
+ ctx.strokeStyle = furLight;
259
+ ctx.lineWidth = 1.4;
260
+ ctx.beginPath();
261
+ ctx.moveTo(-23, -89);
262
+ ctx.quadraticCurveTo(-18, -84, -14, -85);
263
+ ctx.moveTo(16, -83);
264
+ ctx.quadraticCurveTo(21, -83, 25, -87);
265
+ ctx.stroke();
266
+ const blink = quiet ? 1 : Math.sin(t * 1.37) > 0.995 ? 0.12 : 1;
267
+ for (const side of [-1, 1]) {
268
+ ellipse(side * 9, -98, 7.1, 4.8 * blink, caught ? '#fff4b5' : '#e8ce51');
269
+ ellipse(side * 9 + (nice ? 0 : 1.2), -98, 1.7, (caught ? 3.5 : 2.8) * blink, '#19281d', 'none');
270
+ ellipse(side * 9 + 0.5, -99.1, 0.55, 0.8 * blink, '#fff7d9', 'none');
271
+ }
272
+ // Eyebrows soften when redeemed and lift sharply when caught.
273
+ ctx.strokeStyle = '#26371b';
274
+ ctx.lineWidth = 2.3;
275
+ for (const side of [-1, 1]) {
276
+ ctx.beginPath();
277
+ ctx.moveTo(side * 17, -105 - (caught ? 4 : 0));
278
+ ctx.quadraticCurveTo(side * 10, nice ? -111 : caught ? -113 : -104, side * 3, -104 + (nice ? -3 : 2));
279
+ ctx.stroke();
280
+ }
281
+ ellipse(1, -91, 4.5, 2.3, '#5a8f2c', 'none');
282
+ ctx.strokeStyle = '#26371b';
283
+ ctx.lineWidth = 1.4;
284
+ ctx.beginPath();
285
+ if (caught) {
286
+ ctx.ellipse(1, -80, 3, 4, 0, 0, TAU);
287
+ }
288
+ else {
289
+ ctx.moveTo(-17, -85);
290
+ ctx.bezierCurveTo(-10, -72, 9, nice ? -70 : -75, 19, -88);
291
+ ctx.moveTo(-18, -86);
292
+ ctx.quadraticCurveTo(-20, -82, -19, -80);
293
+ ctx.moveTo(19, -89);
294
+ ctx.quadraticCurveTo(23, -87, 21, -83);
295
+ }
296
+ ctx.stroke();
297
+ if (!caught) {
298
+ ctx.strokeStyle = furLight;
299
+ ctx.lineWidth = 1;
300
+ ctx.beginPath();
301
+ ctx.moveTo(-7, -77);
302
+ ctx.quadraticCurveTo(1, -73, 7, -78);
303
+ ctx.stroke();
304
+ }
305
+ // A soft bent hat with the little bobble clearly separated from the face.
306
+ path(red, () => {
307
+ ctx.moveTo(-22, -110);
308
+ ctx.quadraticCurveTo(-21, -137, 2, -141);
309
+ ctx.bezierCurveTo(23, -148, 33, -137, 29, -126);
310
+ ctx.quadraticCurveTo(21, -133, 15, -125);
311
+ ctx.lineTo(20, -111);
312
+ ctx.closePath();
313
+ });
314
+ path(cream, () => {
315
+ ctx.moveTo(-24, -114);
316
+ for (let x = -24; x < 21; x += 5)
317
+ ctx.quadraticCurveTo(x + 2, -118, x + 5, -114);
318
+ ctx.lineTo(23, -107);
319
+ ctx.quadraticCurveTo(0, -102, -24, -108);
320
+ ctx.closePath();
321
+ });
322
+ ellipse(30, -124, 7, 7.5, cream);
323
+ ctx.strokeStyle = '#ef7c86';
324
+ ctx.lineWidth = 1.3;
325
+ ctx.beginPath();
326
+ ctx.moveTo(-12, -124);
327
+ ctx.quadraticCurveTo(-3, -136, 9, -135);
328
+ ctx.stroke();
329
+ if (warm) {
330
+ const p = clamp(age / 1.7, 0, 1);
331
+ heart(ctx, 0, -57, 0.6 + Math.sin(p * Math.PI) * 0.35, '#f1a9a5');
332
+ for (let i = 0; i < 3; i++)
333
+ heart(ctx, -27 + i * 27, -100 - p * 55 + (i % 2) * 12, (0.35 + i * 0.1) * Math.sin(p * Math.PI), '#e74462');
334
+ }
335
+ ctx.restore();
336
+ }
337
+ export function paintPresents(ctx, model, size, held) {
338
+ for (const gift of model.gifts) {
339
+ if (gift.state === 'stolen')
340
+ continue;
341
+ const isHeld = gift.state === 'held';
342
+ if (isHeld !== held)
343
+ continue;
344
+ if (!gift.visible && !isHeld && !gift.returning)
345
+ continue;
346
+ let scale = 1;
347
+ if (isHeld && model.actor.phase === 'stashing')
348
+ scale = 1 - clamp(model.actor.age / 0.7, 0, 1) * 0.75;
349
+ paintGift(ctx, model.giftPoint(gift), gift.color, size * 0.86, scale);
350
+ }
351
+ }
352
+ export function giftColor(index) {
353
+ return ['#c92c42', '#71a540', '#d99a39', '#499286', '#c67589'][index % 5];
354
+ }
355
+ //# sourceMappingURL=paint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint.js","sourceRoot":"","sources":["../src/paint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export interface Point {
2
+ x: number;
3
+ y: number;
4
+ }
5
+ export interface Box extends Point {
6
+ width: number;
7
+ height: number;
8
+ }
9
+ export type GrinchMood = 'mischievous' | 'friendly';
10
+ export type GrinchPhase = 'arriving' | 'idle' | 'sneaking' | 'climbing' | 'reaching' | 'stealing' | 'stashing' | 'gloating' | 'escaping' | 'hiding' | 'peeking' | 'caught' | 'warming' | 'waving';
11
+ export type GiftState = 'available' | 'held' | 'stolen' | 'returning';
12
+ export type GrinchEvent = 'ready' | 'phase' | 'theft:start' | 'gift:stolen' | 'gift:returned' | 'caught' | 'redeemed' | 'error';
13
+ export interface GrinchOptions {
14
+ /** Current document or an element. No DOM is touched during server rendering. */
15
+ root?: Document | HTMLElement;
16
+ /** Gift-bearing elements; defaults to [data-grinch-gift], then a few real page surfaces. */
17
+ targets?: string | readonly HTMLElement[];
18
+ territory?: 'page' | 'root';
19
+ /** A selector for places to hide; at most 64 are measured. */
20
+ objects?: string;
21
+ /** Maximum illustrated presents, 1–12. Host content is never removed or moved. */
22
+ maxGifts?: number;
23
+ /** Character scale, .6–1.8; mobileScale applies below 600px. */
24
+ size?: number;
25
+ mobileScale?: number;
26
+ speed?: number;
27
+ /** Seconds between heists, 3–120. */
28
+ cooldown?: number;
29
+ fearRadius?: number;
30
+ mood?: GrinchMood;
31
+ autoSteal?: boolean;
32
+ entrance?: 'sneak' | 'rope' | 'appear';
33
+ motion?: 'system' | 'full' | 'none';
34
+ observe?: boolean;
35
+ zIndex?: number;
36
+ furColor?: string;
37
+ coatColor?: string;
38
+ /** Optional small visitor pause control. Default false. */
39
+ controls?: boolean;
40
+ }
41
+ export type GrinchTuning = Pick<GrinchOptions, 'size' | 'mobileScale' | 'speed' | 'cooldown' | 'fearRadius' | 'mood' | 'autoSteal' | 'furColor' | 'coatColor'>;
42
+ export interface GrinchSnapshot {
43
+ readonly state: 'idle' | 'running' | 'paused' | 'destroyed';
44
+ readonly reducedMotion: boolean;
45
+ readonly mood: GrinchMood;
46
+ readonly phase: GrinchPhase;
47
+ /** Character feet in document CSS coordinates. */
48
+ readonly character: Readonly<Point & {
49
+ visible: boolean;
50
+ behind: boolean;
51
+ facing: number;
52
+ }> | null;
53
+ readonly gifts: readonly Readonly<Point & {
54
+ id: string;
55
+ state: GiftState;
56
+ visible: boolean;
57
+ }>[];
58
+ readonly stolen: number;
59
+ readonly totalStolen: number;
60
+ readonly caught: number;
61
+ }
62
+ export interface GrinchEventData {
63
+ readonly phase?: GrinchPhase;
64
+ readonly giftId?: string;
65
+ readonly totalStolen?: number;
66
+ readonly source?: string;
67
+ }
68
+ export interface GrinchController {
69
+ /** Queue a heist; optional selector must match an existing gift-bearing element. */
70
+ steal(selector?: string): boolean;
71
+ /** Startle him and return one held/stolen present. */
72
+ shoo(): void;
73
+ /** Send stolen presents back to their live page anchors. */
74
+ returnGifts(): void;
75
+ /** Grow a little heart, return all presents, and switch to friendly mode. */
76
+ redeem(): void;
77
+ wave(): void;
78
+ update(options: GrinchTuning): void;
79
+ refresh(): void;
80
+ pause(): void;
81
+ resume(): void;
82
+ destroy(): void;
83
+ getState(): GrinchSnapshot;
84
+ on(event: GrinchEvent, callback: (data: GrinchEventData) => void): () => void;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,83 @@
1
1
  {
2
2
  "name": "@fluritheme/grinch",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "A mischievous green holiday visitor that sneaks around your website, steals illustrated presents, hides behind elements and learns a little kindness. Zero dependencies.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": {
8
+ "name": "František Gejdoš",
9
+ "url": "https://fluri.xyz/founder/",
10
+ "email": "fluritheme@gmail.com"
11
+ },
12
+ "homepage": "https://grinch.fluri.xyz/",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/fluritheme/grinch.git"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/fluritheme/grinch/issues"
19
+ },
20
+ "keywords": [
21
+ "grinch",
22
+ "christmas",
23
+ "holiday",
24
+ "animation",
25
+ "website-effects",
26
+ "canvas",
27
+ "typescript",
28
+ "react",
29
+ "vue",
30
+ "mascot",
31
+ "interactive",
32
+ "presents",
33
+ "fluri",
34
+ "zero-dependencies"
35
+ ],
36
+ "sideEffects": false,
37
+ "files": [
38
+ "dist",
39
+ "README.md",
40
+ "LICENSE",
41
+ "CHANGELOG.md"
42
+ ],
43
+ "exports": {
44
+ ".": {
45
+ "types": "./dist/index.d.ts",
46
+ "import": "./dist/index.js"
47
+ },
48
+ "./package.json": "./package.json"
49
+ },
50
+ "main": "./dist/index.js",
51
+ "types": "./dist/index.d.ts",
52
+ "publishConfig": {
53
+ "access": "public"
54
+ },
55
+ "engines": {
56
+ "node": ">=22.12"
57
+ },
58
+ "packageManager": "pnpm@10.33.2",
59
+ "scripts": {
60
+ "build": "tsc -p tsconfig.build.json",
61
+ "build:site": "node scripts/prepare-seo.mjs grinch && node scripts/prepare-site.mjs && vite build",
62
+ "dev": "vite --host 127.0.0.1 --port 5196",
63
+ "preview": "vite preview --host 127.0.0.1 --port 4196",
64
+ "typecheck": "tsc --noEmit",
65
+ "test": "vitest run",
66
+ "test:browser": "playwright test",
67
+ "format": "prettier --write .",
68
+ "format:check": "prettier --check .",
69
+ "check": "pnpm typecheck && pnpm test && pnpm build && pnpm build:site && pnpm test:browser && pnpm format:check && pnpm release:check",
70
+ "release:check": "node scripts/release-check.mjs",
71
+ "deploy": "pnpm build:site && wrangler deploy",
72
+ "prepublishOnly": "pnpm build && pnpm release:check"
73
+ },
74
+ "devDependencies": {
75
+ "@playwright/test": "1.64.1",
76
+ "@types/node": "26.6.6",
77
+ "prettier": "3.9.10",
78
+ "typescript": "6.0.3",
79
+ "vite": "8.3.6",
80
+ "vitest": "5.1.0",
81
+ "wrangler": "4.158.0"
82
+ }
83
+ }