@tscircuit/fake-snippets 0.0.92 → 0.0.93

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.
package/dist/index.d.ts CHANGED
@@ -1069,7 +1069,7 @@ declare const createDatabase: ({ seed }?: {
1069
1069
  }[] | null;
1070
1070
  datasheet_pdf_urls: string[] | null;
1071
1071
  }[];
1072
- }, "addOrder" | "getOrderById" | "getOrderFilesByOrderId" | "addOrderQuote" | "getOrderQuoteById" | "getJlcpcbOrderStatesByOrderId" | "getJlcpcbOrderStepRunsByJlcpcbOrderStateId" | "updateOrder" | "addJlcpcbOrderState" | "updateJlcpcbOrderState" | "addOrderFile" | "getOrderFileById" | "addAccount" | "addAccountPackage" | "getAccountPackageById" | "updateAccountPackage" | "deleteAccountPackage" | "addSnippet" | "getLatestSnippets" | "getTrendingSnippets" | "getPackagesByAuthor" | "getSnippetByAuthorAndName" | "updateSnippet" | "getSnippetById" | "searchSnippets" | "searchPackages" | "deleteSnippet" | "addSession" | "getSessions" | "createLoginPage" | "getLoginPage" | "updateLoginPage" | "getAccount" | "updateAccount" | "createSession" | "addStar" | "removeStar" | "hasStarred" | "addPackage" | "updatePackage" | "getPackageById" | "getPackageReleaseById" | "addPackageRelease" | "updatePackageRelease" | "deletePackageFile" | "addPackageFile" | "updatePackageFile" | "getStarCount" | "getPackageFilesByReleaseId" | "updatePackageReleaseFsSha" | "addAiReview" | "updateAiReview" | "getAiReviewById" | "listAiReviews" | "addDatasheet" | "getDatasheetById" | "updateDatasheet"> & {
1072
+ }, "addOrder" | "getOrderById" | "getOrderFilesByOrderId" | "addOrderQuote" | "getOrderQuoteById" | "getJlcpcbOrderStatesByOrderId" | "getJlcpcbOrderStepRunsByJlcpcbOrderStateId" | "updateOrder" | "addJlcpcbOrderState" | "updateJlcpcbOrderState" | "addOrderFile" | "getOrderFileById" | "addAccount" | "addAccountPackage" | "getAccountPackageById" | "updateAccountPackage" | "deleteAccountPackage" | "addSnippet" | "getLatestSnippets" | "getTrendingSnippets" | "getPackagesByAuthor" | "getSnippetByAuthorAndName" | "updateSnippet" | "getSnippetById" | "searchSnippets" | "searchPackages" | "deleteSnippet" | "addSession" | "getSessions" | "createLoginPage" | "getLoginPage" | "updateLoginPage" | "getAccount" | "updateAccount" | "createSession" | "addStar" | "removeStar" | "hasStarred" | "addPackage" | "updatePackage" | "getPackageById" | "getPackageReleaseById" | "addPackageRelease" | "updatePackageRelease" | "deletePackageFile" | "addPackageFile" | "updatePackageFile" | "getStarCount" | "getPackageFilesByReleaseId" | "updatePackageReleaseFsSha" | "addAiReview" | "updateAiReview" | "getAiReviewById" | "listAiReviews" | "addDatasheet" | "getDatasheetById" | "listDatasheets" | "updateDatasheet"> & {
1073
1073
  addOrder: (order: Omit<Order, "order_id">) => Order;
1074
1074
  getOrderById: (orderId: string) => Order | undefined;
1075
1075
  getOrderFilesByOrderId: (orderId: string) => OrderFile[];
@@ -1155,6 +1155,10 @@ declare const createDatabase: ({ seed }?: {
1155
1155
  chip_name: string;
1156
1156
  }) => Datasheet;
1157
1157
  getDatasheetById: (datasheetId: string) => Datasheet | undefined;
1158
+ listDatasheets: ({ chip_name, is_popular, }?: {
1159
+ chip_name?: string;
1160
+ is_popular?: boolean;
1161
+ }) => Datasheet[];
1158
1162
  updateDatasheet: (datasheetId: string, updates: Partial<Datasheet>) => Datasheet | undefined;
1159
1163
  }> & Omit<{
1160
1164
  idCounter: number;
@@ -1416,7 +1420,7 @@ declare const createDatabase: ({ seed }?: {
1416
1420
  }[] | null;
1417
1421
  datasheet_pdf_urls: string[] | null;
1418
1422
  }[];
1419
- }, "addOrder" | "getOrderById" | "getOrderFilesByOrderId" | "addOrderQuote" | "getOrderQuoteById" | "getJlcpcbOrderStatesByOrderId" | "getJlcpcbOrderStepRunsByJlcpcbOrderStateId" | "updateOrder" | "addJlcpcbOrderState" | "updateJlcpcbOrderState" | "addOrderFile" | "getOrderFileById" | "addAccount" | "addAccountPackage" | "getAccountPackageById" | "updateAccountPackage" | "deleteAccountPackage" | "addSnippet" | "getLatestSnippets" | "getTrendingSnippets" | "getPackagesByAuthor" | "getSnippetByAuthorAndName" | "updateSnippet" | "getSnippetById" | "searchSnippets" | "searchPackages" | "deleteSnippet" | "addSession" | "getSessions" | "createLoginPage" | "getLoginPage" | "updateLoginPage" | "getAccount" | "updateAccount" | "createSession" | "addStar" | "removeStar" | "hasStarred" | "addPackage" | "updatePackage" | "getPackageById" | "getPackageReleaseById" | "addPackageRelease" | "updatePackageRelease" | "deletePackageFile" | "addPackageFile" | "updatePackageFile" | "getStarCount" | "getPackageFilesByReleaseId" | "updatePackageReleaseFsSha" | "addAiReview" | "updateAiReview" | "getAiReviewById" | "listAiReviews" | "addDatasheet" | "getDatasheetById" | "updateDatasheet"> & {
1423
+ }, "addOrder" | "getOrderById" | "getOrderFilesByOrderId" | "addOrderQuote" | "getOrderQuoteById" | "getJlcpcbOrderStatesByOrderId" | "getJlcpcbOrderStepRunsByJlcpcbOrderStateId" | "updateOrder" | "addJlcpcbOrderState" | "updateJlcpcbOrderState" | "addOrderFile" | "getOrderFileById" | "addAccount" | "addAccountPackage" | "getAccountPackageById" | "updateAccountPackage" | "deleteAccountPackage" | "addSnippet" | "getLatestSnippets" | "getTrendingSnippets" | "getPackagesByAuthor" | "getSnippetByAuthorAndName" | "updateSnippet" | "getSnippetById" | "searchSnippets" | "searchPackages" | "deleteSnippet" | "addSession" | "getSessions" | "createLoginPage" | "getLoginPage" | "updateLoginPage" | "getAccount" | "updateAccount" | "createSession" | "addStar" | "removeStar" | "hasStarred" | "addPackage" | "updatePackage" | "getPackageById" | "getPackageReleaseById" | "addPackageRelease" | "updatePackageRelease" | "deletePackageFile" | "addPackageFile" | "updatePackageFile" | "getStarCount" | "getPackageFilesByReleaseId" | "updatePackageReleaseFsSha" | "addAiReview" | "updateAiReview" | "getAiReviewById" | "listAiReviews" | "addDatasheet" | "getDatasheetById" | "listDatasheets" | "updateDatasheet"> & {
1420
1424
  addOrder: (order: Omit<Order, "order_id">) => Order;
1421
1425
  getOrderById: (orderId: string) => Order | undefined;
1422
1426
  getOrderFilesByOrderId: (orderId: string) => OrderFile[];
@@ -1502,6 +1506,10 @@ declare const createDatabase: ({ seed }?: {
1502
1506
  chip_name: string;
1503
1507
  }) => Datasheet;
1504
1508
  getDatasheetById: (datasheetId: string) => Datasheet | undefined;
1509
+ listDatasheets: ({ chip_name, is_popular, }?: {
1510
+ chip_name?: string;
1511
+ is_popular?: boolean;
1512
+ }) => Datasheet[];
1505
1513
  updateDatasheet: (datasheetId: string, updates: Partial<Datasheet>) => Datasheet | undefined;
1506
1514
  };
