@tscircuit/runframe 0.0.1869 → 0.0.1870
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-PJGL4TPO.js → chunk-FXKR2O63.js} +576 -486
- package/dist/preview.d.ts +4 -4
- package/dist/preview.js +1 -3
- package/dist/runner.d.ts +1 -1
- package/dist/runner.js +1 -3
- package/dist/standalone-preview.min.js +369 -369
- package/dist/standalone.min.js +370 -370
- package/package.json +1 -1
|
@@ -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
|
|
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 {
|
|
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
|
|
1143
|
-
|
|
1144
|
-
)
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
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
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
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
|
|
1273
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
1183
1274
|
var Input = React5.forwardRef(
|
|
1184
1275
|
({ className, type, ...props }, ref) => {
|
|
1185
|
-
return /* @__PURE__ */
|
|
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
|
|
1293
|
+
import { useRef, useState as useState4, useLayoutEffect } from "react";
|
|
1203
1294
|
import { PCBViewer } from "@tscircuit/pcb-viewer";
|
|
1204
|
-
import { jsx as
|
|
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] =
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
-
|
|
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
|
|
1354
|
+
import { useEffect as useEffect4 } from "react";
|
|
1264
1355
|
var useFullscreenBodyScroll = (isFullScreen) => {
|
|
1265
|
-
|
|
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
|
|
1369
|
+
import { useState as useState5, useEffect as useEffect5 } from "react";
|
|
1279
1370
|
function useLocalStorageState(key, initialValue, overrideValue) {
|
|
1280
|
-
const [state, setState] =
|
|
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
|
-
|
|
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
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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] =
|
|
1462
|
+
const [sortOption, setSortOption] = useState6(
|
|
1372
1463
|
"chronological"
|
|
1373
1464
|
);
|
|
1374
|
-
const [selectedDebugOption, setSelectedDebugOption] =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1491
|
+
children: debugOptions.map((option) => /* @__PURE__ */ jsx17("option", { value: option.value, children: option.label }, option.value))
|
|
1401
1492
|
}
|
|
1402
1493
|
),
|
|
1403
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1528
|
+
children: debugOptions.map((option) => /* @__PURE__ */ jsx17("option", { value: option.value, children: option.label }, option.value))
|
|
1438
1529
|
}
|
|
1439
1530
|
),
|
|
1440
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1481
|
-
renderLog?.debugOutputs?.map((output) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1495
|
-
/* @__PURE__ */
|
|
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__ */
|
|
1593
|
+
/* @__PURE__ */ jsx17(RenderTimingsBar_default, { phaseTimings: renderLog.phaseTimings }),
|
|
1503
1594
|
/* @__PURE__ */ jsxs11("table", { className: "rf-w-full rf-text-xs", children: [
|
|
1504
|
-
/* @__PURE__ */
|
|
1505
|
-
/* @__PURE__ */
|
|
1506
|
-
/* @__PURE__ */
|
|
1507
|
-
/* @__PURE__ */
|
|
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__ */
|
|
1510
|
-
/* @__PURE__ */
|
|
1511
|
-
/* @__PURE__ */
|
|
1512
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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
|
|
1636
|
+
import { useEffect as useEffect6 } from "react";
|
|
1546
1637
|
var useInjectTailwind = () => {
|
|
1547
|
-
|
|
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
|
|
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] =
|
|
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__ */
|
|
1622
|
-
/* @__PURE__ */
|
|
1623
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1647
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1660
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1692
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
1790
|
+
import { useEffect as useEffect7 } from "react";
|
|
1700
1791
|
var useErrorTelemetry = ({
|
|
1701
1792
|
errorMessage,
|
|
1702
1793
|
errorStack,
|
|
1703
1794
|
circuitJsonErrors
|
|
1704
1795
|
}) => {
|
|
1705
|
-
|
|
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
|
-
|
|
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.
|
|
1824
|
+
var version = "0.0.1869";
|
|
1734
1825
|
var package_default = {
|
|
1735
1826
|
name: "@tscircuit/runframe",
|
|
1736
1827
|
main: "dist/preview.js",
|
|
@@ -1852,7 +1943,7 @@ var package_default = {
|
|
|
1852
1943
|
};
|
|
1853
1944
|
|
|
1854
1945
|
// lib/hooks/use-eval-versions.ts
|
|
1855
|
-
import { useEffect as
|
|
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] =
|
|
1875
|
-
const [latest, setLatest] =
|
|
1876
|
-
const [search, setSearch] =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
2134
|
-
import { jsx as
|
|
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] =
|
|
2142
|
-
const [searchInput, setSearchInput] =
|
|
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__ */
|
|
2158
|
-
/* @__PURE__ */
|
|
2159
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
-
|
|
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
|
|
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__ */
|
|
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__ */
|
|
2254
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
2344
|
-
var Checkbox = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
2390
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
2554
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2574
|
-
/* @__PURE__ */
|
|
2575
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
2747
|
-
/* @__PURE__ */
|
|
2748
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2753
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2765
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2774
|
-
schematicPreviewUrl && /* @__PURE__ */
|
|
2775
|
-
cadPreviewUrl && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2830
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2834
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2838
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
2973
|
+
import { useCallback as useCallback2, useState as useState10 } from "react";
|
|
2883
2974
|
var useTscircuitPackageDetails = () => {
|
|
2884
|
-
const [details, setDetails] =
|
|
2885
|
-
const [isLoading, setIsLoading] =
|
|
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
|
|
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] =
|
|
2949
|
-
const [isSearching, setIsSearching] =
|
|
2950
|
-
const [error, setError] =
|
|
2951
|
-
const [hasSearched, setHasSearched] =
|
|
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
|
|
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] =
|
|
3011
|
-
const [isSearching, setIsSearching] =
|
|
3012
|
-
const [error, setError] =
|
|
3013
|
-
const [hasSearched, setHasSearched] =
|
|
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
|
|
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] =
|
|
3095
|
-
const [isSearching, setIsSearching] =
|
|
3096
|
-
const [error, setError] =
|
|
3097
|
-
const [hasSearched, setHasSearched] =
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3407
|
-
/* @__PURE__ */
|
|
3408
|
-
/* @__PURE__ */
|
|
3409
|
-
] }) : searchResults.length > 0 ? /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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
|
|
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
|
|
3983
|
+
import { useState as useState17 } from "react";
|
|
3893
3984
|
|
|
3894
3985
|
// lib/components/AiReviewDialog/ListAiReviewsView.tsx
|
|
3895
|
-
import { useEffect as
|
|
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
|
|
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] =
|
|
3972
|
-
const [loading, setLoading] =
|
|
3973
|
-
const [creating, setCreating] =
|
|
3974
|
-
|
|
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__ */
|
|
4013
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4024
|
-
/* @__PURE__ */
|
|
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
|
|
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
|
|
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] =
|
|
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
|
-
|
|
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__ */
|
|
4072
|
-
/* @__PURE__ */
|
|
4162
|
+
/* @__PURE__ */ jsx29(Button, { variant: "ghost", size: "sm", onClick: onBack, children: "Back" }),
|
|
4163
|
+
/* @__PURE__ */ jsx29(DialogTitle, { children: "AI Review" })
|
|
4073
4164
|
] }),
|
|
4074
|
-
aiReviewText ? /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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] =
|
|
4215
|
+
const [stage, setStage] = useState17(
|
|
4125
4216
|
"list_reviews"
|
|
4126
4217
|
);
|
|
4127
|
-
const [selectedReview, setSelectedReview] =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
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__ */
|
|
4190
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4206
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4219
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4234
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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] =
|
|
4336
|
-
const [orderQuoteId, setOrderQuoteId] =
|
|
4426
|
+
const [selectedShippingCarrier, setSelectedShippingCarrier] = useState18(null);
|
|
4427
|
+
const [orderQuoteId, setOrderQuoteId] = useState18(null);
|
|
4337
4428
|
const { mutate: createOrderQuote2, error: createOrderQuoteError } = useCreateOrderQuote();
|
|
4338
|
-
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
4381
|
-
!(createOrderQuoteError || orderQuote?.error) && (!orderQuoteId || !orderQuote || orderQuote?.is_processing) && /* @__PURE__ */
|
|
4382
|
-
(createOrderQuoteError || orderQuote?.error) && /* @__PURE__ */
|
|
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__ */
|
|
4390
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4438
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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
|
|
4532
|
-
import { jsx as
|
|
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] =
|
|
4535
|
-
const [stage, setStage] =
|
|
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] =
|
|
4556
|
-
const [stage, setStage] =
|
|
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__ */
|
|
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
|
|
4679
|
+
useEffect as useEffect14,
|
|
4589
4680
|
useMemo as useMemo8,
|
|
4590
4681
|
useRef as useRef3,
|
|
4591
|
-
useState as
|
|
4682
|
+
useState as useState20
|
|
4592
4683
|
} from "react";
|
|
4593
|
-
import { Fragment as Fragment8, jsx as
|
|
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] =
|
|
4616
|
-
const [isSubmitting, setIsSubmitting] =
|
|
4617
|
-
const [errorMessage, setErrorMessage] =
|
|
4618
|
-
const [uploadProgress, setUploadProgress] =
|
|
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] =
|
|
4712
|
+
const [uploadErrors, setUploadErrors] = useState20([]);
|
|
4622
4713
|
const textareaRef = useRef3(null);
|
|
4623
|
-
const [successState, setSuccessState] =
|
|
4624
|
-
const [bugReportFileCount, setBugReportFileCount] =
|
|
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
|
-
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
4781
|
-
/* @__PURE__ */
|
|
4782
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4795
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4842
|
-
uploadErrors.length > 0 && /* @__PURE__ */
|
|
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__ */
|
|
4849
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4896
|
-
errorMessage && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
4976
|
-
import { jsx as
|
|
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] =
|
|
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__ */
|
|
5081
|
+
return /* @__PURE__ */ jsx37(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs26(DialogContent, { children: [
|
|
4991
5082
|
/* @__PURE__ */ jsxs26(DialogHeader, { children: [
|
|
4992
|
-
/* @__PURE__ */
|
|
4993
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4996
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
5015
|
-
/* @__PURE__ */
|
|
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
|
|
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] =
|
|
5076
|
-
const [hasUnsavedChanges, setHasUnsavedChanges] =
|
|
5077
|
-
const [hasNeverBeenSaved, setHasNeverBeenSaved] =
|
|
5078
|
-
const [isSaving, setIsSaving] =
|
|
5079
|
-
const [requestToSaveSentAt, setRequestToSaveSentAt] =
|
|
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] =
|
|
5173
|
+
const [availableSnippets, setAvailableSnippets] = useState22(
|
|
5083
5174
|
null
|
|
5084
5175
|
);
|
|
5085
|
-
const [isSelectSnippetDialogOpen, setIsSelectSnippetDialogOpen] =
|
|
5086
|
-
const [notificationMessage, setNotificationMessage] =
|
|
5176
|
+
const [isSelectSnippetDialogOpen, setIsSelectSnippetDialogOpen] = useState22(false);
|
|
5177
|
+
const [notificationMessage, setNotificationMessage] = useState22(
|
|
5087
5178
|
null
|
|
5088
5179
|
);
|
|
5089
|
-
const [errorMessage, setErrorMessage] =
|
|
5090
|
-
const [isError, setIsError] =
|
|
5091
|
-
const [isExporting, setisExporting] =
|
|
5092
|
-
const [isLbrnDialogOpen, setIsLbrnDialogOpen] =
|
|
5093
|
-
const [pendingLbrnExport, setPendingLbrnExport] =
|
|
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
|
-
|
|
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] =
|
|
5166
|
-
const [isAiReviewDialogOpen, setIsAiReviewDialogOpen] =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5244
|
-
/* @__PURE__ */
|
|
5245
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5329
|
-
/* @__PURE__ */
|
|
5330
|
-
/* @__PURE__ */
|
|
5331
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5464
|
+
/* @__PURE__ */ jsx38(AlertDialog, { open: isError, onOpenChange: setIsError, children: /* @__PURE__ */ jsxs27(AlertDialogContent, { children: [
|
|
5374
5465
|
/* @__PURE__ */ jsxs27(AlertDialogHeader, { children: [
|
|
5375
|
-
/* @__PURE__ */
|
|
5376
|
-
/* @__PURE__ */
|
|
5466
|
+
/* @__PURE__ */ jsx38(AlertDialogTitle, { children: "Error Saving Snippet" }),
|
|
5467
|
+
/* @__PURE__ */ jsx38(AlertDialogDescription, { children: errorMessage })
|
|
5377
5468
|
] }),
|
|
5378
|
-
/* @__PURE__ */
|
|
5469
|
+
/* @__PURE__ */ jsx38(AlertDialogFooter, { children: /* @__PURE__ */ jsx38(AlertDialogCancel, { onClick: () => setIsError(false), children: "Dismiss" }) })
|
|
5379
5470
|
] }) }),
|
|
5380
|
-
/* @__PURE__ */
|
|
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__ */
|
|
5401
|
-
/* @__PURE__ */
|
|
5402
|
-
/* @__PURE__ */
|
|
5403
|
-
/* @__PURE__ */
|
|
5404
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5564
|
+
/* @__PURE__ */ jsx38(
|
|
5474
5565
|
ImportComponentDialogForCli,
|
|
5475
5566
|
{
|
|
5476
5567
|
isOpen: isImportDialogOpen,
|
|
5477
5568
|
onClose: () => setIsImportDialogOpen(false)
|
|
5478
5569
|
}
|
|
5479
5570
|
),
|
|
5480
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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] =
|
|
5609
|
-
const [isFullScreen, setIsFullScreen] =
|
|
5610
|
-
const [internalShowSchematicDebugGrid, setInternalShowSchematicDebugGrid] =
|
|
5611
|
-
const [internalShowSchematicPorts, setInternalShowSchematicPorts] =
|
|
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
|
-
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5690
|
-
!leftHeaderContent && !showFileMenu && isRunningCode && /* @__PURE__ */
|
|
5691
|
-
!leftHeaderContent && !showFileMenu && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5854
|
+
!["pcb", "cad", "schematic"].includes(activeTab) && /* @__PURE__ */ jsx39(TabsTrigger, { value: activeTab, children: capitalizeFirstLetters(activeTab) }),
|
|
5764
5855
|
/* @__PURE__ */ jsxs28(DropdownMenu, { children: [
|
|
5765
|
-
/* @__PURE__ */
|
|
5766
|
-
/* @__PURE__ */
|
|
5767
|
-
(circuitJsonErrors && circuitJsonErrors.length > 0 || errorMessage) && /* @__PURE__ */
|
|
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__ */
|
|
5778
|
-
activeTab === item && /* @__PURE__ */
|
|
5779
|
-
/* @__PURE__ */
|
|
5780
|
-
item === "errors" && (circuitJsonErrors && circuitJsonErrors.length > 0 || errorMessage) && /* @__PURE__ */
|
|
5781
|
-
item === "solvers" && solverEvents && solverEvents.length > 0 && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5809
|
-
/* @__PURE__ */
|
|
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__ */
|
|
5819
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5951
|
+
children: /* @__PURE__ */ jsx39("div", { className: "rf-h-full", children: codeTabContent })
|
|
5861
5952
|
}
|
|
5862
5953
|
),
|
|
5863
|
-
(!availableTabs || availableTabs.includes("pcb")) && /* @__PURE__ */
|
|
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__ */
|
|
5961
|
+
children: /* @__PURE__ */ jsx39(
|
|
5871
5962
|
ErrorBoundary2,
|
|
5872
5963
|
{
|
|
5873
|
-
fallbackRender: ({ error }) => /* @__PURE__ */
|
|
5874
|
-
/* @__PURE__ */
|
|
5875
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
5986
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
|
|
5896
5987
|
}
|
|
5897
5988
|
)
|
|
5898
5989
|
}
|
|
5899
5990
|
) }),
|
|
5900
|
-
(!availableTabs || availableTabs.includes("assembly")) && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
6008
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked }) })
|
|
5918
6009
|
}
|
|
5919
6010
|
) }),
|
|
5920
|
-
(!availableTabs || availableTabs.includes("pinout")) && /* @__PURE__ */
|
|
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__ */
|
|
6018
|
+
children: /* @__PURE__ */ jsx39(
|
|
5928
6019
|
ErrorBoundary2,
|
|
5929
6020
|
{
|
|
5930
|
-
fallback: /* @__PURE__ */
|
|
5931
|
-
children: circuitJson ? /* @__PURE__ */
|
|
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__ */
|
|
6030
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
|
|
5940
6031
|
}
|
|
5941
6032
|
)
|
|
5942
6033
|
}
|
|
5943
6034
|
) }),
|
|
5944
|
-
(!availableTabs || availableTabs.includes("schematic")) && /* @__PURE__ */
|
|
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__ */
|
|
6042
|
+
children: /* @__PURE__ */ jsx39(
|
|
5952
6043
|
ErrorBoundary2,
|
|
5953
6044
|
{
|
|
5954
|
-
fallbackRender: ({ error }) => /* @__PURE__ */
|
|
5955
|
-
/* @__PURE__ */
|
|
5956
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
6064
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
|
|
5974
6065
|
}
|
|
5975
6066
|
)
|
|
5976
6067
|
}
|
|
5977
6068
|
) }),
|
|
5978
|
-
(!availableTabs || availableTabs.includes("cad")) && /* @__PURE__ */
|
|
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__ */
|
|
6076
|
+
children: /* @__PURE__ */ jsx39(
|
|
5986
6077
|
ErrorBoundary2,
|
|
5987
6078
|
{
|
|
5988
|
-
fallbackRender: ({ error, resetErrorBoundary }) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
6094
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
|
|
6004
6095
|
}
|
|
6005
6096
|
)
|
|
6006
6097
|
}
|
|
6007
6098
|
) }),
|
|
6008
|
-
(!availableTabs || availableTabs.includes("analog_simulation")) && /* @__PURE__ */
|
|
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__ */
|
|
6106
|
+
children: /* @__PURE__ */ jsx39(
|
|
6016
6107
|
ErrorBoundary2,
|
|
6017
6108
|
{
|
|
6018
|
-
fallback: /* @__PURE__ */
|
|
6019
|
-
children: circuitJson ? /* @__PURE__ */
|
|
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__ */
|
|
6118
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
|
|
6028
6119
|
}
|
|
6029
6120
|
)
|
|
6030
6121
|
}
|
|
6031
6122
|
) }),
|
|
6032
|
-
(!availableTabs || availableTabs.includes("bom")) && /* @__PURE__ */
|
|
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__ */
|
|
6130
|
+
children: /* @__PURE__ */ jsx39(
|
|
6040
6131
|
ErrorBoundary2,
|
|
6041
6132
|
{
|
|
6042
|
-
fallbackRender: ({ error }) => /* @__PURE__ */
|
|
6043
|
-
/* @__PURE__ */
|
|
6044
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
6173
|
+
) : /* @__PURE__ */ jsx39(PreviewEmptyState_default, { onRunClicked })
|
|
6083
6174
|
}
|
|
6084
6175
|
) }),
|
|
6085
|
-
showRenderLogTab && (!availableTabs || availableTabs.includes("render_log")) && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|