@tscircuit/fake-snippets 0.0.107 → 0.0.109

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 (80) hide show
  1. package/api/generated-index.js +82 -22
  2. package/biome.json +7 -1
  3. package/bun-tests/fake-snippets-api/routes/package_builds/get.test.ts +0 -15
  4. package/bun-tests/fake-snippets-api/routes/package_builds/list.test.ts +0 -12
  5. package/bun.lock +62 -19
  6. package/dist/bundle.js +25 -24
  7. package/dist/index.d.ts +26 -15
  8. package/dist/index.js +19 -18
  9. package/dist/schema.d.ts +32 -24
  10. package/dist/schema.js +7 -6
  11. package/fake-snippets-api/lib/db/db-client.ts +10 -1
  12. package/fake-snippets-api/lib/db/schema.ts +4 -3
  13. package/fake-snippets-api/lib/db/seed.ts +6 -9
  14. package/fake-snippets-api/lib/public-mapping/public-map-package-build.ts +0 -3
  15. package/fake-snippets-api/lib/public-mapping/public-map-package-release.ts +3 -0
  16. package/package.json +7 -8
  17. package/src/App.tsx +12 -11
  18. package/src/components/DownloadButtonAndMenu.tsx +133 -35
  19. package/src/components/FileSidebar.tsx +45 -193
  20. package/src/components/Footer.tsx +0 -1
  21. package/src/components/HeaderLogin.tsx +1 -1
  22. package/src/components/HiddenFilesDropdown.tsx +0 -2
  23. package/src/components/PackageBreadcrumb.tsx +1 -1
  24. package/src/components/PackageBuildsPage/PackageBuildDetailsPage.tsx +0 -2
  25. package/src/components/PackageBuildsPage/build-preview-content.tsx +34 -5
  26. package/src/components/PackageCard.tsx +0 -1
  27. package/src/components/ViewPackagePage/components/ShikiCodeViewer.tsx +20 -11
  28. package/src/components/ViewPackagePage/components/important-files-view.tsx +75 -59
  29. package/src/components/ViewPackagePage/components/main-content-header.tsx +4 -4
  30. package/src/components/ViewPackagePage/components/main-content-view-selector.tsx +0 -1
  31. package/src/components/ViewPackagePage/components/mobile-sidebar.tsx +1 -2
  32. package/src/components/ViewPackagePage/components/package-header.tsx +14 -17
  33. package/src/components/ViewPackagePage/components/preview-image-squares.tsx +0 -1
  34. package/src/components/ViewPackagePage/components/repo-page-content.tsx +21 -20
  35. package/src/components/ViewPackagePage/components/sidebar-about-section.tsx +18 -2
  36. package/src/components/ViewPackagePage/components/sidebar-releases-section.tsx +1 -1
  37. package/src/components/ViewPackagePage/components/sidebar.tsx +0 -2
  38. package/src/components/ViewPackagePage/components/tab-views/files-view.tsx +18 -17
  39. package/src/components/ViewPackagePage/components/theme-toggle.tsx +0 -2
  40. package/src/components/ViewPackagePage/hooks/use-toast.tsx +0 -1
  41. package/src/components/package-port/CodeAndPreview.tsx +23 -40
  42. package/src/components/package-port/CodeEditor.tsx +24 -1
  43. package/src/components/package-port/CodeEditorHeader.tsx +5 -2
  44. package/src/components/preview/BuildsList.tsx +20 -9
  45. package/src/components/preview/ConnectedPackagesList.tsx +73 -60
  46. package/src/components/preview/ConnectedRepoOverview.tsx +160 -154
  47. package/src/components/preview/PackageReleasesDashboard.tsx +41 -30
  48. package/src/components/preview/index.tsx +16 -153
  49. package/src/hooks/use-current-package-id.ts +5 -30
  50. package/src/hooks/use-current-package-info.ts +29 -5
  51. package/src/hooks/use-global-store.ts +1 -1
  52. package/src/hooks/useFileManagement.ts +153 -34
  53. package/src/hooks/useOptimizedPackageFilesLoader.ts +149 -0
  54. package/src/hooks/useUpdatePackageFilesMutation.ts +2 -0
  55. package/src/index.css +24 -0
  56. package/src/lib/download-fns/download-circuit-png.ts +11 -3
  57. package/src/lib/download-fns/download-gltf-from-circuit-json.ts +44 -0
  58. package/src/lib/utils/isComponentExported.ts +9 -0
  59. package/src/lib/utils/transformFilesToTreeData.tsx +195 -0
  60. package/src/pages/404.tsx +3 -5
  61. package/src/pages/authorize.tsx +0 -2
  62. package/src/pages/landing.tsx +0 -1
  63. package/src/pages/preview-release.tsx +279 -0
  64. package/src/pages/release-builds.tsx +0 -8
  65. package/src/pages/release-detail.tsx +17 -15
  66. package/src/pages/releases.tsx +5 -1
  67. package/src/pages/view-package.tsx +14 -13
  68. package/src/components/Footer2.tsx +0 -100
  69. package/src/components/ShippingInformationForm.tsx +0 -423
  70. package/src/components/StaticViewSnippetHeader.tsx +0 -70
  71. package/src/components/ViewPackagePage/components/file-explorer.tsx +0 -67
  72. package/src/components/ViewPackagePage/components/readme-view.tsx +0 -58
  73. package/src/components/ViewPackagePage/components/repo-header-button.tsx +0 -36
  74. package/src/components/ViewPackagePage/components/repo-header.tsx +0 -4
  75. package/src/components/ViewPackagePage/components/sidebar-contributors-section.tsx +0 -31
  76. package/src/components/ViewSnippetHeader.tsx +0 -181
  77. package/src/components/ui/input-otp.tsx +0 -69
  78. package/src/hooks/use-snippets-base-api-url.ts +0 -3
  79. package/src/pages/preview-build.tsx +0 -380
  80. package/src/pages/settings.tsx +0 -25
