forgecad 0.7.0 → 0.8.0
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/README.md +1 -1
- package/dist/assets/{AdminPage-DAu1C1ST.js → AdminPage-D4bocK4E.js} +1 -1
- package/dist/assets/{DocsPage-Gc_BCdqC.js → DocsPage-D3A_g8V3.js} +85 -45
- package/dist/assets/{EditorApp-DG1-oUSV.css → EditorApp-BWYUSpUN.css} +133 -51
- package/dist/assets/EditorApp-Cihhqcsq.js +11692 -0
- package/dist/assets/{EmbedViewer-CEO8XbV8.js → EmbedViewer-kWjKaC_t.js} +1 -1
- package/dist/assets/LandingPageProofDriven-Bg2IUc3l.css +856 -0
- package/dist/assets/LandingPageProofDriven-DXkKlyhI.js +601 -0
- package/dist/assets/{PricingPage-BSrxu6d7.js → PricingPage-BsU5vzEx.js} +1 -1
- package/dist/assets/{SettingsPage-FUCSIRq6.js → SettingsPage-PqvpAKIs.js} +1 -1
- package/dist/assets/{evalWorker-KoR0SNKq.js → evalWorker-C-hzNUMy.js} +2218 -286
- package/dist/assets/{index-wTEK39at.js → index-Pz321YAt.js} +7416 -1481
- package/dist/assets/{index-CyVd1D4D.css → index-ay13WNfa.css} +501 -2
- package/dist/assets/{manifold-B1sGWdYk.js → manifold-BcbjWLIo.js} +3 -3
- package/dist/assets/{manifold-D7o0N50J.js → manifold-DBckbFgx.js} +1 -1
- package/dist/assets/{manifold-G5sBaXzi.js → manifold-O2AAGXyj.js} +1 -1
- package/dist/assets/{reportWorker-DYcRHhv9.js → reportWorker-Dxr-5A7w.js} +2003 -259
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/CLI.md +488 -0
- package/dist/docs-raw/generated/assembly.md +19 -11
- package/dist/docs-raw/generated/concepts.md +1023 -360
- package/dist/docs-raw/generated/core.md +1165 -264
- package/dist/docs-raw/generated/curves.md +168 -1
- package/dist/docs-raw/generated/lib.md +10 -5
- package/dist/docs-raw/generated/output.md +1 -1
- package/dist/docs-raw/generated/sdf.md +208 -0
- package/dist/docs-raw/generated/sketch.md +1281 -329
- package/dist/docs-raw/generated/viewport.md +29 -2
- package/dist/index.html +2 -2
- package/dist/landing/proof-ams-adapter.png +0 -0
- package/dist/landing/proof-bolt-and-nut.png +0 -0
- package/dist/landing/proof-fillet-enclosure.png +0 -0
- package/dist/landing/proof-glasses.png +0 -0
- package/dist/landing/proof-gyroid.png +0 -0
- package/dist/sitemap.xml +6 -6
- package/dist-cli/forgecad.js +3148 -555
- package/dist-cli/forgecad.js.map +1 -1
- package/dist-cli/{solver-FV7TJZGI.js → solver-46FFSK2U.js} +1 -3
- package/dist-cli/{solver-FV7TJZGI.js.map → solver-46FFSK2U.js.map} +1 -1
- package/dist-skill/CONTEXT.md +3700 -1153
- package/dist-skill/SKILL-dev.md +15 -17
- package/dist-skill/SKILL.md +14 -9
- package/dist-skill/docs/API/core/concepts.md +28 -1
- package/dist-skill/docs/CLI.md +488 -0
- package/dist-skill/docs/generated/assembly.md +19 -11
- package/dist-skill/docs/generated/core.md +1165 -264
- package/dist-skill/docs/generated/curves.md +168 -1
- package/dist-skill/docs/generated/lib.md +10 -5
- package/dist-skill/docs/generated/output.md +1 -1
- package/dist-skill/docs/generated/sdf.md +208 -0
- package/dist-skill/docs/generated/sketch.md +1281 -329
- package/dist-skill/docs/generated/viewport.md +29 -2
- package/dist-skill/docs/guides/joint-design.md +78 -0
- package/dist-skill/docs-dev/API/core/concepts.md +28 -1
- package/dist-skill/docs-dev/CLI.md +488 -0
- package/dist-skill/docs-dev/coding.md +1 -1
- package/dist-skill/docs-dev/component-model.md +164 -0
- package/dist-skill/docs-dev/generated/assembly.md +19 -11
- package/dist-skill/docs-dev/generated/core.md +1165 -264
- package/dist-skill/docs-dev/generated/curves.md +168 -1
- package/dist-skill/docs-dev/generated/lib.md +10 -5
- package/dist-skill/docs-dev/generated/output.md +1 -1
- package/dist-skill/docs-dev/generated/sdf.md +208 -0
- package/dist-skill/docs-dev/generated/sketch.md +1281 -329
- package/dist-skill/docs-dev/generated/viewport.md +29 -2
- package/dist-skill/docs-dev/guides/joint-design.md +78 -0
- package/examples/api/attachTo-basics.forge.js +3 -3
- package/examples/api/bill-of-materials.forge.js +9 -9
- package/examples/api/bolt-pattern.forge.js +5 -5
- package/examples/api/boolean-operations.forge.js +2 -2
- package/examples/api/bounding-box-visualizer.forge.js +1 -1
- package/examples/api/clone-duplicate.forge.js +1 -1
- package/examples/api/connector-assembly.forge.js +4 -2
- package/examples/api/connector-basics.forge.js +5 -5
- package/examples/api/constrained-sketch-mechanical.forge.js +4 -4
- package/examples/api/elbow-test.forge.js +3 -3
- package/examples/api/extrude-options.forge.js +4 -4
- package/examples/api/fillet-showcase.forge.js +1 -1
- package/examples/api/gears-tier1.forge.js +5 -5
- package/examples/api/group-test.forge.js +2 -2
- package/examples/api/mesh-import-slats.forge.js +3 -3
- package/examples/api/patterns.forge.js +3 -3
- package/examples/api/pointAlong-orientation.forge.js +2 -2
- package/examples/api/profile-2020-b-slot6.forge.js +4 -4
- package/examples/api/sketch-rounding-strategies.forge.js +1 -1
- package/examples/api/smooth-curve-connections.forge.js +1 -1
- package/examples/api/transition-curves.forge.js +3 -3
- package/examples/constraints/01-fully-constrained-rect.forge.js +2 -2
- package/examples/constraints/02-underconstrained-triangle.forge.js +1 -1
- package/examples/constraints/03-redundant-constraints.forge.js +2 -2
- package/examples/constraints/05-parallel-with-linedistance.forge.js +2 -2
- package/examples/constraints/06-complex-spectrogram.forge.js +1 -1
- package/examples/constraints/07-perpendicular-chain.forge.js +4 -4
- package/examples/constraints/08-symmetric-bracket.forge.js +4 -4
- package/examples/constraints/09-stress-spiral.forge.js +1 -1
- package/examples/constraints/10-stress-honeycomb.forge.js +1 -1
- package/examples/constraints/11-surface-grid.forge.js +2 -2
- package/examples/constraints/12-surface-nested.forge.js +4 -4
- package/examples/constraints/13-surface-complex.forge.js +1 -1
- package/examples/exact-arc-housing.forge.js +12 -0
- package/examples/furniture/adjustable-table.forge.js +13 -13
- package/examples/furniture/bathroom.forge.js +15 -15
- package/examples/furniture/chair.forge.js +12 -12
- package/examples/furniture/picture-frame.forge.js +6 -6
- package/examples/furniture/shoe-rack-doors.forge.js +8 -8
- package/examples/furniture/shoe-rack.forge.js +7 -7
- package/examples/furniture/table-lamp.forge.js +8 -8
- package/examples/gcode/lissajous-vase.forge.js +4 -4
- package/examples/gcode/math-surface.forge.js +3 -3
- package/examples/gcode/parametric-vase.forge.js +4 -4
- package/examples/gcode/spiral-tower.forge.js +4 -4
- package/examples/generative/crystal-growth.forge.js +7 -7
- package/examples/generative/frost-spires.forge.js +6 -6
- package/examples/generative/golden-spiral-tower.forge.js +8 -8
- package/examples/generative/molten-forge.forge.js +6 -6
- package/examples/generative/neon-coral.forge.js +7 -7
- package/examples/mechanical/3d-printer.forge.js +9 -9
- package/examples/mechanical/5-finger-robot-hand.forge.js +4 -4
- package/examples/mechanical/airplane-propeller.forge.js +7 -7
- package/examples/mechanical/bolt-and-nut.forge.js +10 -10
- package/examples/mechanical/door-with-hinges.forge.js +7 -7
- package/examples/mechanical/fillet-enclosure.forge.js +14 -10
- package/examples/mechanical/headphone-hanger-v2.forge.js +9 -9
- package/examples/mechanical/robot_hand.forge.js +10 -10
- package/examples/mechanical/robot_hand_2.forge.js +17 -17
- package/examples/nurbs-surface.forge.js +8 -0
- package/examples/nurbs-tube.forge.js +7 -0
- package/examples/products/bottle.forge.js +7 -7
- package/examples/products/chess-set.forge.js +6 -6
- package/examples/products/classical-piano.forge.js +9 -9
- package/examples/products/clock.forge.js +21 -21
- package/examples/products/cup.forge.js +5 -5
- package/examples/products/iphone.forge.js +12 -12
- package/examples/products/laptop.forge.js +9 -9
- package/examples/products/laser-cut-box.forge.js +6 -6
- package/examples/products/laser-cut-tray.forge.js +6 -6
- package/examples/products/liquid-soap-dispenser.forge.js +5 -5
- package/examples/products/origami-fish.forge.js +6 -6
- package/examples/products/spiderman-cake.forge.js +2 -2
- package/examples/shelf/container.forge.js +5 -5
- package/examples/shelf/shelf-unit.forge.js +6 -6
- package/examples/toolbox/bolted-joint.forge.js +5 -5
- package/package.json +3 -1
- package/dist/assets/EditorApp-D9bJvtf7.js +0 -11338
- package/dist/assets/LandingPage-CdCuEOdC.js +0 -451
- package/dist-cli/chunk-PZ5AY32C.js +0 -10
- package/dist-cli/chunk-PZ5AY32C.js.map +0 -1
- package/dist-skill/docs/CLI/export.md +0 -91
- package/dist-skill/docs/CLI/projects.md +0 -107
- package/dist-skill/docs/CLI/studio_publishing.md +0 -52
- package/dist-skill/docs/CLI/validation.md +0 -66
- package/dist-skill/docs-dev/API/core/sdf-advanced.md +0 -92
- package/dist-skill/docs-dev/API/core/sdf-primitives.md +0 -58
- package/dist-skill/docs-dev/API/core/sdf-workflow.md +0 -42
- package/dist-skill/docs-dev/CLI/export.md +0 -91
- package/dist-skill/docs-dev/CLI/projects.md +0 -107
- package/dist-skill/docs-dev/CLI/studio_publishing.md +0 -52
- package/dist-skill/docs-dev/CLI/validation.md +0 -66
|
@@ -1,451 +0,0 @@
|
|
|
1
|
-
import { j as jsxRuntimeExports, L as Link } from "./vendor-react-CG3i_wp0.js";
|
|
2
|
-
import { u as useFeatureFlag } from "./index-wTEK39at.js";
|
|
3
|
-
function HeroSection() {
|
|
4
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5
|
-
"section",
|
|
6
|
-
{
|
|
7
|
-
style: {
|
|
8
|
-
minHeight: "80vh",
|
|
9
|
-
display: "flex",
|
|
10
|
-
flexDirection: "column",
|
|
11
|
-
alignItems: "center",
|
|
12
|
-
justifyContent: "center",
|
|
13
|
-
textAlign: "center",
|
|
14
|
-
padding: "80px 24px 60px",
|
|
15
|
-
position: "relative"
|
|
16
|
-
},
|
|
17
|
-
children: [
|
|
18
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { fontSize: 64, marginBottom: 24 }, children: "⚒" }),
|
|
19
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20
|
-
"h1",
|
|
21
|
-
{
|
|
22
|
-
style: {
|
|
23
|
-
fontSize: "clamp(36px, 6vw, 64px)",
|
|
24
|
-
fontWeight: 700,
|
|
25
|
-
color: "var(--fc-text)",
|
|
26
|
-
margin: "0 0 16px",
|
|
27
|
-
lineHeight: 1.1,
|
|
28
|
-
letterSpacing: "-0.02em"
|
|
29
|
-
},
|
|
30
|
-
children: "Code-First Parametric CAD"
|
|
31
|
-
}
|
|
32
|
-
),
|
|
33
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
34
|
-
"p",
|
|
35
|
-
{
|
|
36
|
-
style: {
|
|
37
|
-
fontSize: "clamp(16px, 2.5vw, 22px)",
|
|
38
|
-
color: "var(--fc-textMuted)",
|
|
39
|
-
maxWidth: 600,
|
|
40
|
-
margin: "0 0 40px",
|
|
41
|
-
lineHeight: 1.5
|
|
42
|
-
},
|
|
43
|
-
children: "Design mechanical parts with JavaScript. Parametric sliders, constraint-based sketches, and 12+ export formats — from STL to STEP to G-code."
|
|
44
|
-
}
|
|
45
|
-
),
|
|
46
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", gap: 12, flexWrap: "wrap", justifyContent: "center" }, children: [
|
|
47
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
48
|
-
Link,
|
|
49
|
-
{
|
|
50
|
-
to: "/app",
|
|
51
|
-
style: {
|
|
52
|
-
padding: "14px 32px",
|
|
53
|
-
fontSize: 16,
|
|
54
|
-
fontWeight: 600,
|
|
55
|
-
background: "var(--fc-accent)",
|
|
56
|
-
color: "var(--fc-accentText)",
|
|
57
|
-
borderRadius: 8,
|
|
58
|
-
textDecoration: "none",
|
|
59
|
-
border: "none",
|
|
60
|
-
cursor: "pointer"
|
|
61
|
-
},
|
|
62
|
-
children: "Start Building"
|
|
63
|
-
}
|
|
64
|
-
),
|
|
65
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
66
|
-
Link,
|
|
67
|
-
{
|
|
68
|
-
to: "/docs",
|
|
69
|
-
style: {
|
|
70
|
-
padding: "14px 32px",
|
|
71
|
-
fontSize: 16,
|
|
72
|
-
fontWeight: 600,
|
|
73
|
-
background: "transparent",
|
|
74
|
-
color: "var(--fc-text)",
|
|
75
|
-
borderRadius: 8,
|
|
76
|
-
textDecoration: "none",
|
|
77
|
-
border: "1px solid var(--fc-border)",
|
|
78
|
-
cursor: "pointer"
|
|
79
|
-
},
|
|
80
|
-
children: "Read the Docs"
|
|
81
|
-
}
|
|
82
|
-
)
|
|
83
|
-
] })
|
|
84
|
-
]
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
function FeatureCard({ title, description, code }) {
|
|
89
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
90
|
-
"div",
|
|
91
|
-
{
|
|
92
|
-
style: {
|
|
93
|
-
background: "var(--fc-bgSurface)",
|
|
94
|
-
border: "1px solid var(--fc-border)",
|
|
95
|
-
borderRadius: 12,
|
|
96
|
-
padding: 28,
|
|
97
|
-
flex: "1 1 300px",
|
|
98
|
-
maxWidth: 400
|
|
99
|
-
},
|
|
100
|
-
children: [
|
|
101
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: { margin: "0 0 8px", fontSize: 18, fontWeight: 600, color: "var(--fc-text)" }, children: title }),
|
|
102
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: { margin: "0 0 16px", fontSize: 14, color: "var(--fc-textMuted)", lineHeight: 1.5 }, children: description }),
|
|
103
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
104
|
-
"pre",
|
|
105
|
-
{
|
|
106
|
-
style: {
|
|
107
|
-
background: "var(--fc-bg)",
|
|
108
|
-
border: "1px solid var(--fc-border)",
|
|
109
|
-
borderRadius: 8,
|
|
110
|
-
padding: 16,
|
|
111
|
-
fontSize: 13,
|
|
112
|
-
fontFamily: "var(--fc-mono, monospace)",
|
|
113
|
-
color: "var(--fc-text)",
|
|
114
|
-
overflow: "auto",
|
|
115
|
-
margin: 0,
|
|
116
|
-
lineHeight: 1.5
|
|
117
|
-
},
|
|
118
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: code })
|
|
119
|
-
}
|
|
120
|
-
)
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
function FeaturesSection() {
|
|
126
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
127
|
-
"section",
|
|
128
|
-
{
|
|
129
|
-
style: {
|
|
130
|
-
padding: "80px 24px",
|
|
131
|
-
maxWidth: 1200,
|
|
132
|
-
margin: "0 auto"
|
|
133
|
-
},
|
|
134
|
-
children: [
|
|
135
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
136
|
-
"h2",
|
|
137
|
-
{
|
|
138
|
-
style: {
|
|
139
|
-
textAlign: "center",
|
|
140
|
-
fontSize: 32,
|
|
141
|
-
fontWeight: 700,
|
|
142
|
-
color: "var(--fc-text)",
|
|
143
|
-
margin: "0 0 48px"
|
|
144
|
-
},
|
|
145
|
-
children: "Why ForgeCAD?"
|
|
146
|
-
}
|
|
147
|
-
),
|
|
148
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
149
|
-
"div",
|
|
150
|
-
{
|
|
151
|
-
style: {
|
|
152
|
-
display: "flex",
|
|
153
|
-
gap: 24,
|
|
154
|
-
flexWrap: "wrap",
|
|
155
|
-
justifyContent: "center"
|
|
156
|
-
},
|
|
157
|
-
children: [
|
|
158
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
159
|
-
FeatureCard,
|
|
160
|
-
{
|
|
161
|
-
title: "Parametric by Default",
|
|
162
|
-
description: "Every dimension becomes a live slider. Change one value and the entire model updates instantly.",
|
|
163
|
-
code: `const width = param('width', 50, { min: 10, max: 200 });
|
|
164
|
-
const depth = param('depth', 30, { min: 10, max: 100 });
|
|
165
|
-
|
|
166
|
-
const plate = box(width, depth, 5)
|
|
167
|
-
.fillet(3);`
|
|
168
|
-
}
|
|
169
|
-
),
|
|
170
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
171
|
-
FeatureCard,
|
|
172
|
-
{
|
|
173
|
-
title: "AI-Ready Design",
|
|
174
|
-
description: "Models are plain JavaScript — LLMs can read, write, and modify them. No binary formats, no vendor lock-in.",
|
|
175
|
-
code: `// Claude or GPT can write this:
|
|
176
|
-
const bolt = lib.bolt('M8', 30);
|
|
177
|
-
const nut = lib.nut('M8');
|
|
178
|
-
|
|
179
|
-
return assembly()
|
|
180
|
-
.add('bolt', bolt)
|
|
181
|
-
.add('nut', nut, { z: 25 });`
|
|
182
|
-
}
|
|
183
|
-
),
|
|
184
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
185
|
-
FeatureCard,
|
|
186
|
-
{
|
|
187
|
-
title: "Export Anywhere",
|
|
188
|
-
description: "STL for 3D printing, STEP for professional CAD, G-code for CNC, URDF for robotics. One model, every format.",
|
|
189
|
-
code: `// From the CLI:
|
|
190
|
-
// forgecad export stl bracket.forge.js
|
|
191
|
-
// forgecad export step bracket.forge.js
|
|
192
|
-
// forgecad export gcode bracket.forge.js
|
|
193
|
-
// forgecad export urdf robot.forge.js`
|
|
194
|
-
}
|
|
195
|
-
)
|
|
196
|
-
]
|
|
197
|
-
}
|
|
198
|
-
)
|
|
199
|
-
]
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
function CapabilitiesSection() {
|
|
204
|
-
const capabilities = [
|
|
205
|
-
{ label: "Constraint-based sketches", detail: "18 constraint types with algebraic solver" },
|
|
206
|
-
{ label: "Assembly kinematics", detail: "Revolute, prismatic, and gear joints" },
|
|
207
|
-
{ label: "Named faces & edges", detail: "Topology tracking through boolean operations" },
|
|
208
|
-
{ label: "SDF / generative", detail: "Gyroid, voronoi, and custom distance fields" },
|
|
209
|
-
{ label: "Multi-file projects", detail: "require() parts, organize with folders" },
|
|
210
|
-
{ label: "Live 3D viewport", detail: "Edit code, see changes instantly" },
|
|
211
|
-
{ label: "Measurement tools", detail: "Distances, angles, areas in the viewport" },
|
|
212
|
-
{ label: "Sheet metal", detail: "Bends, flat patterns, and K-factor" }
|
|
213
|
-
];
|
|
214
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
215
|
-
"section",
|
|
216
|
-
{
|
|
217
|
-
style: {
|
|
218
|
-
padding: "80px 24px",
|
|
219
|
-
background: "var(--fc-bgSurface)",
|
|
220
|
-
borderTop: "1px solid var(--fc-border)",
|
|
221
|
-
borderBottom: "1px solid var(--fc-border)"
|
|
222
|
-
},
|
|
223
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { maxWidth: 900, margin: "0 auto" }, children: [
|
|
224
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
225
|
-
"h2",
|
|
226
|
-
{
|
|
227
|
-
style: {
|
|
228
|
-
textAlign: "center",
|
|
229
|
-
fontSize: 32,
|
|
230
|
-
fontWeight: 700,
|
|
231
|
-
color: "var(--fc-text)",
|
|
232
|
-
margin: "0 0 48px"
|
|
233
|
-
},
|
|
234
|
-
children: "Everything You Need"
|
|
235
|
-
}
|
|
236
|
-
),
|
|
237
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
238
|
-
"div",
|
|
239
|
-
{
|
|
240
|
-
style: {
|
|
241
|
-
display: "grid",
|
|
242
|
-
gridTemplateColumns: "repeat(auto-fit, minmax(280px, 1fr))",
|
|
243
|
-
gap: 20
|
|
244
|
-
},
|
|
245
|
-
children: capabilities.map((cap) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
246
|
-
"div",
|
|
247
|
-
{
|
|
248
|
-
style: {
|
|
249
|
-
padding: "16px 20px",
|
|
250
|
-
background: "var(--fc-bg)",
|
|
251
|
-
borderRadius: 8,
|
|
252
|
-
border: "1px solid var(--fc-border)"
|
|
253
|
-
},
|
|
254
|
-
children: [
|
|
255
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { fontSize: 15, fontWeight: 600, color: "var(--fc-text)", marginBottom: 4 }, children: cap.label }),
|
|
256
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { fontSize: 13, color: "var(--fc-textMuted)" }, children: cap.detail })
|
|
257
|
-
]
|
|
258
|
-
},
|
|
259
|
-
cap.label
|
|
260
|
-
))
|
|
261
|
-
}
|
|
262
|
-
)
|
|
263
|
-
] })
|
|
264
|
-
}
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
function CTASection() {
|
|
268
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
269
|
-
"section",
|
|
270
|
-
{
|
|
271
|
-
style: {
|
|
272
|
-
padding: "80px 24px",
|
|
273
|
-
textAlign: "center"
|
|
274
|
-
},
|
|
275
|
-
children: [
|
|
276
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
277
|
-
"h2",
|
|
278
|
-
{
|
|
279
|
-
style: {
|
|
280
|
-
fontSize: 32,
|
|
281
|
-
fontWeight: 700,
|
|
282
|
-
color: "var(--fc-text)",
|
|
283
|
-
margin: "0 0 16px"
|
|
284
|
-
},
|
|
285
|
-
children: "Ready to build?"
|
|
286
|
-
}
|
|
287
|
-
),
|
|
288
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
289
|
-
"p",
|
|
290
|
-
{
|
|
291
|
-
style: {
|
|
292
|
-
fontSize: 18,
|
|
293
|
-
color: "var(--fc-textMuted)",
|
|
294
|
-
margin: "0 0 32px"
|
|
295
|
-
},
|
|
296
|
-
children: "Start designing in your browser. No install required."
|
|
297
|
-
}
|
|
298
|
-
),
|
|
299
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
300
|
-
Link,
|
|
301
|
-
{
|
|
302
|
-
to: "/app",
|
|
303
|
-
style: {
|
|
304
|
-
padding: "16px 40px",
|
|
305
|
-
fontSize: 18,
|
|
306
|
-
fontWeight: 600,
|
|
307
|
-
background: "var(--fc-accent)",
|
|
308
|
-
color: "var(--fc-accentText)",
|
|
309
|
-
borderRadius: 8,
|
|
310
|
-
textDecoration: "none",
|
|
311
|
-
border: "none",
|
|
312
|
-
cursor: "pointer",
|
|
313
|
-
display: "inline-block"
|
|
314
|
-
},
|
|
315
|
-
children: "Open ForgeCAD"
|
|
316
|
-
}
|
|
317
|
-
)
|
|
318
|
-
]
|
|
319
|
-
}
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
function SiteNav() {
|
|
323
|
-
const showPricing = useFeatureFlag("pricing");
|
|
324
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
325
|
-
"nav",
|
|
326
|
-
{
|
|
327
|
-
style: {
|
|
328
|
-
position: "fixed",
|
|
329
|
-
top: 0,
|
|
330
|
-
left: 0,
|
|
331
|
-
right: 0,
|
|
332
|
-
height: 56,
|
|
333
|
-
display: "flex",
|
|
334
|
-
alignItems: "center",
|
|
335
|
-
justifyContent: "space-between",
|
|
336
|
-
padding: "0 24px",
|
|
337
|
-
background: "var(--fc-bg)",
|
|
338
|
-
borderBottom: "1px solid var(--fc-border)",
|
|
339
|
-
zIndex: 100,
|
|
340
|
-
backdropFilter: "blur(8px)"
|
|
341
|
-
},
|
|
342
|
-
children: [
|
|
343
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
344
|
-
Link,
|
|
345
|
-
{
|
|
346
|
-
to: "/",
|
|
347
|
-
style: {
|
|
348
|
-
display: "flex",
|
|
349
|
-
alignItems: "center",
|
|
350
|
-
gap: 8,
|
|
351
|
-
textDecoration: "none",
|
|
352
|
-
color: "var(--fc-text)"
|
|
353
|
-
},
|
|
354
|
-
children: [
|
|
355
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: 20 }, children: "⚒" }),
|
|
356
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: 16, fontWeight: 700, color: "var(--fc-accent)" }, children: "ForgeCAD" })
|
|
357
|
-
]
|
|
358
|
-
}
|
|
359
|
-
),
|
|
360
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", alignItems: "center", gap: 24 }, children: [
|
|
361
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/docs", style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 14 }, children: "Docs" }),
|
|
362
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/blog", style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 14 }, children: "Blog" }),
|
|
363
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/examples", style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 14 }, children: "Examples" }),
|
|
364
|
-
showPricing && /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/pricing", style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 14 }, children: "Pricing" }),
|
|
365
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
366
|
-
Link,
|
|
367
|
-
{
|
|
368
|
-
to: "/app",
|
|
369
|
-
style: {
|
|
370
|
-
padding: "6px 16px",
|
|
371
|
-
fontSize: 14,
|
|
372
|
-
fontWeight: 600,
|
|
373
|
-
background: "var(--fc-accent)",
|
|
374
|
-
color: "var(--fc-accentText)",
|
|
375
|
-
borderRadius: 6,
|
|
376
|
-
textDecoration: "none"
|
|
377
|
-
},
|
|
378
|
-
children: "Open App"
|
|
379
|
-
}
|
|
380
|
-
)
|
|
381
|
-
] })
|
|
382
|
-
]
|
|
383
|
-
}
|
|
384
|
-
);
|
|
385
|
-
}
|
|
386
|
-
function Footer() {
|
|
387
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
388
|
-
"footer",
|
|
389
|
-
{
|
|
390
|
-
style: {
|
|
391
|
-
padding: "40px 24px",
|
|
392
|
-
borderTop: "1px solid var(--fc-border)",
|
|
393
|
-
textAlign: "center"
|
|
394
|
-
},
|
|
395
|
-
children: [
|
|
396
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
397
|
-
"div",
|
|
398
|
-
{
|
|
399
|
-
style: {
|
|
400
|
-
display: "flex",
|
|
401
|
-
gap: 24,
|
|
402
|
-
justifyContent: "center",
|
|
403
|
-
marginBottom: 16,
|
|
404
|
-
flexWrap: "wrap"
|
|
405
|
-
},
|
|
406
|
-
children: [
|
|
407
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/docs", style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 13 }, children: "Documentation" }),
|
|
408
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/blog", style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 13 }, children: "Blog" }),
|
|
409
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
410
|
-
"a",
|
|
411
|
-
{
|
|
412
|
-
href: "https://github.com/KoStard/ForgeCAD",
|
|
413
|
-
target: "_blank",
|
|
414
|
-
rel: "noopener noreferrer",
|
|
415
|
-
style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 13 },
|
|
416
|
-
children: "GitHub"
|
|
417
|
-
}
|
|
418
|
-
),
|
|
419
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
420
|
-
"a",
|
|
421
|
-
{
|
|
422
|
-
href: "https://github.com/KoStard/ForgeCAD/issues/new",
|
|
423
|
-
target: "_blank",
|
|
424
|
-
rel: "noopener noreferrer",
|
|
425
|
-
style: { color: "var(--fc-textMuted)", textDecoration: "none", fontSize: 13 },
|
|
426
|
-
children: "Report Issue"
|
|
427
|
-
}
|
|
428
|
-
)
|
|
429
|
-
]
|
|
430
|
-
}
|
|
431
|
-
),
|
|
432
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: { color: "var(--fc-textDim)", fontSize: 12, margin: 0 }, children: "ForgeCAD" })
|
|
433
|
-
]
|
|
434
|
-
}
|
|
435
|
-
);
|
|
436
|
-
}
|
|
437
|
-
function LandingPage() {
|
|
438
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { minHeight: "100vh", display: "flex", flexDirection: "column", overflow: "auto" }, children: [
|
|
439
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(SiteNav, {}),
|
|
440
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("main", { style: { flex: "1 0 auto", paddingTop: 56 }, children: [
|
|
441
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(HeroSection, {}),
|
|
442
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(FeaturesSection, {}),
|
|
443
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CapabilitiesSection, {}),
|
|
444
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CTASection, {})
|
|
445
|
-
] }),
|
|
446
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Footer, {})
|
|
447
|
-
] });
|
|
448
|
-
}
|
|
449
|
-
export {
|
|
450
|
-
LandingPage
|
|
451
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
skill-group: cli
|
|
3
|
-
skill-order: 3
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# ForgeCAD CLI: Export Commands
|
|
7
|
-
|
|
8
|
-
## SVG Export
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
forgecad export svg examples/constraints/01-fully-constrained-rect.forge.js [output.svg]
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
Pure Node — no browser needed. Runs the sketch script through the forge engine and converts polygons to SVG paths.
|
|
15
|
-
|
|
16
|
-
## STEP / BREP Export (exact subset, CadQuery)
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
forgecad export step examples/api/brep-exportable.forge.js [--output out/demo.step] [--python 3.11] [--uv /path/to/uv]
|
|
20
|
-
forgecad export brep examples/api/brep-exportable.forge.js
|
|
21
|
-
forgecad export step examples/chess-set.forge.js --allow-faceted
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
`uv`-first: provisions CadQuery automatically. Exact-subset only by default — fails with a reason rather than silently exporting degraded geometry. With `--allow-faceted`, unsupported mesh solids export as faceted OCCT solids (tessellation-driven, not exact replay).
|
|
25
|
-
|
|
26
|
-
The maintained feature matrix: `docs/permanent/API/output/brep-export.md`.
|
|
27
|
-
|
|
28
|
-
## G-code Toolpath Export
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
forgecad export gcode examples/gcode/parametric-vase.forge.js [--output out/vase.gcode]
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
The script must return a `GCodeBuilder` (from the `gcode()` factory). This is a toolpath scripting API, not a slicer — you define print movements in code. See `docs/permanent/API/output/gcode.md` for the full API.
|
|
35
|
-
|
|
36
|
-
## SDF Robot Export (Gazebo)
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
forgecad export sdf examples/api/sdf-rover-demo.forge.js [--output out/forge_scout]
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Writes a Gazebo-friendly package: `model.sdf`, `model.config`, `meshes/*.stl`, optional world file. Script must call `robotExport({...})` with an `assembly(...)` graph.
|
|
43
|
-
|
|
44
|
-
Launch flow (macOS — use split `-s`/`-g`):
|
|
45
|
-
```bash
|
|
46
|
-
export GZ_SIM_RESOURCE_PATH="$PWD/out/forge_scout/models${GZ_SIM_RESOURCE_PATH:+:$GZ_SIM_RESOURCE_PATH}"
|
|
47
|
-
gz sim -s -r out/forge_scout/worlds/forge_scout_trial.sdf
|
|
48
|
-
gz sim -g out/forge_scout/worlds/forge_scout_trial.sdf
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## URDF Export
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
forgecad export urdf examples/api/sdf-rover-demo.forge.js
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## PNG Render (requires Chrome/Puppeteer)
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
forgecad render examples/cup.forge.js [output.png]
|
|
61
|
-
forgecad render examples/cup.forge.js out/scene.png --scene '<json from viewport>'
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Options: `--angles <front,side,top,iso>`, `--size <px>`, `--port <n>`, `--camera <spec>`, `--scene <json>`, `--background <color>`, `--chrome-path <path>`.
|
|
65
|
-
|
|
66
|
-
## Animated Capture (GIF or MP4, requires Chrome)
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
forgecad capture gif examples/cup.forge.js [output.gif]
|
|
70
|
-
forgecad capture mp4 examples/cup.forge.js [output.mp4]
|
|
71
|
-
forgecad capture mp4 examples/api/runtime-joints-view.forge.js out/step.mp4 --capture animation --animation Step
|
|
72
|
-
forgecad capture gif examples/3d-printer.forge.js out/section.gif --cut-plane "Front Section"
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
`--list` prints available animation clips and cut planes. Uses `ffmpeg` when available (better GIF colors, H.264 MP4); falls back to pure-JS GIF encoder.
|
|
76
|
-
|
|
77
|
-
Key options: `--capture <orbit|animation>`, `--animation <name>`, `--cut-plane <name>`, `--camera <spec>`, `--scene <json>`, `--size <px>`, `--fps <n>`, `--frames-per-turn <n>`, `--quality <default|live|high>`.
|
|
78
|
-
|
|
79
|
-
Use `Copy CLI --scene` from the View Panel to grab the current viewport framing and paste into `render` or `capture`.
|
|
80
|
-
|
|
81
|
-
## PDF Report
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
forgecad export report examples/cup.forge.js [output.pdf] [--dim-angle-tol 18]
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Generates a searchable PDF with BOM page, combined model page, and per-component pages. Dimensions included per view when their axis aligns with that view's projection plane (within `--dim-angle-tol` degrees, default 12).
|
|
88
|
-
|
|
89
|
-
## STL Export
|
|
90
|
-
|
|
91
|
-
Available in the browser UI via the Export panel (binary STL).
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
skill-group: cli
|
|
3
|
-
skill-order: 1
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# ForgeCAD CLI: Projects & Setup
|
|
7
|
-
|
|
8
|
-
## Install
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
npm install -g forgecad
|
|
12
|
-
# Developers working on ForgeCAD itself:
|
|
13
|
-
npm install && npm link
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## When to use what
|
|
17
|
-
|
|
18
|
-
| Context | Use |
|
|
19
|
-
|---------|-----|
|
|
20
|
-
| Using ForgeCAD as a tool | `forgecad *` commands |
|
|
21
|
-
| Developing ForgeCAD itself | `npm run dev` / `npm run build` |
|
|
22
|
-
| CI / publishing | `npm run build && npm run test:full` |
|
|
23
|
-
|
|
24
|
-
## Dev vs production server
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
forgecad dev [path] # Vite dev server, live reload
|
|
28
|
-
forgecad studio [path] # Static server for production build (requires dist/)
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Both accept `--blank`, `--port <n>`, `--host`, `--open`, `--strict-port`.
|
|
32
|
-
|
|
33
|
-
## Licensing
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
forgecad license # Show license status
|
|
37
|
-
forgecad license activate <key> # Activate a Pro license key
|
|
38
|
-
forgecad license deactivate # Remove license
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
| Tier | Included |
|
|
42
|
-
|------|----------|
|
|
43
|
-
| Free | dev, studio, run, render, export stl/3mf/svg, all checks, debug |
|
|
44
|
-
| Pro | export step/brep, render-hq, capture gif/mp4, gcode, report, cutting-layout, sdf, urdf, sketch-pdf |
|
|
45
|
-
|
|
46
|
-
## Authentication
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
forgecad login # Interactive login
|
|
50
|
-
forgecad login --server http://localhost:5174
|
|
51
|
-
forgecad logout
|
|
52
|
-
forgecad whoami # Show user, server, and license status
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Credentials stored in `~/.forgecad/auth.json`.
|
|
56
|
-
|
|
57
|
-
## Project Management
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
forgecad project init "My Project" # Create on server + link current directory
|
|
61
|
-
forgecad project clone my-project # Download into ./my-project/
|
|
62
|
-
forgecad project push [--force] # Upload local changes
|
|
63
|
-
forgecad project pull [--force] # Download remote changes
|
|
64
|
-
forgecad project status # Show local vs remote diff
|
|
65
|
-
forgecad project list
|
|
66
|
-
forgecad project info
|
|
67
|
-
forgecad project rename "New Name"
|
|
68
|
-
forgecad project set-visibility public # private|shared|public
|
|
69
|
-
forgecad project delete [--force]
|
|
70
|
-
forgecad project open
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Projects are linked to remote via `forgecad.json`.
|
|
74
|
-
|
|
75
|
-
## File Management (Remote)
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
forgecad file list [path]
|
|
79
|
-
forgecad file read <path>
|
|
80
|
-
forgecad file save <path> # Upload local file
|
|
81
|
-
forgecad file save <path> --content "code here"
|
|
82
|
-
cat model.forge.js | forgecad file save model.forge.js --stdin
|
|
83
|
-
forgecad file delete <path> [--force]
|
|
84
|
-
forgecad file rename <old> <new>
|
|
85
|
-
forgecad file mkdir <path>
|
|
86
|
-
forgecad file copy <source-slug> <path> [--dest <dest-path>]
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Requires the current directory to have `forgecad.json`.
|
|
90
|
-
|
|
91
|
-
## Member Management
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
forgecad project members
|
|
95
|
-
forgecad project add-member alice@example.com # editor by default
|
|
96
|
-
forgecad project add-member bob@example.com --role viewer
|
|
97
|
-
forgecad project remove-member alice@example.com
|
|
98
|
-
forgecad project set-role bob@example.com editor
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Roles: **owner** (full control), **editor** (read/write), **viewer** (read-only).
|
|
102
|
-
|
|
103
|
-
## Shell Autocomplete
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
forgecad completion bash # or zsh / fish
|
|
107
|
-
```
|