sa2kit 1.6.66 → 1.6.67

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 (41) hide show
  1. package/dist/festivalCard/index.d.mts +10 -0
  2. package/dist/festivalCard/index.d.ts +10 -0
  3. package/dist/festivalCard/index.js +206 -0
  4. package/dist/festivalCard/index.js.map +1 -0
  5. package/dist/festivalCard/index.mjs +181 -0
  6. package/dist/festivalCard/index.mjs.map +1 -0
  7. package/dist/index.d.mts +2 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.js +210 -18
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.mjs +208 -18
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/screenReceiver/core/index.d.mts +10 -2
  14. package/dist/screenReceiver/core/index.d.ts +10 -2
  15. package/dist/screenReceiver/core/index.js +15 -0
  16. package/dist/screenReceiver/core/index.js.map +1 -1
  17. package/dist/screenReceiver/core/index.mjs +15 -1
  18. package/dist/screenReceiver/core/index.mjs.map +1 -1
  19. package/dist/screenReceiver/index.d.mts +1 -1
  20. package/dist/screenReceiver/index.d.ts +1 -1
  21. package/dist/screenReceiver/index.js +21 -3
  22. package/dist/screenReceiver/index.js.map +1 -1
  23. package/dist/screenReceiver/index.mjs +21 -4
  24. package/dist/screenReceiver/index.mjs.map +1 -1
  25. package/dist/screenReceiver/server/index.js +1 -1
  26. package/dist/screenReceiver/server/index.js.map +1 -1
  27. package/dist/screenReceiver/server/index.mjs +1 -1
  28. package/dist/screenReceiver/server/index.mjs.map +1 -1
  29. package/dist/screenReceiver/server/next.d.mts +9 -0
  30. package/dist/screenReceiver/server/next.d.ts +9 -0
  31. package/dist/screenReceiver/server/next.js +178 -0
  32. package/dist/screenReceiver/server/next.js.map +1 -0
  33. package/dist/screenReceiver/server/next.mjs +176 -0
  34. package/dist/screenReceiver/server/next.mjs.map +1 -0
  35. package/dist/screenReceiver/web/index.d.mts +1 -1
  36. package/dist/screenReceiver/web/index.d.ts +1 -1
  37. package/dist/screenReceiver/web/index.js +21 -3
  38. package/dist/screenReceiver/web/index.js.map +1 -1
  39. package/dist/screenReceiver/web/index.mjs +21 -4
  40. package/dist/screenReceiver/web/index.mjs.map +1 -1
  41. package/package.json +11 -1
