fluidcad 0.0.33 → 0.0.35

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 (363) hide show
  1. package/README.md +72 -2
  2. package/bin/commands/init.js +55 -0
  3. package/bin/commands/login.js +120 -0
  4. package/bin/commands/mcp.js +33 -0
  5. package/bin/commands/pack.js +49 -0
  6. package/bin/commands/publish.js +136 -0
  7. package/bin/commands/serve.js +77 -0
  8. package/bin/fluidcad.js +21 -107
  9. package/bin/lib/api-client.js +40 -0
  10. package/bin/lib/browser.js +16 -0
  11. package/bin/lib/config.js +39 -0
  12. package/bin/lib/model-config.js +38 -0
  13. package/bin/lib/workspace.js +57 -0
  14. package/lib/dist/common/scene-object.d.ts +2 -1
  15. package/lib/dist/common/scene-object.js +3 -2
  16. package/lib/dist/common/shape-factory.d.ts +2 -1
  17. package/lib/dist/common/shape-factory.js +4 -0
  18. package/lib/dist/common/transformable-primitive.d.ts +6 -5
  19. package/lib/dist/common/transformable-primitive.js +8 -7
  20. package/lib/dist/common/vertex.js +0 -1
  21. package/lib/dist/core/2d/aline.d.ts +4 -3
  22. package/lib/dist/core/2d/aline.js +3 -2
  23. package/lib/dist/core/2d/arc.d.ts +3 -2
  24. package/lib/dist/core/2d/arc.js +4 -3
  25. package/lib/dist/core/2d/bezier.d.ts +8 -6
  26. package/lib/dist/core/2d/circle.d.ts +4 -3
  27. package/lib/dist/core/2d/circle.js +3 -2
  28. package/lib/dist/core/2d/ellipse.d.ts +5 -4
  29. package/lib/dist/core/2d/ellipse.js +5 -4
  30. package/lib/dist/core/2d/hline.d.ts +4 -3
  31. package/lib/dist/core/2d/hline.js +5 -3
  32. package/lib/dist/core/2d/line.js +1 -0
  33. package/lib/dist/core/2d/offset.d.ts +3 -2
  34. package/lib/dist/core/2d/offset.js +6 -5
  35. package/lib/dist/core/2d/polygon.d.ts +5 -4
  36. package/lib/dist/core/2d/polygon.js +10 -9
  37. package/lib/dist/core/2d/rect.d.ts +4 -3
  38. package/lib/dist/core/2d/rect.js +10 -9
  39. package/lib/dist/core/2d/slot.d.ts +14 -6
  40. package/lib/dist/core/2d/slot.js +19 -8
  41. package/lib/dist/core/2d/tarc.d.ts +20 -2
  42. package/lib/dist/core/2d/tarc.js +24 -0
  43. package/lib/dist/core/2d/vline.d.ts +4 -3
  44. package/lib/dist/core/2d/vline.js +5 -3
  45. package/lib/dist/core/chamfer.d.ts +5 -4
  46. package/lib/dist/core/chamfer.js +7 -6
  47. package/lib/dist/core/color.d.ts +3 -2
  48. package/lib/dist/core/color.js +2 -1
  49. package/lib/dist/core/cut.d.ts +4 -3
  50. package/lib/dist/core/cut.js +5 -4
  51. package/lib/dist/core/cylinder.d.ts +2 -1
  52. package/lib/dist/core/cylinder.js +2 -1
  53. package/lib/dist/core/draft.d.ts +3 -2
  54. package/lib/dist/core/draft.js +3 -2
  55. package/lib/dist/core/extrude.d.ts +4 -3
  56. package/lib/dist/core/extrude.js +5 -4
  57. package/lib/dist/core/fillet.d.ts +5 -4
  58. package/lib/dist/core/fillet.js +6 -5
  59. package/lib/dist/core/index.d.ts +1 -0
  60. package/lib/dist/core/index.js +1 -0
  61. package/lib/dist/core/interfaces.d.ts +55 -25
  62. package/lib/dist/core/param.d.ts +74 -0
  63. package/lib/dist/core/param.js +147 -0
  64. package/lib/dist/core/repeat.d.ts +2 -1
  65. package/lib/dist/core/repeat.js +72 -54
  66. package/lib/dist/core/revolve.d.ts +2 -1
  67. package/lib/dist/core/revolve.js +3 -2
  68. package/lib/dist/core/rib.d.ts +3 -2
  69. package/lib/dist/core/rib.js +6 -2
  70. package/lib/dist/core/rotate.d.ts +5 -4
  71. package/lib/dist/core/rotate.js +4 -3
  72. package/lib/dist/core/shell.d.ts +3 -2
  73. package/lib/dist/core/shell.js +3 -2
  74. package/lib/dist/core/sphere.d.ts +3 -2
  75. package/lib/dist/core/sphere.js +2 -1
  76. package/lib/dist/core/translate.d.ts +7 -6
  77. package/lib/dist/core/translate.js +6 -5
  78. package/lib/dist/features/2d/arc.d.ts +8 -2
  79. package/lib/dist/features/2d/arc.js +94 -17
  80. package/lib/dist/features/2d/back.js +3 -2
  81. package/lib/dist/features/2d/bezier.js +16 -16
  82. package/lib/dist/features/2d/circle.js +4 -0
  83. package/lib/dist/features/2d/ellipse.js +4 -0
  84. package/lib/dist/features/2d/hline.d.ts +3 -0
  85. package/lib/dist/features/2d/hline.js +9 -2
  86. package/lib/dist/features/2d/line.d.ts +3 -0
  87. package/lib/dist/features/2d/line.js +11 -3
  88. package/lib/dist/features/2d/sketch.d.ts +4 -0
  89. package/lib/dist/features/2d/sketch.js +25 -0
  90. package/lib/dist/features/2d/slot.d.ts +5 -0
  91. package/lib/dist/features/2d/slot.js +52 -7
  92. package/lib/dist/features/2d/tarc-constrained.d.ts +2 -0
  93. package/lib/dist/features/2d/tarc-constrained.js +8 -0
  94. package/lib/dist/features/2d/tarc-radius-to-object.d.ts +16 -0
  95. package/lib/dist/features/2d/tarc-radius-to-object.js +58 -0
  96. package/lib/dist/features/2d/tarc-to-object.d.ts +18 -0
  97. package/lib/dist/features/2d/tarc-to-object.js +66 -0
  98. package/lib/dist/features/2d/tarc-to-point-tangent.d.ts +2 -0
  99. package/lib/dist/features/2d/tarc-to-point-tangent.js +6 -0
  100. package/lib/dist/features/2d/tarc-to-point.d.ts +2 -0
  101. package/lib/dist/features/2d/tarc-to-point.js +6 -0
  102. package/lib/dist/features/2d/tarc-with-tangent.d.ts +2 -0
  103. package/lib/dist/features/2d/tarc-with-tangent.js +6 -0
  104. package/lib/dist/features/2d/tarc.d.ts +2 -0
  105. package/lib/dist/features/2d/tarc.js +6 -0
  106. package/lib/dist/features/2d/vline.d.ts +3 -0
  107. package/lib/dist/features/2d/vline.js +9 -2
  108. package/lib/dist/features/copy-circular.d.ts +4 -3
  109. package/lib/dist/features/copy-circular.js +16 -9
  110. package/lib/dist/features/copy-circular2d.js +16 -9
  111. package/lib/dist/features/copy-linear.d.ts +4 -3
  112. package/lib/dist/features/copy-linear.js +18 -12
  113. package/lib/dist/features/copy-linear2d.js +18 -12
  114. package/lib/dist/features/extrude-base.d.ts +13 -3
  115. package/lib/dist/features/extrude-base.js +32 -3
  116. package/lib/dist/features/extrude-to-face.js +1 -5
  117. package/lib/dist/features/extrude-two-distances.js +1 -2
  118. package/lib/dist/features/extrude.js +1 -2
  119. package/lib/dist/features/mirror-feature.d.ts +3 -2
  120. package/lib/dist/features/mirror-feature.js +1 -1
  121. package/lib/dist/features/mirror-shape2d.js +2 -2
  122. package/lib/dist/features/repeat-base.d.ts +13 -0
  123. package/lib/dist/features/repeat-base.js +21 -0
  124. package/lib/dist/features/repeat-circular.d.ts +8 -7
  125. package/lib/dist/features/repeat-circular.js +7 -3
  126. package/lib/dist/features/repeat-linear.d.ts +9 -7
  127. package/lib/dist/features/repeat-linear.js +9 -3
  128. package/lib/dist/features/repeat-matrix.d.ts +3 -1
  129. package/lib/dist/features/repeat-matrix.js +7 -2
  130. package/lib/dist/features/shell.d.ts +4 -1
  131. package/lib/dist/features/shell.js +14 -3
  132. package/lib/dist/helpers/clone-transform.d.ts +2 -1
  133. package/lib/dist/index.d.ts +12 -1
  134. package/lib/dist/index.js +11 -4
  135. package/lib/dist/io/file-import.d.ts +7 -0
  136. package/lib/dist/io/file-import.js +30 -10
  137. package/lib/dist/math/lazy-matrix.d.ts +36 -0
  138. package/lib/dist/math/lazy-matrix.js +134 -0
  139. package/lib/dist/oc/boolean-ops.d.ts +2 -2
  140. package/lib/dist/oc/constraints/constraint-solver-adaptor.d.ts +5 -0
  141. package/lib/dist/oc/constraints/constraint-solver-adaptor.js +16 -0
  142. package/lib/dist/oc/constraints/constraint-solver.d.ts +4 -0
  143. package/lib/dist/oc/constraints/curve/curve-constraint-solver.d.ts +4 -0
  144. package/lib/dist/oc/constraints/curve/curve-constraint-solver.js +3 -0
  145. package/lib/dist/oc/constraints/geometric/geometric-constraint-solver.d.ts +6 -1
  146. package/lib/dist/oc/constraints/geometric/geometric-constraint-solver.js +4 -0
  147. package/lib/dist/oc/constraints/geometric/tangent-arc-from-point-tangent.d.ts +8 -0
  148. package/lib/dist/oc/constraints/geometric/tangent-arc-from-point-tangent.js +111 -0
  149. package/lib/dist/oc/constraints/geometric/tangent-arc-radius-to-object.d.ts +8 -0
  150. package/lib/dist/oc/constraints/geometric/tangent-arc-radius-to-object.js +161 -0
  151. package/lib/dist/oc/mesh.d.ts +9 -4
  152. package/lib/dist/oc/mesh.js +14 -13
  153. package/lib/dist/oc/shell-ops.d.ts +2 -1
  154. package/lib/dist/oc/shell-ops.js +5 -2
  155. package/lib/dist/param-registry.d.ts +34 -0
  156. package/lib/dist/param-registry.js +60 -0
  157. package/lib/dist/rendering/mesh-builder.d.ts +3 -0
  158. package/lib/dist/rendering/mesh-builder.js +10 -5
  159. package/lib/dist/rendering/render-edge.d.ts +2 -1
  160. package/lib/dist/rendering/render-edge.js +2 -2
  161. package/lib/dist/rendering/render-face.d.ts +2 -1
  162. package/lib/dist/rendering/render-face.js +2 -2
  163. package/lib/dist/rendering/render-solid.d.ts +2 -1
  164. package/lib/dist/rendering/render-solid.js +2 -2
  165. package/lib/dist/rendering/render-wire.d.ts +2 -1
  166. package/lib/dist/rendering/render-wire.js +2 -2
  167. package/lib/dist/rendering/render.d.ts +3 -0
  168. package/lib/dist/rendering/render.js +7 -2
  169. package/lib/dist/scene-manager.d.ts +4 -2
  170. package/lib/dist/scene-manager.js +12 -4
  171. package/lib/dist/tests/features/2d/arc.test.js +64 -0
  172. package/lib/dist/tests/features/2d/back.test.js +17 -1
  173. package/lib/dist/tests/features/2d/tarc.test.js +157 -0
  174. package/lib/dist/tests/features/copy-circular.test.js +1 -1
  175. package/lib/dist/tests/features/copy-linear.test.js +10 -10
  176. package/lib/dist/tests/features/repeat-user-repro-cache.test.d.ts +1 -0
  177. package/lib/dist/tests/features/repeat-user-repro-cache.test.js +97 -0
  178. package/lib/dist/tests/features/repeat-user-repro.test.d.ts +1 -0
  179. package/lib/dist/tests/features/repeat-user-repro.test.js +60 -0
  180. package/lib/dist/tests/features/shell.test.js +36 -0
  181. package/lib/dist/tests/global-setup.js +2 -1
  182. package/lib/dist/tests/helpers/extract-blocks.d.ts +9 -0
  183. package/lib/dist/tests/helpers/extract-blocks.js +56 -0
  184. package/lib/dist/tests/llm-docs-examples.test.d.ts +1 -0
  185. package/lib/dist/tests/llm-docs-examples.test.js +62 -0
  186. package/lib/dist/tests/setup.js +2 -1
  187. package/lib/dist/tsconfig.tsbuildinfo +1 -1
  188. package/llm-docs/.coverage-allowlist.txt +9 -0
  189. package/llm-docs/api/arc.md +48 -0
  190. package/llm-docs/api/axis.md +42 -0
  191. package/llm-docs/api/bezier.md +41 -0
  192. package/llm-docs/api/booleans.md +44 -0
  193. package/llm-docs/api/chamfer.md +40 -0
  194. package/llm-docs/api/circle.md +36 -0
  195. package/llm-docs/api/color.md +34 -0
  196. package/llm-docs/api/connect.md +41 -0
  197. package/llm-docs/api/constraint-qualifiers.md +48 -0
  198. package/llm-docs/api/copy.md +63 -0
  199. package/llm-docs/api/cursor-lines.md +50 -0
  200. package/llm-docs/api/cursor-move.md +61 -0
  201. package/llm-docs/api/cut.md +55 -0
  202. package/llm-docs/api/draft.md +36 -0
  203. package/llm-docs/api/edge-filter.md +57 -0
  204. package/llm-docs/api/ellipse.md +34 -0
  205. package/llm-docs/api/extrude.md +74 -0
  206. package/llm-docs/api/face-filter.md +61 -0
  207. package/llm-docs/api/fillet.md +51 -0
  208. package/llm-docs/api/index.json +139 -0
  209. package/llm-docs/api/line.md +42 -0
  210. package/llm-docs/api/load.md +37 -0
  211. package/llm-docs/api/local.md +38 -0
  212. package/llm-docs/api/loft.md +37 -0
  213. package/llm-docs/api/mirror.md +44 -0
  214. package/llm-docs/api/offset.md +36 -0
  215. package/llm-docs/api/part.md +40 -0
  216. package/llm-docs/api/plane.md +44 -0
  217. package/llm-docs/api/polygon.md +37 -0
  218. package/llm-docs/api/primitive-solids.md +39 -0
  219. package/llm-docs/api/project-intersect.md +48 -0
  220. package/llm-docs/api/rect.md +48 -0
  221. package/llm-docs/api/remove.md +32 -0
  222. package/llm-docs/api/repeat.md +79 -0
  223. package/llm-docs/api/revolve.md +38 -0
  224. package/llm-docs/api/rib.md +40 -0
  225. package/llm-docs/api/rotate.md +37 -0
  226. package/llm-docs/api/select.md +41 -0
  227. package/llm-docs/api/shell.md +41 -0
  228. package/llm-docs/api/sketch.md +76 -0
  229. package/llm-docs/api/slot.md +36 -0
  230. package/llm-docs/api/split-trim.md +42 -0
  231. package/llm-docs/api/sweep.md +43 -0
  232. package/llm-docs/api/tarc.md +45 -0
  233. package/llm-docs/api/tcircle.md +38 -0
  234. package/llm-docs/api/tline.md +42 -0
  235. package/llm-docs/api/translate.md +40 -0
  236. package/llm-docs/api/types/aline.md +35 -0
  237. package/llm-docs/api/types/arc-angles.md +29 -0
  238. package/llm-docs/api/types/arc-points.md +48 -0
  239. package/llm-docs/api/types/axis-like.md +38 -0
  240. package/llm-docs/api/types/axis.md +21 -0
  241. package/llm-docs/api/types/boolean-operation.md +50 -0
  242. package/llm-docs/api/types/circular-repeat-options.md +31 -0
  243. package/llm-docs/api/types/common.md +32 -0
  244. package/llm-docs/api/types/cut.md +125 -0
  245. package/llm-docs/api/types/draft.md +21 -0
  246. package/llm-docs/api/types/extrudable-geometry.md +23 -0
  247. package/llm-docs/api/types/extrude.md +194 -0
  248. package/llm-docs/api/types/geometry.md +51 -0
  249. package/llm-docs/api/types/hline.md +35 -0
  250. package/llm-docs/api/types/linear-repeat-options.md +31 -0
  251. package/llm-docs/api/types/loft.md +154 -0
  252. package/llm-docs/api/types/mirror.md +35 -0
  253. package/llm-docs/api/types/offset.md +31 -0
  254. package/llm-docs/api/types/plane-like.md +35 -0
  255. package/llm-docs/api/types/plane-transform-options.md +29 -0
  256. package/llm-docs/api/types/plane.md +21 -0
  257. package/llm-docs/api/types/point-like.md +22 -0
  258. package/llm-docs/api/types/point2dlike.md +26 -0
  259. package/llm-docs/api/types/polygon.md +46 -0
  260. package/llm-docs/api/types/rect.md +128 -0
  261. package/llm-docs/api/types/revolve.md +102 -0
  262. package/llm-docs/api/types/rib.md +133 -0
  263. package/llm-docs/api/types/scene-object.md +33 -0
  264. package/llm-docs/api/types/select.md +21 -0
  265. package/llm-docs/api/types/shell.md +54 -0
  266. package/llm-docs/api/types/slot.md +43 -0
  267. package/llm-docs/api/types/sweep.md +189 -0
  268. package/llm-docs/api/types/tangent-arc-two-objects.md +46 -0
  269. package/llm-docs/api/types/transformable.md +93 -0
  270. package/llm-docs/api/types/trim.md +27 -0
  271. package/llm-docs/api/types/two-objects-tangent-line.md +46 -0
  272. package/llm-docs/api/types/vertex.md +17 -0
  273. package/llm-docs/api/types/vline.md +35 -0
  274. package/llm-docs/concepts/coordinate-system.md +45 -0
  275. package/llm-docs/concepts/history-and-rollback.md +40 -0
  276. package/llm-docs/concepts/last-selection.md +49 -0
  277. package/llm-docs/concepts/scene-graph.md +37 -0
  278. package/llm-docs/index.json +1750 -0
  279. package/mcp/dist/client.d.ts +65 -0
  280. package/mcp/dist/client.js +255 -0
  281. package/mcp/dist/discovery.d.ts +11 -0
  282. package/mcp/dist/discovery.js +78 -0
  283. package/mcp/dist/docs-index.d.ts +81 -0
  284. package/mcp/dist/docs-index.js +261 -0
  285. package/mcp/dist/resources.d.ts +4 -0
  286. package/mcp/dist/resources.js +115 -0
  287. package/mcp/dist/server.d.ts +12 -0
  288. package/mcp/dist/server.js +502 -0
  289. package/mcp/dist/tools/coordination.d.ts +9 -0
  290. package/mcp/dist/tools/coordination.js +46 -0
  291. package/mcp/dist/tools/docs.d.ts +66 -0
  292. package/mcp/dist/tools/docs.js +122 -0
  293. package/mcp/dist/tools/engine.d.ts +72 -0
  294. package/mcp/dist/tools/engine.js +190 -0
  295. package/mcp/dist/tools/inspection.d.ts +75 -0
  296. package/mcp/dist/tools/inspection.js +121 -0
  297. package/mcp/dist/tools/screenshot.d.ts +63 -0
  298. package/mcp/dist/tools/screenshot.js +263 -0
  299. package/mcp/dist/tools/source.d.ts +84 -0
  300. package/mcp/dist/tools/source.js +434 -0
  301. package/mcp/dist/tools/workspaces.d.ts +13 -0
  302. package/mcp/dist/tools/workspaces.js +33 -0
  303. package/mcp/dist/types.d.ts +18 -0
  304. package/mcp/dist/types.js +11 -0
  305. package/package.json +27 -7
  306. package/server/dist/api.d.ts +37 -0
  307. package/server/dist/api.js +44 -0
  308. package/server/dist/code-editor.d.ts +100 -0
  309. package/server/dist/code-editor.js +528 -2
  310. package/server/dist/fluidcad-server.d.ts +118 -1
  311. package/server/dist/fluidcad-server.js +350 -62
  312. package/server/dist/global-registry.d.ts +30 -0
  313. package/server/dist/global-registry.js +126 -0
  314. package/server/dist/host/blocked-imports.d.ts +8 -0
  315. package/server/dist/host/blocked-imports.js +30 -0
  316. package/server/dist/{vite-manager.d.ts → host/local-scene-host.d.ts} +3 -1
  317. package/server/dist/{vite-manager.js → host/local-scene-host.js} +6 -26
  318. package/server/dist/host/scene-host.d.ts +19 -0
  319. package/server/dist/host/scene-host.js +1 -0
  320. package/server/dist/index.js +175 -123
  321. package/server/dist/instance-file.d.ts +31 -0
  322. package/server/dist/instance-file.js +73 -0
  323. package/server/dist/lint-fluid-js.d.ts +15 -0
  324. package/server/dist/lint-fluid-js.js +271 -0
  325. package/server/dist/model-package/capture-params.d.ts +19 -0
  326. package/server/dist/model-package/capture-params.js +42 -0
  327. package/server/dist/model-package/pack.d.ts +23 -0
  328. package/server/dist/model-package/pack.js +229 -0
  329. package/server/dist/model-package/types.d.ts +78 -0
  330. package/server/dist/model-package/types.js +17 -0
  331. package/server/dist/routes/editor.d.ts +24 -0
  332. package/server/dist/routes/editor.js +44 -0
  333. package/server/dist/routes/export.d.ts +1 -1
  334. package/server/dist/routes/export.js +45 -8
  335. package/server/dist/routes/health.d.ts +7 -0
  336. package/server/dist/routes/health.js +14 -0
  337. package/server/dist/routes/hit-test.d.ts +3 -0
  338. package/server/dist/routes/hit-test.js +17 -0
  339. package/server/dist/routes/lint.d.ts +10 -0
  340. package/server/dist/routes/lint.js +28 -0
  341. package/server/dist/routes/pack.d.ts +10 -0
  342. package/server/dist/routes/pack.js +47 -0
  343. package/server/dist/routes/params.d.ts +3 -0
  344. package/server/dist/routes/params.js +75 -0
  345. package/server/dist/routes/render.d.ts +33 -0
  346. package/server/dist/routes/render.js +34 -0
  347. package/server/dist/routes/scene.d.ts +5 -0
  348. package/server/dist/routes/scene.js +48 -0
  349. package/server/dist/routes/screenshot.js +68 -1
  350. package/server/dist/routes/sketch-edits.d.ts +3 -0
  351. package/server/dist/routes/sketch-edits.js +542 -0
  352. package/server/dist/routes/timeline.d.ts +3 -0
  353. package/server/dist/routes/timeline.js +49 -0
  354. package/server/dist/server-core.d.ts +53 -0
  355. package/server/dist/server-core.js +147 -0
  356. package/server/dist/ws-protocol.d.ts +156 -3
  357. package/ui/dist/assets/index-CDJmUpFI.css +2 -0
  358. package/ui/dist/assets/index-MRqwG9Vh.js +5417 -0
  359. package/ui/dist/index.html +2 -2
  360. package/server/dist/routes/actions.d.ts +0 -3
  361. package/server/dist/routes/actions.js +0 -309
  362. package/ui/dist/assets/index-CFi9p7wR.js +0 -4946
  363. package/ui/dist/assets/index-DR7c2Qk9.css +0 -2
