@tscircuit/runframe 0.0.1869 → 0.0.1871

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.
@@ -83,7 +83,7 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
83
83
 
84
84
  // lib/components/CircuitJsonPreview/CircuitJsonPreview.tsx
85
85
  import { CadViewer } from "@tscircuit/3d-viewer";
86
- import { useCallback as useCallback9, useEffect as useEffect15, useState as useState22, useMemo as useMemo10 } from "react";
86
+ import { useCallback as useCallback9, useEffect as useEffect16, useState as useState23, useMemo as useMemo10 } from "react";
87
87
 
88
88
  // lib/components/ErrorFallback.tsx
89
89
  import "react";
@@ -1121,8 +1121,12 @@ var CircuitJsonTableViewer = ({
1121
1121
  ] });
1122
1122
  };
1123
1123
 
1124
- // lib/components/BomTable.tsx
1125
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1124
+ // lib/components/BomTable/BomTable.tsx
1125
+ import { convertCircuitJsonToBomRows } from "circuit-json-to-bom-csv";
1126
+ import { useEffect as useEffect2, useState as useState3 } from "react";
1127
+
1128
+ // lib/components/BomTable/bom-table.columns.tsx
1129
+ import { jsx as jsx12 } from "react/jsx-runtime";
1126
1130
  var linkify = (supplier, partNumber) => {
1127
1131
  if (supplier === "jlcpcb") {
1128
1132
  return /* @__PURE__ */ jsx12(
@@ -1138,30 +1142,117 @@ var linkify = (supplier, partNumber) => {
1138
1142
  }
1139
1143
  return partNumber;
1140
1144
  };
1145
+ var formatManufacturerMpnPairs = (pairs) => pairs?.map(({ manufacturer, mpn }) => `${manufacturer}: ${mpn}`).join(", ");
1146
+ var getBomMetadata = (rows) => {
1147
+ const extraColumns = /* @__PURE__ */ new Set();
1148
+ let hasSupplierColumn = false;
1149
+ let hasManufacturerColumn = false;
1150
+ for (const row of rows) {
1151
+ if (row.supplier_part_number_columns?.["JLCPCB Part #"] !== void 0) {
1152
+ hasSupplierColumn = true;
1153
+ }
1154
+ for (const extraColumnName of Object.keys(row.extra_columns ?? {})) {
1155
+ extraColumns.add(extraColumnName);
1156
+ }
1157
+ if ((row.manufacturer_mpn_pairs?.length ?? 0) > 0) {
1158
+ hasManufacturerColumn = true;
1159
+ }
1160
+ }
1161
+ return {
1162
+ extraColumnNames: [...extraColumns],
1163
+ hasSupplierColumn,
1164
+ hasManufacturerColumn
1165
+ };
1166
+ };
1167
+ var getBomCellDescriptors = (bomMetadata) => {
1168
+ const bomCellDescriptors = [
1169
+ {
1170
+ key: "designator",
1171
+ label: "Designator",
1172
+ getCell: (row) => row.designator
1173
+ },
1174
+ {
1175
+ key: "comment",
1176
+ label: "Comment",
1177
+ getCell: (row) => row.comment
1178
+ },
1179
+ {
1180
+ key: "value",
1181
+ label: "Component Value",
1182
+ getCell: (row) => row.value
1183
+ },
1184
+ {
1185
+ key: "footprint",
1186
+ label: "Footprint",
1187
+ getCell: (row) => row.footprint
1188
+ }
1189
+ ];
1190
+ if (bomMetadata.hasSupplierColumn) {
1191
+ bomCellDescriptors.push({
1192
+ key: "supplier:JLCPCB Part #",
1193
+ label: "JLCPCB Part #",
1194
+ getCell: (row) => {
1195
+ const partNumber = row.supplier_part_number_columns?.["JLCPCB Part #"];
1196
+ return partNumber ? linkify("jlcpcb", partNumber) : "";
1197
+ }
1198
+ });
1199
+ }
1200
+ if (bomMetadata.hasManufacturerColumn) {
1201
+ bomCellDescriptors.push({
1202
+ key: "manufacturer_mpn_pairs",
1203
+ label: "Manufacturer / MPN",
1204
+ getCell: (row) => formatManufacturerMpnPairs(row.manufacturer_mpn_pairs)
1205
+ });
1206
+ }
1207
+ for (const extraColumnName of bomMetadata.extraColumnNames) {
1208
+ bomCellDescriptors.push({
1209
+ key: `extra:${extraColumnName}`,
1210
+ label: extraColumnName,
1211
+ getCell: (row) => row.extra_columns?.[extraColumnName] || ""
1212
+ });
1213
+ }
1214
+ return bomCellDescriptors;
1215
+ };
1216
+
1217
+ // lib/components/BomTable/BomTable.tsx
1218
+ import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
1141
1219
  var BomTable = ({ circuitJson }) => {
1142
- const sourceComponents = circuitJson.filter(
1143
- (el) => el.type === "source_component"
1144
- );
1145
- const supplierColumns = /* @__PURE__ */ new Set();
1146
- for (const comp of sourceComponents) {
1147
- if (comp.supplier_part_numbers) {
1148
- for (const supplier of Object.keys(comp.supplier_part_numbers)) {
1149
- supplierColumns.add(supplier);
1220
+ const [rows, setRows] = useState3(null);
1221
+ const [error, setError] = useState3(null);
1222
+ useEffect2(() => {
1223
+ let cancelled = false;
1224
+ const loadBomTable = async () => {
1225
+ try {
1226
+ setError(null);
1227
+ setRows(null);
1228
+ const bomRows = await convertCircuitJsonToBomRows({
1229
+ circuitJson
1230
+ });
1231
+ if (!cancelled) {
1232
+ setRows(bomRows);
1233
+ }
1234
+ } catch (err) {
1235
+ if (!cancelled) {
1236
+ setError(err instanceof Error ? err.message : "Unknown BOM error");
1237
+ }
1150
1238
  }
1151
- }
1239
+ };
1240
+ void loadBomTable();
1241
+ return () => {
1242
+ cancelled = true;
1243
+ };
1244
+ }, [circuitJson]);
1245
+ if (error) {
1246
+ throw new Error(error);
1152
1247
  }
1153
- return /* @__PURE__ */ jsx12("div", { className: "rf-overflow-x-auto", children: /* @__PURE__ */ jsxs9("table", { className: "rf-w-full rf-text-left rf-text-sm", children: [
1154
- /* @__PURE__ */ jsx12("thead", { children: /* @__PURE__ */ jsxs9("tr", { className: "rf-border-b", children: [
1155
- /* @__PURE__ */ jsx12("th", { className: "rf-p-2", children: "Name" }),
1156
- Array.from(supplierColumns).map((supplier) => /* @__PURE__ */ jsx12("th", { className: "rf-p-2 rf-capitalize", children: supplier }, supplier))
1157
- ] }) }),
1158
- /* @__PURE__ */ jsx12("tbody", { children: sourceComponents.map((comp) => /* @__PURE__ */ jsxs9("tr", { className: "rf-border-b", children: [
1159
- /* @__PURE__ */ jsx12("td", { className: "rf-p-2", children: comp.name }),
1160
- Array.from(supplierColumns).map((supplier) => /* @__PURE__ */ jsx12("td", { className: "rf-p-2", children: linkify(
1161
- supplier,
1162
- comp.supplier_part_numbers?.[supplier]?.[0] || ""
1163
- ) }, supplier))
1164
- ] }, comp.source_component_id)) })
1248
+ const bomMetadata = getBomMetadata(rows ?? []);
1249
+ const bomCellDescriptors = getBomCellDescriptors(bomMetadata);
1250
+ if (!rows) {
1251
+ return /* @__PURE__ */ jsx13("div", { className: "rf-p-4 rf-text-sm rf-text-muted-foreground", children: "Loading BOM..." });
1252
+ }
1253
+ return /* @__PURE__ */ jsx13("div", { className: "rf-overflow-x-auto", children: /* @__PURE__ */ jsxs9("table", { className: "rf-w-full rf-text-left rf-text-sm", children: [
1254
+ /* @__PURE__ */ jsx13("thead", { children: /* @__PURE__ */ jsx13("tr", { className: "rf-border-b", children: bomCellDescriptors.map((bomCellDescriptor) => /* @__PURE__ */ jsx13("th", { className: "rf-p-2", children: bomCellDescriptor.label }, bomCellDescriptor.key)) }) }),
1255
+ /* @__PURE__ */ jsx13("tbody", { children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx13("tr", { className: "rf-border-b", children: bomCellDescriptors.map((bomCellDescriptor) => /* @__PURE__ */ jsx13("td", { className: "rf-p-2", children: bomCellDescriptor.getCell(row) }, bomCellDescriptor.key)) }, row.designator || `${rowIndex}`)) })
1165
1256
  ] }) });
1166
1257
  };
1167
1258
 
@@ -1179,10 +1270,10 @@ import {
1179
1270
 
1180
1271
  // lib/components/ui/input.tsx
1181
1272
  import * as React5 from "react";
1182
- import { jsx as jsx13 } from "react/jsx-runtime";
1273
+ import { jsx as jsx14 } from "react/jsx-runtime";
1183
1274
  var Input = React5.forwardRef(
1184
1275
  ({ className, type, ...props }, ref) => {
1185
- return /* @__PURE__ */ jsx13(
1276
+ return /* @__PURE__ */ jsx14(
1186
1277
  "input",
1187
1278
  {
1188
1279
  type,
@@ -1199,15 +1290,15 @@ var Input = React5.forwardRef(
1199
1290
  Input.displayName = "Input";
1200
1291
 
1201
1292
  // lib/components/PcbViewerWithContainerHeight.tsx
1202
- import { useRef, useState as useState3, useLayoutEffect } from "react";
1293
+ import { useRef, useState as useState4, useLayoutEffect } from "react";
1203
1294
  import { PCBViewer } from "@tscircuit/pcb-viewer";
1204
- import { jsx as jsx14 } from "react/jsx-runtime";
1295
+ import { jsx as jsx15 } from "react/jsx-runtime";
1205
1296
  var PcbViewerWithContainerHeight = ({
1206
1297
  containerClassName,
1207
1298
  ...props
1208
1299
  }) => {
1209
1300
  const containerRef = useRef(null);
1210
- const [computedHeight, setComputedHeight] = useState3(620);
1301
+ const [computedHeight, setComputedHeight] = useState4(620);
1211
1302
  useLayoutEffect(() => {
1212
1303
  const updateHeight = () => {
1213
1304
  if (containerRef.current) {
@@ -1229,25 +1320,25 @@ var PcbViewerWithContainerHeight = ({
1229
1320
  window.removeEventListener("resize", updateHeight);
1230
1321
  };
1231
1322
  }, []);
1232
- return /* @__PURE__ */ jsx14(
1323
+ return /* @__PURE__ */ jsx15(
1233
1324
  "div",
1234
1325
  {
1235
1326
  ref: containerRef,
1236
1327
  className: containerClassName || "rf-w-full rf-h-full",
1237
- children: /* @__PURE__ */ jsx14(PCBViewer, { ...props, height: computedHeight })
1328
+ children: /* @__PURE__ */ jsx15(PCBViewer, { ...props, height: computedHeight })
1238
1329
  }
1239
1330
  );
1240
1331
  };
1241
1332
 
1242
1333
  // lib/hooks/use-styles.ts
1243
- import { useEffect as useEffect2 } from "react";
1334
+ import { useEffect as useEffect3 } from "react";
1244
1335
 
1245
1336
  // lib/hooks/styles.generated.ts
1246
1337
  var styles_generated_default = '*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.\\!rf-z-\\[200\\]{z-index:200!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-z-\\[101\\]{z-index:101}.rf-z-\\[104\\]{z-index:104}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.rf-m-0{margin:0}.rf-m-1{margin:.25rem}.rf-m-6{margin:1.5rem}.-rf-mx-1,.rf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.rf-mx-1{margin-left:.25rem;margin-right:.25rem}.rf-mx-2{margin-left:.5rem;margin-right:.5rem}.rf-mx-4{margin-left:1rem;margin-right:1rem}.rf-mx-auto{margin-left:auto;margin-right:auto}.rf-my-1{margin-bottom:.25rem;margin-top:.25rem}.rf-my-12{margin-bottom:3rem;margin-top:3rem}.rf-my-4{margin-bottom:1rem;margin-top:1rem}.rf-my-auto{margin-bottom:auto;margin-top:auto}.rf-mb-0{margin-bottom:0}.rf-mb-0\\.5{margin-bottom:.125rem}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-6{margin-left:1.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mr-4{margin-right:1rem}.rf-mt-0{margin-top:0}.rf-mt-0\\.5{margin-top:.125rem}.rf-mt-1{margin-top:.25rem}.rf-mt-2{margin-top:.5rem}.rf-mt-3{margin-top:.75rem}.rf-mt-4{margin-top:1rem}.rf-mt-5{margin-top:1.25rem}.rf-mt-auto{margin-top:auto}.rf-block{display:block}.rf-inline-block{display:inline-block}.rf-inline{display:inline}.rf-flex{display:flex}.rf-inline-flex{display:inline-flex}.rf-grid{display:grid}.rf-hidden{display:none}.rf-aspect-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-2{height:.5rem;width:.5rem}.rf-size-3{height:.75rem;width:.75rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.rf-h-1{height:.25rem}.rf-h-10{height:2.5rem}.rf-h-12{height:3rem}.rf-h-2{height:.5rem}.rf-h-2\\.5{height:.625rem}.rf-h-20{height:5rem}.rf-h-24{height:6rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-7{height:1.75rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[calc\\(100vh-60px\\)\\]{height:calc(100vh - 60px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.\\!rf-max-h-\\[80vh\\]{max-height:80vh!important}.rf-max-h-16{max-height:4rem}.rf-max-h-20{max-height:5rem}.rf-max-h-24{max-height:6rem}.rf-max-h-28{max-height:7rem}.rf-max-h-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[120px\\]{max-height:120px}.rf-max-h-\\[150px\\]{max-height:150px}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-max-h-none{max-height:none}.rf-min-h-0{min-height:0}.rf-min-h-\\[100px\\]{min-height:100px}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.rf-min-h-full{min-height:100%}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.\\!rf-w-\\[95vw\\]{width:95vw!important}.rf-w-1{width:.25rem}.rf-w-10{width:2.5rem}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-24{width:6rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-40{width:10rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-80{width:20rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-32{min-width:8rem}.rf-min-w-80{min-width:20rem}.rf-min-w-96{min-width:24rem}.rf-min-w-\\[12px\\]{min-width:12px}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[600px\\]{min-width:600px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[95vw\\]{max-width:95vw!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-64{max-width:16rem}.rf-max-w-96{max-width:24rem}.rf-max-w-\\[1000px\\]{max-width:1000px}.rf-max-w-\\[150px\\]{max-width:150px}.rf-max-w-\\[200px\\]{max-width:200px}.rf-max-w-\\[40\\%\\]{max-width:40%}.rf-max-w-\\[600px\\]{max-width:600px}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-max-w-xs{max-width:20rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.rf-translate-y-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.-rf-rotate-90{--tw-rotate:-90deg}.-rf-rotate-90,.rf-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf-rotate-90{--tw-rotate:90deg}.rf-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-content-center{place-content:center}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-baseline{align-items:baseline}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-1\\.5{gap:.375rem}.rf-gap-2{gap:.5rem}.rf-gap-3{gap:.75rem}.rf-gap-4{gap:1rem}.rf-gap-5{gap:1.25rem}.rf-gap-6{gap:1.5rem}.rf-gap-8{gap:2rem}.rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.rf-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rf-whitespace-normal{white-space:normal}.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-text-nowrap{text-wrap:nowrap}.rf-break-words{overflow-wrap:break-word}.rf-break-all{word-break:break-all}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-none{border-radius:0}.rf-rounded-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-0{border-width:0}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-l-2{border-left-width:2px}.rf-border-l-4{border-left-width:4px}.rf-border-r{border-right-width:1px}.rf-border-t{border-top-width:1px}.rf-border-none{border-style:none}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-border{border-color:hsl(var(--border))}.rf-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.rf-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.rf-border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.rf-border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.rf-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.rf-border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.rf-border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.rf-border-slate-800\\/60{border-color:rgba(30,41,59,.6)}.rf-border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-border-l-blue-500{--tw-border-opacity:1;border-left-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-t-blue-600{--tw-border-opacity:1;border-top-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.rf-bg-amber-50\\/30{background-color:rgba(255,251,235,.3)}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.rf-bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.rf-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.rf-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.rf-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.rf-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.rf-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.rf-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.rf-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.rf-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.rf-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.rf-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.rf-bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.rf-bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.rf-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.rf-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.rf-bg-muted{background-color:hsl(var(--muted))}.rf-bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.rf-bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.rf-bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity,1))}.rf-bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.rf-bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.rf-bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.rf-bg-orange-50\\/50{background-color:rgba(255,247,237,.5)}.rf-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-50\\/50{background-color:hsla(0,86%,97%,.5)}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.rf-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.rf-bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.rf-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.rf-bg-transparent{background-color:transparent}.rf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.rf-bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.rf-bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.rf-bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.rf-bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity,1))}.rf-bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.rf-bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.rf-bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.rf-from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-emerald-500{--tw-gradient-from:#10b981 var(--tw-gradient-from-position);--tw-gradient-to:rgba(16,185,129,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-green-500{--tw-gradient-from:#22c55e var(--tw-gradient-from-position);--tw-gradient-to:rgba(34,197,94,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-red-500{--tw-gradient-from:#ef4444 var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,68,68,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.rf-to-emerald-600{--tw-gradient-to:#059669 var(--tw-gradient-to-position)}.rf-to-green-600{--tw-gradient-to:#16a34a var(--tw-gradient-to-position)}.rf-to-red-600{--tw-gradient-to:#dc2626 var(--tw-gradient-to-position)}.rf-fill-amber-500{fill:#f59e0b}.rf-fill-current{fill:currentColor}.rf-object-contain{-o-object-fit:contain;object-fit:contain}.rf-object-cover{-o-object-fit:cover;object-fit:cover}.\\!rf-p-0{padding:0!important}.rf-p-0{padding:0}.rf-p-1{padding:.25rem}.rf-p-2{padding:.5rem}.rf-p-3{padding:.75rem}.rf-p-4{padding:1rem}.rf-p-5{padding:1.25rem}.rf-p-6{padding:1.5rem}.rf-p-8{padding:2rem}.rf-px-1{padding-left:.25rem;padding-right:.25rem}.rf-px-1\\.5{padding-left:.375rem;padding-right:.375rem}.rf-px-2{padding-left:.5rem;padding-right:.5rem}.rf-px-2\\.5{padding-left:.625rem;padding-right:.625rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.rf-px-8{padding-left:2rem;padding-right:2rem}.rf-py-0{padding-bottom:0;padding-top:0}.rf-py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.rf-py-1{padding-bottom:.25rem;padding-top:.25rem}.rf-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.rf-py-12{padding-bottom:3rem;padding-top:3rem}.rf-py-2{padding-bottom:.5rem;padding-top:.5rem}.rf-py-3{padding-bottom:.75rem;padding-top:.75rem}.rf-py-4{padding-bottom:1rem;padding-top:1rem}.rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.rf-py-8{padding-bottom:2rem;padding-top:2rem}.rf-pb-0{padding-bottom:0}.rf-pb-1{padding-bottom:.25rem}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pb-px{padding-bottom:1px}.rf-pl-10{padding-left:2.5rem}.rf-pl-11{padding-left:2.75rem}.rf-pl-12{padding-left:3rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-1{padding-top:.25rem}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-align-bottom{vertical-align:bottom}.rf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.rf-text-\\[10px\\]{font-size:10px}.rf-text-\\[11px\\]{font-size:11px}.rf-text-\\[8px\\]{font-size:8px}.rf-text-base{font-size:1rem;line-height:1.5rem}.rf-text-lg{font-size:1.125rem;line-height:1.75rem}.rf-text-sm{font-size:.875rem;line-height:1.25rem}.rf-text-xl{font-size:1.25rem;line-height:1.75rem}.rf-text-xs{font-size:.75rem;line-height:1rem}.\\!rf-font-normal{font-weight:400!important}.rf-font-bold{font-weight:700}.rf-font-medium{font-weight:500}.rf-font-semibold{font-weight:600}.rf-uppercase{text-transform:uppercase}.rf-capitalize{text-transform:capitalize}.rf-tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.rf-leading-5{line-height:1.25rem}.rf-leading-\\[0\\.95rem\\]{line-height:.95rem}.rf-leading-\\[1rem\\]{line-height:1rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.rf-text-foreground{color:hsl(var(--foreground))}.rf-text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.rf-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.rf-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.rf-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.rf-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.rf-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.rf-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.rf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.rf-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.rf-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.rf-text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.rf-text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.rf-text-muted{color:hsl(var(--muted))}.rf-text-muted-foreground{color:hsl(var(--muted-foreground))}.rf-text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.rf-text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.rf-text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity,1))}.rf-text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.rf-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.rf-text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.rf-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.rf-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.rf-text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.rf-text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.rf-text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.rf-text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity,1))}.rf-text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.rf-text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.rf-text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.rf-text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.rf-text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.rf-underline{text-decoration-line:underline}.rf-line-through{text-decoration-line:line-through}.rf-underline-offset-4{text-underline-offset:4px}.rf-opacity-0{opacity:0}.rf-opacity-10{opacity:.1}.rf-opacity-100{opacity:1}.rf-opacity-25{opacity:.25}.rf-opacity-30{opacity:.3}.rf-opacity-50{opacity:.5}.rf-opacity-60{opacity:.6}.rf-opacity-70{opacity:.7}.rf-opacity-75{opacity:.75}.rf-shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.rf-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.rf-shadow-md,.rf-shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.rf-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.rf-shadow-sm,.rf-shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.rf-outline-none{outline:2px solid transparent;outline-offset:2px}.rf-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.rf-ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.rf-ring-primary{--tw-ring-color:hsl(var(--primary))}.rf-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.rf-ring-offset-white{--tw-ring-offset-color:#fff}.rf-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-150{transition-duration:.15s}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-animate-in{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.rf-fade-in-0{--tw-enter-opacity:0}.rf-zoom-in-95{--tw-enter-scale:.95}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-150{animation-duration:.15s}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\\:\\!rf-bg-transparent:hover{background-color:transparent!important}.hover\\:rf-bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\\:rf-bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\\:rf-bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\\:rf-bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\\:rf-bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.hover\\:rf-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:rf-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-zinc-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:rf-pointer-events-none:disabled{pointer-events:none}.disabled\\:rf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:rf-opacity-50:disabled{opacity:.5}.rf-group:hover .group-hover\\:rf-opacity-100,.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.rf-peer:disabled~.peer-disabled\\:rf-cursor-not-allowed{cursor:not-allowed}.rf-peer:disabled~.peer-disabled\\:rf-opacity-70{opacity:.7}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-gray-700:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\\:rf-bg-gray-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-950:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:rf-text-gray-500:is(.rf-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-400:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-50:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-900:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-ring-offset-zinc-950:is(.rf-dark *){--tw-ring-offset-color:#09090b}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:hover\\:rf-bg-red-900\\/90:hover:is(.rf-dark *){background-color:rgba(127,29,29,.9)}.dark\\:hover\\:rf-bg-zinc-50\\/90:hover:is(.rf-dark *){background-color:hsla(0,0%,98%,.9)}.dark\\:hover\\:rf-bg-zinc-800:hover:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:hover\\:rf-bg-zinc-800\\/80:hover:is(.rf-dark *){background-color:rgba(39,39,42,.8)}.dark\\:hover\\:rf-text-zinc-50:hover:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus\\:rf-bg-zinc-800:focus:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:focus\\:rf-text-zinc-50:focus:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:rf-ring-zinc-300:focus-visible:is(.rf-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-bg-zinc-800[data-selected=true]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-bg-zinc-950[data-state=active]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-bg-zinc-50[data-state=checked]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:rf-bg-zinc-800[data-state=open]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-text-zinc-50[data-selected=true]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-text-zinc-50[data-state=active]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-text-zinc-900[data-state=checked]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\\:rf-order-1{order:1}.sm\\:rf-order-2{order:2}.sm\\:rf-mt-0{margin-top:0}.sm\\:rf-mt-4{margin-top:1rem}.sm\\:rf-block{display:block}.sm\\:rf-inline{display:inline}.sm\\:rf-grid{display:grid}.sm\\:rf-hidden{display:none}.sm\\:rf-h-5{height:1.25rem}.sm\\:rf-w-1\\/2{width:50%}.sm\\:rf-w-5{width:1.25rem}.sm\\:rf-w-\\[90vw\\]{width:90vw}.sm\\:rf-w-auto{width:auto}.sm\\:rf-max-w-\\[500px\\]{max-width:500px}.sm\\:rf-max-w-md{max-width:28rem}.sm\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:rf-grid-cols-\\[1fr_auto\\]{grid-template-columns:1fr auto}.sm\\:rf-grid-cols-\\[minmax\\(0\\2c 1fr\\)_auto\\]{grid-template-columns:minmax(0,1fr) auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-gap-4{gap:1rem}.sm\\:rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-p-3{padding:.75rem}.sm\\:rf-p-6{padding:1.5rem}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-2xl{font-size:1.5rem;line-height:2rem}.sm\\:rf-text-base{font-size:1rem;line-height:1.5rem}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-w-auto{width:auto}.md\\:rf-max-w-\\[660px\\]{max-width:660px}.md\\:rf-max-w-lg{max-width:32rem}.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:rf-p-8{padding:2rem}.md\\:rf-py-8{padding-bottom:2rem;padding-top:2rem}.md\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\\:rf-max-w-\\[720px\\]{max-width:720px}.lg\\:rf-max-w-xl{max-width:36rem}}@media (min-width:1280px){.xl\\:rf-max-w-\\[800px\\]{max-width:800px}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}';
1247
1338
 
1248
1339
  // lib/hooks/use-styles.ts
1249
1340
  var useStyles = () => {
1250
- useEffect2(() => {
1341
+ useEffect3(() => {
1251
1342
  const existingStyle = document.querySelector(
1252
1343
  'style[data-styles="tscircuit-runframe"]'
1253
1344
  );
@@ -1260,9 +1351,9 @@ var useStyles = () => {
1260
1351
  };
1261
1352
 
1262
1353
  // lib/hooks/use-fullscreen-body-scroll.ts
1263
- import { useEffect as useEffect3 } from "react";
1354
+ import { useEffect as useEffect4 } from "react";
1264
1355
  var useFullscreenBodyScroll = (isFullScreen) => {
1265
- useEffect3(() => {
1356
+ useEffect4(() => {
1266
1357
  if (isFullScreen) {
1267
1358
  document.body.style.overflow = "hidden";
1268
1359
  } else {
@@ -1275,9 +1366,9 @@ var useFullscreenBodyScroll = (isFullScreen) => {
1275
1366
  };
1276
1367
 
1277
1368
  // lib/hooks/use-local-storage-state.ts
1278
- import { useState as useState4, useEffect as useEffect4 } from "react";
1369
+ import { useState as useState5, useEffect as useEffect5 } from "react";
1279
1370
  function useLocalStorageState(key, initialValue, overrideValue) {
1280
- const [state, setState] = useState4(() => {
1371
+ const [state, setState] = useState5(() => {
1281
1372
  if (overrideValue !== void 0) return overrideValue;
1282
1373
  try {
1283
1374
  const item = window.localStorage.getItem(key);
@@ -1287,7 +1378,7 @@ function useLocalStorageState(key, initialValue, overrideValue) {
1287
1378
  return initialValue;
1288
1379
  }
1289
1380
  });
1290
- useEffect4(() => {
1381
+ useEffect5(() => {
1291
1382
  try {
1292
1383
  window.localStorage.setItem(key, JSON.stringify(state));
1293
1384
  } catch (error) {
@@ -1299,12 +1390,12 @@ function useLocalStorageState(key, initialValue, overrideValue) {
1299
1390
 
1300
1391
  // lib/components/RenderLogViewer/RenderLogViewer.tsx
1301
1392
  import { orderedRenderPhases as orderedRenderPhases2 } from "@tscircuit/core";
1302
- import { useState as useState5 } from "react";
1393
+ import { useState as useState6 } from "react";
1303
1394
 
1304
1395
  // lib/components/RenderLogViewer/RenderTimingsBar.tsx
1305
1396
  import { orderedRenderPhases } from "@tscircuit/core";
1306
1397
  import "react";
1307
- import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
1398
+ import { jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
1308
1399
  var getPhaseColor = (phase) => {
1309
1400
  const index = orderedRenderPhases.indexOf(phase);
1310
1401
  const hue = index * 137.5 % 360;
@@ -1319,10 +1410,10 @@ var RenderTimingsBar = ({
1319
1410
  0
1320
1411
  );
1321
1412
  return /* @__PURE__ */ jsxs10("div", { className: "rf-space-y-2 rf-w-full rf-px-4", children: [
1322
- /* @__PURE__ */ jsx15("div", { className: "rf-relative rf-h-8 rf-flex rf-rounded-sm", children: orderedRenderPhases.map((phase) => {
1413
+ /* @__PURE__ */ jsx16("div", { className: "rf-relative rf-h-8 rf-flex rf-rounded-sm", children: orderedRenderPhases.map((phase) => {
1323
1414
  const time = phaseTimings[phase] || 0;
1324
1415
  const width = time / totalTime * 100;
1325
- return /* @__PURE__ */ jsx15(
1416
+ return /* @__PURE__ */ jsx16(
1326
1417
  "div",
1327
1418
  {
1328
1419
  className: "rf-group/bar rf-relative rf-overflow-visible",
@@ -1350,7 +1441,7 @@ var RenderTimingsBar = ({
1350
1441
  var RenderTimingsBar_default = RenderTimingsBar;
1351
1442
 
1352
1443
  // lib/components/RenderLogViewer/RenderLogViewer.tsx
1353
- import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
1444
+ import { jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
1354
1445
  var formatDebugOutputContent = (content) => {
1355
1446
  if (content instanceof Blob) return content;
1356
1447
  if (content == null) return "";
@@ -1368,10 +1459,10 @@ var RenderLogViewer = ({
1368
1459
  renderLog,
1369
1460
  onRerunWithDebug
1370
1461
  }) => {
1371
- const [sortOption, setSortOption] = useState5(
1462
+ const [sortOption, setSortOption] = useState6(
1372
1463
  "chronological"
1373
1464
  );
1374
- const [selectedDebugOption, setSelectedDebugOption] = useState5("");
1465
+ const [selectedDebugOption, setSelectedDebugOption] = useState6("");
1375
1466
  const debugOptions = [
1376
1467
  { value: "", label: "None" },
1377
1468
  {
@@ -1389,18 +1480,18 @@ var RenderLogViewer = ({
1389
1480
  ];
1390
1481
  if (!renderLog)
1391
1482
  return /* @__PURE__ */ jsxs11("div", { className: "rf-p-4 rf-bg-gray-100 rf-rounded-md", children: [
1392
- /* @__PURE__ */ jsx16("div", { className: "rf-mb-4", children: "No render log, make sure this tab is open when you render" }),
1483
+ /* @__PURE__ */ jsx17("div", { className: "rf-mb-4", children: "No render log, make sure this tab is open when you render" }),
1393
1484
  onRerunWithDebug && /* @__PURE__ */ jsxs11("div", { className: "rf-flex rf-gap-2 rf-items-center", children: [
1394
- /* @__PURE__ */ jsx16(
1485
+ /* @__PURE__ */ jsx17(
1395
1486
  "select",
1396
1487
  {
1397
1488
  value: selectedDebugOption,
1398
1489
  onChange: (e) => setSelectedDebugOption(e.target.value),
1399
1490
  className: "rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",
1400
- children: debugOptions.map((option) => /* @__PURE__ */ jsx16("option", { value: option.value, children: option.label }, option.value))
1491
+ children: debugOptions.map((option) => /* @__PURE__ */ jsx17("option", { value: option.value, children: option.label }, option.value))
1401
1492
  }
1402
1493
  ),
1403
- /* @__PURE__ */ jsx16(
1494
+ /* @__PURE__ */ jsx17(
1404
1495
  Button,
1405
1496
  {
1406
1497
  onClick: () => onRerunWithDebug(selectedDebugOption),
@@ -1425,19 +1516,19 @@ var RenderLogViewer = ({
1425
1516
  );
1426
1517
  return /* @__PURE__ */ jsxs11("div", { className: "rf-bg-white", children: [
1427
1518
  /* @__PURE__ */ jsxs11("div", { className: "rf-flex rf-justify-between rf-items-center rf-mb-4", children: [
1428
- /* @__PURE__ */ jsx16("div", { children: "Render Logs" }),
1519
+ /* @__PURE__ */ jsx17("div", { children: "Render Logs" }),
1429
1520
  /* @__PURE__ */ jsxs11("div", { className: "rf-flex rf-gap-4 rf-items-center", children: [
1430
1521
  onRerunWithDebug && /* @__PURE__ */ jsxs11("div", { className: "rf-flex rf-gap-2 rf-items-center", children: [
1431
- /* @__PURE__ */ jsx16(
1522
+ /* @__PURE__ */ jsx17(
1432
1523
  "select",
1433
1524
  {
1434
1525
  value: selectedDebugOption,
1435
1526
  onChange: (e) => setSelectedDebugOption(e.target.value),
1436
1527
  className: "rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",
1437
- children: debugOptions.map((option) => /* @__PURE__ */ jsx16("option", { value: option.value, children: option.label }, option.value))
1528
+ children: debugOptions.map((option) => /* @__PURE__ */ jsx17("option", { value: option.value, children: option.label }, option.value))
1438
1529
  }
1439
1530
  ),
1440
- /* @__PURE__ */ jsx16(
1531
+ /* @__PURE__ */ jsx17(
1441
1532
  Button,
1442
1533
  {
1443
1534
  onClick: () => onRerunWithDebug(selectedDebugOption),
@@ -1447,7 +1538,7 @@ var RenderLogViewer = ({
1447
1538
  }
1448
1539
  )
1449
1540
  ] }),
1450
- /* @__PURE__ */ jsx16("div", { className: "rf-flex rf-gap-2 rf-items-center", children: /* @__PURE__ */ jsxs11(
1541
+ /* @__PURE__ */ jsx17("div", { className: "rf-flex rf-gap-2 rf-items-center", children: /* @__PURE__ */ jsxs11(
1451
1542
  "select",
1452
1543
  {
1453
1544
  onChange: (e) => {
@@ -1477,13 +1568,13 @@ var RenderLogViewer = ({
1477
1568
  disabled: !renderLog?.debugOutputs || renderLog.debugOutputs.length === 0,
1478
1569
  className: "rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white disabled:rf-opacity-50 disabled:rf-cursor-not-allowed",
1479
1570
  children: [
1480
- /* @__PURE__ */ jsx16("option", { value: "", children: "Download Debug Output" }),
1481
- renderLog?.debugOutputs?.map((output) => /* @__PURE__ */ jsx16("option", { value: output.name, children: output.name }, output.name))
1571
+ /* @__PURE__ */ jsx17("option", { value: "", children: "Download Debug Output" }),
1572
+ renderLog?.debugOutputs?.map((output) => /* @__PURE__ */ jsx17("option", { value: output.name, children: output.name }, output.name))
1482
1573
  ]
1483
1574
  }
1484
1575
  ) }),
1485
1576
  /* @__PURE__ */ jsxs11("div", { className: "rf-flex rf-text-xs rf-items-center", children: [
1486
- /* @__PURE__ */ jsx16("div", { className: "rf-mr-2", children: "Sort by:" }),
1577
+ /* @__PURE__ */ jsx17("div", { className: "rf-mr-2", children: "Sort by:" }),
1487
1578
  /* @__PURE__ */ jsxs11(
1488
1579
  "select",
1489
1580
  {
@@ -1491,25 +1582,25 @@ var RenderLogViewer = ({
1491
1582
  onChange: (e) => setSortOption(e.target.value),
1492
1583
  className: "rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",
1493
1584
  children: [
1494
- /* @__PURE__ */ jsx16("option", { value: "chronological", children: "Phase Order" }),
1495
- /* @__PURE__ */ jsx16("option", { value: "longest", children: "Duration" })
1585
+ /* @__PURE__ */ jsx17("option", { value: "chronological", children: "Phase Order" }),
1586
+ /* @__PURE__ */ jsx17("option", { value: "longest", children: "Duration" })
1496
1587
  ]
1497
1588
  }
1498
1589
  )
1499
1590
  ] })
1500
1591
  ] })
1501
1592
  ] }),
1502
- /* @__PURE__ */ jsx16(RenderTimingsBar_default, { phaseTimings: renderLog.phaseTimings }),
1593
+ /* @__PURE__ */ jsx17(RenderTimingsBar_default, { phaseTimings: renderLog.phaseTimings }),
1503
1594
  /* @__PURE__ */ jsxs11("table", { className: "rf-w-full rf-text-xs", children: [
1504
- /* @__PURE__ */ jsx16("thead", { children: /* @__PURE__ */ jsxs11("tr", { children: [
1505
- /* @__PURE__ */ jsx16("th", { className: "rf-text-left rf-p-2", children: "Phase Order" }),
1506
- /* @__PURE__ */ jsx16("th", { className: "rf-text-left rf-p-2", children: "Phase" }),
1507
- /* @__PURE__ */ jsx16("th", { className: "rf-text-left rf-p-2", children: "Duration (ms)" })
1595
+ /* @__PURE__ */ jsx17("thead", { children: /* @__PURE__ */ jsxs11("tr", { children: [
1596
+ /* @__PURE__ */ jsx17("th", { className: "rf-text-left rf-p-2", children: "Phase Order" }),
1597
+ /* @__PURE__ */ jsx17("th", { className: "rf-text-left rf-p-2", children: "Phase" }),
1598
+ /* @__PURE__ */ jsx17("th", { className: "rf-text-left rf-p-2", children: "Duration (ms)" })
1508
1599
  ] }) }),
1509
- /* @__PURE__ */ jsx16("tbody", { children: orderedPhaseTimings.map(([phase, duration]) => /* @__PURE__ */ jsxs11("tr", { children: [
1510
- /* @__PURE__ */ jsx16("td", { className: "rf-p-2", children: orderedRenderPhases2.indexOf(phase) }),
1511
- /* @__PURE__ */ jsx16("td", { className: "rf-p-2", children: phase }),
1512
- /* @__PURE__ */ jsx16("td", { className: "rf-p-2", children: /* @__PURE__ */ jsx16("div", { className: "rf-w-8", children: /* @__PURE__ */ jsx16(
1600
+ /* @__PURE__ */ jsx17("tbody", { children: orderedPhaseTimings.map(([phase, duration]) => /* @__PURE__ */ jsxs11("tr", { children: [
1601
+ /* @__PURE__ */ jsx17("td", { className: "rf-p-2", children: orderedRenderPhases2.indexOf(phase) }),
1602
+ /* @__PURE__ */ jsx17("td", { className: "rf-p-2", children: phase }),
1603
+ /* @__PURE__ */ jsx17("td", { className: "rf-p-2", children: /* @__PURE__ */ jsx17("div", { className: "rf-w-8", children: /* @__PURE__ */ jsx17(
1513
1604
  "div",
1514
1605
  {
1515
1606
  className: "rf-h-2 rf-rounded-sm",
@@ -1519,7 +1610,7 @@ var RenderLogViewer = ({
1519
1610
  }
1520
1611
  }
1521
1612
  ) }) }),
1522
- /* @__PURE__ */ jsx16("td", { className: "rf-p-2", children: /* @__PURE__ */ jsxs11("div", { className: "rf-flex w-full", children: [
1613
+ /* @__PURE__ */ jsx17("td", { className: "rf-p-2", children: /* @__PURE__ */ jsxs11("div", { className: "rf-flex w-full", children: [
1523
1614
  /* @__PURE__ */ jsxs11("span", { className: "rf-flex-grow", children: [
1524
1615
  duration,
1525
1616
  "ms"
@@ -1535,16 +1626,16 @@ var RenderLogViewer = ({
1535
1626
  };
1536
1627
 
1537
1628
  // lib/components/SolversTabContent/SolversTabContent.tsx
1538
- import { useState as useState6, useMemo as useMemo2 } from "react";
1629
+ import { useState as useState7, useMemo as useMemo2 } from "react";
1539
1630
  import { Box, LayoutGrid, Route } from "lucide-react";
1540
1631
  import { SOLVERS } from "@tscircuit/core";
1541
1632
  import { GenericSolverDebugger } from "@tscircuit/solver-utils/react";
1542
1633
  import { ErrorBoundary } from "react-error-boundary";
1543
1634
 
1544
1635
  // lib/hooks/useInjectTailwind.ts
1545
- import { useEffect as useEffect5 } from "react";
1636
+ import { useEffect as useEffect6 } from "react";
1546
1637
  var useInjectTailwind = () => {
1547
- useEffect5(() => {
1638
+ useEffect6(() => {
1548
1639
  const tailwindScriptId = "tailwind-cdn-script";
1549
1640
  if (document.getElementById(tailwindScriptId) || window.tailwind) {
1550
1641
  return;
@@ -1565,7 +1656,7 @@ var useInjectTailwind = () => {
1565
1656
  };
1566
1657
 
1567
1658
  // lib/components/SolversTabContent/SolversTabContent.tsx
1568
- import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
1659
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
1569
1660
  var getSolverIcon = (solverName) => {
1570
1661
  if (solverName.toLowerCase().includes("pack")) {
1571
1662
  return LayoutGrid;
@@ -1578,7 +1669,7 @@ var getSolverIcon = (solverName) => {
1578
1669
  var SolversTabContent = ({
1579
1670
  solverEvents = []
1580
1671
  }) => {
1581
- const [selectedSolverId, setSelectedSolverId] = useState6(null);
1672
+ const [selectedSolverId, setSelectedSolverId] = useState7(null);
1582
1673
  useInjectTailwind();
1583
1674
  const solversById = useMemo2(() => {
1584
1675
  const map = /* @__PURE__ */ new Map();
@@ -1618,9 +1709,9 @@ var SolversTabContent = ({
1618
1709
  }
1619
1710
  }, [selectedSolverEvent]);
1620
1711
  if (solverEvents.length === 0) {
1621
- return /* @__PURE__ */ jsx17("div", { className: "rf-p-4", children: /* @__PURE__ */ jsx17("div", { className: "rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200", children: /* @__PURE__ */ jsxs12("div", { className: "rf-p-4", children: [
1622
- /* @__PURE__ */ jsx17("h3", { className: "rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3", children: "No Solvers Detected" }),
1623
- /* @__PURE__ */ jsx17("p", { className: "rf-text-sm rf-text-gray-600", children: "Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting." })
1712
+ return /* @__PURE__ */ jsx18("div", { className: "rf-p-4", children: /* @__PURE__ */ jsx18("div", { className: "rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200", children: /* @__PURE__ */ jsxs12("div", { className: "rf-p-4", children: [
1713
+ /* @__PURE__ */ jsx18("h3", { className: "rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3", children: "No Solvers Detected" }),
1714
+ /* @__PURE__ */ jsx18("p", { className: "rf-text-sm rf-text-gray-600", children: "Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting." })
1624
1715
  ] }) }) });
1625
1716
  }
1626
1717
  return /* @__PURE__ */ jsxs12("div", { className: "rf-flex rf-h-full rf-overflow-hidden", children: [
@@ -1633,7 +1724,7 @@ var SolversTabContent = ({
1633
1724
  solverIds.map((id) => {
1634
1725
  const solver = solversById.get(id);
1635
1726
  const isSelected = selectedSolverId === id;
1636
- return /* @__PURE__ */ jsx17(
1727
+ return /* @__PURE__ */ jsx18(
1637
1728
  "div",
1638
1729
  {
1639
1730
  className: `rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${isSelected ? "rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500" : "hover:rf-bg-gray-50"}`,
@@ -1641,10 +1732,10 @@ var SolversTabContent = ({
1641
1732
  children: (() => {
1642
1733
  const SolverIcon = getSolverIcon(solver.solverName);
1643
1734
  return /* @__PURE__ */ jsxs12("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
1644
- /* @__PURE__ */ jsx17(SolverIcon, { className: "rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0" }),
1735
+ /* @__PURE__ */ jsx18(SolverIcon, { className: "rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0" }),
1645
1736
  /* @__PURE__ */ jsxs12("div", { className: "rf-flex-1 rf-min-w-0", children: [
1646
- /* @__PURE__ */ jsx17("div", { className: "rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate", children: solver.componentName }),
1647
- /* @__PURE__ */ jsx17("div", { className: "rf-text-xs rf-text-gray-500 rf-truncate", children: solver.solverName })
1737
+ /* @__PURE__ */ jsx18("div", { className: "rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate", children: solver.componentName }),
1738
+ /* @__PURE__ */ jsx18("div", { className: "rf-text-xs rf-text-gray-500 rf-truncate", children: solver.solverName })
1648
1739
  ] })
1649
1740
  ] });
1650
1741
  })()
@@ -1653,32 +1744,32 @@ var SolversTabContent = ({
1653
1744
  );
1654
1745
  })
1655
1746
  ] }),
1656
- /* @__PURE__ */ jsx17("div", { className: "rf-flex-1 rf-overflow-hidden", children: selectedSolverEvent ? solverResult.instance ? /* @__PURE__ */ jsx17(
1747
+ /* @__PURE__ */ jsx18("div", { className: "rf-flex-1 rf-overflow-hidden", children: selectedSolverEvent ? solverResult.instance ? /* @__PURE__ */ jsx18(
1657
1748
  ErrorBoundary,
1658
1749
  {
1659
- fallback: /* @__PURE__ */ jsx17("div", { className: "rf-p-4", children: /* @__PURE__ */ jsxs12("div", { className: "rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4", children: [
1660
- /* @__PURE__ */ jsx17("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2", children: "Error Loading Solver Debugger" }),
1750
+ fallback: /* @__PURE__ */ jsx18("div", { className: "rf-p-4", children: /* @__PURE__ */ jsxs12("div", { className: "rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4", children: [
1751
+ /* @__PURE__ */ jsx18("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2", children: "Error Loading Solver Debugger" }),
1661
1752
  /* @__PURE__ */ jsxs12("p", { className: "rf-text-sm rf-text-red-600", children: [
1662
1753
  "Failed to render the solver debugger for",
1663
1754
  " ",
1664
1755
  selectedSolverEvent.solverName
1665
1756
  ] })
1666
1757
  ] }) }),
1667
- children: /* @__PURE__ */ jsx17(GenericSolverDebugger, { solver: solverResult.instance })
1758
+ children: /* @__PURE__ */ jsx18(GenericSolverDebugger, { solver: solverResult.instance })
1668
1759
  }
1669
1760
  ) : /* @__PURE__ */ jsxs12("div", { className: "rf-p-4", children: [
1670
1761
  /* @__PURE__ */ jsxs12("div", { className: "rf-mb-4", children: [
1671
- /* @__PURE__ */ jsx17("h3", { className: "rf-text-lg rf-font-semibold rf-text-gray-800", children: selectedSolverEvent.solverName }),
1762
+ /* @__PURE__ */ jsx18("h3", { className: "rf-text-lg rf-font-semibold rf-text-gray-800", children: selectedSolverEvent.solverName }),
1672
1763
  /* @__PURE__ */ jsxs12("p", { className: "rf-text-sm rf-text-gray-500", children: [
1673
1764
  "Component: ",
1674
1765
  selectedSolverEvent.componentName
1675
1766
  ] })
1676
1767
  ] }),
1677
- solverResult.error && /* @__PURE__ */ jsx17(
1768
+ solverResult.error && /* @__PURE__ */ jsx18(
1678
1769
  "div",
1679
1770
  {
1680
1771
  className: `rf-rounded-md rf-border rf-p-4 rf-mb-4 ${solverResult.classFound ? "rf-bg-red-50 rf-border-red-200" : "rf-bg-yellow-50 rf-border-yellow-200"}`,
1681
- children: /* @__PURE__ */ jsx17(
1772
+ children: /* @__PURE__ */ jsx18(
1682
1773
  "p",
1683
1774
  {
1684
1775
  className: `rf-text-sm ${solverResult.classFound ? "rf-text-red-700" : "rf-text-yellow-700"}`,
@@ -1688,21 +1779,21 @@ var SolversTabContent = ({
1688
1779
  }
1689
1780
  ),
1690
1781
  /* @__PURE__ */ jsxs12("div", { className: "rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden", children: [
1691
- /* @__PURE__ */ jsx17("div", { className: "rf-px-3 rf-py-2 rf-bg-gray-50", children: /* @__PURE__ */ jsx17("span", { className: "rf-text-sm rf-font-medium rf-text-gray-700", children: "Solver Parameters" }) }),
1692
- /* @__PURE__ */ jsx17("div", { className: "rf-p-3 rf-bg-white rf-border-t rf-border-gray-200", children: /* @__PURE__ */ jsx17("pre", { className: "rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto", children: JSON.stringify(selectedSolverEvent.solverParams, null, 2) }) })
1782
+ /* @__PURE__ */ jsx18("div", { className: "rf-px-3 rf-py-2 rf-bg-gray-50", children: /* @__PURE__ */ jsx18("span", { className: "rf-text-sm rf-font-medium rf-text-gray-700", children: "Solver Parameters" }) }),
1783
+ /* @__PURE__ */ jsx18("div", { className: "rf-p-3 rf-bg-white rf-border-t rf-border-gray-200", children: /* @__PURE__ */ jsx18("pre", { className: "rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto", children: JSON.stringify(selectedSolverEvent.solverParams, null, 2) }) })
1693
1784
  ] })
1694
- ] }) : /* @__PURE__ */ jsx17("div", { className: "rf-flex rf-items-center rf-justify-center rf-h-full", children: /* @__PURE__ */ jsx17("p", { className: "rf-text-sm rf-text-gray-500", children: "Select a solver from the list to view details" }) }) })
1785
+ ] }) : /* @__PURE__ */ jsx18("div", { className: "rf-flex rf-items-center rf-justify-center rf-h-full", children: /* @__PURE__ */ jsx18("p", { className: "rf-text-sm rf-text-gray-500", children: "Select a solver from the list to view details" }) }) })
1695
1786
  ] });
1696
1787
  };
1697
1788
 
1698
1789
  // lib/hooks/use-error-telemetry.ts
1699
- import { useEffect as useEffect6 } from "react";
1790
+ import { useEffect as useEffect7 } from "react";
1700
1791
  var useErrorTelemetry = ({
1701
1792
  errorMessage,
1702
1793
  errorStack,
1703
1794
  circuitJsonErrors
1704
1795
  }) => {
1705
- useEffect6(() => {
1796
+ useEffect7(() => {
1706
1797
  if (errorMessage) {
1707
1798
  const err = new Error(errorMessage);
1708
1799
  if (errorStack) err.stack = errorStack;
@@ -1712,7 +1803,7 @@ var useErrorTelemetry = ({
1712
1803
  }
1713
1804
  }
1714
1805
  }, [errorMessage, errorStack]);
1715
- useEffect6(() => {
1806
+ useEffect7(() => {
1716
1807
  if (circuitJsonErrors && circuitJsonErrors.length > 0) {
1717
1808
  for (const error of circuitJsonErrors) {
1718
1809
  const err = new Error(error.message || "Circuit JSON Error");
@@ -1730,7 +1821,7 @@ var useErrorTelemetry = ({
1730
1821
  };
1731
1822
 
1732
1823
  // package.json
1733
- var version = "0.0.1868";
1824
+ var version = "0.0.1870";
1734
1825
  var package_default = {
1735
1826
  name: "@tscircuit/runframe",
1736
1827
  main: "dist/preview.js",
@@ -1797,7 +1888,7 @@ var package_default = {
1797
1888
  "chokidar-cli": "^3.0.0",
1798
1889
  "circuit-json-to-bom-csv": "^0.0.8",
1799
1890
  "circuit-json-to-gerber": "^0.0.49",
1800
- "circuit-json-to-kicad": "^0.0.118",
1891
+ "circuit-json-to-kicad": "^0.0.119",
1801
1892
  "circuit-json-to-lbrn": "^0.0.4",
1802
1893
  "circuit-json-to-pnp-csv": "^0.0.7",
1803
1894
  "circuit-json-to-step": "^0.0.18",
@@ -1852,7 +1943,7 @@ var package_default = {
1852
1943
  };
1853
1944
 
1854
1945
  // lib/hooks/use-eval-versions.ts
1855
- import { useEffect as useEffect7, useMemo as useMemo3, useState as useState7 } from "react";
1946
+ import { useEffect as useEffect8, useMemo as useMemo3, useState as useState8 } from "react";
1856
1947
 
1857
1948
  // lib/components/RunFrame/runner-store/use-runner-store.ts
1858
1949
  import { create } from "zustand";
@@ -1871,16 +1962,16 @@ var useRunnerStore = create()(
1871
1962
 
1872
1963
  // lib/hooks/use-eval-versions.ts
1873
1964
  var useEvalVersions = (allowSelecting) => {
1874
- const [allVersions, setAllVersions] = useState7([]);
1875
- const [latest, setLatest] = useState7(null);
1876
- const [search, setSearch] = useState7("");
1965
+ const [allVersions, setAllVersions] = useState8([]);
1966
+ const [latest, setLatest] = useState8(null);
1967
+ const [search, setSearch] = useState8("");
1877
1968
  const [selected, setSelected] = useLocalStorageState(
1878
1969
  "eval-version-selection",
1879
1970
  null
1880
1971
  );
1881
1972
  const setLastRunEvalVersion = useRunnerStore((s) => s.setLastRunEvalVersion);
1882
1973
  const lastRunEvalVersion = useRunnerStore((s) => s.lastRunEvalVersion);
1883
- useEffect7(() => {
1974
+ useEffect8(() => {
1884
1975
  if (!allowSelecting) return;
1885
1976
  fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then((res) => res.json()).then((data) => {
1886
1977
  if (Array.isArray(data?.versions)) {
@@ -1894,7 +1985,7 @@ var useEvalVersions = (allowSelecting) => {
1894
1985
  }).catch(() => {
1895
1986
  });
1896
1987
  }, [allowSelecting]);
1897
- useEffect7(() => {
1988
+ useEffect8(() => {
1898
1989
  if (!allowSelecting) return;
1899
1990
  if (selected) {
1900
1991
  window.TSCIRCUIT_LATEST_EVAL_VERSION = selected;
@@ -1923,7 +2014,7 @@ var useEvalVersions = (allowSelecting) => {
1923
2014
  };
1924
2015
 
1925
2016
  // lib/components/FileMenuLeftHeader.tsx
1926
- import { useEffect as useEffect14, useMemo as useMemo9, useState as useState21 } from "react";
2017
+ import { useEffect as useEffect15, useMemo as useMemo9, useState as useState22 } from "react";
1927
2018
 
1928
2019
  // lib/components/RunFrameWithApi/store.ts
1929
2020
  import { applyEditEventsToManualEditsFile } from "@tscircuit/core";
@@ -2130,16 +2221,16 @@ var useRunFrameStore = create2()(
2130
2221
  );
2131
2222
 
2132
2223
  // lib/components/RunFrameForCli/SelectSnippetDialog.tsx
2133
- import { useState as useState8 } from "react";
2134
- import { jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
2224
+ import { useState as useState9 } from "react";
2225
+ import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
2135
2226
  var SelectSnippetDialog = ({
2136
2227
  snippetNames,
2137
2228
  onSelect,
2138
2229
  onCancel,
2139
2230
  isOpen
2140
2231
  }) => {
2141
- const [selectedName, setSelectedName] = useState8("");
2142
- const [searchInput, setSearchInput] = useState8("");
2232
+ const [selectedName, setSelectedName] = useState9("");
2233
+ const [searchInput, setSearchInput] = useState9("");
2143
2234
  if (!isOpen) return null;
2144
2235
  const filteredSnippets = snippetNames.filter(
2145
2236
  (name) => name.toLowerCase().includes(searchInput.toLowerCase())
@@ -2154,9 +2245,9 @@ var SelectSnippetDialog = ({
2154
2245
  }
2155
2246
  }
2156
2247
  };
2157
- return /* @__PURE__ */ jsx18("div", { className: "rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-items-center rf-justify-center rf-z-[100]", children: /* @__PURE__ */ jsxs13("div", { className: "rf-bg-white rf-rounded-lg rf-p-6 rf-w-96", children: [
2158
- /* @__PURE__ */ jsx18("h2", { className: "rf-text-lg rf-font-semibold rf-mb-4", children: "Select Snippet" }),
2159
- /* @__PURE__ */ jsx18(
2248
+ return /* @__PURE__ */ jsx19("div", { className: "rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-items-center rf-justify-center rf-z-[100]", children: /* @__PURE__ */ jsxs13("div", { className: "rf-bg-white rf-rounded-lg rf-p-6 rf-w-96", children: [
2249
+ /* @__PURE__ */ jsx19("h2", { className: "rf-text-lg rf-font-semibold rf-mb-4", children: "Select Snippet" }),
2250
+ /* @__PURE__ */ jsx19(
2160
2251
  "input",
2161
2252
  {
2162
2253
  type: "text",
@@ -2168,7 +2259,7 @@ var SelectSnippetDialog = ({
2168
2259
  }
2169
2260
  ),
2170
2261
  /* @__PURE__ */ jsxs13("div", { className: "rf-h-60 rf-overflow-y-auto", children: [
2171
- filteredSnippets.map((name) => /* @__PURE__ */ jsx18(
2262
+ filteredSnippets.map((name) => /* @__PURE__ */ jsx19(
2172
2263
  "button",
2173
2264
  {
2174
2265
  type: "button",
@@ -2193,7 +2284,7 @@ var SelectSnippetDialog = ({
2193
2284
  )
2194
2285
  ] }),
2195
2286
  /* @__PURE__ */ jsxs13("div", { className: "rf-mt-4 rf-flex rf-justify-end rf-gap-2", children: [
2196
- /* @__PURE__ */ jsx18(
2287
+ /* @__PURE__ */ jsx19(
2197
2288
  "button",
2198
2289
  {
2199
2290
  type: "button",
@@ -2202,7 +2293,7 @@ var SelectSnippetDialog = ({
2202
2293
  children: "Cancel"
2203
2294
  }
2204
2295
  ),
2205
- /* @__PURE__ */ jsx18(
2296
+ /* @__PURE__ */ jsx19(
2206
2297
  "button",
2207
2298
  {
2208
2299
  type: "button",
@@ -2217,11 +2308,11 @@ var SelectSnippetDialog = ({
2217
2308
  };
2218
2309
 
2219
2310
  // lib/components/RunFrameForCli/useEventHandler.ts
2220
- import { useEffect as useEffect8, useRef as useRef2 } from "react";
2311
+ import { useEffect as useEffect9, useRef as useRef2 } from "react";
2221
2312
  var useEventHandler = (callback) => {
2222
2313
  const lastProcessedEventId = useRef2(null);
2223
2314
  const recentEvents = useRunFrameStore((state) => state.recentEvents);
2224
- useEffect8(() => {
2315
+ useEffect9(() => {
2225
2316
  if (recentEvents.length === 0) return;
2226
2317
  const latestEvent = recentEvents[0];
2227
2318
  if (latestEvent.event_id !== lastProcessedEventId.current) {
@@ -2234,10 +2325,10 @@ var useEventHandler = (callback) => {
2234
2325
  // lib/components/ui/alert-dialog.tsx
2235
2326
  import * as React7 from "react";
2236
2327
  import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
2237
- import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
2328
+ import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
2238
2329
  var AlertDialog = AlertDialogPrimitive.Root;
2239
2330
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
2240
- var AlertDialogOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
2331
+ var AlertDialogOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
2241
2332
  AlertDialogPrimitive.Overlay,
2242
2333
  {
2243
2334
  className: cn(
@@ -2250,8 +2341,8 @@ var AlertDialogOverlay = React7.forwardRef(({ className, ...props }, ref) => /*
2250
2341
  ));
2251
2342
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
2252
2343
  var AlertDialogContent = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs14(AlertDialogPortal, { children: [
2253
- /* @__PURE__ */ jsx19(AlertDialogOverlay, {}),
2254
- /* @__PURE__ */ jsx19(
2344
+ /* @__PURE__ */ jsx20(AlertDialogOverlay, {}),
2345
+ /* @__PURE__ */ jsx20(
2255
2346
  AlertDialogPrimitive.Content,
2256
2347
  {
2257
2348
  ref,
@@ -2267,7 +2358,7 @@ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
2267
2358
  var AlertDialogHeader = ({
2268
2359
  className,
2269
2360
  ...props
2270
- }) => /* @__PURE__ */ jsx19(
2361
+ }) => /* @__PURE__ */ jsx20(
2271
2362
  "div",
2272
2363
  {
2273
2364
  className: cn(
@@ -2281,7 +2372,7 @@ AlertDialogHeader.displayName = "AlertDialogHeader";
2281
2372
  var AlertDialogFooter = ({
2282
2373
  className,
2283
2374
  ...props
2284
- }) => /* @__PURE__ */ jsx19(
2375
+ }) => /* @__PURE__ */ jsx20(
2285
2376
  "div",
2286
2377
  {
2287
2378
  className: cn(
@@ -2292,7 +2383,7 @@ var AlertDialogFooter = ({
2292
2383
  }
2293
2384
  );
2294
2385
  AlertDialogFooter.displayName = "AlertDialogFooter";
2295
- var AlertDialogTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
2386
+ var AlertDialogTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
2296
2387
  AlertDialogPrimitive.Title,
2297
2388
  {
2298
2389
  ref,
@@ -2301,7 +2392,7 @@ var AlertDialogTitle = React7.forwardRef(({ className, ...props }, ref) => /* @_
2301
2392
  }
2302
2393
  ));
2303
2394
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
2304
- var AlertDialogDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
2395
+ var AlertDialogDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
2305
2396
  AlertDialogPrimitive.Description,
2306
2397
  {
2307
2398
  ref,
@@ -2313,7 +2404,7 @@ var AlertDialogDescription = React7.forwardRef(({ className, ...props }, ref) =>
2313
2404
  }
2314
2405
  ));
2315
2406
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
2316
- var AlertDialogAction = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
2407
+ var AlertDialogAction = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
2317
2408
  AlertDialogPrimitive.Action,
2318
2409
  {
2319
2410
  ref,
@@ -2322,7 +2413,7 @@ var AlertDialogAction = React7.forwardRef(({ className, ...props }, ref) => /* @
2322
2413
  }
2323
2414
  ));
2324
2415
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
2325
- var AlertDialogCancel = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
2416
+ var AlertDialogCancel = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
2326
2417
  AlertDialogPrimitive.Cancel,
2327
2418
  {
2328
2419
  ref,
@@ -2340,8 +2431,8 @@ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
2340
2431
  import * as React8 from "react";
2341
2432
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
2342
2433
  import { Check as Check2 } from "lucide-react";
2343
- import { jsx as jsx20 } from "react/jsx-runtime";
2344
- var Checkbox = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
2434
+ import { jsx as jsx21 } from "react/jsx-runtime";
2435
+ var Checkbox = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
2345
2436
  CheckboxPrimitive.Root,
2346
2437
  {
2347
2438
  ref,
@@ -2350,13 +2441,13 @@ var Checkbox = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__
2350
2441
  className
2351
2442
  ),
2352
2443
  ...props,
2353
- children: /* @__PURE__ */ jsx20(
2444
+ children: /* @__PURE__ */ jsx21(
2354
2445
  CheckboxPrimitive.Indicator,
2355
2446
  {
2356
2447
  className: cn(
2357
2448
  "rf-flex rf-items-center rf-justify-center rf-text-current"
2358
2449
  ),
2359
- children: /* @__PURE__ */ jsx20(Check2, { className: "rf-h-4 rf-w-4" })
2450
+ children: /* @__PURE__ */ jsx21(Check2, { className: "rf-h-4 rf-w-4" })
2360
2451
  }
2361
2452
  )
2362
2453
  }
@@ -2370,10 +2461,10 @@ import { Loader2 as Loader23 } from "lucide-react";
2370
2461
  // lib/components/ui/dialog.tsx
2371
2462
  import * as React9 from "react";
2372
2463
  import * as DialogPrimitive from "@radix-ui/react-dialog";
2373
- import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
2464
+ import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
2374
2465
  var Dialog = DialogPrimitive.Root;
2375
2466
  var DialogPortal = DialogPrimitive.Portal;
2376
- var DialogOverlay = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
2467
+ var DialogOverlay = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
2377
2468
  DialogPrimitive.Overlay,
2378
2469
  {
2379
2470
  className: cn(
@@ -2386,8 +2477,8 @@ var DialogOverlay = React9.forwardRef(({ className, ...props }, ref) => /* @__PU
2386
2477
  ));
2387
2478
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
2388
2479
  var DialogContent = React9.forwardRef(({ className, children, showOverlay = true, ...props }, ref) => /* @__PURE__ */ jsxs15(DialogPortal, { children: [
2389
- /* @__PURE__ */ jsx21(DialogOverlay, { className: cn(showOverlay ? "" : "rf-hidden") }),
2390
- /* @__PURE__ */ jsx21(
2480
+ /* @__PURE__ */ jsx22(DialogOverlay, { className: cn(showOverlay ? "" : "rf-hidden") }),
2481
+ /* @__PURE__ */ jsx22(
2391
2482
  DialogPrimitive.Content,
2392
2483
  {
2393
2484
  ref,
@@ -2404,7 +2495,7 @@ DialogContent.displayName = DialogPrimitive.Content.displayName;
2404
2495
  var DialogHeader = ({
2405
2496
  className,
2406
2497
  ...props
2407
- }) => /* @__PURE__ */ jsx21(
2498
+ }) => /* @__PURE__ */ jsx22(
2408
2499
  "div",
2409
2500
  {
2410
2501
  className: cn(
@@ -2418,7 +2509,7 @@ DialogHeader.displayName = "DialogHeader";
2418
2509
  var DialogFooter = ({
2419
2510
  className,
2420
2511
  ...props
2421
- }) => /* @__PURE__ */ jsx21(
2512
+ }) => /* @__PURE__ */ jsx22(
2422
2513
  "div",
2423
2514
  {
2424
2515
  className: cn(
@@ -2429,7 +2520,7 @@ var DialogFooter = ({
2429
2520
  }
2430
2521
  );
2431
2522
  DialogFooter.displayName = "DialogFooter";
2432
- var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
2523
+ var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
2433
2524
  DialogPrimitive.Title,
2434
2525
  {
2435
2526
  ref,
@@ -2438,7 +2529,7 @@ var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE
2438
2529
  }
2439
2530
  ));
2440
2531
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
2441
- var DialogDescription = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
2532
+ var DialogDescription = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
2442
2533
  DialogPrimitive.Description,
2443
2534
  {
2444
2535
  ref,
@@ -2531,7 +2622,7 @@ var loadJlcpcbComponentTsx = async (partNumber, opts) => {
2531
2622
  // lib/components/ImportComponentDialog2/components/SearchBar.tsx
2532
2623
  import * as React10 from "react";
2533
2624
  import { Loader2, Search } from "lucide-react";
2534
- import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
2625
+ import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
2535
2626
  var SearchBar = ({
2536
2627
  query,
2537
2628
  placeholder,
@@ -2550,8 +2641,8 @@ var SearchBar = ({
2550
2641
  );
2551
2642
  return /* @__PURE__ */ jsxs16("div", { className: "rf-flex rf-items-center rf-gap-2 rf-mt-4", children: [
2552
2643
  /* @__PURE__ */ jsxs16("div", { className: "rf-relative rf-flex-grow", children: [
2553
- /* @__PURE__ */ jsx22(Search, { className: "rf-absolute rf-left-2 rf-top-2.5 rf-h-4 rf-w-4 rf-text-muted-foreground" }),
2554
- /* @__PURE__ */ jsx22(
2644
+ /* @__PURE__ */ jsx23(Search, { className: "rf-absolute rf-left-2 rf-top-2.5 rf-h-4 rf-w-4 rf-text-muted-foreground" }),
2645
+ /* @__PURE__ */ jsx23(
2555
2646
  Input,
2556
2647
  {
2557
2648
  placeholder,
@@ -2564,15 +2655,15 @@ var SearchBar = ({
2564
2655
  }
2565
2656
  )
2566
2657
  ] }),
2567
- /* @__PURE__ */ jsx22(
2658
+ /* @__PURE__ */ jsx23(
2568
2659
  Button,
2569
2660
  {
2570
2661
  onClick: onSubmit,
2571
2662
  disabled: isSearching || query.trim().length < 1,
2572
2663
  className: "sm:rf-px-4 rf-px-3",
2573
- children: isSearching ? /* @__PURE__ */ jsx22(Loader2, { className: "rf-h-4 rf-w-4 rf-animate-spin" }) : /* @__PURE__ */ jsxs16(Fragment3, { children: [
2574
- /* @__PURE__ */ jsx22(Search, { className: "rf-h-4 rf-w-4 sm:rf-hidden" }),
2575
- /* @__PURE__ */ jsx22("span", { className: "rf-hidden sm:rf-inline", children: "Search" })
2664
+ children: isSearching ? /* @__PURE__ */ jsx23(Loader2, { className: "rf-h-4 rf-w-4 rf-animate-spin" }) : /* @__PURE__ */ jsxs16(Fragment3, { children: [
2665
+ /* @__PURE__ */ jsx23(Search, { className: "rf-h-4 rf-w-4 sm:rf-hidden" }),
2666
+ /* @__PURE__ */ jsx23("span", { className: "rf-hidden sm:rf-inline", children: "Search" })
2576
2667
  ] })
2577
2668
  }
2578
2669
  )
@@ -2581,7 +2672,7 @@ var SearchBar = ({
2581
2672
 
2582
2673
  // lib/components/ImportComponentDialog2/components/SearchResultsList.tsx
2583
2674
  import { Lock } from "lucide-react";
2584
- import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
2675
+ import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
2585
2676
  var currencyFormatter = new Intl.NumberFormat("en-US", {
2586
2677
  style: "currency",
2587
2678
  currency: "USD"
@@ -2639,7 +2730,7 @@ var SearchResultsList = ({
2639
2730
  onShowDetails
2640
2731
  }) => {
2641
2732
  const selectedKey = selected ? getResultKey(selected) : null;
2642
- return /* @__PURE__ */ jsx23("div", { className: "rf-divide-y rf-w-full rf-overflow-hidden", children: results.map((result) => {
2733
+ return /* @__PURE__ */ jsx24("div", { className: "rf-divide-y rf-w-full rf-overflow-hidden", children: results.map((result) => {
2643
2734
  const key = getResultKey(result);
2644
2735
  const isSelected = selectedKey === key;
2645
2736
  const primary = getPrimaryText(result);
@@ -2658,14 +2749,14 @@ var SearchResultsList = ({
2658
2749
  /* @__PURE__ */ jsxs17("div", { className: "rf-flex rf-items-start rf-gap-2 rf-min-w-0", children: [
2659
2750
  /* @__PURE__ */ jsxs17("div", { className: "rf-font-medium rf-text-sm rf-truncate rf-flex-1 rf-min-w-0 rf-flex rf-items-center rf-gap-1.5", children: [
2660
2751
  primary,
2661
- result.source === "jlcpcb" && isBasic != null && /* @__PURE__ */ jsx23(
2752
+ result.source === "jlcpcb" && isBasic != null && /* @__PURE__ */ jsx24(
2662
2753
  "span",
2663
2754
  {
2664
2755
  className: `rf-text-xs rf-px-1.5 rf-py-0.5 rf-rounded rf-font-medium rf-flex-shrink-0 ${isBasic ? "rf-bg-green-100 rf-text-green-700" : "rf-bg-orange-100 rf-text-orange-700"}`,
2665
2756
  children: isBasic ? "Basic" : "Extended"
2666
2757
  }
2667
2758
  ),
2668
- result.source === "tscircuit.com" && result.package.is_private && /* @__PURE__ */ jsx23(Lock, { className: "rf-ml-1 rf-h-3 rf-w-3 rf-text-zinc-400 rf-flex-shrink-0" })
2759
+ result.source === "tscircuit.com" && result.package.is_private && /* @__PURE__ */ jsx24(Lock, { className: "rf-ml-1 rf-h-3 rf-w-3 rf-text-zinc-400 rf-flex-shrink-0" })
2669
2760
  ] }),
2670
2761
  result.source === "jlcpcb" && stock != null ? /* @__PURE__ */ jsxs17("div", { className: "rf-text-xs rf-text-zinc-500 rf-font-medium rf-whitespace-nowrap rf-flex-shrink-0 sm:rf-hidden", children: [
2671
2762
  stock.toLocaleString(),
@@ -2673,12 +2764,12 @@ var SearchResultsList = ({
2673
2764
  ] }) : null
2674
2765
  ] }),
2675
2766
  /* @__PURE__ */ jsxs17("div", { className: "rf-text-xs rf-text-zinc-500 rf-truncate rf-w-full", children: [
2676
- partNumber ? /* @__PURE__ */ jsx23("span", { className: "rf-mr-2", children: partNumber }) : null,
2767
+ partNumber ? /* @__PURE__ */ jsx24("span", { className: "rf-mr-2", children: partNumber }) : null,
2677
2768
  secondary
2678
2769
  ] })
2679
2770
  ] }),
2680
2771
  /* @__PURE__ */ jsxs17("div", { children: [
2681
- result.source === "tscircuit.com" && onShowDetails ? /* @__PURE__ */ jsx23("div", { className: "rf-flex-shrink-0 rf-w-full sm:rf-w-auto", children: /* @__PURE__ */ jsx23(
2772
+ result.source === "tscircuit.com" && onShowDetails ? /* @__PURE__ */ jsx24("div", { className: "rf-flex-shrink-0 rf-w-full sm:rf-w-auto", children: /* @__PURE__ */ jsx24(
2682
2773
  Button,
2683
2774
  {
2684
2775
  variant: "outline",
@@ -2694,7 +2785,7 @@ var SearchResultsList = ({
2694
2785
  stock.toLocaleString(),
2695
2786
  " in stock"
2696
2787
  ] }) : null,
2697
- price != null && /* @__PURE__ */ jsx23("div", { className: "rf-hidden sm:rf-block rf-text-xs rf-text-zinc-500 rf-font-medium rf-whitespace-nowrap rf-flex-shrink-0 rf-text-right", children: formatPrice(price) })
2788
+ price != null && /* @__PURE__ */ jsx24("div", { className: "rf-hidden sm:rf-block rf-text-xs rf-text-zinc-500 rf-font-medium rf-whitespace-nowrap rf-flex-shrink-0 rf-text-right", children: formatPrice(price) })
2698
2789
  ] })
2699
2790
  ]
2700
2791
  },
@@ -2713,7 +2804,7 @@ var zIndexMap = {
2713
2804
  };
2714
2805
 
2715
2806
  // lib/components/ImportComponentDialog2/components/TscircuitPackageDetailsDialog.tsx
2716
- import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
2807
+ import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
2717
2808
  var TscircuitPackageDetailsDialog = ({
2718
2809
  packageResult,
2719
2810
  isOpen,
@@ -2733,7 +2824,7 @@ var TscircuitPackageDetailsDialog = ({
2733
2824
  const ownerUsername = pkg?.org_owner_tscircuit_handle ?? void 0;
2734
2825
  const ownerUrl = ownerUsername ? `https://tscircuit.com/${ownerUsername}` : void 0;
2735
2826
  const packageUrl = ownerUsername && packageName ? `https://tscircuit.com/${ownerUsername}/${packageName}` : void 0;
2736
- return /* @__PURE__ */ jsx24(Dialog, { open: isOpen, onOpenChange, children: /* @__PURE__ */ jsxs18(
2827
+ return /* @__PURE__ */ jsx25(Dialog, { open: isOpen, onOpenChange, children: /* @__PURE__ */ jsxs18(
2737
2828
  DialogContent,
2738
2829
  {
2739
2830
  showOverlay: false,
@@ -2743,14 +2834,14 @@ var TscircuitPackageDetailsDialog = ({
2743
2834
  },
2744
2835
  className: "rf-max-w-5xl no-scrollbar !rf-overflow-y-auto rf-max-h-[90vh] rf-overflow-hidden rf-flex rf-flex-col rf-rounded-sm",
2745
2836
  children: [
2746
- /* @__PURE__ */ jsx24(DialogHeader, { className: "rf-pb-4 rf-border-b", children: /* @__PURE__ */ jsx24("div", { className: "rf-flex rf-items-start rf-justify-between rf-gap-4", children: /* @__PURE__ */ jsxs18("div", { className: "rf-flex-1 rf-min-w-0", children: [
2747
- /* @__PURE__ */ jsx24(DialogTitle, { className: "rf-text-xl rf-font-semibold rf-truncate", children: packageName }),
2748
- /* @__PURE__ */ jsx24(DialogDescription, { children: pkg?.description })
2837
+ /* @__PURE__ */ jsx25(DialogHeader, { className: "rf-pb-4 rf-border-b", children: /* @__PURE__ */ jsx25("div", { className: "rf-flex rf-items-start rf-justify-between rf-gap-4", children: /* @__PURE__ */ jsxs18("div", { className: "rf-flex-1 rf-min-w-0", children: [
2838
+ /* @__PURE__ */ jsx25(DialogTitle, { className: "rf-text-xl rf-font-semibold rf-truncate", children: packageName }),
2839
+ /* @__PURE__ */ jsx25(DialogDescription, { children: pkg?.description })
2749
2840
  ] }) }) }),
2750
2841
  /* @__PURE__ */ jsxs18("div", { className: "rf-flex-1 rf-overflow-y-auto rf-py-4 rf-space-y-6", children: [
2751
2842
  ownerUsername ? /* @__PURE__ */ jsxs18("div", { children: [
2752
- /* @__PURE__ */ jsx24("span", { className: "rf-text-xs rf-font-medium rf-text-gray-500 rf-uppercase rf-tracking-wide", children: "Created by" }),
2753
- /* @__PURE__ */ jsx24("div", { className: "rf-mt-1 rf-text-sm rf-font-medium", children: ownerUrl ? /* @__PURE__ */ jsx24(
2843
+ /* @__PURE__ */ jsx25("span", { className: "rf-text-xs rf-font-medium rf-text-gray-500 rf-uppercase rf-tracking-wide", children: "Created by" }),
2844
+ /* @__PURE__ */ jsx25("div", { className: "rf-mt-1 rf-text-sm rf-font-medium", children: ownerUrl ? /* @__PURE__ */ jsx25(
2754
2845
  "a",
2755
2846
  {
2756
2847
  href: ownerUrl,
@@ -2761,8 +2852,8 @@ var TscircuitPackageDetailsDialog = ({
2761
2852
  }
2762
2853
  ) : ownerUsername })
2763
2854
  ] }) : null,
2764
- (cadPreviewUrl || pcbPreviewUrl || schematicPreviewUrl) && /* @__PURE__ */ jsx24(Fragment4, { children: /* @__PURE__ */ jsxs18("div", { children: [
2765
- /* @__PURE__ */ jsx24("h3", { className: "rf-text-lg rf-font-semibold rf-mb-4", children: "Preview" }),
2855
+ (cadPreviewUrl || pcbPreviewUrl || schematicPreviewUrl) && /* @__PURE__ */ jsx25(Fragment4, { children: /* @__PURE__ */ jsxs18("div", { children: [
2856
+ /* @__PURE__ */ jsx25("h3", { className: "rf-text-lg rf-font-semibold rf-mb-4", children: "Preview" }),
2766
2857
  /* @__PURE__ */ jsxs18(
2767
2858
  Tabs,
2768
2859
  {
@@ -2770,17 +2861,17 @@ var TscircuitPackageDetailsDialog = ({
2770
2861
  onValueChange: (value) => onPreviewTabChange(value),
2771
2862
  children: [
2772
2863
  /* @__PURE__ */ jsxs18(TabsList, { className: "rf-inline-flex rf-h-9 rf-items-center rf-justify-center rf-rounded-lg rf-bg-zinc-100 rf-p-1 rf-text-zinc-500 dark:rf-bg-zinc-800 dark:rf-text-zinc-400", children: [
2773
- pcbPreviewUrl && /* @__PURE__ */ jsx24(TabsTrigger, { value: "pcb", children: "PCB" }),
2774
- schematicPreviewUrl && /* @__PURE__ */ jsx24(TabsTrigger, { value: "schematic", children: "Schematic" }),
2775
- cadPreviewUrl && /* @__PURE__ */ jsx24(TabsTrigger, { value: "3d", children: "3D" })
2864
+ pcbPreviewUrl && /* @__PURE__ */ jsx25(TabsTrigger, { value: "pcb", children: "PCB" }),
2865
+ schematicPreviewUrl && /* @__PURE__ */ jsx25(TabsTrigger, { value: "schematic", children: "Schematic" }),
2866
+ cadPreviewUrl && /* @__PURE__ */ jsx25(TabsTrigger, { value: "3d", children: "3D" })
2776
2867
  ] }),
2777
2868
  /* @__PURE__ */ jsxs18("div", { className: "rf-mt-4", children: [
2778
- /* @__PURE__ */ jsx24(
2869
+ /* @__PURE__ */ jsx25(
2779
2870
  TabsContent,
2780
2871
  {
2781
2872
  value: "pcb",
2782
2873
  className: "rf-border rf-rounded-lg rf-overflow-hidden rf-bg-gray-50",
2783
- children: pcbPreviewUrl ? /* @__PURE__ */ jsx24(
2874
+ children: pcbPreviewUrl ? /* @__PURE__ */ jsx25(
2784
2875
  "img",
2785
2876
  {
2786
2877
  src: pcbPreviewUrl,
@@ -2790,12 +2881,12 @@ var TscircuitPackageDetailsDialog = ({
2790
2881
  ) : null
2791
2882
  }
2792
2883
  ),
2793
- /* @__PURE__ */ jsx24(
2884
+ /* @__PURE__ */ jsx25(
2794
2885
  TabsContent,
2795
2886
  {
2796
2887
  value: "schematic",
2797
2888
  className: "rf-border rf-rounded-lg rf-overflow-hidden rf-bg-gray-50",
2798
- children: schematicPreviewUrl ? /* @__PURE__ */ jsx24(
2889
+ children: schematicPreviewUrl ? /* @__PURE__ */ jsx25(
2799
2890
  "img",
2800
2891
  {
2801
2892
  src: schematicPreviewUrl,
@@ -2805,12 +2896,12 @@ var TscircuitPackageDetailsDialog = ({
2805
2896
  ) : null
2806
2897
  }
2807
2898
  ),
2808
- /* @__PURE__ */ jsx24(
2899
+ /* @__PURE__ */ jsx25(
2809
2900
  TabsContent,
2810
2901
  {
2811
2902
  value: "3d",
2812
2903
  className: "rf-border rf-rounded-lg rf-overflow-hidden rf-bg-gray-50",
2813
- children: cadPreviewUrl ? /* @__PURE__ */ jsx24(
2904
+ children: cadPreviewUrl ? /* @__PURE__ */ jsx25(
2814
2905
  "img",
2815
2906
  {
2816
2907
  src: cadPreviewUrl,
@@ -2826,20 +2917,20 @@ var TscircuitPackageDetailsDialog = ({
2826
2917
  )
2827
2918
  ] }) }),
2828
2919
  details?.ai_description ? /* @__PURE__ */ jsxs18("section", { children: [
2829
- /* @__PURE__ */ jsx24("h3", { className: "rf-text-lg rf-font-semibold rf-mb-3", children: "AI Description" }),
2830
- /* @__PURE__ */ jsx24("div", { className: "rf-bg-gray-50 rf-border rf-border-gray-200 rf-rounded-lg rf-p-4", children: /* @__PURE__ */ jsx24("p", { className: "rf-text-sm rf-text-gray-700 rf-leading-relaxed", children: details.ai_description }) })
2920
+ /* @__PURE__ */ jsx25("h3", { className: "rf-text-lg rf-font-semibold rf-mb-3", children: "AI Description" }),
2921
+ /* @__PURE__ */ jsx25("div", { className: "rf-bg-gray-50 rf-border rf-border-gray-200 rf-rounded-lg rf-p-4", children: /* @__PURE__ */ jsx25("p", { className: "rf-text-sm rf-text-gray-700 rf-leading-relaxed", children: details.ai_description }) })
2831
2922
  ] }) : null,
2832
2923
  details?.ai_usage_instructions ? /* @__PURE__ */ jsxs18("section", { children: [
2833
- /* @__PURE__ */ jsx24("h3", { className: "rf-text-lg rf-font-semibold rf-mb-3", children: "Usage Instructions" }),
2834
- /* @__PURE__ */ jsx24("div", { className: "rf-bg-gray-50 rf-border rf-border-gray-200 rf-rounded-lg rf-p-4", children: /* @__PURE__ */ jsx24("p", { className: "rf-text-sm rf-text-gray-700 rf-leading-relaxed rf-whitespace-pre-wrap", children: details.ai_usage_instructions }) })
2924
+ /* @__PURE__ */ jsx25("h3", { className: "rf-text-lg rf-font-semibold rf-mb-3", children: "Usage Instructions" }),
2925
+ /* @__PURE__ */ jsx25("div", { className: "rf-bg-gray-50 rf-border rf-border-gray-200 rf-rounded-lg rf-p-4", children: /* @__PURE__ */ jsx25("p", { className: "rf-text-sm rf-text-gray-700 rf-leading-relaxed rf-whitespace-pre-wrap", children: details.ai_usage_instructions }) })
2835
2926
  ] }) : null,
2836
2927
  isLoading ? /* @__PURE__ */ jsxs18("div", { className: "rf-flex rf-justify-center rf-items-center rf-gap-2 rf-text-gray-500", children: [
2837
- /* @__PURE__ */ jsx24(Loader22, { className: "rf-h-4 rf-w-4 rf-animate-spin" }),
2838
- /* @__PURE__ */ jsx24("span", { className: "rf-text-sm", children: "Loading package details..." })
2928
+ /* @__PURE__ */ jsx25(Loader22, { className: "rf-h-4 rf-w-4 rf-animate-spin" }),
2929
+ /* @__PURE__ */ jsx25("span", { className: "rf-text-sm", children: "Loading package details..." })
2839
2930
  ] }) : null
2840
2931
  ] }),
2841
2932
  /* @__PURE__ */ jsxs18(DialogFooter, { className: "rf-pt-4 rf-border-t rf-flex rf-flex-col sm:rf-flex-row rf-justify-between rf-gap-2", children: [
2842
- /* @__PURE__ */ jsx24("div", { className: "rf-flex-1", children: packageUrl ? /* @__PURE__ */ jsxs18(
2933
+ /* @__PURE__ */ jsx25("div", { className: "rf-flex-1", children: packageUrl ? /* @__PURE__ */ jsxs18(
2843
2934
  Button,
2844
2935
  {
2845
2936
  variant: "outline",
@@ -2847,13 +2938,13 @@ var TscircuitPackageDetailsDialog = ({
2847
2938
  className: "rf-gap-2 rf-w-full sm:rf-w-auto",
2848
2939
  onClick: () => window.open(packageUrl, "_blank"),
2849
2940
  children: [
2850
- /* @__PURE__ */ jsx24(ExternalLink, { className: "rf-h-4 rf-w-4" }),
2941
+ /* @__PURE__ */ jsx25(ExternalLink, { className: "rf-h-4 rf-w-4" }),
2851
2942
  "View on tscircuit.com"
2852
2943
  ]
2853
2944
  }
2854
2945
  ) : null }),
2855
2946
  /* @__PURE__ */ jsxs18("div", { className: "rf-flex rf-flex-col sm:rf-flex-row rf-gap-2", children: [
2856
- /* @__PURE__ */ jsx24(
2947
+ /* @__PURE__ */ jsx25(
2857
2948
  Button,
2858
2949
  {
2859
2950
  variant: "outline",
@@ -2862,13 +2953,13 @@ var TscircuitPackageDetailsDialog = ({
2862
2953
  children: "Close"
2863
2954
  }
2864
2955
  ),
2865
- /* @__PURE__ */ jsx24(
2956
+ /* @__PURE__ */ jsx25(
2866
2957
  Button,
2867
2958
  {
2868
2959
  onClick: onImport,
2869
2960
  disabled: isSubmitting,
2870
2961
  className: "rf-bg-blue-600 hover:rf-bg-blue-700",
2871
- children: isSubmitting ? /* @__PURE__ */ jsx24(Loader22, { className: "rf-h-4 rf-w-4 rf-animate-spin" }) : "Import Component"
2962
+ children: isSubmitting ? /* @__PURE__ */ jsx25(Loader22, { className: "rf-h-4 rf-w-4 rf-animate-spin" }) : "Import Component"
2872
2963
  }
2873
2964
  )
2874
2965
  ] })
@@ -2879,10 +2970,10 @@ var TscircuitPackageDetailsDialog = ({
2879
2970
  };
2880
2971
 
2881
2972
  // lib/components/ImportComponentDialog2/hooks/useTscircuitPackageDetails.ts
2882
- import { useCallback as useCallback2, useState as useState9 } from "react";
2973
+ import { useCallback as useCallback2, useState as useState10 } from "react";
2883
2974
  var useTscircuitPackageDetails = () => {
2884
- const [details, setDetails] = useState9(null);
2885
- const [isLoading, setIsLoading] = useState9(false);
2975
+ const [details, setDetails] = useState10(null);
2976
+ const [isLoading, setIsLoading] = useState10(false);
2886
2977
  const fetchDetails = useCallback2(async (owner, name) => {
2887
2978
  setIsLoading(true);
2888
2979
  try {
@@ -2916,7 +3007,7 @@ var useTscircuitPackageDetails = () => {
2916
3007
  };
2917
3008
 
2918
3009
  // lib/components/ImportComponentDialog2/hooks/useTscircuitPackageSearch.ts
2919
- import { useCallback as useCallback3, useState as useState10 } from "react";
3010
+ import { useCallback as useCallback3, useState as useState11 } from "react";
2920
3011
 
2921
3012
  // lib/components/ImportComponentDialog2/api/tscircuit.ts
2922
3013
  var searchTscircuitPackages = async (query, sessionToken) => {
@@ -2945,10 +3036,10 @@ var searchTscircuitPackages = async (query, sessionToken) => {
2945
3036
  var useTscircuitPackageSearch = ({
2946
3037
  sessionToken
2947
3038
  }) => {
2948
- const [results, setResults] = useState10([]);
2949
- const [isSearching, setIsSearching] = useState10(false);
2950
- const [error, setError] = useState10(null);
2951
- const [hasSearched, setHasSearched] = useState10(false);
3039
+ const [results, setResults] = useState11([]);
3040
+ const [isSearching, setIsSearching] = useState11(false);
3041
+ const [error, setError] = useState11(null);
3042
+ const [hasSearched, setHasSearched] = useState11(false);
2952
3043
  const search = useCallback3(
2953
3044
  async (query) => {
2954
3045
  const trimmedQuery = query.trim();
@@ -2997,7 +3088,7 @@ var useTscircuitPackageSearch = ({
2997
3088
  };
2998
3089
 
2999
3090
  // lib/components/ImportComponentDialog2/hooks/useJlcpcbComponentSearch.ts
3000
- import { useCallback as useCallback4, useState as useState11 } from "react";
3091
+ import { useCallback as useCallback4, useState as useState12 } from "react";
3001
3092
  var normalizeQuery = (query) => {
3002
3093
  const trimmedQuery = query.trim();
3003
3094
  const isPartNumber = /^C\d+/i.test(trimmedQuery);
@@ -3007,10 +3098,10 @@ var normalizeQuery = (query) => {
3007
3098
  return trimmedQuery;
3008
3099
  };
3009
3100
  var useJlcpcbComponentSearch = () => {
3010
- const [results, setResults] = useState11([]);
3011
- const [isSearching, setIsSearching] = useState11(false);
3012
- const [error, setError] = useState11(null);
3013
- const [hasSearched, setHasSearched] = useState11(false);
3101
+ const [results, setResults] = useState12([]);
3102
+ const [isSearching, setIsSearching] = useState12(false);
3103
+ const [error, setError] = useState12(null);
3104
+ const [hasSearched, setHasSearched] = useState12(false);
3014
3105
  const search = useCallback4(async (query) => {
3015
3106
  const normalizedQuery = normalizeQuery(query);
3016
3107
  if (!normalizedQuery) return [];
@@ -3053,7 +3144,7 @@ var useJlcpcbComponentSearch = () => {
3053
3144
  };
3054
3145
 
3055
3146
  // lib/components/ImportComponentDialog2/hooks/useKicadFootprintSearch.ts
3056
- import { useCallback as useCallback5, useState as useState12 } from "react";
3147
+ import { useCallback as useCallback5, useState as useState13 } from "react";
3057
3148
 
3058
3149
  // lib/components/ImportComponentDialog2/api/kicad.ts
3059
3150
  import Fuse from "fuse.js";
@@ -3091,10 +3182,10 @@ var mapKicadFootprintToSummary = (footprintPath) => {
3091
3182
 
3092
3183
  // lib/components/ImportComponentDialog2/hooks/useKicadFootprintSearch.ts
3093
3184
  var useKicadFootprintSearch = () => {
3094
- const [results, setResults] = useState12([]);
3095
- const [isSearching, setIsSearching] = useState12(false);
3096
- const [error, setError] = useState12(null);
3097
- const [hasSearched, setHasSearched] = useState12(false);
3185
+ const [results, setResults] = useState13([]);
3186
+ const [isSearching, setIsSearching] = useState13(false);
3187
+ const [error, setError] = useState13(null);
3188
+ const [hasSearched, setHasSearched] = useState13(false);
3098
3189
  const search = useCallback5(async (query) => {
3099
3190
  const trimmedQuery = query.trim();
3100
3191
  if (!trimmedQuery) return [];
@@ -3137,7 +3228,7 @@ var useKicadFootprintSearch = () => {
3137
3228
  };
3138
3229
 
3139
3230
  // lib/components/ImportComponentDialog2/ImportComponentDialog2.tsx
3140
- import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
3231
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
3141
3232
  var computeAvailableSources = ({
3142
3233
  onTscircuitPackageSelected,
3143
3234
  onJlcpcbComponentTsxLoaded,
@@ -3375,7 +3466,7 @@ var ImportComponentDialog2 = ({
3375
3466
  " ",
3376
3467
  "Component"
3377
3468
  ] }),
3378
- /* @__PURE__ */ jsx25(DialogDescription, { className: "rf-text-sm", children: hasSources ? "Search for components from available sources." : "Import options are disabled because no handlers were provided." })
3469
+ /* @__PURE__ */ jsx26(DialogDescription, { className: "rf-text-sm", children: hasSources ? "Search for components from available sources." : "Import options are disabled because no handlers were provided." })
3379
3470
  ] }),
3380
3471
  hasSources ? /* @__PURE__ */ jsxs19(
3381
3472
  Tabs,
@@ -3384,7 +3475,7 @@ var ImportComponentDialog2 = ({
3384
3475
  onValueChange: (value) => setActiveSource(value),
3385
3476
  className: "rf-min-w-0 rf-w-full",
3386
3477
  children: [
3387
- !singleSource && /* @__PURE__ */ jsx25(TabsList, { className: "rf-flex rf-w-full rf-gap-2", children: availableSources.map((source) => /* @__PURE__ */ jsx25(
3478
+ !singleSource && /* @__PURE__ */ jsx26(TabsList, { className: "rf-flex rf-w-full rf-gap-2", children: availableSources.map((source) => /* @__PURE__ */ jsx26(
3388
3479
  TabsTrigger,
3389
3480
  {
3390
3481
  value: source,
@@ -3393,7 +3484,7 @@ var ImportComponentDialog2 = ({
3393
3484
  },
3394
3485
  source
3395
3486
  )) }),
3396
- /* @__PURE__ */ jsx25(
3487
+ /* @__PURE__ */ jsx26(
3397
3488
  SearchBar,
3398
3489
  {
3399
3490
  query: searchQuery,
@@ -3403,10 +3494,10 @@ var ImportComponentDialog2 = ({
3403
3494
  onSubmit: performSearch
3404
3495
  }
3405
3496
  ),
3406
- /* @__PURE__ */ jsx25("div", { className: "no-scrollbar rf-mt-4 rf-flex-1 rf-min-h-[200px] !rf-max-h-[40vh] !rf-overflow-y-auto rf-overflow-x-hidden rf-border rf-rounded-md rf-min-w-0", children: isSearching ? /* @__PURE__ */ jsxs19("div", { className: "rf-p-8 rf-text-center rf-text-zinc-500", children: [
3407
- /* @__PURE__ */ jsx25(Loader23, { className: "rf-h-8 rf-w-8 rf-animate-spin rf-mx-auto rf-mb-2" }),
3408
- /* @__PURE__ */ jsx25("p", { children: "Searching..." })
3409
- ] }) : searchResults.length > 0 ? /* @__PURE__ */ jsx25(
3497
+ /* @__PURE__ */ jsx26("div", { className: "no-scrollbar rf-mt-4 rf-flex-1 rf-min-h-[200px] !rf-max-h-[40vh] !rf-overflow-y-auto rf-overflow-x-hidden rf-border rf-rounded-md rf-min-w-0", children: isSearching ? /* @__PURE__ */ jsxs19("div", { className: "rf-p-8 rf-text-center rf-text-zinc-500", children: [
3498
+ /* @__PURE__ */ jsx26(Loader23, { className: "rf-h-8 rf-w-8 rf-animate-spin rf-mx-auto rf-mb-2" }),
3499
+ /* @__PURE__ */ jsx26("p", { children: "Searching..." })
3500
+ ] }) : searchResults.length > 0 ? /* @__PURE__ */ jsx26(
3410
3501
  SearchResultsList,
3411
3502
  {
3412
3503
  results: searchResults,
@@ -3414,13 +3505,13 @@ var ImportComponentDialog2 = ({
3414
3505
  onSelect: setSelectedSearchResult,
3415
3506
  onShowDetails: activeSource === "tscircuit.com" ? handleShowDetails : void 0
3416
3507
  }
3417
- ) : /* @__PURE__ */ jsx25("div", { className: "rf-p-8 rf-text-center rf-text-zinc-500", children: searchError ? `Error: ${searchError}` : hasExecutedSearch ? SOURCE_CONFIG[activeSource].emptyMessage : "Enter a search term to find components" }) })
3508
+ ) : /* @__PURE__ */ jsx26("div", { className: "rf-p-8 rf-text-center rf-text-zinc-500", children: searchError ? `Error: ${searchError}` : hasExecutedSearch ? SOURCE_CONFIG[activeSource].emptyMessage : "Enter a search term to find components" }) })
3418
3509
  ]
3419
3510
  }
3420
3511
  ) : null,
3421
- importErrorMessage ? /* @__PURE__ */ jsx25("div", { className: "rf-text-sm rf-text-red-600 rf-mt-2", children: importErrorMessage }) : null,
3512
+ importErrorMessage ? /* @__PURE__ */ jsx26("div", { className: "rf-text-sm rf-text-red-600 rf-mt-2", children: importErrorMessage }) : null,
3422
3513
  /* @__PURE__ */ jsxs19(DialogFooter, { className: "rf-flex rf-flex-col sm:rf-flex-row rf-gap-2", children: [
3423
- /* @__PURE__ */ jsx25(
3514
+ /* @__PURE__ */ jsx26(
3424
3515
  Button,
3425
3516
  {
3426
3517
  variant: "outline",
@@ -3429,20 +3520,20 @@ var ImportComponentDialog2 = ({
3429
3520
  children: "Cancel"
3430
3521
  }
3431
3522
  ),
3432
- /* @__PURE__ */ jsx25(
3523
+ /* @__PURE__ */ jsx26(
3433
3524
  Button,
3434
3525
  {
3435
3526
  onClick: handleConfirm,
3436
3527
  disabled: !selectedSearchResult || isSubmittingImport,
3437
3528
  className: "rf-order-1 sm:rf-order-2",
3438
- children: isSubmittingImport ? /* @__PURE__ */ jsx25(Loader23, { className: "rf-h-4 rf-w-4 rf-animate-spin" }) : "Import"
3529
+ children: isSubmittingImport ? /* @__PURE__ */ jsx26(Loader23, { className: "rf-h-4 rf-w-4 rf-animate-spin" }) : "Import"
3439
3530
  }
3440
3531
  )
3441
3532
  ] })
3442
3533
  ]
3443
3534
  }
3444
3535
  ),
3445
- /* @__PURE__ */ jsx25(
3536
+ /* @__PURE__ */ jsx26(
3446
3537
  TscircuitPackageDetailsDialog,
3447
3538
  {
3448
3539
  packageResult: componentForDetails,
@@ -3471,7 +3562,7 @@ var ImportComponentDialog2 = ({
3471
3562
 
3472
3563
  // lib/components/ImportComponentDialog2/ImportComponentDialogForCli.tsx
3473
3564
  import "react";
3474
- import { jsx as jsx26 } from "react/jsx-runtime";
3565
+ import { jsx as jsx27 } from "react/jsx-runtime";
3475
3566
  var extractComponentName = (tsx) => {
3476
3567
  const match = tsx.match(/export const (\w+) =/);
3477
3568
  if (!match) {
@@ -3521,7 +3612,7 @@ var ImportComponentDialogForCli = (props) => {
3521
3612
  error: (error) => `Failed to import component: ${error instanceof Error ? error.message : String(error)}`
3522
3613
  });
3523
3614
  };
3524
- return /* @__PURE__ */ jsx26(
3615
+ return /* @__PURE__ */ jsx27(
3525
3616
  ImportComponentDialog2,
3526
3617
  {
3527
3618
  ...props,
@@ -3537,7 +3628,7 @@ ImportComponentDialogForCli.displayName = "ImportComponentDialogForCli";
3537
3628
  import JSZip from "jszip";
3538
3629
  import importer from "@tscircuit/internal-dynamic-import";
3539
3630
  import {
3540
- convertCircuitJsonToBomRows,
3631
+ convertCircuitJsonToBomRows as convertCircuitJsonToBomRows2,
3541
3632
  convertBomRowsToCsv
3542
3633
  } from "circuit-json-to-bom-csv";
3543
3634
  import { convertCircuitJsonToPickAndPlaceCsv } from "circuit-json-to-pnp-csv";
@@ -3587,7 +3678,7 @@ var exportFabricationFiles = async ({
3587
3678
  });
3588
3679
  const drillFileContents = stringifyExcellonDrill(drillCmds);
3589
3680
  zip.file("gerber/drill.drl", drillFileContents);
3590
- const bomRows = await convertCircuitJsonToBomRows({ circuitJson });
3681
+ const bomRows = await convertCircuitJsonToBomRows2({ circuitJson });
3591
3682
  const bomCsv = await convertBomRowsToCsv(bomRows);
3592
3683
  zip.file("bom.csv", bomCsv);
3593
3684
  const pnpCsv = await convertCircuitJsonToPickAndPlaceCsv(circuitJson);
@@ -3889,10 +3980,10 @@ var exportAndDownload = async ({
3889
3980
  };
3890
3981
 
3891
3982
  // lib/components/AiReviewDialog/AiReviewDialog.tsx
3892
- import { useState as useState16 } from "react";
3983
+ import { useState as useState17 } from "react";
3893
3984
 
3894
3985
  // lib/components/AiReviewDialog/ListAiReviewsView.tsx
3895
- import { useEffect as useEffect10, useState as useState14 } from "react";
3986
+ import { useEffect as useEffect11, useState as useState15 } from "react";
3896
3987
 
3897
3988
  // lib/utils/get-registry-ky.ts
3898
3989
  import ky, { HTTPError } from "ky";
@@ -3961,17 +4052,17 @@ var registryKy = {
3961
4052
  };
3962
4053
 
3963
4054
  // lib/components/AiReviewDialog/ListAiReviewsView.tsx
3964
- import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
4055
+ import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
3965
4056
  var AiReviewListView = ({
3966
4057
  packageName,
3967
4058
  onSelectReview
3968
4059
  }) => {
3969
4060
  const fsMap = useRunFrameStore((s) => s.fsMap);
3970
4061
  const circuitJson = useRunFrameStore((s) => s.circuitJson);
3971
- const [reviews, setReviews] = useState14([]);
3972
- const [loading, setLoading] = useState14(false);
3973
- const [creating, setCreating] = useState14(false);
3974
- useEffect10(() => {
4062
+ const [reviews, setReviews] = useState15([]);
4063
+ const [loading, setLoading] = useState15(false);
4064
+ const [creating, setCreating] = useState15(false);
4065
+ useEffect11(() => {
3975
4066
  if (!packageName || !hasRegistryToken()) return;
3976
4067
  setLoading(true);
3977
4068
  registryKy.get("ai_reviews/list", { searchParams: { package_name: packageName } }).json().then((data) => setReviews(data.ai_reviews)).catch((err) => {
@@ -4009,10 +4100,10 @@ var AiReviewListView = ({
4009
4100
  };
4010
4101
  return /* @__PURE__ */ jsxs20(Fragment5, { children: [
4011
4102
  /* @__PURE__ */ jsxs20(DialogHeader, { children: [
4012
- /* @__PURE__ */ jsx27(DialogTitle, { children: "AI Review" }),
4013
- /* @__PURE__ */ jsx27(DialogDescription, { children: "Select an AI review or request a new one." })
4103
+ /* @__PURE__ */ jsx28(DialogTitle, { children: "AI Review" }),
4104
+ /* @__PURE__ */ jsx28(DialogDescription, { children: "Select an AI review or request a new one." })
4014
4105
  ] }),
4015
- /* @__PURE__ */ jsx27("div", { className: "rf-flex rf-gap-4 rf-mt-4", children: /* @__PURE__ */ jsx27("div", { className: "rf-w-48 rf-h-64 rf-overflow-y-auto rf-border rf-rounded rf-p-2 rf-flex-shrink-0", children: loading ? /* @__PURE__ */ jsx27("div", { className: "rf-text-sm", children: "Loading..." }) : reviews.length > 0 ? reviews.map((review) => /* @__PURE__ */ jsx27(
4106
+ /* @__PURE__ */ jsx28("div", { className: "rf-flex rf-gap-4 rf-mt-4", children: /* @__PURE__ */ jsx28("div", { className: "rf-w-48 rf-h-64 rf-overflow-y-auto rf-border rf-rounded rf-p-2 rf-flex-shrink-0", children: loading ? /* @__PURE__ */ jsx28("div", { className: "rf-text-sm", children: "Loading..." }) : reviews.length > 0 ? reviews.map((review) => /* @__PURE__ */ jsx28(
4016
4107
  "div",
4017
4108
  {
4018
4109
  className: "rf-text-sm rf-p-2 rf-cursor-pointer rf-rounded hover:rf-bg-zinc-100",
@@ -4020,25 +4111,25 @@ var AiReviewListView = ({
4020
4111
  children: new Date(review.created_at || "").toLocaleString()
4021
4112
  },
4022
4113
  review.ai_review_id
4023
- )) : /* @__PURE__ */ jsx27("div", { className: "rf-text-sm rf-text-muted-foreground", children: "No AI reviews found." }) }) }),
4024
- /* @__PURE__ */ jsx27(DialogFooter, { className: "rf-mt-4", children: /* @__PURE__ */ jsx27(Button, { onClick: requestReview, disabled: creating, children: creating ? "Requesting..." : "Review my Board" }) })
4114
+ )) : /* @__PURE__ */ jsx28("div", { className: "rf-text-sm rf-text-muted-foreground", children: "No AI reviews found." }) }) }),
4115
+ /* @__PURE__ */ jsx28(DialogFooter, { className: "rf-mt-4", children: /* @__PURE__ */ jsx28(Button, { onClick: requestReview, disabled: creating, children: creating ? "Requesting..." : "Review my Board" }) })
4025
4116
  ] });
4026
4117
  };
4027
4118
 
4028
4119
  // lib/components/AiReviewDialog/ViewAiReviewView.tsx
4029
- import { useEffect as useEffect11, useMemo as useMemo5, useState as useState15 } from "react";
4120
+ import { useEffect as useEffect12, useMemo as useMemo5, useState as useState16 } from "react";
4030
4121
  import { marked } from "marked";
4031
- import { Fragment as Fragment6, jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
4122
+ import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
4032
4123
  var AiReviewViewView = ({
4033
4124
  review,
4034
4125
  onBack
4035
4126
  }) => {
4036
- const [aiReviewText, setAiReviewText] = useState15(
4127
+ const [aiReviewText, setAiReviewText] = useState16(
4037
4128
  review.ai_review_text ?? null
4038
4129
  );
4039
4130
  const registryKy2 = getRegistryKy();
4040
4131
  const aiReviewId = review.ai_review_id;
4041
- useEffect11(() => {
4132
+ useEffect12(() => {
4042
4133
  if (!aiReviewId) return;
4043
4134
  let timeout;
4044
4135
  async function loadAiReviewText() {
@@ -4068,16 +4159,16 @@ var AiReviewViewView = ({
4068
4159
  );
4069
4160
  return /* @__PURE__ */ jsxs21(Fragment6, { children: [
4070
4161
  /* @__PURE__ */ jsxs21(DialogHeader, { className: "rf-flex rf-flex-row rf-items-center rf-justify-between", children: [
4071
- /* @__PURE__ */ jsx28(Button, { variant: "ghost", size: "sm", onClick: onBack, children: "Back" }),
4072
- /* @__PURE__ */ jsx28(DialogTitle, { children: "AI Review" })
4162
+ /* @__PURE__ */ jsx29(Button, { variant: "ghost", size: "sm", onClick: onBack, children: "Back" }),
4163
+ /* @__PURE__ */ jsx29(DialogTitle, { children: "AI Review" })
4073
4164
  ] }),
4074
- aiReviewText ? /* @__PURE__ */ jsx28(
4165
+ aiReviewText ? /* @__PURE__ */ jsx29(
4075
4166
  "div",
4076
4167
  {
4077
4168
  className: "rf-h-64 rf-overflow-y-auto rf-prose rf-max-w-none rf-mt-2",
4078
4169
  dangerouslySetInnerHTML: { __html: html }
4079
4170
  }
4080
- ) : /* @__PURE__ */ jsx28("div", { className: "rf-h-64 rf-overflow-y-auto rf-prose rf-max-w-none rf-mt-2", children: /* @__PURE__ */ jsxs21("div", { className: "rf-flex rf-items-center rf-justify-center rf-h-full", children: [
4171
+ ) : /* @__PURE__ */ jsx29("div", { className: "rf-h-64 rf-overflow-y-auto rf-prose rf-max-w-none rf-mt-2", children: /* @__PURE__ */ jsxs21("div", { className: "rf-flex rf-items-center rf-justify-center rf-h-full", children: [
4081
4172
  /* @__PURE__ */ jsxs21(
4082
4173
  "svg",
4083
4174
  {
@@ -4087,7 +4178,7 @@ var AiReviewViewView = ({
4087
4178
  viewBox: "0 0 24 24",
4088
4179
  "aria-hidden": "true",
4089
4180
  children: [
4090
- /* @__PURE__ */ jsx28(
4181
+ /* @__PURE__ */ jsx29(
4091
4182
  "circle",
4092
4183
  {
4093
4184
  className: "rf-opacity-25",
@@ -4098,7 +4189,7 @@ var AiReviewViewView = ({
4098
4189
  strokeWidth: "4"
4099
4190
  }
4100
4191
  ),
4101
- /* @__PURE__ */ jsx28(
4192
+ /* @__PURE__ */ jsx29(
4102
4193
  "path",
4103
4194
  {
4104
4195
  className: "rf-opacity-75",
@@ -4109,27 +4200,27 @@ var AiReviewViewView = ({
4109
4200
  ]
4110
4201
  }
4111
4202
  ),
4112
- /* @__PURE__ */ jsx28("span", { children: "Loading..." })
4203
+ /* @__PURE__ */ jsx29("span", { children: "Loading..." })
4113
4204
  ] }) })
4114
4205
  ] });
4115
4206
  };
4116
4207
 
4117
4208
  // lib/components/AiReviewDialog/AiReviewDialog.tsx
4118
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
4209
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
4119
4210
  var AiReviewDialog = ({
4120
4211
  isOpen,
4121
4212
  onClose,
4122
4213
  packageName
4123
4214
  }) => {
4124
- const [stage, setStage] = useState16(
4215
+ const [stage, setStage] = useState17(
4125
4216
  "list_reviews"
4126
4217
  );
4127
- const [selectedReview, setSelectedReview] = useState16(null);
4218
+ const [selectedReview, setSelectedReview] = useState17(null);
4128
4219
  const handleSelect = (review) => {
4129
4220
  setSelectedReview(review);
4130
4221
  setStage("view_review");
4131
4222
  };
4132
- return /* @__PURE__ */ jsx29(
4223
+ return /* @__PURE__ */ jsx30(
4133
4224
  Dialog,
4134
4225
  {
4135
4226
  open: isOpen,
@@ -4141,14 +4232,14 @@ var AiReviewDialog = ({
4141
4232
  }
4142
4233
  },
4143
4234
  children: /* @__PURE__ */ jsxs22(DialogContent, { className: "rf-max-w-2xl", children: [
4144
- stage === "list_reviews" && /* @__PURE__ */ jsx29(
4235
+ stage === "list_reviews" && /* @__PURE__ */ jsx30(
4145
4236
  AiReviewListView,
4146
4237
  {
4147
4238
  packageName,
4148
4239
  onSelectReview: handleSelect
4149
4240
  }
4150
4241
  ),
4151
- stage === "view_review" && selectedReview && /* @__PURE__ */ jsx29(
4242
+ stage === "view_review" && selectedReview && /* @__PURE__ */ jsx30(
4152
4243
  AiReviewViewView,
4153
4244
  {
4154
4245
  review: selectedReview,
@@ -4169,11 +4260,11 @@ import { QueryClient, QueryClientProvider } from "react-query";
4169
4260
  // lib/components/OrderDialog/InitialOrder.tsx
4170
4261
  import { Loader2 as Loader24 } from "lucide-react";
4171
4262
  import { GitHubLogoIcon as GitHubLogoIcon2 } from "@radix-ui/react-icons";
4172
- import { useEffect as useEffect12, useMemo as useMemo6, useState as useState17 } from "react";
4263
+ import { useEffect as useEffect13, useMemo as useMemo6, useState as useState18 } from "react";
4173
4264
 
4174
4265
  // lib/components/OrderDialog/VendorQuoteCard.tsx
4175
4266
  import { Truck, Package } from "lucide-react";
4176
- import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
4267
+ import { jsx as jsx31, jsxs as jsxs23 } from "react/jsx-runtime";
4177
4268
  function VendorQuoteCard({
4178
4269
  orderQuote,
4179
4270
  selectedShippingCarrier,
@@ -4186,24 +4277,24 @@ function VendorQuoteCard({
4186
4277
  return /* @__PURE__ */ jsxs23("div", { className: "rf-rounded-xl rf-bg-white rf-shadow-lg rf-border rf-border-gray-200", children: [
4187
4278
  /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-items-center rf-justify-between rf-px-6 rf-pt-4 rf-pb-2", children: [
4188
4279
  /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
4189
- /* @__PURE__ */ jsx30(Package, { className: "rf-w-6 rf-h-6 rf-text-blue-500" }),
4190
- /* @__PURE__ */ jsx30("span", { className: "rf-font-semibold rf-text-lg", children: orderQuote.vendor_name.toUpperCase() })
4280
+ /* @__PURE__ */ jsx31(Package, { className: "rf-w-6 rf-h-6 rf-text-blue-500" }),
4281
+ /* @__PURE__ */ jsx31("span", { className: "rf-font-semibold rf-text-lg", children: orderQuote.vendor_name.toUpperCase() })
4191
4282
  ] }),
4192
4283
  /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-flex-col rf-items-end", children: [
4193
- /* @__PURE__ */ jsx30("span", { className: "rf-text-gray-500 rf-text-sm", children: "Fully Assembled PCB" }),
4284
+ /* @__PURE__ */ jsx31("span", { className: "rf-text-gray-500 rf-text-sm", children: "Fully Assembled PCB" }),
4194
4285
  /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
4195
4286
  /* @__PURE__ */ jsxs23("span", { className: "rf-text-gray-400 rf-line-through rf-text-base", children: [
4196
4287
  "$",
4197
4288
  lowestShippingCarrierCost.toFixed(2)
4198
4289
  ] }),
4199
- /* @__PURE__ */ jsx30("span", { className: "rf-font-bold rf-text-xl rf-text-blue-600", children: "$50.00" })
4290
+ /* @__PURE__ */ jsx31("span", { className: "rf-font-bold rf-text-xl rf-text-blue-600", children: "$50.00" })
4200
4291
  ] })
4201
4292
  ] })
4202
4293
  ] }),
4203
- /* @__PURE__ */ jsx30("hr", { className: "rf-border-gray-200" }),
4294
+ /* @__PURE__ */ jsx31("hr", { className: "rf-border-gray-200" }),
4204
4295
  /* @__PURE__ */ jsxs23("div", { className: "rf-px-6 rf-pt-4 rf-pb-2", children: [
4205
- /* @__PURE__ */ jsx30("div", { className: "rf-mb-2 rf-text-sm rf-font-bold rf-text-gray-700", children: "Shipping Options:" }),
4206
- /* @__PURE__ */ jsx30("div", { className: "rf-flex rf-flex-col rf-gap-2 rf-mb-2", children: orderQuote.shipping_options.map((ship, idx) => /* @__PURE__ */ jsxs23(
4296
+ /* @__PURE__ */ jsx31("div", { className: "rf-mb-2 rf-text-sm rf-font-bold rf-text-gray-700", children: "Shipping Options:" }),
4297
+ /* @__PURE__ */ jsx31("div", { className: "rf-flex rf-flex-col rf-gap-2 rf-mb-2", children: orderQuote.shipping_options.map((ship, idx) => /* @__PURE__ */ jsxs23(
4207
4298
  "button",
4208
4299
  {
4209
4300
  type: "button",
@@ -4213,31 +4304,31 @@ function VendorQuoteCard({
4213
4304
  ),
4214
4305
  onClick: () => onSelectShippingCarrier(ship.carrier),
4215
4306
  children: [
4216
- /* @__PURE__ */ jsx30(Truck, { className: "rf-w-5 rf-h-5 rf-text-yellow-500" }),
4307
+ /* @__PURE__ */ jsx31(Truck, { className: "rf-w-5 rf-h-5 rf-text-yellow-500" }),
4217
4308
  /* @__PURE__ */ jsxs23("div", { className: "rf-text-left rf-flex-1", children: [
4218
- /* @__PURE__ */ jsx30("div", { className: "rf-leading-tight rf-font-medium", children: ship.carrier }),
4219
- /* @__PURE__ */ jsx30("div", { className: "rf-text-xs rf-text-gray-500", children: "Express, 5-12 days" })
4309
+ /* @__PURE__ */ jsx31("div", { className: "rf-leading-tight rf-font-medium", children: ship.carrier }),
4310
+ /* @__PURE__ */ jsx31("div", { className: "rf-text-xs rf-text-gray-500", children: "Express, 5-12 days" })
4220
4311
  ] }),
4221
4312
  /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-flex-col rf-items-end rf-ml-2", children: [
4222
4313
  /* @__PURE__ */ jsxs23("span", { className: "rf-text-gray-400 rf-line-through rf-text-sm", children: [
4223
4314
  "$",
4224
4315
  ship.cost.toFixed(2)
4225
4316
  ] }),
4226
- /* @__PURE__ */ jsx30("span", { className: "rf-text-xs rf-text-blue-600 rf-font-medium", children: "waived" })
4317
+ /* @__PURE__ */ jsx31("span", { className: "rf-text-xs rf-text-blue-600 rf-font-medium", children: "waived" })
4227
4318
  ] })
4228
4319
  ]
4229
4320
  },
4230
4321
  ship.carrier + idx
4231
4322
  )) })
4232
4323
  ] }),
4233
- selectedShippingCarrier !== null && selectedShipping && /* @__PURE__ */ jsx30("div", { className: "rf-px-6 rf-pb-4 rf-pt-2", children: /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-justify-between rf-items-center rf-mt-3 rf-mb-2", children: [
4234
- /* @__PURE__ */ jsx30("span", { className: "rf-text-gray-700 rf-font-bold", children: "Total (incl. shipping):" }),
4324
+ selectedShippingCarrier !== null && selectedShipping && /* @__PURE__ */ jsx31("div", { className: "rf-px-6 rf-pb-4 rf-pt-2", children: /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-justify-between rf-items-center rf-mt-3 rf-mb-2", children: [
4325
+ /* @__PURE__ */ jsx31("span", { className: "rf-text-gray-700 rf-font-bold", children: "Total (incl. shipping):" }),
4235
4326
  /* @__PURE__ */ jsxs23("div", { className: "rf-flex rf-flex-col rf-items-end", children: [
4236
4327
  /* @__PURE__ */ jsxs23("div", { className: "rf-text-gray-400 rf-line-through rf-text-base", children: [
4237
4328
  "$",
4238
4329
  (orderQuote.total_cost_without_shipping + selectedShipping.cost).toFixed(2)
4239
4330
  ] }),
4240
- /* @__PURE__ */ jsx30("div", { className: "rf-flex rf-items-center", children: /* @__PURE__ */ jsx30("span", { className: "rf-font-bold rf-text-xl rf-text-blue-600", children: "$50.00" }) })
4331
+ /* @__PURE__ */ jsx31("div", { className: "rf-flex rf-items-center", children: /* @__PURE__ */ jsx31("span", { className: "rf-font-bold rf-text-xl rf-text-blue-600", children: "$50.00" }) })
4241
4332
  ] })
4242
4333
  ] }) })
4243
4334
  ] });
@@ -4325,17 +4416,17 @@ var useOrderQuotePolling = (orderQuoteId) => {
4325
4416
  };
4326
4417
 
4327
4418
  // lib/components/OrderDialog/InitialOrder.tsx
4328
- import { Fragment as Fragment7, jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
4419
+ import { Fragment as Fragment7, jsx as jsx32, jsxs as jsxs24 } from "react/jsx-runtime";
4329
4420
  var InitialOrderScreen = ({
4330
4421
  onCancel,
4331
4422
  packageReleaseId,
4332
4423
  signIn,
4333
4424
  isLoggedIn
4334
4425
  }) => {
4335
- const [selectedShippingCarrier, setSelectedShippingCarrier] = useState17(null);
4336
- const [orderQuoteId, setOrderQuoteId] = useState17(null);
4426
+ const [selectedShippingCarrier, setSelectedShippingCarrier] = useState18(null);
4427
+ const [orderQuoteId, setOrderQuoteId] = useState18(null);
4337
4428
  const { mutate: createOrderQuote2, error: createOrderQuoteError } = useCreateOrderQuote();
4338
- useEffect12(() => {
4429
+ useEffect13(() => {
4339
4430
  if (packageReleaseId) {
4340
4431
  createOrderQuote2(packageReleaseId, {
4341
4432
  onSuccess: (data) => {
@@ -4353,7 +4444,7 @@ var InitialOrderScreen = ({
4353
4444
  );
4354
4445
  window.location.href = `${stripeCheckoutBaseUrl}?client_reference_id=${orderQuoteId2}&shipping_option=${selectedShippingCarrier}`;
4355
4446
  };
4356
- useEffect12(() => {
4447
+ useEffect13(() => {
4357
4448
  if (selectedShippingCarrier === null && orderQuote && Array.isArray(orderQuote.shipping_options) && orderQuote.shipping_options.length > 0) {
4358
4449
  const lowest = orderQuote.shipping_options.reduce(
4359
4450
  (min, curr) => curr.cost < min.cost ? curr : min,
@@ -4370,24 +4461,24 @@ var InitialOrderScreen = ({
4370
4461
  }, [orderQuote]);
4371
4462
  const isNoTokenError = createOrderQuoteError && createOrderQuoteError.error?.error_code?.includes("no_token") || orderQuote?.error?.error_code?.includes("no_token") && signIn;
4372
4463
  if (!isLoggedIn || isNoTokenError) {
4373
- return /* @__PURE__ */ jsx31(SignInView, { signIn });
4464
+ return /* @__PURE__ */ jsx32(SignInView, { signIn });
4374
4465
  }
4375
4466
  return /* @__PURE__ */ jsxs24(
4376
4467
  "div",
4377
4468
  {
4378
4469
  className: "\n rf-w-full rf-mx-auto rf-bg-white rf-rounded-2xl \n rf-p-4 sm:rf-p-6 md:rf-p-8 \n rf-flex rf-flex-col rf-gap-3\n rf-max-w-full sm:rf-max-w-md md:rf-max-w-lg lg:rf-max-w-xl\n ",
4379
4470
  children: [
4380
- /* @__PURE__ */ jsx31("h2", { className: "rf-text-xl sm:rf-text-2xl md:rf-text-3xl rf-font-bold rf-text-center", children: "Order PCB" }),
4381
- !(createOrderQuoteError || orderQuote?.error) && (!orderQuoteId || !orderQuote || orderQuote?.is_processing) && /* @__PURE__ */ jsx31(LoadingMessage, { message: "Fetching quotes..." }),
4382
- (createOrderQuoteError || orderQuote?.error) && /* @__PURE__ */ jsx31(
4471
+ /* @__PURE__ */ jsx32("h2", { className: "rf-text-xl sm:rf-text-2xl md:rf-text-3xl rf-font-bold rf-text-center", children: "Order PCB" }),
4472
+ !(createOrderQuoteError || orderQuote?.error) && (!orderQuoteId || !orderQuote || orderQuote?.is_processing) && /* @__PURE__ */ jsx32(LoadingMessage, { message: "Fetching quotes..." }),
4473
+ (createOrderQuoteError || orderQuote?.error) && /* @__PURE__ */ jsx32(
4383
4474
  ErrorMessage,
4384
4475
  {
4385
4476
  message: createOrderQuoteError && createOrderQuoteError.error?.message || orderQuote?.error?.message || "Failed to fetch quotes"
4386
4477
  }
4387
4478
  ),
4388
4479
  orderQuote?.is_completed && !createOrderQuoteError && !orderQuote?.error && Array.isArray(orderQuote?.shipping_options) && orderQuote.shipping_options.length > 0 && /* @__PURE__ */ jsxs24(Fragment7, { children: [
4389
- /* @__PURE__ */ jsx31("div", { className: "rf-bg-blue-100 rf-text-blue-800 rf-p-2 sm:rf-p-3 rf-rounded-md rf-text-center rf-text-xs sm:rf-text-sm", children: "This board is eligible for the tscircuit Flat Fee" }),
4390
- /* @__PURE__ */ jsx31(
4480
+ /* @__PURE__ */ jsx32("div", { className: "rf-bg-blue-100 rf-text-blue-800 rf-p-2 sm:rf-p-3 rf-rounded-md rf-text-center rf-text-xs sm:rf-text-sm", children: "This board is eligible for the tscircuit Flat Fee" }),
4481
+ /* @__PURE__ */ jsx32(
4391
4482
  VendorQuoteCard,
4392
4483
  {
4393
4484
  orderQuote,
@@ -4399,7 +4490,7 @@ var InitialOrderScreen = ({
4399
4490
  )
4400
4491
  ] }),
4401
4492
  /* @__PURE__ */ jsxs24("div", { className: "rf-flex rf-flex-col-reverse sm:rf-flex-row rf-justify-between rf-mt-5 rf-gap-3 sm:rf-gap-4", children: [
4402
- /* @__PURE__ */ jsx31(
4493
+ /* @__PURE__ */ jsx32(
4403
4494
  Button,
4404
4495
  {
4405
4496
  variant: "outline",
@@ -4409,7 +4500,7 @@ var InitialOrderScreen = ({
4409
4500
  children: "Cancel"
4410
4501
  }
4411
4502
  ),
4412
- /* @__PURE__ */ jsx31(
4503
+ /* @__PURE__ */ jsx32(
4413
4504
  Button,
4414
4505
  {
4415
4506
  type: "button",
@@ -4428,31 +4519,31 @@ var InitialOrderScreen = ({
4428
4519
  }
4429
4520
  )
4430
4521
  ] }),
4431
- /* @__PURE__ */ jsx31("div", { className: "rf-text-xs rf-text-center rf-text-gray-400 rf-mt-3 sm:rf-mt-4 rf-px-2", children: "Pricing may vary based on specifications." })
4522
+ /* @__PURE__ */ jsx32("div", { className: "rf-text-xs rf-text-center rf-text-gray-400 rf-mt-3 sm:rf-mt-4 rf-px-2", children: "Pricing may vary based on specifications." })
4432
4523
  ]
4433
4524
  }
4434
4525
  );
4435
4526
  };
4436
4527
  var LoadingMessage = ({ message }) => /* @__PURE__ */ jsxs24("div", { className: "rf-flex rf-flex-col rf-items-center rf-gap-2 rf-my-12", children: [
4437
- /* @__PURE__ */ jsx31(Loader24, { className: "rf-animate-spin rf-w-8 rf-h-8 rf-text-gray-400" }),
4438
- /* @__PURE__ */ jsx31("p", { className: "rf-text-gray-600", children: message })
4528
+ /* @__PURE__ */ jsx32(Loader24, { className: "rf-animate-spin rf-w-8 rf-h-8 rf-text-gray-400" }),
4529
+ /* @__PURE__ */ jsx32("p", { className: "rf-text-gray-600", children: message })
4439
4530
  ] });
4440
- var ErrorMessage = ({ message }) => /* @__PURE__ */ jsx31("div", { className: "rf-text-red-600 rf-text-center rf-py-12", children: message });
4531
+ var ErrorMessage = ({ message }) => /* @__PURE__ */ jsx32("div", { className: "rf-text-red-600 rf-text-center rf-py-12", children: message });
4441
4532
  var SignInView = ({ signIn }) => /* @__PURE__ */ jsxs24(
4442
4533
  "div",
4443
4534
  {
4444
4535
  className: "\n rf-w-full rf-mx-auto rf-bg-white rf-rounded-2xl \n rf-p-4 sm:rf-p-6 md:rf-p-8 \n rf-flex rf-flex-col rf-gap-3\n rf-max-w-full sm:rf-max-w-md md:rf-max-w-lg lg:rf-max-w-xl\n ",
4445
4536
  children: [
4446
- /* @__PURE__ */ jsx31("h2", { className: "rf-text-xl sm:rf-text-2xl md:rf-text-3xl rf-font-bold rf-text-center", children: "Order PCB" }),
4537
+ /* @__PURE__ */ jsx32("h2", { className: "rf-text-xl sm:rf-text-2xl md:rf-text-3xl rf-font-bold rf-text-center", children: "Order PCB" }),
4447
4538
  /* @__PURE__ */ jsxs24("div", { className: "rf-flex rf-flex-col rf-items-center rf-gap-4 rf-py-4 sm:rf-py-6 md:rf-py-8", children: [
4448
- /* @__PURE__ */ jsx31("p", { className: "rf-text-gray-600 rf-text-sm sm:rf-text-base rf-text-center rf-px-2", children: "Please sign in to continue" }),
4539
+ /* @__PURE__ */ jsx32("p", { className: "rf-text-gray-600 rf-text-sm sm:rf-text-base rf-text-center rf-px-2", children: "Please sign in to continue" }),
4449
4540
  /* @__PURE__ */ jsxs24(
4450
4541
  Button,
4451
4542
  {
4452
4543
  onClick: signIn,
4453
4544
  className: "rf-flex rf-items-center rf-gap-2 rf-text-sm sm:rf-text-base rf-px-4 sm:rf-px-6",
4454
4545
  children: [
4455
- /* @__PURE__ */ jsx31(GitHubLogoIcon2, { className: "rf-w-4 rf-h-4 sm:rf-w-5 sm:rf-h-5" }),
4546
+ /* @__PURE__ */ jsx32(GitHubLogoIcon2, { className: "rf-w-4 rf-h-4 sm:rf-w-5 sm:rf-h-5" }),
4456
4547
  "Sign in with GitHub"
4457
4548
  ]
4458
4549
  }
@@ -4463,7 +4554,7 @@ var SignInView = ({ signIn }) => /* @__PURE__ */ jsxs24(
4463
4554
  );
4464
4555
 
4465
4556
  // lib/components/OrderDialog/OrderDialog.tsx
4466
- import { jsx as jsx32 } from "react/jsx-runtime";
4557
+ import { jsx as jsx33 } from "react/jsx-runtime";
4467
4558
  var queryClient = new QueryClient();
4468
4559
  var OrderDialog = ({
4469
4560
  isOpen,
@@ -4475,18 +4566,18 @@ var OrderDialog = ({
4475
4566
  signIn,
4476
4567
  isLoggedIn
4477
4568
  }) => {
4478
- return /* @__PURE__ */ jsx32(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx32(
4569
+ return /* @__PURE__ */ jsx33(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx33(
4479
4570
  Dialog,
4480
4571
  {
4481
4572
  open: isOpen,
4482
4573
  onOpenChange: (open) => {
4483
4574
  if (!open) onClose();
4484
4575
  },
4485
- children: /* @__PURE__ */ jsx32(
4576
+ children: /* @__PURE__ */ jsx33(
4486
4577
  DialogContent,
4487
4578
  {
4488
4579
  className: "\n !rf-p-0 !rf-z-[101] rf-rounded-md\n !rf-w-[95vw] !rf-max-w-[95vw]\n sm:rf-w-[90vw] sm:rf-max-w-[500px]\n md:rf-w-auto md:rf-max-w-[660px]\n lg:rf-max-w-[720px]\n xl:rf-max-w-[800px]\n rf-max-h-[90vh] rf-overflow-y-auto\n ",
4489
- children: /* @__PURE__ */ jsx32("div", { className: "rf-relative rf-w-full", children: stage === "initial" && /* @__PURE__ */ jsx32(
4580
+ children: /* @__PURE__ */ jsx33("div", { className: "rf-relative rf-w-full", children: stage === "initial" && /* @__PURE__ */ jsx33(
4490
4581
  InitialOrderScreen,
4491
4582
  {
4492
4583
  onCancel: onClose,
@@ -4503,7 +4594,7 @@ var OrderDialog = ({
4503
4594
  };
4504
4595
 
4505
4596
  // lib/components/OrderDialog/CliOrderDialog.tsx
4506
- import { jsx as jsx33 } from "react/jsx-runtime";
4597
+ import { jsx as jsx34 } from "react/jsx-runtime";
4507
4598
  var CliOrderDialog = ({
4508
4599
  isOpen,
4509
4600
  onClose,
@@ -4513,7 +4604,7 @@ var CliOrderDialog = ({
4513
4604
  isLoggedIn
4514
4605
  }) => {
4515
4606
  const circuitJson = useRunFrameStore((state) => state.circuitJson);
4516
- return /* @__PURE__ */ jsx33(
4607
+ return /* @__PURE__ */ jsx34(
4517
4608
  OrderDialog,
4518
4609
  {
4519
4610
  signIn,
@@ -4528,11 +4619,11 @@ var CliOrderDialog = ({
4528
4619
  };
4529
4620
 
4530
4621
  // lib/components/OrderDialog/useOrderDialog.tsx
4531
- import { useState as useState18, useMemo as useMemo7, useCallback as useCallback7 } from "react";
4532
- import { jsx as jsx34 } from "react/jsx-runtime";
4622
+ import { useState as useState19, useMemo as useMemo7, useCallback as useCallback7 } from "react";
4623
+ import { jsx as jsx35 } from "react/jsx-runtime";
4533
4624
  var useOrderDialogCli = () => {
4534
- const [isOpen, setIsOpen] = useState18(false);
4535
- const [stage, setStage] = useState18("initial");
4625
+ const [isOpen, setIsOpen] = useState19(false);
4626
+ const [stage, setStage] = useState19("initial");
4536
4627
  const handleClose = () => {
4537
4628
  setIsOpen(false);
4538
4629
  setStage("initial");
@@ -4552,15 +4643,15 @@ var useOrderDialog = ({
4552
4643
  packageReleaseId
4553
4644
  }) => {
4554
4645
  useStyles();
4555
- const [isOpen, setIsOpen] = useState18(false);
4556
- const [stage, setStage] = useState18("initial");
4646
+ const [isOpen, setIsOpen] = useState19(false);
4647
+ const [stage, setStage] = useState19("initial");
4557
4648
  const handleClose = useCallback7(() => {
4558
4649
  setIsOpen(false);
4559
4650
  setStage("initial");
4560
4651
  }, []);
4561
4652
  const open = useCallback7(() => setIsOpen(true), []);
4562
4653
  const MemoizedOrderDialog = useMemo7(() => {
4563
- return (props) => /* @__PURE__ */ jsx34(
4654
+ return (props) => /* @__PURE__ */ jsx35(
4564
4655
  OrderDialog,
4565
4656
  {
4566
4657
  ...props,
@@ -4585,12 +4676,12 @@ import clsx2 from "clsx";
4585
4676
  import { HTTPError as HTTPError3 } from "ky";
4586
4677
  import {
4587
4678
  useCallback as useCallback8,
4588
- useEffect as useEffect13,
4679
+ useEffect as useEffect14,
4589
4680
  useMemo as useMemo8,
4590
4681
  useRef as useRef3,
4591
- useState as useState19
4682
+ useState as useState20
4592
4683
  } from "react";
4593
- import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs25 } from "react/jsx-runtime";
4684
+ import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
4594
4685
  async function getFilesFromServer() {
4595
4686
  const response = await fetch(`${API_BASE}/files/list`);
4596
4687
  const { file_list } = await response.json();
@@ -4612,23 +4703,23 @@ async function getFilesFromServer() {
4612
4703
  var BUG_REPORT_VIEW_BASE_URL = "https://api.tscircuit.com/bug_reports/view?bug_report_id=";
4613
4704
  var buildBugReportUrl = (bugReportId) => `${BUG_REPORT_VIEW_BASE_URL}${bugReportId}`;
4614
4705
  var useBugReportDialog = (options) => {
4615
- const [isOpen, setIsOpen] = useState19(false);
4616
- const [isSubmitting, setIsSubmitting] = useState19(false);
4617
- const [errorMessage, setErrorMessage] = useState19(null);
4618
- const [uploadProgress, setUploadProgress] = useState19(
4706
+ const [isOpen, setIsOpen] = useState20(false);
4707
+ const [isSubmitting, setIsSubmitting] = useState20(false);
4708
+ const [errorMessage, setErrorMessage] = useState20(null);
4709
+ const [uploadProgress, setUploadProgress] = useState20(
4619
4710
  null
4620
4711
  );
4621
- const [uploadErrors, setUploadErrors] = useState19([]);
4712
+ const [uploadErrors, setUploadErrors] = useState20([]);
4622
4713
  const textareaRef = useRef3(null);
4623
- const [successState, setSuccessState] = useState19(null);
4624
- const [bugReportFileCount, setBugReportFileCount] = useState19(0);
4714
+ const [successState, setSuccessState] = useState20(null);
4715
+ const [bugReportFileCount, setBugReportFileCount] = useState20(0);
4625
4716
  const onLoginRequired = options?.onLoginRequired;
4626
4717
  const isSessionLoggedIn = useMemo8(() => {
4627
4718
  if (hasRegistryToken()) return true;
4628
4719
  if (typeof document === "undefined") return false;
4629
4720
  return document.cookie.split(";").some((cookie) => cookie.trim().startsWith("session="));
4630
4721
  }, [isOpen]);
4631
- useEffect13(() => {
4722
+ useEffect14(() => {
4632
4723
  if (isOpen && !successState && textareaRef.current) {
4633
4724
  const globalError = typeof window !== "undefined" ? window.__TSCIRCUIT_LAST_EXECUTION_ERROR : void 0;
4634
4725
  if (globalError) {
@@ -4638,7 +4729,7 @@ ${globalError}`;
4638
4729
  }
4639
4730
  }
4640
4731
  }, [isOpen, successState]);
4641
- useEffect13(() => {
4732
+ useEffect14(() => {
4642
4733
  if (isOpen && !successState) {
4643
4734
  getFilesFromServer().then((files) => {
4644
4735
  setBugReportFileCount(files.size);
@@ -4758,7 +4849,7 @@ ${globalError}`;
4758
4849
  }, [isSessionLoggedIn, onLoginRequired]);
4759
4850
  const BugReportDialog = useMemo8(() => {
4760
4851
  const progressPercent = uploadProgress ? Math.round(uploadProgress.current / uploadProgress.total * 100) : 0;
4761
- return /* @__PURE__ */ jsx35(
4852
+ return /* @__PURE__ */ jsx36(
4762
4853
  AlertDialog,
4763
4854
  {
4764
4855
  open: isOpen,
@@ -4777,9 +4868,9 @@ ${globalError}`;
4777
4868
  },
4778
4869
  children: /* @__PURE__ */ jsxs25(AlertDialogContent, { children: [
4779
4870
  /* @__PURE__ */ jsxs25(AlertDialogHeader, { children: [
4780
- /* @__PURE__ */ jsx35(AlertDialogTitle, { children: successState ? "Bug Report Created" : "Report Bug" }),
4781
- /* @__PURE__ */ jsx35(AlertDialogDescription, { asChild: true, children: successState ? /* @__PURE__ */ jsxs25("div", { className: "rf-text-left rf-space-y-3 rf-text-sm", children: [
4782
- /* @__PURE__ */ jsx35("p", { children: "Bug report created successfully." }),
4871
+ /* @__PURE__ */ jsx36(AlertDialogTitle, { children: successState ? "Bug Report Created" : "Report Bug" }),
4872
+ /* @__PURE__ */ jsx36(AlertDialogDescription, { asChild: true, children: successState ? /* @__PURE__ */ jsxs25("div", { className: "rf-text-left rf-space-y-3 rf-text-sm", children: [
4873
+ /* @__PURE__ */ jsx36("p", { children: "Bug report created successfully." }),
4783
4874
  uploadErrors.length > 0 && /* @__PURE__ */ jsxs25("div", { className: "rf-bg-red-50 rf-border rf-border-red-200 rf-rounded rf-p-2 rf-max-h-28 rf-overflow-y-auto rf-overflow-x-hidden", children: [
4784
4875
  /* @__PURE__ */ jsxs25("p", { className: "rf-text-red-700 rf-font-medium rf-text-xs rf-mb-1", children: [
4785
4876
  uploadErrors.length,
@@ -4791,14 +4882,14 @@ ${globalError}`;
4791
4882
  className: "rf-text-red-600 rf-text-xs rf-mb-0.5",
4792
4883
  title: `${err.filePath}: ${err.message}`,
4793
4884
  children: [
4794
- /* @__PURE__ */ jsx35("span", { className: "rf-font-medium rf-break-all", children: err.filePath.split("/").pop() }),
4795
- /* @__PURE__ */ jsx35("span", { className: "rf-text-red-500 rf-block rf-truncate", children: err.message })
4885
+ /* @__PURE__ */ jsx36("span", { className: "rf-font-medium rf-break-all", children: err.filePath.split("/").pop() }),
4886
+ /* @__PURE__ */ jsx36("span", { className: "rf-text-red-500 rf-block rf-truncate", children: err.message })
4796
4887
  ]
4797
4888
  },
4798
4889
  idx
4799
4890
  ))
4800
4891
  ] }),
4801
- /* @__PURE__ */ jsx35("div", { children: /* @__PURE__ */ jsx35(
4892
+ /* @__PURE__ */ jsx36("div", { children: /* @__PURE__ */ jsx36(
4802
4893
  "a",
4803
4894
  {
4804
4895
  className: "rf-text-blue-600 hover:rf-underline",
@@ -4810,7 +4901,7 @@ ${globalError}`;
4810
4901
  ) }),
4811
4902
  /* @__PURE__ */ jsxs25("p", { children: [
4812
4903
  "Please share this link privately with tscircuit staff so we can help debug. Join the",
4813
- /* @__PURE__ */ jsx35(
4904
+ /* @__PURE__ */ jsx36(
4814
4905
  "a",
4815
4906
  {
4816
4907
  className: "rf-ml-1 rf-text-blue-600 hover:rf-underline",
@@ -4822,31 +4913,31 @@ ${globalError}`;
4822
4913
  ),
4823
4914
  "."
4824
4915
  ] })
4825
- ] }) : /* @__PURE__ */ jsx35("div", { className: "rf-text-left rf-space-y-3 rf-text-sm", children: uploadProgress ? /* @__PURE__ */ jsxs25("div", { className: "rf-space-y-2 rf-overflow-hidden", children: [
4916
+ ] }) : /* @__PURE__ */ jsx36("div", { className: "rf-text-left rf-space-y-3 rf-text-sm", children: uploadProgress ? /* @__PURE__ */ jsxs25("div", { className: "rf-space-y-2 rf-overflow-hidden", children: [
4826
4917
  /* @__PURE__ */ jsxs25("div", { className: "rf-flex rf-justify-between rf-text-xs", children: [
4827
- /* @__PURE__ */ jsx35("span", { children: "Uploading files..." }),
4918
+ /* @__PURE__ */ jsx36("span", { children: "Uploading files..." }),
4828
4919
  /* @__PURE__ */ jsxs25("span", { children: [
4829
4920
  uploadProgress.current,
4830
4921
  "/",
4831
4922
  uploadProgress.total
4832
4923
  ] })
4833
4924
  ] }),
4834
- /* @__PURE__ */ jsx35("div", { className: "rf-w-full rf-h-2 rf-bg-gray-200 rf-rounded-full rf-overflow-hidden", children: /* @__PURE__ */ jsx35(
4925
+ /* @__PURE__ */ jsx36("div", { className: "rf-w-full rf-h-2 rf-bg-gray-200 rf-rounded-full rf-overflow-hidden", children: /* @__PURE__ */ jsx36(
4835
4926
  "div",
4836
4927
  {
4837
4928
  className: "rf-h-full rf-bg-blue-500 rf-transition-all rf-duration-150",
4838
4929
  style: { width: `${progressPercent}%` }
4839
4930
  }
4840
4931
  ) }),
4841
- /* @__PURE__ */ jsx35("p", { className: "rf-text-xs rf-text-gray-500 rf-break-all rf-truncate rf-w-full rf-max-w-full", children: `${uploadProgress.currentFile.slice(0, 60)}${uploadProgress.currentFile.length > 60 ? "..." : ""}` }),
4842
- uploadErrors.length > 0 && /* @__PURE__ */ jsx35("div", { className: "rf-bg-red-50 rf-border rf-border-red-200 rf-rounded rf-p-2 rf-max-h-20 rf-overflow-y-auto rf-overflow-x-hidden", children: uploadErrors.map((err, idx) => /* @__PURE__ */ jsxs25(
4932
+ /* @__PURE__ */ jsx36("p", { className: "rf-text-xs rf-text-gray-500 rf-break-all rf-truncate rf-w-full rf-max-w-full", children: `${uploadProgress.currentFile.slice(0, 60)}${uploadProgress.currentFile.length > 60 ? "..." : ""}` }),
4933
+ uploadErrors.length > 0 && /* @__PURE__ */ jsx36("div", { className: "rf-bg-red-50 rf-border rf-border-red-200 rf-rounded rf-p-2 rf-max-h-20 rf-overflow-y-auto rf-overflow-x-hidden", children: uploadErrors.map((err, idx) => /* @__PURE__ */ jsxs25(
4843
4934
  "div",
4844
4935
  {
4845
4936
  className: "rf-text-red-600 rf-text-xs rf-mb-0.5",
4846
4937
  title: `${err.filePath}: ${err.message}`,
4847
4938
  children: [
4848
- /* @__PURE__ */ jsx35("span", { className: "rf-font-medium rf-break-all", children: err.filePath.split("/").pop() }),
4849
- /* @__PURE__ */ jsx35("span", { className: "rf-text-red-500 rf-block rf-truncate", children: err.message })
4939
+ /* @__PURE__ */ jsx36("span", { className: "rf-font-medium rf-break-all", children: err.filePath.split("/").pop() }),
4940
+ /* @__PURE__ */ jsx36("span", { className: "rf-text-red-500 rf-block rf-truncate", children: err.message })
4850
4941
  ]
4851
4942
  },
4852
4943
  idx
@@ -4859,7 +4950,7 @@ ${globalError}`;
4859
4950
  "to tscircuit support."
4860
4951
  ] }),
4861
4952
  /* @__PURE__ */ jsxs25("div", { className: "rf-space-y-2", children: [
4862
- /* @__PURE__ */ jsx35(
4953
+ /* @__PURE__ */ jsx36(
4863
4954
  "label",
4864
4955
  {
4865
4956
  htmlFor: "bug-description",
@@ -4867,7 +4958,7 @@ ${globalError}`;
4867
4958
  children: "Description (optional)"
4868
4959
  }
4869
4960
  ),
4870
- /* @__PURE__ */ jsx35(
4961
+ /* @__PURE__ */ jsx36(
4871
4962
  "textarea",
4872
4963
  {
4873
4964
  ref: textareaRef,
@@ -4880,7 +4971,7 @@ ${globalError}`;
4880
4971
  ] }),
4881
4972
  /* @__PURE__ */ jsxs25("p", { children: [
4882
4973
  "Share the generated bug report link privately with tscircuit staff so we can help debug your issue. You can also reach out on our",
4883
- /* @__PURE__ */ jsx35(
4974
+ /* @__PURE__ */ jsx36(
4884
4975
  "a",
4885
4976
  {
4886
4977
  className: "rf-ml-1 rf-text-blue-600 hover:rf-underline",
@@ -4892,11 +4983,11 @@ ${globalError}`;
4892
4983
  ),
4893
4984
  "."
4894
4985
  ] }),
4895
- !isSessionLoggedIn && /* @__PURE__ */ jsx35("p", { className: "rf-text-red-600", children: "You appear to be logged out. Please log in before reporting a bug or the upload will fail." }),
4896
- errorMessage && /* @__PURE__ */ jsx35("p", { className: "rf-text-red-600", children: errorMessage })
4986
+ !isSessionLoggedIn && /* @__PURE__ */ jsx36("p", { className: "rf-text-red-600", children: "You appear to be logged out. Please log in before reporting a bug or the upload will fail." }),
4987
+ errorMessage && /* @__PURE__ */ jsx36("p", { className: "rf-text-red-600", children: errorMessage })
4897
4988
  ] }) }) })
4898
4989
  ] }),
4899
- /* @__PURE__ */ jsx35(AlertDialogFooter, { children: successState ? /* @__PURE__ */ jsx35(
4990
+ /* @__PURE__ */ jsx36(AlertDialogFooter, { children: successState ? /* @__PURE__ */ jsx36(
4900
4991
  "button",
4901
4992
  {
4902
4993
  type: "button",
@@ -4907,7 +4998,7 @@ ${globalError}`;
4907
4998
  children: "Close"
4908
4999
  }
4909
5000
  ) : /* @__PURE__ */ jsxs25(Fragment8, { children: [
4910
- /* @__PURE__ */ jsx35(
5001
+ /* @__PURE__ */ jsx36(
4911
5002
  AlertDialogCancel,
4912
5003
  {
4913
5004
  disabled: isSubmitting,
@@ -4919,7 +5010,7 @@ ${globalError}`;
4919
5010
  children: "Cancel"
4920
5011
  }
4921
5012
  ),
4922
- !isSessionLoggedIn && onLoginRequired ? /* @__PURE__ */ jsx35(
5013
+ !isSessionLoggedIn && onLoginRequired ? /* @__PURE__ */ jsx36(
4923
5014
  "button",
4924
5015
  {
4925
5016
  type: "button",
@@ -4931,7 +5022,7 @@ ${globalError}`;
4931
5022
  },
4932
5023
  children: "Sign In"
4933
5024
  }
4934
- ) : /* @__PURE__ */ jsx35(
5025
+ ) : /* @__PURE__ */ jsx36(
4935
5026
  "button",
4936
5027
  {
4937
5028
  type: "button",
@@ -4972,14 +5063,14 @@ ${globalError}`;
4972
5063
  };
4973
5064
 
4974
5065
  // lib/components/LbrnExportOptionsDialog.tsx
4975
- import { useState as useState20 } from "react";
4976
- import { jsx as jsx36, jsxs as jsxs26 } from "react/jsx-runtime";
5066
+ import { useState as useState21 } from "react";
5067
+ import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
4977
5068
  function LbrnExportOptionsDialog({
4978
5069
  open,
4979
5070
  onOpenChange,
4980
5071
  onExport
4981
5072
  }) {
4982
- const [includeSilkscreen, setIncludeSilkscreen] = useState20(false);
5073
+ const [includeSilkscreen, setIncludeSilkscreen] = useState21(false);
4983
5074
  const handleExport = () => {
4984
5075
  onExport({ includeSilkscreen });
4985
5076
  onOpenChange(false);
@@ -4987,13 +5078,13 @@ function LbrnExportOptionsDialog({
4987
5078
  const handleCancel = () => {
4988
5079
  onOpenChange(false);
4989
5080
  };
4990
- return /* @__PURE__ */ jsx36(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs26(DialogContent, { children: [
5081
+ return /* @__PURE__ */ jsx37(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs26(DialogContent, { children: [
4991
5082
  /* @__PURE__ */ jsxs26(DialogHeader, { children: [
4992
- /* @__PURE__ */ jsx36(DialogTitle, { children: "LightBurn Export Options" }),
4993
- /* @__PURE__ */ jsx36(DialogDescription, { children: "Configure export settings for PCB laser ablation with LightBurn" })
5083
+ /* @__PURE__ */ jsx37(DialogTitle, { children: "LightBurn Export Options" }),
5084
+ /* @__PURE__ */ jsx37(DialogDescription, { children: "Configure export settings for PCB laser ablation with LightBurn" })
4994
5085
  ] }),
4995
- /* @__PURE__ */ jsx36("div", { className: "rf-flex rf-flex-col rf-gap-4 rf-py-4", children: /* @__PURE__ */ jsxs26("div", { className: "rf-flex rf-items-center rf-space-x-2", children: [
4996
- /* @__PURE__ */ jsx36(
5086
+ /* @__PURE__ */ jsx37("div", { className: "rf-flex rf-flex-col rf-gap-4 rf-py-4", children: /* @__PURE__ */ jsxs26("div", { className: "rf-flex rf-items-center rf-space-x-2", children: [
5087
+ /* @__PURE__ */ jsx37(
4997
5088
  Checkbox,
4998
5089
  {
4999
5090
  id: "includeSilkscreen",
@@ -5001,7 +5092,7 @@ function LbrnExportOptionsDialog({
5001
5092
  onCheckedChange: (checked) => setIncludeSilkscreen(checked === true)
5002
5093
  }
5003
5094
  ),
5004
- /* @__PURE__ */ jsx36(
5095
+ /* @__PURE__ */ jsx37(
5005
5096
  "label",
5006
5097
  {
5007
5098
  htmlFor: "includeSilkscreen",
@@ -5011,8 +5102,8 @@ function LbrnExportOptionsDialog({
5011
5102
  )
5012
5103
  ] }) }),
5013
5104
  /* @__PURE__ */ jsxs26(DialogFooter, { children: [
5014
- /* @__PURE__ */ jsx36(Button, { variant: "outline", onClick: handleCancel, children: "Cancel" }),
5015
- /* @__PURE__ */ jsx36(Button, { onClick: handleExport, children: "Export" })
5105
+ /* @__PURE__ */ jsx37(Button, { variant: "outline", onClick: handleCancel, children: "Cancel" }),
5106
+ /* @__PURE__ */ jsx37(Button, { onClick: handleExport, children: "Export" })
5016
5107
  ] })
5017
5108
  ] }) });
5018
5109
  }
@@ -5066,31 +5157,31 @@ var getLatestAutoroutingLogEntry = (autoroutingLog) => {
5066
5157
  };
5067
5158
 
5068
5159
  // lib/components/FileMenuLeftHeader.tsx
5069
- import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs27 } from "react/jsx-runtime";
5160
+ import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
5070
5161
  var FileMenuLeftHeader = (props) => {
5071
5162
  const lastRunEvalVersion = useRunnerStore((s) => s.lastRunEvalVersion);
5072
5163
  const currentMainComponentPath = useRunFrameStore(
5073
5164
  (s) => s.currentMainComponentPath
5074
5165
  );
5075
- const [snippetName, setSnippetName] = useState21(null);
5076
- const [hasUnsavedChanges, setHasUnsavedChanges] = useState21(false);
5077
- const [hasNeverBeenSaved, setHasNeverBeenSaved] = useState21(true);
5078
- const [isSaving, setIsSaving] = useState21(false);
5079
- const [requestToSaveSentAt, setRequestToSaveSentAt] = useState21(
5166
+ const [snippetName, setSnippetName] = useState22(null);
5167
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState22(false);
5168
+ const [hasNeverBeenSaved, setHasNeverBeenSaved] = useState22(true);
5169
+ const [isSaving, setIsSaving] = useState22(false);
5170
+ const [requestToSaveSentAt, setRequestToSaveSentAt] = useState22(
5080
5171
  null
5081
5172
  );
5082
- const [availableSnippets, setAvailableSnippets] = useState21(
5173
+ const [availableSnippets, setAvailableSnippets] = useState22(
5083
5174
  null
5084
5175
  );
5085
- const [isSelectSnippetDialogOpen, setIsSelectSnippetDialogOpen] = useState21(false);
5086
- const [notificationMessage, setNotificationMessage] = useState21(
5176
+ const [isSelectSnippetDialogOpen, setIsSelectSnippetDialogOpen] = useState22(false);
5177
+ const [notificationMessage, setNotificationMessage] = useState22(
5087
5178
  null
5088
5179
  );
5089
- const [errorMessage, setErrorMessage] = useState21(null);
5090
- const [isError, setIsError] = useState21(false);
5091
- const [isExporting, setisExporting] = useState21(false);
5092
- const [isLbrnDialogOpen, setIsLbrnDialogOpen] = useState21(false);
5093
- const [pendingLbrnExport, setPendingLbrnExport] = useState21(null);
5180
+ const [errorMessage, setErrorMessage] = useState22(null);
5181
+ const [isError, setIsError] = useState22(false);
5182
+ const [isExporting, setisExporting] = useState22(false);
5183
+ const [isLbrnDialogOpen, setIsLbrnDialogOpen] = useState22(false);
5184
+ const [pendingLbrnExport, setPendingLbrnExport] = useState22(null);
5094
5185
  const orderDialog = useOrderDialogCli();
5095
5186
  const pushEvent = useRunFrameStore((state) => state.pushEvent);
5096
5187
  const recentEvents = useRunFrameStore((state) => state.recentEvents);
@@ -5119,7 +5210,7 @@ var FileMenuLeftHeader = (props) => {
5119
5210
  setisExporting(false);
5120
5211
  }
5121
5212
  });
5122
- useEffect14(() => {
5213
+ useEffect15(() => {
5123
5214
  if (!isSaving || requestToSaveSentAt === null) return;
5124
5215
  const eventsSinceRequestToSave = recentEvents.filter(
5125
5216
  (event) => new Date(event.created_at).valueOf() > requestToSaveSentAt
@@ -5162,8 +5253,8 @@ var FileMenuLeftHeader = (props) => {
5162
5253
  };
5163
5254
  const storeCircuitJson = useRunFrameStore((state) => state.circuitJson);
5164
5255
  const circuitJson = storeCircuitJson ?? props.circuitJson;
5165
- const [isImportDialogOpen, setIsImportDialogOpen] = useState21(false);
5166
- const [isAiReviewDialogOpen, setIsAiReviewDialogOpen] = useState21(false);
5256
+ const [isImportDialogOpen, setIsImportDialogOpen] = useState22(false);
5257
+ const [isAiReviewDialogOpen, setIsAiReviewDialogOpen] = useState22(false);
5167
5258
  const { BugReportDialog, openBugReportDialog } = useBugReportDialog({
5168
5259
  onLoginRequired: props.onLoginRequired
5169
5260
  });
@@ -5183,10 +5274,10 @@ var FileMenuLeftHeader = (props) => {
5183
5274
  return /* @__PURE__ */ jsxs27(Fragment9, { children: [
5184
5275
  /* @__PURE__ */ jsxs27("div", { className: "rf-flex rf-items-center rf-gap-1 rf-flex-shrink-0", children: [
5185
5276
  /* @__PURE__ */ jsxs27(DropdownMenu, { children: [
5186
- /* @__PURE__ */ jsx37(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx37("div", { className: "rf-whitespace-nowrap rf-text-xs font-medium rf-p-2 rf-mx-1 rf-cursor-pointer rf-relative", children: "File" }) }),
5277
+ /* @__PURE__ */ jsx38(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx38("div", { className: "rf-whitespace-nowrap rf-text-xs font-medium rf-p-2 rf-mx-1 rf-cursor-pointer rf-relative", children: "File" }) }),
5187
5278
  /* @__PURE__ */ jsxs27(DropdownMenuContent, { className: "rf-z-[101]", children: [
5188
5279
  !props.isWebEmbedded && /* @__PURE__ */ jsxs27(Fragment9, { children: [
5189
- /* @__PURE__ */ jsx37(
5280
+ /* @__PURE__ */ jsx38(
5190
5281
  DropdownMenuItem,
5191
5282
  {
5192
5283
  className: "rf-text-xs",
@@ -5195,7 +5286,7 @@ var FileMenuLeftHeader = (props) => {
5195
5286
  children: isSaving ? "Saving..." : "Push"
5196
5287
  }
5197
5288
  ),
5198
- parseInt(window.location.port) > 5e3 && /* @__PURE__ */ jsx37(
5289
+ parseInt(window.location.port) > 5e3 && /* @__PURE__ */ jsx38(
5199
5290
  DropdownMenuItem,
5200
5291
  {
5201
5292
  className: "rf-text-xs",
@@ -5205,7 +5296,7 @@ var FileMenuLeftHeader = (props) => {
5205
5296
  children: "Order"
5206
5297
  }
5207
5298
  ),
5208
- /* @__PURE__ */ jsx37(
5299
+ /* @__PURE__ */ jsx38(
5209
5300
  DropdownMenuItem,
5210
5301
  {
5211
5302
  className: "rf-text-xs",
@@ -5214,7 +5305,7 @@ var FileMenuLeftHeader = (props) => {
5214
5305
  children: "Import"
5215
5306
  }
5216
5307
  ),
5217
- /* @__PURE__ */ jsx37(
5308
+ /* @__PURE__ */ jsx38(
5218
5309
  DropdownMenuItem,
5219
5310
  {
5220
5311
  className: "rf-text-xs",
@@ -5229,7 +5320,7 @@ var FileMenuLeftHeader = (props) => {
5229
5320
  }
5230
5321
  )
5231
5322
  ] }),
5232
- !props.isWebEmbedded && props.onLoginRequired && /* @__PURE__ */ jsx37(
5323
+ !props.isWebEmbedded && props.onLoginRequired && /* @__PURE__ */ jsx38(
5233
5324
  DropdownMenuItem,
5234
5325
  {
5235
5326
  className: "rf-text-xs",
@@ -5240,9 +5331,9 @@ var FileMenuLeftHeader = (props) => {
5240
5331
  }
5241
5332
  ),
5242
5333
  !props.isWebEmbedded && /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5243
- /* @__PURE__ */ jsx37(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Report Bug" }),
5244
- /* @__PURE__ */ jsx37(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5245
- /* @__PURE__ */ jsx37(
5334
+ /* @__PURE__ */ jsx38(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Report Bug" }),
5335
+ /* @__PURE__ */ jsx38(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5336
+ /* @__PURE__ */ jsx38(
5246
5337
  DropdownMenuItem,
5247
5338
  {
5248
5339
  className: "rf-text-xs",
@@ -5252,7 +5343,7 @@ var FileMenuLeftHeader = (props) => {
5252
5343
  children: "Report Entire Circuit"
5253
5344
  }
5254
5345
  ),
5255
- /* @__PURE__ */ jsx37(
5346
+ /* @__PURE__ */ jsx38(
5256
5347
  DropdownMenuItem,
5257
5348
  {
5258
5349
  className: "rf-text-xs",
@@ -5274,7 +5365,7 @@ var FileMenuLeftHeader = (props) => {
5274
5365
  ] }) })
5275
5366
  ] }),
5276
5367
  /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5277
- /* @__PURE__ */ jsx37(
5368
+ /* @__PURE__ */ jsx38(
5278
5369
  DropdownMenuSubTrigger,
5279
5370
  {
5280
5371
  className: "rf-text-xs",
@@ -5282,7 +5373,7 @@ var FileMenuLeftHeader = (props) => {
5282
5373
  children: isExporting ? "Exporting..." : "Export"
5283
5374
  }
5284
5375
  ),
5285
- /* @__PURE__ */ jsx37(DropdownMenuPortal, { children: /* @__PURE__ */ jsx37(DropdownMenuSubContent, { children: availableExports.map((exp, i) => /* @__PURE__ */ jsx37(
5376
+ /* @__PURE__ */ jsx38(DropdownMenuPortal, { children: /* @__PURE__ */ jsx38(DropdownMenuSubContent, { children: availableExports.map((exp, i) => /* @__PURE__ */ jsx38(
5286
5377
  DropdownMenuItem,
5287
5378
  {
5288
5379
  onSelect: () => {
@@ -5319,16 +5410,16 @@ var FileMenuLeftHeader = (props) => {
5319
5410
  });
5320
5411
  },
5321
5412
  disabled: isExporting,
5322
- children: /* @__PURE__ */ jsx37("span", { className: "rf-text-xs", children: exp.name })
5413
+ children: /* @__PURE__ */ jsx38("span", { className: "rf-text-xs", children: exp.name })
5323
5414
  },
5324
5415
  i
5325
5416
  )) }) })
5326
5417
  ] }),
5327
5418
  !props.isWebEmbedded && /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5328
- /* @__PURE__ */ jsx37(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Advanced" }),
5329
- /* @__PURE__ */ jsx37(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5330
- /* @__PURE__ */ jsx37(DropdownMenuItem, { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsxs27("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
5331
- /* @__PURE__ */ jsx37(
5419
+ /* @__PURE__ */ jsx38(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Advanced" }),
5420
+ /* @__PURE__ */ jsx38(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5421
+ /* @__PURE__ */ jsx38(DropdownMenuItem, { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsxs27("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
5422
+ /* @__PURE__ */ jsx38(
5332
5423
  Checkbox,
5333
5424
  {
5334
5425
  id: "load-latest-eval",
@@ -5340,7 +5431,7 @@ var FileMenuLeftHeader = (props) => {
5340
5431
  }
5341
5432
  }
5342
5433
  ),
5343
- /* @__PURE__ */ jsx37(
5434
+ /* @__PURE__ */ jsx38(
5344
5435
  "label",
5345
5436
  {
5346
5437
  htmlFor: "load-latest-eval",
@@ -5349,35 +5440,35 @@ var FileMenuLeftHeader = (props) => {
5349
5440
  }
5350
5441
  )
5351
5442
  ] }) }),
5352
- lastRunEvalVersion && /* @__PURE__ */ jsx37(DropdownMenuItem, { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsx37("div", { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsxs27("span", { className: "rf-text-xs", children: [
5443
+ lastRunEvalVersion && /* @__PURE__ */ jsx38(DropdownMenuItem, { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsx38("div", { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsxs27("span", { className: "rf-text-xs", children: [
5353
5444
  "@tscircuit/eval@",
5354
5445
  lastRunEvalVersion
5355
5446
  ] }) }) }),
5356
- /* @__PURE__ */ jsx37(DropdownMenuItem, { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsx37("div", { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsxs27("span", { className: "rf-text-xs", children: [
5447
+ /* @__PURE__ */ jsx38(DropdownMenuItem, { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsx38("div", { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsxs27("span", { className: "rf-text-xs", children: [
5357
5448
  "@tscircuit/runframe@",
5358
5449
  package_default.version
5359
5450
  ] }) }) }),
5360
- /* @__PURE__ */ jsx37(
5451
+ /* @__PURE__ */ jsx38(
5361
5452
  DropdownMenuItem,
5362
5453
  {
5363
5454
  className: "rf-flex rf-items-center rf-gap-2",
5364
5455
  onClick: () => {
5365
5456
  window.open("/api/admin", "_blank");
5366
5457
  },
5367
- children: /* @__PURE__ */ jsx37("div", { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsx37("span", { className: "rf-text-xs", children: "CLI Admin Panel" }) })
5458
+ children: /* @__PURE__ */ jsx38("div", { className: "rf-flex rf-items-center rf-gap-2", children: /* @__PURE__ */ jsx38("span", { className: "rf-text-xs", children: "CLI Admin Panel" }) })
5368
5459
  }
5369
5460
  )
5370
5461
  ] }) })
5371
5462
  ] })
5372
5463
  ] }),
5373
- /* @__PURE__ */ jsx37(AlertDialog, { open: isError, onOpenChange: setIsError, children: /* @__PURE__ */ jsxs27(AlertDialogContent, { children: [
5464
+ /* @__PURE__ */ jsx38(AlertDialog, { open: isError, onOpenChange: setIsError, children: /* @__PURE__ */ jsxs27(AlertDialogContent, { children: [
5374
5465
  /* @__PURE__ */ jsxs27(AlertDialogHeader, { children: [
5375
- /* @__PURE__ */ jsx37(AlertDialogTitle, { children: "Error Saving Snippet" }),
5376
- /* @__PURE__ */ jsx37(AlertDialogDescription, { children: errorMessage })
5466
+ /* @__PURE__ */ jsx38(AlertDialogTitle, { children: "Error Saving Snippet" }),
5467
+ /* @__PURE__ */ jsx38(AlertDialogDescription, { children: errorMessage })
5377
5468
  ] }),
5378
- /* @__PURE__ */ jsx37(AlertDialogFooter, { children: /* @__PURE__ */ jsx37(AlertDialogCancel, { onClick: () => setIsError(false), children: "Dismiss" }) })
5469
+ /* @__PURE__ */ jsx38(AlertDialogFooter, { children: /* @__PURE__ */ jsx38(AlertDialogCancel, { onClick: () => setIsError(false), children: "Dismiss" }) })
5379
5470
  ] }) }),
5380
- /* @__PURE__ */ jsx37(
5471
+ /* @__PURE__ */ jsx38(
5381
5472
  SelectSnippetDialog,
5382
5473
  {
5383
5474
  snippetNames: availableSnippets ?? [],
@@ -5397,17 +5488,17 @@ var FileMenuLeftHeader = (props) => {
5397
5488
  )
5398
5489
  ] }),
5399
5490
  /* @__PURE__ */ jsxs27(DropdownMenu, { children: [
5400
- /* @__PURE__ */ jsx37(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx37("div", { className: "rf-whitespace-nowrap rf-text-xs font-medium rf-p-2 rf-mx-1 rf-cursor-pointer rf-relative", children: "View" }) }),
5401
- /* @__PURE__ */ jsx37(DropdownMenuContent, { className: "rf-z-[104]", children: /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5402
- /* @__PURE__ */ jsx37(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Schematic" }),
5403
- /* @__PURE__ */ jsx37(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5404
- /* @__PURE__ */ jsx37(
5491
+ /* @__PURE__ */ jsx38(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx38("div", { className: "rf-whitespace-nowrap rf-text-xs font-medium rf-p-2 rf-mx-1 rf-cursor-pointer rf-relative", children: "View" }) }),
5492
+ /* @__PURE__ */ jsx38(DropdownMenuContent, { className: "rf-z-[104]", children: /* @__PURE__ */ jsxs27(DropdownMenuSub, { children: [
5493
+ /* @__PURE__ */ jsx38(DropdownMenuSubTrigger, { className: "rf-text-xs", children: "Schematic" }),
5494
+ /* @__PURE__ */ jsx38(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs27(DropdownMenuSubContent, { children: [
5495
+ /* @__PURE__ */ jsx38(
5405
5496
  DropdownMenuItem,
5406
5497
  {
5407
5498
  className: "rf-flex rf-items-center rf-gap-2",
5408
5499
  onSelect: (e) => e.preventDefault(),
5409
5500
  children: /* @__PURE__ */ jsxs27("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
5410
- /* @__PURE__ */ jsx37(
5501
+ /* @__PURE__ */ jsx38(
5411
5502
  Checkbox,
5412
5503
  {
5413
5504
  id: "show-schematic-ports",
@@ -5417,7 +5508,7 @@ var FileMenuLeftHeader = (props) => {
5417
5508
  }
5418
5509
  }
5419
5510
  ),
5420
- /* @__PURE__ */ jsx37(
5511
+ /* @__PURE__ */ jsx38(
5421
5512
  "label",
5422
5513
  {
5423
5514
  htmlFor: "show-schematic-ports",
@@ -5428,13 +5519,13 @@ var FileMenuLeftHeader = (props) => {
5428
5519
  ] })
5429
5520
  }
5430
5521
  ),
5431
- /* @__PURE__ */ jsx37(
5522
+ /* @__PURE__ */ jsx38(
5432
5523
  DropdownMenuItem,
5433
5524
  {
5434
5525
  className: "rf-flex rf-items-center rf-gap-2",
5435
5526
  onSelect: (e) => e.preventDefault(),
5436
5527
  children: /* @__PURE__ */ jsxs27("div", { className: "rf-flex rf-items-center rf-gap-2", children: [
5437
- /* @__PURE__ */ jsx37(
5528
+ /* @__PURE__ */ jsx38(
5438
5529
  Checkbox,
5439
5530
  {
5440
5531
  id: "show-schematic-grid",
@@ -5446,7 +5537,7 @@ var FileMenuLeftHeader = (props) => {
5446
5537
  }
5447
5538
  }
5448
5539
  ),
5449
- /* @__PURE__ */ jsx37(
5540
+ /* @__PURE__ */ jsx38(
5450
5541
  "label",
5451
5542
  {
5452
5543
  htmlFor: "show-schematic-grid",
@@ -5462,7 +5553,7 @@ var FileMenuLeftHeader = (props) => {
5462
5553
  ] })
5463
5554
  ] }),
5464
5555
  BugReportDialog,
5465
- /* @__PURE__ */ jsx37(
5556
+ /* @__PURE__ */ jsx38(
5466
5557
  LbrnExportOptionsDialog,
5467
5558
  {
5468
5559
  open: isLbrnDialogOpen,
@@ -5470,14 +5561,14 @@ var FileMenuLeftHeader = (props) => {
5470
5561
  onExport: handleLbrnExport
5471
5562
  }
5472
5563
  ),
5473
- /* @__PURE__ */ jsx37(
5564
+ /* @__PURE__ */ jsx38(
5474
5565
  ImportComponentDialogForCli,
5475
5566
  {
5476
5567
  isOpen: isImportDialogOpen,
5477
5568
  onClose: () => setIsImportDialogOpen(false)
5478
5569
  }
5479
5570
  ),
5480
- /* @__PURE__ */ jsx37(
5571
+ /* @__PURE__ */ jsx38(
5481
5572
  AiReviewDialog,
5482
5573
  {
5483
5574
  isOpen: isAiReviewDialogOpen,
@@ -5485,7 +5576,7 @@ var FileMenuLeftHeader = (props) => {
5485
5576
  packageName: snippetName
5486
5577
  }
5487
5578
  ),
5488
- /* @__PURE__ */ jsx37(
5579
+ /* @__PURE__ */ jsx38(
5489
5580
  Toaster,
5490
5581
  {
5491
5582
  position: "top-center",
@@ -5497,7 +5588,7 @@ var FileMenuLeftHeader = (props) => {
5497
5588
  }
5498
5589
  }
5499
5590
  ),
5500
- /* @__PURE__ */ jsx37(
5591
+ /* @__PURE__ */ jsx38(
5501
5592
  orderDialog.OrderDialog,
5502
5593
  {
5503
5594
  isOpen: orderDialog.isOpen,
@@ -5510,7 +5601,7 @@ var FileMenuLeftHeader = (props) => {
5510
5601
  };
5511
5602
 
5512
5603
  // lib/components/CircuitJsonPreview/CircuitJsonPreview.tsx
5513
- import { jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
5604
+ import { jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
5514
5605
  var dropdownMenuItems = [
5515
5606
  "assembly",
5516
5607
  "pinout",
@@ -5605,10 +5696,10 @@ var CircuitJsonPreview = ({
5605
5696
  defaultActiveTab ?? fallbackTab,
5606
5697
  defaultActiveTab
5607
5698
  );
5608
- const [lastActiveTab, setLastActiveTab] = useState22(null);
5609
- const [isFullScreen, setIsFullScreen] = useState22(defaultToFullScreen);
5610
- const [internalShowSchematicDebugGrid, setInternalShowSchematicDebugGrid] = useState22(showSchematicDebugGridProp);
5611
- const [internalShowSchematicPorts, setInternalShowSchematicPorts] = useState22(
5699
+ const [lastActiveTab, setLastActiveTab] = useState23(null);
5700
+ const [isFullScreen, setIsFullScreen] = useState23(defaultToFullScreen);
5701
+ const [internalShowSchematicDebugGrid, setInternalShowSchematicDebugGrid] = useState23(showSchematicDebugGridProp);
5702
+ const [internalShowSchematicPorts, setInternalShowSchematicPorts] = useState23(
5612
5703
  showSchematicPortsProp
5613
5704
  );
5614
5705
  const showSchematicDebugGrid = onChangeShowSchematicDebugGrid ? showSchematicDebugGridProp : internalShowSchematicDebugGrid;
@@ -5626,7 +5717,7 @@ var CircuitJsonPreview = ({
5626
5717
  const toggleFullScreen = () => {
5627
5718
  setIsFullScreen(!isFullScreen);
5628
5719
  };
5629
- useEffect15(() => {
5720
+ useEffect16(() => {
5630
5721
  if (errorMessage) {
5631
5722
  if (activeTab !== "errors") {
5632
5723
  setLastActiveTab(activeTab);
@@ -5634,7 +5725,7 @@ var CircuitJsonPreview = ({
5634
5725
  setActiveTab("errors");
5635
5726
  }
5636
5727
  }, [errorMessage]);
5637
- useEffect15(() => {
5728
+ useEffect16(() => {
5638
5729
  if ((activeTab === "code" || activeTab === "errors") && circuitJson && !errorMessage) {
5639
5730
  setActiveTab(
5640
5731
  lastActiveTab ?? defaultActiveTab ?? defaultTab ?? availableTabs?.[0] ?? "pcb"
@@ -5644,14 +5735,14 @@ var CircuitJsonPreview = ({
5644
5735
  const setCadViewerRef = useCallback9((value) => {
5645
5736
  window.TSCIRCUIT_3D_OBJECT_REF = value === null ? void 0 : value;
5646
5737
  }, []);
5647
- return /* @__PURE__ */ jsx38(
5738
+ return /* @__PURE__ */ jsx39(
5648
5739
  "div",
5649
5740
  {
5650
5741
  className: cn(
5651
5742
  "flex flex-col relative rf-overflow-x-hidden rf-h-full",
5652
5743
  className
5653
5744
  ),
5654
- children: /* @__PURE__ */ jsx38(
5745
+ children: /* @__PURE__ */ jsx39(
5655
5746
  "div",
5656
5747
  {
5657
5748
  className: cn(
@@ -5674,7 +5765,7 @@ var CircuitJsonPreview = ({
5674
5765
  ),
5675
5766
  children: [
5676
5767
  leftHeaderContent,
5677
- showFileMenu && !leftHeaderContent && /* @__PURE__ */ jsx38(
5768
+ showFileMenu && !leftHeaderContent && /* @__PURE__ */ jsx39(
5678
5769
  FileMenuLeftHeader,
5679
5770
  {
5680
5771
  isWebEmbedded,
@@ -5686,18 +5777,18 @@ var CircuitJsonPreview = ({
5686
5777
  onChangeShowSchematicPorts: setShowSchematicPorts
5687
5778
  }
5688
5779
  ),
5689
- (leftHeaderContent || showFileMenu) && /* @__PURE__ */ jsx38("div", { className: "rf-flex-grow" }),
5690
- !leftHeaderContent && !showFileMenu && isRunningCode && /* @__PURE__ */ jsx38(Loader25, { className: "rf-w-4 rf-h-4 rf-animate-spin" }),
5691
- !leftHeaderContent && !showFileMenu && /* @__PURE__ */ jsx38("div", { className: "rf-flex-grow" }),
5780
+ (leftHeaderContent || showFileMenu) && /* @__PURE__ */ jsx39("div", { className: "rf-flex-grow" }),
5781
+ !leftHeaderContent && !showFileMenu && isRunningCode && /* @__PURE__ */ jsx39(Loader25, { className: "rf-w-4 rf-h-4 rf-animate-spin" }),
5782
+ !leftHeaderContent && !showFileMenu && /* @__PURE__ */ jsx39("div", { className: "rf-flex-grow" }),
5692
5783
  renderLog && renderLog.progress !== 1 && !errorMessage && /* @__PURE__ */ jsxs28("div", { className: "rf-flex rf-items-center rf-gap-2 rf-min-w-0 rf-max-w-xs", children: [
5693
- activeEffectName ? /* @__PURE__ */ jsx38(
5784
+ activeEffectName ? /* @__PURE__ */ jsx39(
5694
5785
  "div",
5695
5786
  {
5696
5787
  className: "rf-text-xs rf-text-gray-500 rf-truncate rf-min-w-0",
5697
5788
  title: activeEffectName,
5698
5789
  children: activeEffectName
5699
5790
  }
5700
- ) : renderLog.lastRenderEvent && /* @__PURE__ */ jsx38(
5791
+ ) : renderLog.lastRenderEvent && /* @__PURE__ */ jsx39(
5701
5792
  "div",
5702
5793
  {
5703
5794
  className: "rf-text-xs rf-text-gray-500 rf-truncate rf-min-w-0",
@@ -5705,16 +5796,16 @@ var CircuitJsonPreview = ({
5705
5796
  children: renderLog.lastRenderEvent?.phase ?? ""
5706
5797
  }
5707
5798
  ),
5708
- /* @__PURE__ */ jsx38("div", { className: "rf-w-4 rf-h-4 rf-bg-blue-500 rf-opacity-50 rf-rounded-full rf-text-white rf-flex-shrink-0", children: /* @__PURE__ */ jsx38(LoaderCircleIcon, { className: "rf-w-4 rf-h-4 rf-animate-spin" }) }),
5799
+ /* @__PURE__ */ jsx39("div", { className: "rf-w-4 rf-h-4 rf-bg-blue-500 rf-opacity-50 rf-rounded-full rf-text-white rf-flex-shrink-0", children: /* @__PURE__ */ jsx39(LoaderCircleIcon, { className: "rf-w-4 rf-h-4 rf-animate-spin" }) }),
5709
5800
  /* @__PURE__ */ jsxs28("div", { className: "rf-text-xs rf-font-bold rf-text-gray-700 rf-tabular-nums rf-flex-shrink-0", children: [
5710
5801
  ((renderLog.progress ?? 0) * 100).toFixed(1),
5711
5802
  "%"
5712
5803
  ] })
5713
5804
  ] }),
5714
5805
  showRightHeaderContent && /* @__PURE__ */ jsxs28(TabsList, { children: [
5715
- showCodeTab && /* @__PURE__ */ jsx38(TabsTrigger, { value: "code", children: "Code" }),
5806
+ showCodeTab && /* @__PURE__ */ jsx39(TabsTrigger, { value: "code", children: "Code" }),
5716
5807
  !availableTabs || availableTabs.includes("pcb") ? /* @__PURE__ */ jsxs28(TabsTrigger, { value: "pcb", className: "rf-whitespace-nowrap", children: [
5717
- circuitJson && /* @__PURE__ */ jsx38(
5808
+ circuitJson && /* @__PURE__ */ jsx39(
5718
5809
  "span",
5719
5810
  {
5720
5811
  className: cn(
@@ -5735,7 +5826,7 @@ var CircuitJsonPreview = ({
5735
5826
  ),
5736
5827
  disabled: circuitJson ? !hasSchematicGroup || hasPanels : false,
5737
5828
  children: [
5738
- circuitJson && /* @__PURE__ */ jsx38(
5829
+ circuitJson && /* @__PURE__ */ jsx39(
5739
5830
  "span",
5740
5831
  {
5741
5832
  className: cn(
@@ -5749,7 +5840,7 @@ var CircuitJsonPreview = ({
5749
5840
  }
5750
5841
  ) : null,
5751
5842
  !availableTabs || availableTabs.includes("cad") ? /* @__PURE__ */ jsxs28(TabsTrigger, { value: "cad", children: [
5752
- circuitJson && /* @__PURE__ */ jsx38(
5843
+ circuitJson && /* @__PURE__ */ jsx39(
5753
5844
  "span",
5754
5845
  {
5755
5846
  className: cn(
@@ -5760,11 +5851,11 @@ var CircuitJsonPreview = ({
5760
5851
  ),
5761
5852
  "3D"
5762
5853
  ] }) : null,
5763
- !["pcb", "cad", "schematic"].includes(activeTab) && /* @__PURE__ */ jsx38(TabsTrigger, { value: activeTab, children: capitalizeFirstLetters(activeTab) }),
5854
+ !["pcb", "cad", "schematic"].includes(activeTab) && /* @__PURE__ */ jsx39(TabsTrigger, { value: activeTab, children: capitalizeFirstLetters(activeTab) }),
5764
5855
  /* @__PURE__ */ jsxs28(DropdownMenu, { children: [
5765
- /* @__PURE__ */ jsx38(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs28("div", { className: "rf-whitespace-nowrap rf-p-2 rf-mr-1 rf-cursor-pointer rf-relative", children: [
5766
- /* @__PURE__ */ jsx38(EllipsisIcon, { className: "rf-w-4 rf-h-4" }),
5767
- (circuitJsonErrors && circuitJsonErrors.length > 0 || errorMessage) && /* @__PURE__ */ jsx38("span", { className: "rf-inline-flex rf-absolute rf-top-[6px] rf-right-[4px] rf-items-center rf-justify-center rf-w-1 rf-h-1 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full" })
5856
+ /* @__PURE__ */ jsx39(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs28("div", { className: "rf-whitespace-nowrap rf-p-2 rf-mr-1 rf-cursor-pointer rf-relative", children: [
5857
+ /* @__PURE__ */ jsx39(EllipsisIcon, { className: "rf-w-4 rf-h-4" }),
5858
+ (circuitJsonErrors && circuitJsonErrors.length > 0 || errorMessage) && /* @__PURE__ */ jsx39("span", { className: "rf-inline-flex rf-absolute rf-top-[6px] rf-right-[4px] rf-items-center rf-justify-center rf-w-1 rf-h-1 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full" })
5768
5859
  ] }) }),
5769
5860
  /* @__PURE__ */ jsxs28(DropdownMenuContent, { className: "rf-*:text-xs rf-z-[101]", children: [
5770
5861
  dropdownMenuItems.filter(
@@ -5774,16 +5865,16 @@ var CircuitJsonPreview = ({
5774
5865
  {
5775
5866
  onSelect: () => setActiveTab(item),
5776
5867
  children: [
5777
- activeTab !== item && /* @__PURE__ */ jsx38(Circle2, { className: "rf-w-3 rf-h-3 rf-opacity-30" }),
5778
- activeTab === item && /* @__PURE__ */ jsx38(CheckIcon, { className: "rf-w-3 rf-h-3" }),
5779
- /* @__PURE__ */ jsx38("div", { className: "rf-pr-2", children: capitalizeFirstLetters(item) }),
5780
- item === "errors" && (circuitJsonErrors && circuitJsonErrors.length > 0 || errorMessage) && /* @__PURE__ */ jsx38("span", { className: "rf-inline-flex rf-items-center rf-justify-center rf-w-3 rf-h-3 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full", children: errorMessage ? 1 : circuitJsonErrors?.length }),
5781
- item === "solvers" && solverEvents && solverEvents.length > 0 && /* @__PURE__ */ jsx38("span", { className: "rf-inline-flex rf-items-center rf-justify-center rf-min-w-[12px] rf-h-3 rf-px-1 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-blue-500 rf-rounded-full", children: solverEvents.length })
5868
+ activeTab !== item && /* @__PURE__ */ jsx39(Circle2, { className: "rf-w-3 rf-h-3 rf-opacity-30" }),
5869
+ activeTab === item && /* @__PURE__ */ jsx39(CheckIcon, { className: "rf-w-3 rf-h-3" }),
5870
+ /* @__PURE__ */ jsx39("div", { className: "rf-pr-2", children: capitalizeFirstLetters(item) }),
5871
+ item === "errors" && (circuitJsonErrors && circuitJsonErrors.length > 0 || errorMessage) && /* @__PURE__ */ jsx39("span", { className: "rf-inline-flex rf-items-center rf-justify-center rf-w-3 rf-h-3 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-red-500 rf-rounded-full", children: errorMessage ? 1 : circuitJsonErrors?.length }),
5872
+ item === "solvers" && solverEvents && solverEvents.length > 0 && /* @__PURE__ */ jsx39("span", { className: "rf-inline-flex rf-items-center rf-justify-center rf-min-w-[12px] rf-h-3 rf-px-1 rf-ml-2 rf-text-[8px] rf-font-bold rf-text-white rf-bg-blue-500 rf-rounded-full", children: solverEvents.length })
5782
5873
  ]
5783
5874
  },
5784
5875
  item
5785
5876
  )),
5786
- /* @__PURE__ */ jsx38(
5877
+ /* @__PURE__ */ jsx39(
5787
5878
  DropdownMenuItem,
5788
5879
  {
5789
5880
  disabled: true,
@@ -5801,12 +5892,12 @@ var CircuitJsonPreview = ({
5801
5892
  {
5802
5893
  onOpenChange: (open) => !open && setEvalSearch(""),
5803
5894
  children: [
5804
- /* @__PURE__ */ jsx38(DropdownMenuSubTrigger, { className: "rf-text-xs rf-opacity-60", children: /* @__PURE__ */ jsxs28("div", { className: "rf-pr-2 rf-text-xs rf-text-gray-500", children: [
5895
+ /* @__PURE__ */ jsx39(DropdownMenuSubTrigger, { className: "rf-text-xs rf-opacity-60", children: /* @__PURE__ */ jsxs28("div", { className: "rf-pr-2 rf-text-xs rf-text-gray-500", children: [
5805
5896
  "@tscircuit/eval@",
5806
5897
  lastRunEvalVersion ?? latestVersion ?? "latest"
5807
5898
  ] }) }),
5808
- /* @__PURE__ */ jsx38(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs28(DropdownMenuSubContent, { className: "rf-*:text-xs rf-w-40 rf-max-h-[200px] rf-overflow-y-auto", children: [
5809
- /* @__PURE__ */ jsx38("div", { className: "rf-p-1", children: /* @__PURE__ */ jsx38(
5899
+ /* @__PURE__ */ jsx39(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs28(DropdownMenuSubContent, { className: "rf-*:text-xs rf-w-40 rf-max-h-[200px] rf-overflow-y-auto", children: [
5900
+ /* @__PURE__ */ jsx39("div", { className: "rf-p-1", children: /* @__PURE__ */ jsx39(
5810
5901
  Input,
5811
5902
  {
5812
5903
  value: evalSearch,
@@ -5815,15 +5906,15 @@ var CircuitJsonPreview = ({
5815
5906
  className: "rf-h-7 rf-text-xs"
5816
5907
  }
5817
5908
  ) }),
5818
- /* @__PURE__ */ jsx38(DropdownMenuSeparator, {}),
5819
- /* @__PURE__ */ jsx38(
5909
+ /* @__PURE__ */ jsx39(DropdownMenuSeparator, {}),
5910
+ /* @__PURE__ */ jsx39(
5820
5911
  DropdownMenuItem,
5821
5912
  {
5822
5913
  onSelect: () => selectEvalVersion(null),
5823
5914
  children: latestVersion ? `${latestVersion} (latest)` : "latest"
5824
5915
  }
5825
5916
  ),
5826
- evalVersions.map((v) => /* @__PURE__ */ jsx38(
5917
+ evalVersions.map((v) => /* @__PURE__ */ jsx39(
5827
5918
  DropdownMenuItem,
5828
5919
  {
5829
5920
  onSelect: () => selectEvalVersion(v),
@@ -5834,7 +5925,7 @@ var CircuitJsonPreview = ({
5834
5925
  ] }) })
5835
5926
  ]
5836
5927
  }
5837
- ) : lastRunEvalVersion && /* @__PURE__ */ jsx38(
5928
+ ) : lastRunEvalVersion && /* @__PURE__ */ jsx39(
5838
5929
  DropdownMenuItem,
5839
5930
  {
5840
5931
  disabled: true,
@@ -5848,33 +5939,33 @@ var CircuitJsonPreview = ({
5848
5939
  ] })
5849
5940
  ] })
5850
5941
  ] }),
5851
- showToggleFullScreen && /* @__PURE__ */ jsx38(Button, { onClick: toggleFullScreen, variant: "ghost", children: isFullScreen ? /* @__PURE__ */ jsx38(MinimizeIcon, { size: 16 }) : /* @__PURE__ */ jsx38(FullscreenIcon, { size: 16 }) })
5942
+ showToggleFullScreen && /* @__PURE__ */ jsx39(Button, { onClick: toggleFullScreen, variant: "ghost", children: isFullScreen ? /* @__PURE__ */ jsx39(MinimizeIcon, { size: 16 }) : /* @__PURE__ */ jsx39(FullscreenIcon, { size: 16 }) })
5852
5943
  ]
5853
5944
  }
5854
5945
  ),
5855
- showCodeTab && /* @__PURE__ */ jsx38(
5946
+ showCodeTab && /* @__PURE__ */ jsx39(
5856
5947
  TabsContent,
5857
5948
  {
5858
5949
  value: "code",
5859
5950
  className: "rf-flex-grow rf-overflow-hidden",
5860
- children: /* @__PURE__ */ jsx38("div", { className: "rf-h-full", children: codeTabContent })
5951
+ children: /* @__PURE__ */ jsx39("div", { className: "rf-h-full", children: codeTabContent })
5861
5952
  }
5862
5953
  ),
5863
- (!availableTabs || availableTabs.includes("pcb")) && /* @__PURE__ */ jsx38(TabsContent, { value: "pcb", children: /* @__PURE__ */ jsx38(
5954
+ (!availableTabs || availableTabs.includes("pcb")) && /* @__PURE__ */ jsx39(TabsContent, { value: "pcb", children: /* @__PURE__ */ jsx39(
5864
5955
  "div",
5865
5956
  {
5866
5957
  className: cn(
5867
5958
  "rf-overflow-hidden",
5868
5959
  isFullScreen ? "rf-h-[calc(100vh-52px)]" : "rf-h-full"
5869
5960
  ),
5870
- children: /* @__PURE__ */ jsx38(
5961
+ children: /* @__PURE__ */ jsx39(
5871
5962
  ErrorBoundary2,
5872
5963
  {
5873
- fallbackRender: ({ error }) => /* @__PURE__ */ jsx38("div", { className: "rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200", children: /* @__PURE__ */ jsxs28("div", { className: "rf-p-4", children: [
5874
- /* @__PURE__ */ jsx38("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3", children: "Error loading PCB viewer" }),
5875
- /* @__PURE__ */ jsx38("p", { className: "rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2", children: error?.message || "An unknown error occurred" })
5964
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx39("div", { className: "rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200", children: /* @__PURE__ */ jsxs28("div", { className: "rf-p-4", children: [
5965
+ /* @__PURE__ */ jsx39("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3", children: "Error loading PCB viewer" }),
5966
+ /* @__PURE__ */ jsx39("p", { className: "rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2", children: error?.message || "An unknown error occurred" })
5876
5967
  ] }) }),
5877
- children: circuitJson ? /* @__PURE__ */ jsx38(
5968
+ children: circuitJson ? /* @__PURE__ */ jsx39(
5878
5969
  PcbViewerWithContainerHeight,
5879
5970
  {
5880
5971
  focusOnHover: false,
@@ -5892,19 +5983,19 @@ var CircuitJsonPreview = ({
5892
5983
  }
5893
5984
  }
5894
5985
  }
5895
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
5986
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
5896
5987
  }
5897
5988
  )
5898
5989
  }
5899
5990
  ) }),
5900
- (!availableTabs || availableTabs.includes("assembly")) && /* @__PURE__ */ jsx38(TabsContent, { value: "assembly", children: /* @__PURE__ */ jsx38(
5991
+ (!availableTabs || availableTabs.includes("assembly")) && /* @__PURE__ */ jsx39(TabsContent, { value: "assembly", children: /* @__PURE__ */ jsx39(
5901
5992
  "div",
5902
5993
  {
5903
5994
  className: cn(
5904
5995
  "rf-overflow-auto",
5905
5996
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
5906
5997
  ),
5907
- children: /* @__PURE__ */ jsx38(ErrorBoundary2, { fallback: /* @__PURE__ */ jsx38("div", { children: "Error loading Assembly" }), children: circuitJson ? /* @__PURE__ */ jsx38(
5998
+ children: /* @__PURE__ */ jsx39(ErrorBoundary2, { fallback: /* @__PURE__ */ jsx39("div", { children: "Error loading Assembly" }), children: circuitJson ? /* @__PURE__ */ jsx39(
5908
5999
  AssemblyViewer,
5909
6000
  {
5910
6001
  circuitJson,
@@ -5914,21 +6005,21 @@ var CircuitJsonPreview = ({
5914
6005
  editingEnabled: true,
5915
6006
  debugGrid: true
5916
6007
  }
5917
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked }) })
6008
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked }) })
5918
6009
  }
5919
6010
  ) }),
5920
- (!availableTabs || availableTabs.includes("pinout")) && /* @__PURE__ */ jsx38(TabsContent, { value: "pinout", children: /* @__PURE__ */ jsx38(
6011
+ (!availableTabs || availableTabs.includes("pinout")) && /* @__PURE__ */ jsx39(TabsContent, { value: "pinout", children: /* @__PURE__ */ jsx39(
5921
6012
  "div",
5922
6013
  {
5923
6014
  className: cn(
5924
6015
  "rf-overflow-auto",
5925
6016
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
5926
6017
  ),
5927
- children: /* @__PURE__ */ jsx38(
6018
+ children: /* @__PURE__ */ jsx39(
5928
6019
  ErrorBoundary2,
5929
6020
  {
5930
- fallback: /* @__PURE__ */ jsx38("div", { children: "Error loading Pinout Viewer" }),
5931
- children: circuitJson ? /* @__PURE__ */ jsx38(
6021
+ fallback: /* @__PURE__ */ jsx39("div", { children: "Error loading Pinout Viewer" }),
6022
+ children: circuitJson ? /* @__PURE__ */ jsx39(
5932
6023
  PinoutViewer,
5933
6024
  {
5934
6025
  circuitJson,
@@ -5936,26 +6027,26 @@ var CircuitJsonPreview = ({
5936
6027
  height: "100%"
5937
6028
  }
5938
6029
  }
5939
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
6030
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
5940
6031
  }
5941
6032
  )
5942
6033
  }
5943
6034
  ) }),
5944
- (!availableTabs || availableTabs.includes("schematic")) && /* @__PURE__ */ jsx38(TabsContent, { value: "schematic", children: /* @__PURE__ */ jsx38(
6035
+ (!availableTabs || availableTabs.includes("schematic")) && /* @__PURE__ */ jsx39(TabsContent, { value: "schematic", children: /* @__PURE__ */ jsx39(
5945
6036
  "div",
5946
6037
  {
5947
6038
  className: cn(
5948
6039
  "rf-overflow-auto rf-bg-white",
5949
6040
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
5950
6041
  ),
5951
- children: /* @__PURE__ */ jsx38(
6042
+ children: /* @__PURE__ */ jsx39(
5952
6043
  ErrorBoundary2,
5953
6044
  {
5954
- fallbackRender: ({ error }) => /* @__PURE__ */ jsx38("div", { className: "rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200", children: /* @__PURE__ */ jsxs28("div", { className: "rf-p-4", children: [
5955
- /* @__PURE__ */ jsx38("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3", children: "Error loading Schematic" }),
5956
- /* @__PURE__ */ jsx38("p", { className: "rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2", children: error?.message || "An unknown error occurred" })
6045
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx39("div", { className: "rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200", children: /* @__PURE__ */ jsxs28("div", { className: "rf-p-4", children: [
6046
+ /* @__PURE__ */ jsx39("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3", children: "Error loading Schematic" }),
6047
+ /* @__PURE__ */ jsx39("p", { className: "rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2", children: error?.message || "An unknown error occurred" })
5957
6048
  ] }) }),
5958
- children: circuitJson ? /* @__PURE__ */ jsx38(
6049
+ children: circuitJson ? /* @__PURE__ */ jsx39(
5959
6050
  SchematicViewer,
5960
6051
  {
5961
6052
  spiceSimulationEnabled: true,
@@ -5970,29 +6061,29 @@ var CircuitJsonPreview = ({
5970
6061
  debugGrid: showSchematicDebugGrid,
5971
6062
  showSchematicPorts
5972
6063
  }
5973
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
6064
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
5974
6065
  }
5975
6066
  )
5976
6067
  }
5977
6068
  ) }),
5978
- (!availableTabs || availableTabs.includes("cad")) && /* @__PURE__ */ jsx38(TabsContent, { value: "cad", children: /* @__PURE__ */ jsx38(
6069
+ (!availableTabs || availableTabs.includes("cad")) && /* @__PURE__ */ jsx39(TabsContent, { value: "cad", children: /* @__PURE__ */ jsx39(
5979
6070
  "div",
5980
6071
  {
5981
6072
  className: cn(
5982
6073
  "rf-overflow-auto",
5983
6074
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
5984
6075
  ),
5985
- children: /* @__PURE__ */ jsx38(
6076
+ children: /* @__PURE__ */ jsx39(
5986
6077
  ErrorBoundary2,
5987
6078
  {
5988
- fallbackRender: ({ error, resetErrorBoundary }) => /* @__PURE__ */ jsx38(
6079
+ fallbackRender: ({ error, resetErrorBoundary }) => /* @__PURE__ */ jsx39(
5989
6080
  ErrorFallback,
5990
6081
  {
5991
6082
  error,
5992
6083
  resetErrorBoundary
5993
6084
  }
5994
6085
  ),
5995
- children: circuitJson ? /* @__PURE__ */ jsx38(
6086
+ children: circuitJson ? /* @__PURE__ */ jsx39(
5996
6087
  CadViewer,
5997
6088
  {
5998
6089
  ref: setCadViewerRef,
@@ -6000,23 +6091,23 @@ var CircuitJsonPreview = ({
6000
6091
  autoRotateDisabled: autoRotate3dViewerDisabled
6001
6092
  },
6002
6093
  `cad-${isFullScreen}`
6003
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
6094
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
6004
6095
  }
6005
6096
  )
6006
6097
  }
6007
6098
  ) }),
6008
- (!availableTabs || availableTabs.includes("analog_simulation")) && /* @__PURE__ */ jsx38(TabsContent, { value: "analog_simulation", children: /* @__PURE__ */ jsx38(
6099
+ (!availableTabs || availableTabs.includes("analog_simulation")) && /* @__PURE__ */ jsx39(TabsContent, { value: "analog_simulation", children: /* @__PURE__ */ jsx39(
6009
6100
  "div",
6010
6101
  {
6011
6102
  className: cn(
6012
6103
  "rf-overflow-auto",
6013
6104
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
6014
6105
  ),
6015
- children: /* @__PURE__ */ jsx38(
6106
+ children: /* @__PURE__ */ jsx39(
6016
6107
  ErrorBoundary2,
6017
6108
  {
6018
- fallback: /* @__PURE__ */ jsx38("div", { children: "Error loading Analog Simulation" }),
6019
- children: circuitJson ? /* @__PURE__ */ jsx38(
6109
+ fallback: /* @__PURE__ */ jsx39("div", { children: "Error loading Analog Simulation" }),
6110
+ children: circuitJson ? /* @__PURE__ */ jsx39(
6020
6111
  AnalogSimulationViewer,
6021
6112
  {
6022
6113
  circuitJson,
@@ -6024,48 +6115,48 @@ var CircuitJsonPreview = ({
6024
6115
  height: "100%"
6025
6116
  }
6026
6117
  }
6027
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
6118
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
6028
6119
  }
6029
6120
  )
6030
6121
  }
6031
6122
  ) }),
6032
- (!availableTabs || availableTabs.includes("bom")) && /* @__PURE__ */ jsx38(TabsContent, { value: "bom", children: /* @__PURE__ */ jsx38(
6123
+ (!availableTabs || availableTabs.includes("bom")) && /* @__PURE__ */ jsx39(TabsContent, { value: "bom", children: /* @__PURE__ */ jsx39(
6033
6124
  "div",
6034
6125
  {
6035
6126
  className: cn(
6036
6127
  "rf-overflow-auto",
6037
6128
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
6038
6129
  ),
6039
- children: /* @__PURE__ */ jsx38(
6130
+ children: /* @__PURE__ */ jsx39(
6040
6131
  ErrorBoundary2,
6041
6132
  {
6042
- fallbackRender: ({ error }) => /* @__PURE__ */ jsx38("div", { className: "rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200", children: /* @__PURE__ */ jsxs28("div", { className: "rf-p-4", children: [
6043
- /* @__PURE__ */ jsx38("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3", children: "Error loading Bill of Materials" }),
6044
- /* @__PURE__ */ jsx38("p", { className: "rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2", children: error?.message || "An unknown error occurred" })
6133
+ fallbackRender: ({ error }) => /* @__PURE__ */ jsx39("div", { className: "rf-mt-4 rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200", children: /* @__PURE__ */ jsxs28("div", { className: "rf-p-4", children: [
6134
+ /* @__PURE__ */ jsx39("h3", { className: "rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-3", children: "Error loading Bill of Materials" }),
6135
+ /* @__PURE__ */ jsx39("p", { className: "rf-text-xs rf-font-mono rf-whitespace-pre-wrap rf-text-red-600 rf-mt-2", children: error?.message || "An unknown error occurred" })
6045
6136
  ] }) }),
6046
- children: circuitJson ? /* @__PURE__ */ jsx38(BomTable, { circuitJson }) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
6137
+ children: circuitJson ? /* @__PURE__ */ jsx39(BomTable, { circuitJson }) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
6047
6138
  }
6048
6139
  )
6049
6140
  }
6050
6141
  ) }),
6051
- (!availableTabs || availableTabs.includes("circuit_json")) && /* @__PURE__ */ jsx38(TabsContent, { value: "circuit_json", children: /* @__PURE__ */ jsx38(
6142
+ (!availableTabs || availableTabs.includes("circuit_json")) && /* @__PURE__ */ jsx39(TabsContent, { value: "circuit_json", children: /* @__PURE__ */ jsx39(
6052
6143
  "div",
6053
6144
  {
6054
6145
  className: cn(
6055
6146
  "rf-overflow-auto",
6056
6147
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
6057
6148
  ),
6058
- children: /* @__PURE__ */ jsx38(ErrorBoundary2, { fallback: /* @__PURE__ */ jsx38("div", { children: "Error loading JSON viewer" }), children: circuitJson ? /* @__PURE__ */ jsx38(CircuitJsonTableViewer, { elements: circuitJson }) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked }) })
6149
+ children: /* @__PURE__ */ jsx39(ErrorBoundary2, { fallback: /* @__PURE__ */ jsx39("div", { children: "Error loading JSON viewer" }), children: circuitJson ? /* @__PURE__ */ jsx39(CircuitJsonTableViewer, { elements: circuitJson }) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked }) })
6059
6150
  }
6060
6151
  ) }),
6061
- (!availableTabs || availableTabs.includes("errors")) && /* @__PURE__ */ jsx38(TabsContent, { value: "errors", className: "rf-h-full", children: /* @__PURE__ */ jsx38(
6152
+ (!availableTabs || availableTabs.includes("errors")) && /* @__PURE__ */ jsx39(TabsContent, { value: "errors", className: "rf-h-full", children: /* @__PURE__ */ jsx39(
6062
6153
  "div",
6063
6154
  {
6064
6155
  className: cn(
6065
6156
  "rf-overflow-hidden",
6066
6157
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
6067
6158
  ),
6068
- children: errorMessage || circuitJsonErrors && circuitJsonErrors.length > 0 || circuitJson ? /* @__PURE__ */ jsx38(
6159
+ children: errorMessage || circuitJsonErrors && circuitJsonErrors.length > 0 || circuitJson ? /* @__PURE__ */ jsx39(
6069
6160
  ErrorTabContent,
6070
6161
  {
6071
6162
  code,
@@ -6079,24 +6170,24 @@ var CircuitJsonPreview = ({
6079
6170
  autoroutingLog,
6080
6171
  onReportAutoroutingLog
6081
6172
  }
6082
- ) : /* @__PURE__ */ jsx38(PreviewEmptyState_default, { onRunClicked })
6173
+ ) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
6083
6174
  }
6084
6175
  ) }),
6085
- showRenderLogTab && (!availableTabs || availableTabs.includes("render_log")) && /* @__PURE__ */ jsx38(TabsContent, { value: "render_log", children: /* @__PURE__ */ jsx38(
6176
+ showRenderLogTab && (!availableTabs || availableTabs.includes("render_log")) && /* @__PURE__ */ jsx39(TabsContent, { value: "render_log", children: /* @__PURE__ */ jsx39(
6086
6177
  RenderLogViewer,
6087
6178
  {
6088
6179
  renderLog,
6089
6180
  onRerunWithDebug
6090
6181
  }
6091
6182
  ) }),
6092
- (!availableTabs || availableTabs.includes("solvers")) && /* @__PURE__ */ jsx38(TabsContent, { value: "solvers", children: /* @__PURE__ */ jsx38(
6183
+ (!availableTabs || availableTabs.includes("solvers")) && /* @__PURE__ */ jsx39(TabsContent, { value: "solvers", children: /* @__PURE__ */ jsx39(
6093
6184
  "div",
6094
6185
  {
6095
6186
  className: cn(
6096
6187
  "rf-overflow-hidden",
6097
6188
  isFullScreen ? "rf-h-[calc(100vh-60px)]" : "rf-h-full rf-min-h-[620px]"
6098
6189
  ),
6099
- children: /* @__PURE__ */ jsx38(ErrorBoundary2, { fallback: /* @__PURE__ */ jsx38("div", { children: "Error loading Solvers view" }), children: /* @__PURE__ */ jsx38(SolversTabContent, { solverEvents }) })
6190
+ children: /* @__PURE__ */ jsx39(ErrorBoundary2, { fallback: /* @__PURE__ */ jsx39("div", { children: "Error loading Solvers view" }), children: /* @__PURE__ */ jsx39(SolversTabContent, { solverEvents }) })
6100
6191
  }
6101
6192
  ) })
6102
6193
  ]
@@ -6121,7 +6212,6 @@ export {
6121
6212
  TabsContent,
6122
6213
  Button,
6123
6214
  toast,
6124
- linkify,
6125
6215
  BomTable,
6126
6216
  Input,
6127
6217
  PcbViewerWithContainerHeight,