1507
1515
  type DbClient = ReturnType<typeof createDatabase>;
package/dist/index.js CHANGED
@@ -3112,7 +3112,7 @@ var initializer = combine(databaseSchema.parse({}), (set, get) => ({
3112
3112
  },
3113
3113
  addDatasheet: ({ chip_name }) => {
3114
3114
  const newDatasheet = datasheetSchema.parse({
3115
- datasheet_id: `datasheet_${Date.now()}`,
3115
+ datasheet_id: crypto.randomUUID(),
3116
3116
  chip_name,
3117
3117
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
3118
3118
  pin_information: null,
@@ -3127,6 +3127,21 @@ var initializer = combine(databaseSchema.parse({}), (set, get) => ({
3127
3127
  const state = get();
3128
3128
  return state.datasheets.find((d) => d.datasheet_id === datasheetId);
3129
3129
  },
3130
+ listDatasheets: ({
3131
+ chip_name,
3132
+ is_popular
3133
+ } = {}) => {
3134
+ const state = get();
3135
+ if (is_popular) {
3136
+ return state.datasheets;
3137
+ }
3138
+ if (chip_name) {
3139
+ return state.datasheets.filter(
3140
+ (d) => d.chip_name.toLowerCase() === chip_name.toLowerCase()
3141
+ );
3142
+ }
3143
+ return state.datasheets;
3144
+ },
3130
3145
  updateDatasheet: (datasheetId, updates) => {
3131
3146
  let updated;
3132
3147
  set((state) => {
@@ -1382,7 +1382,7 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
1382
1382
  },
1383
1383
  addDatasheet: ({ chip_name }: { chip_name: string }): Datasheet => {
1384
1384
  const newDatasheet = datasheetSchema.parse({
1385
- datasheet_id: `datasheet_${Date.now()}`,
1385
+ datasheet_id: crypto.randomUUID(),
1386
1386
  chip_name,
1387
1387
  created_at: new Date().toISOString(),
1388
1388
  pin_information: null,
@@ -1397,6 +1397,23 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
1397
1397
  const state = get()
1398
1398
  return state.datasheets.find((d) => d.datasheet_id === datasheetId)
1399
1399
  },
1400
+ listDatasheets: ({
1401
+ chip_name,
1402
+ is_popular,
1403
+ }: { chip_name?: string; is_popular?: boolean } = {}): Datasheet[] => {
1404
+ const state = get()
1405
+ if (is_popular) {
1406
+ return state.datasheets
1407
+ }
1408
+
1409
+ if (chip_name) {
1410
+ return state.datasheets.filter(
1411
+ (d) => d.chip_name.toLowerCase() === chip_name.toLowerCase(),
1412
+ )
1413
+ }
1414
+
1415
+ return state.datasheets
1416
+ },
1400
1417
  updateDatasheet: (
1401
1418
  datasheetId: string,
1402
1419
  updates: Partial<Datasheet>,
@@ -0,0 +1,29 @@
1
+ import { withRouteSpec } from "fake-snippets-api/lib/middleware/with-winter-spec"
2
+ import { z } from "zod"
3
+
4
+ export default withRouteSpec({
5
+ methods: ["GET", "POST"],
6
+ auth: "none",
7
+ commonParams: z.object({
8
+ chip_name: z.string().optional(),
9
+ is_popular: z.boolean().optional(),
10
+ }),
11
+ jsonResponse: z.object({
12
+ datasheets: z.array(
13
+ z.object({
14
+ datasheet_id: z.string().uuid(),
15
+ chip_name: z.string(),
16
+ }),
17
+ ),
18
+ }),
19
+ })(async (req, ctx) => {
20
+ const { chip_name, is_popular } = req.commonParams
21
+ const datasheets = ctx.db
22
+ .listDatasheets({ chip_name, is_popular })
23
+ .map((ds) => ({
24
+ datasheet_id: ds.datasheet_id,
25
+ chip_name: ds.chip_name,
26
+ }))
27
+
28
+ return ctx.json({ datasheets })
29
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/fake-snippets",
3
- "version": "0.0.92",
3
+ "version": "0.0.93",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -282,7 +282,7 @@ const CmdKMenu = () => {
282
282
  switch (type) {
283
283
  case "package":
284
284
  case "recent":
285
- window.location.href = `/editor?package_id=${item.package_id}`
285
+ window.location.href = `/${item.owner_github_username}/${item.unscoped_name}`
286
286
  setOpen(false)
287
287
  break
288
288
  case "blank":
@@ -18,6 +18,7 @@ export const LogContent = ({
18
18
  logs: Array<{
19
19
  type?: "info" | "success" | "error"
20
20
  msg?: string
21
+ message?: string
21
22
  timestamp?: string
22
23
  }>
23
24
  error?: ErrorObject | string | null
@@ -25,7 +26,8 @@ export const LogContent = ({
25
26
  return (
26
27
  <div className="font-mono text-xs space-y-1 min-w-0">
27
28
  {logs.map((log, i) => {
28
- if (!log.msg) return null
29
+ const text = log.msg ?? log.message
30
+ if (!text) return null
29
31
 
30
32
  return (
31
33
  <div
@@ -44,7 +46,7 @@ export const LogContent = ({
44
46
  </span>
45
47
  )}
46
48
  {log.timestamp && " "}
47
- <span className="break-all">{log.msg}</span>
49
+ <span className="break-all">{text}</span>
48
50
  </div>
49
51
  )
50
52
  })}
@@ -99,6 +99,8 @@ export const PackageCard: React.FC<PackageCardProps> = ({
99
99
  })
100
100
  }
101
101
 
102
+ const availableImages = ["pcb", "schematic", "assembly", "3d"]
103
+
102
104
  const cardContent = (
103
105
  <div
104
106
  className={`border p-4 rounded-md hover:shadow-md transition-shadow flex flex-col gap-4 ${className}`}
@@ -108,8 +110,8 @@ export const PackageCard: React.FC<PackageCardProps> = ({
108
110
  className={`${imageSize} flex-shrink-0 rounded-md overflow-hidden`}
109
111
  >
110
112
  <ImageWithFallback
111
- src={`${baseUrl}/packages/images/${pkg.owner_github_username}/${pkg.unscoped_name}/pcb.svg?fs_sha=${pkg.latest_package_release_fs_sha}`}
112
- alt={`${pkg.unscoped_name} PCB image`}
113
+ src={`${baseUrl}/packages/images/${pkg.owner_github_username}/${pkg.unscoped_name}/${availableImages.includes(pkg.default_view || "") ? pkg.default_view : "3d"}.png?fs_sha=${pkg.latest_package_release_fs_sha}`}
114
+ alt={`${pkg.unscoped_name} ${availableImages.includes(pkg.default_view || "") ? pkg.default_view : "3D"} view`}
113
115
  className={`object-cover h-full w-full ${imageTransform}`}
114
116
  />
115
117
  </div>
@@ -224,34 +224,33 @@ export function CodeAndPreview({ pkg, projectUrl }: Props) {
224
224
  pkgFilesLoaded={!isLoading}
225
225
  />
226
226
  </div>
227
- {state.showPreview && (
228
- <div
229
- className={cn(
230
- "flex p-0 flex-col min-h-[640px]",
231
- state.fullScreen
232
- ? "fixed inset-0 z-50 bg-white p-4 overflow-hidden"
233
- : "w-full md:w-1/2",
234
- )}
235
- >
236
- <SuspenseRunFrame
237
- showRunButton
238
- forceLatestEvalVersion
239
- onRenderStarted={() =>
240
- setState((prev) => ({ ...prev, lastRunCode: currentFileCode }))
241
- }
242
- onRenderFinished={({ circuitJson }) => {
243
- setState((prev) => ({ ...prev, circuitJson }))
244
- toastManualEditConflicts(circuitJson, toast)
245
- }}
246
- mainComponentPath={mainComponentPath}
247
- onEditEvent={(event) => {
248
- handleEditEvent(event)
249
- }}
250
- fsMap={fsMap ?? {}}
251
- projectUrl={projectUrl}
252
- />
253
- </div>
254
- )}
227
+ <div
228
+ className={cn(
229
+ "flex p-0 flex-col min-h-[640px]",
230
+ state.fullScreen
231
+ ? "fixed inset-0 z-50 bg-white p-4 overflow-hidden"
232
+ : "w-full md:w-1/2",
233
+ !state.showPreview && "hidden",
234
+ )}
235
+ >
236
+ <SuspenseRunFrame
237
+ showRunButton
238
+ forceLatestEvalVersion
239
+ onRenderStarted={() =>
240
+ setState((prev) => ({ ...prev, lastRunCode: currentFileCode }))
241
+ }
242
+ onRenderFinished={({ circuitJson }) => {
243
+ setState((prev) => ({ ...prev, circuitJson }))
244
+ toastManualEditConflicts(circuitJson, toast)
245
+ }}
246
+ mainComponentPath={mainComponentPath}
247
+ onEditEvent={(event) => {
248
+ handleEditEvent(event)
249
+ }}
250
+ fsMap={fsMap ?? {}}
251
+ projectUrl={projectUrl}
252
+ />
253
+ </div>
255
254
  </div>
256
255
  <NewPackageSaveDialog initialIsPrivate={false} onSave={savePackage} />
257
256
  <DiscardChangesDialog onConfirm={handleDiscardChanges} />
@@ -71,7 +71,11 @@ export const DashboardPage = () => {
71
71
  const { data: latestPackages } = useQuery<Package[]>(
72
72
  "latestPackages",
73
73
  async () => {
74
- const response = await axios.get("/packages/list_latest")
74
+ const response = await axios.get("/packages/list_latest", {
75
+ params: {
76
+ limit: 10,
77
+ },
78
+ })
75
79
  return response.data.packages
76
80
  },
77
81
  {