netra-artifacts 0.1.0-alpha.6 → 0.1.0-alpha.8

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 (91) hide show
  1. package/CHANGELOG.md +27 -6
  2. package/README.md +24 -20
  3. package/dist/client/ArtifactChat.d.ts +7 -0
  4. package/dist/client/ArtifactChat.d.ts.map +1 -1
  5. package/dist/client/ArtifactChat.js +29 -2
  6. package/dist/client/ArtifactChat.js.map +1 -1
  7. package/dist/client/index.d.ts +1 -0
  8. package/dist/client/index.d.ts.map +1 -1
  9. package/dist/client/index.js +1 -0
  10. package/dist/client/index.js.map +1 -1
  11. package/dist/client/starterPrompts.d.ts +26 -0
  12. package/dist/client/starterPrompts.d.ts.map +1 -0
  13. package/dist/client/starterPrompts.js +102 -0
  14. package/dist/client/starterPrompts.js.map +1 -0
  15. package/dist/client/useArtifactStream.d.ts.map +1 -1
  16. package/dist/client/useArtifactStream.js +2 -1
  17. package/dist/client/useArtifactStream.js.map +1 -1
  18. package/dist/constants/defaults.d.ts.map +1 -1
  19. package/dist/constants/defaults.js +2 -0
  20. package/dist/constants/defaults.js.map +1 -1
  21. package/dist/constants/index.d.ts +1 -0
  22. package/dist/constants/index.d.ts.map +1 -1
  23. package/dist/constants/index.js +1 -0
  24. package/dist/constants/index.js.map +1 -1
  25. package/dist/constants/trustedCdnHosts.d.ts +27 -0
  26. package/dist/constants/trustedCdnHosts.d.ts.map +1 -0
  27. package/dist/constants/trustedCdnHosts.js +58 -0
  28. package/dist/constants/trustedCdnHosts.js.map +1 -0
  29. package/dist/iframe/HtmlArtifactPreview.js +2 -2
  30. package/dist/iframe/HtmlArtifactPreview.js.map +1 -1
  31. package/dist/iframe/iframeSrcDoc.d.ts +2 -1
  32. package/dist/iframe/iframeSrcDoc.d.ts.map +1 -1
  33. package/dist/iframe/iframeSrcDoc.js +68 -40
  34. package/dist/iframe/iframeSrcDoc.js.map +1 -1
  35. package/dist/prompts/htmlArtifactPrompt.d.ts +6 -0
  36. package/dist/prompts/htmlArtifactPrompt.d.ts.map +1 -1
  37. package/dist/prompts/htmlArtifactPrompt.js +5 -1
  38. package/dist/prompts/htmlArtifactPrompt.js.map +1 -1
  39. package/dist/prompts/index.d.ts +1 -0
  40. package/dist/prompts/index.d.ts.map +1 -1
  41. package/dist/prompts/index.js +1 -0
  42. package/dist/prompts/index.js.map +1 -1
  43. package/dist/prompts/threejsGamePrompt.d.ts +14 -0
  44. package/dist/prompts/threejsGamePrompt.d.ts.map +1 -0
  45. package/dist/prompts/threejsGamePrompt.js +157 -0
  46. package/dist/prompts/threejsGamePrompt.js.map +1 -0
  47. package/dist/sanitizer/sanitizeHtml.d.ts.map +1 -1
  48. package/dist/sanitizer/sanitizeHtml.js +85 -2
  49. package/dist/sanitizer/sanitizeHtml.js.map +1 -1
  50. package/dist/server/config.d.ts.map +1 -1
  51. package/dist/server/config.js +6 -0
  52. package/dist/server/config.js.map +1 -1
  53. package/dist/server/createArtifactStreamResponse.js +1 -0
  54. package/dist/server/createArtifactStreamResponse.js.map +1 -1
  55. package/dist/types/client.d.ts +8 -2
  56. package/dist/types/client.d.ts.map +1 -1
  57. package/dist/types/config.d.ts +8 -0
  58. package/dist/types/config.d.ts.map +1 -1
  59. package/dist/types/server.d.ts +10 -0
  60. package/dist/types/server.d.ts.map +1 -1
  61. package/dist-cjs/client/ArtifactChat.js +29 -2
  62. package/dist-cjs/client/ArtifactChat.js.map +1 -1
  63. package/dist-cjs/client/index.js +3 -1
  64. package/dist-cjs/client/index.js.map +1 -1
  65. package/dist-cjs/client/starterPrompts.js +105 -0
  66. package/dist-cjs/client/starterPrompts.js.map +1 -0
  67. package/dist-cjs/client/useArtifactStream.js +2 -1
  68. package/dist-cjs/client/useArtifactStream.js.map +1 -1
  69. package/dist-cjs/constants/defaults.js +2 -0
  70. package/dist-cjs/constants/defaults.js.map +1 -1
  71. package/dist-cjs/constants/index.js +1 -0
  72. package/dist-cjs/constants/index.js.map +1 -1
  73. package/dist-cjs/constants/trustedCdnHosts.js +63 -0
  74. package/dist-cjs/constants/trustedCdnHosts.js.map +1 -0
  75. package/dist-cjs/iframe/HtmlArtifactPreview.js +2 -2
  76. package/dist-cjs/iframe/HtmlArtifactPreview.js.map +1 -1
  77. package/dist-cjs/iframe/iframeSrcDoc.js +68 -40
  78. package/dist-cjs/iframe/iframeSrcDoc.js.map +1 -1
  79. package/dist-cjs/prompts/htmlArtifactPrompt.js +5 -1
  80. package/dist-cjs/prompts/htmlArtifactPrompt.js.map +1 -1
  81. package/dist-cjs/prompts/index.js +1 -0
  82. package/dist-cjs/prompts/index.js.map +1 -1
  83. package/dist-cjs/prompts/threejsGamePrompt.js +161 -0
  84. package/dist-cjs/prompts/threejsGamePrompt.js.map +1 -0
  85. package/dist-cjs/sanitizer/sanitizeHtml.js +85 -2
  86. package/dist-cjs/sanitizer/sanitizeHtml.js.map +1 -1
  87. package/dist-cjs/server/config.js +6 -0
  88. package/dist-cjs/server/config.js.map +1 -1
  89. package/dist-cjs/server/createArtifactStreamResponse.js +1 -0
  90. package/dist-cjs/server/createArtifactStreamResponse.js.map +1 -1
  91. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,12 +5,33 @@ adheres to [Semantic Versioning](https://semver.org/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
- ### Changed
9
-
10
- - Trusted YouTube embeds and inline JavaScript are now explicit opt-ins. The
11
- script-capable iframe sandbox omits `allow-same-origin`, and an internal
12
- postMessage resize bridge keeps isolated video/script previews auto-sized.
13
- - HTML-artifact prompt reworked to a **hybrid styling model**: one small shared
8
+ ### Added
9
+
10
+ - **Starter prompt templates.** `STARTER_PROMPTS` (exported from
11
+ `netra-artifacts/client`) ships 8 prebuilt templates each a short show
12
+ `label` plus a rich `prompt` actually sent to the model — covering an HTML
13
+ artifact, markdown answer, three.js game, generative-UI-from-JSON, image-rich
14
+ page, YouTube video page, pricing page, and sign-up form. `ArtifactChat`
15
+ renders them as chips below the composer; each carries per-request `body`
16
+ overrides (`mode`/`game`/`allowVideoEmbeds`/…) now merged by `sendMessage`'s
17
+ new second argument. Pass `starterPrompts={[]}` to hide them.
18
+ - **Single-file three.js games.** New `allowModuleImports` sanitize/preview flag
19
+ keeps a `<script type="importmap">` whose targets resolve to a trusted,
20
+ version-pinned ESM CDN (`esm.sh`, `cdn.jsdelivr.net`, `unpkg.com`,
21
+ `cdn.skypack.dev`), so a self-contained game can `import … from "three"` with
22
+ no build step. The game frame runs in the isolated `allow-scripts` sandbox
23
+ (no `allow-same-origin`) with a defense-in-depth CSP pinning script/connect to
24
+ those CDNs. New `game` server option switches the HTML prompt to a dedicated
25
+ three.js game builder (pinned import map + module + fixed-timestep loop) and
26
+ implies `allowModuleImports`. New `threejs-games` agent skill + single-file
27
+ setup guidance in `threejs-fundamentals`.
28
+
29
+ ### Changed
30
+
31
+ - Trusted YouTube embeds and inline JavaScript are now explicit opt-ins. The
32
+ script-capable iframe sandbox omits `allow-same-origin`, and an internal
33
+ postMessage resize bridge keeps isolated video/script previews auto-sized.
34
+ - HTML-artifact prompt reworked to a **hybrid styling model**: one small shared
14
35
  `<style>` design system (box-sizing reset + fluid `clamp()` type/space scale +
15
36
  element defaults + `.wrap/.stack/.grid/.row/.card/.scroll-x` utility classes)
16
37
  plus inline `style=""` for per-element specifics, with an optional 1–2 `@media`
package/README.md CHANGED
@@ -41,14 +41,17 @@ const google = createGoogleGenerativeAI({
41
41
  });
42
42
 
43
43
  export async function POST(req: Request) {
44
- const { messages } = await req.json();
44
+ // Spread the body so per-request fields from the client (mode, game,
45
+ // allowVideoEmbeds, allowModuleImports) — e.g. those sent by the built-in
46
+ // starter prompts — are forwarded into the options.
47
+ const body = await req.json();
45
48
  const model = google("gemini-2.5-flash");
46
49
 
47
50
  return createArtifactStreamResponse({
48
- messages,
51
+ ...body,
49
52
  generateTextStream: (args) => streamText({ model, ...args }).textStream,
50
53
  generateText: async (args) => (await generateText({ model, ...args })).text,
51
- mode: "auto",
54
+ mode: body.mode ?? "auto",
52
55
  snapshotIntervalMs: 0,
53
56
  allowExternalFonts: true,
54
57
  });
@@ -94,12 +97,12 @@ export async function POST(req: Request) {
94
97
  sanitize: {
95
98
  allowForms: true,
96
99
  allowScripts: false,
97
- allowInlineStyles: true,
98
- allowStyleTags: true,
99
- allowSvg: true,
100
- allowExternalFonts: false,
101
- allowVideoEmbeds: false,
102
- },
100
+ allowInlineStyles: true,
101
+ allowStyleTags: true,
102
+ allowSvg: true,
103
+ allowExternalFonts: false,
104
+ allowVideoEmbeds: false,
105
+ },
103
106
  snapshotIntervalMs: 0,
104
107
  },
105
108
  emit,
@@ -213,17 +216,18 @@ type ArtifactStreamEvent =
213
216
 
214
217
  ## Security
215
218
 
216
- Artifacts are static HTML/CSS by default:
217
-
218
- - Scripts are stripped unless `allowScripts` is explicitly enabled
219
- - Event handler attributes are stripped
220
- - Dangerous URLs are stripped
221
- - Iframes, embeds, object tags, and refresh meta tags are stripped unless `allowVideoEmbeds` keeps a normalized trusted YouTube iframe
222
- - The preview iframe receives `allow-scripts` only for opt-in inline scripts or trusted video embeds, and that script-capable path omits `allow-same-origin`
223
- - `allowExternalFonts` only keeps approved Google Fonts hosts
224
-
225
- Use Netra's default mode for safe previews of generated static HTML. Opt into
226
- scripts only for artifacts you are comfortable executing in an isolated iframe.
219
+ Artifacts are static HTML/CSS by default:
220
+
221
+ - Scripts are stripped unless `allowScripts` is explicitly enabled
222
+ - Event handler attributes are stripped
223
+ - Dangerous URLs are stripped
224
+ - Iframes, embeds, object tags, and refresh meta tags are stripped unless `allowVideoEmbeds` keeps a normalized trusted YouTube iframe
225
+ - `<script type="importmap">` is stripped unless `allowModuleImports` is set, and then only mappings that resolve to a trusted, version-pinned ESM CDN survive — enabling single-file ESM games (e.g. three.js) with a defense-in-depth CSP on the frame
226
+ - The preview iframe receives `allow-scripts` only for opt-in inline scripts, trusted video embeds, or module-import games, and that script-capable path omits `allow-same-origin`
227
+ - `allowExternalFonts` only keeps approved Google Fonts hosts
228
+
229
+ Use Netra's default mode for safe previews of generated static HTML. Opt into
230
+ scripts only for artifacts you are comfortable executing in an isolated iframe.
227
231
 
228
232
  ## Checks
229
233
 
@@ -1,10 +1,17 @@
1
1
  import * as React from "react";
2
+ import { type StarterPrompt } from "./starterPrompts.js";
2
3
  import type { HtmlArtifactCardProps, UseArtifactStreamOptions } from "../types/client.js";
3
4
  export interface ArtifactChatProps extends UseArtifactStreamOptions {
4
5
  placeholder?: string;
5
6
  emptyState?: React.ReactNode;
6
7
  cardProps?: Partial<Omit<HtmlArtifactCardProps, "artifact">>;
7
8
  className?: string;
9
+ /**
10
+ * Template chips shown below the composer. Defaults to {@link STARTER_PROMPTS}.
11
+ * Pass `[]` to hide them. Clicking one sends its detailed prompt with its
12
+ * per-request `body` overrides (mode/game/allowVideoEmbeds/…).
13
+ */
14
+ starterPrompts?: StarterPrompt[];
8
15
  }
9
16
  /**
10
17
  * A batteries-included chat surface: message list, streaming status, and a
@@ -1 +1 @@
1
- {"version":3,"file":"ArtifactChat.d.ts","sourceRoot":"","sources":["../../src/client/ArtifactChat.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAgGpD"}
1
+ {"version":3,"file":"ArtifactChat.d.ts","sourceRoot":"","sources":["../../src/client/ArtifactChat.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA4IpD"}
@@ -3,17 +3,23 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { useArtifactStream } from "./useArtifactStream.js";
5
5
  import { ArtifactMessage } from "./ArtifactMessage.js";
6
+ import { STARTER_PROMPTS } from "./starterPrompts.js";
6
7
  /**
7
8
  * A batteries-included chat surface: message list, streaming status, and a
8
9
  * composer. Drop it in with just an `endpoint` to get the full experience, or
9
10
  * compose `useArtifactStream` + `ArtifactMessage` yourself for custom layouts.
10
11
  */
11
12
  export function ArtifactChat(props) {
12
- const { placeholder = "Ask anything, or describe a UI to generate…", emptyState, cardProps, className, ...streamOptions } = props;
13
+ const { placeholder = "Ask anything, or describe a UI to generate…", emptyState, cardProps, className, starterPrompts = STARTER_PROMPTS, ...streamOptions } = props;
13
14
  const { messages, artifacts, status, sendMessage, stop } = useArtifactStream(streamOptions);
14
15
  const [input, setInput] = React.useState("");
15
16
  const scrollRef = React.useRef(null);
16
17
  const busy = status === "submitted" || status === "streaming";
18
+ const showStarters = !busy && messages.length === 0 && starterPrompts.length > 0;
19
+ const runStarter = (p) => {
20
+ setInput("");
21
+ void sendMessage(p.prompt, p.body);
22
+ };
17
23
  React.useEffect(() => {
18
24
  scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: "smooth" });
19
25
  }, [messages, artifacts]);
