forgecad 0.9.14 → 0.9.15
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/LICENSE +6 -4
- package/README.md +8 -4
- package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CDyGUinA.js} +2 -2
- package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-DfPMY_-d.js} +4 -15
- package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-kF0fkdJT.js} +2 -2
- package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-B954L3YN.js} +9 -3
- package/dist/assets/EditorApp-Beb-IZ0y.js +14014 -0
- package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-CuDLxKqL.css} +698 -0
- package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-C77B-TrF.js} +3 -3
- package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-Cr6fXMDj.js} +35 -37
- package/dist/assets/LegalPage-BRlScr9A.css +91 -0
- package/dist/assets/LegalPage-Dzklqmmg.js +39 -0
- package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
- package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-zWXkvlwl.js} +19 -19
- package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-Bz0of4KQ.js} +2 -2
- package/dist/assets/app-CE3sYcV7.css +3890 -0
- package/dist/assets/{app-bEww1ic4.js → app-D3kDkggg.js} +2293 -946
- package/dist/assets/cli/{render-Cho2uKG_.js → render-DSY3mMQa.js} +337 -7
- package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-gpDo-uH2.js} +927 -243
- package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-CU0Ke6DP.js} +7800 -4164
- package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
- package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
- package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-COyp8XXA.js} +927 -243
- package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
- package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
- package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
- package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
- package/dist/assets/{manifold-CG9Fokx-.js → manifold-BRI5prcH.js} +1 -1
- package/dist/assets/{manifold-uRzgk5O8.js → manifold-C-3h2M7p.js} +2 -2
- package/dist/assets/{manifold-rmfAcdwF.js → manifold-DNkrUWpA.js} +1 -1
- package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-CdBz5bNg.js} +7538 -10857
- package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-wJF98aY9.js} +6935 -4331
- package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-B-9VbLIs.js} +32 -1
- package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
- package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
- package/dist/assets/{targets-D6PWsv6X.js → targets-B9sGB5nB.js} +1 -1
- package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/ai-native-cad.md +50 -0
- package/dist/docs-raw/AI/usage.md +3 -12
- package/dist/docs-raw/CLI.md +30 -10
- package/dist/docs-raw/component-model.md +27 -11
- package/dist/docs-raw/generated/assembly.md +301 -212
- package/dist/docs-raw/generated/concepts.md +235 -237
- package/dist/docs-raw/generated/core.md +283 -6
- package/dist/docs-raw/generated/curves.md +274 -361
- package/dist/docs-raw/generated/lib.md +7 -1
- package/dist/docs-raw/generated/output.md +19 -4
- package/dist/docs-raw/generated/runtime-names.md +41 -0
- package/dist/docs-raw/generated/sdf.md +31 -0
- package/dist/docs-raw/generated/sheet-metal.md +9 -0
- package/dist/docs-raw/generated/sketch.md +44 -1
- package/dist/docs-raw/generated/viewport.md +11 -3
- package/dist/docs-raw/guides/coordinate-system.md +20 -16
- package/dist/docs-raw/guides/geometry-conventions.md +2 -2
- package/dist/docs-raw/guides/inspection-bundles.md +2 -1
- package/dist/docs-raw/guides/joint-design.md +24 -0
- package/dist/docs-raw/guides/positioning.md +13 -3
- package/dist/docs-raw/legal/privacy.md +63 -0
- package/dist/docs-raw/legal/software-license.md +55 -0
- package/dist/docs-raw/legal/terms.md +87 -0
- package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
- package/dist/docs-raw/skills/forgecad-lld.md +1 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
- package/dist/docs-raw/skills/forgecad-project.md +1 -1
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
- package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
- package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +4 -3
- package/dist/index.html +40 -12
- package/dist/llms.txt +8 -0
- package/dist/site.webmanifest +1 -1
- package/dist/sitemap.xml +49 -13
- package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SDX5QIXI.js} +1 -2
- package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-EAYEFT77.js} +1 -2
- package/dist-cli/{chunk-EXWGNL6K.js → chunk-N4O47JLF.js} +12540 -9046
- package/dist-cli/forgecad.js +1786 -679
- package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
- package/dist-cli/solver_bg.wasm +0 -0
- package/dist-skill/CONTEXT.md +1117 -721
- package/dist-skill/SKILL.md +3 -2
- package/dist-skill/docs/API/core/concepts.md +64 -1
- package/dist-skill/docs/CLI.md +30 -10
- package/dist-skill/docs/generated/assembly.md +277 -229
- package/dist-skill/docs/generated/core.md +283 -6
- package/dist-skill/docs/generated/curves.md +272 -362
- package/dist-skill/docs/generated/lib.md +7 -1
- package/dist-skill/docs/generated/output.md +19 -4
- package/dist-skill/docs/generated/runtime-names.md +41 -0
- package/dist-skill/docs/generated/sdf.md +31 -0
- package/dist-skill/docs/generated/sheet-metal.md +9 -0
- package/dist-skill/docs/generated/sketch.md +44 -2
- package/dist-skill/docs/generated/viewport.md +2 -87
- package/dist-skill/docs/guides/coordinate-system.md +20 -16
- package/dist-skill/docs/guides/geometry-conventions.md +2 -2
- package/dist-skill/docs/guides/inspection-bundles.md +2 -1
- package/dist-skill/docs/guides/joint-design.md +24 -0
- package/dist-skill/docs/guides/positioning.md +13 -3
- package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
- package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
- package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
- package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
- package/examples/api/assembly-kinematics-limb.forge.js +116 -0
- package/examples/api/connector-frame-rig-chain.forge.js +102 -0
- package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
- package/examples/api/exact-surface-studio.forge.js +6 -8
- package/examples/api/helix-basics.forge.js +6 -6
- package/examples/api/lean-foundations/README.md +12 -0
- package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
- package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
- package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
- package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
- package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
- package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
- package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
- package/examples/api/route3d-elbow.forge.js +68 -0
- package/examples/api/transition-curves.forge.js +44 -15
- package/examples/api/y-blend-corner-showcase.forge.js +0 -2
- package/examples/generative/coral-vase.forge.js +1 -1
- package/examples/nurbs-tube.forge.js +1 -1
- package/package.json +14 -13
- package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
- package/dist/assets/app-CsHnaBWt.css +0 -1789
- package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
- package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
- package/dist/docs-raw/API/README.md +0 -16
- package/dist/docs-raw/API/core/concepts.md +0 -118
- package/dist/docs-raw/INDEX.md +0 -138
- package/dist/docs-raw/RELEASING.md +0 -87
- package/dist/docs-raw/agent-native-api.md +0 -27
- package/dist/docs-raw/beta-deployment.md +0 -304
- package/dist/docs-raw/beta-operations.md +0 -325
- package/dist/docs-raw/blueprint-first.md +0 -145
- package/dist/docs-raw/cli-monetization.md +0 -112
- package/dist/docs-raw/coding-best-practices.md +0 -120
- package/dist/docs-raw/coding.md +0 -340
- package/dist/docs-raw/deployment.md +0 -374
- package/dist/docs-raw/guides/skill-maintenance.md +0 -161
- package/dist/docs-raw/guides/surface-members.md +0 -82
- package/dist/docs-raw/harbor-cli.md +0 -854
- package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
- package/dist/docs-raw/internals/compiler.md +0 -307
- package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
- package/dist/docs-raw/internals/constraint-solver.md +0 -176
- package/dist/docs-raw/internals/shape-from-slices.md +0 -152
- package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
- package/dist/docs-raw/platform/admin.md +0 -45
- package/dist/docs-raw/platform/architecture.md +0 -82
- package/dist/docs-raw/platform/auth.md +0 -139
- package/dist/docs-raw/platform/email.md +0 -67
- package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
- package/dist/docs-raw/platform/observability.md +0 -197
- package/dist/docs-raw/platform/projects.md +0 -111
- package/dist/docs-raw/platform/sharing.md +0 -90
- package/dist/docs-raw/product/README.md +0 -39
- package/dist/docs-raw/product/api-as-product-language.md +0 -13
- package/dist/docs-raw/product/business-model.md +0 -15
- package/dist/docs-raw/product/competitive-positioning.md +0 -17
- package/dist/docs-raw/product/creative-manufacturing.md +0 -15
- package/dist/docs-raw/product/founder-story.md +0 -11
- package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
- package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
- package/dist/docs-raw/product/product-loop.md +0 -17
- package/dist/docs-raw/product/strategic-decisions.md +0 -22
- package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
- package/dist/docs-raw/product/user-segments.md +0 -15
- package/dist/docs-raw/product/vision.md +0 -26
- package/dist/docs-raw/rl-environments.md +0 -350
- package/dist/docs-raw/runbook.md +0 -611
- package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
- package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
- package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
- package/dist-cli/forgecad.js.map +0 -1
- package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
- package/dist-cli/solver-46FFSK2U.js.map +0 -1
- package/dist-skill/SKILL-dev.md +0 -145
- package/dist-skill/docs-dev/API/core/concepts.md +0 -118
- package/dist-skill/docs-dev/CLI.md +0 -677
- package/dist-skill/docs-dev/agent-native-api.md +0 -27
- package/dist-skill/docs-dev/blueprint-first.md +0 -145
- package/dist-skill/docs-dev/coding-best-practices.md +0 -120
- package/dist-skill/docs-dev/coding.md +0 -340
- package/dist-skill/docs-dev/component-model.md +0 -164
- package/dist-skill/docs-dev/generated/assembly.md +0 -794
- package/dist-skill/docs-dev/generated/core.md +0 -2117
- package/dist-skill/docs-dev/generated/curves.md +0 -2583
- package/dist-skill/docs-dev/generated/lib.md +0 -169
- package/dist-skill/docs-dev/generated/output.md +0 -247
- package/dist-skill/docs-dev/generated/sdf.md +0 -446
- package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
- package/dist-skill/docs-dev/generated/sketch.md +0 -1811
- package/dist-skill/docs-dev/generated/viewport.md +0 -585
- package/dist-skill/docs-dev/generated/wood.md +0 -108
- package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
- package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
- package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
- package/dist-skill/docs-dev/guides/joint-design.md +0 -78
- package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
- package/dist-skill/docs-dev/guides/positioning.md +0 -161
- package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
- package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
- package/dist-skill/docs-dev/internals/compiler.md +0 -307
- package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
- package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
- package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as reactExports, j as jsxRuntimeExports } from "./vendor-react-
|
|
2
|
-
import {
|
|
3
|
-
import { g as useForgeStore,
|
|
1
|
+
import { r as reactExports, j as jsxRuntimeExports } from "./vendor-react-6j1Kke-Y.js";
|
|
2
|
+
import { cB as initKernel, cC as initSolverWasm } from "./scalar-sampling-budget-wJF98aY9.js";
|
|
3
|
+
import { g as useForgeStore, ai as getExternalUrl, aj as getGistId, l as fetchUrlModel, k as fetchGistModel, ao as buildShareUrl, B as BrandMark, ak as Viewport } from "./app-D3kDkggg.js";
|
|
4
4
|
function EmbedViewer() {
|
|
5
5
|
const kernelReady = useForgeStore((s) => s.kernelReady);
|
|
6
6
|
const setKernelReady = useForgeStore((s) => s.setKernelReady);
|
package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-Cr6fXMDj.js}
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-
|
|
2
|
-
import { B as BrandMark } from "./app-
|
|
3
|
-
|
|
1
|
+
import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
|
|
2
|
+
import { B as BrandMark } from "./app-D3kDkggg.js";
|
|
3
|
+
import { L as LEGAL_COPYRIGHT_NOTICE, a as LEGAL_LINKS } from "./legalContent-ZfFGMmi4.js";
|
|
4
|
+
import { u as usePageBackground } from "./landing-proof-driven-DiGqdtWa.js";
|
|
4
5
|
const LINKS = {
|
|
5
6
|
glasses: {
|
|
6
7
|
share: "https://forgecad.io/m/etXaJYSZF4",
|
|
@@ -174,6 +175,7 @@ function ProofSection({
|
|
|
174
175
|
}
|
|
175
176
|
const DESKTOP_QUERY = "(min-width: 861px)";
|
|
176
177
|
function LandingPageProofDriven() {
|
|
178
|
+
usePageBackground("#f3ede4");
|
|
177
179
|
const [isWide, setIsWide] = reactExports.useState(() => window.matchMedia(DESKTOP_QUERY).matches);
|
|
178
180
|
reactExports.useEffect(() => {
|
|
179
181
|
const mql = window.matchMedia(DESKTOP_QUERY);
|
|
@@ -181,19 +183,6 @@ function LandingPageProofDriven() {
|
|
|
181
183
|
mql.addEventListener("change", onChange);
|
|
182
184
|
return () => mql.removeEventListener("change", onChange);
|
|
183
185
|
}, []);
|
|
184
|
-
reactExports.useEffect(() => {
|
|
185
|
-
const html = document.documentElement;
|
|
186
|
-
const body = document.body;
|
|
187
|
-
const prevHtml = html.style.background;
|
|
188
|
-
const prevBody = body.style.background;
|
|
189
|
-
const bg = "#f3ede4";
|
|
190
|
-
html.style.background = bg;
|
|
191
|
-
body.style.background = bg;
|
|
192
|
-
return () => {
|
|
193
|
-
html.style.background = prevHtml;
|
|
194
|
-
body.style.background = prevBody;
|
|
195
|
-
};
|
|
196
|
-
}, []);
|
|
197
186
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-root", children: [
|
|
198
187
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-grid-overlay" }),
|
|
199
188
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-topbar", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-topbar-inner", children: [
|
|
@@ -213,15 +202,16 @@ function LandingPageProofDriven() {
|
|
|
213
202
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-grid", children: [
|
|
214
203
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-copy", children: [
|
|
215
204
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
216
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "
|
|
205
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "AI-Native CAD Workflow" }),
|
|
217
206
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("h1", { children: [
|
|
218
|
-
"
|
|
207
|
+
"AI-driven CAD ",
|
|
219
208
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "in JavaScript." })
|
|
220
209
|
] }),
|
|
221
210
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "lpd-hero-lead", children: [
|
|
222
|
-
"
|
|
211
|
+
"Turn prompts, product ideas, and feedback into editable parametric CAD. Every model on this page is a real",
|
|
212
|
+
" ",
|
|
223
213
|
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: ".forge.js" }),
|
|
224
|
-
" file
|
|
214
|
+
" file an agent can revise, validate, inspect, and export for manufacturing."
|
|
225
215
|
] }),
|
|
226
216
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-actions", children: [
|
|
227
217
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/app", className: "lpd-button lpd-button-primary", children: "Open ForgeCAD" }),
|
|
@@ -231,15 +221,15 @@ function LandingPageProofDriven() {
|
|
|
231
221
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-facts", children: [
|
|
232
222
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-fact", children: [
|
|
233
223
|
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "JavaScript" }),
|
|
234
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Full language, not a DSL.
|
|
224
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Full language, not a DSL. Agents can read and repair it." })
|
|
235
225
|
] }),
|
|
236
226
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-fact", children: [
|
|
237
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "
|
|
238
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "
|
|
227
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Feedback Loop" }),
|
|
228
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Run, render, inspect, change params, and try the next idea." })
|
|
239
229
|
] }),
|
|
240
230
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-fact", children: [
|
|
241
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "
|
|
242
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "STL, 3MF, STEP
|
|
231
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Manufacturing" }),
|
|
232
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "STL, 3MF, STEP, reports, and print checks." })
|
|
243
233
|
] })
|
|
244
234
|
] })
|
|
245
235
|
] }),
|
|
@@ -305,12 +295,12 @@ function LandingPageProofDriven() {
|
|
|
305
295
|
] })
|
|
306
296
|
] }),
|
|
307
297
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-capability-band", children: [
|
|
298
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "AI CAD agent skills" }),
|
|
299
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Parallel product idea iterations" }),
|
|
300
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Manufacturing feedback and inspection" }),
|
|
308
301
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Live parameter sliders" }),
|
|
309
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Public embeds" }),
|
|
310
302
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Assemblies and connectors" }),
|
|
311
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "
|
|
312
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Part library and threads" }),
|
|
313
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "SDF and solid modeling in one language" })
|
|
303
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "STEP, STL, 3MF, reports" })
|
|
314
304
|
] })
|
|
315
305
|
] }),
|
|
316
306
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-section-break" }),
|
|
@@ -397,9 +387,9 @@ function LandingPageProofDriven() {
|
|
|
397
387
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-section-break" }),
|
|
398
388
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "lpd-cli", children: [
|
|
399
389
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-header", children: [
|
|
400
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "
|
|
401
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "
|
|
402
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "ForgeCAD runs anywhere Node does. Install the CLI,
|
|
390
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Agent Feedback Loop" }),
|
|
391
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "Generate. Validate. Inspect. Export." }),
|
|
392
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "ForgeCAD runs anywhere Node does. Install the CLI, let an AI coding agent edit the model, then use deterministic commands to gather evidence before you manufacture, publish, or fork the next product iteration." })
|
|
403
393
|
] }),
|
|
404
394
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-steps", children: [
|
|
405
395
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-step", children: [
|
|
@@ -476,12 +466,12 @@ function LandingPageProofDriven() {
|
|
|
476
466
|
] })
|
|
477
467
|
] }),
|
|
478
468
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-footer-cta", children: [
|
|
479
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Start
|
|
480
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "
|
|
469
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Start Iterating" }),
|
|
470
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "From product idea to manufacturable CAD loop." }),
|
|
481
471
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
|
|
482
|
-
"Open the editor, write a ",
|
|
472
|
+
"Open the editor, write or generate a ",
|
|
483
473
|
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: ".forge.js" }),
|
|
484
|
-
" file, and take your model from
|
|
474
|
+
" file, and take your model from AI-authored code to validation evidence and manufacturing-ready exports."
|
|
485
475
|
] }),
|
|
486
476
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-actions", children: [
|
|
487
477
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/app", className: "lpd-button lpd-button-primary", children: "Open ForgeCAD" }),
|
|
@@ -494,7 +484,11 @@ function LandingPageProofDriven() {
|
|
|
494
484
|
/* @__PURE__ */ jsxRuntimeExports.jsx(BrandMark, { size: 24, decorative: true }),
|
|
495
485
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "ForgeCAD" })
|
|
496
486
|
] }),
|
|
497
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Code-first parametric CAD for real models." })
|
|
487
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Code-first parametric CAD for real models." }),
|
|
488
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "lpd-footer-copy", children: [
|
|
489
|
+
"© ",
|
|
490
|
+
LEGAL_COPYRIGHT_NOTICE
|
|
491
|
+
] })
|
|
498
492
|
] }),
|
|
499
493
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "lpd-footer-links", "aria-label": "Footer links", children: [
|
|
500
494
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
@@ -515,6 +509,10 @@ function LandingPageProofDriven() {
|
|
|
515
509
|
/* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "https://discord.gg/3jMbZtdtp", target: "_blank", rel: "noopener noreferrer", children: "Discord" }),
|
|
516
510
|
/* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "https://x.com/ForgeCAD", target: "_blank", rel: "noopener noreferrer", children: "ForgeCAD X" }),
|
|
517
511
|
/* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "https://x.com/ruben_kostard", target: "_blank", rel: "noopener noreferrer", children: "Ruben X" })
|
|
512
|
+
] }),
|
|
513
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
514
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "Legal" }),
|
|
515
|
+
LEGAL_LINKS.map((link) => /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: link.path, children: link.label }, link.id))
|
|
518
516
|
] })
|
|
519
517
|
] })
|
|
520
518
|
] })
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
.legal-root .legal-shell {
|
|
2
|
+
max-width: 900px;
|
|
3
|
+
padding-top: 48px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.legal-tabs {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
gap: 10px;
|
|
10
|
+
margin-bottom: 18px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.legal-tabs a {
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
min-height: 38px;
|
|
18
|
+
padding: 8px 14px;
|
|
19
|
+
border: 1px solid var(--line);
|
|
20
|
+
border-radius: 999px;
|
|
21
|
+
color: var(--muted);
|
|
22
|
+
background: rgba(255, 251, 245, 0.64);
|
|
23
|
+
text-decoration: none;
|
|
24
|
+
font-size: 14px;
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.legal-tabs a[aria-current="page"] {
|
|
29
|
+
color: #fff;
|
|
30
|
+
background: var(--ink);
|
|
31
|
+
border-color: var(--ink);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.legal-sheet {
|
|
35
|
+
padding: 38px;
|
|
36
|
+
border: 1px solid var(--line);
|
|
37
|
+
border-radius: 8px;
|
|
38
|
+
background: rgba(255, 251, 245, 0.9);
|
|
39
|
+
box-shadow: var(--shadow);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.legal-header {
|
|
43
|
+
max-width: 720px;
|
|
44
|
+
padding-bottom: 28px;
|
|
45
|
+
border-bottom: 1px solid var(--line);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.legal-header h1 {
|
|
49
|
+
margin: 10px 0 12px;
|
|
50
|
+
color: var(--ink);
|
|
51
|
+
font-size: 42px;
|
|
52
|
+
line-height: 1.05;
|
|
53
|
+
letter-spacing: 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.legal-header p,
|
|
57
|
+
.legal-section p {
|
|
58
|
+
color: var(--muted);
|
|
59
|
+
font-size: 16px;
|
|
60
|
+
line-height: 1.65;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.legal-section {
|
|
64
|
+
padding-top: 26px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.legal-section h2 {
|
|
68
|
+
margin-bottom: 8px;
|
|
69
|
+
color: var(--ink);
|
|
70
|
+
font-size: 20px;
|
|
71
|
+
line-height: 1.2;
|
|
72
|
+
letter-spacing: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.legal-section p + p {
|
|
76
|
+
margin-top: 10px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@media (max-width: 680px) {
|
|
80
|
+
.legal-root .legal-shell {
|
|
81
|
+
padding: 28px 18px 80px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.legal-sheet {
|
|
85
|
+
padding: 24px 20px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.legal-header h1 {
|
|
89
|
+
font-size: 32px;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
|
|
2
|
+
import { B as BrandMark } from "./app-D3kDkggg.js";
|
|
3
|
+
import { a as LEGAL_LINKS, b as LEGAL_DOCUMENTS } from "./legalContent-ZfFGMmi4.js";
|
|
4
|
+
import { u as usePageBackground } from "./landing-proof-driven-DiGqdtWa.js";
|
|
5
|
+
function LegalPage({ documentId }) {
|
|
6
|
+
const document = LEGAL_DOCUMENTS[documentId];
|
|
7
|
+
usePageBackground("#f3ede4");
|
|
8
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-root legal-root", children: [
|
|
9
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-grid-overlay" }),
|
|
10
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-topbar", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-topbar-inner", children: [
|
|
11
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/", className: "lpd-brand", "aria-label": "ForgeCAD home", children: [
|
|
12
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(BrandMark, { size: 38, decorative: true }),
|
|
13
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "ForgeCAD" })
|
|
14
|
+
] }),
|
|
15
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-topnav", children: [
|
|
16
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/docs", className: "lpd-nav-optional", children: "Docs" }),
|
|
17
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/pricing", children: "Pricing" }),
|
|
18
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/app", className: "lpd-topnav-cta", children: "App" })
|
|
19
|
+
] })
|
|
20
|
+
] }) }),
|
|
21
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("main", { className: "lpd-shell legal-shell", children: [
|
|
22
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("nav", { className: "legal-tabs", "aria-label": "Legal pages", children: LEGAL_LINKS.map((link) => /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: link.path, "aria-current": link.id === documentId ? "page" : void 0, children: link.label }, link.id)) }),
|
|
23
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: "legal-sheet", children: [
|
|
24
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("header", { className: "legal-header", children: [
|
|
25
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Legal" }),
|
|
26
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { children: document.title }),
|
|
27
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: document.subtitle })
|
|
28
|
+
] }),
|
|
29
|
+
document.sections.map((section) => /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "legal-section", children: [
|
|
30
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: section.title }),
|
|
31
|
+
section.body.map((paragraph) => /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: paragraph }, paragraph))
|
|
32
|
+
] }, section.title))
|
|
33
|
+
] })
|
|
34
|
+
] })
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
LegalPage
|
|
39
|
+
};
|
|
@@ -203,6 +203,31 @@
|
|
|
203
203
|
line-height: 1.55;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
.pricing-root .pricing-legal-links {
|
|
207
|
+
display: flex;
|
|
208
|
+
flex-wrap: wrap;
|
|
209
|
+
justify-content: center;
|
|
210
|
+
gap: 10px 18px;
|
|
211
|
+
margin-top: 34px;
|
|
212
|
+
color: var(--muted);
|
|
213
|
+
font-size: 13px;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.pricing-root .pricing-legal-links div {
|
|
217
|
+
display: flex;
|
|
218
|
+
gap: 18px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.pricing-root .pricing-legal-links a {
|
|
222
|
+
color: inherit;
|
|
223
|
+
text-decoration: none;
|
|
224
|
+
font-weight: 600;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.pricing-root .pricing-legal-links a:hover {
|
|
228
|
+
color: var(--ink);
|
|
229
|
+
}
|
|
230
|
+
|
|
206
231
|
@media (max-width: 1160px) {
|
|
207
232
|
.pricing-root .pricing-plans {
|
|
208
233
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-
|
|
2
|
-
import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-
|
|
1
|
+
import { f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
|
|
2
|
+
import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-D3kDkggg.js";
|
|
3
|
+
import { L as LEGAL_COPYRIGHT_NOTICE, a as LEGAL_LINKS } from "./legalContent-ZfFGMmi4.js";
|
|
3
4
|
import { C as COMMERCIAL_USE_CASES } from "./copy-DQcpKfiX.js";
|
|
4
|
-
|
|
5
|
+
import { u as usePageBackground } from "./landing-proof-driven-DiGqdtWa.js";
|
|
5
6
|
function checkoutIntentPath(interval) {
|
|
6
7
|
return `/app?checkout=${interval}`;
|
|
7
8
|
}
|
|
@@ -12,7 +13,7 @@ const PRICING_PLANS = [
|
|
|
12
13
|
price: "$20",
|
|
13
14
|
period: "/mo",
|
|
14
15
|
features: [
|
|
15
|
-
"
|
|
16
|
+
"One named commercial user",
|
|
16
17
|
"Commercial coverage for production exports",
|
|
17
18
|
"High-quality Blender renders",
|
|
18
19
|
"GIF & MP4 capture",
|
|
@@ -26,7 +27,6 @@ const PRICING_PLANS = [
|
|
|
26
27
|
name: "Pro Annual",
|
|
27
28
|
price: "$199",
|
|
28
29
|
period: "/yr",
|
|
29
|
-
highlight: "Two months free",
|
|
30
30
|
features: ["Everything in Monthly", "Billed annually ($16.58/mo effective)", "Same self-serve product access"]
|
|
31
31
|
}
|
|
32
32
|
];
|
|
@@ -38,6 +38,7 @@ const ENTERPRISE_PLAN = {
|
|
|
38
38
|
ctaHref: "mailto:contact@forgecad.io?subject=ForgeCAD%20Enterprise",
|
|
39
39
|
features: [
|
|
40
40
|
"Backend and application automation",
|
|
41
|
+
"AI training, evaluation, and RL environment use",
|
|
41
42
|
"Hosted or embedded ForgeCAD workflows",
|
|
42
43
|
"Embed ForgeCAD models on your website",
|
|
43
44
|
"Product-specific integration support",
|
|
@@ -63,9 +64,13 @@ const PRICING_FAQS = [
|
|
|
63
64
|
question: "When should I upgrade?",
|
|
64
65
|
answer: `Use Free for personal exploration, learning, evaluation, and open-source work. Choose Pro when ForgeCAD supports ${COMMERCIAL_USE_CASES} work.`
|
|
65
66
|
},
|
|
67
|
+
{
|
|
68
|
+
question: "Can a team share one Pro subscription?",
|
|
69
|
+
answer: "No. Pro is a named-user subscription for one person using ForgeCAD as a human-operated CAD tool. Each person doing commercial ForgeCAD work needs their own Pro subscription. For shared seats, automation, embedded workflows, or team management, contact Enterprise."
|
|
70
|
+
},
|
|
66
71
|
{
|
|
67
72
|
question: "When do I need Enterprise?",
|
|
68
|
-
answer: "Choose Enterprise when your backend, hosted product, embedded workflow, or application integration calls ForgeCAD automatically on behalf of users, customers, jobs, scripts, agents, or external systems."
|
|
73
|
+
answer: "Choose Enterprise when your backend, hosted product, embedded workflow, AI training, evaluation, benchmark, RL environment, or application integration calls ForgeCAD automatically on behalf of users, customers, jobs, scripts, agents, models, or external systems."
|
|
69
74
|
},
|
|
70
75
|
{
|
|
71
76
|
question: "Are exports free?",
|
|
@@ -90,6 +95,7 @@ function pricingButtonState(args) {
|
|
|
90
95
|
return { disabled: false, label: "Get started" };
|
|
91
96
|
}
|
|
92
97
|
function PricingPage() {
|
|
98
|
+
usePageBackground("#f3ede4");
|
|
93
99
|
const user = useAuthStore((s) => s.user);
|
|
94
100
|
const loading = useAuthStore((s) => s.loading);
|
|
95
101
|
const checkSession = useAuthStore((s) => s.checkSession);
|
|
@@ -123,19 +129,6 @@ function PricingPage() {
|
|
|
123
129
|
cancelled = true;
|
|
124
130
|
};
|
|
125
131
|
}, [user]);
|
|
126
|
-
reactExports.useEffect(() => {
|
|
127
|
-
const html = document.documentElement;
|
|
128
|
-
const body = document.body;
|
|
129
|
-
const prevHtml = html.style.background;
|
|
130
|
-
const prevBody = body.style.background;
|
|
131
|
-
const bg = "#f3ede4";
|
|
132
|
-
html.style.background = bg;
|
|
133
|
-
body.style.background = bg;
|
|
134
|
-
return () => {
|
|
135
|
-
html.style.background = prevHtml;
|
|
136
|
-
body.style.background = prevBody;
|
|
137
|
-
};
|
|
138
|
-
}, []);
|
|
139
132
|
const currentInterval = isPro ? subscription == null ? void 0 : subscription.interval : void 0;
|
|
140
133
|
const planLabel = pricingPlanLabel(isPro, currentInterval);
|
|
141
134
|
async function handleCheckout(interval) {
|
|
@@ -240,6 +233,13 @@ function PricingPage() {
|
|
|
240
233
|
/* @__PURE__ */ jsxRuntimeExports.jsx("summary", { children: faq.question }),
|
|
241
234
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: faq.answer })
|
|
242
235
|
] }, faq.question)) })
|
|
236
|
+
] }),
|
|
237
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("footer", { className: "pricing-legal-links", "aria-label": "Legal links", children: [
|
|
238
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
|
|
239
|
+
"© ",
|
|
240
|
+
LEGAL_COPYRIGHT_NOTICE
|
|
241
|
+
] }),
|
|
242
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: LEGAL_LINKS.map((link) => /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: link.path, children: link.label }, link.id)) })
|
|
243
243
|
] })
|
|
244
244
|
] })
|
|
245
245
|
] });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-
|
|
2
|
-
import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-
|
|
1
|
+
import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
|
|
2
|
+
import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-D3kDkggg.js";
|
|
3
3
|
import { C as COMMERCIAL_USE_CASES, P as PRO_STORAGE_UPGRADE_COPY } from "./copy-DQcpKfiX.js";
|
|
4
4
|
function timeAgo(dateStr) {
|
|
5
5
|
const ms = Date.now() - new Date(dateStr).getTime();
|