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.
Files changed (158) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/{AdminPage-DAu1C1ST.js → AdminPage-D4bocK4E.js} +1 -1
  3. package/dist/assets/{DocsPage-Gc_BCdqC.js → DocsPage-D3A_g8V3.js} +85 -45
  4. package/dist/assets/{EditorApp-DG1-oUSV.css → EditorApp-BWYUSpUN.css} +133 -51
  5. package/dist/assets/EditorApp-Cihhqcsq.js +11692 -0
  6. package/dist/assets/{EmbedViewer-CEO8XbV8.js → EmbedViewer-kWjKaC_t.js} +1 -1
  7. package/dist/assets/LandingPageProofDriven-Bg2IUc3l.css +856 -0
  8. package/dist/assets/LandingPageProofDriven-DXkKlyhI.js +601 -0
  9. package/dist/assets/{PricingPage-BSrxu6d7.js → PricingPage-BsU5vzEx.js} +1 -1
  10. package/dist/assets/{SettingsPage-FUCSIRq6.js → SettingsPage-PqvpAKIs.js} +1 -1
  11. package/dist/assets/{evalWorker-KoR0SNKq.js → evalWorker-C-hzNUMy.js} +2218 -286
  12. package/dist/assets/{index-wTEK39at.js → index-Pz321YAt.js} +7416 -1481
  13. package/dist/assets/{index-CyVd1D4D.css → index-ay13WNfa.css} +501 -2
  14. package/dist/assets/{manifold-B1sGWdYk.js → manifold-BcbjWLIo.js} +3 -3
  15. package/dist/assets/{manifold-D7o0N50J.js → manifold-DBckbFgx.js} +1 -1
  16. package/dist/assets/{manifold-G5sBaXzi.js → manifold-O2AAGXyj.js} +1 -1
  17. package/dist/assets/{reportWorker-DYcRHhv9.js → reportWorker-Dxr-5A7w.js} +2003 -259
  18. package/dist/docs/index.html +2 -2
  19. package/dist/docs-raw/CLI.md +488 -0
  20. package/dist/docs-raw/generated/assembly.md +19 -11
  21. package/dist/docs-raw/generated/concepts.md +1023 -360
  22. package/dist/docs-raw/generated/core.md +1165 -264
  23. package/dist/docs-raw/generated/curves.md +168 -1
  24. package/dist/docs-raw/generated/lib.md +10 -5
  25. package/dist/docs-raw/generated/output.md +1 -1
  26. package/dist/docs-raw/generated/sdf.md +208 -0
  27. package/dist/docs-raw/generated/sketch.md +1281 -329
  28. package/dist/docs-raw/generated/viewport.md +29 -2
  29. package/dist/index.html +2 -2
  30. package/dist/landing/proof-ams-adapter.png +0 -0
  31. package/dist/landing/proof-bolt-and-nut.png +0 -0
  32. package/dist/landing/proof-fillet-enclosure.png +0 -0
  33. package/dist/landing/proof-glasses.png +0 -0
  34. package/dist/landing/proof-gyroid.png +0 -0
  35. package/dist/sitemap.xml +6 -6
  36. package/dist-cli/forgecad.js +3148 -555
  37. package/dist-cli/forgecad.js.map +1 -1
  38. package/dist-cli/{solver-FV7TJZGI.js → solver-46FFSK2U.js} +1 -3
  39. package/dist-cli/{solver-FV7TJZGI.js.map → solver-46FFSK2U.js.map} +1 -1
  40. package/dist-skill/CONTEXT.md +3700 -1153
  41. package/dist-skill/SKILL-dev.md +15 -17
  42. package/dist-skill/SKILL.md +14 -9
  43. package/dist-skill/docs/API/core/concepts.md +28 -1
  44. package/dist-skill/docs/CLI.md +488 -0
  45. package/dist-skill/docs/generated/assembly.md +19 -11
  46. package/dist-skill/docs/generated/core.md +1165 -264
  47. package/dist-skill/docs/generated/curves.md +168 -1
  48. package/dist-skill/docs/generated/lib.md +10 -5
  49. package/dist-skill/docs/generated/output.md +1 -1
  50. package/dist-skill/docs/generated/sdf.md +208 -0
  51. package/dist-skill/docs/generated/sketch.md +1281 -329
  52. package/dist-skill/docs/generated/viewport.md +29 -2
  53. package/dist-skill/docs/guides/joint-design.md +78 -0
  54. package/dist-skill/docs-dev/API/core/concepts.md +28 -1
  55. package/dist-skill/docs-dev/CLI.md +488 -0
  56. package/dist-skill/docs-dev/coding.md +1 -1
  57. package/dist-skill/docs-dev/component-model.md +164 -0
  58. package/dist-skill/docs-dev/generated/assembly.md +19 -11
  59. package/dist-skill/docs-dev/generated/core.md +1165 -264
  60. package/dist-skill/docs-dev/generated/curves.md +168 -1
  61. package/dist-skill/docs-dev/generated/lib.md +10 -5
  62. package/dist-skill/docs-dev/generated/output.md +1 -1
  63. package/dist-skill/docs-dev/generated/sdf.md +208 -0
  64. package/dist-skill/docs-dev/generated/sketch.md +1281 -329
  65. package/dist-skill/docs-dev/generated/viewport.md +29 -2
  66. package/dist-skill/docs-dev/guides/joint-design.md +78 -0
  67. package/examples/api/attachTo-basics.forge.js +3 -3
  68. package/examples/api/bill-of-materials.forge.js +9 -9
  69. package/examples/api/bolt-pattern.forge.js +5 -5
  70. package/examples/api/boolean-operations.forge.js +2 -2
  71. package/examples/api/bounding-box-visualizer.forge.js +1 -1
  72. package/examples/api/clone-duplicate.forge.js +1 -1
  73. package/examples/api/connector-assembly.forge.js +4 -2
  74. package/examples/api/connector-basics.forge.js +5 -5
  75. package/examples/api/constrained-sketch-mechanical.forge.js +4 -4
  76. package/examples/api/elbow-test.forge.js +3 -3
  77. package/examples/api/extrude-options.forge.js +4 -4
  78. package/examples/api/fillet-showcase.forge.js +1 -1
  79. package/examples/api/gears-tier1.forge.js +5 -5
  80. package/examples/api/group-test.forge.js +2 -2
  81. package/examples/api/mesh-import-slats.forge.js +3 -3
  82. package/examples/api/patterns.forge.js +3 -3
  83. package/examples/api/pointAlong-orientation.forge.js +2 -2
  84. package/examples/api/profile-2020-b-slot6.forge.js +4 -4
  85. package/examples/api/sketch-rounding-strategies.forge.js +1 -1
  86. package/examples/api/smooth-curve-connections.forge.js +1 -1
  87. package/examples/api/transition-curves.forge.js +3 -3
  88. package/examples/constraints/01-fully-constrained-rect.forge.js +2 -2
  89. package/examples/constraints/02-underconstrained-triangle.forge.js +1 -1
  90. package/examples/constraints/03-redundant-constraints.forge.js +2 -2
  91. package/examples/constraints/05-parallel-with-linedistance.forge.js +2 -2
  92. package/examples/constraints/06-complex-spectrogram.forge.js +1 -1
  93. package/examples/constraints/07-perpendicular-chain.forge.js +4 -4
  94. package/examples/constraints/08-symmetric-bracket.forge.js +4 -4
  95. package/examples/constraints/09-stress-spiral.forge.js +1 -1
  96. package/examples/constraints/10-stress-honeycomb.forge.js +1 -1
  97. package/examples/constraints/11-surface-grid.forge.js +2 -2
  98. package/examples/constraints/12-surface-nested.forge.js +4 -4
  99. package/examples/constraints/13-surface-complex.forge.js +1 -1
  100. package/examples/exact-arc-housing.forge.js +12 -0
  101. package/examples/furniture/adjustable-table.forge.js +13 -13
  102. package/examples/furniture/bathroom.forge.js +15 -15
  103. package/examples/furniture/chair.forge.js +12 -12
  104. package/examples/furniture/picture-frame.forge.js +6 -6
  105. package/examples/furniture/shoe-rack-doors.forge.js +8 -8
  106. package/examples/furniture/shoe-rack.forge.js +7 -7
  107. package/examples/furniture/table-lamp.forge.js +8 -8
  108. package/examples/gcode/lissajous-vase.forge.js +4 -4
  109. package/examples/gcode/math-surface.forge.js +3 -3
  110. package/examples/gcode/parametric-vase.forge.js +4 -4
  111. package/examples/gcode/spiral-tower.forge.js +4 -4
  112. package/examples/generative/crystal-growth.forge.js +7 -7
  113. package/examples/generative/frost-spires.forge.js +6 -6
  114. package/examples/generative/golden-spiral-tower.forge.js +8 -8
  115. package/examples/generative/molten-forge.forge.js +6 -6
  116. package/examples/generative/neon-coral.forge.js +7 -7
  117. package/examples/mechanical/3d-printer.forge.js +9 -9
  118. package/examples/mechanical/5-finger-robot-hand.forge.js +4 -4
  119. package/examples/mechanical/airplane-propeller.forge.js +7 -7
  120. package/examples/mechanical/bolt-and-nut.forge.js +10 -10
  121. package/examples/mechanical/door-with-hinges.forge.js +7 -7
  122. package/examples/mechanical/fillet-enclosure.forge.js +14 -10
  123. package/examples/mechanical/headphone-hanger-v2.forge.js +9 -9
  124. package/examples/mechanical/robot_hand.forge.js +10 -10
  125. package/examples/mechanical/robot_hand_2.forge.js +17 -17
  126. package/examples/nurbs-surface.forge.js +8 -0
  127. package/examples/nurbs-tube.forge.js +7 -0
  128. package/examples/products/bottle.forge.js +7 -7
  129. package/examples/products/chess-set.forge.js +6 -6
  130. package/examples/products/classical-piano.forge.js +9 -9
  131. package/examples/products/clock.forge.js +21 -21
  132. package/examples/products/cup.forge.js +5 -5
  133. package/examples/products/iphone.forge.js +12 -12
  134. package/examples/products/laptop.forge.js +9 -9
  135. package/examples/products/laser-cut-box.forge.js +6 -6
  136. package/examples/products/laser-cut-tray.forge.js +6 -6
  137. package/examples/products/liquid-soap-dispenser.forge.js +5 -5
  138. package/examples/products/origami-fish.forge.js +6 -6
  139. package/examples/products/spiderman-cake.forge.js +2 -2
  140. package/examples/shelf/container.forge.js +5 -5
  141. package/examples/shelf/shelf-unit.forge.js +6 -6
  142. package/examples/toolbox/bolted-joint.forge.js +5 -5
  143. package/package.json +3 -1
  144. package/dist/assets/EditorApp-D9bJvtf7.js +0 -11338
  145. package/dist/assets/LandingPage-CdCuEOdC.js +0 -451
  146. package/dist-cli/chunk-PZ5AY32C.js +0 -10
  147. package/dist-cli/chunk-PZ5AY32C.js.map +0 -1
  148. package/dist-skill/docs/CLI/export.md +0 -91
  149. package/dist-skill/docs/CLI/projects.md +0 -107
  150. package/dist-skill/docs/CLI/studio_publishing.md +0 -52
  151. package/dist-skill/docs/CLI/validation.md +0 -66
  152. package/dist-skill/docs-dev/API/core/sdf-advanced.md +0 -92
  153. package/dist-skill/docs-dev/API/core/sdf-primitives.md +0 -58
  154. package/dist-skill/docs-dev/API/core/sdf-workflow.md +0 -42
  155. package/dist-skill/docs-dev/CLI/export.md +0 -91
  156. package/dist-skill/docs-dev/CLI/projects.md +0 -107
  157. package/dist-skill/docs-dev/CLI/studio_publishing.md +0 -52
  158. 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,10 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
- export {
8
- __export
9
- };
10
- //# sourceMappingURL=chunk-PZ5AY32C.js.map
@@ -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
- ```