@@ -44,7 +50,28 @@ export function ArtifactChat(props) {
44
50
  fontSize: 14.5,
45
51
  outline: "none",
46
52
  background: "#fff",
47
- } }), busy ? (_jsx("button", { type: "button", onClick: stop, style: btn("#ef4444"), children: "Stop" })) : (_jsx("button", { type: "submit", disabled: !input.trim(), style: btn("#2563eb", !input.trim()), children: "Send" }))] })] }));
53
+ } }), busy ? (_jsx("button", { type: "button", onClick: stop, style: btn("#ef4444"), children: "Stop" })) : (_jsx("button", { type: "submit", disabled: !input.trim(), style: btn("#2563eb", !input.trim()), children: "Send" }))] }), showStarters && (_jsx("div", { role: "list", "aria-label": "Starter prompts", style: {
54
+ display: "flex",
55
+ flexWrap: "wrap",
56
+ gap: 8,
57
+ padding: "0 10px 12px",
58
+ }, children: starterPrompts.map((p) => (_jsxs("button", { type: "button", role: "listitem", onClick: () => runStarter(p), title: p.hint, style: chip(), children: [_jsx("span", { "aria-hidden": "true", style: { fontSize: 15 }, children: p.emoji }), _jsx("span", { style: { fontWeight: 600 }, children: p.label }), _jsxs("span", { style: { color: "#9ca3af", fontWeight: 400 }, children: ["\u00B7 ", p.hint] })] }, p.id))) }))] }));
59
+ }
60
+ function chip() {
61
+ return {
62
+ display: "inline-flex",
63
+ alignItems: "center",
64
+ gap: 7,
65
+ border: "1px solid rgba(0,0,0,0.12)",
66
+ borderRadius: 999,
67
+ padding: "7px 13px",
68
+ fontSize: 13,
69
+ lineHeight: 1.2,
70
+ color: "var(--aha-fg, #1f2430)",
71
+ background: "rgba(0,0,0,0.02)",
72
+ cursor: "pointer",
73
+ whiteSpace: "nowrap",
74
+ };
48
75
  }
