@tscircuit/fake-snippets 0.0.120 → 0.0.122

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 (612) hide show
  1. package/dist/bundle.js +1 -2
  2. package/package.json +4 -1
  3. package/.github/CODEOWNERS +0 -1
  4. package/.github/workflows/bun-formatcheck.yml +0 -26
  5. package/.github/workflows/bun-pver-release.yml +0 -28
  6. package/.github/workflows/bun-test.yml +0 -28
  7. package/.github/workflows/bun-typecheck.yml +0 -26
  8. package/.github/workflows/bundle-size-analysis.yml +0 -79
  9. package/.github/workflows/stale.yml +0 -40
  10. package/.github/workflows/update-package.yml +0 -58
  11. package/.github/workflows/update-snapshots.yml +0 -49
  12. package/CLAUDE.md +0 -92
  13. package/CONTRIBUTING.md +0 -59
  14. package/api/generated-index.js +0 -456
  15. package/biome.json +0 -67
  16. package/bun-tests/fake-snippets-api/fixtures/get-test-server.ts +0 -141
  17. package/bun-tests/fake-snippets-api/fixtures/preload.ts +0 -18
  18. package/bun-tests/fake-snippets-api/fixtures/start-server.ts +0 -48
  19. package/bun-tests/fake-snippets-api/routes/accounts/get.test.ts +0 -64
  20. package/bun-tests/fake-snippets-api/routes/accounts/get_account_balance.test.ts +0 -14
  21. package/bun-tests/fake-snippets-api/routes/ai_reviews/create.test.ts +0 -21
  22. package/bun-tests/fake-snippets-api/routes/ai_reviews/get.test.ts +0 -16
  23. package/bun-tests/fake-snippets-api/routes/ai_reviews/list.test.ts +0 -14
  24. package/bun-tests/fake-snippets-api/routes/ai_reviews/process_review.test.ts +0 -16
  25. package/bun-tests/fake-snippets-api/routes/bug_reports/create.test.ts +0 -37
  26. package/bun-tests/fake-snippets-api/routes/bug_reports/upload_file.test.ts +0 -89
  27. package/bun-tests/fake-snippets-api/routes/datasheets/create.test.ts +0 -16
  28. package/bun-tests/fake-snippets-api/routes/datasheets/get.test.ts +0 -54
  29. package/bun-tests/fake-snippets-api/routes/datasheets/list.test.ts +0 -49
  30. package/bun-tests/fake-snippets-api/routes/datasheets/process_all_datasheets.test.ts +0 -22
  31. package/bun-tests/fake-snippets-api/routes/datasheets/run_async_tasks.test.ts +0 -19
  32. package/bun-tests/fake-snippets-api/routes/health.test.ts +0 -9
  33. package/bun-tests/fake-snippets-api/routes/order_files/get.test.ts +0 -48
  34. package/bun-tests/fake-snippets-api/routes/order_files/upload.test.ts +0 -77
  35. package/bun-tests/fake-snippets-api/routes/order_quotes/create.test.ts +0 -33
  36. package/bun-tests/fake-snippets-api/routes/orders/create.test.ts +0 -17
  37. package/bun-tests/fake-snippets-api/routes/orders/get.test.ts +0 -199
  38. package/bun-tests/fake-snippets-api/routes/orders/list.test.ts +0 -30
  39. package/bun-tests/fake-snippets-api/routes/orgs/add_member.test.ts +0 -26
  40. package/bun-tests/fake-snippets-api/routes/orgs/create.test.ts +0 -37
  41. package/bun-tests/fake-snippets-api/routes/orgs/get.test.ts +0 -53
  42. package/bun-tests/fake-snippets-api/routes/orgs/get_member.test.ts +0 -110
  43. package/bun-tests/fake-snippets-api/routes/orgs/list.test.ts +0 -17
  44. package/bun-tests/fake-snippets-api/routes/orgs/list_members.test.ts +0 -24
  45. package/bun-tests/fake-snippets-api/routes/orgs/remove_member.test.ts +0 -81
  46. package/bun-tests/fake-snippets-api/routes/orgs/update.test.ts +0 -151
  47. package/bun-tests/fake-snippets-api/routes/package_builds/get.test.ts +0 -279
  48. package/bun-tests/fake-snippets-api/routes/package_builds/list.test.ts +0 -292
  49. package/bun-tests/fake-snippets-api/routes/package_files/create.test.ts +0 -320
  50. package/bun-tests/fake-snippets-api/routes/package_files/create_or_update.test.ts +0 -603
  51. package/bun-tests/fake-snippets-api/routes/package_files/delete.test.ts +0 -233
  52. package/bun-tests/fake-snippets-api/routes/package_files/download.test.ts +0 -248
  53. package/bun-tests/fake-snippets-api/routes/package_files/get.test.ts +0 -230
  54. package/bun-tests/fake-snippets-api/routes/package_files/list.test.ts +0 -212
  55. package/bun-tests/fake-snippets-api/routes/package_releases/create.test.ts +0 -171
  56. package/bun-tests/fake-snippets-api/routes/package_releases/get.test.ts +0 -181
  57. package/bun-tests/fake-snippets-api/routes/package_releases/get_image_generation_fields.test.ts +0 -38
  58. package/bun-tests/fake-snippets-api/routes/package_releases/list.test.ts +0 -149
  59. package/bun-tests/fake-snippets-api/routes/package_releases/update.test.ts +0 -160
  60. package/bun-tests/fake-snippets-api/routes/packages/add_star.test.ts +0 -129
  61. package/bun-tests/fake-snippets-api/routes/packages/create.test.ts +0 -67
  62. package/bun-tests/fake-snippets-api/routes/packages/delete.test.ts +0 -74
  63. package/bun-tests/fake-snippets-api/routes/packages/fork.test.ts +0 -132
  64. package/bun-tests/fake-snippets-api/routes/packages/get.test.ts +0 -112
  65. package/bun-tests/fake-snippets-api/routes/packages/images.test.ts +0 -72
  66. package/bun-tests/fake-snippets-api/routes/packages/list-1.test.ts +0 -145
  67. package/bun-tests/fake-snippets-api/routes/packages/list-2.test.ts +0 -48
  68. package/bun-tests/fake-snippets-api/routes/packages/list_latest.test.ts +0 -110
  69. package/bun-tests/fake-snippets-api/routes/packages/list_trending.test.ts +0 -103
  70. package/bun-tests/fake-snippets-api/routes/packages/remove_star.test.ts +0 -131
  71. package/bun-tests/fake-snippets-api/routes/packages/update.test.ts +0 -217
  72. package/bun-tests/fake-snippets-api/routes/proxy.test.ts +0 -42
  73. package/bun.lock +0 -2724
  74. package/bunfig.toml +0 -3
  75. package/components.json +0 -20
  76. package/docs/CIRCUIT_JSON_SOURCE_COMPONENT_OVERVIEW.md +0 -151
  77. package/fake-snippets-api/README.md +0 -6
  78. package/fake-snippets-api/biome.json +0 -47
  79. package/fake-snippets-api/bun.lockb +0 -0
  80. package/fake-snippets-api/lib/db/autoload-dev-packages.ts +0 -222
  81. package/fake-snippets-api/lib/db/autoload-packages.json +0 -8
  82. package/fake-snippets-api/lib/db/db-client.ts +0 -1857
  83. package/fake-snippets-api/lib/db/schema.ts +0 -502
  84. package/fake-snippets-api/lib/db/seed.ts +0 -1843
  85. package/fake-snippets-api/lib/index.ts +0 -3
  86. package/fake-snippets-api/lib/middleware/with-ctx-error.ts +0 -26
  87. package/fake-snippets-api/lib/middleware/with-db.ts +0 -15
  88. package/fake-snippets-api/lib/middleware/with-error-handling.ts +0 -24
  89. package/fake-snippets-api/lib/middleware/with-optional-session-auth.ts +0 -53
  90. package/fake-snippets-api/lib/middleware/with-request-logging.ts +0 -54
  91. package/fake-snippets-api/lib/middleware/with-session-auth.ts +0 -102
  92. package/fake-snippets-api/lib/middleware/with-winter-spec.ts +0 -24
  93. package/fake-snippets-api/lib/package_file/generate-fs-sha.ts +0 -20
  94. package/fake-snippets-api/lib/package_file/get-package-file-id-from-file-descriptor.ts +0 -173
  95. package/fake-snippets-api/lib/package_release/find-package-release-id.ts +0 -120
  96. package/fake-snippets-api/lib/public-mapping/public-map-org.ts +0 -34
  97. package/fake-snippets-api/lib/public-mapping/public-map-package-build.ts +0 -48
  98. package/fake-snippets-api/lib/public-mapping/public-map-package-release.ts +0 -88
  99. package/fake-snippets-api/lib/public-mapping/public-map-package.ts +0 -60
  100. package/fake-snippets-api/lib/with-winter-spec.ts +0 -1
  101. package/fake-snippets-api/next-env.d.ts +0 -5
  102. package/fake-snippets-api/routes/api/_fake/ai_reviews/process_review.ts +0 -31
  103. package/fake-snippets-api/routes/api/_fake/datasheets/process_all_datasheets.ts +0 -38
  104. package/fake-snippets-api/routes/api/_fake/db.ts +0 -11
  105. package/fake-snippets-api/routes/api/_fake/move_orders_forward.ts +0 -65
  106. package/fake-snippets-api/routes/api/_fake/received_quotes.ts +0 -112
  107. package/fake-snippets-api/routes/api/_fake/run_async_tasks.ts +0 -12
  108. package/fake-snippets-api/routes/api/_fake/seed.ts +0 -13
  109. package/fake-snippets-api/routes/api/accounts/get.ts +0 -35
  110. package/fake-snippets-api/routes/api/accounts/get_account_balance.ts +0 -22
  111. package/fake-snippets-api/routes/api/accounts/search.ts +0 -20
  112. package/fake-snippets-api/routes/api/accounts/update.ts +0 -32
  113. package/fake-snippets-api/routes/api/ai/[...anyroute].ts +0 -31
  114. package/fake-snippets-api/routes/api/ai.ts +0 -2
  115. package/fake-snippets-api/routes/api/ai_reviews/create.ts +0 -44
  116. package/fake-snippets-api/routes/api/ai_reviews/get.ts +0 -24
  117. package/fake-snippets-api/routes/api/ai_reviews/list.ts +0 -14
  118. package/fake-snippets-api/routes/api/aistream/[...anyroute].ts +0 -65
  119. package/fake-snippets-api/routes/api/autocomplete/create_autocomplete.ts +0 -16
  120. package/fake-snippets-api/routes/api/bug_reports/create.ts +0 -43
  121. package/fake-snippets-api/routes/api/bug_reports/upload_file.ts +0 -113
  122. package/fake-snippets-api/routes/api/datasheets/create.ts +0 -18
  123. package/fake-snippets-api/routes/api/datasheets/get.ts +0 -35
  124. package/fake-snippets-api/routes/api/datasheets/list.ts +0 -29
  125. package/fake-snippets-api/routes/api/github/installations/create_new_installation_redirect.ts +0 -75
  126. package/fake-snippets-api/routes/api/github/repos/list_available.ts +0 -91
  127. package/fake-snippets-api/routes/api/github/repos/refresh.ts +0 -44
  128. package/fake-snippets-api/routes/api/health.ts +0 -9
  129. package/fake-snippets-api/routes/api/internal/sessions/create_without_auth.ts +0 -63
  130. package/fake-snippets-api/routes/api/order_files/get.ts +0 -28
  131. package/fake-snippets-api/routes/api/order_files/upload.ts +0 -46
  132. package/fake-snippets-api/routes/api/order_quotes/create.ts +0 -60
  133. package/fake-snippets-api/routes/api/order_quotes/create_all_vendor_quotes.ts +0 -30
  134. package/fake-snippets-api/routes/api/order_quotes/get.ts +0 -29
  135. package/fake-snippets-api/routes/api/orders/create.ts +0 -70
  136. package/fake-snippets-api/routes/api/orders/get.ts +0 -168
  137. package/fake-snippets-api/routes/api/orders/list.ts +0 -15
  138. package/fake-snippets-api/routes/api/orgs/add_member.ts +0 -52
  139. package/fake-snippets-api/routes/api/orgs/create.ts +0 -48
  140. package/fake-snippets-api/routes/api/orgs/get.ts +0 -39
  141. package/fake-snippets-api/routes/api/orgs/get_member.ts +0 -67
  142. package/fake-snippets-api/routes/api/orgs/list.ts +0 -31
  143. package/fake-snippets-api/routes/api/orgs/list_members.ts +0 -106
  144. package/fake-snippets-api/routes/api/orgs/remove_member.ts +0 -46
  145. package/fake-snippets-api/routes/api/orgs/update.ts +0 -118
  146. package/fake-snippets-api/routes/api/package_builds/get.ts +0 -70
  147. package/fake-snippets-api/routes/api/package_builds/list.ts +0 -97
  148. package/fake-snippets-api/routes/api/package_files/create.ts +0 -135
  149. package/fake-snippets-api/routes/api/package_files/create_or_update.ts +0 -194
  150. package/fake-snippets-api/routes/api/package_files/delete.ts +0 -109
  151. package/fake-snippets-api/routes/api/package_files/download.ts +0 -87
  152. package/fake-snippets-api/routes/api/package_files/get.ts +0 -68
  153. package/fake-snippets-api/routes/api/package_files/list.ts +0 -54
  154. package/fake-snippets-api/routes/api/package_releases/create.ts +0 -109
  155. package/fake-snippets-api/routes/api/package_releases/get.ts +0 -137
  156. package/fake-snippets-api/routes/api/package_releases/list.ts +0 -85
  157. package/fake-snippets-api/routes/api/package_releases/rebuild.ts +0 -66
  158. package/fake-snippets-api/routes/api/package_releases/update.ts +0 -122
  159. package/fake-snippets-api/routes/api/packages/add_star.ts +0 -84
  160. package/fake-snippets-api/routes/api/packages/create.ts +0 -136
  161. package/fake-snippets-api/routes/api/packages/delete.ts +0 -41
  162. package/fake-snippets-api/routes/api/packages/fork.ts +0 -165
  163. package/fake-snippets-api/routes/api/packages/generate_from_jlcpcb.ts +0 -111
  164. package/fake-snippets-api/routes/api/packages/get.ts +0 -81
  165. package/fake-snippets-api/routes/api/packages/images/[owner_github_username]/[unscoped_name]/[view_format].ts +0 -119
  166. package/fake-snippets-api/routes/api/packages/list.ts +0 -105
  167. package/fake-snippets-api/routes/api/packages/list_latest.ts +0 -29
  168. package/fake-snippets-api/routes/api/packages/list_trending.ts +0 -43
  169. package/fake-snippets-api/routes/api/packages/remove_star.ts +0 -70
  170. package/fake-snippets-api/routes/api/packages/search.ts +0 -19
  171. package/fake-snippets-api/routes/api/packages/update.ts +0 -112
  172. package/fake-snippets-api/routes/api/packages/update_ai_description.ts +0 -37
  173. package/fake-snippets-api/routes/api/proxy.ts +0 -128
  174. package/fake-snippets-api/routes/api/snippets/add_star.ts +0 -62
  175. package/fake-snippets-api/routes/api/snippets/create.ts +0 -184
  176. package/fake-snippets-api/routes/api/snippets/delete.ts +0 -41
  177. package/fake-snippets-api/routes/api/snippets/download.ts +0 -162
  178. package/fake-snippets-api/routes/api/snippets/generate_from_jlcpcb.ts +0 -48
  179. package/fake-snippets-api/routes/api/snippets/get.ts +0 -83
  180. package/fake-snippets-api/routes/api/snippets/get_image.ts +0 -65
  181. package/fake-snippets-api/routes/api/snippets/images/[author]/[snippet_name]/[typeFormat].ts +0 -80
  182. package/fake-snippets-api/routes/api/snippets/list.ts +0 -151
  183. package/fake-snippets-api/routes/api/snippets/list_latest.ts +0 -13
  184. package/fake-snippets-api/routes/api/snippets/list_trending.ts +0 -38
  185. package/fake-snippets-api/routes/api/snippets/remove_star.ts +0 -42
  186. package/fake-snippets-api/routes/api/snippets/search.ts +0 -18
  187. package/fake-snippets-api/routes/api/snippets/update.ts +0 -114
  188. package/fake-snippets-api/utils/normalizeProjectFilePath.ts +0 -60
  189. package/fake-snippets-api/utils/order-steps.ts +0 -20
  190. package/favicon.ico +0 -0
  191. package/index.html +0 -125
  192. package/landing.html +0 -23
  193. package/playwright-tests/ai-page.spec.ts +0 -19
  194. package/playwright-tests/circuit-json-import.spec.ts +0 -133
  195. package/playwright-tests/cmd-click.spec.ts +0 -43
  196. package/playwright-tests/dashboard-page.spec.ts +0 -10
  197. package/playwright-tests/editor-page.spec.ts +0 -15
  198. package/playwright-tests/exampleCircuitJson.ts +0 -498
  199. package/playwright-tests/files-dialog.spec.ts +0 -19
  200. package/playwright-tests/footprint-dialog/footprint-dialog.spec.ts +0 -27
  201. package/playwright-tests/footprint-dialog/footprint-insertion.spec.ts +0 -38
  202. package/playwright-tests/footprint-dialog/footprint-preview.spec.ts +0 -34
  203. package/playwright-tests/footprint-dialog/footprint-selection.spec.ts +0 -29
  204. package/playwright-tests/handle-manual-edits.spec.ts +0 -55
  205. package/playwright-tests/home-page.spec.ts +0 -10
  206. package/playwright-tests/images.spec.ts +0 -17
  207. package/playwright-tests/manual-edits.spec.ts +0 -89
  208. package/playwright-tests/preview-page.spec.ts +0 -7
  209. package/playwright-tests/profile-page.spec.ts +0 -108
  210. package/playwright-tests/quickstart-page.spec.ts +0 -10
  211. package/playwright-tests/search-links.spec.ts +0 -21
  212. package/playwright-tests/search.spec.ts +0 -27
  213. package/playwright-tests/snapshots/ai-page.spec.ts-AI-Page-lg.png +0 -0
  214. package/playwright-tests/snapshots/ai-page.spec.ts-AI-Page-md.png +0 -0
  215. package/playwright-tests/snapshots/ai-page.spec.ts-AI-Page-xs.png +0 -0
  216. package/playwright-tests/snapshots/cmd-click.spec.ts-underlined-imports.png +0 -0
  217. package/playwright-tests/snapshots/dashboard-page.spec.ts-Dashboard-page-lg.png +0 -0
  218. package/playwright-tests/snapshots/dashboard-page.spec.ts-Dashboard-page-md.png +0 -0
  219. package/playwright-tests/snapshots/dashboard-page.spec.ts-Dashboard-page-xs.png +0 -0
  220. package/playwright-tests/snapshots/editor-page.spec.ts-editor-with-snippet.png +0 -0
  221. package/playwright-tests/snapshots/error-fallback.spec.ts-error-fallback-lg.png +0 -0
  222. package/playwright-tests/snapshots/error-fallback.spec.ts-error-fallback-md.png +0 -0
  223. package/playwright-tests/snapshots/error-fallback.spec.ts-error-fallback-xs.png +0 -0
  224. package/playwright-tests/snapshots/files-dialog.spec.ts-view-snippet-files.png +0 -0
  225. package/playwright-tests/snapshots/footprint-dialog/footprint-dialog.spec.ts-footprint-preview-lg.png +0 -0
  226. package/playwright-tests/snapshots/footprint-dialog/footprint-dialog.spec.ts-footprint-preview-md.png +0 -0
  227. package/playwright-tests/snapshots/footprint-dialog/footprint-dialog.spec.ts-footprint-preview-xs.png +0 -0
  228. package/playwright-tests/snapshots/footprint-dialog/footprint-insertion.spec.ts-footprint-insertion-lg.png +0 -0
  229. package/playwright-tests/snapshots/footprint-dialog/footprint-insertion.spec.ts-footprint-insertion-md.png +0 -0
  230. package/playwright-tests/snapshots/footprint-dialog/footprint-insertion.spec.ts-footprint-insertion-xs.png +0 -0
  231. package/playwright-tests/snapshots/footprint-dialog/footprint-preview.spec.ts-footprint-preview-lg.png +0 -0
  232. package/playwright-tests/snapshots/footprint-dialog/footprint-preview.spec.ts-footprint-preview-md.png +0 -0
  233. package/playwright-tests/snapshots/footprint-dialog/footprint-preview.spec.ts-footprint-preview-xs.png +0 -0
  234. package/playwright-tests/snapshots/footprint-dialog/footprint-selection.spec.ts-footprint-preview-lg.png +0 -0
  235. package/playwright-tests/snapshots/footprint-dialog/footprint-selection.spec.ts-footprint-preview-md.png +0 -0
  236. package/playwright-tests/snapshots/footprint-dialog/footprint-selection.spec.ts-footprint-preview-xs.png +0 -0
  237. package/playwright-tests/snapshots/handle-manual-edits.spec.ts-handle-manual-edits.png +0 -0
  238. package/playwright-tests/snapshots/home-page.spec.ts-Home-page-lg.png +0 -0
  239. package/playwright-tests/snapshots/home-page.spec.ts-Home-page-md.png +0 -0
  240. package/playwright-tests/snapshots/home-page.spec.ts-Home-page-xs.png +0 -0
  241. package/playwright-tests/snapshots/images.spec.ts-pcb-image.png +0 -0
  242. package/playwright-tests/snapshots/images.spec.ts-schematic-image.png +0 -0
  243. package/playwright-tests/snapshots/manual-edits.spec.ts-editor-manual-edits.png +0 -0
  244. package/playwright-tests/snapshots/manual-edits.spec.ts-manual-edits-view.png +0 -0
  245. package/playwright-tests/snapshots/preview-page.spec.ts-preview-snippet-pcb.png +0 -0
  246. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-before-delete.png +0 -0
  247. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-delete-dialog.png +0 -0
  248. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-dropdown-open.png +0 -0
  249. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-snippets-tab.png +0 -0
  250. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-starred-tab.png +0 -0
  251. package/playwright-tests/snapshots/profile-page.spec.ts-snippet-page-open-after-star-click.png +0 -0
  252. package/playwright-tests/snapshots/quickstart-page.spec.ts-Quickstart-Pagelg.png +0 -0
  253. package/playwright-tests/snapshots/quickstart-page.spec.ts-Quickstart-Pagemd.png +0 -0
  254. package/playwright-tests/snapshots/quickstart-page.spec.ts-Quickstart-Pagexs.png +0 -0
  255. package/playwright-tests/snapshots/search-links.spec.ts-search-links.png +0 -0
  256. package/playwright-tests/snapshots/search.spec.ts-search-lg.png +0 -0
  257. package/playwright-tests/snapshots/search.spec.ts-search-md.png +0 -0
  258. package/playwright-tests/snapshots/search.spec.ts-search-xs.png +0 -0
  259. package/playwright-tests/snapshots/star.spec.ts-remove-star-button.png +0 -0
  260. package/playwright-tests/snapshots/star.spec.ts-star-button.png +0 -0
  261. package/playwright-tests/snapshots/update-description.spec.ts-update-description.png +0 -0
  262. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-after-lg.png +0 -0
  263. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-after-md.png +0 -0
  264. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-after-xs.png +0 -0
  265. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-before-lg.png +0 -0
  266. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-before-md.png +0 -0
  267. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-before-xs.png +0 -0
  268. package/playwright-tests/snapshots/view-snippet.spec.ts-view-snippet-files.png +0 -0
  269. package/playwright-tests/star.spec.ts +0 -40
  270. package/playwright-tests/update-description.spec.ts +0 -18
  271. package/playwright-tests/view-snippet.spec.ts +0 -35
  272. package/playwright-tests/viewports.ts +0 -5
  273. package/playwright.config.ts +0 -27
  274. package/postcss.config.js +0 -6
  275. package/public/robots.txt +0 -9
  276. package/renovate.json +0 -25
  277. package/scripts/generate-image-sizes.ts +0 -57
  278. package/scripts/generate-sitemap.ts +0 -103
  279. package/scripts/generate_bundle_stats.js +0 -208
  280. package/scripts/snapshot.ts +0 -35
  281. package/src/App.tsx +0 -314
  282. package/src/ContextProviders.tsx +0 -94
  283. package/src/assets/originals/editor_example_1.webp +0 -0
  284. package/src/assets/originals/editor_example_1_more_square.webp +0 -0
  285. package/src/assets/originals/editor_example_2.webp +0 -0
  286. package/src/assets/originals/example_schematic.webp +0 -0
  287. package/src/components/AiChatMessage.tsx +0 -86
  288. package/src/components/Analytics.tsx +0 -23
  289. package/src/components/BomTable.tsx +0 -69
  290. package/src/components/ChatInput.tsx +0 -53
  291. package/src/components/CircuitJsonImportDialog.tsx +0 -269
  292. package/src/components/CircuitToSvgWithMouseControl.tsx +0 -78
  293. package/src/components/CmdKMenu.tsx +0 -809
  294. package/src/components/CreateNewSnippetWithAiHero.tsx +0 -81
  295. package/src/components/CreateReleaseDialog.tsx +0 -124
  296. package/src/components/DownloadButtonAndMenu.tsx +0 -443
  297. package/src/components/ErrorFallback.tsx +0 -25
  298. package/src/components/ErrorOutline.tsx +0 -35
  299. package/src/components/ErrorTabContent.tsx +0 -122
  300. package/src/components/ExpandableText.tsx +0 -29
  301. package/src/components/FAQ.tsx +0 -189
  302. package/src/components/FileSidebar.tsx +0 -271
  303. package/src/components/Footer.tsx +0 -144
  304. package/src/components/GithubAvatarWithFallback.tsx +0 -35
  305. package/src/components/Header.tsx +0 -202
  306. package/src/components/Header2.tsx +0 -202
  307. package/src/components/HeaderDropdown.tsx +0 -88
  308. package/src/components/HeaderLogin.tsx +0 -105
  309. package/src/components/HiddenFilesDropdown.tsx +0 -42
  310. package/src/components/ImageWithFallback.tsx +0 -37
  311. package/src/components/LatestSnippets.tsx +0 -39
  312. package/src/components/NotFound.tsx +0 -37
  313. package/src/components/OptimizedImage.tsx +0 -100
  314. package/src/components/PackageBreadcrumb.tsx +0 -105
  315. package/src/components/PackageBuildsPage/ErrorObject.ts +0 -12
  316. package/src/components/PackageBuildsPage/capitalCase.ts +0 -4
  317. package/src/components/PackageBuildsPage/getColorForDisplayStatus.ts +0 -17
  318. package/src/components/PackageCard.tsx +0 -191
  319. package/src/components/PackageCardSkeleton.tsx +0 -17
  320. package/src/components/PackageLink.tsx +0 -29
  321. package/src/components/PackageSearchResults.tsx +0 -81
  322. package/src/components/PackagesList.tsx +0 -71
  323. package/src/components/PcbViewerWithContainerHeight.tsx +0 -47
  324. package/src/components/PrefetchPageLink.tsx +0 -114
  325. package/src/components/PreviewEmptyState.tsx +0 -16
  326. package/src/components/ProfileRouter.tsx +0 -30
  327. package/src/components/RunButton.tsx +0 -27
  328. package/src/components/SearchComponent.tsx +0 -282
  329. package/src/components/SentryNotFoundReporter.tsx +0 -44
  330. package/src/components/SnippetTypeIcon.tsx +0 -60
  331. package/src/components/StaticPreviewContent.tsx +0 -89
  332. package/src/components/StaticViewSnippetSidebar.tsx +0 -100
  333. package/src/components/SuspenseRunFrame.tsx +0 -28
  334. package/src/components/TableViewer/CircuitJsonTableViewer.tsx +0 -316
  335. package/src/components/TableViewer/ClickableText.tsx +0 -21
  336. package/src/components/TableViewer/HeaderCell.tsx +0 -27
  337. package/src/components/TableViewer/Modal.tsx +0 -39
  338. package/src/components/TrendingPackagesCarousel.tsx +0 -79
  339. package/src/components/TypeBadge.tsx +0 -31
  340. package/src/components/UserCard.tsx +0 -80
  341. package/src/components/ViewPackagePage/components/ShikiCodeViewer.tsx +0 -49
  342. package/src/components/ViewPackagePage/components/build-status.tsx +0 -38
  343. package/src/components/ViewPackagePage/components/important-files-view.tsx +0 -611
  344. package/src/components/ViewPackagePage/components/main-content-header.tsx +0 -181
  345. package/src/components/ViewPackagePage/components/main-content-view-selector.tsx +0 -167
  346. package/src/components/ViewPackagePage/components/markdown-viewer.tsx +0 -88
  347. package/src/components/ViewPackagePage/components/mobile-sidebar.tsx +0 -301
  348. package/src/components/ViewPackagePage/components/package-header.tsx +0 -264
  349. package/src/components/ViewPackagePage/components/preview-image-squares.tsx +0 -47
  350. package/src/components/ViewPackagePage/components/repo-page-content.tsx +0 -266
  351. package/src/components/ViewPackagePage/components/sidebar-about-section.tsx +0 -223
  352. package/src/components/ViewPackagePage/components/sidebar-packages-section.tsx +0 -16
  353. package/src/components/ViewPackagePage/components/sidebar-releases-section.tsx +0 -126
  354. package/src/components/ViewPackagePage/components/sidebar.tsx +0 -29
  355. package/src/components/ViewPackagePage/components/tab-views/3d-view.tsx +0 -43
  356. package/src/components/ViewPackagePage/components/tab-views/bom-view.tsx +0 -30
  357. package/src/components/ViewPackagePage/components/tab-views/files-view.tsx +0 -295
  358. package/src/components/ViewPackagePage/components/tab-views/pcb-view.tsx +0 -35
  359. package/src/components/ViewPackagePage/components/tab-views/schematic-view.tsx +0 -38
  360. package/src/components/ViewPackagePage/components/theme-toggle.tsx +0 -40
  361. package/src/components/ViewPackagePage/hooks/use-current-package-circuit-json.ts +0 -46
  362. package/src/components/ViewPackagePage/hooks/use-mobile.tsx +0 -19
  363. package/src/components/ViewPackagePage/hooks/use-toast.tsx +0 -69
  364. package/src/components/ViewPackagePage/utils/fuzz-search.ts +0 -121
  365. package/src/components/ViewPackagePage/utils/get-license-content.ts +0 -119
  366. package/src/components/ViewPackagePage/utils/is-hidden-file.ts +0 -55
  367. package/src/components/ViewPackagePage/utils/is-package-file-important.ts +0 -35
  368. package/src/components/ViewPackagePage/utils/is-within-directory.ts +0 -32
  369. package/src/components/dialogs/GitHubRepositorySelector.tsx +0 -300
  370. package/src/components/dialogs/confirm-delete-package-dialog.tsx +0 -74
  371. package/src/components/dialogs/confirm-discard-changes-dialog.tsx +0 -73
  372. package/src/components/dialogs/create-use-dialog.tsx +0 -40
  373. package/src/components/dialogs/edit-description-dialog.tsx +0 -96
  374. package/src/components/dialogs/edit-package-details-dialog.tsx +0 -474
  375. package/src/components/dialogs/files-dialog.tsx +0 -70
  376. package/src/components/dialogs/import-component-dialog.tsx +0 -32
  377. package/src/components/dialogs/import-package-dialog.tsx +0 -90
  378. package/src/components/dialogs/new-package-save-prompt-dialog.tsx +0 -199
  379. package/src/components/dialogs/package-visibility-settings-dialog.tsx +0 -93
  380. package/src/components/dialogs/pcb-download-dialog.tsx +0 -113
  381. package/src/components/dialogs/rename-package-dialog.tsx +0 -86
  382. package/src/components/dialogs/rename-snippet-dialog.tsx +0 -81
  383. package/src/components/dialogs/update-package-description-dialog.tsx +0 -96
  384. package/src/components/dialogs/view-ts-files-dialog.tsx +0 -664
  385. package/src/components/organization/OrganizationCard.tsx +0 -202
  386. package/src/components/organization/OrganizationCardSkeleton.tsx +0 -55
  387. package/src/components/organization/OrganizationHeader.tsx +0 -140
  388. package/src/components/organization/OrganizationMembers.tsx +0 -117
  389. package/src/components/package-port/CodeAndPreview.tsx +0 -253
  390. package/src/components/package-port/CodeEditor.tsx +0 -866
  391. package/src/components/package-port/CodeEditorHeader.tsx +0 -427
  392. package/src/components/package-port/EditorNav.tsx +0 -606
  393. package/src/components/package-port/GlobalFindReplace.tsx +0 -681
  394. package/src/components/package-port/QuickOpen.tsx +0 -241
  395. package/src/components/preview/BuildsList.tsx +0 -237
  396. package/src/components/preview/ConnectedPackagesList.tsx +0 -229
  397. package/src/components/preview/ConnectedRepoOverview.tsx +0 -588
  398. package/src/components/preview/PackageReleasesDashboard.tsx +0 -228
  399. package/src/components/preview/index.tsx +0 -54
  400. package/src/components/ui/accordion.tsx +0 -55
  401. package/src/components/ui/alert-dialog.tsx +0 -139
  402. package/src/components/ui/alert.tsx +0 -59
  403. package/src/components/ui/aspect-ratio.tsx +0 -5
  404. package/src/components/ui/avatar.tsx +0 -48
  405. package/src/components/ui/badge.tsx +0 -36
  406. package/src/components/ui/breadcrumb.tsx +0 -118
  407. package/src/components/ui/button.tsx +0 -58
  408. package/src/components/ui/calendar.tsx +0 -73
  409. package/src/components/ui/card.tsx +0 -76
  410. package/src/components/ui/carousel.tsx +0 -260
  411. package/src/components/ui/chart.tsx +0 -363
  412. package/src/components/ui/checkbox.tsx +0 -28
  413. package/src/components/ui/collapsible.tsx +0 -9
  414. package/src/components/ui/combobox.tsx +0 -178
  415. package/src/components/ui/command.tsx +0 -151
  416. package/src/components/ui/context-menu.tsx +0 -202
  417. package/src/components/ui/dialog.tsx +0 -120
  418. package/src/components/ui/drawer.tsx +0 -116
  419. package/src/components/ui/dropdown-menu.tsx +0 -203
  420. package/src/components/ui/form.tsx +0 -182
  421. package/src/components/ui/hover-card.tsx +0 -27
  422. package/src/components/ui/input.tsx +0 -25
  423. package/src/components/ui/label.tsx +0 -24
  424. package/src/components/ui/menubar.tsx +0 -238
  425. package/src/components/ui/navigation-menu.tsx +0 -129
  426. package/src/components/ui/pagination.tsx +0 -121
  427. package/src/components/ui/popover.tsx +0 -31
  428. package/src/components/ui/progress.tsx +0 -26
  429. package/src/components/ui/radio-group.tsx +0 -42
  430. package/src/components/ui/resizable.tsx +0 -43
  431. package/src/components/ui/role-badge.tsx +0 -27
  432. package/src/components/ui/scroll-area.tsx +0 -46
  433. package/src/components/ui/searchable-select.tsx +0 -94
  434. package/src/components/ui/select.tsx +0 -162
  435. package/src/components/ui/separator.tsx +0 -29
  436. package/src/components/ui/sheet.tsx +0 -141
  437. package/src/components/ui/skeleton.tsx +0 -18
  438. package/src/components/ui/slider.tsx +0 -26
  439. package/src/components/ui/sonner.tsx +0 -30
  440. package/src/components/ui/switch.tsx +0 -27
  441. package/src/components/ui/table.tsx +0 -120
  442. package/src/components/ui/tabs.tsx +0 -53
  443. package/src/components/ui/textarea.tsx +0 -24
  444. package/src/components/ui/toast.tsx +0 -128
  445. package/src/components/ui/toaster.tsx +0 -1
  446. package/src/components/ui/toggle-group.tsx +0 -59
  447. package/src/components/ui/toggle.tsx +0 -43
  448. package/src/components/ui/tooltip.tsx +0 -28
  449. package/src/components/ui/tree-view.tsx +0 -563
  450. package/src/entry-server.tsx +0 -12
  451. package/src/hooks/use-account-balance.ts +0 -25
  452. package/src/hooks/use-add-org-member-mutation.ts +0 -51
  453. package/src/hooks/use-ai-api.ts +0 -35
  454. package/src/hooks/use-ai-review.ts +0 -31
  455. package/src/hooks/use-axios.ts +0 -20
  456. package/src/hooks/use-code-completion-ai-api.ts +0 -11
  457. package/src/hooks/use-copy-to-clipboard.ts +0 -26
  458. package/src/hooks/use-create-datasheet.ts +0 -30
  459. package/src/hooks/use-create-org-mutation.ts +0 -38
  460. package/src/hooks/use-create-package-files-mutation.ts +0 -76
  461. package/src/hooks/use-create-package-mutation.ts +0 -54
  462. package/src/hooks/use-create-package-release-mutation.ts +0 -107
  463. package/src/hooks/use-create-release-dialog.ts +0 -160
  464. package/src/hooks/use-create-snippet-mutation.ts +0 -65
  465. package/src/hooks/use-current-package-id.ts +0 -16
  466. package/src/hooks/use-current-package-info.ts +0 -32
  467. package/src/hooks/use-current-package-release.ts +0 -48
  468. package/src/hooks/use-current-snippet-id.ts +0 -78
  469. package/src/hooks/use-current-snippet.ts +0 -24
  470. package/src/hooks/use-datasheet.ts +0 -18
  471. package/src/hooks/use-debounce.ts +0 -17
  472. package/src/hooks/use-delete-package.ts +0 -45
  473. package/src/hooks/use-download-zip.ts +0 -50
  474. package/src/hooks/use-fork-package-mutation.ts +0 -61
  475. package/src/hooks/use-global-store.ts +0 -36
  476. package/src/hooks/use-hotkey.ts +0 -116
  477. package/src/hooks/use-hydration.ts +0 -30
  478. package/src/hooks/use-is-using-fake-api.ts +0 -3
  479. package/src/hooks/use-jlcpcb-component-import.tsx +0 -164
  480. package/src/hooks/use-list-org-members.ts +0 -32
  481. package/src/hooks/use-list-user-orgs.ts +0 -25
  482. package/src/hooks/use-now.ts +0 -12
  483. package/src/hooks/use-org-by-github-handle.ts +0 -24
  484. package/src/hooks/use-org.ts +0 -24
  485. package/src/hooks/use-organization.ts +0 -42
  486. package/src/hooks/use-package-as-snippet.ts +0 -81
  487. package/src/hooks/use-package-builds.ts +0 -91
  488. package/src/hooks/use-package-by-package-id.ts +0 -24
  489. package/src/hooks/use-package-by-package-name.ts +0 -29
  490. package/src/hooks/use-package-details-form.ts +0 -146
  491. package/src/hooks/use-package-files.ts +0 -122
  492. package/src/hooks/use-package-release-by-id-or-version.ts +0 -45
  493. package/src/hooks/use-package-release-images.ts +0 -105
  494. package/src/hooks/use-package-release.ts +0 -124
  495. package/src/hooks/use-package-stars.ts +0 -163
  496. package/src/hooks/use-package.ts +0 -24
  497. package/src/hooks/use-packages-base-api-url.ts +0 -3
  498. package/src/hooks/use-preview-images.ts +0 -78
  499. package/src/hooks/use-rebuild-package-release-mutation.ts +0 -41
  500. package/src/hooks/use-remove-org-member-mutation.ts +0 -32
  501. package/src/hooks/use-request-ai-review-mutation.ts +0 -54
  502. package/src/hooks/use-run-tsx/eval-compiled-js.ts +0 -9
  503. package/src/hooks/use-shiki-highlighter.ts +0 -33
  504. package/src/hooks/use-sign-in.ts +0 -24
  505. package/src/hooks/use-snippet-by-name.ts +0 -25
  506. package/src/hooks/use-snippet.ts +0 -24
  507. package/src/hooks/use-toast.tsx +0 -90
  508. package/src/hooks/use-update-ai-description-mutation.ts +0 -42
  509. package/src/hooks/use-update-org-mutation.ts +0 -41
  510. package/src/hooks/use-url-params.ts +0 -31
  511. package/src/hooks/use-warn-user-on-page-change.ts +0 -90
  512. package/src/hooks/useFileManagement.ts +0 -602
  513. package/src/hooks/useForkPackageMutation.ts +0 -50
  514. package/src/hooks/useForkSnippetMutation.ts +0 -53
  515. package/src/hooks/useOptimizedPackageFilesLoader.ts +0 -136
  516. package/src/hooks/usePackageFilesLoader.ts +0 -58
  517. package/src/hooks/useUpdatePackageFilesMutation.ts +0 -131
  518. package/src/hooks/useUpdatePackageMutation.ts +0 -63
  519. package/src/index.css +0 -108
  520. package/src/lib/__tests__/constants.test.ts +0 -66
  521. package/src/lib/base64ToBytes.ts +0 -5
  522. package/src/lib/bytesToBase64.ts +0 -4
  523. package/src/lib/codemirror/basic-setup.ts +0 -67
  524. package/src/lib/constants.ts +0 -23
  525. package/src/lib/decodeUrlHashToFsMap.ts +0 -17
  526. package/src/lib/decodeUrlHashToText.ts +0 -15
  527. package/src/lib/defaultCodeForBlankCode.tsx +0 -7
  528. package/src/lib/download-fns/createBlobURL.ts +0 -4
  529. package/src/lib/download-fns/download-assembly-svg.ts +0 -12
  530. package/src/lib/download-fns/download-circuit-json-fn.ts +0 -12
  531. package/src/lib/download-fns/download-circuit-png.ts +0 -96
  532. package/src/lib/download-fns/download-dsn-file-fn.ts +0 -12
  533. package/src/lib/download-fns/download-fabrication-files.ts +0 -233
  534. package/src/lib/download-fns/download-gltf-from-circuit-json.ts +0 -44
  535. package/src/lib/download-fns/download-gltf.ts +0 -43
  536. package/src/lib/download-fns/download-kicad-files.ts +0 -38
  537. package/src/lib/download-fns/download-pcb-svg.ts +0 -35
  538. package/src/lib/download-fns/download-png-utils.ts +0 -31
  539. package/src/lib/download-fns/download-readable-netlist.ts +0 -12
  540. package/src/lib/download-fns/download-schematic-svg.ts +0 -12
  541. package/src/lib/download-fns/download-simple-route-json.ts +0 -17
  542. package/src/lib/download-fns/download-spice-file.ts +0 -13
  543. package/src/lib/download-fns/download-step.ts +0 -12
  544. package/src/lib/encodeFsMapToUrlHash.ts +0 -13
  545. package/src/lib/encodeTextToUrlHash.ts +0 -17
  546. package/src/lib/get-snippet-template.ts +0 -26
  547. package/src/lib/getLicenseFromLicenseContent.ts +0 -67
  548. package/src/lib/handleManualEditsImport.tsx +0 -65
  549. package/src/lib/handleManualEditsImportWithSupportForMultipleFiles.ts +0 -67
  550. package/src/lib/normalize-svg-for-tile.ts +0 -50
  551. package/src/lib/populate-query-cache-with-ssr-data.ts +0 -53
  552. package/src/lib/posthog.ts +0 -17
  553. package/src/lib/react-query-api-failure-tracking.ts +0 -148
  554. package/src/lib/sentry.ts +0 -14
  555. package/src/lib/templates/blank-3d-model-template.ts +0 -12
  556. package/src/lib/templates/blank-circuit-board-template.ts +0 -20
  557. package/src/lib/templates/blank-footprint-template.ts +0 -29
  558. package/src/lib/templates/blank-package-template.ts +0 -21
  559. package/src/lib/templates/blinking-led-board-template.ts +0 -64
  560. package/src/lib/templates/usb-c-led-flashlight-template.ts +0 -22
  561. package/src/lib/ts-lib-cache.ts +0 -162
  562. package/src/lib/types.ts +0 -31
  563. package/src/lib/utils/checkIfManualEditsImported.ts +0 -20
  564. package/src/lib/utils/findTargetFile.ts +0 -97
  565. package/src/lib/utils/formatTimeAgo.ts +0 -10
  566. package/src/lib/utils/getPackagePreviewImageUrl.ts +0 -15
  567. package/src/lib/utils/index.ts +0 -6
  568. package/src/lib/utils/isComponentExported.ts +0 -10
  569. package/src/lib/utils/isUuid.ts +0 -5
  570. package/src/lib/utils/isValidFileName.ts +0 -17
  571. package/src/lib/utils/load-prettier.ts +0 -23
  572. package/src/lib/utils/member-role.tsx +0 -61
  573. package/src/lib/utils/package-utils.ts +0 -7
  574. package/src/lib/utils/parseJsonOrNull.ts +0 -8
  575. package/src/lib/utils/pcbManualEditEventHandler.ts +0 -156
  576. package/src/lib/utils/resolveRelativePath.ts +0 -40
  577. package/src/lib/utils/timeAgo.ts +0 -20
  578. package/src/lib/utils/toastManualEditConflicts.tsx +0 -39
  579. package/src/lib/utils/transformFilesToTreeData.tsx +0 -195
  580. package/src/main.tsx +0 -15
  581. package/src/pages/404.tsx +0 -23
  582. package/src/pages/authorize.tsx +0 -208
  583. package/src/pages/create-organization.tsx +0 -169
  584. package/src/pages/dashboard.tsx +0 -254
  585. package/src/pages/datasheet.tsx +0 -198
  586. package/src/pages/datasheets.tsx +0 -148
  587. package/src/pages/dev-login.tsx +0 -68
  588. package/src/pages/editor.tsx +0 -54
  589. package/src/pages/landing.tsx +0 -237
  590. package/src/pages/latest.tsx +0 -145
  591. package/src/pages/my-orders.tsx +0 -54
  592. package/src/pages/organization-profile.tsx +0 -197
  593. package/src/pages/organization-settings.tsx +0 -571
  594. package/src/pages/package-editor.tsx +0 -60
  595. package/src/pages/preview-release.tsx +0 -209
  596. package/src/pages/quickstart.tsx +0 -258
  597. package/src/pages/release-builds.tsx +0 -99
  598. package/src/pages/release-detail.tsx +0 -211
  599. package/src/pages/releases.tsx +0 -55
  600. package/src/pages/search.tsx +0 -288
  601. package/src/pages/settings-redirect.tsx +0 -44
  602. package/src/pages/trending.tsx +0 -201
  603. package/src/pages/user-profile.tsx +0 -330
  604. package/src/pages/user-settings.tsx +0 -161
  605. package/src/pages/view-package.tsx +0 -90
  606. package/src/types/package.ts +0 -4
  607. package/src/vite-env.d.ts +0 -1
  608. package/tailwind.config.js +0 -47
  609. package/tsconfig.json +0 -30
  610. package/vercel.json +0 -50
  611. package/vite.config.ts +0 -236
  612. package/winterspec.config.ts +0 -6
