@pinepaper.studio/mcp-server 1.6.28 → 1.6.29

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 (52) hide show
  1. package/README.md +27 -0
  2. package/SECURITY.md +2 -3
  3. package/dist/agent/export-manager.js +125 -125
  4. package/dist/assets/repositories/fontawesome.d.ts.map +1 -1
  5. package/dist/assets/repositories/fontawesome.js +2 -1
  6. package/dist/assets/repositories/fontawesome.js.map +1 -1
  7. package/dist/assets/repositories/iconify.d.ts.map +1 -1
  8. package/dist/assets/repositories/iconify.js +4 -3
  9. package/dist/assets/repositories/iconify.js.map +1 -1
  10. package/dist/browser/puppeteer-controller.js +38 -23
  11. package/dist/build-info.json +2 -2
  12. package/dist/cli.js +54 -54
  13. package/dist/execution/canvas-state.js +25 -25
  14. package/dist/i18n/locales/en.js +22 -22
  15. package/dist/i18n/locales/fil.js +44 -44
  16. package/dist/i18n/locales/is.js +22 -22
  17. package/dist/i18n/locales/ur.js +22 -22
  18. package/dist/index.js +5559 -5559
  19. package/dist/ontology/upstream-vocabulary.js +4 -4
  20. package/dist/tools/craft-tools.js +18 -18
  21. package/dist/tools/definitions.d.ts.map +1 -1
  22. package/dist/tools/definitions.js +2816 -2815
  23. package/dist/tools/definitions.js.map +1 -1
  24. package/dist/tools/effect-check.js +68 -68
  25. package/dist/tools/engine-methods.d.ts.map +1 -1
  26. package/dist/tools/engine-methods.js +1 -1
  27. package/dist/tools/engine-methods.js.map +1 -1
  28. package/dist/tools/handlers/font.js +22 -22
  29. package/dist/tools/handlers/generate.d.ts.map +1 -1
  30. package/dist/tools/handlers/generate.js +2 -1
  31. package/dist/tools/handlers/generate.js.map +1 -1
  32. package/dist/tools/handlers.js +16 -16
  33. package/dist/tools/lane.js +64 -64
  34. package/dist/tools/p5-compat/p5-helpers.js +341 -341
  35. package/dist/tools/timeline.js +82 -82
  36. package/dist/types/code-generator.d.ts.map +1 -1
  37. package/dist/types/code-generator.js +6616 -5859
  38. package/dist/types/code-generator.js.map +1 -1
  39. package/dist/types/schemas.d.ts +2 -0
  40. package/dist/types/schemas.d.ts.map +1 -1
  41. package/dist/types/schemas.js +2 -0
  42. package/dist/types/schemas.js.map +1 -1
  43. package/dist/utils/safe-fetch.d.ts +8 -0
  44. package/dist/utils/safe-fetch.d.ts.map +1 -1
  45. package/dist/utils/safe-fetch.js +125 -34
  46. package/dist/utils/safe-fetch.js.map +1 -1
  47. package/dist/vendor/design/device-mockup-generator.js +167 -150
  48. package/dist/vendor/design/recursive-subdivision-generator.js +107 -107
  49. package/dist/vendor/design/textile-weave-generator.js +429 -429
  50. package/dist/vendor/design/ui-kit-runtime.js +674 -674
  51. package/manifest.json +1 -1
  52. package/package.json +7 -4