@@ -0,0 +1,10 @@
1
+ import React__default from 'react';
2
+
3
+ interface FestivalCard3DProps {
4
+ title?: string;
5
+ subtitle?: string;
6
+ className?: string;
7
+ }
8
+ declare const FestivalCard3D: React__default.FC<FestivalCard3DProps>;
9
+
10
+ export { FestivalCard3D, type FestivalCard3DProps };
@@ -0,0 +1,10 @@
1
+ import React__default from 'react';
2
+
3
+ interface FestivalCard3DProps {
4
+ title?: string;
5
+ subtitle?: string;
6
+ className?: string;
7
+ }
8
+ declare const FestivalCard3D: React__default.FC<FestivalCard3DProps>;
9
+
10
+ export { FestivalCard3D, type FestivalCard3DProps };
@@ -0,0 +1,206 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var THREE = require('three');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ function _interopNamespace(e) {
9
+ if (e && e.__esModule) return e;
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var React__default = /*#__PURE__*/_interopDefault(React);
27
+ var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
28
+
29
+ // src/festivalCard/components/FestivalCard3D.tsx
30
+ var createSnow = (count) => {
31
+ const positions = new Float32Array(count * 3);
32
+ const speeds = new Float32Array(count);
33
+ for (let i = 0; i < count; i++) {
34
+ const i3 = i * 3;
35
+ positions[i3] = (Math.random() - 0.5) * 16;
36
+ positions[i3 + 1] = Math.random() * 10 + 1;
37
+ positions[i3 + 2] = (Math.random() - 0.5) * 16;
38
+ speeds[i] = 4e-3 + Math.random() * 0.01;
39
+ }
40
+ return { positions, speeds };
41
+ };
42
+ var FestivalCard3D = ({
43
+ title = "Happy Holidays",
44
+ subtitle = "Wishing you joy and peace",
45
+ className
46
+ }) => {
47
+ const mountRef = React.useRef(null);
48
+ React.useEffect(() => {
49
+ const mount = mountRef.current;
50
+ if (!mount) return;
51
+ const scene = new THREE__namespace.Scene();
52
+ scene.fog = new THREE__namespace.Fog(528934, 12, 28);
53
+ const camera = new THREE__namespace.PerspectiveCamera(50, mount.clientWidth / mount.clientHeight, 0.1, 100);
54
+ camera.position.set(0, 2.6, 7.5);
55
+ const renderer = new THREE__namespace.WebGLRenderer({ antialias: true, alpha: true });
56
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
57
+ renderer.setSize(mount.clientWidth, mount.clientHeight);
58
+ renderer.outputColorSpace = THREE__namespace.SRGBColorSpace;
59
+ mount.appendChild(renderer.domElement);
60
+ const ambientLight = new THREE__namespace.AmbientLight(9090303, 0.8);
61
+ scene.add(ambientLight);
62
+ const keyLight = new THREE__namespace.DirectionalLight(16777215, 1.25);
63
+ keyLight.position.set(2, 5, 4);
64
+ scene.add(keyLight);
65
+ const fillLight = new THREE__namespace.PointLight(8050687, 0.9, 24);
66
+ fillLight.position.set(-4, 3, -2);
67
+ scene.add(fillLight);
68
+ const floor = new THREE__namespace.Mesh(
69
+ new THREE__namespace.CircleGeometry(12, 48),
70
+ new THREE__namespace.MeshStandardMaterial({ color: 1056826, roughness: 0.95, metalness: 0.05 })
71
+ );
72
+ floor.rotation.x = -Math.PI / 2;
73
+ floor.position.y = -1.2;
74
+ scene.add(floor);
75
+ const giftGroup = new THREE__namespace.Group();
76
+ scene.add(giftGroup);
77
+ const box = new THREE__namespace.Mesh(
78
+ new THREE__namespace.BoxGeometry(2, 1.6, 2),
79
+ new THREE__namespace.MeshStandardMaterial({ color: 14238053, roughness: 0.55, metalness: 0.2 })
80
+ );
81
+ giftGroup.add(box);
82
+ const ribbonMaterial = new THREE__namespace.MeshStandardMaterial({ color: 16767354, roughness: 0.3, metalness: 0.5 });
83
+ const verticalRibbon = new THREE__namespace.Mesh(new THREE__namespace.BoxGeometry(0.24, 1.7, 2.02), ribbonMaterial);
84
+ const horizontalRibbon = new THREE__namespace.Mesh(new THREE__namespace.BoxGeometry(2.02, 1.7, 0.24), ribbonMaterial);
85
+ giftGroup.add(verticalRibbon);
86
+ giftGroup.add(horizontalRibbon);
87
+ const lid = new THREE__namespace.Mesh(
88
+ new THREE__namespace.BoxGeometry(2.15, 0.34, 2.15),
89
+ new THREE__namespace.MeshStandardMaterial({ color: 13448278, roughness: 0.52, metalness: 0.2 })
90
+ );
91
+ lid.position.y = 0.98;
92
+ giftGroup.add(lid);
93
+ const bowLeft = new THREE__namespace.Mesh(new THREE__namespace.TorusGeometry(0.26, 0.08, 12, 32), ribbonMaterial);
94
+ bowLeft.rotation.set(Math.PI / 2, Math.PI / 6, 0);
95
+ bowLeft.position.set(-0.22, 1.14, 0);
96
+ const bowRight = bowLeft.clone();
97
+ bowRight.rotation.y = -Math.PI / 6;
98
+ bowRight.position.x = 0.22;
99
+ giftGroup.add(bowLeft, bowRight);
100
+ giftGroup.position.y = -0.15;
101
+ const { positions, speeds } = createSnow(260);
102
+ const snowGeometry = new THREE__namespace.BufferGeometry();
103
+ snowGeometry.setAttribute("position", new THREE__namespace.BufferAttribute(positions, 3));
104
+ const snow = new THREE__namespace.Points(
105
+ snowGeometry,
106
+ new THREE__namespace.PointsMaterial({
107
+ color: 15267071,
108
+ size: 0.08,
109
+ transparent: true,
110
+ opacity: 0.92,
111
+ depthWrite: false
112
+ })
113
+ );
114
+ scene.add(snow);
115
+ let rafId = 0;
116
+ const clock = new THREE__namespace.Clock();
117
+ const animate = () => {
118
+ const elapsed = clock.getElapsedTime();
119
+ const pos = snowGeometry.attributes.position;
120
+ for (let i = 0; i < pos.count; i++) {
121
+ const speed = speeds[i] ?? 0.01;
122
+ const y = pos.getY(i) - speed;
123
+ pos.setY(i, y < -1.1 ? 10 + Math.random() * 2 : y);
124
+ pos.setX(i, pos.getX(i) + Math.sin(elapsed + i * 0.04) * 16e-4);
125
+ }
126
+ pos.needsUpdate = true;
127
+ giftGroup.rotation.y = elapsed * 0.35;
128
+ giftGroup.position.y = -0.15 + Math.sin(elapsed * 1.4) * 0.08;
129
+ lid.position.y = 0.98 + Math.sin(elapsed * 2.2) * 0.08;
130
+ renderer.render(scene, camera);
131
+ rafId = window.requestAnimationFrame(animate);
132
+ };
133
+ const handleResize = () => {
134
+ if (!mount) return;
135
+ const width = mount.clientWidth;
136
+ const height = mount.clientHeight;
137
+ camera.aspect = width / height;
138
+ camera.updateProjectionMatrix();
139
+ renderer.setSize(width, height);
140
+ };
141
+ window.addEventListener("resize", handleResize);
142
+ animate();
143
+ return () => {
144
+ window.cancelAnimationFrame(rafId);
145
+ window.removeEventListener("resize", handleResize);
146
+ scene.traverse((obj) => {
147
+ const mesh = obj;
148
+ if (mesh.geometry) mesh.geometry.dispose();
149
+ const material = mesh.material;
150
+ if (Array.isArray(material)) material.forEach((m) => m.dispose());
151
+ else material?.dispose();
152
+ });
153
+ renderer.dispose();
154
+ mount.removeChild(renderer.domElement);
155
+ };
156
+ }, []);
157
+ return /* @__PURE__ */ React__default.default.createElement(
158
+ "div",
159
+ {
160
+ className,
161
+ style: {
162
+ position: "relative",
163
+ width: "100%",
164
+ minHeight: 420,
165
+ borderRadius: 20,
166
+ overflow: "hidden",
167
+ background: "radial-gradient(circle at 20% 20%, #244d8c 0%, #0c1a34 45%, #060d1f 100%)"
168
+ }
169
+ },
170
+ /* @__PURE__ */ React__default.default.createElement("div", { ref: mountRef, style: { position: "absolute", inset: 0 } }),
171
+ /* @__PURE__ */ React__default.default.createElement(
172
+ "div",
173
+ {
174
+ style: {
175
+ position: "absolute",
176
+ inset: 0,
177
+ pointerEvents: "none",
178
+ background: "linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.04) 35%, rgba(4,8,20,0.36) 100%)"
179
+ }
180
+ }
181
+ ),
182
+ /* @__PURE__ */ React__default.default.createElement(
183
+ "div",
184
+ {
185
+ style: {
186
+ position: "absolute",
187
+ left: 20,
188
+ right: 20,
189
+ bottom: 20,
190
+ zIndex: 2,
191
+ padding: "16px 18px",
192
+ borderRadius: 14,
193
+ backgroundColor: "rgba(8, 16, 35, 0.66)",
194
+ border: "1px solid rgba(255, 255, 255, 0.16)",
195
+ color: "#f8fafc"
196
+ }
197
+ },
198
+ /* @__PURE__ */ React__default.default.createElement("div", { style: { fontSize: 26, fontWeight: 700, lineHeight: 1.2 } }, title),
199
+ /* @__PURE__ */ React__default.default.createElement("div", { style: { marginTop: 6, fontSize: 15, opacity: 0.92 } }, subtitle)
200
+ )
201
+ );
202
+ };
203
+
204
+ exports.FestivalCard3D = FestivalCard3D;
205
+ //# sourceMappingURL=index.js.map
206
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/festivalCard/components/FestivalCard3D.tsx"],"names":["useRef","useEffect","THREE","React"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { useEffect, useRef } from 'react';\nimport * as THREE from 'three';\n\nexport interface FestivalCard3DProps {\n title?: string;\n subtitle?: string;\n className?: string;\n}\n\nconst createSnow = (count: number) => {\n const positions = new Float32Array(count * 3);\n const speeds = new Float32Array(count);\n\n for (let i = 0; i < count; i++) {\n const i3 = i * 3;\n positions[i3] = (Math.random() - 0.5) * 16;\n positions[i3 + 1] = Math.random() * 10 + 1;\n positions[i3 + 2] = (Math.random() - 0.5) * 16;\n speeds[i] = 0.004 + Math.random() * 0.01;\n }\n\n return { positions, speeds };\n};\n\nexport const FestivalCard3D: React.FC<FestivalCard3DProps> = ({\n title = 'Happy Holidays',\n subtitle = 'Wishing you joy and peace',\n className,\n}) => {\n const mountRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const mount = mountRef.current;\n if (!mount) return;\n\n const scene = new THREE.Scene();\n scene.fog = new THREE.Fog(0x081226, 12, 28);\n\n const camera = new THREE.PerspectiveCamera(50, mount.clientWidth / mount.clientHeight, 0.1, 100);\n camera.position.set(0, 2.6, 7.5);\n\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n renderer.setSize(mount.clientWidth, mount.clientHeight);\n renderer.outputColorSpace = THREE.SRGBColorSpace;\n mount.appendChild(renderer.domElement);\n\n const ambientLight = new THREE.AmbientLight(0x8ab4ff, 0.8);\n scene.add(ambientLight);\n\n const keyLight = new THREE.DirectionalLight(0xffffff, 1.25);\n keyLight.position.set(2, 5, 4);\n scene.add(keyLight);\n\n const fillLight = new THREE.PointLight(0x7ad7ff, 0.9, 24);\n fillLight.position.set(-4, 3, -2);\n scene.add(fillLight);\n\n const floor = new THREE.Mesh(\n new THREE.CircleGeometry(12, 48),\n new THREE.MeshStandardMaterial({ color: 0x10203a, roughness: 0.95, metalness: 0.05 })\n );\n floor.rotation.x = -Math.PI / 2;\n floor.position.y = -1.2;\n scene.add(floor);\n\n const giftGroup = new THREE.Group();\n scene.add(giftGroup);\n\n const box = new THREE.Mesh(\n new THREE.BoxGeometry(2, 1.6, 2),\n new THREE.MeshStandardMaterial({ color: 0xd94165, roughness: 0.55, metalness: 0.2 })\n );\n giftGroup.add(box);\n\n const ribbonMaterial = new THREE.MeshStandardMaterial({ color: 0xffd97a, roughness: 0.3, metalness: 0.5 });\n const verticalRibbon = new THREE.Mesh(new THREE.BoxGeometry(0.24, 1.7, 2.02), ribbonMaterial);\n const horizontalRibbon = new THREE.Mesh(new THREE.BoxGeometry(2.02, 1.7, 0.24), ribbonMaterial);\n giftGroup.add(verticalRibbon);\n giftGroup.add(horizontalRibbon);\n\n const lid = new THREE.Mesh(\n new THREE.BoxGeometry(2.15, 0.34, 2.15),\n new THREE.MeshStandardMaterial({ color: 0xcd3456, roughness: 0.52, metalness: 0.2 })\n );\n lid.position.y = 0.98;\n giftGroup.add(lid);\n\n const bowLeft = new THREE.Mesh(new THREE.TorusGeometry(0.26, 0.08, 12, 32), ribbonMaterial);\n bowLeft.rotation.set(Math.PI / 2, Math.PI / 6, 0);\n bowLeft.position.set(-0.22, 1.14, 0);\n const bowRight = bowLeft.clone();\n bowRight.rotation.y = -Math.PI / 6;\n bowRight.position.x = 0.22;\n giftGroup.add(bowLeft, bowRight);\n\n giftGroup.position.y = -0.15;\n\n const { positions, speeds } = createSnow(260);\n const snowGeometry = new THREE.BufferGeometry();\n snowGeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n\n const snow = new THREE.Points(\n snowGeometry,\n new THREE.PointsMaterial({\n color: 0xe8f4ff,\n size: 0.08,\n transparent: true,\n opacity: 0.92,\n depthWrite: false,\n })\n );\n scene.add(snow);\n\n let rafId = 0;\n const clock = new THREE.Clock();\n\n const animate = () => {\n const elapsed = clock.getElapsedTime();\n const pos = snowGeometry.attributes.position as THREE.BufferAttribute;\n\n for (let i = 0; i < pos.count; i++) {\n const speed = speeds[i] ?? 0.01;\n const y = pos.getY(i) - speed;\n pos.setY(i, y < -1.1 ? 10 + Math.random() * 2 : y);\n pos.setX(i, pos.getX(i) + Math.sin(elapsed + i * 0.04) * 0.0016);\n }\n pos.needsUpdate = true;\n\n giftGroup.rotation.y = elapsed * 0.35;\n giftGroup.position.y = -0.15 + Math.sin(elapsed * 1.4) * 0.08;\n lid.position.y = 0.98 + Math.sin(elapsed * 2.2) * 0.08;\n\n renderer.render(scene, camera);\n rafId = window.requestAnimationFrame(animate);\n };\n\n const handleResize = () => {\n if (!mount) return;\n const width = mount.clientWidth;\n const height = mount.clientHeight;\n camera.aspect = width / height;\n camera.updateProjectionMatrix();\n renderer.setSize(width, height);\n };\n\n window.addEventListener('resize', handleResize);\n animate();\n\n return () => {\n window.cancelAnimationFrame(rafId);\n window.removeEventListener('resize', handleResize);\n\n scene.traverse((obj) => {\n const mesh = obj as THREE.Mesh;\n if (mesh.geometry) mesh.geometry.dispose();\n const material = mesh.material as THREE.Material | THREE.Material[] | undefined;\n if (Array.isArray(material)) material.forEach((m) => m.dispose());\n else material?.dispose();\n });\n\n renderer.dispose();\n mount.removeChild(renderer.domElement);\n };\n }, []);\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n width: '100%',\n minHeight: 420,\n borderRadius: 20,\n overflow: 'hidden',\n background: 'radial-gradient(circle at 20% 20%, #244d8c 0%, #0c1a34 45%, #060d1f 100%)',\n }}\n >\n <div ref={mountRef} style={{ position: 'absolute', inset: 0 }} />\n <div\n style={{\n position: 'absolute',\n inset: 0,\n pointerEvents: 'none',\n background:\n 'linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.04) 35%, rgba(4,8,20,0.36) 100%)',\n }}\n />\n <div\n style={{\n position: 'absolute',\n left: 20,\n right: 20,\n bottom: 20,\n zIndex: 2,\n padding: '16px 18px',\n borderRadius: 14,\n backgroundColor: 'rgba(8, 16, 35, 0.66)',\n border: '1px solid rgba(255, 255, 255, 0.16)',\n color: '#f8fafc',\n }}\n >\n <div style={{ fontSize: 26, fontWeight: 700, lineHeight: 1.2 }}>{title}</div>\n <div style={{ marginTop: 6, fontSize: 15, opacity: 0.92 }}>{subtitle}</div>\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,181 @@
1
+ import React, { useRef, useEffect } from 'react';
2
+ import * as THREE from 'three';
3
+
4
+ // src/festivalCard/components/FestivalCard3D.tsx
5
+ var createSnow = (count) => {
6
+ const positions = new Float32Array(count * 3);
7
+ const speeds = new Float32Array(count);
8
+ for (let i = 0; i < count; i++) {
9
+ const i3 = i * 3;
10
+ positions[i3] = (Math.random() - 0.5) * 16;
11
+ positions[i3 + 1] = Math.random() * 10 + 1;
12
+ positions[i3 + 2] = (Math.random() - 0.5) * 16;
13
+ speeds[i] = 4e-3 + Math.random() * 0.01;
14
+ }
15
+ return { positions, speeds };
16
+ };
17
+ var FestivalCard3D = ({
18
+ title = "Happy Holidays",
19
+ subtitle = "Wishing you joy and peace",
20
+ className
21
+ }) => {
22
+ const mountRef = useRef(null);
23
+ useEffect(() => {
24
+ const mount = mountRef.current;
25
+ if (!mount) return;
26
+ const scene = new THREE.Scene();
27
+ scene.fog = new THREE.Fog(528934, 12, 28);
28
+ const camera = new THREE.PerspectiveCamera(50, mount.clientWidth / mount.clientHeight, 0.1, 100);
29
+ camera.position.set(0, 2.6, 7.5);
30
+ const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
31
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
32
+ renderer.setSize(mount.clientWidth, mount.clientHeight);
33
+ renderer.outputColorSpace = THREE.SRGBColorSpace;
34
+ mount.appendChild(renderer.domElement);
35
+ const ambientLight = new THREE.AmbientLight(9090303, 0.8);
36
+ scene.add(ambientLight);
37
+ const keyLight = new THREE.DirectionalLight(16777215, 1.25);
38
+ keyLight.position.set(2, 5, 4);
39
+ scene.add(keyLight);
40
+ const fillLight = new THREE.PointLight(8050687, 0.9, 24);
41
+ fillLight.position.set(-4, 3, -2);
42
+ scene.add(fillLight);
43
+ const floor = new THREE.Mesh(
44
+ new THREE.CircleGeometry(12, 48),
45
+ new THREE.MeshStandardMaterial({ color: 1056826, roughness: 0.95, metalness: 0.05 })
46
+ );
47
+ floor.rotation.x = -Math.PI / 2;
48
+ floor.position.y = -1.2;
49
+ scene.add(floor);
50
+ const giftGroup = new THREE.Group();
51
+ scene.add(giftGroup);
52
+ const box = new THREE.Mesh(
53
+ new THREE.BoxGeometry(2, 1.6, 2),
54
+ new THREE.MeshStandardMaterial({ color: 14238053, roughness: 0.55, metalness: 0.2 })
55
+ );
56
+ giftGroup.add(box);
57
+ const ribbonMaterial = new THREE.MeshStandardMaterial({ color: 16767354, roughness: 0.3, metalness: 0.5 });
58
+ const verticalRibbon = new THREE.Mesh(new THREE.BoxGeometry(0.24, 1.7, 2.02), ribbonMaterial);
59
+ const horizontalRibbon = new THREE.Mesh(new THREE.BoxGeometry(2.02, 1.7, 0.24), ribbonMaterial);
60
+ giftGroup.add(verticalRibbon);
61
+ giftGroup.add(horizontalRibbon);
62
+ const lid = new THREE.Mesh(
63
+ new THREE.BoxGeometry(2.15, 0.34, 2.15),
64
+ new THREE.MeshStandardMaterial({ color: 13448278, roughness: 0.52, metalness: 0.2 })
65
+ );
66
+ lid.position.y = 0.98;
67
+ giftGroup.add(lid);
68
+ const bowLeft = new THREE.Mesh(new THREE.TorusGeometry(0.26, 0.08, 12, 32), ribbonMaterial);
69
+ bowLeft.rotation.set(Math.PI / 2, Math.PI / 6, 0);
70
+ bowLeft.position.set(-0.22, 1.14, 0);
71
+ const bowRight = bowLeft.clone();
72
+ bowRight.rotation.y = -Math.PI / 6;
73
+ bowRight.position.x = 0.22;
74
+ giftGroup.add(bowLeft, bowRight);
75
+ giftGroup.position.y = -0.15;
76
+ const { positions, speeds } = createSnow(260);
77
+ const snowGeometry = new THREE.BufferGeometry();
78
+ snowGeometry.setAttribute("position", new THREE.BufferAttribute(positions, 3));
79
+ const snow = new THREE.Points(
80
+ snowGeometry,
81
+ new THREE.PointsMaterial({
82
+ color: 15267071,
83
+ size: 0.08,
84
+ transparent: true,
85
+ opacity: 0.92,
86
+ depthWrite: false
87
+ })
88
+ );
89
+ scene.add(snow);
90
+ let rafId = 0;
91
+ const clock = new THREE.Clock();
92
+ const animate = () => {
93
+ const elapsed = clock.getElapsedTime();
94
+ const pos = snowGeometry.attributes.position;
95
+ for (let i = 0; i < pos.count; i++) {
96
+ const speed = speeds[i] ?? 0.01;
97
+ const y = pos.getY(i) - speed;
98
+ pos.setY(i, y < -1.1 ? 10 + Math.random() * 2 : y);
99
+ pos.setX(i, pos.getX(i) + Math.sin(elapsed + i * 0.04) * 16e-4);
100
+ }
101
+ pos.needsUpdate = true;
102
+ giftGroup.rotation.y = elapsed * 0.35;
103
+ giftGroup.position.y = -0.15 + Math.sin(elapsed * 1.4) * 0.08;
104
+ lid.position.y = 0.98 + Math.sin(elapsed * 2.2) * 0.08;
105
+ renderer.render(scene, camera);
106
+ rafId = window.requestAnimationFrame(animate);
107
+ };
108
+ const handleResize = () => {
109
+ if (!mount) return;
110
+ const width = mount.clientWidth;
111
+ const height = mount.clientHeight;
112
+ camera.aspect = width / height;
113
+ camera.updateProjectionMatrix();
114
+ renderer.setSize(width, height);
115
+ };
116
+ window.addEventListener("resize", handleResize);
117
+ animate();
118
+ return () => {
119
+ window.cancelAnimationFrame(rafId);
120
+ window.removeEventListener("resize", handleResize);
121
+ scene.traverse((obj) => {
122
+ const mesh = obj;
123
+ if (mesh.geometry) mesh.geometry.dispose();
124
+ const material = mesh.material;
125
+ if (Array.isArray(material)) material.forEach((m) => m.dispose());
126
+ else material?.dispose();
127
+ });
128
+ renderer.dispose();
129
+ mount.removeChild(renderer.domElement);
130
+ };
131
+ }, []);
132
+ return /* @__PURE__ */ React.createElement(
133
+ "div",
134
+ {
135
+ className,
136
+ style: {
137
+ position: "relative",
138
+ width: "100%",
139
+ minHeight: 420,
140
+ borderRadius: 20,
141
+ overflow: "hidden",
142
+ background: "radial-gradient(circle at 20% 20%, #244d8c 0%, #0c1a34 45%, #060d1f 100%)"
143
+ }
144
+ },
145
+ /* @__PURE__ */ React.createElement("div", { ref: mountRef, style: { position: "absolute", inset: 0 } }),
146
+ /* @__PURE__ */ React.createElement(
147
+ "div",
148
+ {
149
+ style: {
150
+ position: "absolute",
151
+ inset: 0,
152
+ pointerEvents: "none",
153
+ background: "linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.04) 35%, rgba(4,8,20,0.36) 100%)"
154
+ }
155
+ }
156
+ ),
157
+ /* @__PURE__ */ React.createElement(
158
+ "div",
159
+ {
160
+ style: {
161
+ position: "absolute",
162
+ left: 20,
163
+ right: 20,
164
+ bottom: 20,
165
+ zIndex: 2,
166
+ padding: "16px 18px",
167
+ borderRadius: 14,
168
+ backgroundColor: "rgba(8, 16, 35, 0.66)",
169
+ border: "1px solid rgba(255, 255, 255, 0.16)",
170
+ color: "#f8fafc"
171
+ }
172
+ },
173
+ /* @__PURE__ */ React.createElement("div", { style: { fontSize: 26, fontWeight: 700, lineHeight: 1.2 } }, title),
174
+ /* @__PURE__ */ React.createElement("div", { style: { marginTop: 6, fontSize: 15, opacity: 0.92 } }, subtitle)
175
+ )
176
+ );
177
+ };
178
+
179
+ export { FestivalCard3D };
180
+ //# sourceMappingURL=index.mjs.map
181
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/festivalCard/components/FestivalCard3D.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nimport React, { useEffect, useRef } from 'react';\nimport * as THREE from 'three';\n\nexport interface FestivalCard3DProps {\n title?: string;\n subtitle?: string;\n className?: string;\n}\n\nconst createSnow = (count: number) => {\n const positions = new Float32Array(count * 3);\n const speeds = new Float32Array(count);\n\n for (let i = 0; i < count; i++) {\n const i3 = i * 3;\n positions[i3] = (Math.random() - 0.5) * 16;\n positions[i3 + 1] = Math.random() * 10 + 1;\n positions[i3 + 2] = (Math.random() - 0.5) * 16;\n speeds[i] = 0.004 + Math.random() * 0.01;\n }\n\n return { positions, speeds };\n};\n\nexport const FestivalCard3D: React.FC<FestivalCard3DProps> = ({\n title = 'Happy Holidays',\n subtitle = 'Wishing you joy and peace',\n className,\n}) => {\n const mountRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const mount = mountRef.current;\n if (!mount) return;\n\n const scene = new THREE.Scene();\n scene.fog = new THREE.Fog(0x081226, 12, 28);\n\n const camera = new THREE.PerspectiveCamera(50, mount.clientWidth / mount.clientHeight, 0.1, 100);\n camera.position.set(0, 2.6, 7.5);\n\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n renderer.setSize(mount.clientWidth, mount.clientHeight);\n renderer.outputColorSpace = THREE.SRGBColorSpace;\n mount.appendChild(renderer.domElement);\n\n const ambientLight = new THREE.AmbientLight(0x8ab4ff, 0.8);\n scene.add(ambientLight);\n\n const keyLight = new THREE.DirectionalLight(0xffffff, 1.25);\n keyLight.position.set(2, 5, 4);\n scene.add(keyLight);\n\n const fillLight = new THREE.PointLight(0x7ad7ff, 0.9, 24);\n fillLight.position.set(-4, 3, -2);\n scene.add(fillLight);\n\n const floor = new THREE.Mesh(\n new THREE.CircleGeometry(12, 48),\n new THREE.MeshStandardMaterial({ color: 0x10203a, roughness: 0.95, metalness: 0.05 })\n );\n floor.rotation.x = -Math.PI / 2;\n floor.position.y = -1.2;\n scene.add(floor);\n\n const giftGroup = new THREE.Group();\n scene.add(giftGroup);\n\n const box = new THREE.Mesh(\n new THREE.BoxGeometry(2, 1.6, 2),\n new THREE.MeshStandardMaterial({ color: 0xd94165, roughness: 0.55, metalness: 0.2 })\n );\n giftGroup.add(box);\n\n const ribbonMaterial = new THREE.MeshStandardMaterial({ color: 0xffd97a, roughness: 0.3, metalness: 0.5 });\n const verticalRibbon = new THREE.Mesh(new THREE.BoxGeometry(0.24, 1.7, 2.02), ribbonMaterial);\n const horizontalRibbon = new THREE.Mesh(new THREE.BoxGeometry(2.02, 1.7, 0.24), ribbonMaterial);\n giftGroup.add(verticalRibbon);\n giftGroup.add(horizontalRibbon);\n\n const lid = new THREE.Mesh(\n new THREE.BoxGeometry(2.15, 0.34, 2.15),\n new THREE.MeshStandardMaterial({ color: 0xcd3456, roughness: 0.52, metalness: 0.2 })\n );\n lid.position.y = 0.98;\n giftGroup.add(lid);\n\n const bowLeft = new THREE.Mesh(new THREE.TorusGeometry(0.26, 0.08, 12, 32), ribbonMaterial);\n bowLeft.rotation.set(Math.PI / 2, Math.PI / 6, 0);\n bowLeft.position.set(-0.22, 1.14, 0);\n const bowRight = bowLeft.clone();\n bowRight.rotation.y = -Math.PI / 6;\n bowRight.position.x = 0.22;\n giftGroup.add(bowLeft, bowRight);\n\n giftGroup.position.y = -0.15;\n\n const { positions, speeds } = createSnow(260);\n const snowGeometry = new THREE.BufferGeometry();\n snowGeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n\n const snow = new THREE.Points(\n snowGeometry,\n new THREE.PointsMaterial({\n color: 0xe8f4ff,\n size: 0.08,\n transparent: true,\n opacity: 0.92,\n depthWrite: false,\n })\n );\n scene.add(snow);\n\n let rafId = 0;\n const clock = new THREE.Clock();\n\n const animate = () => {\n const elapsed = clock.getElapsedTime();\n const pos = snowGeometry.attributes.position as THREE.BufferAttribute;\n\n for (let i = 0; i < pos.count; i++) {\n const speed = speeds[i] ?? 0.01;\n const y = pos.getY(i) - speed;\n pos.setY(i, y < -1.1 ? 10 + Math.random() * 2 : y);\n pos.setX(i, pos.getX(i) + Math.sin(elapsed + i * 0.04) * 0.0016);\n }\n pos.needsUpdate = true;\n\n giftGroup.rotation.y = elapsed * 0.35;\n giftGroup.position.y = -0.15 + Math.sin(elapsed * 1.4) * 0.08;\n lid.position.y = 0.98 + Math.sin(elapsed * 2.2) * 0.08;\n\n renderer.render(scene, camera);\n rafId = window.requestAnimationFrame(animate);\n };\n\n const handleResize = () => {\n if (!mount) return;\n const width = mount.clientWidth;\n const height = mount.clientHeight;\n camera.aspect = width / height;\n camera.updateProjectionMatrix();\n renderer.setSize(width, height);\n };\n\n window.addEventListener('resize', handleResize);\n animate();\n\n return () => {\n window.cancelAnimationFrame(rafId);\n window.removeEventListener('resize', handleResize);\n\n scene.traverse((obj) => {\n const mesh = obj as THREE.Mesh;\n if (mesh.geometry) mesh.geometry.dispose();\n const material = mesh.material as THREE.Material | THREE.Material[] | undefined;\n if (Array.isArray(material)) material.forEach((m) => m.dispose());\n else material?.dispose();\n });\n\n renderer.dispose();\n mount.removeChild(renderer.domElement);\n };\n }, []);\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n width: '100%',\n minHeight: 420,\n borderRadius: 20,\n overflow: 'hidden',\n background: 'radial-gradient(circle at 20% 20%, #244d8c 0%, #0c1a34 45%, #060d1f 100%)',\n }}\n >\n <div ref={mountRef} style={{ position: 'absolute', inset: 0 }} />\n <div\n style={{\n position: 'absolute',\n inset: 0,\n pointerEvents: 'none',\n background:\n 'linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.04) 35%, rgba(4,8,20,0.36) 100%)',\n }}\n />\n <div\n style={{\n position: 'absolute',\n left: 20,\n right: 20,\n bottom: 20,\n zIndex: 2,\n padding: '16px 18px',\n borderRadius: 14,\n backgroundColor: 'rgba(8, 16, 35, 0.66)',\n border: '1px solid rgba(255, 255, 255, 0.16)',\n color: '#f8fafc',\n }}\n >\n <div style={{ fontSize: 26, fontWeight: 700, lineHeight: 1.2 }}>{title}</div>\n <div style={{ marginTop: 6, fontSize: 15, opacity: 0.92 }}>{subtitle}</div>\n </div>\n </div>\n );\n};\n"]}
package/dist/index.d.mts CHANGED
@@ -12,8 +12,9 @@ export { FloatingMenu, FloatingMenuExample, Navigation, NavigationConfig, Naviga
12
12
  import { B as BaseApiClient } from './base-api-client-BQ8ZPZjk.mjs';
13
13
  export { DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT, DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES, DanmakuOverlayItem, DanmakuPanel, FIREWORK_KIND_LABELS, FireworksCanvas, FireworksControlPanel, MIKU_PALETTE, MikuFireworks3D, NORMAL_PALETTE, UseFireworksEngineOptions, WebSocketTransport, WebSocketTransportCallbacks, useDanmakuController, useFireworksEngine, useFireworksRealtime } from './mikuFireworks3D/index.mjs';
14
14
  export { e as DanmakuControllerOptions, D as DanmakuMessage, d as DanmakuSendResult, c as FireworkEngineOptions, F as FireworkKind, a as FireworkLaunchPayload, b as FireworkPosition, g as FireworksRealtimeConfig, h as FireworksRealtimeState, f as FireworksRealtimeUser, M as MikuFireworks3DProps } from './types-DBVDr8Mu.mjs';
15
- export { ScreenReceiverErrorMessage, ScreenReceiverIncomingMessage, ScreenReceiverJoinMessage, ScreenReceiverJoinedMessage, ScreenReceiverLogEntry, ScreenReceiverPeerJoinedMessage, ScreenReceiverPeerLeftMessage, ScreenReceiverRole, ScreenReceiverRoomStateMessage, ScreenReceiverSignalMessage, ScreenReceiverSignalType, UseScreenReceiverOptions, UseScreenReceiverReturn, useScreenReceiver } from './screenReceiver/core/index.mjs';
15
+ export { ResolveScreenReceiverSignalUrlOptions, ScreenReceiverClientRole, ScreenReceiverErrorMessage, ScreenReceiverIncomingMessage, ScreenReceiverJoinMessage, ScreenReceiverJoinedMessage, ScreenReceiverLogEntry, ScreenReceiverPeerJoinedMessage, ScreenReceiverPeerLeftMessage, ScreenReceiverRole, ScreenReceiverRoomStateMessage, ScreenReceiverSignalMessage, ScreenReceiverSignalType, UseScreenReceiverOptions, UseScreenReceiverReturn, resolveScreenReceiverSignalUrl, useScreenReceiver } from './screenReceiver/core/index.mjs';
16
16
  export { ScreenReceiverPanel, ScreenReceiverPanelProps } from './screenReceiver/web/index.mjs';
17
+ export { FestivalCard3D, FestivalCard3DProps } from './festivalCard/index.mjs';
17
18
  export { S as StorageAdapter, a as StorageChangeEvent } from './types-BaZccpvk.mjs';
18
19
  export { b as useAsyncStorage, d as useElectronStorage, a as useLocalStorage, u as useStorage, c as useTaroStorage } from './useElectronStorage-Dj0rcorG.mjs';
19
20
  import './types-CbTsi9CZ.mjs';
package/dist/index.d.ts CHANGED
@@ -12,8 +12,9 @@ export { FloatingMenu, FloatingMenuExample, Navigation, NavigationConfig, Naviga
12
12
  import { B as BaseApiClient } from './base-api-client-B-yUCal3.js';
13
13
  export { DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT, DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES, DanmakuOverlayItem, DanmakuPanel, FIREWORK_KIND_LABELS, FireworksCanvas, FireworksControlPanel, MIKU_PALETTE, MikuFireworks3D, NORMAL_PALETTE, UseFireworksEngineOptions, WebSocketTransport, WebSocketTransportCallbacks, useDanmakuController, useFireworksEngine, useFireworksRealtime } from './mikuFireworks3D/index.js';
14
14
  export { e as DanmakuControllerOptions, D as DanmakuMessage, d as DanmakuSendResult, c as FireworkEngineOptions, F as FireworkKind, a as FireworkLaunchPayload, b as FireworkPosition, g as FireworksRealtimeConfig, h as FireworksRealtimeState, f as FireworksRealtimeUser, M as MikuFireworks3DProps } from './types-DBVDr8Mu.js';
15
- export { ScreenReceiverErrorMessage, ScreenReceiverIncomingMessage, ScreenReceiverJoinMessage, ScreenReceiverJoinedMessage, ScreenReceiverLogEntry, ScreenReceiverPeerJoinedMessage, ScreenReceiverPeerLeftMessage, ScreenReceiverRole, ScreenReceiverRoomStateMessage, ScreenReceiverSignalMessage, ScreenReceiverSignalType, UseScreenReceiverOptions, UseScreenReceiverReturn, useScreenReceiver } from './screenReceiver/core/index.js';
15
+ export { ResolveScreenReceiverSignalUrlOptions, ScreenReceiverClientRole, ScreenReceiverErrorMessage, ScreenReceiverIncomingMessage, ScreenReceiverJoinMessage, ScreenReceiverJoinedMessage, ScreenReceiverLogEntry, ScreenReceiverPeerJoinedMessage, ScreenReceiverPeerLeftMessage, ScreenReceiverRole, ScreenReceiverRoomStateMessage, ScreenReceiverSignalMessage, ScreenReceiverSignalType, UseScreenReceiverOptions, UseScreenReceiverReturn, resolveScreenReceiverSignalUrl, useScreenReceiver } from './screenReceiver/core/index.js';
16
16
  export { ScreenReceiverPanel, ScreenReceiverPanelProps } from './screenReceiver/web/index.js';
17
+ export { FestivalCard3D, FestivalCard3DProps } from './festivalCard/index.js';
17
18
  export { S as StorageAdapter, a as StorageChangeEvent } from './types-BaZccpvk.js';
18
19
  export { b as useAsyncStorage, d as useElectronStorage, a as useLocalStorage, u as useStorage, c as useTaroStorage } from './useElectronStorage-DwnNfIhl.js';
19
20
  import './types-CbTsi9CZ.js';