@@ -1,611 +0,0 @@
1
- import { useState, useEffect, useMemo, useCallback } from "react"
2
- import {
3
- Edit,
4
- FileText,
5
- Code,
6
- Copy,
7
- CopyCheck,
8
- Loader2,
9
- RefreshCcwIcon,
10
- SparklesIcon,
11
- } from "lucide-react"
12
- import { Skeleton } from "@/components/ui/skeleton"
13
- import { Button } from "@/components/ui/button"
14
- import { usePackageFile } from "@/hooks/use-package-files"
15
- import { ShikiCodeViewer, SKELETON_WIDTHS } from "./ShikiCodeViewer"
16
- import MarkdownViewer from "./markdown-viewer"
17
- import { useGlobalStore } from "@/hooks/use-global-store"
18
- import { useCurrentPackageCircuitJson } from "../hooks/use-current-package-circuit-json"
19
- import { useOrganization } from "@/hooks/use-organization"
20
- import { Package } from "fake-snippets-api/lib/db/schema"
21
-
22
- interface PackageFile {
23
- package_file_id: string
24
- package_release_id: string
25
- file_path: string
26
- created_at: string
27
- content_text?: string | null
28
- }
29
-
30
- interface ImportantFilesViewProps {
31
- importantFiles?: PackageFile[]
32
- isFetched?: boolean
33
- onEditClicked?: (file_path?: string | null) => void
34
- aiReviewText?: string | null
35
- aiReviewRequested?: boolean
36
- onRequestAiReview?: () => void
37
- onRequestAiDescriptionUpdate?: () => void
38
- onLicenseFileRequested?: boolean
39
- pkg?: Package
40
- }
41
-
42
- type TabType = "ai" | "ai-review" | "file"
43
-
44
- interface TabInfo {
45
- type: TabType
46
- filePath?: string | null
47
- label: string
48
- icon: React.ReactNode
49
- }
50
-
51
- export default function ImportantFilesView({
52
- importantFiles = [],
53
- aiReviewText,
54
- aiReviewRequested,
55
- onRequestAiReview,
56
- onRequestAiDescriptionUpdate,
57
- isFetched = false,
58
- onEditClicked,
59
- onLicenseFileRequested,
60
- pkg,
61
- }: ImportantFilesViewProps) {
62
- const [activeTab, setActiveTab] = useState<TabInfo | null>(null)
63
- const [copyState, setCopyState] = useState<"copy" | "copied">("copy")
64
- const { session: user } = useGlobalStore()
65
-
66
- const { organization } = useOrganization(
67
- pkg?.owner_org_id
68
- ? { orgId: String(pkg.owner_org_id) }
69
- : pkg?.owner_github_username
70
- ? { github_handle: pkg.owner_github_username }
71
- : {},
72
- )
73
-
74
- // Memoized computed values
75
- const hasAiContent = useMemo(
76
- () => Boolean(pkg?.ai_description || pkg?.ai_usage_instructions),
77
- [pkg?.ai_description, pkg?.ai_usage_instructions],
78
- )
79
- const hasAiReview = useMemo(() => Boolean(aiReviewText), [aiReviewText])
80
- const isOwner = useMemo(
81
- () => user?.github_username === pkg?.owner_github_username,
82
- [user?.github_username, pkg?.owner_github_username],
83
- )
84
- const canManagePackage = useMemo(() => {
85
- if (isOwner) return isOwner
86
- if (organization) {
87
- return organization.user_permissions?.can_manage_package
88
- }
89
- return false
90
- }, [isOwner, organization])
91
-
92
- // File type utilities
93
- const isLicenseFile = useCallback((filePath: string) => {
94
- const lowerPath = filePath.toLowerCase()
95
- return (
96
- lowerPath === "license" ||
97
- lowerPath.endsWith("/license") ||
98
- lowerPath === "license.txt" ||
99
- lowerPath.endsWith("/license.txt") ||
100
- lowerPath === "license.md" ||
101
- lowerPath.endsWith("/license.md")
102
- )
103
- }, [])
104
-
105
- const isReadmeFile = useCallback((filePath: string) => {
106
- const lowerPath = filePath.toLowerCase()
107
- return lowerPath.endsWith("readme.md") || lowerPath.endsWith("readme")
108
- }, [])
109
-
110
- const isCodeFile = useCallback((filePath: string) => {
111
- return (
112
- filePath.endsWith(".js") ||
113
- filePath.endsWith(".jsx") ||
114
- filePath.endsWith(".ts") ||
115
- filePath.endsWith(".tsx")
116
- )
117
- }, [])
118
-
119
- const isMarkdownFile = useCallback(
120
- (filePath: string) => {
121
- return filePath.endsWith(".md") || isReadmeFile(filePath)
122
- },
123
- [isReadmeFile],
124
- )
125
-
126
- const getFileName = useCallback((path: string) => {
127
- const parts = path.split("/")
128
- return parts[parts.length - 1]
129
- }, [])
130
-
131
- const getFileIcon = useCallback(
132
- (path: string) => {
133
- return isCodeFile(path) ? (
134
- <Code className="h-3.5 w-3.5 mr-1.5" />
135
- ) : (
136
- <FileText className="h-3.5 w-3.5 mr-1.5" />
137
- )
138
- },
139
- [isCodeFile],
140
- )
141
-
142
- // Available tabs computation
143
- const availableTabs = useMemo((): TabInfo[] => {
144
- const tabs: TabInfo[] = []
145
-
146
- // Only show AI description tab if there's actual AI content
147
- if (hasAiContent) {
148
- tabs.push({
149
- type: "ai",
150
- filePath: null,
151
- label: "Description",
152
- icon: <SparklesIcon className="h-3.5 w-3.5 mr-1.5" />,
153
- })
154
- }
155
-
156
- // Only show AI review tab if there's actual AI review content
157
- if (hasAiReview || canManagePackage) {
158
- tabs.push({
159
- type: "ai-review",
160
- filePath: null,
161
- label: "AI Review",
162
- icon: <SparklesIcon className="h-3.5 w-3.5 mr-1.5" />,
163
- })
164
- }
165
-
166
- importantFiles.forEach((file) => {
167
- tabs.push({
168
- type: "file",
169
- filePath: file.file_path,
170
- label: getFileName(file.file_path),
171
- icon: getFileIcon(file.file_path),
172
- })
173
- })
174
-
175
- return tabs
176
- }, [hasAiContent, hasAiReview, importantFiles, getFileName, getFileIcon])
177
-
178
- // Find default tab with fallback logic
179
- const getDefaultTab = useCallback((): TabInfo | null => {
180
- if (!isFetched || availableTabs.length === 0) return null
181
-
182
- // Priority 1: README file
183
- const readmeTab = availableTabs.find(
184
- (tab) =>
185
- tab.type === "file" && tab.filePath && isReadmeFile(tab.filePath),
186
- )
187
- if (readmeTab) return readmeTab
188
-
189
- // Priority 2: AI content (only if available)
190
- const aiTab = availableTabs.find((tab) => tab.type === "ai" && hasAiContent)
191
- if (aiTab) return aiTab
192
-
193
- // Priority 3: AI review
194
- const aiReviewTab = availableTabs.find(
195
- (tab) => tab.type === "ai-review" && hasAiReview,
196
- )
197
- if (aiReviewTab) return aiReviewTab
198
-
199
- // Priority 4: First file
200
- const firstFileTab = availableTabs.find((tab) => tab.type === "file")
201
- if (firstFileTab) return firstFileTab
202
-
203
- return null
204
- }, [isFetched, availableTabs, isReadmeFile])
205
-
206
- // Handle tab selection with validation
207
- const selectTab = useCallback(
208
- (tab: TabInfo) => {
209
- // Validate that the tab still exists (for file tabs)
210
- if (tab.type === "file" && tab.filePath) {
211
- const fileExists = importantFiles.some(
212
- (file) => file.file_path === tab.filePath,
213
- )
214
- if (!fileExists) {
215
- // File was deleted, fallback to default tab
216
- const defaultTab = getDefaultTab()
217
- setActiveTab(defaultTab)
218
- return
219
- }
220
- }
221
- setActiveTab(tab)
222
- },
223
- [importantFiles, getDefaultTab],
224
- )
225
-
226
- // Handle license file request
227
- useEffect(() => {
228
- if (onLicenseFileRequested && importantFiles.length > 0) {
229
- const licenseTab = availableTabs.find(
230
- (tab) =>
231
- tab.type === "file" && tab.filePath && isLicenseFile(tab.filePath),
232
- )
233
-
234
- if (licenseTab) {
235
- setActiveTab(licenseTab)
236
- } else {
237
- // License file not found, fallback to default
238
- const defaultTab = getDefaultTab()
239
- setActiveTab(defaultTab)
240
- }
241
- }
242
- }, [
243
- onLicenseFileRequested,
244
- importantFiles,
245
- availableTabs,
246
- isLicenseFile,
247
- getDefaultTab,
248
- ])
249
-
250
- // Set default tab when no tab is active
251
- useEffect(() => {
252
- if (activeTab === null && isFetched) {
253
- const defaultTab = getDefaultTab()
254
- setActiveTab(defaultTab)
255
- }
256
- }, [activeTab, isFetched, getDefaultTab])
257
-
258
- // Validate active tab still exists (handles file deletion)
259
- useEffect(() => {
260
- if (activeTab?.type === "file" && activeTab.filePath) {
261
- const fileExists = importantFiles.some(
262
- (file) => file.file_path === activeTab.filePath,
263
- )
264
- if (!fileExists) {
265
- // Active file was deleted, fallback to default
266
- const defaultTab = getDefaultTab()
267
- setActiveTab(defaultTab)
268
- }
269
- }
270
- }, [activeTab, importantFiles, getDefaultTab])
271
-
272
- const { circuitJson } = useCurrentPackageCircuitJson()
273
-
274
- // Get active file content
275
- const partialActiveFile = useMemo(() => {
276
- if (activeTab?.type !== "file" || !activeTab.filePath) return null
277
- return importantFiles.find((file) => file.file_path === activeTab.filePath)
278
- }, [activeTab, importantFiles])
279
-
280
- const { data: activeFileFull, isFetched: isActiveFileFetched } =
281
- usePackageFile(
282
- partialActiveFile
283
- ? {
284
- file_path: partialActiveFile.file_path,
285
- package_release_id: partialActiveFile.package_release_id,
286
- }
287
- : null,
288
- {
289
- keepPreviousData: true,
290
- staleTime: Infinity,
291
- refetchOnMount: false,
292
- refetchOnWindowFocus: false,
293
- refetchOnReconnect: false,
294
- },
295
- )
296
-
297
- const activeFileContent = activeFileFull?.content_text || ""
298
-
299
- const handleCopy = () => {
300
- let textToCopy = ""
301
-
302
- if (activeTab?.type === "ai-review" && aiReviewText) {
303
- textToCopy = aiReviewText
304
- } else if (
305
- activeTab?.type === "ai" &&
306
- (pkg?.ai_description || pkg?.ai_usage_instructions)
307
- ) {
308
- const parts = []
309
- if (pkg?.ai_description)
310
- parts.push(`# Description\n\n${pkg?.ai_description}`)
311
- if (pkg?.ai_usage_instructions)
312
- parts.push(`# Instructions\n\n${pkg?.ai_usage_instructions}`)
313
- textToCopy = parts.join("\n\n")
314
- } else if (activeTab?.type === "file" && activeFileContent) {
315
- textToCopy = activeFileContent
316
- }
317
-
318
- if (textToCopy) {
319
- navigator.clipboard.writeText(textToCopy)
320
- setCopyState("copied")
321
- setTimeout(() => setCopyState("copy"), 500)
322
- }
323
- }
324
-
325
- // Render content based on active tab
326
- const renderAiContent = useCallback(() => {
327
- if (!pkg?.ai_description && !pkg?.ai_usage_instructions) {
328
- return (
329
- <div className="flex flex-col items-center justify-center py-8 px-4">
330
- <div className="text-center space-y-4 max-w-md">
331
- <div className="flex justify-center">
332
- <div className="w-12 h-12 bg-gray-200 rounded-full flex items-center justify-center">
333
- <Loader2 className="h-6 w-6 text-gray-600 animate-spin" />
334
- </div>
335
- </div>
336
- <div className="space-y-2">
337
- <p className="text-sm text-gray-600">
338
- Our AI is generating a description for your package. This
339
- usually takes a few minutes. Please check back shortly.
340
- </p>
341
- </div>
342
- </div>
343
- </div>
344
- )
345
- }
346
-
347
- return (
348
- <div className="markdown-content">
349
- {pkg?.ai_description && (
350
- <div className="mb-6">
351
- <h3 className="font-semibold text-lg mb-2">Description</h3>
352
- <MarkdownViewer markdownContent={pkg?.ai_description} />
353
- </div>
354
- )}
355
- {pkg?.ai_usage_instructions && (
356
- <div>
357
- <h3 className="font-semibold text-lg mb-2">Instructions</h3>
358
- <MarkdownViewer markdownContent={pkg?.ai_usage_instructions} />
359
- </div>
360
- )}
361
- </div>
362
- )
363
- }, [
364
- pkg?.ai_description,
365
- pkg?.ai_usage_instructions,
366
- canManagePackage,
367
- onRequestAiDescriptionUpdate,
368
- ])
369
-
370
- const renderAiReviewContent = useCallback(() => {
371
- if (!aiReviewText && !aiReviewRequested) {
372
- return (
373
- <div className="flex flex-col items-center justify-center py-8 px-4">
374
- <div className="text-center space-y-4 max-w-md">
375
- <div className="flex justify-center">
376
- <div className="w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center">
377
- <SparklesIcon className="h-6 w-6 text-blue-600" />
378
- </div>
379
- </div>
380
- <div className="space-y-2">
381
- <p className="text-sm text-gray-600">
382
- Get detailed feedback and suggestions for improving your package
383
- from our AI assistant.
384
- </p>
385
- </div>
386
- {!canManagePackage ? (
387
- <p className="text-sm text-gray-500">
388
- Only the package owner can generate an AI review
389
- </p>
390
- ) : !Boolean(circuitJson) ? (
391
- <p className="text-sm text-gray-500">
392
- Circuit JSON is required for AI review.
393
- </p>
394
- ) : (
395
- <Button
396
- onClick={onRequestAiReview}
397
- size="sm"
398
- className="bg-blue-600 hover:bg-blue-700 text-white shadow-sm transition-all duration-200 hover:shadow-md"
399
- >
400
- <SparklesIcon className="h-4 w-4 mr-2" />
401
- Request AI Review
402
- </Button>
403
- )}
404
- </div>
405
- </div>
406
- )
407
- }
408
-
409
- if (!aiReviewText && aiReviewRequested) {
410
- return (
411
- <div className="flex flex-col items-center justify-center py-8 px-4">
412
- <div className="text-center space-y-4 max-w-md">
413
- <div className="flex justify-center">
414
- <div className="w-12 h-12 bg-gray-200 rounded-full flex items-center justify-center">
415
- <Loader2 className="h-6 w-6 text-gray-600 animate-spin" />
416
- </div>
417
- </div>
418
- <div className="space-y-2">
419
- <p className="text-sm text-gray-600">
420
- Our AI is analyzing your package. This usually takes a few
421
- minutes. Please check back shortly.
422
- </p>
423
- </div>
424
- </div>
425
- </div>
426
- )
427
- }
428
-
429
- return <MarkdownViewer markdownContent={aiReviewText || ""} />
430
- }, [aiReviewText, aiReviewRequested, canManagePackage, onRequestAiReview])
431
-
432
- const renderFileContent = useCallback(() => {
433
- if (!isActiveFileFetched || !activeTab?.filePath || !activeFileContent) {
434
- return (
435
- <div className="text-sm p-4">
436
- {SKELETON_WIDTHS.map((w, i) => (
437
- <Skeleton key={i} className={`h-4 mb-2 ${w}`} />
438
- ))}
439
- </div>
440
- )
441
- }
442
-
443
- if (isMarkdownFile(String(activeTab?.filePath))) {
444
- return <MarkdownViewer markdownContent={activeFileContent} />
445
- }
446
-
447
- if (isCodeFile(String(activeTab?.filePath))) {
448
- return (
449
- <div className="overflow-x-auto no-scrollbar">
450
- <ShikiCodeViewer
451
- code={activeFileContent}
452
- filePath={String(activeTab?.filePath)}
453
- />
454
- </div>
455
- )
456
- }
457
-
458
- return <pre className="whitespace-pre-wrap">{activeFileContent}</pre>
459
- }, [
460
- activeTab,
461
- activeFileContent,
462
- isActiveFileFetched,
463
- isMarkdownFile,
464
- isCodeFile,
465
- ])
466
-
467
- const renderTabContent = useCallback(() => {
468
- if (!activeTab) return null
469
-
470
- switch (activeTab.type) {
471
- case "ai":
472
- return renderAiContent()
473
- case "ai-review":
474
- return renderAiReviewContent()
475
- case "file":
476
- return renderFileContent()
477
- default:
478
- return null
479
- }
480
- }, [activeTab, renderAiContent, renderAiReviewContent, renderFileContent])
481
-
482
- // Tab styling helper
483
- const getTabClassName = useCallback(
484
- (tab: TabInfo) => {
485
- const isActive =
486
- activeTab?.type === tab.type &&
487
- (tab.type !== "file" || activeTab?.filePath === tab.filePath)
488
-
489
- return `flex items-center px-3 py-1.5 rounded-md text-xs flex-shrink-0 whitespace-nowrap ${
490
- isActive
491
- ? "bg-gray-200 dark:bg-[#30363d] font-medium"
492
- : "text-gray-500 dark:text-[#8b949e] hover:bg-gray-200 dark:hover:bg-[#30363d]"
493
- }`
494
- },
495
- [activeTab],
496
- )
497
-
498
- if (!isFetched) {
499
- return (
500
- <div className="mt-4 border border-gray-200 dark:border-[#30363d] rounded-md overflow-hidden">
501
- <div className="flex items-center pl-2 pr-4 py-2 bg-gray-100 dark:bg-[#161b22] border-b border-gray-200 dark:border-[#30363d]">
502
- <div className="flex items-center space-x-4">
503
- <Skeleton className="h-6 w-24" />
504
- <Skeleton className="h-6 w-20" />
505
- <Skeleton className="h-6 w-28" />
506
- </div>
507
- <div className="ml-auto flex items-center">
508
- <Skeleton className="h-4 w-4 mr-1" />
509
- <Skeleton className="h-4 w-4 ml-2" />
510
- </div>
511
- </div>
512
- <div className="p-4 bg-white dark:bg-[#0d1117]">
513
- <Skeleton className="h-8 w-3/4 mb-4" />
514
- <Skeleton className="h-4 w-full mb-2" />
515
- <Skeleton className="h-4 w-5/6 mb-2" />
516
- <Skeleton className="h-4 w-4/5 mb-4" />
517
- <Skeleton className="h-4 w-full mb-2" />
518
- <Skeleton className="h-4 w-3/4" />
519
- </div>
520
- </div>
521
- )
522
- }
523
-
524
- if (importantFiles.length === 0 && !hasAiContent && !hasAiReview) {
525
- return (
526
- <div className="mt-4 border border-gray-200 dark:border-[#30363d] rounded-md overflow-hidden">
527
- <div className="flex items-center pl-2 pr-4 py-2 bg-gray-100 dark:bg-[#161b22] border-b border-gray-200 dark:border-[#30363d]">
528
- <div className="flex items-center">
529
- <FileText className="h-4 w-4 mr-2" />
530
- <span className="font-semibold">No important files found</span>
531
- </div>
532
- </div>
533
- <div className="p-4 bg-white dark:bg-[#0d1117]">
534
- <p className="text-gray-500 dark:text-[#8b949e]">
535
- No README, LICENSE, or other important files found in this
536
- repository.
537
- </p>
538
- </div>
539
- </div>
540
- )
541
- }
542
-
543
- return (
544
- <div className="mt-4 border border-gray-200 dark:border-[#30363d] rounded-md overflow-hidden">
545
- <div className="flex items-center pl-2 pr-4 py-2 bg-gray-100 dark:bg-[#161b22] border-b border-gray-200 dark:border-[#30363d]">
546
- <div className="flex items-center space-x-2 overflow-x-auto no-scrollbar flex-1 min-w-0">
547
- {availableTabs.map((tab, index) => (
548
- <button
549
- key={`${tab.type}-${tab.filePath || index}`}
550
- className={getTabClassName(tab)}
551
- onClick={() => selectTab(tab)}
552
- >
553
- {tab.icon}
554
- <span>{tab.label}</span>
555
- </button>
556
- ))}
557
- </div>
558
- <div className="ml-auto flex items-center">
559
- {((activeTab?.type === "file" && activeFileContent) ||
560
- (activeTab?.type === "ai-review" && aiReviewText) ||
561
- (activeTab?.type === "ai" &&
562
- (pkg?.ai_description || pkg?.ai_usage_instructions))) && (
563
- <button
564
- className="hover:bg-gray-200 dark:hover:bg-[#30363d] p-1 rounded-md transition-all duration-300"
565
- onClick={handleCopy}
566
- >
567
- {copyState === "copy" ? (
568
- <Copy className="h-4 w-4" />
569
- ) : (
570
- <CopyCheck className="h-4 w-4" />
571
- )}
572
- <span className="sr-only">Copy</span>
573
- </button>
574
- )}
575
- {activeTab?.type === "ai-review" &&
576
- aiReviewText &&
577
- canManagePackage && (
578
- <button
579
- className="hover:bg-gray-200 dark:hover:bg-[#30363d] p-1 rounded-md ml-1"
580
- onClick={onRequestAiReview}
581
- title="Re-request AI Review"
582
- >
583
- <RefreshCcwIcon className="h-4 w-4" />
584
- <span className="sr-only">Re-request AI Review</span>
585
- </button>
586
- )}
587
- {activeTab?.type === "ai" && hasAiContent && canManagePackage && (
588
- <button
589
- className="hover:bg-gray-200 dark:hover:bg-[#30363d] p-1 rounded-md ml-1"
590
- onClick={onRequestAiDescriptionUpdate}
591
- title="Regenerate AI Description"
592
- >
593
- <RefreshCcwIcon className="h-4 w-4" />
594
- <span className="sr-only">Regenerate AI Description</span>
595
- </button>
596
- )}
597
- {activeTab?.type === "file" && canManagePackage && (
598
- <button
599
- className="hover:bg-gray-200 dark:hover:bg-[#30363d] p-1 rounded-md"
600
- onClick={() => onEditClicked?.(activeTab.filePath)}
601
- >
602
- <Edit className="h-4 w-4" />
603
- <span className="sr-only">Edit</span>
604
- </button>
605
- )}
606
- </div>
607
- </div>
608
- <div className="p-4 bg-white dark:bg-[#0d1117]">{renderTabContent()}</div>
609
- </div>
610
- )
611
- }