@tscircuit/runframe 0.0.1785 → 0.0.1787

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.
@@ -1730,7 +1730,7 @@ var useErrorTelemetry = ({
1730
1730
  };
1731
1731
 
1732
1732
  // package.json
1733
- var version = "0.0.1784";
1733
+ var version = "0.0.1786";
1734
1734
  var package_default = {
1735
1735
  name: "@tscircuit/runframe",
1736
1736
  main: "dist/preview.js",
@@ -1808,7 +1808,7 @@ var package_default = {
1808
1808
  concurrently: "^9.1.2",
1809
1809
  cssnano: "^7.0.6",
1810
1810
  debug: "^4.4.0",
1811
- easyeda: "^0.0.254",
1811
+ easyeda: "^0.0.256",
1812
1812
  fflate: "^0.8.2",
1813
1813
  "fuse.js": "^7.1.0",
1814
1814
  jose: "^6.1.0",
@@ -1840,13 +1840,13 @@ var package_default = {
1840
1840
  "tailwind-merge": "^2.6.0",
1841
1841
  tailwindcss: "^3.4.17",
1842
1842
  "tailwindcss-animate": "^1.0.7",
1843
- tscircuit: "^0.0.1438",
1843
+ tscircuit: "^0.0.1599",
1844
1844
  tsup: "^8.3.5",
1845
1845
  vite: "^7.1.2",
1846
1846
  yargs: "^17.7.2"
1847
1847
  },
1848
1848
  dependencies: {
1849
- "@tscircuit/eval": "^0.0.731",
1849
+ "@tscircuit/eval": "^0.0.732",
1850
1850
  "@tscircuit/solver-utils": "^0.0.7"
1851
1851
  }
1852
1852
  };
@@ -5008,6 +5008,54 @@ function LbrnExportOptionsDialog({
5008
5008
  ] }) });
5009
5009
  }
5010
5010
 
5011
+ // lib/utils/get-latest-autorouting-log-entry.ts
5012
+ var BOARD_NUMBER_REGEX = /#(\d+)/;
5013
+ var getBoardNumberFromKey = (key) => {
5014
+ const match = key.match(BOARD_NUMBER_REGEX);
5015
+ if (!match) return null;
5016
+ const boardNumber = Number.parseInt(match[1], 10);
5017
+ return Number.isFinite(boardNumber) ? boardNumber : null;
5018
+ };
5019
+ var getCreatedAtTimestamp = (createdAt) => {
5020
+ if (typeof createdAt === "number") {
5021
+ return Number.isFinite(createdAt) ? createdAt : null;
5022
+ }
5023
+ if (typeof createdAt === "string") {
5024
+ const timestamp = new Date(createdAt).getTime();
5025
+ return Number.isFinite(timestamp) ? timestamp : null;
5026
+ }
5027
+ return null;
5028
+ };
5029
+ var getLatestAutoroutingLogEntry = (autoroutingLog) => {
5030
+ if (!autoroutingLog) return null;
5031
+ let latestEntry = null;
5032
+ let latestBoardNumber = -1;
5033
+ let latestCreatedAt = -1;
5034
+ for (const [key, value] of Object.entries(autoroutingLog)) {
5035
+ const boardNumber = getBoardNumberFromKey(key);
5036
+ const createdAt = getCreatedAtTimestamp(value.createdAt);
5037
+ if (boardNumber !== null) {
5038
+ if (boardNumber > latestBoardNumber) {
5039
+ latestBoardNumber = boardNumber;
5040
+ latestEntry = { key, value };
5041
+ }
5042
+ continue;
5043
+ }
5044
+ if (latestBoardNumber !== -1) {
5045
+ continue;
5046
+ }
5047
+ if (createdAt !== null && createdAt > latestCreatedAt) {
5048
+ latestCreatedAt = createdAt;
5049
+ latestEntry = { key, value };
5050
+ continue;
5051
+ }
5052
+ if (!latestEntry) {
5053
+ latestEntry = { key, value };
5054
+ }
5055
+ }
5056
+ return latestEntry;
5057
+ };
5058
+
5011
5059
  // lib/components/FileMenuLeftHeader.tsx
5012
5060
  import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs27 } from "react/jsx-runtime";
5013
5061
  var FileMenuLeftHeader = (props) => {
@@ -5119,6 +5167,10 @@ var FileMenuLeftHeader = (props) => {
5119
5167
  });