@@ -6,6 +6,7 @@ import { registerBuilder } from "../../index.js";
6
6
  import { isPlaneLike } from "../../math/plane.js";
7
7
  import { SceneObject } from "../../common/scene-object.js";
8
8
  import { resolvePlane } from "../../helpers/resolve.js";
9
+ import { isNumberParam, resolveParam } from "../param.js";
9
10
  function build(context) {
10
11
  return function line() {
11
12
  let planeObj = null;
@@ -31,18 +32,19 @@ function build(context) {
31
32
  context.addSceneObject(vline);
32
33
  return vline;
33
34
  }
34
- if (argOffset === 0 && typeof arguments[0] !== 'number') {
35
+ if (argOffset === 0 && !isNumberParam(arguments[0])) {
35
36
  // vLine(start, distance) or vLine(start, target)
36
37
  const start = normalizePoint2D(arguments[0]);
37
38
  const second = arguments[1];
38
39
  const distanceOrTarget = second instanceof SceneObject
39
40
  ? second
40
- : second;
41
+ : resolveParam(second);
41
42
  const vline = new VerticalLine(distanceOrTarget, planeObj);
43
+ vline.setHasExplicitStart();
42
44
  context.addSceneObjects([new Move(start), vline]);
43
45
  return vline;
44
46
  }
45
- const distance = arguments[argOffset];
47
+ const distance = resolveParam(arguments[argOffset]);
46
48
  const vline = new VerticalLine(distance, planeObj);
47
49
  context.addSceneObject(vline);
48
50
  return vline;
@@ -1,23 +1,24 @@
1
1
  import { ISceneObject } from "./interfaces.js";
2
+ import { type NumberParam, type BooleanParam } from "./param.js";
2
3
  interface ChamferFunction {
3
4
  /**
4
5
  * Chamfers selected edges with the given distance.
5
6
  * @param distance - The chamfer distance (defaults to 1)
6
7
  */
7
- (distance?: number): ISceneObject;
8
+ (distance?: NumberParam): ISceneObject;
8
9
  /**
9
10
  * Chamfers the given edge selections with the given distance.
10
11
  * @param distance - The chamfer distance
11
12
  * @param sceneObjects - The edge selections to chamfer
12
13
  */
13
- (distance: number, ...sceneObjects: ISceneObject[]): ISceneObject;
14
+ (distance: NumberParam, ...sceneObjects: ISceneObject[]): ISceneObject;
14
15
  /**
15
16
  * Chamfers selected edges with two distances or a distance and angle.
16
17
  * @param distance - The first chamfer distance
17
18
  * @param distance2 - The second distance, or angle if `isAngle` is true
18
19
  * @param isAngle - Whether `distance2` is an angle
19
20
  */
20
- (distance: number, distance2: number, isAngle?: boolean): ISceneObject;
21
+ (distance: NumberParam, distance2: NumberParam, isAngle?: BooleanParam): ISceneObject;
21
22
  /**
22
23
  * Chamfers the given edge selections with two distances or a distance and angle.
23
24
  * @param distance - The first chamfer distance
@@ -25,7 +26,7 @@ interface ChamferFunction {
25
26
  * @param isAngle - Whether `distance2` is an angle
26
27
  * @param sceneObjects - The edge selections to chamfer
27
28
  */
28
- (distance: number, distance2: number, isAngle: boolean, ...sceneObjects: ISceneObject[]): ISceneObject;
29
+ (distance: NumberParam, distance2: NumberParam, isAngle: BooleanParam, ...sceneObjects: ISceneObject[]): ISceneObject;
29
30
  }
30
31
  declare const _default: ChamferFunction;
31
32
  export default _default;
@@ -1,20 +1,21 @@
1
1
  import { Chamfer } from "../features/chamfer.js";
2
2
  import { SceneObject } from "../common/scene-object.js";
3
3
  import { registerBuilder } from "../index.js";
4
+ import { isNumberParam, isBooleanParam, resolveParam } from "./param.js";
4
5
  function build(context) {
5
6
  return function chamfer() {
6
7
  const args = Array.from(arguments);
7
8
  let distance = 1;
8
9
  let distance2 = undefined;
9
10
  let isAngle = false;
10
- if (args.length >= 1 && typeof args[0] === 'number') {
11
- distance = args[0];
11
+ if (args.length >= 1 && isNumberParam(args[0])) {
12
+ distance = resolveParam(args[0]);
12
13
  }
13
- if (args.length >= 2 && typeof args[1] === 'number') {
14
- distance2 = args[1];
14
+ if (args.length >= 2 && isNumberParam(args[1])) {
15
+ distance2 = resolveParam(args[1]);
15
16
  }
16
- if (args.length >= 3 && typeof args[2] === 'boolean') {
17
- isAngle = args[2];
17
+ if (args.length >= 3 && isBooleanParam(args[2])) {
18
+ isAngle = resolveParam(args[2]);
18
19
  }
19
20
  const selections = args
20
21
  .filter(a => a instanceof SceneObject);
@@ -1,16 +1,17 @@
1
1
  import { ISceneObject } from "./interfaces.js";
2
+ import { type StringParam } from "./param.js";
2
3
  interface ColorFunction {
3
4
  /**
4
5
  * Applies a color to the last selection.
5
6
  * @param color - The color value (CSS color string)
6
7
  */
7
- (color: string): ISceneObject;
8
+ (color: StringParam): ISceneObject;
8
9
  /**
9
10
  * Applies a color to the given selection.
10
11
  * @param color - The color value (CSS color string)
11
12
  * @param selection - The face or edge selection to color
12
13
  */
13
- (color: string, selection: ISceneObject): ISceneObject;
14
+ (color: StringParam, selection: ISceneObject): ISceneObject;
14
15
  }
15
16
  declare const _default: ColorFunction;
16
17
  export default _default;
@@ -1,6 +1,7 @@
1
1
  import { registerBuilder } from "../index.js";
2
2
  import { SceneObject } from "../common/scene-object.js";
3
3
  import { Color } from "../features/color.js";
4
+ import { resolveParam } from "./param.js";
4
5
  function build(context) {
5
6
  return function color() {
6
7
  let selection;
@@ -11,7 +12,7 @@ function build(context) {
11
12
  selection = context.getLastSelection() || undefined;
12
13
  }
13
14
  context.addSceneObject(selection);
14
- const obj = new Color(arguments[0], selection);
15
+ const obj = new Color(resolveParam(arguments[0]), selection);
15
16
  context.addSceneObject(obj);
16
17
  return obj;
17
18
  };
@@ -1,4 +1,5 @@
1
1
  import { ICut, ISceneObject } from "./interfaces.js";
2
+ import { type NumberParam } from "./param.js";
2
3
  interface CutFunction {
3
4
  /**
4
5
  * Cuts through all using the last sketch
@@ -15,20 +16,20 @@ interface CutFunction {
15
16
  * @param distance - The cut depth
16
17
  * @param target - The sketch to cut with
17
18
  */
18
- (distance: number, target?: ISceneObject): ICut;
19
+ (distance: NumberParam, target?: ISceneObject): ICut;
19
20
  /**
20
21
  * Cuts by two distances using the last sketch.
21
22
  * @param distance1 - The first cut distance
22
23
  * @param distance2 - The second cut distance
23
24
  */
24
- (distance1: number, distance2: number): ICut;
25
+ (distance1: NumberParam, distance2: NumberParam): ICut;
25
26
  /**
26
27
  * Cuts by two distances using the given sketch.
27
28
  * @param distance1 - The first cut distance
28
29
  * @param distance2 - The second cut distance
29
30
  * @param target - The sketch to cut with
30
31
  */
31
- (distance1: number, distance2: number, target: ISceneObject): ICut;
32
+ (distance1: NumberParam, distance2: NumberParam, target: ISceneObject): ICut;
32
33
  /**
33
34
  * Cuts up to a specific face using the last sketch.
34
35
  * @param face - A face selection to cut up to
@@ -3,6 +3,7 @@ import { registerBuilder } from "../index.js";
3
3
  import { Extrude } from "../features/extrude.js";
4
4
  import { ExtrudeToFace } from "../features/extrude-to-face.js";
5
5
  import { ExtrudeTwoDistances } from "../features/extrude-two-distances.js";
6
+ import { isNumberParam, resolveParam } from "./param.js";
6
7
  function isExtrudable(obj) {
7
8
  return obj instanceof SceneObject && obj.isExtrudable();
8
9
  }
@@ -12,8 +13,8 @@ function build(context) {
12
13
  return new Extrude(0, extrudable).remove();
13
14
  }
14
15
  else if (params.length === 1) {
15
- if (typeof params[0] === 'number') {
16
- return new Extrude(params[0], extrudable).remove();
16
+ if (isNumberParam(params[0])) {
17
+ return new Extrude(resolveParam(params[0]), extrudable).remove();
17
18
  }
18
19
  else if (params[0] === 'first-face') {
19
20
  return new ExtrudeToFace('first-face', extrudable).remove();
@@ -30,8 +31,8 @@ function build(context) {
30
31
  }
31
32
  }
32
33
  else if (params.length === 2) {
33
- if (typeof params[0] === 'number' && typeof params[1] === 'number') {
34
- return new ExtrudeTwoDistances(params[0], params[1], extrudable).remove();
34
+ if (isNumberParam(params[0]) && isNumberParam(params[1])) {
35
+ return new ExtrudeTwoDistances(resolveParam(params[0]), resolveParam(params[1]), extrudable).remove();
35
36
  }
36
37
  }
37
38
  throw new Error("Invalid parameters for cut function.");
@@ -1,11 +1,12 @@
1
1
  import { ITransformable } from "./interfaces.js";
2
+ import { type NumberParam } from "./param.js";
2
3
  interface CylinderFunction {
3
4
  /**
4
5
  * Creates a cylinder with the given radius and height.
5
6
  * @param radius - The cylinder radius
6
7
  * @param height - The cylinder height
7
8
  */
8
- (radius: number, height: number): ITransformable;
9
+ (radius: NumberParam, height: NumberParam): ITransformable;
9
10
  }
10
11
  declare const _default: CylinderFunction;
11
12
  export default _default;
@@ -1,8 +1,9 @@
1
1
  import { Cylinder } from "../features/cylinder.js";
2
2
  import { registerBuilder } from "../index.js";
3
+ import { resolveParam } from "./param.js";
3
4
  function build(context) {
4
5
  return function cylinder(radius, height) {
5
- const cylinder = new Cylinder(radius, height);
6
+ const cylinder = new Cylinder(resolveParam(radius), resolveParam(height));
6
7
  context.addSceneObject(cylinder);
7
8
  return cylinder;
8
9
  };
@@ -1,16 +1,17 @@
1
1
  import { ISceneObject, IDraft } from "./interfaces.js";
2
+ import { type NumberParam } from "./param.js";
2
3
  interface DraftFunction {
3
4
  /**
4
5
  * Applies a draft angle to the last selected faces.
5
6
  * @param angle - The draft angle in degrees
6
7
  */
7
- (angle: number): IDraft;
8
+ (angle: NumberParam): IDraft;
8
9
  /**
9
10
  * Applies a draft angle to the given face selections.
10
11
  * @param angle - The draft angle in degrees
11
12
  * @param selections - The face selections to draft
12
13
  */
13
- (angle: number, ...selections: ISceneObject[]): IDraft;
14
+ (angle: NumberParam, ...selections: ISceneObject[]): IDraft;
14
15
  }
15
16
  declare const _default: DraftFunction;
16
17
  export default _default;
@@ -2,6 +2,7 @@ import { Draft } from "../features/draft.js";
2
2
  import { SceneObject } from "../common/scene-object.js";
3
3
  import { registerBuilder } from "../index.js";
4
4
  import { rad } from "../helpers/math-helpers.js";
5
+ import { isNumberParam, resolveParam } from "./param.js";
5
6
  function build(context) {
6
7
  return function draft() {
7
8
  const args = Array.from(arguments);
@@ -15,8 +16,8 @@ function build(context) {
15
16
  selections.push(implicit);
16
17
  }
17
18
  }
18
- const angleDeg = (args.length >= 1 && typeof args[0] === 'number')
19
- ? args[0]
19
+ const angleDeg = (args.length >= 1 && isNumberParam(args[0]))
20
+ ? resolveParam(args[0])
20
21
  : 5;
21
22
  for (const sel of selections) {
22
23
  context.addSceneObject(sel);
@@ -1,5 +1,6 @@
1
1
  import { IExtrude, ISceneObject } from "./interfaces.js";
2
2
  import { FaceFilterBuilder } from "../filters/face/face-filter.js";
3
+ import { type NumberParam } from "./param.js";
3
4
  interface ExtrudeFunction {
4
5
  /**
5
6
  * Extrudes the last sketch with a default distance.
@@ -11,20 +12,20 @@ interface ExtrudeFunction {
11
12
  * @param distance - The extrusion distance
12
13
  * @param target - The sketch or face-bearing scene object to extrude
13
14
  */
14
- (distance: number, target?: ISceneObject): IExtrude;
15
+ (distance: NumberParam, target?: ISceneObject): IExtrude;
15
16
  /**
16
17
  * Extrudes between two distances.
17
18
  * @param distance1 - The first extrusion distance
18
19
  * @param distance2 - The second extrusion distance
19
20
  */
20
- (distance1: number, distance2: number): IExtrude;
21
+ (distance1: NumberParam, distance2: NumberParam): IExtrude;
21
22
  /**
22
23
  * Extrudes between two distances.
23
24
  * @param distance1 - The first extrusion distance
24
25
  * @param distance2 - The second extrusion distance
25
26
  * @param target - The sketch or face-bearing scene object to extrude
26
27
  */
27
- (distance1: number, distance2: number, target: ISceneObject): IExtrude;
28
+ (distance1: NumberParam, distance2: NumberParam, target: ISceneObject): IExtrude;
28
29
  /**
29
30
  * Extrudes up to a specific face.
30
31
  * @param face - A face selection to extrude up to
@@ -5,6 +5,7 @@ import { ExtrudeTwoDistances } from "../features/extrude-two-distances.js";
5
5
  import { ExtrudeToFace } from "../features/extrude-to-face.js";
6
6
  import { SelectSceneObject } from "../features/select.js";
7
7
  import { FaceFilterBuilder } from "../filters/face/face-filter.js";
8
+ import { isNumberParam, resolveParam } from "./param.js";
8
9
  function isExtrudable(obj) {
9
10
  return obj instanceof SceneObject && obj.isExtrudable();
10
11
  }
@@ -34,8 +35,8 @@ function build(context) {
34
35
  return new ExtrudeToFace(params[0], extrudable, rest);
35
36
  }
36
37
  if (params.length === 1) {
37
- if (typeof params[0] === 'number') {
38
- return new Extrude(params[0], extrudable);
38
+ if (isNumberParam(params[0])) {
39
+ return new Extrude(resolveParam(params[0]), extrudable);
39
40
  }
40
41
  else if (params[0] instanceof SceneObject) {
41
42
  context.addSceneObject(params[0]);
@@ -46,8 +47,8 @@ function build(context) {
46
47
  }
47
48
  }
48
49
  else if (params.length === 2) {
49
- if (typeof params[0] === 'number' && typeof params[1] === 'number') {
50
- return new ExtrudeTwoDistances(params[0], params[1], extrudable);
50
+ if (isNumberParam(params[0]) && isNumberParam(params[1])) {
51
+ return new ExtrudeTwoDistances(resolveParam(params[0]), resolveParam(params[1]), extrudable);
51
52
  }
52
53
  }
53
54
  throw new Error("Invalid parameters for extrude function.");
@@ -1,16 +1,17 @@
1
1
  import { IGeometry, ISceneObject } from "./interfaces.js";
2
+ import { type NumberParam } from "./param.js";
2
3
  interface FilletFunction {
3
4
  /**
4
5
  * Fillets selected edges with the given radius.
5
6
  * @param radius - The fillet radius (defaults to 1)
6
7
  */
7
- (radius?: number): ISceneObject;
8
+ (radius?: NumberParam): ISceneObject;
8
9
  /**
9
10
  * Fillets the given edge selections with the given radius.
10
11
  * @param radius - The fillet radius
11
12
  * @param sceneObjects - The edge selections to fillet
12
13
  */
13
- (radius: number, ...sceneObjects: ISceneObject[]): ISceneObject;
14
+ (radius: NumberParam, ...sceneObjects: ISceneObject[]): ISceneObject;
14
15
  /**
15
16
  * [2D] Fillets corners between the given geometries.
16
17
  * @param objects - The geometries whose corners to fillet
@@ -21,13 +22,13 @@ interface FilletFunction {
21
22
  * @param objects - The geometries whose corners to fillet
22
23
  * @param radius - The fillet radius
23
24
  */
24
- (objects: IGeometry[], radius: number): ISceneObject;
25
+ (objects: IGeometry[], radius: NumberParam): ISceneObject;
25
26
  /**
26
27
  * [2D] Fillets corners at the given radius and geometries.
27
28
  * @param radius - The fillet radius
28
29
  * @param objects - The geometries whose corners to fillet
29
30
  */
30
- (radius: number, ...objects: IGeometry[]): ISceneObject;
31
+ (radius: NumberParam, ...objects: IGeometry[]): ISceneObject;
31
32
  }
32
33
  declare const _default: FilletFunction;
33
34
  export default _default;
@@ -2,6 +2,7 @@ import { Fillet } from "../features/fillet.js";
2
2
  import { Fillet2D } from "../features/fillet2d.js";
3
3
  import { SceneObject } from "../common/scene-object.js";
4
4
  import { registerBuilder } from "../index.js";
5
+ import { isNumberParam, resolveParam } from "./param.js";
5
6
  function build(context) {
6
7
  return function fillet() {
7
8
  const activeSketch = context.getActiveSketch();
@@ -12,8 +13,8 @@ function build(context) {
12
13
  return fillet;
13
14
  }
14
15
  if (arguments.length === 1) {
15
- if (typeof (arguments[0]) === 'number') {
16
- const radius = arguments[0];
16
+ if (isNumberParam(arguments[0])) {
17
+ const radius = resolveParam(arguments[0]);
17
18
  const fillet = new Fillet2D(radius);
18
19
  context.addSceneObject(fillet);
19
20
  return fillet;
@@ -27,7 +28,7 @@ function build(context) {
27
28
  }
28
29
  if (arguments.length === 2 && Array.isArray(arguments[0])) {
29
30
  const objects = arguments[0];
30
- const radius = arguments[1] || 1;
31
+ const radius = resolveParam(arguments[1]) || 1;
31
32
  const fillet = new Fillet2D(radius, ...objects);
32
33
  context.addSceneObject(fillet);
33
34
  return fillet;
@@ -35,8 +36,8 @@ function build(context) {
35
36
  }
36
37
  else {
37
38
  const args = Array.from(arguments);
38
- const radius = (args.length >= 1 && typeof args[0] === 'number')
39
- ? args[0]
39
+ const radius = (args.length >= 1 && isNumberParam(args[0]))
40
+ ? resolveParam(args[0])
40
41
  : 1;
41
42
  const selections = args
42
43
  .filter(a => a instanceof SceneObject);
@@ -32,3 +32,4 @@ export { default as trim } from "./trim.js";
32
32
  export { default as part } from "./part.js";
33
33
  export * from "./2d/index.js";
34
34
  export { breakpoint } from "./breakpoint.js";
35
+ export { default as param, type ParamType, type ParamOptionsMap, type NumberParamOptions, type SliderParamOptions, type SelectParamOptions, type CheckboxParamOptions, type TextParamOptions, type NumberParam, type StringParam, type BooleanParam, type ParamValue, resolveParam, isNumberParam, isBooleanParam } from "./param.js";
@@ -31,3 +31,4 @@ export { default as trim } from "./trim.js";
31
31
  export { default as part } from "./part.js";
32
32
  export * from "./2d/index.js";
33
33
  export { breakpoint } from "./breakpoint.js";
34
+ export { default as param, resolveParam, isNumberParam, isBooleanParam } from "./param.js";