49
76
  function btn(bg, disabled = false) {
50
77
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"ArtifactChat.js","sourceRoot":"","sources":["../../src/client/ArtifactChat.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAUvD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,WAAW,GAAG,6CAA6C,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,CAAC;IAClI,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GACtD,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAEnC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,CAAC;IAE9D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3F,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1B,MAAM,MAAM,GAAG,CAAC,CAAkB,EAAE,EAAE;QACpC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC;QACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,CAAC;YACZ,UAAU,EACR,4FAA4F;YAC9F,KAAK,EAAE,wBAAwB;SAChC,aAED,eACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,aAEtE,QAAQ,CAAC,MAAM,KAAK,CAAC;wBACpB,CAAC,UAAU,IAAI,CACb,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,yHAEnF,CACP,CAAC,EAEH,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,KAAC,eAAe,IAEd,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,IAHf,OAAO,CAAC,EAAE,CAIf,CACH,CAAC,EAED,MAAM,KAAK,WAAW,IAAI,CACzB,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,+BAE5D,CACP,IACG,EAEN,gBACE,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,GAAG,EAAE,CAAC;oBACN,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,4BAA4B;iBACxC,aAED,gBACE,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAE,WAAW,gBACb,SAAS,EACpB,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,4BAA4B;4BACpC,YAAY,EAAE,EAAE;4BAChB,OAAO,EAAE,WAAW;4BACpB,QAAQ,EAAE,IAAI;4BACd,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,MAAM;yBACnB,GACD,EACD,IAAI,CAAC,CAAC,CAAC,CACN,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,qBAEjD,CACV,CAAC,CAAC,CAAC,CACF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qBAE1E,CACV,IACI,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,EAAU,EAAE,QAAQ,GAAG,KAAK;IACvC,OAAO;QACL,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC5C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ArtifactChat.js","sourceRoot":"","sources":["../../src/client/ArtifactChat.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export { useArtifactStream } from "./useArtifactStream.js";
2
2
  export { ArtifactChat, type ArtifactChatProps } from "./ArtifactChat.js";
3
3
  export { ArtifactMessage, type ArtifactMessageProps } from "./ArtifactMessage.js";
4
4
  export { MarkdownMessage, type MarkdownMessageProps } from "./MarkdownMessage.js";
5
+ export { STARTER_PROMPTS, type StarterPrompt } from "./starterPrompts.js";
5
6
  export { HtmlArtifactCard, HtmlArtifactPreview, HtmlArtifactModal, HtmlArtifactToolbar, HtmlArtifactCodeView, } from "../iframe/index.js";
6
7
  export type { ChatMessage, ArtifactStreamStatus, UseArtifactStreamOptions, UseArtifactStreamReturn, HtmlArtifactCardProps, HtmlArtifactPreviewOptions, } from "../types/client.js";
7
8
  export type { HtmlArtifact, ArtifactTheme, ArtifactPresentation, } from "../types/artifact.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGlF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
@@ -3,6 +3,7 @@ export { useArtifactStream } from "./useArtifactStream.js";
3
3
  export { ArtifactChat } from "./ArtifactChat.js";
4
4
  export { ArtifactMessage } from "./ArtifactMessage.js";
5
5
  export { MarkdownMessage } from "./MarkdownMessage.js";
6
+ export { STARTER_PROMPTS } from "./starterPrompts.js";
6
7
  // Re-export the iframe surface for convenience from the client entry.
7
8
  export { HtmlArtifactCard, HtmlArtifactPreview, HtmlArtifactModal, HtmlArtifactToolbar, HtmlArtifactCodeView, } from "../iframe/index.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAElF,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAE1E,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Prebuilt starter prompts shown below the composer. Each has a short `label`
3
+ * (the chip the user sees) and a rich `prompt` (the detailed message actually
4
+ * sent to the model). `body` carries per-request overrides merged into the POST
5
+ * body by `sendMessage` — e.g. `{ game: true }` or `{ mode: "generative_ui" }`.
6
+ *
7
+ * NOTE: for the `body` overrides to take effect, the server route must forward
8
+ * those fields into `createArtifactStreamResponse` options, e.g.:
9
+ * `createArtifactStreamResponse({ ...(await req.json()), generateTextStream })`.
10
+ */
11
+ export interface StarterPrompt {
12
+ /** Stable id. */
13
+ id: string;
14
+ /** Short chip text shown to the user. */
15
+ label: string;
16
+ /** One-line description of what it produces. */
17
+ hint: string;
18
+ /** Leading glyph for the chip. */
19
+ emoji: string;
20
+ /** The full, detailed message sent to the chat. */
21
+ prompt: string;
22
+ /** Per-request body overrides merged into the POST body for this prompt. */
23
+ body?: Record<string, unknown>;
24
+ }
25
+ export declare const STARTER_PROMPTS: StarterPrompt[];
26
+ //# sourceMappingURL=starterPrompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starterPrompts.d.ts","sourceRoot":"","sources":["../../src/client/starterPrompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAqCD,eAAO,MAAM,eAAe,EAAE,aAAa,EA+E1C,CAAC"}
@@ -0,0 +1,102 @@
1
+ /** YouTube videos used by the video-embed starter. */
2
+ const VIDEO_URLS = [
3
+ "https://www.youtube.com/embed/dQw4w9WgXcQ?si=O39oVkrE_1PpJrRX",
4
+ "https://www.youtube.com/embed/_e8BFrAPedM?si=L3FxEEFbGARDVAtG",
5
+ "https://www.youtube.com/embed/H7gWCJNPpzk?si=trRfbxLq0ercujsX",
6
+ "https://www.youtube.com/embed/wQs0uhFhMaI?si=iFm1GedCmKw5SsGi",
7
+ "https://www.youtube.com/embed/glXx2r3ePcs?si=1iALmW5BiMPvEpTi",
8
+ ];
9
+ /** Prebuilt generative-UI data payload (kept realistic and complete). */
10
+ const ORDER_JSON = JSON.stringify({
11
+ order: { id: "NX-48217", placed: "2026-05-28T14:02:00Z", status: "out_for_delivery", eta: "2026-05-30T18:00:00Z" },
12
+ customer: { name: "Aria Nakamura", tier: "Gold" },
13
+ shipment: {
14
+ carrier: "Aerolane",
15
+ tracking: "AL93 4471 0028",
16
+ steps: [
17
+ { label: "Ordered", at: "May 28, 2:02 PM", done: true },
18
+ { label: "Packed", at: "May 28, 7:40 PM", done: true },
19
+ { label: "Shipped", at: "May 29, 9:15 AM", done: true },
20
+ { label: "Out for delivery", at: "May 30, 8:10 AM", done: true },
21
+ { label: "Delivered", at: "Est. May 30, 6:00 PM", done: false },
22
+ ],
23
+ },
24
+ items: [
25
+ { name: "Aurora Wireless Headphones", qty: 1, price: 248.0, image: "headphones" },
26
+ { name: "USB-C Braided Cable (2m)", qty: 2, price: 19.0, image: "cable" },
27
+ ],
28
+ totals: { subtotal: 286.0, shipping: 0, tax: 22.88, total: 308.88, currency: "USD" },
29
+ }, null, 2);
30
+ export const STARTER_PROMPTS = [
31
+ {
32
+ id: "artifact-dashboard",
33
+ label: "Analytics dashboard",
34
+ hint: "Rich HTML artifact",
35
+ emoji: "📊",
36
+ body: { mode: "artifact" },
37
+ prompt: "Design a polished dark-mode SaaS analytics dashboard as a single self-contained HTML artifact. Include: a top bar with product name, a time-range selector, and a search; a row of 4 KPI cards (Revenue $48.9K +4.2%, Active Users 12,480 +1.8%, Churn 1.9% -0.3%, MRR $61.2K +5.1%) each with a tiny inline sparkline; a large area/line chart of revenue over 12 months drawn with inline SVG; a donut chart of traffic sources; and a recent-transactions table with status pills. Use a confident accent color, soft gradients, hairline borders, generous spacing, and precomputed realistic numbers. Make it fully responsive and compact on phones.",
38
+ },
39
+ {
40
+ id: "markdown-explainer",
41
+ label: "Explain a concept",
42
+ hint: "Formatted markdown answer",
43
+ emoji: "📝",
44
+ body: { mode: "markdown" },
45
+ prompt: "Explain how CSS Flexbox vs CSS Grid differ and when to use each. Answer in well-structured markdown: a short intro, an H2 for each, bullet lists of strengths, a comparison table (axis, alignment, use case), a fenced ```css code block showing a holy-grail layout with Grid, and a final 'rule of thumb' callout. Keep it practical and skimmable.",
46
+ },
47
+ {
48
+ id: "game-runner",
49
+ label: "Make a 3D game",
50
+ hint: "Playable three.js game",
51
+ emoji: "🎮",
52
+ body: { game: true },
53
+ prompt: "Build a complete, playable single-file three.js endless-runner game. The player is a glowing cube on a neon grid lane that auto-runs forward; left/right (A/D or arrows, plus on-screen touch buttons) dodges oncoming obstacles, space jumps. Spawn obstacles and floating score orbs with object pooling, speed up over time, and detect collisions. Show a DOM HUD with score, a start menu, pause (Esc/P), and a game-over screen with restart. Use ACES tone mapping, ambient + directional light, a deliberate synthwave palette, screen-shake on hit, and a fixed-timestep loop. Make it genuinely fun.",
54
+ },
55
+ {
56
+ id: "genui-order",
57
+ label: "Render this JSON",
58
+ hint: "Generative UI from data",
59
+ emoji: "🧩",
60
+ body: { mode: "generative_ui" },
61
+ prompt: "Render this order-tracking data as a beautiful, embedded generative-UI component (seamless, transparent page — it sits inline in a dark chat). Show a header with order id and an 'Out for delivery' status pill, a horizontal stepper for the shipment steps (completed vs pending), the item list with quantities and prices (use small picsum thumbnails keyed off the image field), the carrier + tracking number, and a totals summary. Cards must have their own visible surface. Here is the data:\n\n```json\n" +
62
+ ORDER_JSON +
63
+ "\n```",
64
+ },
65
+ {
66
+ id: "image-landing",
67
+ label: "Travel landing page",
68
+ hint: "Image-rich design",
69
+ emoji: "🖼️",
70
+ body: { mode: "artifact" },
71
+ prompt: "Create a striking landing page for a boutique travel company called 'Wayfare' as a single HTML artifact. Full-bleed hero with a background photo (use https://picsum.photos/seed/wayfare/1920/1080), overlaid headline, subtext and a search-trip bar; a 3-up 'Featured destinations' card grid with different seeded picsum images (seed per card: kyoto, patagonia, lisbon), price-from labels and ratings; a testimonial; and a footer CTA. Editorial typography, warm palette, rounded cards, tasteful shadows. Every image responsive with aspect-ratio and alt text. Fully responsive.",
72
+ },
73
+ {
74
+ id: "video-gallery",
75
+ label: "Video watch page",
76
+ hint: "YouTube embeds",
77
+ emoji: "▶️",
78
+ body: { mode: "artifact", allowVideoEmbeds: true },
79
+ prompt: "Build a YouTube-style watch page as a single HTML artifact. A large primary player at the top embedding " +
80
+ VIDEO_URLS[0] +
81
+ ", with a title, channel row, and action buttons; then a 'Up next' list on the side/below with the remaining videos as clickable thumbnail cards that each embed their player in a responsive 16:9 wrapper. Embed these: " +
82
+ VIDEO_URLS.slice(1).join(" , ") +
83
+ ". Every iframe must use referrerpolicy=\"strict-origin-when-cross-origin\", loading=\"lazy\", allowfullscreen, and a black rounded wrapper. Dark UI, clean spacing, fully responsive.",
84
+ },
85
+ {
86
+ id: "pricing",
87
+ label: "SaaS pricing page",
88
+ hint: "Conversion-focused design",
89
+ emoji: "💳",
90
+ body: { mode: "artifact" },
91
+ prompt: "Design a modern 3-tier SaaS pricing section as a single HTML artifact: Starter $0, Pro $24/mo (highlighted 'Most popular' with a glow/badge and scale), and Scale $79/mo. Each card: price, billing note, a feature checklist with check icons, and a CTA button. Add a monthly/annual toggle (native, CSS-only or simple), a feature-comparison table below, and an FAQ using native <details>. Premium dark aesthetic, one accent color, strong hierarchy, accessible contrast, responsive (cards stack on mobile).",
92
+ },
93
+ {
94
+ id: "signup-form",
95
+ label: "Sign-up form",
96
+ hint: "Polished form UI",
97
+ emoji: "✍️",
98
+ body: { mode: "artifact", allowForms: true },
99
+ prompt: "Create a beautiful centered sign-up card as a single HTML artifact: brand mark, heading, social sign-in buttons (Google/GitHub with inline SVG icons), an 'or' divider, then fields for full name, email, and password with a visible strength hint, a terms checkbox, and a primary 'Create account' button, plus a 'Sign in' link. Style inputs with clear labels, comfortable padding, ≥44px targets, focus rings, and helpful inline validation styling (error/success states via CSS). Glassy card on a soft gradient background, fully responsive.",
100
+ },
101
+ ];
102
+ //# sourceMappingURL=starterPrompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starterPrompts.js","sourceRoot":"","sources":["../../src/client/starterPrompts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useArtifactStream.d.ts","sourceRoot":"","sources":["../../src/client/useArtifactStream.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAG5B;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CAoPzB"}
1
+ {"version":3,"file":"useArtifactStream.d.ts","sourceRoot":"","sources":["../../src/client/useArtifactStream.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAG5B;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CAqPzB"}
@@ -68,7 +68,7 @@ export function useArtifactStream(options) {
68
68
  setMode(null);
69
69
  setError(null);
70
70
  }, [stop]);
71
- const sendMessage = React.useCallback(async (text) => {
71
+ const sendMessage = React.useCallback(async (text, bodyOverrides) => {
72
72
  const trimmed = text.trim();
73
73
  if (!trimmed || status === "streaming" || status === "submitted")
74
74
  return;
@@ -93,6 +93,7 @@ export function useArtifactStream(options) {
93
93
  headers: { "Content-Type": "application/json", ...headers },
94
94
  body: JSON.stringify({
95
95
  ...body,
96
+ ...bodyOverrides,
96
97
  messages: history.map(({ role, content }) => ({ role, content })),
97
98
  }),
98
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useArtifactStream.js","sourceRoot":"","sources":["../../src/client/useArtifactStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useArtifactStream.js","sourceRoot":"","sources":["../../src/client/useArtifactStream.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,iGACgE,CAAC;AAE/F,oDAAoD;AACpD,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,eAAe,CAQ9D,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,0BAA0B,CAgBxE,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,8BAA8B;AAC9B,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,iGACgE,CAAC;AAE/F,oDAAoD;AACpD,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,eAAe,CAS9D,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,0BAA0B,CAiBxE,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,8BAA8B;AAC9B,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC"}
@@ -10,6 +10,7 @@ export const DEFAULT_SANITIZE_OPTIONS = {
10
10
  allowSvg: true,
11
11
  allowExternalFonts: false,
12
12
  allowVideoEmbeds: false,
13
+ allowModuleImports: false,
13
14
  };
14
15
  /** Preview defaults for the iframe card. */
15
16
  export const DEFAULT_PREVIEW_OPTIONS = {
@@ -21,6 +22,7 @@ export const DEFAULT_PREVIEW_OPTIONS = {
21
22
  allowSvg: true,
22
23
  allowExternalFonts: false,
23
24
  allowVideoEmbeds: false,
25
+ allowModuleImports: false,
24
26
  sanitize: true,
25
27
  seamless: true,
26
28
  minHeight: 420,
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAC5B,4FAA4F,CAAC;AAE/F,oDAAoD;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAA8B;IACjE,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,KAAK;IACnB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,kBAAkB,EAAE,KAAK;IACzB,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAyC;IAC3E,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,KAAK;IACnB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,kBAAkB,EAAE,KAAK;IACzB,gBAAgB,EAAE,KAAK;IACvB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,EAAE;IACd,YAAY,EAAE,qBAAqB;CACpC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,gBAAgB,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,MAAM;CACV,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAC5B,4FAA4F,CAAC;AAE/F,oDAAoD;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAA8B;IACjE,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,KAAK;IACnB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,kBAAkB,EAAE,KAAK;IACzB,gBAAgB,EAAE,KAAK;IACvB,kBAAkB,EAAE,KAAK;CAC1B,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAyC;IAC3E,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,KAAK;IACnB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,kBAAkB,EAAE,KAAK;IACzB,gBAAgB,EAAE,KAAK;IACvB,kBAAkB,EAAE,KAAK;IACzB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,EAAE;IACd,YAAY,EAAE,qBAAqB;CACpC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,gBAAgB,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,MAAM;CACV,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./events.js";
2
2
  export * from "./sandbox.js";
3
3
  export * from "./defaults.js";
4
+ export * from "./trustedCdnHosts.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./events.js";
2
2
  export * from "./sandbox.js";
3
3
  export * from "./defaults.js";
4
+ export * from "./trustedCdnHosts.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Allowlist for ESM module URLs that may appear in a `<script type="importmap">`
3
+ * when `allowModuleImports` is enabled (single-file games, e.g. three.js).
4
+ *
5
+ * The sanitizer guarantees no arbitrary JavaScript can be loaded: an importmap
6
+ * only maps bare specifiers to URLs, and the inline module that consumes it can
7
+ * only `import` from those mapped URLs. So the security boundary is "which URLs
8
+ * may a mapping target." We require:
9
+ *
10
+ * 1. https only,
11
+ * 2. a known immutable ESM CDN host, and
12
+ * 3. a version-pinned path (so a mapping can't silently float to new code).
13
+ *
14
+ * This mirrors the deliberately-narrow allowlist approach already used for
15
+ * Google Fonts (`ALLOWED_FONT_LINK`) and trusted YouTube embeds.
16
+ */
17
+ /** Immutable, versioned ESM CDN hosts. */
18
+ export declare const TRUSTED_MODULE_CDN_HOSTS: readonly string[];
19
+ /**
20
+ * True if `value` is an https URL on a trusted CDN host with a version-pinned
21
+ * package path. Accepts a bare specifier check too: callers pass fully-resolved
22
+ * URLs (importmap values), not bare names.
23
+ */
24
+ export declare function isTrustedModuleUrl(value: string): boolean;
25
+ /** CSP source list (space-joined origins) for the trusted CDN hosts. */
26
+ export declare function trustedModuleCdnOrigins(): string;
27
+ //# sourceMappingURL=trustedCdnHosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustedCdnHosts.d.ts","sourceRoot":"","sources":["../../src/constants/trustedCdnHosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,0CAA0C;AAC1C,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAKrD,CAAC;AAYF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Allowlist for ESM module URLs that may appear in a `<script type="importmap">`
3
+ * when `allowModuleImports` is enabled (single-file games, e.g. three.js).
4
+ *
5
+ * The sanitizer guarantees no arbitrary JavaScript can be loaded: an importmap
6
+ * only maps bare specifiers to URLs, and the inline module that consumes it can
7
+ * only `import` from those mapped URLs. So the security boundary is "which URLs
8
+ * may a mapping target." We require:
9
+ *
10
+ * 1. https only,
11
+ * 2. a known immutable ESM CDN host, and
12
+ * 3. a version-pinned path (so a mapping can't silently float to new code).
13
+ *
14
+ * This mirrors the deliberately-narrow allowlist approach already used for
15
+ * Google Fonts (`ALLOWED_FONT_LINK`) and trusted YouTube embeds.
16
+ */
17
+ /** Immutable, versioned ESM CDN hosts. */
18
+ export const TRUSTED_MODULE_CDN_HOSTS = [
19
+ "esm.sh",
20
+ "cdn.jsdelivr.net",
21
+ "unpkg.com",
22
+ "cdn.skypack.dev",
23
+ ];
24
+ /**
25
+ * A path is "pinned" when it carries an explicit version. We accept the common
26
+ * forms used by these CDNs:
27
+ * - `…/three@0.160.0/…` (esm.sh, unpkg, skypack)
28
+ * - `…/npm/three@0.160.0/…` (jsDelivr npm)
29
+ * - `…/three@0.160.0` (bare package, no subpath)
30
+ * A leading `v` on the version (skypack's `three@v0.160.0`) is allowed.
31
+ */
32
+ const PINNED_PACKAGE = /[@/][a-z0-9._-]+@v?\d+(?:\.\d+){0,2}(?:[-+][a-z0-9.-]+)?(?:\/|$)/i;
33
+ /**
34
+ * True if `value` is an https URL on a trusted CDN host with a version-pinned
35
+ * package path. Accepts a bare specifier check too: callers pass fully-resolved
36
+ * URLs (importmap values), not bare names.
37
+ */
38
+ export function isTrustedModuleUrl(value) {
39
+ let url;
40
+ try {
41
+ url = new URL(value.trim());
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ if (url.protocol !== "https:")
47
+ return false;
48
+ const host = url.hostname.toLowerCase().replace(/^www\./, "");
49
+ if (!TRUSTED_MODULE_CDN_HOSTS.includes(host))
50
+ return false;
51
+ // The path must pin a version somewhere (package@version).
52
+ return PINNED_PACKAGE.test(url.pathname);
53
+ }
54
+ /** CSP source list (space-joined origins) for the trusted CDN hosts. */
55
+ export function trustedModuleCdnOrigins() {
56
+ return TRUSTED_MODULE_CDN_HOSTS.map((h) => `https://${h}`).join(" ");
57
+ }
58
+ //# sourceMappingURL=trustedCdnHosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustedCdnHosts.js","sourceRoot":"","sources":["../../src/constants/trustedCdnHosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,QAAQ;IACR,kBAAkB;IAClB,WAAW;IACX,iBAAiB;CAClB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,mEAAmE,CAAC;AAE3F;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,2DAA2D;IAC3D,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,uBAAuB;IACrC,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC"}
@@ -87,12 +87,12 @@ export function HtmlArtifactPreview(props) {
87
87
  const doc = buildSrcDoc(finalHtml, {
88
88
  sanitize: opts.sanitize,
89
89
  seamless: true,
90
- resizeBridge: opts.allowScripts || opts.allowVideoEmbeds,
90
+ resizeBridge: opts.allowScripts || opts.allowVideoEmbeds || opts.allowModuleImports,
91
91
  camouflage: bare,
92
92
  theme,
93
93
  sanitizeOptions: opts,
94
94
  });
95
- paint(doc, !streaming && opts.allowScripts);
95
+ paint(doc, !streaming && (opts.allowScripts || opts.allowModuleImports));
96
96
  }, [paint, theme, bare]);
97
97
  // Schedule a flush, throttled to at most once per `debounceMs` and aligned to
98
98
  // an animation frame so rapid SSE deltas don't trigger a render storm.