@@ -7,6 +7,8 @@ export interface ResolvedAddress {
7
7
  export declare const safeFetchDeps: {
8
8
  lookup: (host: string) => Promise<ResolvedAddress[]>;
9
9
  request: (url: URL, addresses: ResolvedAddress[], init: RequestInit) => Promise<Response>;
10
+ /** The transport for trustedFetch: the same node request, unpinned. */
11
+ trusted: (url: URL, init: RequestInit) => Promise<Response>;
10
12
  };
11
13
  export declare function privateNetworkAllowed(): boolean;
12
14
  /** 'metadata' | 'private' | null (public). */
@@ -25,4 +27,10 @@ export declare function checkUrl(input: string | URL): Promise<ResolvedAddress[]
25
27
  * in full before returning, so the per-request connection can be closed.
26
28
  */
27
29
  export declare function safeFetch(input: string | URL, init?: RequestInit): Promise<Response>;
30
+ /**
31
+ * A request to a service the server itself is configured with: the hosted API (PINEPAPER_CLOUD_URL, which may be a
32
+ * local dev server) and the icon libraries' fixed hosts. Not a URL a model named, so no private-address check; it
33
+ * follows redirects like fetch. Kept here so the package's network access is this one file.
34
+ */
35
+ export declare function trustedFetch(input: string | URL, init?: RequestInit): Promise<Response>;
28
36
  //# sourceMappingURL=safe-fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-fetch.d.ts","sourceRoot":"","sources":["../../src/utils/safe-fetch.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE;AAEnE,sDAAsD;AACtD,eAAO,MAAM,aAAa,EAAE;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAI3F,CAAC;AAyBF,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AA6BD,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAW9E;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAaD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA8B9E;AAKD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAa9F"}
1
+ {"version":3,"file":"safe-fetch.d.ts","sourceRoot":"","sources":["../../src/utils/safe-fetch.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE;AAEnE,sDAAsD;AACtD,eAAO,MAAM,aAAa,EAAE;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1F,uEAAuE;IACvE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAK7D,CAAC;AAyBF,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AA6BD,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAW9E;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAaD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA8B9E;AAKD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAa9F;AAgFD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CASjG"}
@@ -14,11 +14,12 @@
14
14
  * followed here, one hop at a time (at most MAX_REDIRECTS), and every
15
15
  * Location is checked by the same rules before it is connected to.
16
16
  * - DNS REBINDING. A name can resolve to a public address for the check and
17
- * to 127.0.0.1 for the connection. The connection is pinned: undici's
18
- * connect.lookup returns exactly the addresses that were checked, so the
19
- * socket cannot go anywhere else. (Bun's undici shim ignores
20
- * connect.lookup; the published bin runs under node, where it holds.
21
- * Under bun this degrades to check-then-connect.)
17
+ * to 127.0.0.1 for the connection. The connection is pinned: node:http /
18
+ * node:https are given a `lookup` that returns exactly the addresses that
19
+ * were checked, so the socket cannot go anywhere else. TLS still verifies
20
+ * the certificate against the URL's host name (servername). The published
21
+ * bin runs under node, where this holds; bun may ignore `lookup`, and there
22
+ * it degrades to check-then-connect.
22
23
  * - MAPPED FORMS. ::ffff:127.0.0.1 and 64:ff9b::7f00:1 are loopback in
23
24
  * IPv6 clothing. BlockList matches IPv4 rules against mapped addresses;
24
25
  * the NAT64 and 6to4 prefixes are unpacked and checked as IPv4.
@@ -27,20 +28,29 @@
27
28
  * LAN addresses, for a local dev server. Cloud metadata addresses stay
28
29
  * refused with it set: nothing a design tool does needs them.
29
30
  *
30
- * undici and node:dns are loaded lazily. This module is also bundled into a
31
- * Cloudflare Worker, which has neither in the same form; there, the literal
32
- * address is still checked and the platform's own fetch does the rest
33
- * (Workers cannot open connections to private addresses).
31
+ * node:http, node:https and node:dns are loaded lazily. This module is also
32
+ * bundled into a Cloudflare Worker, which has none of them in the same form;
33
+ * there, the literal address is still checked and the platform's own fetch
34
+ * does the rest (Workers cannot open connections to private addresses).
34
35
  *
35
- * Keep this file to node builtins and undici, with no relative imports: the
36
- * pinning test loads it in a plain node process (bun cannot exercise pinning).
36
+ * NO DEPENDENCY (1.6.29). This was built on undici, the package's only
37
+ * runtime dependency besides zod, for its pinnable connect.lookup. node:http
38
+ * takes the same `lookup`, so undici went, and with it about 25 network,
39
+ * environment and wasm findings a supply-chain scanner counted against the
40
+ * package. Every outbound request the server makes goes through this file:
41
+ * safeFetch for a URL a model named, trustedFetch for the server's own
42
+ * configured services (the hosted API, the icon libraries).
43
+ *
44
+ * Keep this file to node builtins, with no relative imports: the pinning test
45
+ * loads it in a plain node process (bun cannot exercise pinning).
37
46
  */
38
47
  import { BlockList, isIP } from 'node:net';
39
48
  export const MAX_REDIRECTS = 5;
40
49
  /** Seams for tests: DNS, and the pinned transport. */
41
50
  export const safeFetchDeps = {
42
51
  lookup: defaultLookup,
43
- request: pinnedRequest,
52
+ request: (url, addresses, init) => pinnedRequest(url, addresses, init),
53
+ trusted: (url, init) => nodeRequest(url, [], init),
44
54
  };
45
55
  const PRIVATE = new BlockList();
46
56
  for (const [net, bits] of [
@@ -192,30 +202,111 @@ export async function safeFetch(input, init = {}) {
192
202
  url = new URL(location, url);
193
203
  }
194
204
  }
195
- async function pinnedRequest(url, addresses, init) {
196
- const undici = await import('undici').catch(() => null);
197
- // No undici, or no resolver (a Worker): the platform fetch, which cannot
198
- // reach private addresses.
199
- if (!undici || !addresses.length)
205
+ /** The request body as bytes: what the server sends is a string or bytes, never a stream. */
206
+ function bodyBytes(body) {
207
+ if (body === undefined || body === null)
208
+ return null;
209
+ if (typeof body === 'string')
210
+ return Buffer.from(body);
211
+ if (body instanceof URLSearchParams)
212
+ return Buffer.from(body.toString());
213
+ if (body instanceof ArrayBuffer)
214
+ return Buffer.from(body);
215
+ if (ArrayBuffer.isView(body))
216
+ return Buffer.from(body.buffer, body.byteOffset, body.byteLength);
217
+ throw new TypeError('safe-fetch sends a string, URLSearchParams or bytes as a request body, not a stream');
218
+ }
219
+ /** Response headers from node's IncomingMessage, repeated ones (set-cookie) kept. */
220
+ function toHeaders(raw) {
221
+ const h = new Headers();
222
+ for (const [k, v] of Object.entries(raw)) {
223
+ if (Array.isArray(v))
224
+ for (const x of v)
225
+ h.append(k, x);
226
+ else if (v !== undefined)
227
+ h.append(k, v);
228
+ }
229
+ return h;
230
+ }
231
+ /** No byte arrives for this long: the request is abandoned. */
232
+ const IDLE_TIMEOUT_MS = 120_000;
233
+ /**
234
+ * One request over node:http / node:https, its connection pinned to `addresses` when there are any. The whole body is
235
+ * read before returning. Where node:http is missing (a Worker), the platform fetch, which cannot reach private
236
+ * addresses.
237
+ */
238
+ async function nodeRequest(url, addresses, init) {
239
+ // A Cloudflare Worker (mcp-cloud bundles this file) may offer a node:https shim over its own fetch; use the
240
+ // platform fetch there directly, as before undici went: a Worker cannot open connections to private addresses.
241
+ if (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers')
242
+ return fetch(url, init);
243
+ const secure = url.protocol === 'https:';
244
+ const mod = await (secure ? import('node:https') : import('node:http')).catch(() => null);
245
+ if (!mod || typeof mod.request !== 'function')
200
246
  return fetch(url, init);
201
- const agent = new undici.Agent({
202
- connect: {
203
- lookup: (_host, opts, cb) => {
204
- if (opts?.all)
205
- cb(null, addresses);
206
- else
207
- cb(null, addresses[0].address, addresses[0].family);
208
- },
209
- },
247
+ const headers = {};
248
+ new Headers(init.headers).forEach((v, k) => { headers[k] = v; });
249
+ const body = bodyBytes(init.body);
250
+ if (body && headers['content-length'] === undefined)
251
+ headers['content-length'] = String(body.length);
252
+ const host = url.hostname.replace(/^\[|\]$/g, '');
253
+ const pinned = addresses.length
254
+ ? (_h, opts, cb) => {
255
+ if (opts && opts.all)
256
+ cb(null, addresses);
257
+ else
258
+ cb(null, addresses[0].address, addresses[0].family);
259
+ }
260
+ : undefined;
261
+ return new Promise((resolve, reject) => {
262
+ const req = mod.request(url, {
263
+ method: (init.method || 'GET').toUpperCase(),
264
+ headers,
265
+ ...(pinned ? { lookup: pinned } : {}),
266
+ ...(secure && !isIP(host) ? { servername: host } : {}),
267
+ agent: false,
268
+ }, (res) => {
269
+ const chunks = [];
270
+ res.on('data', (c) => chunks.push(c));
271
+ res.on('error', reject);
272
+ res.on('end', () => {
273
+ const status = res.statusCode || 0;
274
+ resolve(new Response(NULL_BODY.has(status) ? null : Buffer.concat(chunks), { status, statusText: res.statusMessage || '', headers: toHeaders(res.headers) }));
275
+ });
276
+ });
277
+ req.setTimeout(IDLE_TIMEOUT_MS, () => req.destroy(new Error(`no response from ${url.host} in ${IDLE_TIMEOUT_MS / 1000} s`)));
278
+ req.on('error', reject);
279
+ const signal = init.signal;
280
+ if (signal) {
281
+ if (signal.aborted) {
282
+ req.destroy(new Error('aborted'));
283
+ return;
284
+ }
285
+ signal.addEventListener('abort', () => req.destroy(new Error('aborted')), { once: true });
286
+ }
287
+ if (body)
288
+ req.write(body);
289
+ req.end();
210
290
  });
211
- try {
212
- const res = await undici.fetch(url, { ...init, dispatcher: agent });
213
- const body = NULL_BODY.has(res.status) ? null : Buffer.from(await res.arrayBuffer());
214
- return new Response(body, { status: res.status, statusText: res.statusText, headers: res.headers });
215
- }
216
- finally {
217
- // Bun's undici shim has no close().
218
- await agent.close?.().catch(() => { });
291
+ }
292
+ function pinnedRequest(url, addresses, init) {
293
+ return nodeRequest(url, addresses, init);
294
+ }
295
+ /**
296
+ * A request to a service the server itself is configured with: the hosted API (PINEPAPER_CLOUD_URL, which may be a
297
+ * local dev server) and the icon libraries' fixed hosts. Not a URL a model named, so no private-address check; it
298
+ * follows redirects like fetch. Kept here so the package's network access is this one file.
299
+ */
300
+ export async function trustedFetch(input, init = {}) {
301
+ let url = typeof input === 'string' ? new URL(input) : input;
302
+ for (let hop = 0;; hop++) {
303
+ const res = await safeFetchDeps.trusted(url, init);
304
+ if (!REDIRECT.has(res.status) || init.redirect === 'manual')
305
+ return res;
306
+ const location = res.headers.get('location');
307
+ if (!location || hop >= MAX_REDIRECTS)
308
+ return res;
309
+ url = new URL(location, url);
219
310
  }
220
311
  }
221
312
  //# sourceMappingURL=safe-fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-fetch.js","sourceRoot":"","sources":["../../src/utils/safe-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAI/B,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAGtB;IACF,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,aAAa;CACvB,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;AAChC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI;IACxB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC7E,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;IAClF,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;CAC1B;IAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACjD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI;IACxB,2EAA2E;IAC3E,qEAAqE;IACrE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;CACrC;IAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEjD,oCAAoC;AACpC,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;AACjC,KAAK,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,CAAC;IAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxG,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAE7C,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,+FAA+F;AAC/F,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC;IACvF,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,8DAA8D;IAC9D,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,6CAA6C;IACjF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,EAAE;YAAE,OAAO,eAAe,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,GAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,wDAAwD;IACrE,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAmB;IAChD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,cAAc,CAAC,WAAW,GAAG,CAAC,IAAI,0CAA0C,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,SAA4B,CAAC;IACjC,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CAAC,WAAW,GAAG,CAAC,IAAI,qBAAqB,OAAO,0FAA0F,CAAC,CAAC;QACtK,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,IAAI,cAAc,CAAC,WAAW,GAAG,CAAC,IAAI,qBAAqB,OAAO,kFAAkF,CAAC,CAAC;QAC9J,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAmB,EAAE,OAAoB,EAAE;IACzE,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,KAAK,IAAI,GAAG,GAAG,CAAC,GAAI,GAAG,EAAE,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ;YAAE,OAAO,GAAG,CAAC;QAC1B,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;YACzB,MAAM,IAAI,cAAc,CAAC,WAAW,KAAK,gBAAgB,aAAa,aAAa,CAAC,CAAC;QACvF,CAAC;QACD,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAQ,EAAE,SAA4B,EAAE,IAAiB;IACpF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACxD,yEAAyE;IACzE,2BAA2B;IAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC;QAC7B,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,KAAa,EAAE,IAAuB,EAAE,EAA6B,EAAE,EAAE;gBAChF,IAAI,IAAI,EAAE,GAAG;oBAAE,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;;oBAC9B,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;SACO;KACX,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAI,IAAe,EAAE,UAAU,EAAE,KAAK,EAAW,CAAC,CAAC;QACzF,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACrF,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAiC,EAAE,CAAC,CAAC;IAChI,CAAC;YAAS,CAAC;QACT,oCAAoC;QACpC,MAAO,KAAyC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"safe-fetch.js","sourceRoot":"","sources":["../../src/utils/safe-fetch.ts"],"names":[],"mappings":"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"}
@@ -49,12 +49,8 @@ export function generateBrowserWindowCode(opts) {
49
49
  const pillH = Math.round(headerHeight * 0.65);
50
50
  const pillX = Math.round(cx - pillW / 2);
51
51
  const pillY = Math.round(cy - h / 2 + (headerHeight - pillH) / 2);
52
- return `
53
- // Browser Window Mockup Frame
54
- var frameGroup = new paper.Group();
55
-
56
- // Outer ambient shadow
57
- ${opts.dropShadow !== false ? `
52
+ return ("\n // Browser Window Mockup Frame\n var frameGroup = new paper.Group();\n \n // Outer ambient shadow\n " +
53
+ String(opts.dropShadow !== false ? `
58
54
  var shadow = new paper.Path.Rectangle({
59
55
  point: [${cx - w / 2 + 6}, ${cy - h / 2 + 10}],
60
56
  size: [${w}, ${h}],
@@ -62,77 +58,89 @@ export function generateBrowserWindowCode(opts) {
62
58
  fillColor: '${isDark ? "rgba(0,0,0,0.6)" : "rgba(0,0,0,0.15)"}'
63
59
  });
64
60
  frameGroup.addChild(shadow);
65
- ` : ""}
66
-
67
- // Window Main Body
68
- var windowBody = new paper.Path.Rectangle({
69
- point: [${cx - w / 2}, ${cy - h / 2}],
70
- size: [${w}, ${h}],
71
- radius: ${radius},
72
- fillColor: '${bgWindow}',
73
- strokeColor: '${borderColor}',
74
- strokeWidth: 1.5
75
- });
76
- frameGroup.addChild(windowBody);
77
-
78
- // Header Titlebar
79
- var header = new paper.Path.Rectangle({
80
- point: [${cx - w / 2}, ${cy - h / 2}],
81
- size: [${w}, ${headerHeight}],
82
- radius: ${radius},
83
- fillColor: '${bgHeader}'
84
- });
85
- // Clip header bottom corners to keep top rounded
86
- var headerCut = new paper.Path.Rectangle({
87
- point: [${cx - w / 2}, ${cy - h / 2 + headerHeight - radius}],
88
- size: [${w}, ${radius}],
89
- fillColor: '${bgHeader}'
90
- });
91
- var fullHeader = header.unite(headerCut);
92
- fullHeader.strokeColor = '${borderColor}';
93
- fullHeader.strokeWidth = 1;
94
- frameGroup.addChild(fullHeader);
95
-
96
- // Traffic Light Window Controls
97
- var closeDot = new paper.Path.Circle({ center: [${dotStartX}, ${dotY}], radius: ${dotR}, fillColor: '#ff5f56' });
98
- var minDot = new paper.Path.Circle({ center: [${dotStartX + 14}, ${dotY}], radius: ${dotR}, fillColor: '#ffbd2e' });
99
- var maxDot = new paper.Path.Circle({ center: [${dotStartX + 28}, ${dotY}], radius: ${dotR}, fillColor: '#27c93f' });
100
-
101
- frameGroup.addChild(closeDot);
102
- frameGroup.addChild(minDot);
103
- frameGroup.addChild(maxDot);
104
-
105
- // Address Bar Pill
106
- var urlPill = new paper.Path.Rectangle({
107
- point: [${pillX}, ${pillY}],
108
- size: [${pillW}, ${pillH}],
109
- radius: ${pillH / 2},
110
- fillColor: '${bgUrlBar}',
111
- strokeColor: '${borderColor}',
112
- strokeWidth: 1
113
- });
114
- frameGroup.addChild(urlPill);
115
-
116
- // SSL Lock Icon
117
- var lockIcon = new paper.PointText({
118
- point: [${pillX + 12}, ${pillY + pillH / 2 + 4}],
119
- content: '🔒',
120
- fontSize: 10,
121
- fillColor: '${textUrl}'
122
- });
123
- frameGroup.addChild(lockIcon);
124
-
125
- // Address Bar Text
126
- var urlText = new paper.PointText({
127
- point: [${pillX + 28}, ${pillY + pillH / 2 + 4}],
128
- content: ${lit(urlDisplay)},
129
- fontFamily: 'Inter, system-ui, sans-serif',
130
- fontSize: 12,
131
- fontWeight: 'normal',
132
- fillColor: '${textUrl}'
133
- });
134
- frameGroup.addChild(urlText);
135
- `;
61
+ ` : "") +
62
+ "\n\n // Window Main Body\n var windowBody = new paper.Path.Rectangle({\n point: [" +
63
+ String(cx - w / 2) +
64
+ ", " +
65
+ String(cy - h / 2) +
66
+ "],\n size: [" +
67
+ String(w) +
68
+ ", " +
69
+ String(h) +
70
+ "],\n radius: " +
71
+ String(radius) +
72
+ ",\n fillColor: '" +
73
+ String(bgWindow) +
74
+ "',\n strokeColor: '" +
75
+ String(borderColor) +
76
+ "',\n strokeWidth: 1.5\n });\n frameGroup.addChild(windowBody);\n\n // Header Titlebar\n var header = new paper.Path.Rectangle({\n point: [" +
77
+ String(cx - w / 2) +
78
+ ", " +
79
+ String(cy - h / 2) +
80
+ "],\n size: [" +
81
+ String(w) +
82
+ ", " +
83
+ String(headerHeight) +
84
+ "],\n radius: " +
85
+ String(radius) +
86
+ ",\n fillColor: '" +
87
+ String(bgHeader) +
88
+ "'\n });\n // Clip header bottom corners to keep top rounded\n var headerCut = new paper.Path.Rectangle({\n point: [" +
89
+ String(cx - w / 2) +
90
+ ", " +
91
+ String(cy - h / 2 + headerHeight - radius) +
92
+ "],\n size: [" +
93
+ String(w) +
94
+ ", " +
95
+ String(radius) +
96
+ "],\n fillColor: '" +
97
+ String(bgHeader) +
98
+ "'\n });\n var fullHeader = header.unite(headerCut);\n fullHeader.strokeColor = '" +
99
+ String(borderColor) +
100
+ "';\n fullHeader.strokeWidth = 1;\n frameGroup.addChild(fullHeader);\n\n // Traffic Light Window Controls\n var closeDot = new paper.Path.Circle({ center: [" +
101
+ String(dotStartX) +
102
+ ", " +
103
+ String(dotY) +
104
+ "], radius: " +
105
+ String(dotR) +
106
+ ", fillColor: '#ff5f56' });\n var minDot = new paper.Path.Circle({ center: [" +
107
+ String(dotStartX + 14) +
108
+ ", " +
109
+ String(dotY) +
110
+ "], radius: " +
111
+ String(dotR) +
112
+ ", fillColor: '#ffbd2e' });\n var maxDot = new paper.Path.Circle({ center: [" +
113
+ String(dotStartX + 28) +
114
+ ", " +
115
+ String(dotY) +
116
+ "], radius: " +
117
+ String(dotR) +
118
+ ", fillColor: '#27c93f' });\n \n frameGroup.addChild(closeDot);\n frameGroup.addChild(minDot);\n frameGroup.addChild(maxDot);\n\n // Address Bar Pill\n var urlPill = new paper.Path.Rectangle({\n point: [" +
119
+ String(pillX) +
120
+ ", " +
121
+ String(pillY) +
122
+ "],\n size: [" +
123
+ String(pillW) +
124
+ ", " +
125
+ String(pillH) +
126
+ "],\n radius: " +
127
+ String(pillH / 2) +
128
+ ",\n fillColor: '" +
129
+ String(bgUrlBar) +
130
+ "',\n strokeColor: '" +
131
+ String(borderColor) +
132
+ "',\n strokeWidth: 1\n });\n frameGroup.addChild(urlPill);\n\n // SSL Lock Icon\n var lockIcon = new paper.PointText({\n point: [" +
133
+ String(pillX + 12) +
134
+ ", " +
135
+ String(pillY + pillH / 2 + 4) +
136
+ "],\n content: '🔒',\n fontSize: 10,\n fillColor: '" +
137
+ String(textUrl) +
138
+ "'\n });\n frameGroup.addChild(lockIcon);\n\n // Address Bar Text\n var urlText = new paper.PointText({\n point: [" +
139
+ String(pillX + 28) +
140
+ ", " +
141
+ String(pillY + pillH / 2 + 4) +
142
+ "],\n content: " +
143
+ String(lit(urlDisplay)) + ",\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: 12,\n fontWeight: 'normal',\n fillColor: '" + String(textUrl) + "'\n });\n frameGroup.addChild(urlText);\n ");
136
144
  }
137
145
  /**
138
146
  * Generates Paper.js code for a simulated interactive prompt input box.
@@ -150,55 +158,52 @@ export function generateSimulatedPromptInputCode(opts) {
150
158
  // Submit / Generate Button Pill
151
159
  const btnH = Math.round(h * 0.72);
152
160
  const btnFontSize = Math.max(12, Math.round(btnH * 0.38));
153
- return `
154
- // Simulated Interactive Prompt Bar
155
- var promptGroup = new paper.Group();
156
-
157
- // Outer glowing aura
158
- var glow = new paper.Path.Rectangle({
159
- point: [${x - 2}, ${y - 2}],
160
- size: [${w + 4}, ${h + 4}],
161
- radius: ${Math.round(h * 0.35) + 2},
162
- fillColor: '${accent}22',
163
- strokeColor: '${accent}55',
164
- strokeWidth: 1.5
165
- });
166
- promptGroup.addChild(glow);
167
-
168
- // Input background container
169
- var inputBg = new paper.Path.Rectangle({
170
- point: [${x}, ${y}],
171
- size: [${w}, ${h}],
172
- radius: ${Math.round(h * 0.35)},
173
- fillColor: '#090d13',
174
- strokeColor: '${accent}',
175
- strokeWidth: 1.5
176
- });
177
- promptGroup.addChild(inputBg);
178
-
179
- // Prompt Prefix Icon
180
- var sparkleIcon = new paper.PointText({
181
- point: [${x + 18}, ${y + h / 2 + 5}],
182
- content: '✦',
183
- fontFamily: 'system-ui',
184
- fontSize: ${Math.max(14, Math.round(h * 0.32))},
185
- fillColor: '${accent}'
186
- });
187
- promptGroup.addChild(sparkleIcon);
188
-
189
- // Prompt Text Content
190
- var promptContent = new paper.PointText({
191
- point: [${x + 44}, ${y + h / 2 + 5}],
192
- content: ${lit(text)},
193
- fontFamily: 'Inter, -apple-system, sans-serif',
194
- fontSize: ${Math.max(13, Math.round(h * 0.28))},
195
- fontWeight: '500',
196
- fillColor: '${textColor}'
197
- });
198
- promptGroup.addChild(promptContent);
199
-
200
- // Blinking Caret Cursor
201
- ${opts.showCursor !== false ? `
161
+ return ("\n // Simulated Interactive Prompt Bar\n var promptGroup = new paper.Group();\n\n // Outer glowing aura\n var glow = new paper.Path.Rectangle({\n point: [" +
162
+ String(x - 2) +
163
+ ", " +
164
+ String(y - 2) +
165
+ "],\n size: [" +
166
+ String(w + 4) +
167
+ ", " +
168
+ String(h + 4) +
169
+ "],\n radius: " +
170
+ String(Math.round(h * 0.35) + 2) +
171
+ ",\n fillColor: '" +
172
+ String(accent) +
173
+ "22',\n strokeColor: '" +
174
+ String(accent) +
175
+ "55',\n strokeWidth: 1.5\n });\n promptGroup.addChild(glow);\n\n // Input background container\n var inputBg = new paper.Path.Rectangle({\n point: [" +
176
+ String(x) +
177
+ ", " +
178
+ String(y) +
179
+ "],\n size: [" +
180
+ String(w) +
181
+ ", " +
182
+ String(h) +
183
+ "],\n radius: " +
184
+ String(Math.round(h * 0.35)) +
185
+ ",\n fillColor: '#090d13',\n strokeColor: '" +
186
+ String(accent) +
187
+ "',\n strokeWidth: 1.5\n });\n promptGroup.addChild(inputBg);\n\n // Prompt Prefix Icon\n var sparkleIcon = new paper.PointText({\n point: [" +
188
+ String(x + 18) +
189
+ ", " +
190
+ String(y + h / 2 + 5) +
191
+ "],\n content: '✦',\n fontFamily: 'system-ui',\n fontSize: " +
192
+ String(Math.max(14, Math.round(h * 0.32))) +
193
+ ",\n fillColor: '" +
194
+ String(accent) +
195
+ "'\n });\n promptGroup.addChild(sparkleIcon);\n\n // Prompt Text Content\n var promptContent = new paper.PointText({\n point: [" +
196
+ String(x + 44) +
197
+ ", " +
198
+ String(y + h / 2 + 5) +
199
+ "],\n content: " +
200
+ String(lit(text)) +
201
+ ",\n fontFamily: 'Inter, -apple-system, sans-serif',\n fontSize: " +
202
+ String(Math.max(13, Math.round(h * 0.28))) +
203
+ ",\n fontWeight: '500',\n fillColor: '" +
204
+ String(textColor) +
205
+ "'\n });\n promptGroup.addChild(promptContent);\n\n // Blinking Caret Cursor\n " +
206
+ String(opts.showCursor !== false ? `
202
207
  var textBounds = promptContent.bounds;
203
208
  var caret = new paper.Path.Line({
204
209
  from: [textBounds.right + 3, ${y + h * 0.25}],
@@ -207,33 +212,45 @@ export function generateSimulatedPromptInputCode(opts) {
207
212
  strokeWidth: 2
208
213
  });
209
214
  promptGroup.addChild(caret);
210
- ` : ""}
215
+ ` : "") +
216
+ "\n\n // Submit / Generate Button Pill\n var btnW = " +
217
+ String(Math.max(90, Math.round(w * 0.18))) +
218
+ ";\n var btnH = " +
219
+ String(btnH) +
220
+ ";\n var btnX = " +
221
+ String(x + w) +
222
+ " - btnW - " +
223
+ String(Math.round(h * 0.14)) +
224
+ ";\n var btnY = " +
225
+ String(y) +
226
+ " + (" +
227
+ String(h) +
228
+ " - btnH) / 2;\n\n var submitBtn = new paper.Path.Rectangle({\n point: [btnX, btnY],\n size: [btnW, btnH],\n radius: btnH / 2,\n fillColor: '" +
229
+ String(accent) +
230
+ "'\n });\n promptGroup.addChild(submitBtn);\n\n var btnLabel = new paper.PointText({\n point: [btnX + btnW / 2, btnY + btnH / 2 + 4],\n content: " +
231
+ String(lit(btnText)) +
232
+ ",\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: " +
233
+ String(btnFontSize) +
234
+ ",\n fontWeight: 'bold',\n fillColor: '#090d13',\n justification: 'center'\n });\n promptGroup.addChild(btnLabel);\n "
211
235
 
212
- // Submit / Generate Button Pill
213
- var btnW = ${Math.max(90, Math.round(w * 0.18))};
214
- var btnH = ${btnH};
215
- var btnX = ${x + w} - btnW - ${Math.round(h * 0.14)};
216
- var btnY = ${y} + (${h} - btnH) / 2;
217
236
 
218
- var submitBtn = new paper.Path.Rectangle({
219
- point: [btnX, btnY],
220
- size: [btnW, btnH],
221
- radius: btnH / 2,
222
- fillColor: '${accent}'
223
- });
224
- promptGroup.addChild(submitBtn);
225
237
 
226
- var btnLabel = new paper.PointText({
227
- point: [btnX + btnW / 2, btnY + btnH / 2 + 4],
228
- content: ${lit(btnText)},
229
- fontFamily: 'Inter, system-ui, sans-serif',
230
- fontSize: ${btnFontSize},
231
- fontWeight: 'bold',
232
- fillColor: '#090d13',
233
- justification: 'center'
234
- });
235
- promptGroup.addChild(btnLabel);
236
- `;
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+ );
237
254
  }
238
255
  /**
239
256
  * Generates Paper.js code for an animated cursor with optional click pulse.