@thewhateverapp/tile-sdk 0.17.12 → 0.17.14
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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/react/confetti.d.ts +85 -0
- package/dist/react/confetti.d.ts.map +1 -0
- package/dist/react/confetti.js +134 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -0
- package/package.json +3 -1
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export { VideoPlayer, useVideoState, useVideo, // Alias for useVideoState
|
|
|
9
9
|
useCuePoint, useCuePoints, useVideoProgress, Slideshow, useSlideshowState, useSlideshow, // Alias for useSlideshowState
|
|
10
10
|
OverlaySlot, FullOverlay, GradientOverlay, } from './react/overlay/index.js';
|
|
11
11
|
export type { VideoState, VideoControls, VideoContextValue, VideoPlayerProps, CuePoint, SlideImage, SlideshowState, SlideshowControls, SlideshowContextValue, SlideshowProps, SlotPosition, OverlaySlotProps, FullOverlayProps, GradientOverlayProps, } from './react/overlay/index.js';
|
|
12
|
+
export { confetti } from './react/confetti.js';
|
|
13
|
+
export type { ConfettiOptions } from './react/confetti.js';
|
|
12
14
|
export { getTileBridge, TileBridge } from './bridge/TileBridge.js';
|
|
13
15
|
export type { TileMessage, TileConfig, TileTokenData, KeyboardState, VisibilityState } from './bridge/TileBridge.js';
|
|
14
16
|
export { StateClient } from './state/StateClient.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAEL,WAAW,EACX,aAAa,EACb,QAAQ,EAAE,0BAA0B;AACpC,WAAW,EACX,YAAY,EACZ,gBAAgB,EAEhB,SAAS,EACT,iBAAiB,EACjB,YAAY,EAAE,8BAA8B;AAE5C,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAEV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EAER,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EAEd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGrH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtE,cAAc,kBAAkB,CAAC;AAGjC,cAAc,YAAY,CAAC;AAG3B,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAEL,WAAW,EACX,aAAa,EACb,QAAQ,EAAE,0BAA0B;AACpC,WAAW,EACX,YAAY,EACZ,gBAAgB,EAEhB,SAAS,EACT,iBAAiB,EACjB,YAAY,EAAE,8BAA8B;AAE5C,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAEV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EAER,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EAEd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGrH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtE,cAAc,kBAAkB,CAAC;AAGjC,cAAc,YAAY,CAAC;AAG3B,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,8 @@ useCuePoint, useCuePoints, useVideoProgress,
|
|
|
15
15
|
Slideshow, useSlideshowState, useSlideshow, // Alias for useSlideshowState
|
|
16
16
|
// Positioning components
|
|
17
17
|
OverlaySlot, FullOverlay, GradientOverlay, } from './react/overlay/index.js';
|
|
18
|
+
// Confetti - CSS-based, mobile WebView safe
|
|
19
|
+
export { confetti } from './react/confetti.js';
|
|
18
20
|
// Bridge for secure communication
|
|
19
21
|
export { getTileBridge, TileBridge } from './bridge/TileBridge.js';
|
|
20
22
|
// State API client
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas-confetti compatible options
|
|
3
|
+
* Maps to react-confetti-explosion props under the hood
|
|
4
|
+
*/
|
|
5
|
+
export interface ConfettiOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Number of confetti particles (default: 100)
|
|
8
|
+
* Keep under 400 for optimal performance
|
|
9
|
+
*/
|
|
10
|
+
particleCount?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Spread angle in degrees (default: 70)
|
|
13
|
+
* Mapped to width: spread * 15 pixels
|
|
14
|
+
*/
|
|
15
|
+
spread?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Origin point for the confetti burst
|
|
18
|
+
* x: 0-1 (left to right), y: 0-1 (top to bottom)
|
|
19
|
+
* Default: { x: 0.5, y: 0.5 } (center)
|
|
20
|
+
*/
|
|
21
|
+
origin?: {
|
|
22
|
+
x?: number;
|
|
23
|
+
y?: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Initial velocity/force of particles (default: 0.5)
|
|
27
|
+
* Range: 0-1 (higher = more explosive)
|
|
28
|
+
*/
|
|
29
|
+
startVelocity?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Animation duration in milliseconds (default: 2200)
|
|
32
|
+
*/
|
|
33
|
+
ticks?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Size of particles in pixels (default: 12)
|
|
36
|
+
*/
|
|
37
|
+
scalar?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Array of CSS color strings
|
|
40
|
+
* Default: festive colors
|
|
41
|
+
*/
|
|
42
|
+
colors?: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Z-index for the confetti layer
|
|
45
|
+
*/
|
|
46
|
+
zIndex?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Callback when animation completes
|
|
49
|
+
*/
|
|
50
|
+
onComplete?: () => void;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Launch confetti with canvas-confetti compatible API
|
|
54
|
+
*
|
|
55
|
+
* Uses CSS animations (react-confetti-explosion) under the hood,
|
|
56
|
+
* which is safe for mobile WebViews that may have issues with
|
|
57
|
+
* canvas-confetti's OffscreenCanvas/WebWorker approach.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* // Basic usage
|
|
61
|
+
* confetti();
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* // Custom configuration
|
|
65
|
+
* confetti({
|
|
66
|
+
* particleCount: 150,
|
|
67
|
+
* spread: 90,
|
|
68
|
+
* origin: { x: 0.5, y: 0.3 }
|
|
69
|
+
* });
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* // Celebration burst from bottom
|
|
73
|
+
* confetti({
|
|
74
|
+
* particleCount: 200,
|
|
75
|
+
* spread: 120,
|
|
76
|
+
* startVelocity: 0.8,
|
|
77
|
+
* origin: { x: 0.5, y: 1 }
|
|
78
|
+
* });
|
|
79
|
+
*/
|
|
80
|
+
export declare function confetti(options?: ConfettiOptions): Promise<void>;
|
|
81
|
+
export declare namespace confetti {
|
|
82
|
+
var reset: () => void;
|
|
83
|
+
}
|
|
84
|
+
export default confetti;
|
|
85
|
+
//# sourceMappingURL=confetti.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confetti.d.ts","sourceRoot":"","sources":["../../src/react/confetti.tsx"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AA2ED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDrE;yBAvDe,QAAQ;qBA4DK,IAAI;;AAWjC,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { createRoot } from 'react-dom/client';
|
|
4
|
+
import ConfettiExplosion from 'react-confetti-explosion';
|
|
5
|
+
// Container for mounting confetti explosions
|
|
6
|
+
let confettiContainer = null;
|
|
7
|
+
let confettiRoot = null;
|
|
8
|
+
let activeExplosions = new Set();
|
|
9
|
+
let explosionCounter = 0;
|
|
10
|
+
function getConfettiContainer() {
|
|
11
|
+
if (!confettiContainer) {
|
|
12
|
+
confettiContainer = document.createElement('div');
|
|
13
|
+
confettiContainer.id = 'tile-sdk-confetti-container';
|
|
14
|
+
confettiContainer.style.cssText = `
|
|
15
|
+
position: fixed;
|
|
16
|
+
top: 0;
|
|
17
|
+
left: 0;
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 100%;
|
|
20
|
+
pointer-events: none;
|
|
21
|
+
z-index: 9999;
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
`;
|
|
24
|
+
document.body.appendChild(confettiContainer);
|
|
25
|
+
confettiRoot = createRoot(confettiContainer);
|
|
26
|
+
}
|
|
27
|
+
return confettiContainer;
|
|
28
|
+
}
|
|
29
|
+
function renderExplosions() {
|
|
30
|
+
if (!confettiRoot)
|
|
31
|
+
return;
|
|
32
|
+
// Get all active explosion data
|
|
33
|
+
const explosionData = Array.from(activeExplosions).map(id => {
|
|
34
|
+
return window.__confettiExplosions?.[id];
|
|
35
|
+
}).filter(Boolean);
|
|
36
|
+
if (explosionData.length === 0) {
|
|
37
|
+
confettiRoot.render(null);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
confettiRoot.render(React.createElement(React.Fragment, null, explosionData.map((data) => (React.createElement("div", { key: data.id, style: {
|
|
41
|
+
position: 'absolute',
|
|
42
|
+
left: `${data.origin.x * 100}%`,
|
|
43
|
+
top: `${data.origin.y * 100}%`,
|
|
44
|
+
transform: 'translate(-50%, -50%)',
|
|
45
|
+
} },
|
|
46
|
+
React.createElement(ConfettiExplosion, { particleCount: data.particleCount, force: data.force, duration: data.duration, particleSize: data.particleSize, width: data.width, colors: data.colors, zIndex: data.zIndex, onComplete: () => {
|
|
47
|
+
// Cleanup this explosion
|
|
48
|
+
activeExplosions.delete(data.id);
|
|
49
|
+
delete window.__confettiExplosions?.[data.id];
|
|
50
|
+
data.onComplete?.();
|
|
51
|
+
renderExplosions();
|
|
52
|
+
} }))))));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Launch confetti with canvas-confetti compatible API
|
|
56
|
+
*
|
|
57
|
+
* Uses CSS animations (react-confetti-explosion) under the hood,
|
|
58
|
+
* which is safe for mobile WebViews that may have issues with
|
|
59
|
+
* canvas-confetti's OffscreenCanvas/WebWorker approach.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* // Basic usage
|
|
63
|
+
* confetti();
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* // Custom configuration
|
|
67
|
+
* confetti({
|
|
68
|
+
* particleCount: 150,
|
|
69
|
+
* spread: 90,
|
|
70
|
+
* origin: { x: 0.5, y: 0.3 }
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // Celebration burst from bottom
|
|
75
|
+
* confetti({
|
|
76
|
+
* particleCount: 200,
|
|
77
|
+
* spread: 120,
|
|
78
|
+
* startVelocity: 0.8,
|
|
79
|
+
* origin: { x: 0.5, y: 1 }
|
|
80
|
+
* });
|
|
81
|
+
*/
|
|
82
|
+
export function confetti(options = {}) {
|
|
83
|
+
const { particleCount = 100, spread = 70, origin = {}, startVelocity = 0.5, ticks = 2200, scalar = 12, colors, zIndex = 9999, onComplete, } = options;
|
|
84
|
+
// Ensure container exists
|
|
85
|
+
getConfettiContainer();
|
|
86
|
+
// Initialize explosion storage
|
|
87
|
+
if (!window.__confettiExplosions) {
|
|
88
|
+
window.__confettiExplosions = {};
|
|
89
|
+
}
|
|
90
|
+
// Create unique ID for this explosion
|
|
91
|
+
const id = `explosion_${++explosionCounter}`;
|
|
92
|
+
// Map canvas-confetti options to react-confetti-explosion props
|
|
93
|
+
const explosionData = {
|
|
94
|
+
id,
|
|
95
|
+
particleCount: Math.min(particleCount, 400), // Cap for performance
|
|
96
|
+
force: Math.max(0, Math.min(1, startVelocity)), // Clamp 0-1
|
|
97
|
+
duration: ticks,
|
|
98
|
+
particleSize: scalar,
|
|
99
|
+
width: spread * 15, // Approximate spread-to-width conversion
|
|
100
|
+
origin: {
|
|
101
|
+
x: origin.x ?? 0.5,
|
|
102
|
+
y: origin.y ?? 0.5,
|
|
103
|
+
},
|
|
104
|
+
colors: colors || ['#FFC700', '#FF0000', '#2E3191', '#41BBC7', '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4'],
|
|
105
|
+
zIndex,
|
|
106
|
+
onComplete,
|
|
107
|
+
};
|
|
108
|
+
// Store explosion data
|
|
109
|
+
window.__confettiExplosions[id] = explosionData;
|
|
110
|
+
activeExplosions.add(id);
|
|
111
|
+
// Render all active explosions
|
|
112
|
+
renderExplosions();
|
|
113
|
+
// Return promise that resolves when animation completes
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
explosionData.onComplete = () => {
|
|
116
|
+
onComplete?.();
|
|
117
|
+
resolve();
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Reset/clear all active confetti
|
|
123
|
+
*/
|
|
124
|
+
confetti.reset = function () {
|
|
125
|
+
activeExplosions.clear();
|
|
126
|
+
if (window.__confettiExplosions) {
|
|
127
|
+
window.__confettiExplosions = {};
|
|
128
|
+
}
|
|
129
|
+
if (confettiRoot) {
|
|
130
|
+
confettiRoot.render(null);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
// Default export for drop-in replacement
|
|
134
|
+
export default confetti;
|
package/dist/react/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ export { useViewport } from './useViewport.js';
|
|
|
6
6
|
export { TileContainer } from './TileContainer.js';
|
|
7
7
|
export { withTile } from './withTile.js';
|
|
8
8
|
export * from './overlay/index.js';
|
|
9
|
+
export { confetti } from './confetti.js';
|
|
10
|
+
export type { ConfettiOptions } from './confetti.js';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/react/index.js
CHANGED
|
@@ -11,3 +11,5 @@ export { withTile } from './withTile.js';
|
|
|
11
11
|
// import { ExcaliburGame, useEngine, useGameLoop, ... } from '@thewhateverapp/tile-sdk/excalibur'
|
|
12
12
|
// Overlay components for hybrid tiles (video/image with interactive overlays)
|
|
13
13
|
export * from './overlay/index.js';
|
|
14
|
+
// Confetti - CSS-based, mobile WebView safe
|
|
15
|
+
export { confetti } from './confetti.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thewhateverapp/tile-sdk",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.14",
|
|
4
4
|
"description": "SDK for building interactive tiles on The Whatever App platform",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"@thewhateverapp/scene-sdk": "^0.1.1",
|
|
70
70
|
"embla-carousel-react": "^8.5.1",
|
|
71
71
|
"matter-js": "^0.19.0",
|
|
72
|
+
"react-confetti-explosion": "^2.1.2",
|
|
72
73
|
"zod": "^3.22.0"
|
|
73
74
|
},
|
|
74
75
|
"peerDependencies": {
|
|
@@ -85,6 +86,7 @@
|
|
|
85
86
|
"@types/matter-js": "^0.19.0",
|
|
86
87
|
"@types/node": "^20.0.0",
|
|
87
88
|
"@types/react": "^18.2.48",
|
|
89
|
+
"@types/react-dom": "^18.2.18",
|
|
88
90
|
"eslint": "^9.39.1",
|
|
89
91
|
"excalibur": "^0.29.3",
|
|
90
92
|
"next": "^14.2.0",
|