forgecad 0.9.5 → 0.9.7
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/assets/{AdminPage-uTtcSXtn.js → AdminPage-DX0mpSZT.js} +1 -1
- package/dist/assets/{BlogPage-DYJMjWx3.js → BlogPage-CI_P0_Pf.js} +1 -1
- package/dist/assets/{DocsPage-C58f0K5v.js → DocsPage-DLhIIZyJ.js} +3 -3
- package/dist/assets/EditorApp-BujZvuwX.js +12874 -0
- package/dist/assets/{EditorApp-DS0AIUrZ.css → EditorApp-DfFT2Dn8.css} +1 -0
- package/dist/assets/{EmbedViewer-CMXWA2LX.js → EmbedViewer-0S0qXKog.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-CAu2OZFn.js → LandingPageProofDriven-O_yMtAri.js} +1 -1
- package/dist/assets/{PricingPage-BIgW7m3X.js → PricingPage-DGkX3Ahr.js} +1 -1
- package/dist/assets/{SettingsPage-N1l1tMXO.js → SettingsPage-DBsqTB_y.js} +82 -22
- package/dist/assets/{app-CFy7g5WP.js → app-BE2nD6Yz.js} +1246 -191
- package/dist/assets/cli/{render-BrVVdj_T.js → render-iP9qh475.js} +841 -586
- package/dist/assets/{evalWorker-c_SB9gg3.js → evalWorker-Ds5U4xtN.js} +2732 -112
- package/dist/assets/inspectWorker-Dll4eVyD.js +12620 -0
- package/dist/assets/{manifold-Dp6pvFr6.js → manifold-Bk26ViCr.js} +1 -1
- package/dist/assets/{manifold-CRoBhJKH.js → manifold-DjYsd7A_.js} +2 -2
- package/dist/assets/{manifold-Cjk7WhRs.js → manifold-sJ-axdXM.js} +1 -1
- package/dist/assets/{renderSceneState-3DfsSASX.js → renderSceneState-Bngp5MrQ.js} +1 -1
- package/dist/assets/{reportWorker-BLkuIoS8.js → reportWorker-CU8RZ4O0.js} +2715 -112
- package/dist/assets/{sectionPlaneMath-CykEnkvQ.js → sectionPlaneMath-BdTjyVfs.js} +3213 -252
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +1 -1
- package/dist/docs-raw/AI/usage.md +7 -2
- package/dist/docs-raw/CLI.md +82 -53
- package/dist/docs-raw/beta-operations.md +9 -0
- package/dist/docs-raw/coding.md +1 -1
- package/dist/docs-raw/deployment.md +38 -23
- package/dist/docs-raw/generated/concepts.md +141 -7
- package/dist/docs-raw/generated/core.md +206 -1
- package/dist/docs-raw/generated/curves.md +97 -5
- package/dist/docs-raw/generated/lib.md +17 -1
- package/dist/docs-raw/generated/sketch.md +9 -1
- package/dist/docs-raw/generated/viewport.md +1 -1
- package/dist/docs-raw/guides/inspection-bundles.md +45 -16
- package/dist/docs-raw/platform/auth.md +2 -0
- package/dist/docs-raw/platform/google-oauth-setup.md +4 -0
- package/dist/docs-raw/runbook.md +3 -3
- package/dist/docs-raw/skills/forgecad-make-a-model.md +87 -8
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +14 -6
- package/dist/docs-raw/skills/forgecad-render-inspect.md +1 -1
- package/dist/docs-raw/skills/index.md +2 -2
- package/dist/index.html +1 -1
- package/dist/sitemap.xml +6 -6
- package/dist-cli/forgecad.js +8725 -4747
- package/dist-cli/forgecad.js.map +1 -1
- package/dist-skill/CONTEXT.md +375 -25
- package/dist-skill/docs/CLI.md +82 -53
- package/dist-skill/docs/generated/core.md +206 -1
- package/dist-skill/docs/generated/curves.md +97 -5
- package/dist-skill/docs/generated/lib.md +17 -1
- package/dist-skill/docs/generated/sketch.md +9 -1
- package/dist-skill/docs/generated/viewport.md +1 -1
- package/dist-skill/docs/guides/inspection-bundles.md +45 -16
- package/dist-skill/docs-dev/CLI.md +82 -53
- package/dist-skill/docs-dev/coding.md +1 -1
- package/dist-skill/docs-dev/generated/core.md +206 -1
- package/dist-skill/docs-dev/generated/curves.md +97 -5
- package/dist-skill/docs-dev/generated/lib.md +17 -1
- package/dist-skill/docs-dev/generated/sketch.md +9 -1
- package/dist-skill/docs-dev/generated/viewport.md +1 -1
- package/dist-skill/docs-dev/guides/inspection-bundles.md +45 -16
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +87 -8
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +14 -6
- package/dist-skill/library/forgecad-prepare-prompt/references/default-profiles.md +5 -3
- package/dist-skill/library/forgecad-prepare-prompt/references/master-prompt.md +7 -5
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +1 -1
- package/examples/api/bolted-service-cover.forge.js +17 -0
- package/examples/api/cable-gland-anchor.forge.js +14 -0
- package/examples/api/captured-cartridge-guide.forge.js +14 -0
- package/examples/api/captured-linear-slide.forge.js +13 -0
- package/examples/api/clevis-pin-joint.forge.js +13 -0
- package/examples/api/datum-enclosure.forge.js +16 -0
- package/examples/api/guided-loft-olive-oil-bottle.forge.js +135 -0
- package/examples/api/hose-barb-port.forge.js +14 -0
- package/examples/api/intentional-overlap-overmold.forge.js +16 -0
- package/examples/api/knuckled-hinge-assembly.forge.js +15 -0
- package/examples/api/living-hinge-cover.forge.js +14 -0
- package/examples/api/pcb-terminal-block.forge.js +22 -0
- package/examples/api/pinned-lever-pivot-stack.forge.js +14 -0
- package/examples/api/retained-shaft-knob-stack.forge.js +15 -0
- package/examples/api/routed-tube-clip.forge.js +15 -0
- package/examples/api/seated-bearing-stack.forge.js +30 -0
- package/examples/api/snap-latch-cover.forge.js +14 -0
- package/examples/api/static-assembly-connectors.forge.js +14 -16
- package/examples/api/thumb-screw-clamp.forge.js +15 -0
- package/package.json +20 -2
- package/dist/assets/EditorApp-DNH1TEz1.js +0 -12729
|
@@ -260,6 +260,7 @@
|
|
|
260
260
|
|
|
261
261
|
.fc-view-panel-control-block + .fc-view-panel-control-block,
|
|
262
262
|
.fc-view-panel-button-grid + .fc-view-panel-button-grid,
|
|
263
|
+
.fc-view-panel-button-grid + .fc-view-panel-control-block,
|
|
263
264
|
.fc-view-panel-row + .fc-view-panel-row,
|
|
264
265
|
.fc-view-panel-toggle-stack + .fc-view-panel-row,
|
|
265
266
|
.fc-view-panel-row + .fc-view-panel-toggle-stack {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "./vendor-react-Da3A2QmU.js";
|
|
2
|
-
import {
|
|
3
|
-
import { g as useForgeStore,
|
|
2
|
+
import { bH as initKernel, bI as initSolverWasm } from "./sectionPlaneMath-BdTjyVfs.js";
|
|
3
|
+
import { g as useForgeStore, ai as getExternalUrl, aj as getGistId, q as fetchUrlModel, p as fetchGistModel, l as buildShareUrl, B as BrandMark, ak as Viewport } from "./app-BE2nD6Yz.js";
|
|
4
4
|
function EmbedViewer() {
|
|
5
5
|
const kernelReady = useForgeStore((s) => s.kernelReady);
|
|
6
6
|
const setKernelReady = useForgeStore((s) => s.setKernelReady);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
|
|
2
|
-
import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-
|
|
2
|
+
import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-BE2nD6Yz.js";
|
|
3
3
|
import { C as COMMERCIAL_USE_CASES } from "./copy-CQKQppF-.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
function checkoutIntentPath(interval) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
|
|
2
|
-
import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-
|
|
3
|
-
import { P as PRO_STORAGE_UPGRADE_COPY } from "./copy-CQKQppF-.js";
|
|
2
|
+
import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-BE2nD6Yz.js";
|
|
3
|
+
import { C as COMMERCIAL_USE_CASES, P as PRO_STORAGE_UPGRADE_COPY } from "./copy-CQKQppF-.js";
|
|
4
4
|
function timeAgo(dateStr) {
|
|
5
5
|
const ms = Date.now() - new Date(dateStr).getTime();
|
|
6
6
|
const mins = Math.floor(ms / 6e4);
|
|
@@ -455,6 +455,7 @@ function ConnectionsSection() {
|
|
|
455
455
|
}
|
|
456
456
|
function PlanSection() {
|
|
457
457
|
const user = useAuthStore((s) => s.user);
|
|
458
|
+
const deleteAccount = useAuthStore((s) => s.deleteAccount);
|
|
458
459
|
const isPro = (user == null ? void 0 : user.plan) === "pro";
|
|
459
460
|
const [subscription, setSubscription] = reactExports.useState(null);
|
|
460
461
|
const [storageUsage, setStorageUsage] = reactExports.useState(null);
|
|
@@ -463,6 +464,8 @@ function PlanSection() {
|
|
|
463
464
|
const [licenseExpiry, setLicenseExpiry] = reactExports.useState(null);
|
|
464
465
|
const [copied, setCopied] = reactExports.useState(false);
|
|
465
466
|
const [generating, setGenerating] = reactExports.useState(false);
|
|
467
|
+
const [deletingAccount, setDeletingAccount] = reactExports.useState(false);
|
|
468
|
+
const [deleteError, setDeleteError] = reactExports.useState(null);
|
|
466
469
|
reactExports.useEffect(() => {
|
|
467
470
|
let cancelled = false;
|
|
468
471
|
setStorageLoading(true);
|
|
@@ -506,13 +509,40 @@ function PlanSection() {
|
|
|
506
509
|
} catch {
|
|
507
510
|
}
|
|
508
511
|
}, []);
|
|
512
|
+
const handleDeleteAccount = reactExports.useCallback(async () => {
|
|
513
|
+
if (!(user == null ? void 0 : user.email)) {
|
|
514
|
+
setDeleteError("Could not confirm the account email. Please refresh and try again.");
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
const acknowledged = window.confirm(
|
|
518
|
+
"Delete your ForgeCAD account permanently?\n\nThis will remove your account, hosted projects, and published models. This is irreversible."
|
|
519
|
+
);
|
|
520
|
+
if (!acknowledged) return;
|
|
521
|
+
const confirmation = window.prompt(`This action is irreversible. Type your email address to confirm:
|
|
522
|
+
|
|
523
|
+
${user.email}`);
|
|
524
|
+
if (confirmation === null) return;
|
|
525
|
+
if (confirmation.trim().toLowerCase() !== user.email.toLowerCase()) {
|
|
526
|
+
setDeleteError("Email address did not match. Account was not deleted.");
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
setDeletingAccount(true);
|
|
530
|
+
setDeleteError(null);
|
|
531
|
+
try {
|
|
532
|
+
await deleteAccount();
|
|
533
|
+
window.location.href = "/";
|
|
534
|
+
} catch (err) {
|
|
535
|
+
setDeleteError(err instanceof Error ? err.message : "Account deletion failed");
|
|
536
|
+
setDeletingAccount(false);
|
|
537
|
+
}
|
|
538
|
+
}, [deleteAccount, user == null ? void 0 : user.email]);
|
|
509
539
|
const intervalLabel = (subscription == null ? void 0 : subscription.interval) ? { monthly: "Monthly", annual: "Annual", "admin-granted": "Granted" }[subscription.interval] ?? subscription.interval : "";
|
|
510
540
|
const storagePercent = storageUsage ? storageUsagePercent(storageUsage.usedBytes, storageUsage.limitBytes) : 0;
|
|
511
541
|
const storageLimitLabel = storageUsage ? formatStorageBytes(storageUsage.limitBytes) : null;
|
|
512
542
|
const freeStorageCopy = storagePercent >= 80 ? `You are close to the ${storageLimitLabel ?? "Free"} hosted storage limit.` : `Free includes ${storageLimitLabel ?? "hosted"} storage for small projects.`;
|
|
513
543
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { marginBottom: 40 }, children: [
|
|
514
544
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: sectionHeaderStyle, children: "Plan & Usage" }),
|
|
515
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: sectionDescStyle, children: "Your current plan, billing, and
|
|
545
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: sectionDescStyle, children: "Your current plan, billing, CLI license, and commercial-use coverage." }),
|
|
516
546
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: cardStyle, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: cardBodyStyle, children: [
|
|
517
547
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 16 }, children: [
|
|
518
548
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
@@ -541,18 +571,18 @@ function PlanSection() {
|
|
|
541
571
|
] }),
|
|
542
572
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", gap: 8 }, children: [
|
|
543
573
|
isPro && (subscription == null ? void 0 : subscription.hasStripe) && /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: openBillingPortal, style: { ...btnPrimaryStyle, padding: "4px 10px", fontSize: 12 }, children: "Manage Subscription" }),
|
|
544
|
-
|
|
574
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
545
575
|
Link,
|
|
546
576
|
{
|
|
547
577
|
to: "/pricing",
|
|
548
578
|
style: {
|
|
549
|
-
...btnPrimaryStyle,
|
|
579
|
+
...isPro ? btnStyle : btnPrimaryStyle,
|
|
550
580
|
padding: "4px 10px",
|
|
551
581
|
fontSize: 12,
|
|
552
582
|
textDecoration: "none",
|
|
553
583
|
display: "inline-block"
|
|
554
584
|
},
|
|
555
|
-
children: "
|
|
585
|
+
children: isPro ? "View Pricing" : "View Pro & Enterprise"
|
|
556
586
|
}
|
|
557
587
|
)
|
|
558
588
|
] })
|
|
@@ -564,6 +594,28 @@ function PlanSection() {
|
|
|
564
594
|
] }),
|
|
565
595
|
subscription.canceledAt && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { color: "var(--fc-warning)" }, children: " (Canceled, active until period end)" })
|
|
566
596
|
] }),
|
|
597
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
598
|
+
"div",
|
|
599
|
+
{
|
|
600
|
+
style: {
|
|
601
|
+
marginBottom: 16,
|
|
602
|
+
padding: "10px 12px",
|
|
603
|
+
borderRadius: 8,
|
|
604
|
+
background: isPro ? "rgba(88, 166, 255, 0.1)" : "rgba(232, 167, 53, 0.12)",
|
|
605
|
+
border: `1px solid ${isPro ? "rgba(88, 166, 255, 0.24)" : "rgba(232, 167, 53, 0.28)"}`,
|
|
606
|
+
color: "var(--fc-textMuted)",
|
|
607
|
+
fontSize: 12,
|
|
608
|
+
lineHeight: 1.45
|
|
609
|
+
},
|
|
610
|
+
children: [
|
|
611
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontWeight: 700, color: "var(--fc-text)" }, children: isPro ? "Commercial coverage active." : "Free is for non-commercial usage." }),
|
|
612
|
+
" ",
|
|
613
|
+
isPro ? "Pro covers commercial ForgeCAD work. Pricing also includes Enterprise for embedded and team workflows." : `Use Free for education, personal exploration, and non-commercial evaluation. Choose Pro when ForgeCAD supports ${COMMERCIAL_USE_CASES} work.`,
|
|
614
|
+
" ",
|
|
615
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/pricing", style: { color: "var(--fc-accent)", textDecoration: "none", fontWeight: 600 }, children: "See pricing." })
|
|
616
|
+
]
|
|
617
|
+
}
|
|
618
|
+
),
|
|
567
619
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
568
620
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { fontSize: 13, fontWeight: 500 }, children: "Storage" }),
|
|
569
621
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -672,23 +724,31 @@ function PlanSection() {
|
|
|
672
724
|
] }) })
|
|
673
725
|
] }),
|
|
674
726
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: { fontSize: 14, fontWeight: 600, color: "var(--fc-error)", margin: "24px 0 8px" }, children: "Danger Zone" }),
|
|
675
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
676
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
677
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
678
|
-
|
|
727
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { ...cardStyle, borderColor: "rgba(248, 81, 73, 0.3)" }, children: [
|
|
728
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { ...cardBodyStyle, display: "flex", alignItems: "center", justifyContent: "space-between", gap: 16 }, children: [
|
|
729
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
730
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { fontWeight: 500, fontSize: 14, color: "var(--fc-error)" }, children: "Delete account" }),
|
|
731
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { fontSize: 12, color: "var(--fc-textMuted)", marginTop: 2 }, children: "Permanently remove your account, all projects, and published models. This cannot be undone." })
|
|
732
|
+
] }),
|
|
733
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
734
|
+
"button",
|
|
735
|
+
{
|
|
736
|
+
type: "button",
|
|
737
|
+
onClick: handleDeleteAccount,
|
|
738
|
+
disabled: deletingAccount,
|
|
739
|
+
style: {
|
|
740
|
+
...btnDangerStyle,
|
|
741
|
+
whiteSpace: "nowrap",
|
|
742
|
+
border: "1px solid rgba(248, 81, 73, 0.3)",
|
|
743
|
+
opacity: deletingAccount ? 0.6 : 1,
|
|
744
|
+
cursor: deletingAccount ? "not-allowed" : "pointer"
|
|
745
|
+
},
|
|
746
|
+
children: deletingAccount ? "Deleting..." : "Delete account"
|
|
747
|
+
}
|
|
748
|
+
)
|
|
679
749
|
] }),
|
|
680
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
681
|
-
|
|
682
|
-
{
|
|
683
|
-
style: {
|
|
684
|
-
...btnDangerStyle,
|
|
685
|
-
whiteSpace: "nowrap",
|
|
686
|
-
border: "1px solid rgba(248, 81, 73, 0.3)"
|
|
687
|
-
},
|
|
688
|
-
children: "Delete account"
|
|
689
|
-
}
|
|
690
|
-
)
|
|
691
|
-
] }) })
|
|
750
|
+
deleteError && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { padding: "0 20px 16px", color: "var(--fc-error)", fontSize: 12 }, children: deleteError })
|
|
751
|
+
] })
|
|
692
752
|
] });
|
|
693
753
|
}
|
|
694
754
|
function SettingsPage() {
|