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
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@ var drizzleOrm = require('drizzle-orm');
17
17
  require('crypto');
18
18
  require('bcryptjs');
19
19
  require('jsonwebtoken');
20
- var THREE2 = require('three');
20
+ var THREE3 = require('three');
21
21
 
22
22
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
23
23
 
@@ -41,7 +41,7 @@ function _interopNamespace(e) {
41
41
 
42
42
  var React42__namespace = /*#__PURE__*/_interopNamespace(React42);
43
43
  var Link__default = /*#__PURE__*/_interopDefault(Link);
44
- var THREE2__namespace = /*#__PURE__*/_interopNamespace(THREE2);
44
+ var THREE3__namespace = /*#__PURE__*/_interopNamespace(THREE3);
45
45
 
46
46
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
47
47
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
@@ -5864,7 +5864,7 @@ function createCircularSpriteTexture() {
5864
5864
  canvas.height = size;
5865
5865
  const ctx = canvas.getContext("2d");
5866
5866
  if (!ctx) {
5867
- return new THREE2__namespace.CanvasTexture(canvas);
5867
+ return new THREE3__namespace.CanvasTexture(canvas);
5868
5868
  }
5869
5869
  const center = size / 2;
5870
5870
  const gradient = ctx.createRadialGradient(center, center, 2, center, center, center);
@@ -5873,7 +5873,7 @@ function createCircularSpriteTexture() {
5873
5873
  gradient.addColorStop(1, "rgba(255,255,255,0)");
5874
5874
  ctx.fillStyle = gradient;
5875
5875
  ctx.fillRect(0, 0, size, size);
5876
- const texture = new THREE2__namespace.CanvasTexture(canvas);
5876
+ const texture = new THREE3__namespace.CanvasTexture(canvas);
5877
5877
  texture.needsUpdate = true;
5878
5878
  return texture;
5879
5879
  }
@@ -6080,11 +6080,11 @@ var FireworksEngine = class {
6080
6080
  this.maxActiveFireworks = init.options?.maxActiveFireworks ?? DEFAULT_MAX_ACTIVE_FIREWORKS;
6081
6081
  this.onError = init.options?.onError;
6082
6082
  this.onFpsReport = init.options?.onFpsReport;
6083
- this.scene = new THREE2__namespace.Scene();
6084
- this.scene.background = new THREE2__namespace.Color("#060816");
6085
- this.camera = new THREE2__namespace.PerspectiveCamera(50, 1, 0.1, 1e3);
6083
+ this.scene = new THREE3__namespace.Scene();
6084
+ this.scene.background = new THREE3__namespace.Color("#060816");
6085
+ this.camera = new THREE3__namespace.PerspectiveCamera(50, 1, 0.1, 1e3);
6086
6086
  this.camera.position.set(0, 0, 45);
6087
- this.renderer = new THREE2__namespace.WebGLRenderer({
6087
+ this.renderer = new THREE3__namespace.WebGLRenderer({
6088
6088
  canvas: this.canvas,
6089
6089
  alpha: true,
6090
6090
  antialias: true,
@@ -6129,7 +6129,7 @@ var FireworksEngine = class {
6129
6129
  const particles = [];
6130
6130
  const positions = new Float32Array(seeds.length * 3);
6131
6131
  const colors = new Float32Array(seeds.length * 3);
6132
- const colorHelper = new THREE2__namespace.Color();
6132
+ const colorHelper = new THREE3__namespace.Color();
6133
6133
  for (let i = 0; i < seeds.length; i += 1) {
6134
6134
  const seed = seeds[i];
6135
6135
  if (!seed) {
@@ -6161,19 +6161,19 @@ var FireworksEngine = class {
6161
6161
  this.releaseParticles(particles);
6162
6162
  return;
6163
6163
  }
6164
- const geometry = new THREE2__namespace.BufferGeometry();
6165
- geometry.setAttribute("position", new THREE2__namespace.BufferAttribute(positions, 3));
6166
- geometry.setAttribute("color", new THREE2__namespace.BufferAttribute(colors, 3));
6167
- const material = new THREE2__namespace.PointsMaterial({
6164
+ const geometry = new THREE3__namespace.BufferGeometry();
6165
+ geometry.setAttribute("position", new THREE3__namespace.BufferAttribute(positions, 3));
6166
+ geometry.setAttribute("color", new THREE3__namespace.BufferAttribute(colors, 3));
6167
+ const material = new THREE3__namespace.PointsMaterial({
6168
6168
  size: payload.kind === "miku" ? 0.42 : 0.36,
6169
6169
  vertexColors: true,
6170
6170
  map: this.spriteTexture,
6171
6171
  transparent: true,
6172
6172
  opacity: 1,
6173
6173
  depthWrite: false,
6174
- blending: THREE2__namespace.AdditiveBlending
6174
+ blending: THREE3__namespace.AdditiveBlending
6175
6175
  });
6176
- const points = new THREE2__namespace.Points(geometry, material);
6176
+ const points = new THREE3__namespace.Points(geometry, material);
6177
6177
  this.scene.add(points);
6178
6178
  const burst = {
6179
6179
  id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
@@ -7079,11 +7079,28 @@ function useScreenReceiver(options) {
7079
7079
  [clearLogs, connect, connectionState, disconnect, iceConnectionState, isConnected, logs, stream]
7080
7080
  );
7081
7081
  }
7082
- var DEFAULT_SIGNAL_URL = "ws://127.0.0.1:8787/ws";
7082
+
7083
+ // src/screenReceiver/signalUrl.ts
7084
+ var DEFAULT_PORT = 8787;
7085
+ var DEFAULT_PATH = "/ws";
7086
+ function resolveScreenReceiverSignalUrl(options = {}) {
7087
+ const { signalUrl, path = DEFAULT_PATH, port = DEFAULT_PORT } = options;
7088
+ if (signalUrl && signalUrl.trim()) return signalUrl.trim();
7089
+ const normalizedPath = path.startsWith("/") ? path : `/${path}`;
7090
+ if (typeof window !== "undefined") {
7091
+ const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
7092
+ return `${protocol}//${window.location.host}${normalizedPath}`;
7093
+ }
7094
+ return `ws://127.0.0.1:${port}${normalizedPath}`;
7095
+ }
7083
7096
  var DEFAULT_ROOM_ID = "screen-room-1";
7084
7097
  function ScreenReceiverPanel(props) {
7085
- const { defaultSignalUrl = DEFAULT_SIGNAL_URL, defaultRoomId = DEFAULT_ROOM_ID, className } = props;
7086
- const [wsUrl, setWsUrl] = React42.useState(defaultSignalUrl);
7098
+ const { defaultSignalUrl, defaultRoomId = DEFAULT_ROOM_ID, className } = props;
7099
+ const initialSignalUrl = React42.useMemo(
7100
+ () => resolveScreenReceiverSignalUrl({ signalUrl: defaultSignalUrl }),
7101
+ [defaultSignalUrl]
7102
+ );
7103
+ const [wsUrl, setWsUrl] = React42.useState(initialSignalUrl);
7087
7104
  const [roomId, setRoomId] = React42.useState(defaultRoomId);
7088
7105
  const receiver = useScreenReceiver({ wsUrl, roomId });
7089
7106
  const logs = React42.useMemo(() => receiver.logs.map((entry) => entry.text).join("\n"), [receiver.logs]);
@@ -7137,6 +7154,179 @@ function ScreenReceiverPanel(props) {
7137
7154
  function StatusItem({ label, value }) {
7138
7155
  return /* @__PURE__ */ React42__namespace.default.createElement("div", { className: "rounded-md border px-3 py-2" }, /* @__PURE__ */ React42__namespace.default.createElement("p", { className: "text-xs text-slate-500" }, label), /* @__PURE__ */ React42__namespace.default.createElement("p", { className: "text-sm font-medium" }, value));
7139
7156
  }
7157
+ var createSnow = (count) => {
7158
+ const positions = new Float32Array(count * 3);
7159
+ const speeds = new Float32Array(count);
7160
+ for (let i = 0; i < count; i++) {
7161
+ const i3 = i * 3;
7162
+ positions[i3] = (Math.random() - 0.5) * 16;
7163
+ positions[i3 + 1] = Math.random() * 10 + 1;
7164
+ positions[i3 + 2] = (Math.random() - 0.5) * 16;
7165
+ speeds[i] = 4e-3 + Math.random() * 0.01;
7166
+ }
7167
+ return { positions, speeds };
7168
+ };
7169
+ var FestivalCard3D = ({
7170
+ title = "Happy Holidays",
7171
+ subtitle = "Wishing you joy and peace",
7172
+ className
7173
+ }) => {
7174
+ const mountRef = React42.useRef(null);
7175
+ React42.useEffect(() => {
7176
+ const mount = mountRef.current;
7177
+ if (!mount) return;
7178
+ const scene = new THREE3__namespace.Scene();
7179
+ scene.fog = new THREE3__namespace.Fog(528934, 12, 28);
7180
+ const camera = new THREE3__namespace.PerspectiveCamera(50, mount.clientWidth / mount.clientHeight, 0.1, 100);
7181
+ camera.position.set(0, 2.6, 7.5);
7182
+ const renderer = new THREE3__namespace.WebGLRenderer({ antialias: true, alpha: true });
7183
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
7184
+ renderer.setSize(mount.clientWidth, mount.clientHeight);
7185
+ renderer.outputColorSpace = THREE3__namespace.SRGBColorSpace;
7186
+ mount.appendChild(renderer.domElement);
7187
+ const ambientLight = new THREE3__namespace.AmbientLight(9090303, 0.8);
7188
+ scene.add(ambientLight);
7189
+ const keyLight = new THREE3__namespace.DirectionalLight(16777215, 1.25);
7190
+ keyLight.position.set(2, 5, 4);
7191
+ scene.add(keyLight);
7192
+ const fillLight = new THREE3__namespace.PointLight(8050687, 0.9, 24);
7193
+ fillLight.position.set(-4, 3, -2);
7194
+ scene.add(fillLight);
7195
+ const floor = new THREE3__namespace.Mesh(
7196
+ new THREE3__namespace.CircleGeometry(12, 48),
7197
+ new THREE3__namespace.MeshStandardMaterial({ color: 1056826, roughness: 0.95, metalness: 0.05 })
7198
+ );
7199
+ floor.rotation.x = -Math.PI / 2;
7200
+ floor.position.y = -1.2;
7201
+ scene.add(floor);
7202
+ const giftGroup = new THREE3__namespace.Group();
7203
+ scene.add(giftGroup);
7204
+ const box = new THREE3__namespace.Mesh(
7205
+ new THREE3__namespace.BoxGeometry(2, 1.6, 2),
7206
+ new THREE3__namespace.MeshStandardMaterial({ color: 14238053, roughness: 0.55, metalness: 0.2 })
7207
+ );
7208
+ giftGroup.add(box);
7209
+ const ribbonMaterial = new THREE3__namespace.MeshStandardMaterial({ color: 16767354, roughness: 0.3, metalness: 0.5 });
7210
+ const verticalRibbon = new THREE3__namespace.Mesh(new THREE3__namespace.BoxGeometry(0.24, 1.7, 2.02), ribbonMaterial);
7211
+ const horizontalRibbon = new THREE3__namespace.Mesh(new THREE3__namespace.BoxGeometry(2.02, 1.7, 0.24), ribbonMaterial);
7212
+ giftGroup.add(verticalRibbon);
7213
+ giftGroup.add(horizontalRibbon);
7214
+ const lid = new THREE3__namespace.Mesh(
7215
+ new THREE3__namespace.BoxGeometry(2.15, 0.34, 2.15),
7216
+ new THREE3__namespace.MeshStandardMaterial({ color: 13448278, roughness: 0.52, metalness: 0.2 })
7217
+ );
7218
+ lid.position.y = 0.98;
7219
+ giftGroup.add(lid);
7220
+ const bowLeft = new THREE3__namespace.Mesh(new THREE3__namespace.TorusGeometry(0.26, 0.08, 12, 32), ribbonMaterial);
7221
+ bowLeft.rotation.set(Math.PI / 2, Math.PI / 6, 0);
7222
+ bowLeft.position.set(-0.22, 1.14, 0);
7223
+ const bowRight = bowLeft.clone();
7224
+ bowRight.rotation.y = -Math.PI / 6;
7225
+ bowRight.position.x = 0.22;
7226
+ giftGroup.add(bowLeft, bowRight);
7227
+ giftGroup.position.y = -0.15;
7228
+ const { positions, speeds } = createSnow(260);
7229
+ const snowGeometry = new THREE3__namespace.BufferGeometry();
7230
+ snowGeometry.setAttribute("position", new THREE3__namespace.BufferAttribute(positions, 3));
7231
+ const snow = new THREE3__namespace.Points(
7232
+ snowGeometry,
7233
+ new THREE3__namespace.PointsMaterial({
7234
+ color: 15267071,
7235
+ size: 0.08,
7236
+ transparent: true,
7237
+ opacity: 0.92,
7238
+ depthWrite: false
7239
+ })
7240
+ );
7241
+ scene.add(snow);
7242
+ let rafId = 0;
7243
+ const clock = new THREE3__namespace.Clock();
7244
+ const animate = () => {
7245
+ const elapsed = clock.getElapsedTime();
7246
+ const pos = snowGeometry.attributes.position;
7247
+ for (let i = 0; i < pos.count; i++) {
7248
+ const speed = speeds[i] ?? 0.01;
7249
+ const y = pos.getY(i) - speed;
7250
+ pos.setY(i, y < -1.1 ? 10 + Math.random() * 2 : y);
7251
+ pos.setX(i, pos.getX(i) + Math.sin(elapsed + i * 0.04) * 16e-4);
7252
+ }
7253
+ pos.needsUpdate = true;
7254
+ giftGroup.rotation.y = elapsed * 0.35;
7255
+ giftGroup.position.y = -0.15 + Math.sin(elapsed * 1.4) * 0.08;
7256
+ lid.position.y = 0.98 + Math.sin(elapsed * 2.2) * 0.08;
7257
+ renderer.render(scene, camera);
7258
+ rafId = window.requestAnimationFrame(animate);
7259
+ };
7260
+ const handleResize = () => {
7261
+ if (!mount) return;
7262
+ const width = mount.clientWidth;
7263
+ const height = mount.clientHeight;
7264
+ camera.aspect = width / height;
7265
+ camera.updateProjectionMatrix();
7266
+ renderer.setSize(width, height);
7267
+ };
7268
+ window.addEventListener("resize", handleResize);
7269
+ animate();
7270
+ return () => {
7271
+ window.cancelAnimationFrame(rafId);
7272
+ window.removeEventListener("resize", handleResize);
7273
+ scene.traverse((obj) => {
7274
+ const mesh = obj;
7275
+ if (mesh.geometry) mesh.geometry.dispose();
7276
+ const material = mesh.material;
7277
+ if (Array.isArray(material)) material.forEach((m) => m.dispose());
7278
+ else material?.dispose();
7279
+ });
7280
+ renderer.dispose();
7281
+ mount.removeChild(renderer.domElement);
7282
+ };
7283
+ }, []);
7284
+ return /* @__PURE__ */ React42__namespace.default.createElement(
7285
+ "div",
7286
+ {
7287
+ className,
7288
+ style: {
7289
+ position: "relative",
7290
+ width: "100%",
7291
+ minHeight: 420,
7292
+ borderRadius: 20,
7293
+ overflow: "hidden",
7294
+ background: "radial-gradient(circle at 20% 20%, #244d8c 0%, #0c1a34 45%, #060d1f 100%)"
7295
+ }
7296
+ },
7297
+ /* @__PURE__ */ React42__namespace.default.createElement("div", { ref: mountRef, style: { position: "absolute", inset: 0 } }),
7298
+ /* @__PURE__ */ React42__namespace.default.createElement(
7299
+ "div",
7300
+ {
7301
+ style: {
7302
+ position: "absolute",
7303
+ inset: 0,
7304
+ pointerEvents: "none",
7305
+ 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%)"
7306
+ }
7307
+ }
7308
+ ),
7309
+ /* @__PURE__ */ React42__namespace.default.createElement(
7310
+ "div",
7311
+ {
7312
+ style: {
7313
+ position: "absolute",
7314
+ left: 20,
7315
+ right: 20,
7316
+ bottom: 20,
7317
+ zIndex: 2,
7318
+ padding: "16px 18px",
7319
+ borderRadius: 14,
7320
+ backgroundColor: "rgba(8, 16, 35, 0.66)",
7321
+ border: "1px solid rgba(255, 255, 255, 0.16)",
7322
+ color: "#f8fafc"
7323
+ }
7324
+ },
7325
+ /* @__PURE__ */ React42__namespace.default.createElement("div", { style: { fontSize: 26, fontWeight: 700, lineHeight: 1.2 } }, title),
7326
+ /* @__PURE__ */ React42__namespace.default.createElement("div", { style: { marginTop: 6, fontSize: 15, opacity: 0.92 } }, subtitle)
7327
+ )
7328
+ );
7329
+ };
7140
7330
 
7141
7331
  // src/storage/adapters/react-native-adapter.ts
7142
7332
  var AsyncStorage = null;
@@ -7562,6 +7752,7 @@ exports.ExperimentCard = ExperimentCard;
7562
7752
  exports.ExperimentGrid = ExperimentGrid;
7563
7753
  exports.ExperimentItemGrid = ExperimentItemGrid;
7564
7754
  exports.FIREWORK_KIND_LABELS = FIREWORK_KIND_LABELS;
7755
+ exports.FestivalCard3D = FestivalCard3D;
7565
7756
  exports.FilterButtonGroup = FilterButtonGroup;
7566
7757
  exports.FireworksCanvas = FireworksCanvas;
7567
7758
  exports.FireworksControlPanel = FireworksControlPanel;
@@ -7663,6 +7854,7 @@ exports.getExperimentCounts = getExperimentCounts;
7663
7854
  exports.japaneseUtils = japaneseUtils;
7664
7855
  exports.logger = logger;
7665
7856
  exports.normalizePromptVariables = normalizePromptVariables;
7857
+ exports.resolveScreenReceiverSignalUrl = resolveScreenReceiverSignalUrl;
7666
7858
  exports.skillToToolDefinition = skillToToolDefinition;
7667
7859
  exports.sortExperiments = sortExperiments;
7668
7860
  exports.stringUtils = stringUtils;