@vanillaskyai/video 0.5.8 → 0.7.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/PUBLIC-API.md +129 -9
  3. package/README.md +70 -108
  4. package/dist/{bg-confetti-SHQI7ATB.js → bg-confetti-HITCGLGD.js} +1 -1
  5. package/dist/{bg-emoji-XYFRA63Q.js → bg-emoji-VU4UZYZN.js} +1 -1
  6. package/dist/{bg-media-FEBATBT2.js → bg-media-L34PDQXJ.js} +4 -4
  7. package/dist/{brand-message-P56WEJPG.js → brand-message-FUJ4STFO.js} +3 -3
  8. package/dist/{builtin-server-YHEZ2JRF.js → builtin-server-KB7FKF6A.js} +2 -2
  9. package/dist/{chart-bar-ZB45ZRKH.js → chart-bar-EGPHJATL.js} +4 -4
  10. package/dist/{chart-counter-HFYNE4HT.js → chart-counter-5FFWQNZO.js} +4 -4
  11. package/dist/{chart-progress-ring-ZKMLRGSB.js → chart-progress-ring-JMXQLMLC.js} +4 -4
  12. package/dist/check-runtime.js +2 -2
  13. package/dist/{chunk-66MNRUCR.js → chunk-2PYO6VAC.js} +51 -3
  14. package/dist/{chunk-ZQQQAAKP.js → chunk-2XT4MZ76.js} +33 -2
  15. package/dist/chunk-5CDAM24P.js +31 -0
  16. package/dist/{chunk-PNS52FL4.js → chunk-5SLENAJW.js} +19 -6
  17. package/dist/{chunk-EFL34TXF.js → chunk-AITKH6QT.js} +24 -8
  18. package/dist/{chunk-HT6BGERF.js → chunk-FRN6WKHA.js} +28 -10
  19. package/dist/{chunk-FZHMQFG3.js → chunk-GAIOHGNR.js} +5 -21
  20. package/dist/{chunk-3RV4YKB3.js → chunk-JNN3EYVP.js} +51 -26
  21. package/dist/{chunk-NGY3TNND.js → chunk-K746NUIP.js} +70 -50
  22. package/dist/{chunk-HVCPEAQF.js → chunk-LKBZX7GV.js} +9 -6
  23. package/dist/{chunk-G66Z5CWR.js → chunk-MMUXVA47.js} +27 -3
  24. package/dist/{chunk-6M6DATLW.js → chunk-MXZSDGZQ.js} +6 -5
  25. package/dist/{chunk-3OU7HIEB.js → chunk-RE4IMWJR.js} +15 -31
  26. package/dist/{chunk-FVTMYS6U.js → chunk-RGF452LL.js} +1 -1
  27. package/dist/{chunk-34O5BY6X.js → chunk-RXHW4EP4.js} +21 -4
  28. package/dist/chunk-SKRGRKHY.js +142 -0
  29. package/dist/{chunk-TCEHK2BW.js → chunk-YJJC4N4D.js} +2 -1
  30. package/dist/cli.js +438 -30
  31. package/dist/{compose-video-JWIEDTEJ.js → compose-video-PD6LKKRK.js} +4 -4
  32. package/dist/{cta-logo-S4OMTNXD.js → cta-logo-YR7LYUR5.js} +3 -3
  33. package/dist/{cta-media-EROTHDRR.js → cta-media-DQJBKUO2.js} +4 -4
  34. package/dist/{events-BBP30j3c.d.ts → events-B6qS1Lsb.d.ts} +2 -2
  35. package/dist/{incoming-call-5IWJ2TAS.js → incoming-call-54KQ7O5A.js} +3 -3
  36. package/dist/index.d.ts +89 -3
  37. package/dist/index.js +12 -1
  38. package/dist/{infographic-before-after-2I7YZVDD.js → infographic-before-after-ROS52GOW.js} +1 -1
  39. package/dist/{infographic-feature-list-7SK65U3K.js → infographic-feature-list-E7MGUDAN.js} +4 -4
  40. package/dist/{infographic-problem-solution-IW35S6BR.js → infographic-problem-solution-3S6NGO5N.js} +4 -4
  41. package/dist/{infographic-stat-row-XHUZZPDM.js → infographic-stat-row-SYB7AB7H.js} +4 -4
  42. package/dist/{infographic-steps-JDDEDI7X.js → infographic-steps-KCE6JWE2.js} +4 -4
  43. package/dist/{kit-DEG3fcaL.d.ts → kit-8g46H2RZ.d.ts} +1 -1
  44. package/dist/{prompt-input-6ZWXEL3V.js → prompt-input-MHX4O42G.js} +3 -3
  45. package/dist/react.d.ts +200 -6
  46. package/dist/react.js +1859 -43
  47. package/dist/{reaction-Z3JIM3MQ.js → reaction-SLEGR3BE.js} +4 -4
  48. package/dist/{scene-video-backdrop-IL4F2SVD.js → scene-video-backdrop-XFPX4O3I.js} +2 -1
  49. package/dist/server.d.ts +104 -4
  50. package/dist/server.js +976 -26
  51. package/dist/{showcase-code-NWQAAJIA.js → showcase-code-2HLAVKBM.js} +4 -4
  52. package/dist/{showcase-phone-5UW45ATT.js → showcase-phone-Q4HEO4LH.js} +4 -4
  53. package/dist/{showcase-terminal-UVOD25UF.js → showcase-terminal-DL45LUFG.js} +4 -4
  54. package/dist/{showcase-web-3AW6VHIG.js → showcase-web-2QZO73FZ.js} +4 -4
  55. package/dist/{social-milestone-KPKHFOB5.js → social-milestone-GEFUQSBF.js} +3 -3
  56. package/dist/{social-notification-EDOU6TZB.js → social-notification-FJ5VHVLK.js} +3 -3
  57. package/dist/{social-review-stack-EZOO33SV.js → social-review-stack-KXQCKFRP.js} +3 -3
  58. package/dist/{social-testimonial-DLOINMMY.js → social-testimonial-JZ7CHC7S.js} +3 -3
  59. package/dist/{social-tweet-6JUM323G.js → social-tweet-UCDXM25F.js} +3 -3
  60. package/dist/{system-prompt-4I6Z5HK3.js → system-prompt-RRXIWDDD.js} +5 -3
  61. package/dist/template-catalog.js +1 -1
  62. package/dist/templates.d.ts +3 -3
  63. package/dist/test.d.ts +2 -2
  64. package/dist/test.js +3 -3
  65. package/dist/{text-stream-J6EDDJP4.js → text-stream-FW4BLBAL.js} +2 -2
  66. package/dist/{types-BV9IqExh.d.ts → types-2wHBqtg8.d.ts} +29 -1
  67. package/dist/types-DrABlRa7.d.ts +46 -0
  68. package/docs/agent-integration.md +49 -25
  69. package/docs/architecture.md +37 -22
  70. package/docs/branding-and-personalization.md +1 -1
  71. package/docs/concepts.md +14 -0
  72. package/docs/custom-templates.md +9 -9
  73. package/docs/customization.md +41 -5
  74. package/docs/getting-started.md +81 -84
  75. package/docs/media-and-audio.md +113 -117
  76. package/docs/persistence.md +1 -1
  77. package/docs/production.md +81 -92
  78. package/docs/prompt-and-input.md +71 -161
  79. package/docs/provider-integration.md +91 -49
  80. package/docs/responsive-orientation.md +1 -1
  81. package/docs/security.md +6 -5
  82. package/docs/streaming-protocol.md +1 -1
  83. package/docs/testing.md +51 -43
  84. package/examples/custom-template/README.md +1 -1
  85. package/package.json +20 -21
  86. package/registry/items/backgrounds.json +2 -2
  87. package/registry/items/barChart.json +6 -4
  88. package/registry/items/beforeAfter.json +1 -1
  89. package/registry/items/bigNumber.json +4 -3
  90. package/registry/items/brandMessage.json +3 -2
  91. package/registry/items/cardList.json +6 -4
  92. package/registry/items/codeEditor.json +4 -3
  93. package/registry/items/confetti.json +1 -1
  94. package/registry/items/ctaLogo.json +3 -2
  95. package/registry/items/ctaMedia.json +4 -3
  96. package/registry/items/emojiBurst.json +1 -1
  97. package/registry/items/incomingCall.json +3 -2
  98. package/registry/items/media.json +4 -3
  99. package/registry/items/milestone.json +3 -2
  100. package/registry/items/notification.json +3 -2
  101. package/registry/items/phoneMockup.json +4 -3
  102. package/registry/items/problemSolution.json +4 -3
  103. package/registry/items/progressRing.json +4 -3
  104. package/registry/items/promptInput.json +3 -2
  105. package/registry/items/reaction.json +2 -2
  106. package/registry/items/reviewStack.json +3 -2
  107. package/registry/items/steps.json +6 -4
  108. package/registry/items/terminal.json +5 -4
  109. package/registry/items/testimonial.json +3 -2
  110. package/registry/items/tripleStats.json +4 -3
  111. package/registry/items/tweet.json +3 -2
  112. package/registry/items/webMockup.json +4 -3
  113. package/starters/video-chat/.env.example +16 -0
  114. package/starters/video-chat/README.md +63 -0
  115. package/starters/video-chat/index.html +12 -0
  116. package/starters/video-chat/package.json +28 -0
  117. package/starters/video-chat/server.ts +152 -0
  118. package/starters/video-chat/src/main.tsx +8 -0
  119. package/starters/video-chat/stock.ts +139 -0
  120. package/starters/video-chat/tsconfig.json +20 -0
  121. package/starters/video-chat/vite.config.ts +81 -0
  122. package/styles/video-chat.css +713 -0
  123. package/dist/chunk-C6WVCZRW.js +0 -19
  124. package/docs/input-and-first-scene.md +0 -64
  125. package/docs/integrate-nextjs.md +0 -86
  126. package/docs/live-channels.md +0 -149
  127. package/docs/use-cases.md +0 -59
  128. package/examples/nextjs-quickstart/.env.example +0 -2
  129. package/examples/nextjs-quickstart/README.md +0 -27
  130. package/examples/nextjs-quickstart/next-env.d.ts +0 -4
  131. package/examples/nextjs-quickstart/package.json +0 -25
  132. package/examples/nextjs-quickstart/src/app/api/video/route.ts +0 -24
  133. package/examples/nextjs-quickstart/src/app/layout.tsx +0 -5
  134. package/examples/nextjs-quickstart/src/app/page.tsx +0 -31
  135. package/examples/nextjs-quickstart/tsconfig.json +0 -26
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
6
+ "skipLibCheck": true,
7
+ "esModuleInterop": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "strict": true,
10
+ "noUnusedLocals": true,
11
+ "noUnusedParameters": true,
12
+ "module": "ESNext",
13
+ "moduleResolution": "Bundler",
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "noEmit": true,
17
+ "jsx": "react-jsx"
18
+ },
19
+ "include": ["src", "vite.config.ts", "server.ts", "stock.ts"]
20
+ }
@@ -0,0 +1,81 @@
1
+ import { defineConfig, loadEnv, type Plugin } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ /** Mount the SDK's single video-chat endpoint on the Vite development server. */
5
+ function videoChatRoutes(): Plugin {
6
+ return {
7
+ name: "video-chat-routes",
8
+ apply: "serve",
9
+ configureServer(server) {
10
+ server.middlewares.use(async (request, response, next) => {
11
+ const url = new URL(request.url ?? "/", "http://localhost");
12
+ const path = url.pathname;
13
+ if (path !== "/api/video-chat") return next();
14
+ const action = url.searchParams.get("action");
15
+ if (!process.env.ANTHROPIC_API_KEY && action !== "welcome" && action !== "capabilities") {
16
+ response.statusCode = 503;
17
+ response.end("Set ANTHROPIC_API_KEY and restart. Video responses require a text provider.");
18
+ return;
19
+ }
20
+
21
+ const startedAt = Date.now();
22
+ const since = () => `${String(Date.now() - startedAt).padStart(6)}ms`;
23
+ const client = new AbortController();
24
+ request.once("aborted", () => client.abort("client disconnected"));
25
+ response.once("close", () => {
26
+ if (!response.writableEnded) client.abort("client disconnected");
27
+ });
28
+ try {
29
+ const chunks: Buffer[] = [];
30
+ for await (const chunk of request) chunks.push(chunk as Buffer);
31
+ const routes = await server.ssrLoadModule("/server.ts");
32
+ const raw = Buffer.concat(chunks);
33
+ const headers = new Headers();
34
+ for (const [name, value] of Object.entries(request.headers)) {
35
+ if (Array.isArray(value)) value.forEach((entry) => headers.append(name, entry));
36
+ else if (value != null) headers.set(name, value);
37
+ }
38
+ headers.delete("content-length");
39
+ const incoming = new Request(`http://localhost${request.url}`, {
40
+ method: request.method,
41
+ headers,
42
+ signal: client.signal,
43
+ ...(request.method === "GET" || request.method === "HEAD" ? {} : { body: raw }),
44
+ });
45
+ const result: Response = await routes.handleVideoChat(incoming);
46
+ response.statusCode = result.status;
47
+ result.headers.forEach((value, key) => response.setHeader(key, value));
48
+ if (!result.body) return void response.end();
49
+
50
+ const streamsEvents = result.headers.get("content-type")?.includes("text/event-stream") === true;
51
+ if (streamsEvents) {
52
+ response.setHeader("cache-control", "no-cache, no-transform");
53
+ response.flushHeaders();
54
+ response.socket?.setNoDelay(true);
55
+ }
56
+ let firstChunk = true;
57
+ for await (const chunk of result.body as unknown as AsyncIterable<Uint8Array>) {
58
+ if (firstChunk) {
59
+ firstChunk = false;
60
+ server.config.logger.info(`[video-chat] ${since()} ${action ?? "unknown"} first byte`);
61
+ }
62
+ response.write(chunk);
63
+ }
64
+ server.config.logger.info(`[video-chat] ${since()} ${action ?? "unknown"} complete`);
65
+ response.end();
66
+ } catch (cause) {
67
+ const message = cause instanceof Error ? cause.message : String(cause);
68
+ server.config.logger.error(`[video-chat] ${action ?? "unknown"} failed: ${message}`);
69
+ if (!response.headersSent) response.statusCode = 500;
70
+ response.end("Video chat request failed");
71
+ }
72
+ });
73
+ },
74
+ };
75
+ }
76
+
77
+ export default defineConfig(({ mode }) => {
78
+ const localEnvironment = loadEnv(mode, process.cwd(), "");
79
+ for (const [name, value] of Object.entries(localEnvironment)) process.env[name] ??= value;
80
+ return { plugins: [react(), videoChatRoutes()] };
81
+ });