@@ -89,7 +89,10 @@ function getHtmlWithModifiedSeoTags({
89
89
  `
90
90
 
91
91
  // First replace SEO tags
92
- let modifiedHtml = `${htmlContent.substring(0, seoStartIndex)}${seoTags}${htmlContent.substring(seoEndIndex)}`
92
+ let modifiedHtml = `${htmlContent.substring(
93
+ 0,
94
+ seoStartIndex,
95
+ )}${seoTags}${htmlContent.substring(seoEndIndex)}`
93
96
 
94
97
  // Then handle SSR data injection
95
98
  if (ssrPackageData) {
@@ -176,21 +179,25 @@ async function handleDatasheetPage(req, res) {
176
179
 
177
180
  async function handleCustomPackageHtml(req, res) {
178
181
  // Get the author and package name
179
- const [_, author, unscopedPackageName] = req.url.split("?")[0].split("/")
182
+ const [_, author, unscopedPackageName, other] = req.url
183
+ .split("?")[0]
184
+ .split("/")
185
+ if (other == "releases" || other == "release") {
186
+ throw new Error("Release route")
187
+ }
180
188
  if (!author || !unscopedPackageName) {
181
189
  throw new Error("Invalid author/package URL")
182
190
  }
183
191
  if (author === "datasheets") {
184
192
  throw new Error("Datasheet route")
185
193
  }
186
- if (author === "build" || unscopedPackageName === "view-connected-repo") {
187
- throw new Error("Build route - not a package")
188
- }
189
194
 
190
195
  const packageNotFoundHtml = getHtmlWithModifiedSeoTags({
191
196
  title: "Package Not Found - tscircuit",
192
197
  description: `The package ${author}/${unscopedPackageName} could not be found.`,
193
- canonicalUrl: `${BASE_URL}/${he.encode(author)}/${he.encode(unscopedPackageName)}`,
198
+ canonicalUrl: `${BASE_URL}/${he.encode(author)}/${he.encode(
199
+ unscopedPackageName,
200
+ )}`,
194
201
  })
195
202
  const packageDetails = await ky
196
203
  .get(`${REGISTRY_URL}/packages/get`, {
@@ -249,19 +256,29 @@ async function handleCustomPackageHtml(req, res) {
249
256
  }
250
257
 
251
258
  const description = he.encode(
252
- `${packageInfo.description || packageInfo.ai_description || "A tscircuit component created by " + author} ${packageInfo.ai_usage_instructions ?? ""}`,
259
+ `${
260
+ packageInfo.description ||
261
+ packageInfo.ai_description ||
262
+ "A tscircuit component created by " + author
263
+ } ${packageInfo.ai_usage_instructions ?? ""}`,
253
264
  )
254
265
  const title = he.encode(`${packageInfo.name} - tscircuit`)
255
266
 
256
267
  const allowedViews = ["schematic", "pcb", "assembly", "3d"]
257
268
  const defaultView = packageInfo.default_view || "pcb"
258
269
  const thumbnailView = allowedViews.includes(defaultView) ? defaultView : "pcb"
259
- const imageUrl = `${REGISTRY_URL}/packages/images/${he.encode(author)}/${he.encode(unscopedPackageName)}/${thumbnailView}.png?fs_sha=${packageInfo.latest_package_release_fs_sha}`
270
+ const imageUrl = `${REGISTRY_URL}/packages/images/${he.encode(
271
+ author,
272
+ )}/${he.encode(unscopedPackageName)}/${thumbnailView}.png?fs_sha=${
273
+ packageInfo.latest_package_release_fs_sha
274
+ }`
260
275
 
261
276
  const html = getHtmlWithModifiedSeoTags({
262
277
  title,
263
278
  description,
264
- canonicalUrl: `${BASE_URL}/${he.encode(author)}/${he.encode(unscopedPackageName)}`,
279
+ canonicalUrl: `${BASE_URL}/${he.encode(author)}/${he.encode(
280
+ unscopedPackageName,
281
+ )}`,
265
282
  imageUrl,
266
283
  ssrPackageData: { package: packageInfo, packageRelease, packageFiles },
267
284
  })
@@ -272,7 +289,6 @@ async function handleCustomPackageHtml(req, res) {
272
289
  res.setHeader("Vary", "Accept-Encoding")
273
290
  res.status(200).send(html)
274
291
  }
275
-
276
292
  async function handleCustomPage(req, res) {
277
293
  const [_, page] = req.url.split("?")[0].split("/")
278
294
 
@@ -298,6 +314,57 @@ async function handleCustomPage(req, res) {
298
314
  res.status(200).send(html)
299
315
  }
300
316
 
317
+ async function handleReleasePreview(req, res) {
318
+ const [_, author, unscopedPackageName, releaseId] = req.url
319
+ .split("?")[0]
320
+ .split("/")
321
+
322
+ if (!author || !unscopedPackageName || !releaseId) {
323
+ throw new Error("Invalid author/package/release URL")
324
+ }
325
+ const packageDetails = await ky
326
+ .get(`${REGISTRY_URL}/packages/get`, {
327
+ searchParams: {
328
+ name: `${author}/${unscopedPackageName}`,
329
+ },
330
+ })
331
+ .json()
332
+ .catch((e) => {
333
+ if (String(e).includes("404")) {
334
+ return null
335
+ }
336
+ throw e
337
+ })
338
+ const packageNotFoundHtml = getHtmlWithModifiedSeoTags({
339
+ title: "Package Not Found - tscircuit",
340
+ description: `Release for package ${author}/${unscopedPackageName} could not be found.`,
341
+ canonicalUrl: `${BASE_URL}/${he.encode(author)}/${he.encode(
342
+ unscopedPackageName,
343
+ )}`,
344
+ })
345
+ if (!packageDetails) {
346
+ res.setHeader("Content-Type", "text/html; charset=utf-8")
347
+ res.setHeader("Cache-Control", cacheControlHeader)
348
+ res.setHeader("Vary", "Accept-Encoding")
349
+ res.status(404).send(packageNotFoundHtml)
350
+ return
351
+ }
352
+
353
+ const { package: packageInfo } = packageDetails
354
+ const title = he.encode(`Release preview for ${packageInfo.name} - tscircuit`)
355
+
356
+ const html = getHtmlWithModifiedSeoTags({
357
+ title,
358
+ description: pageDescriptions["releases"],
359
+ ssrPackageData: { package: packageInfo },
360
+ })
361
+
362
+ res.setHeader("Content-Type", "text/html; charset=utf-8")
363
+ res.setHeader("Cache-Control", cacheControlHeader)
364
+ res.setHeader("Vary", "Accept-Encoding")
365
+ res.status(200).send(html)
366
+ }
367
+
301
368
  export default async function handler(req, res) {
302
369
  const urlPath = req.url.split("?")[0]
303
370
  if (urlPath === "/api/generated-index") {
@@ -310,22 +377,15 @@ export default async function handler(req, res) {
310
377
 
311
378
  const pathParts = req.url.split("?")[0].split("/")
312
379
 
313
- if (pathParts[1] === "build" && pathParts[2]) {
314
- const pageDescription = getPageDescription("view-connected-repo")
315
- const html = getHtmlWithModifiedSeoTags({
316
- title: `Preview Build For ${pathParts[2]} - tscircuit`,
317
- description: pageDescription,
318
- canonicalUrl: `${BASE_URL}/build/${pathParts[2]}`,
319
- })
320
- res.setHeader("Content-Type", "text/html; charset=utf-8")
321
- res.setHeader("Cache-Control", cacheControlHeader)
322
- res.setHeader("Vary", "Accept-Encoding")
323
- res.status(200).send(html)
380
+ try {
381
+ await handleCustomPackageHtml(req, res)
324
382
  return
383
+ } catch (e) {
384
+ console.warn(e)
325
385
  }
326
386
 
327
387
  try {
328
- await handleCustomPackageHtml(req, res)
388
+ await handleReleasePreview(req, res)
329
389
  return
330
390
  } catch (e) {
331
391
  console.warn(e)
package/biome.json CHANGED
@@ -8,7 +8,13 @@
8
8
  "indentStyle": "space"
9
9
  },
10
10
  "files": {
11
- "ignore": ["cosmos-export", "dist", "package.json", ".vercel"]
11
+ "ignore": [
12
+ "cosmos-export",
13
+ "dist",
14
+ "package.json",
15
+ ".vercel",
16
+ "src/index.css"
17
+ ]
12
18
  },
13
19
  "javascript": {
14
20
  "formatter": {
@@ -71,9 +71,6 @@ test("GET /api/package_builds/get - returns 403 for unauthorized package build a
71
71
  build_error_last_updated_at: new Date().toISOString(),
72
72
  build_logs: null,
73
73
  preview_url: "https://preview.tscircuit.com/pb_test",
74
- branch_name: "main",
75
- commit_message: "Test build",
76
- commit_author: "jane.doe",
77
74
  })
78
75
 
79
76
  const res = await axios.get(
@@ -126,9 +123,6 @@ test("GET /api/package_builds/get - successfully returns package build with logs
126
123
  ).toISOString(),
127
124
  build_logs: buildLogs.join(" "),
128
125
  preview_url: "https://preview.tscircuit.com/pb_1a2b3c4d",
129
- branch_name: "main",
130
- commit_message: "Add new LED component with improved brightness control",
131
- commit_author: "john.doe",
132
126
  })
133
127
 
134
128
  const res = await axios.get(
@@ -174,9 +168,6 @@ test("GET /api/package_builds/get - returns package build without logs when incl
174
168
  build_error_last_updated_at: new Date().toISOString(),
175
169
  build_logs: "Some build logs",
176
170
  preview_url: "https://preview.tscircuit.com/pb_test",
177
- branch_name: "main",
178
- commit_message: "Test build",
179
- commit_author: "john.doe",
180
171
  })
181
172
 
182
173
  const res = await axios.get(
@@ -222,9 +213,6 @@ test("GET /api/package_builds/get - handles build with errors", async () => {
222
213
  build_error_last_updated_at: new Date().toISOString(),
223
214
  build_logs: null,
224
215
  preview_url: null,
225
- branch_name: "feature/new-component",
226
- commit_message: "Add broken component",
227
- commit_author: "john.doe",
228
216
  })
229
217
 
230
218
  const res = await axios.get(
@@ -274,9 +262,6 @@ test("GET /api/package_builds/get - handles build in progress", async () => {
274
262
  build_error_last_updated_at: new Date().toISOString(),
275
263
  build_logs: null,
276
264
  preview_url: null,
277
- branch_name: "main",
278
- commit_message: "Building in progress",
279
- commit_author: "john.doe",
280
265
  })
281
266
 
282
267
  const res = await axios.get(
@@ -125,9 +125,6 @@ test("GET /api/package_builds/list - returns created builds", async () => {
125
125
  ).toISOString(),
126
126
  build_logs: null,
127
127
  preview_url: "https://preview.tscircuit.com/pb_1a2b3c4d",
128
- branch_name: "main",
129
- commit_message: "Add new LED component with improved brightness control",
130
- commit_author: "john.doe",
131
128
  })
132
129
 
133
130
  const res = await axios.get(
@@ -175,9 +172,6 @@ test("GET /api/package_builds/list - sorts builds by created_at descending", asy
175
172
  ).toISOString(),
176
173
  build_logs: null,
177
174
  preview_url: "https://preview.tscircuit.com/pb_1",
178
- branch_name: "main",
179
- commit_message: "First build",
180
- commit_author: "john.doe",
181
175
  })
182
176
 
183
177
  db.addPackageBuild({
@@ -210,9 +204,6 @@ test("GET /api/package_builds/list - sorts builds by created_at descending", asy
210
204
  ).toISOString(),
211
205
  build_logs: null,
212
206
  preview_url: "https://preview.tscircuit.com/pb_2",
213
- branch_name: "main",
214
- commit_message: "Second build",
215
- commit_author: "john.doe",
216
207
  })
217
208
 
218
209
  const res = await axios.get(
@@ -286,9 +277,6 @@ test("GET /api/package_builds/list - returns created builds with logs or not", a
286
277
  ).toISOString(),
287
278
  build_logs: buildLogs.join(" "),
288
279
  preview_url: "https://preview.tscircuit.com/pb_1a2b3c4d",
289
- branch_name: "main",
290
- commit_message: "Add new LED component with improved brightness control",
291
- commit_author: "john.doe",
292
280
  })
293
281
 
294
282
  const resWithoutLogs = await axios.get(
package/bun.lock CHANGED
@@ -45,6 +45,7 @@
45
45
  "@radix-ui/react-toggle": "^1.1.0",
46
46
  "@radix-ui/react-toggle-group": "^1.1.0",
47
47
  "@radix-ui/react-tooltip": "^1.1.2",
48
+ "@resvg/resvg-wasm": "^2.6.2",
48
49
  "@tailwindcss/typography": "^0.5.16",
49
50
  "@tscircuit/3d-viewer": "^0.0.303",
50
51
  "@tscircuit/assembly-viewer": "^0.0.1",
@@ -54,8 +55,9 @@
54
55
  "@tscircuit/mm": "^0.0.8",
55
56
  "@tscircuit/pcb-viewer": "^1.11.194",
56
57
  "@tscircuit/prompt-benchmarks": "^0.0.28",
57
- "@tscircuit/runframe": "0.0.764",
58
+ "@tscircuit/runframe": "^0.0.781",
58
59
  "@tscircuit/schematic-viewer": "^2.0.21",
60
+ "@tscircuit/simple-3d-svg": "^0.0.41",
59
61
  "@types/babel__standalone": "^7.1.7",
60
62
  "@types/bun": "^1.1.10",
61
63
  "@types/country-list": "^2.1.4",
@@ -63,7 +65,6 @@
63
65
  "@types/md5": "^2.3.5",
64
66
  "@types/ms": "^0.7.34",
65
67
  "@types/node": "^22.13.0",
66
- "@types/prismjs": "^1.26.4",
67
68
  "@types/react": "^18.3.9",
68
69
  "@types/react-dom": "^18.3.0",
69
70
  "@types/react-helmet": "^6.1.11",
@@ -74,11 +75,12 @@
74
75
  "@vercel/analytics": "^1.4.1",
75
76
  "@vitejs/plugin-react": "^4.3.1",
76
77
  "autoprefixer": "^10.4.20",
77
- "change-case": "^5.4.4",
78
78
  "circuit-json-to-bom-csv": "^0.0.7",
79
79
  "circuit-json-to-gerber": "^0.0.29",
80
+ "circuit-json-to-gltf": "^0.0.4",
80
81
  "circuit-json-to-pnp-csv": "^0.0.7",
81
82
  "circuit-json-to-readable-netlist": "^0.0.13",
83
+ "circuit-json-to-simple-3d": "^0.0.6",
82
84
  "circuit-json-to-spice": "^0.0.6",
83
85
  "circuit-json-to-tscircuit": "^0.0.4",
84
86
  "circuit-to-svg": "^0.0.167",
@@ -87,8 +89,6 @@
87
89
  "cmdk": "^1.0.4",
88
90
  "codemirror": "^6.0.1",
89
91
  "codemirror-copilot": "^0.0.7",
90
- "country-list": "^2.3.0",
91
- "date-fns": "^4.1.0",
92
92
  "dotenv": "^16.5.0",
93
93
  "dsn-converter": "^0.0.60",
94
94
  "easyeda": "^0.0.203",
@@ -101,7 +101,6 @@
101
101
  "he": "^1.2.0",
102
102
  "idb-keyval": "^6.2.2",
103
103
  "immer": "^10.1.1",
104
- "input-otp": "^1.2.4",
105
104
  "javascript-time-ago": "^2.5.11",
106
105
  "jose": "^5.9.3",
107
106
  "jscad-electronics": "^0.0.25",
@@ -117,7 +116,6 @@
117
116
  "openai": "^5.6.0",
118
117
  "postcss": "^8.4.47",
119
118
  "posthog-js": "^1.203.2",
120
- "prismjs": "^1.29.0",
121
119
  "prompts": "^2.4.2",
122
120
  "react": "^18.3.1",
123
121
  "react-cookie-consent": "^9.0.0",
@@ -142,6 +140,7 @@
142
140
  "sitemap": "^8.0.0",
143
141
  "sonner": "^1.5.0",
144
142
  "states-us": "^1.1.1",
143
+ "svgo": "^4.0.0",
145
144
  "tailwind-merge": "^2.5.2",
146
145
  "tailwindcss": "^3.4.13",
147
146
  "tailwindcss-animate": "^1.0.7",
@@ -638,6 +637,34 @@
638
637
 
639
638
  "@remix-run/router": ["@remix-run/router@1.23.0", "", {}, "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA=="],
640
639
 
640
+ "@resvg/resvg-js": ["@resvg/resvg-js@2.6.2", "", { "optionalDependencies": { "@resvg/resvg-js-android-arm-eabi": "2.6.2", "@resvg/resvg-js-android-arm64": "2.6.2", "@resvg/resvg-js-darwin-arm64": "2.6.2", "@resvg/resvg-js-darwin-x64": "2.6.2", "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", "@resvg/resvg-js-linux-arm64-musl": "2.6.2", "@resvg/resvg-js-linux-x64-gnu": "2.6.2", "@resvg/resvg-js-linux-x64-musl": "2.6.2", "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", "@resvg/resvg-js-win32-x64-msvc": "2.6.2" } }, "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q=="],
641
+
642
+ "@resvg/resvg-js-android-arm-eabi": ["@resvg/resvg-js-android-arm-eabi@2.6.2", "", { "os": "android", "cpu": "arm" }, "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA=="],
643
+
644
+ "@resvg/resvg-js-android-arm64": ["@resvg/resvg-js-android-arm64@2.6.2", "", { "os": "android", "cpu": "arm64" }, "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ=="],
645
+
646
+ "@resvg/resvg-js-darwin-arm64": ["@resvg/resvg-js-darwin-arm64@2.6.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A=="],
647
+
648
+ "@resvg/resvg-js-darwin-x64": ["@resvg/resvg-js-darwin-x64@2.6.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw=="],
649
+
650
+ "@resvg/resvg-js-linux-arm-gnueabihf": ["@resvg/resvg-js-linux-arm-gnueabihf@2.6.2", "", { "os": "linux", "cpu": "arm" }, "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw=="],
651
+
652
+ "@resvg/resvg-js-linux-arm64-gnu": ["@resvg/resvg-js-linux-arm64-gnu@2.6.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg=="],
653
+
654
+ "@resvg/resvg-js-linux-arm64-musl": ["@resvg/resvg-js-linux-arm64-musl@2.6.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg=="],
655
+
656
+ "@resvg/resvg-js-linux-x64-gnu": ["@resvg/resvg-js-linux-x64-gnu@2.6.2", "", { "os": "linux", "cpu": "x64" }, "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw=="],
657
+
658
+ "@resvg/resvg-js-linux-x64-musl": ["@resvg/resvg-js-linux-x64-musl@2.6.2", "", { "os": "linux", "cpu": "x64" }, "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ=="],
659
+
660
+ "@resvg/resvg-js-win32-arm64-msvc": ["@resvg/resvg-js-win32-arm64-msvc@2.6.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ=="],
661
+
662
+ "@resvg/resvg-js-win32-ia32-msvc": ["@resvg/resvg-js-win32-ia32-msvc@2.6.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w=="],
663
+
664
+ "@resvg/resvg-js-win32-x64-msvc": ["@resvg/resvg-js-win32-x64-msvc@2.6.2", "", { "os": "win32", "cpu": "x64" }, "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ=="],
665
+
666
+ "@resvg/resvg-wasm": ["@resvg/resvg-wasm@2.6.2", "", {}, "sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw=="],
667
+
641
668
  "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="],
642
669
 
643
670
  "@rollup/pluginutils": ["@rollup/pluginutils@5.2.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw=="],
@@ -746,7 +773,7 @@
746
773
 
747
774
  "@tscircuit/props": ["@tscircuit/props@0.0.262", "", { "peerDependencies": { "circuit-json": "*", "react": "*", "zod": "*" } }, "sha512-Ygye4XDWErj73ArhDZunodb1n30Kvdw/rucCdHjBhOseUSlRuACk0ApdJ/AqG0WJ4aEpPJ51mCWgpYDovcMdmw=="],
748
775
 
749
- "@tscircuit/runframe": ["@tscircuit/runframe@0.0.764", "", {}, "sha512-jf/CbwqEfchDPnciW3UP18d/vL+MVM0bmECbGTD/RDEMw0CBGge648cgDSuUiGBCYm+Mvhvm0ab1R8QS0L8M+g=="],
776
+ "@tscircuit/runframe": ["@tscircuit/runframe@0.0.781", "", {}, "sha512-7kR8IRAH93yay8w1ekfdHqL6IdkTtkVzlGoxRMWhGtkEzK3beIb8JCREJR0OgrdbSqT7V3sFeBGYPmNuVMp8Jw=="],
750
777
 
751
778
  "@tscircuit/schematic-autolayout": ["@tscircuit/schematic-autolayout@0.0.6", "", { "dependencies": { "@tscircuit/soup-util": "^0.0.38", "transformation-matrix": "^2.16.1" } }, "sha512-34cQxtlSylBKyHkzaMBCynaWJgN9c/mWm7cz63StTYIafKmfFs383K8Xoc4QX8HXCvVrHYl1aK15onZua9MxeA=="],
752
779
 
@@ -756,7 +783,7 @@
756
783
 
757
784
  "@tscircuit/schematic-viewer": ["@tscircuit/schematic-viewer@2.0.24", "", { "dependencies": { "debug": "^4.4.0", "performance-now": "^2.1.0", "use-mouse-matrix-transform": "^1.2.2" }, "peerDependencies": { "@tscircuit/core": "*", "@tscircuit/props": "*", "circuit-to-svg": "*", "typescript": "^5.0.0" } }, "sha512-0gawQy+JaVtGJ7hViP2jnsxT6PUK+fMnPRQCGDhkEThS3VymbdXF4JYQOPvoOYY/48o0nkNR2Xpy2ZoysTEzCg=="],
758
785
 
759
- "@tscircuit/simple-3d-svg": ["@tscircuit/simple-3d-svg@0.0.6", "", {}, "sha512-zy5Bt5BqQXXxBWV6aZLKUEaTifWzluE3tnkJAV3cpcAJBqADPy/quS9oLMs7opyDQ/0hMYyGU23OnR8oNNa5EQ=="],
786
+ "@tscircuit/simple-3d-svg": ["@tscircuit/simple-3d-svg@0.0.41", "", { "dependencies": { "fast-xml-parser": "^5.2.5", "fflate": "^0.8.2" } }, "sha512-2iwhHhMLElq5t0fcC0Gr7cCpZhEOAKh+6NN0NIJ9YWUCcsB7UN8uYko7jqNTxDlYOe6E0ZYaDZWsQ3amOZ3dlw=="],
760
787
 
761
788
  "@tscircuit/soup-util": ["@tscircuit/soup-util@0.0.41", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "*" } }, "sha512-47JKWBUKkRVHhad0HhBbdOJxB6v/eiac46beiKRBMlJqiZ1gPGI276v9iZfpF7c4hXR69cURcgiwuA5vowrFEg=="],
762
789
 
@@ -822,8 +849,6 @@
822
849
 
823
850
  "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="],
824
851
 
825
- "@types/prismjs": ["@types/prismjs@1.26.5", "", {}, "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ=="],
826
-
827
852
  "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="],
828
853
 
829
854
  "@types/react": ["@types/react@18.3.23", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w=="],
@@ -1012,8 +1037,6 @@
1012
1037
 
1013
1038
  "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
1014
1039
 
1015
- "change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="],
1016
-
1017
1040
  "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="],
1018
1041
 
1019
1042
  "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="],
@@ -1038,11 +1061,13 @@
1038
1061
 
1039
1062
  "circuit-json-to-gerber": ["circuit-json-to-gerber@0.0.29", "", { "dependencies": { "@tscircuit/alphabet": "^0.0.2", "fast-json-stable-stringify": "^2.1.0", "transformation-matrix": "^3.0.0" }, "peerDependencies": { "circuit-json": "*", "typescript": "^5.0.0" }, "bin": { "circuit-to-gerber": "dist/cli.js" } }, "sha512-cWWwUfAMnhJqw+BsBt+R8foroVPrpC9dfF+RkAf3KLn9fmAtkTdElak380EVv9wEecmeCzM6yQPXaVNfwrWsmg=="],
1040
1063
 
1064
+ "circuit-json-to-gltf": ["circuit-json-to-gltf@0.0.4", "", { "peerDependencies": { "@resvg/resvg-js": "2", "@resvg/resvg-wasm": "2", "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-to-svg": "*", "typescript": "^5" }, "optionalPeers": ["@resvg/resvg-wasm"] }, "sha512-KEK6M7k1SVKBeKZY+mBEnxuLT3d19HlewZFCRS/CAp3NR5vEutMEgJhnvY6kTb81AHFOMaEokzdsSEt17WhWiQ=="],
1065
+
1041
1066
  "circuit-json-to-pnp-csv": ["circuit-json-to-pnp-csv@0.0.7", "", { "dependencies": { "papaparse": "^5.4.1" }, "peerDependencies": { "@tscircuit/soup-util": "*", "typescript": "^5.0.0" } }, "sha512-WAdNRHtaPhQM8X5NN/43WMBKDCEKQSLShg/mHIZxMUzJviymnfbq6rJj/2WvDqm/bogey34PyTEHwF3mC7zxlQ=="],
1042
1067
 
1043
1068
  "circuit-json-to-readable-netlist": ["circuit-json-to-readable-netlist@0.0.13", "", { "peerDependencies": { "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-json-to-connectivity-map": "*", "typescript": "^5.0.0" } }, "sha512-Wwk/PdEuqKTQM8HRNVzohgcVpicSRkfcUW+eeycb4ZUaJNunGFEEpBkGHPguIcuG9RJBQrGp3XfBVoBUXeBmWQ=="],
1044
1069
 
1045
- "circuit-json-to-simple-3d": ["circuit-json-to-simple-3d@0.0.2", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-Zyqhf4NcbU3roIR5a8eLA7/YpoRsV2li5hZ3g4jC2F8Dhu+lYirznsS1PofGANVWj8y5XcqUuTQWzhsQel69cg=="],
1070
+ "circuit-json-to-simple-3d": ["circuit-json-to-simple-3d@0.0.6", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-9qtm6h1zLgeB+pMtH2f91xD6ldua3+kKxg/i9+HpaP98bTNYumARll56l4dHRHbiUMBSinawg7G6410P7sLVpg=="],
1046
1071
 
1047
1072
  "circuit-json-to-spice": ["circuit-json-to-spice@0.0.6", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-rrjXZbbh3FFFJvExnJMJuVXEJZo3AuiQRaabBdonAEIccd05PTxmTvRCLNCrTTph71+NC4Q87mCgL7WFWBdtEw=="],
1048
1073
 
@@ -1086,7 +1111,7 @@
1086
1111
 
1087
1112
  "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
1088
1113
 
1089
- "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
1114
+ "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="],
1090
1115
 
1091
1116
  "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
1092
1117
 
@@ -1112,8 +1137,6 @@
1112
1137
 
1113
1138
  "cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="],
1114
1139
 
1115
- "country-list": ["country-list@2.3.0", "", {}, "sha512-qZk66RlmQm7fQjMYWku1AyjlKPogjPEorAZJG88owPExoPV8EsyCcuFLvO2afTXHEhi9liVOoyd+5A6ZS5QwaA=="],
1116
-
1117
1140
  "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="],
1118
1141
 
1119
1142
  "cross-env": ["cross-env@7.0.3", "", { "dependencies": { "cross-spawn": "^7.0.1" }, "bin": { "cross-env": "src/bin/cross-env.js", "cross-env-shell": "src/bin/cross-env-shell.js" } }, "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw=="],
@@ -1128,10 +1151,14 @@
1128
1151
 
1129
1152
  "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="],
1130
1153
 
1154
+ "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="],
1155
+
1131
1156
  "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="],
1132
1157
 
1133
1158
  "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
1134
1159
 
1160
+ "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="],
1161
+
1135
1162
  "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
1136
1163
 
1137
1164
  "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="],
@@ -1292,6 +1319,8 @@
1292
1319
 
1293
1320
  "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="],
1294
1321
 
1322
+ "fast-xml-parser": ["fast-xml-parser@5.2.5", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="],
1323
+
1295
1324
  "fastify": ["fastify@5.4.0", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.0", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^6.0.0", "find-my-way": "^9.0.0", "light-my-request": "^6.0.0", "pino": "^9.0.0", "process-warning": "^5.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw=="],
1296
1325
 
1297
1326
  "fastify-plugin": ["fastify-plugin@5.0.1", "", {}, "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ=="],
@@ -1444,8 +1473,6 @@
1444
1473
 
1445
1474
  "inline-style-parser": ["inline-style-parser@0.2.4", "", {}, "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="],
1446
1475
 
1447
- "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="],
1448
-
1449
1476
  "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="],
1450
1477
 
1451
1478
  "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="],
@@ -1642,6 +1669,8 @@
1642
1669
 
1643
1670
  "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="],
1644
1671
 
1672
+ "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="],
1673
+
1645
1674
  "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
1646
1675
 
1647
1676
  "meshline": ["meshline@3.3.1", "", { "peerDependencies": { "three": ">=0.137" } }, "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ=="],
@@ -2134,6 +2163,8 @@
2134
2163
 
2135
2164
  "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
2136
2165
 
2166
+ "strnum": ["strnum@2.1.1", "", {}, "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw=="],
2167
+
2137
2168
  "strtok3": ["strtok3@9.1.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.3.1" } }, "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw=="],
2138
2169
 
2139
2170
  "stubborn-fs": ["stubborn-fs@1.2.5", "", {}, "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g=="],
@@ -2154,6 +2185,8 @@
2154
2185
 
2155
2186
  "suspend-react": ["suspend-react@0.1.3", "", { "peerDependencies": { "react": ">=17.0" } }, "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ=="],
2156
2187
 
2188
+ "svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="],
2189
+
2157
2190
  "svgson": ["svgson@5.3.1", "", { "dependencies": { "deep-rename-keys": "^0.2.1", "xml-reader": "2.4.3" } }, "sha512-qdPgvUNWb40gWktBJnbJRelWcPzkLed/ShhnRsjbayXz8OtdPOzbil9jtiZdrYvSDumAz/VNQr6JaNfPx/gvPA=="],
2158
2191
 
2159
2192
  "table": ["table@6.9.0", "", { "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" } }, "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A=="],
@@ -2420,6 +2453,8 @@
2420
2453
 
2421
2454
  "cosmiconfig/yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="],
2422
2455
 
2456
+ "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="],
2457
+
2423
2458
  "duplexify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
2424
2459
 
2425
2460
  "edge-runtime/picocolors": ["picocolors@1.0.0", "", {}, "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="],
@@ -2536,6 +2571,8 @@
2536
2571
 
2537
2572
  "tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
2538
2573
 
2574
+ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
2575
+
2539
2576
  "three-stdlib/fflate": ["fflate@0.6.10", "", {}, "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg=="],
2540
2577
 
2541
2578
  "tscircuit/@tscircuit/core": ["@tscircuit/core@0.0.564", "", { "dependencies": { "@lume/kiwi": "^0.4.3", "css-select": "5.1.0", "format-si-unit": "^0.0.3", "nanoid": "^5.0.7", "performance-now": "^2.1.0", "react-reconciler": "^0.32.0", "react-reconciler-18": "npm:react-reconciler@0.29.2", "transformation-matrix": "^2.16.1", "zod": "^3.25.67" }, "peerDependencies": { "@tscircuit/capacity-autorouter": "*", "@tscircuit/checks": "*", "@tscircuit/circuit-json-util": "*", "@tscircuit/footprinter": "*", "@tscircuit/infgrid-ijump-astar": "*", "@tscircuit/math-utils": "*", "@tscircuit/props": "*", "@tscircuit/schematic-autolayout": "*", "@tscircuit/schematic-corpus": "*", "@tscircuit/schematic-match-adapt": "*", "bpc-graph": "*", "circuit-json": "*", "circuit-json-to-bpc": "*", "circuit-json-to-connectivity-map": "*", "schematic-symbols": "*", "typescript": "^5.0.0" } }, "sha512-etWc2aKeURJ5QIOdXh5pGxCQhsfPQBAkUlapavalqw1hTG9r9eIVJRDiQqBxRnGebi0YlRmnSEYranI1PblZEw=="],
@@ -2546,6 +2583,10 @@
2546
2583
 
2547
2584
  "tscircuit/@tscircuit/props": ["@tscircuit/props@0.0.257", "", { "peerDependencies": { "circuit-json": "*", "react": "*", "zod": "*" } }, "sha512-vbzKuxVlBQqdG4pISQOxJbnjjfpIFJFoOIeVS5EDnvmBduto4gnzVJTgDw84SUDamcQlmOsOu1/AJCJdrZ+hqg=="],
2548
2585
 
2586
+ "tscircuit/@tscircuit/simple-3d-svg": ["@tscircuit/simple-3d-svg@0.0.6", "", {}, "sha512-zy5Bt5BqQXXxBWV6aZLKUEaTifWzluE3tnkJAV3cpcAJBqADPy/quS9oLMs7opyDQ/0hMYyGU23OnR8oNNa5EQ=="],
2587
+
2588
+ "tscircuit/circuit-json-to-simple-3d": ["circuit-json-to-simple-3d@0.0.2", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-Zyqhf4NcbU3roIR5a8eLA7/YpoRsV2li5hZ3g4jC2F8Dhu+lYirznsS1PofGANVWj8y5XcqUuTQWzhsQel69cg=="],
2589
+
2549
2590
  "tscircuit/circuit-to-svg": ["circuit-to-svg@0.0.166", "", { "dependencies": { "@types/node": "^22.5.5", "bun-types": "^1.1.40", "svgson": "^5.3.1", "transformation-matrix": "^2.16.1" }, "peerDependencies": { "@tscircuit/circuit-json-util": "*", "@tscircuit/footprinter": "*", "circuit-json": "*", "schematic-symbols": "*" } }, "sha512-yyNbFq18y8ZMP2fYNtA3HmARYWRt38S+ThZu1LuNaSlnHl4g9iYwH5unNoXD9a23cgBDiOtytescdP7fSm6TFg=="],
2550
2591
 
2551
2592
  "tscircuit/react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="],
@@ -2604,6 +2645,8 @@
2604
2645
 
2605
2646
  "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
2606
2647
 
2648
+ "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="],
2649
+
2607
2650
  "fast-json-stringify/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
2608
2651
 
2609
2652
  "hastscript/@types/hast/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],