5120
5168
  setPendingLbrnExport(null);
5121
5169
  };
5170
+ const latestAutoroutingLogEntry = useMemo9(
5171
+ () => getLatestAutoroutingLogEntry(props.autoroutingLog),
5172
+ [props.autoroutingLog]
5173
+ );
5122
5174
  return /* @__PURE__ */ jsxs27(Fragment9, { children: [
5123
5175
  /* @__PURE__ */ jsxs27("div", { className: "rf-flex rf-items-center rf-gap-1 rf-flex-shrink-0", children: [
5124
5176
  /* @__PURE__ */ jsxs27(DropdownMenu, { children: [
@@ -5178,16 +5230,40 @@ var FileMenuLeftHeader = (props) => {
5178
5230
  children: "Sign In"
5179
5231
  }
5180
5232
  ),
5181
- !props.isWebEmbedded && /* @__PURE__ */ jsx37(
5182
- DropdownMenuItem,
5183
- {
5184
- className: "rf-text-xs",
5185
- onSelect: () => {
5186
- openBugReportDialog();
5187
- },
5188
- children: "Report Bug"
5189
- }
5190
- ),
5233
+ !props.isWebEmbedded && /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5234
+ /* @__PURE__ */ jsx37(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Report Bug" }),
5235
+ /* @__PURE__ */ jsx37(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5236
+ /* @__PURE__ */ jsx37(
5237
+ DropdownMenuItem,
5238
+ {
5239
+ className: "rf-text-xs",
5240
+ onSelect: () => {
5241
+ openBugReportDialog();
5242
+ },
5243
+ children: "Report Entire Circuit"
5244
+ }
5245
+ ),
5246
+ /* @__PURE__ */ jsx37(
5247
+ DropdownMenuItem,
5248
+ {
5249
+ className: "rf-text-xs",
5250
+ disabled: !latestAutoroutingLogEntry || !props.onReportAutoroutingLog,
5251
+ onSelect: () => {
5252
+ if (!latestAutoroutingLogEntry || !props.onReportAutoroutingLog) {
5253
+ return;
5254
+ }
5255
+ props.onReportAutoroutingLog(
5256
+ latestAutoroutingLogEntry.key,
5257
+ {
5258
+ simpleRouteJson: latestAutoroutingLogEntry.value.simpleRouteJson
5259
+ }
5260
+ );
5261
+ },
5262
+ children: "Report Autorouter Bug"
5263
+ }
5264
+ )
5265
+ ] }) })
5266
+ ] }),
5191
5267
  /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5192
5268
  /* @__PURE__ */ jsx37(
5193
5269
  DropdownMenuSubTrigger,
package/dist/preview.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  linkify,
9
9
  useOrderDialog,
10
10
  useOrderDialogCli
11
- } from "./chunk-CFB4RBC6.js";
11
+ } from "./chunk-PMAUCIZ4.js";
12
12
  export {
13
13
  BomTable,
14
14
  CadViewer,
package/dist/runner.js CHANGED
@@ -34,7 +34,7 @@ import {
34
34
  useRunFrameStore,
35
35
  useRunnerStore,
36
36
  useStyles
37
- } from "./chunk-CFB4RBC6.js";
37
+ } from "./chunk-PMAUCIZ4.js";
38
38
 
39
39
  // lib/components/RunFrame/RunFrame.tsx
40
40
  import { createCircuitWebWorker } from "@tscircuit/eval/worker";
@@ -542,7 +542,8 @@ var RunFrame = (props) => {
542
542
  setAutoroutingLog({
543
543
  ...autoroutingLog,
544
544
  [event.componentDisplayName]: {
545
- simpleRouteJson: event.simpleRouteJson
545
+ simpleRouteJson: event.simpleRouteJson,
546
+ createdAt: Date.now()
546
547
  }
547
548
  });
548
549
  });
@@ -825,7 +826,9 @@ var RunFrame = (props) => {
825
826
  showSchematicDebugGrid,
826
827
  onChangeShowSchematicDebugGrid: setShowSchematicDebugGrid,
827
828
  showSchematicPorts,
828
- onChangeShowSchematicPorts: setShowSchematicPorts
829
+ onChangeShowSchematicPorts: setShowSchematicPorts,
830
+ autoroutingLog,
831
+ onReportAutoroutingLog: props.onReportAutoroutingLog || handleReportAutoroutingLog
829
832
  }
830
833
  ),
831
834
  props.leftHeaderContent