diff --git a/docs/api/openapi-docs/batch-fetch-model-definitions.api.mdx b/docs/api/openapi-docs/batch-fetch-model-definitions.api.mdx
deleted file mode 100644
index d8122b2e..00000000
--- a/docs/api/openapi-docs/batch-fetch-model-definitions.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: batch-fetch-model-definitions
-title: "Batch-fetch model definitions"
-description: "Returns parameter schemas and defaults for the requested model names."
-sidebar_label: "Batch-fetch model definitions"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns parameter schemas and defaults for the requested model names.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/bitbybit-cad-cloud-api.info.mdx b/docs/api/openapi-docs/bitbybit-cad-cloud-api.info.mdx
index 3854b0c5..35855812 100644
--- a/docs/api/openapi-docs/bitbybit-cad-cloud-api.info.mdx
+++ b/docs/api/openapi-docs/bitbybit-cad-cloud-api.info.mdx
@@ -16,7 +16,7 @@ import Export from "@theme/ApiExplorer/Export";
diff --git a/docs/api/openapi-docs/build-a-dragon-cup.StatusCodes.json b/docs/api/openapi-docs/build-a-dragon-cup.StatusCodes.json
deleted file mode 100644
index e5f5f4a4..00000000
--- a/docs/api/openapi-docs/build-a-dragon-cup.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/build-a-dragon-cup.api.mdx b/docs/api/openapi-docs/build-a-dragon-cup.api.mdx
deleted file mode 100644
index f2f6e6be..00000000
--- a/docs/api/openapi-docs/build-a-dragon-cup.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: build-a-dragon-cup
-title: "Build a Dragon Cup"
-description: "Parametric dragon-scale textured cup with twisted lofted body, voronoi-like skin cells, and configurable shell thickness. All parameters are optional — defaults produce a ready-to-print model."
-sidebar_label: "Build a Dragon Cup"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Parametric dragon-scale textured cup with twisted lofted body, voronoi-like skin cells, and configurable shell thickness. All parameters are optional — defaults produce a ready-to-print model.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/build-a-phone-nest.StatusCodes.json b/docs/api/openapi-docs/build-a-phone-nest.StatusCodes.json
deleted file mode 100644
index e5f5f4a4..00000000
--- a/docs/api/openapi-docs/build-a-phone-nest.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/build-a-phone-nest.api.mdx b/docs/api/openapi-docs/build-a-phone-nest.api.mdx
deleted file mode 100644
index 2a245e2b..00000000
--- a/docs/api/openapi-docs/build-a-phone-nest.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: build-a-phone-nest
-title: "Build a Phone Nest"
-description: "Parametric 3D-printable desktop phone holder/stand with a lofted cradle surface, optional ornamental perforations, and a phone mock-up shape. All parameters are optional — defaults produce a ready-to-print model."
-sidebar_label: "Build a Phone Nest"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Parametric 3D-printable desktop phone holder/stand with a lofted cradle surface, optional ornamental perforations, and a phone mock-up shape. All parameters are optional — defaults produce a ready-to-print model.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cad-execute-a-chained-pipeline.RequestSchema.json b/docs/api/openapi-docs/cad-execute-a-chained-pipeline.RequestSchema.json
new file mode 100644
index 00000000..343ad3ef
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-a-chained-pipeline.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"steps":{"minItems":1,"maxItems":50,"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"map","description":"Declares this step as a map (iteration) step"},"items":{"description":"Source array to iterate over. Typically a '$ref:N' reference to a previous step that produced an array."},"steps":{"minItems":1,"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:][:]' to reference an input file's contents - is one of text|buffer|uint8|json|base64 (default text), and the optional is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz)."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"},"description":"Sub-steps to execute for each item. Use '$item' for the current element, '$index' for the iteration number."},"reduce":{"description":"Optional sub-steps to combine map results. Use '$mapResult' to reference the collected array of iteration outputs.","type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:][:]' to reference an input file's contents - is one of text|buffer|uint8|json|base64 (default text), and the optional is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz)."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"}}},"required":["type","items","steps"],"description":"Iterate over an array, executing sub-steps for each element. Produces an array of results (or a reduced value).","title":"MapStep"},{"type":"object","properties":{"type":{"type":"string","const":"choice","description":"Declares this step as a choice (conditional) step"},"value":{"description":"Value to compare. Typically a '$ref:N' reference to a previous step result."},"operator":{"description":"Comparison operator to apply between value and compareTo","type":"string","enum":["eq","neq","gt","gte","lt","lte","exists"],"title":"ComparisonOperator"},"compareTo":{"description":"Value to compare against. Not required for 'exists' operator."},"then":{"minItems":1,"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:][:]' to reference an input file's contents - is one of text|buffer|uint8|json|base64 (default text), and the optional is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz)."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"},"description":"Sub-steps to execute when condition is true"},"else":{"description":"Sub-steps to execute when condition is false. If omitted, produces null.","type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:][:]' to reference an input file's contents - is one of text|buffer|uint8|json|base64 (default text), and the optional is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz)."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"}}},"required":["type","value","operator","then"],"description":"Conditional execution - evaluate a condition and run the matching branch.","title":"ChoiceStep"},{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:][:]' to reference an input file's contents - is one of text|buffer|uint8|json|base64 (default text), and the optional is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz)."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"}],"description":"A pipeline step - either a plain operation, a map (iteration), or a choice (conditional).","title":"PipelineAnyStep"},"description":"Ordered list of CAD operations executed sequentially. Later steps can reference earlier results using '$ref:N' syntax. Supports map and choice control-flow steps."},"inputFiles":{"description":"References to previously uploaded files. Use '$file:N' in step params to inject file contents (optionally '$file:N::' to pick a read format and/or decompress - see PipelineStep.params).","maxItems":5,"type":"array","items":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"description":"ID of a previously uploaded file (from POST /files/upload)"},"role":{"type":"string","minLength":1,"description":"Role identifier for the file (e.g. 'step-model', 'coordinates-csv')"}},"required":["fileId","role"],"additionalProperties":false,"description":"Reference to an uploaded file to be used as input","title":"InputFileItem"}},"outputs":{"description":"Output format options applied to the final pipeline result. Supports json, csv, stl, 3mf in addition to standard formats. If omitted, raw result data is stored.","type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf","json","csv","stl","3mf"],"description":"Pipeline output file format. Includes all standard formats plus: 'json' (JSON data), 'csv' (CSV text), 'stl' (binary STL mesh - Manifold/JSCAD only), '3mf' (3MF mesh package - Manifold/JSCAD only).","title":"PipelineOutputFormat"},"description":"Output formats to generate. Supports standard CAD formats (step, stpz, gltf, decomposed-mesh) plus pipeline-specific formats (json, csv, stl, 3mf)."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"},"includePipelineInMetadata":{"description":"Include the full pipeline definition in metadata.json. Defaults to true. Set to false to exclude it for smaller metadata.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"title":"PipelineOutputOptions"}},"required":["steps"],"additionalProperties":false,"description":"Execute a chain of Bitbybit CAD operations sequentially. Supports $ref:N step references, $file:N file inputs, map iteration, and choice conditionals.","title":"PipelineBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cad-execute-a-chained-pipeline.StatusCodes.json b/docs/api/openapi-docs/cad-execute-a-chained-pipeline.StatusCodes.json
new file mode 100644
index 00000000..111cf128
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-a-chained-pipeline.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cad-execute-a-chained-pipeline.api.mdx b/docs/api/openapi-docs/cad-execute-a-chained-pipeline.api.mdx
new file mode 100644
index 00000000..86569b61
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-a-chained-pipeline.api.mdx
@@ -0,0 +1,70 @@
+---
+id: cad-execute-a-chained-pipeline
+title: "CAD - execute a chained pipeline"
+description: "Runs multiple operations sequentially. Use '$ref:N' in params to reference step N's result."
+sidebar_label: "CAD - execute a chained pipeline"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Runs multiple operations sequentially. Use '$ref:N' in params to reference step N's result.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-single-cad-operation.RequestSchema.json b/docs/api/openapi-docs/cad-execute-a-single-operation.RequestSchema.json
similarity index 54%
rename from docs/api/openapi-docs/execute-a-single-cad-operation.RequestSchema.json
rename to docs/api/openapi-docs/cad-execute-a-single-operation.RequestSchema.json
index b012dfd7..d096ead1 100644
--- a/docs/api/openapi-docs/execute-a-single-cad-operation.RequestSchema.json
+++ b/docs/api/openapi-docs/cad-execute-a-single-operation.RequestSchema.json
@@ -1 +1 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createBox', 'manifold.primitives.cube', 'jscad.booleans.union'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation-specific parameters — varies by operation. See model definitions for available parameters."}},"required":["operation"],"additionalProperties":false,"description":"Execute a single Bitbybit CAD operation. The operation runs asynchronously and returns a task ID for polling.","title":"ExecuteBody"}}}}}
\ No newline at end of file
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createBox', 'manifold.primitives.cube', 'jscad.booleans.union'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation-specific parameters - varies by operation. See model definitions for available parameters."}},"required":["operation"],"additionalProperties":false,"description":"Execute a single Bitbybit CAD operation. The operation runs asynchronously and returns a task ID for polling.","title":"ExecuteBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cad-execute-a-single-operation.StatusCodes.json b/docs/api/openapi-docs/cad-execute-a-single-operation.StatusCodes.json
new file mode 100644
index 00000000..111cf128
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-a-single-operation.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cad-execute-a-single-operation.api.mdx b/docs/api/openapi-docs/cad-execute-a-single-operation.api.mdx
new file mode 100644
index 00000000..15b02962
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-a-single-operation.api.mdx
@@ -0,0 +1,70 @@
+---
+id: cad-execute-a-single-operation
+title: "CAD - execute a single operation"
+description: "Runs a single CAD operation by its fully-qualified identifier."
+sidebar_label: "CAD - execute a single operation"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Runs a single CAD operation by its fully-qualified identifier.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cad-execute-compound-parallel-operations.RequestSchema.json b/docs/api/openapi-docs/cad-execute-compound-parallel-operations.RequestSchema.json
new file mode 100644
index 00000000..cd2b12e6
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-compound-parallel-operations.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"parallel":{"type":"boolean","const":true,"description":"Must be true - signals that items should be processed concurrently"},"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier. Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation-specific parameters for this sub-task"},"inputFiles":{"description":"References to previously uploaded files to be used as inputs for this operation","type":"array","items":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"description":"ID of a previously uploaded file (from POST /files/upload)"},"role":{"type":"string","minLength":1,"description":"Role identifier for the file (e.g. 'step-model', 'coordinates-csv')"}},"required":["fileId","role"],"additionalProperties":false,"description":"Reference to an uploaded file to be used as input","title":"InputFileItem"}},"outputFormats":{"description":"Per-item output format overrides. If omitted, the task produces raw result data.","maxItems":10,"type":"array","items":{"type":"string","minLength":1}}},"required":["operation"],"additionalProperties":false,"description":"A single operation within a compound (parallel) task. Each item runs independently.","title":"CompoundItem"},"description":"List of independent CAD operations to execute in parallel. Each item becomes a sub-task."}},"required":["parallel","items"],"additionalProperties":false,"description":"Execute multiple independent Bitbybit CAD operations in parallel. Each item runs as a separate sub-task and can be polled individually.","title":"CompoundExecuteBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-compound-parallel-cad-operations.StatusCodes.json b/docs/api/openapi-docs/cad-execute-compound-parallel-operations.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/execute-compound-parallel-cad-operations.StatusCodes.json
rename to docs/api/openapi-docs/cad-execute-compound-parallel-operations.StatusCodes.json
diff --git a/docs/api/openapi-docs/cad-execute-compound-parallel-operations.api.mdx b/docs/api/openapi-docs/cad-execute-compound-parallel-operations.api.mdx
new file mode 100644
index 00000000..719ab737
--- /dev/null
+++ b/docs/api/openapi-docs/cad-execute-compound-parallel-operations.api.mdx
@@ -0,0 +1,70 @@
+---
+id: cad-execute-compound-parallel-operations
+title: "CAD - execute compound (parallel) operations"
+description: "Runs multiple independent operations in parallel."
+sidebar_label: "CAD - execute compound (parallel) operations"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Runs multiple independent operations in parallel.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cancel-a-task.api.mdx b/docs/api/openapi-docs/cancel-a-task.api.mdx
deleted file mode 100644
index 50f7aea3..00000000
--- a/docs/api/openapi-docs/cancel-a-task.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: cancel-a-task
-title: "Cancel a task"
-description: "Cancels a waiting or queued task. Has no effect on completed/failed tasks."
-sidebar_label: "Cancel a task"
-hide_title: true
-hide_table_of_contents: true
-api: eJy9Vt9vGzcM/lcIPrWDbCddn+7NS5zVWJcYdjoMCIxClmhbzVm66odTw7j/faDuLnHsdE2BYU/23VHkR/L7SO0xylXA4g5vZbgPOBeoKShvqmicxQIvpFVUBpDwIE00dgXOw9dEiTREGe778EEGsA5ouSQVwVlQblOVFEkPltKUrV3oo8BKermhSJ4j7tHKDWGB/HmsUaDhgJWMaxTo6WsynjQW0ScSGNSaNhKLPcZdxadC9MauUODS+Y2MWGBKRmN9nADnBeNLrOfsNFTOBgrs593ZGf+8YK1yziUxJuVsJBvZUlZVaZRky8GXwOb7U1hu8YVU5Fy9q8hH0wRz9wc2C+dKkrbxHmKTIgOX8RWuntD92GPlaWtcCrMoYwovVe95+o0dLGjpPHV1yBljXR825Q4Pi3QUZi5Qam34mCwnB+CXsgx0wjBnl4ZbaJyFuJYRZGYMPMgAISlFISxTWe6e9SWaWNIjP6cUUhlPMLp7bKv6c5BmTVTo+AJL5xtMz0pyjILJM22PYF0zmvdn709Jdu0iLF2y/xu/cpK1QPLe+VcwzGn6MVf+lGptLPU8SS0XJUH2DvmwQPomeQpggX8NP44vh7fjm+vPo+n0ZsoS3VAIcvWKIB/SRtrjEN3prPUoTRlOa3xTNb2GEH1SMXnSjwBtpG8RW65QiGN9en7afILxZdN8L1WD7zneE1U02XcIf5J2x1CNbYYbK+PBxDVsjmvO8UBaDa7LV9MirVY8qLtEn2g6Yq+XuWQva6UhyM+illZL32Emu6XSVXQc9pkwMgXi2mksUBMvi7wd4hoLHMjKDLbng7w1BvtmO9QoMJDfdqsj+RILXMdYhWLAJ/oLExe7hYl9TdsTGk2800k1c2zOnlTyJu6yq2Fl/qDdMHHwu/nh5xmLr5HEodEjZ2V+2S2uNUlNHkW31v7uDSfjXmNwVDHlKtIwnIzhnnZ9yM+hgI3TVAYBSmrB3duSjwJ+gTcPptRKev22D0M+ksngUoS4JuiaCIHdgCdFZksB3p/9CuPr2aerq/HFeHR9+3l2cTMZ9XPjmVg5kbZDv7XFg4vhJVyULmV0KJAL3oA+75/1353q06zWvYp85qlVBO2K90ZlXzklWJEl39B4OBn3YZaqyvkYYJPKaHoNycGlWKUIb2a3o4mA3z/eXgnQxLcJF0iz6tdvBVSmotJYAvpGKrFPAUtTUm8h2aopW8ivWRcy7KyCL24BlXc81I1d9du5K1Weu22/uhqgOGLXM2bVAiP5TbhZzshvjaLvGA6yVU9a3VPONmIKKLA0ilgFT3FZYN5QlH73r6Ff9sjdrFyIG2kPfDb7qF2kx03bPy2d//Z618qCh86gKqWxXK2c0L4V9x1rhml1zub5ximwaC+Ac4Frx+vqDvd77uYnX9Y1v/6ayLNY5wK30huefFm62gT+r1+eTId5vpm2KnkL3YXwO3g7bVvuxlaWiZ9Q4D3tnu6q9bwWneAZSPNxqBRV8eDYyUbn6fI4+C5HH0e3I6zrfwBgzgE1
-sidebar_class_name: "delete api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Cancels a waiting or queued task. Has no effect on completed/failed tasks.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.RequestSchema.json b/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.RequestSchema.json
deleted file mode 100644
index 5f1b73ef..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"options":{"description":"Advanced conversion settings. If omitted, sensible defaults are used.","type":"object","properties":{"readColors":{"description":"Extract color attributes from the STEP file and apply to glTF materials","type":"boolean"},"readNames":{"description":"Extract product/instance names from the STEP file and apply to glTF node names","type":"boolean"},"readMaterials":{"description":"Extract material definitions from the STEP file","type":"boolean"},"readLayers":{"description":"Extract layer/group structure from the STEP file","type":"boolean"},"readProps":{"description":"Extract custom properties (e.g. part numbers, metadata) from the STEP file","type":"boolean"},"meshDeflection":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%) so deflection auto-scales with feature size. When false, it is absolute in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection for mesh tessellation (radians) — controls curvature approximation","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshParallel":{"description":"Enable parallel tessellation for faster processing","type":"boolean"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshDeflection is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"},"faceCountThreshold":{"description":"Face count threshold for per-sub-shape meshing fallback. Default -1 means single-pass meshing of the whole compound (fastest). Set to a positive value (e.g. 100000) to fall back to per-solid meshing for very large assemblies in memory-constrained environments.","type":"integer","minimum":-1,"maximum":500000},"mergeFaces":{"description":"Merge co-planar adjacent faces to reduce mesh complexity","type":"boolean"},"splitIndices16":{"description":"Split meshes so each uses 16-bit index buffers (max 65535 vertices per mesh). Improves compatibility with some renderers.","type":"boolean"},"parallelWrite":{"description":"Write glTF output in parallel for faster file generation","type":"boolean"},"embedTextures":{"description":"Embed texture data directly in the .glb file instead of referencing external URIs","type":"boolean"},"forceUVExport":{"description":"Generate UV coordinates even when no textures are present (useful for post-processing)","type":"boolean"},"nodeNameFormat":{"description":"Strategy for naming glTF nodes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"meshNameFormat":{"description":"Strategy for naming glTF meshes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"transformFormat":{"description":"Transform representation in glTF: 'compact' (default), 'mat4' (4x4 matrix), or 'trs' (translation/rotation/scale)","type":"string","enum":["compact","mat4","trs"],"title":"GltfTransformFormat"},"adjustZtoY":{"description":"Convert from Z-up (CAD convention) to Y-up (glTF/WebGL convention) coordinate system","type":"boolean"},"scale":{"description":"Uniform scale factor applied to the entire model (e.g. 0.001 to convert mm to meters)","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"}},"additionalProperties":false,"title":"ConvertAdvancedOptions"},"draco":{"description":"Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).","type":"object","properties":{"useDraco":{"description":"Apply Draco geometry compression to the glTF output. Defaults to true for the *-with-draco endpoints.","type":"boolean"},"dracoCompressionLevel":{"description":"Draco compression level (0 = fastest/largest, 10 = slowest/smallest). Typical good default is 7.","type":"integer","minimum":0,"maximum":10},"dracoQuantizePositionBits":{"description":"Quantization bits for vertex positions (higher = more precise, larger file). Typical: 14.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeNormalBits":{"description":"Quantization bits for normal vectors. Typical: 10.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeTexcoordBits":{"description":"Quantization bits for texture coordinates. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeColorBits":{"description":"Quantization bits for vertex colors. Typical: 8.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeGenericBits":{"description":"Quantization bits for generic vertex attributes. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoUnifiedQuantization":{"description":"Use unified quantization across all meshes (better when meshes share a coordinate frame).","type":"boolean"}},"additionalProperties":false,"title":"DracoCompressionOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to Draco-compressed glTF with full control over tessellation, naming, coordinate systems, output format, and Draco quantization.","title":"StepToGltfAdvancedWithDracoBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.StatusCodes.json b/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.StatusCodes.json
deleted file mode 100644
index 56101115..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.api.mdx b/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.api.mdx
deleted file mode 100644
index e5951d7d..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: convert-a-step-file-to-draco-compressed-gltf-glb-advanced-options
-title: "Convert a STEP file to Draco-compressed GLTF (.glb) - advanced options"
-description: "Full-control STEP → glTF conversion with Draco geometry compression. Combines fine-grained mesh, export, and coordinate options with Draco quantization controls. Requires the 'convert' API key scope. Returns 202 with a task ID."
-sidebar_label: "Convert a STEP file to Draco-compressed GLTF (.glb) - advanced options"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Full-control STEP → glTF conversion with Draco geometry compression. Combines fine-grained mesh, export, and coordinate options with Draco quantization controls. Requires the 'convert' API key scope. Returns 202 with a task ID.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.RequestSchema.json b/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.RequestSchema.json
deleted file mode 100644
index 138fc3d2..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"meshPrecision":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection in radians for mesh tessellation — controls curvature approximation. Smaller values produce smoother curved surfaces.","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"},"draco":{"description":"Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).","type":"object","properties":{"useDraco":{"description":"Apply Draco geometry compression to the glTF output. Defaults to true for the *-with-draco endpoints.","type":"boolean"},"dracoCompressionLevel":{"description":"Draco compression level (0 = fastest/largest, 10 = slowest/smallest). Typical good default is 7.","type":"integer","minimum":0,"maximum":10},"dracoQuantizePositionBits":{"description":"Quantization bits for vertex positions (higher = more precise, larger file). Typical: 14.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeNormalBits":{"description":"Quantization bits for normal vectors. Typical: 10.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeTexcoordBits":{"description":"Quantization bits for texture coordinates. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeColorBits":{"description":"Quantization bits for vertex colors. Typical: 8.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeGenericBits":{"description":"Quantization bits for generic vertex attributes. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoUnifiedQuantization":{"description":"Use unified quantization across all meshes (better when meshes share a coordinate frame).","type":"boolean"}},"additionalProperties":false,"title":"DracoCompressionOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to Draco-compressed glTF with default settings. Upload the STEP file first, then pass its ID here.","title":"StepToGltfWithDracoBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.StatusCodes.json b/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.StatusCodes.json
deleted file mode 100644
index 56101115..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.api.mdx b/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.api.mdx
deleted file mode 100644
index 631d2fa6..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-draco-compressed-gltf-glb.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: convert-a-step-file-to-draco-compressed-gltf-glb
-title: "Convert a STEP file to Draco-compressed GLTF (.glb)"
-description: "STEP → glTF conversion with Draco geometry compression using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID."
-sidebar_label: "Convert a STEP file to Draco-compressed GLTF (.glb)"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-STEP → glTF conversion with Draco geometry compression using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.RequestSchema.json b/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.RequestSchema.json
deleted file mode 100644
index 0a814c79..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"options":{"description":"Advanced conversion settings. If omitted, sensible defaults are used.","type":"object","properties":{"readColors":{"description":"Extract color attributes from the STEP file and apply to glTF materials","type":"boolean"},"readNames":{"description":"Extract product/instance names from the STEP file and apply to glTF node names","type":"boolean"},"readMaterials":{"description":"Extract material definitions from the STEP file","type":"boolean"},"readLayers":{"description":"Extract layer/group structure from the STEP file","type":"boolean"},"readProps":{"description":"Extract custom properties (e.g. part numbers, metadata) from the STEP file","type":"boolean"},"meshDeflection":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%) so deflection auto-scales with feature size. When false, it is absolute in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection for mesh tessellation (radians) — controls curvature approximation","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshParallel":{"description":"Enable parallel tessellation for faster processing","type":"boolean"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshDeflection is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"},"faceCountThreshold":{"description":"Face count threshold for per-sub-shape meshing fallback. Default -1 means single-pass meshing of the whole compound (fastest). Set to a positive value (e.g. 100000) to fall back to per-solid meshing for very large assemblies in memory-constrained environments.","type":"integer","minimum":-1,"maximum":500000},"mergeFaces":{"description":"Merge co-planar adjacent faces to reduce mesh complexity","type":"boolean"},"splitIndices16":{"description":"Split meshes so each uses 16-bit index buffers (max 65535 vertices per mesh). Improves compatibility with some renderers.","type":"boolean"},"parallelWrite":{"description":"Write glTF output in parallel for faster file generation","type":"boolean"},"embedTextures":{"description":"Embed texture data directly in the .glb file instead of referencing external URIs","type":"boolean"},"forceUVExport":{"description":"Generate UV coordinates even when no textures are present (useful for post-processing)","type":"boolean"},"nodeNameFormat":{"description":"Strategy for naming glTF nodes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"meshNameFormat":{"description":"Strategy for naming glTF meshes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"transformFormat":{"description":"Transform representation in glTF: 'compact' (default), 'mat4' (4x4 matrix), or 'trs' (translation/rotation/scale)","type":"string","enum":["compact","mat4","trs"],"title":"GltfTransformFormat"},"adjustZtoY":{"description":"Convert from Z-up (CAD convention) to Y-up (glTF/WebGL convention) coordinate system","type":"boolean"},"scale":{"description":"Uniform scale factor applied to the entire model (e.g. 0.001 to convert mm to meters)","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"}},"additionalProperties":false,"title":"ConvertAdvancedOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to glTF with full control over tessellation, naming, coordinate systems, and output format.","title":"StepToGltfAdvancedBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.StatusCodes.json b/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.StatusCodes.json
deleted file mode 100644
index 56101115..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.api.mdx b/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.api.mdx
deleted file mode 100644
index 4d94f374..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb-advanced-options.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: convert-a-step-file-to-gltf-glb-advanced-options
-title: "Convert a STEP file to GLTF (.glb) - advanced options"
-description: "Full-control STEP → glTF conversion with fine-grained mesh, export, and coordinate options. Requires the 'convert' API key scope. Returns 202 with a task ID."
-sidebar_label: "Convert a STEP file to GLTF (.glb) - advanced options"
-hide_title: true
-hide_table_of_contents: true
-api: eJztWutuG7kVfpUDAoWlYiTLSZx2BfSH15dUaBIbvmS7GwQLanhGYsIhJ7zIVg0D/dUHKPqE+yTFIWekkTRxkkVRoN34lzU8w3Phd66ce+b5zLHxW3Zs9AKtZ+8yJtDlVlZeGs3G7CwoNciN9tYouLo+vYBf/vFPmKnrM8jjO04aDbfSz6GQGgczy6VGASW6eQZ4VxnrM+BaQG6MFVJzj2Di7m4Il/gxSIsO/BxhL23o9+DoYgIfcAkuNxUSlQ9WO3gyepI4cfDcfYDJyZBlzOLHgM5/b8SSje/jT2lRsLG3ATNGsqP2tMSrSsmcE+/9947Uu2cun2PJ6T+/rJCNmZm+x9yzjFXWVGi9RBfpPFZnUuFEtGidt1LPWMZKqV+invk5Gx9sW3ByAqaIClYWF9IEp5YQKmW4QJFMWkiF0LNRTRQwXUby+DQRAmpRGal9nz1krDYfCbLJ6kgsuM5RtI/GofdSz9wQJgWYUnqPIgOH2smpQhBY8KC8A24RgkNBJn3cFBa5ODbK2A4JTu+85bmHnNaBe2/lNHh0UFhTRq3WChMo6EiW4E1CVMk9WsmVW8swNUYh16Q28X3NS3yEbWWNCLnfl9p5sgRoov8y5tqImv6T3F+t5PukBI0KZFipZTyoDv6fZPGSL/Exwypa359ZEypw3obcB4tfw+DCmuqxgwvOmxLWJw49HM6GUHHrQYdyitZlUKLngnve/1LOFA5OsFCYJ37b7F+hm4OSGrkly9V0Q/hhjjrGkktU3MsFgnRAjg29Grn9DPxcOnrOoSAdCPWmAOT5HFDMcM+Bis5ZqzIajkaH8CcYDQ9/1wdnWgyBB28GLucKXR3UkEcLO/k3rMUpuHKYgfSR59QZFTyC1FAagQqClt5BryyhMDaapd/yqWTCFDJkGUo2JnFGBxkr+V16cDDKGN7xslJIqwcZ89LT/9FKFxZzSZ7dmPVIz2hxJxboWVAb1ozy0Bvg0TlUKkZC6FkuJNeuD7/8/V9Qh3oHebCLpDqvKmvuZBnJP6NJW4+nw4NnB4ffPXl++PTwj9/94bunm4okuWslLrjlSqHqAKbmFKeqmmBTdtKo4M6jJcTm6FyKx90AbDC0y+TGpRMe8FuKg7YBW8t4FRKrvAFBTC6wCesvweAQrtBTzIkoigqsINTitommYadKUnu0mqs35Kg5uldGdOFACIiU0lhY1KSR7xQ9GY4OGkXUDQopUEm/hJ5T5hYtJQrfEtVViKLfLU6NnKtgaavHnD3GGqiM84OKOwc2hko9A28lJ1RQPcA9TIOaIUxxabSIMaZloF8hIIl1bIL213OLbm6U2BXtjKyQExH4hipuXKEduDAduDmvMJ47CVxwpaY8/zCEkxSNYHAAJXLtgJCoMCnYkNd1wO3cKOJSViZoAb2IYOf7K2xE48iIwAVXFOxi4DoY0V+/Ro8C4kw/omxGSbGWK531EhS3MwTuHJZTRdGcgIWlsUsq6pyvqzXUC2mNLlFvgI1wM9v08UHbww+jQNG77AzJdh2Z5RWtQW4GleKaW+DiPc9R+4g4R/JbFCFPRo1WUXgn/bLzDF2lpJ9oQSA+eL7L7IrW407oKLRHBwwOHRw8H0wpZGuBdzANRYGWojS/g+eHh08P165Bjk4b9IcwKStrFuiiVNzLqYzOERODMyUFCi3Qov2EhzZB6wcrfYdrxsep+DDBV4GkWwe6VmyLFcsMNdqtGNziheUUxTXeUcjuyu+0DD6tA+VuENJi7tWSuBIshzM1TayofEIuCK8WC7Soc0IV3qWAAzeXk+4iqTA2x5s3p7Hs3xXiRVIB4eZNqx1wgAvUcEthVZtGxlSRVhYdYaUXHBYhGSUFjlW473dKQtUcFYtnxpa8Q5QrT4LMlnFHzUvSb1UG1hVbLGl2SkrFp9iuUFdNAGryibcMyyqit36TUaRO77b+PbcXq+Wa8NxO1nT1syMtHn14pMV5zgvq25rc+kL5oqV5nft+lS1qP/q/Moa3XLvC2PJT1rhuCMBiDT/e5GSyypga1bLiud9rF6F7JffP9qD37O4ZNQFW3vUzMBb2vHV70ItsU9Wyb03acT8Wmv1HrFczogDM/TMitG5bvesthR4yxsX74PxP3vy4q17d6adD/WkQKugdH52kjlETTcwvP8YFUnf/B5y+eLmx3urk3dJ5LLtDNSnXUWppGY0blykHeCqBqDOn+GRiJCJGFusKaF20H9B6PSSAsqRfJXq0rv/Z+nq7wh6N1ka8qHPtVRT4IdpPxM6Nq4tW55vq/tVrtSGbnvu8bsofHrLWDOJte3Dw7jM7dx8Ub3WtTa+aWpOgVFOvg1mg3aiNs9qTs93jcmkgU+ecIsImJrBasyuP1bUhbDXKxeHKw0PSzVVGu5RjnoyedDgQzWZ4nmPlUbD/2ATGfGjRNDiLuzufhj0PGaPE9vmtaHrUPcjZwerHgGnYJAWhspBoY58UHKa+k+ovo1Jmcp774KJxLXorcUElgqP5CovJMQYcFoIU0UMieZcYtVLsY8AQbbg1UqLBAldJsJppj6tbvnSwl97Zg1AZDbnFaO3+mt+NVZ/XfNVu31y+3FCxzTJUgtI3a7WrbJ9Xcn9xsE90bv8+WfphxyvqE1jZoC3c17nJZTM1i/UDBwpm6cDcCoRDuCD5KbSs2MRYY6mCrqyZWXSu7QKE4WOyHYrLeIA7GpgPrIbb18n75+vrizjJbBypEXxb6NQbuqXOt3rblohHNe1lvVfto89Go123fMOVFCmTobXG/rc8M1qBCtTI9LOb5XUX+zg+X/F8TuNmmmjF+UDcHeLLbTi+OXo5OTm6npy//vn08vL8si6HHJ99AZM/h5LrbRbN2xRs0HPZNQxMuYCr9YROrATUVN+yh9XcetLRhV6mJZicJJ+zPN+Ya9TybkOy1r6R8OtwebUtqtQpYK3m++W2zYlfyiSNvgKnYTaj+rFRdI3XU9r1JJqs25kSQL5Waq4Ft43MqBeoTIXbbHf84+mu0SfahaKQuaR+I948fPOQbx7yG/WQw64McoWWqsxv2eObb/x2fSNCwM+NYGNGkyiCIKeL31XpW3eo+9T5DbwZzJQvBrzupKjSjW5E1+73LFAxzubeV268TxsMp9JPl1PphwIXO5iqxyTx9ucd7ZQHS6NS2uqokn/B5VEgWd6+ay9fkScm/2gTrQDM48M4jyFhkIvYQdNdKBuzvw6OLiaDRLBlPkqSormtH0L87capb3cZ5FxkTb+ewe+hdyuVyLkV/SEcxQt+QoYJPlbmzYmm3AsWc5Q0e302egqT11c3Z2eT48np6+ufr47PL06HEQUUay7X9/+njedu3tevPbR1c96+xU5fCrTul9cPWle+64fNJe36SX2rmh5sX3bGO7zWVd1o+85r/dr6iio9677jWX/Z0H3hkta77jtGm7P6RLg9VE9Pt4bX6eHWlLlmtDn1TQ+3B7CrSeD2NHK1sDOZa42/2hOtWug0Xho9xJuwwkQ81177fe1DsRk8ViZEkLKM1R9FsDE7GI6GT3ZjtpzNBxXaGLtovklGKKmVz+NeaSK1nsTTtkO4ChVp7qAMystBCnzNeKVH05sMXry8PstAYLz1cfUHMv0MKlkh3XsD3mEe0uCGRj2DKXcbH3KkmU3qB9+baasnHNa5mCw1vm/ctrEBy7aCzEaAoYEo2tKdF5TcZY6fINyPVAOuBd0bpQBLXbuSOVJkXPMlT7ASPbfLR1l370inSVG15Lq15ydGYWRT6NG1RR8G0ETY5uui7cO9Xxcs/wNfNdWhmbLgfqW4jCPVkEY3Kd+8pbhNmD5I5x+/38pYd9Z5l7E5JavxW3Z/T9C6serhgR5/DGgpgbzL2IJbSak55o+sSQSUWz7gMh0D2W9wvYw5Ml5NxvSxVfw9ZM0baT7xKO27Vj69OL+6Zhmb1p9ylTHYMctv6TMvfsvGbCuG07N7priehViTsbQn/f0b3herkw==
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Full-control STEP → glTF conversion with fine-grained mesh, export, and coordinate options. Requires the 'convert' API key scope. Returns 202 with a task ID.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.RequestSchema.json b/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.RequestSchema.json
deleted file mode 100644
index 5578a3a9..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"meshPrecision":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection in radians for mesh tessellation — controls curvature approximation. Smaller values produce smoother curved surfaces.","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to glTF format with default settings. Upload the STEP file first, then pass its ID here.","title":"StepToGltfBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.StatusCodes.json b/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.StatusCodes.json
deleted file mode 100644
index 56101115..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.api.mdx b/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.api.mdx
deleted file mode 100644
index be85406b..00000000
--- a/docs/api/openapi-docs/convert-a-step-file-to-gltf-glb.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: convert-a-step-file-to-gltf-glb
-title: "Convert a STEP file to GLTF (.glb)"
-description: "Simple STEP → glTF conversion using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID."
-sidebar_label: "Convert a STEP file to GLTF (.glb)"
-hide_title: true
-hide_table_of_contents: true
-api: eJztWdtuI7kR/ZUCgcB20GrLnnGSEZAHrS+7QmbGgiRPAhjGgmqWJI7ZZJsX2YohIE/5gCBfuF8SFNmSWpJ3ZgwEQYAdP1nqIll16tSpZumZeT51rHPLzo2eo/XsLmMCXWFl5aXRrMOGsqwUwnB02Ydf/vkvmKrRFRTR2kmjITipp8ChsjiXJji1gFApwwUKmEiFOQzwIUiLDvwM4SAt9QfQ7ffgHhfgClNFKx+sdnDaPoVH6WfAwXN3D72LnGXM4kNA538wYsE6z/GjtChYx9uAGSuM9qg9PeJVpWTByfvjz45CeGaumGHJ6T+/qJB1mBl/xsKzjFXWVGi9RBftPFZXUmFPNGydt1JPWcZKqd+jnvoZ65zsotS7ADOJAb6EQwSPwIBDG8NEAeNFNI/fJkNALSojtT9iy4yV6GZ9i4V0MgWxfeAHdDNQUiO3IHCisKAHOfx1hhpo7QAV93KOIB0QSHAocMKD8kcZ+Jl09D2HieVxIXmPvJgBiikeOFAxUDjEfJpDO2+3z+DP0M7PfndUHzHhymEG0sd9NPCxMyp4hDlXAUFqKI1ABUFL7+CwLGFibATiiPJZY6tDOUabsJVlKFmHzmqfZKzkT+mLk3bG8IkTCenpSca89PR/hGCDUA1ZV0/p4S5cXT0NagsqctFyIbl20TVaDB6dQ6Uie+CXf/ybiO6tUQ6KYOfcB4vAq8qaJ1nyBPiw5EqhTXE7qKwRoUBwpTF+hjYuRAEu2Akv0H0t+Gbob/KTtydn707/cPbm7E/v/vjuzXbsKdQ67lW690O/cQhO/h1b/JFbBLviRQOKCi2Qd3VuY03BFgG/hS05DNGDN4kbEdQ1K7Zxb1CjgcfYGIU8ZlJqj1Zz9Ylqs0D3wYiXkioEREtpLMxr03juGL3fYE+hwUQKVNIv4NAp84g2A4e+4aqrEMXRy+7ULBimHF6sY9l36fLJWw6Vcb5VcefA4kRqEkhvJad8kQpyD+OgpghjXBgtog40AHq1g8usIYi3TRW7yxgXQtK2XPUbWpfKd8f5ugcAbwiWN0nxJ8aW3CdlroWE/PNST10ON0nAKJDN0om0zpPYoIYIBilB7wJmaDGGUXN56LEamR+Vn0R5Xy5TQK4y2iVdPm2f7kM9ou7AiwIrj4L913qAuW/YrCCOuzuf2s0yY4L7b9iK+tfLrWSnQrV8CJjanRSovZxItFF/gsOk1t5AZZRKTPDcB1JdARa9lTinsnZBeccyljLFOiwEKYi9yfwlN+qg2EPAEDHcaWpaeslVcqw+9JCrR75wcJDWHECojIbCYkT7aHPejVVfj3zdpG4G77dCbB4ZKsE9UmjrPsCOeSWP5yfHZOeOnxPSy71SqDOwxqDp3OtqY7Dq249EZw7n3Ys6YW5Nwhz65D9VwfoYispbXtxTZ5hadK5JfeLwOWGHYhATuBeBuWc13V7n70+jUT++S60KaeX4rtNJp91CF+Rhgc6lRDVd7Na2g3qvukbfttv7ZfmJKylSA0Vrjf1fVWZEYZmxdOhXNyvqjvJlfn7gxUxqbFnkgo8VppAgLm7S8VP3fe+iO+pdf/z5cjC4HtRd2fHpNxzyUyi53j1itZrEBj2Xyu1DfV0lMoDzNhT0ciLWDmqPT54t12/OSYd2OR0fkSbHmrO8qHO/5e8uJevoVx6+jpfDXVelToJFhIndpdzFnM6LYmdW8Qoch+mU2uoq0A1fL2nXiwjZy8WUCPJar7kW3K58Rj1HZSrcPXavPt7sg97TLkwmspCofbr7fK+Q7xXyG62Qs5c6yBDtHO337vG9Nn7DtREp4GdGsA6j6yRRkNPoaf3qWw/Sjum61/KmNVV+Qi+4sXpopvfMAr2Ds5n3lesc07p8LP14MZY+Fzjfo1I/zi7ih+Ud7VQEK/0ibtWt5F9w0Q3kwu1d8/GQCjCVRdNozVsev2R0qSdnkIs49NC8pKd/a3X7vVYy2EGNeqNYjQlziJ9dJw0PXAYFF1k9iPQZ/B4OH6USBbfiKIdunCwSIUzw8YV8lcjUcsFigXKODt6230Dv4/Dm6qp33rv8OPp5eH7dv8xj8kliBpvB4+WqYLcHhY0B4fbILg6rGjOp9u6kJs0uX551bOaaLw8e6oso8T9iXRPphzq/8X5yrkyIALKM1eNa1mEneTs/3ZcROZ21KrSxnHSBUHHLS7pdFnGvNLKZokabqq3b7+UwDFVlrHdQBuVlqx4SmOCr4OGQRgEZ/Ph+dJWBwMKUlXEo4mDpKINKVkgDTMAnLALtmcW5QWvMyWozYs5i+aYrymczblxT8ro98CK2h5pSKwxYtlMAW+RfZsyjLd31hPqNLPBXDI+jVYtr0SqMTjVPF0klC6Ri3ZxLOmAlem4XXzz65R2JcFToJdeNPX9lJEOYwmE+VeOj3Uw+bxrm/8nsvtYBUtrjSnEZR2ohjQeSpt2SSBBJT1JC4y8RGdtStruMzUgHO7fs+ZkocmPVcklfPwS0JFJ3GZtzK0n1o0ZlK7Eh/brHRYKToGmNFlF+48w2StTOe8UyW61IV98v2t41pLp/PRyxjI3r3ynKWMvM8kf6DYM/sg5jGUudKCpm/O6ZKa6nIbZ7lvakv/8A+Sz6EQ==
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Simple STEP → glTF conversion using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.RequestSchema.json b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.RequestSchema.json
new file mode 100644
index 00000000..29616016
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"options":{"description":"Advanced conversion settings. If omitted, sensible defaults are used.","type":"object","properties":{"readColors":{"description":"Extract color attributes from the STEP file and apply to glTF materials","type":"boolean"},"readNames":{"description":"Extract product/instance names from the STEP file and apply to glTF node names","type":"boolean"},"readMaterials":{"description":"Extract material definitions from the STEP file","type":"boolean"},"readLayers":{"description":"Extract layer/group structure from the STEP file","type":"boolean"},"readProps":{"description":"Extract custom properties (e.g. part numbers, metadata) from the STEP file","type":"boolean"},"meshDeflection":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%) so deflection auto-scales with feature size. When false, it is absolute in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection for mesh tessellation (radians) - controls curvature approximation","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshParallel":{"description":"Enable parallel tessellation for faster processing","type":"boolean"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshDeflection is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"},"faceCountThreshold":{"description":"Face count threshold for per-sub-shape meshing fallback. Default -1 means single-pass meshing of the whole compound (fastest). Set to a positive value (e.g. 100000) to fall back to per-solid meshing for very large assemblies in memory-constrained environments.","type":"integer","minimum":-1,"maximum":500000},"mergeFaces":{"description":"Merge co-planar adjacent faces to reduce mesh complexity","type":"boolean"},"splitIndices16":{"description":"Split meshes so each uses 16-bit index buffers (max 65535 vertices per mesh). Improves compatibility with some renderers.","type":"boolean"},"parallelWrite":{"description":"Write glTF output in parallel for faster file generation","type":"boolean"},"embedTextures":{"description":"Embed texture data directly in the .glb file instead of referencing external URIs","type":"boolean"},"forceUVExport":{"description":"Generate UV coordinates even when no textures are present (useful for post-processing)","type":"boolean"},"nodeNameFormat":{"description":"Strategy for naming glTF nodes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"meshNameFormat":{"description":"Strategy for naming glTF meshes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"transformFormat":{"description":"Transform representation in glTF: 'compact' (default), 'mat4' (4x4 matrix), or 'trs' (translation/rotation/scale)","type":"string","enum":["compact","mat4","trs"],"title":"GltfTransformFormat"},"adjustZtoY":{"description":"Convert from Z-up (CAD convention) to Y-up (glTF/WebGL convention) coordinate system","type":"boolean"},"scale":{"description":"Uniform scale factor applied to the entire model (e.g. 0.001 to convert mm to meters)","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"}},"additionalProperties":false,"title":"ConvertAdvancedOptions"},"draco":{"description":"Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).","type":"object","properties":{"useDraco":{"description":"Apply Draco geometry compression to the glTF output. Defaults to true for the *-with-draco endpoints.","type":"boolean"},"dracoCompressionLevel":{"description":"Draco compression level (0 = fastest/largest, 10 = slowest/smallest). Typical good default is 7.","type":"integer","minimum":0,"maximum":10},"dracoQuantizePositionBits":{"description":"Quantization bits for vertex positions (higher = more precise, larger file). Typical: 14.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeNormalBits":{"description":"Quantization bits for normal vectors. Typical: 10.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeTexcoordBits":{"description":"Quantization bits for texture coordinates. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeColorBits":{"description":"Quantization bits for vertex colors. Typical: 8.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeGenericBits":{"description":"Quantization bits for generic vertex attributes. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoUnifiedQuantization":{"description":"Use unified quantization across all meshes (better when meshes share a coordinate frame).","type":"boolean"}},"additionalProperties":false,"title":"DracoCompressionOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to Draco-compressed glTF with full control over tessellation, naming, coordinate systems, output format, and Draco quantization.","title":"StepToGltfAdvancedWithDracoBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.StatusCodes.json b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.api.mdx b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.api.mdx
new file mode 100644
index 00000000..23630431
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb-advanced-options.api.mdx
@@ -0,0 +1,70 @@
+---
+id: convert-step-to-draco-compressed-gl-tf-glb-advanced-options
+title: "Convert - STEP to Draco-compressed glTF (.glb), advanced options"
+description: "Full-control STEP → glTF conversion with Draco geometry compression. Combines fine-grained mesh, export, and coordinate options with Draco quantization controls. Requires the 'convert' API key scope. Returns 202 with a task ID."
+sidebar_label: "Convert - STEP to Draco-compressed glTF (.glb), advanced options"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Full-control STEP → glTF conversion with Draco geometry compression. Combines fine-grained mesh, export, and coordinate options with Draco quantization controls. Requires the 'convert' API key scope. Returns 202 with a task ID.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.RequestSchema.json b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.RequestSchema.json
new file mode 100644
index 00000000..cad8b635
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"meshPrecision":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection in radians for mesh tessellation - controls curvature approximation. Smaller values produce smoother curved surfaces.","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"},"draco":{"description":"Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).","type":"object","properties":{"useDraco":{"description":"Apply Draco geometry compression to the glTF output. Defaults to true for the *-with-draco endpoints.","type":"boolean"},"dracoCompressionLevel":{"description":"Draco compression level (0 = fastest/largest, 10 = slowest/smallest). Typical good default is 7.","type":"integer","minimum":0,"maximum":10},"dracoQuantizePositionBits":{"description":"Quantization bits for vertex positions (higher = more precise, larger file). Typical: 14.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeNormalBits":{"description":"Quantization bits for normal vectors. Typical: 10.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeTexcoordBits":{"description":"Quantization bits for texture coordinates. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeColorBits":{"description":"Quantization bits for vertex colors. Typical: 8.","type":"integer","minimum":0,"maximum":31},"dracoQuantizeGenericBits":{"description":"Quantization bits for generic vertex attributes. Typical: 12.","type":"integer","minimum":0,"maximum":31},"dracoUnifiedQuantization":{"description":"Use unified quantization across all meshes (better when meshes share a coordinate frame).","type":"boolean"}},"additionalProperties":false,"title":"DracoCompressionOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to Draco-compressed glTF with default settings. Upload the STEP file first, then pass its ID here.","title":"StepToGltfWithDracoBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.StatusCodes.json b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.api.mdx b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.api.mdx
new file mode 100644
index 00000000..6e33465b
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-draco-compressed-gl-tf-glb.api.mdx
@@ -0,0 +1,70 @@
+---
+id: convert-step-to-draco-compressed-gl-tf-glb
+title: "Convert - STEP to Draco-compressed glTF (.glb)"
+description: "STEP → glTF conversion with Draco geometry compression using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID."
+sidebar_label: "Convert - STEP to Draco-compressed glTF (.glb)"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+STEP → glTF conversion with Draco geometry compression using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.RequestSchema.json b/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.RequestSchema.json
new file mode 100644
index 00000000..36d66929
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"options":{"description":"Advanced conversion settings. If omitted, sensible defaults are used.","type":"object","properties":{"readColors":{"description":"Extract color attributes from the STEP file and apply to glTF materials","type":"boolean"},"readNames":{"description":"Extract product/instance names from the STEP file and apply to glTF node names","type":"boolean"},"readMaterials":{"description":"Extract material definitions from the STEP file","type":"boolean"},"readLayers":{"description":"Extract layer/group structure from the STEP file","type":"boolean"},"readProps":{"description":"Extract custom properties (e.g. part numbers, metadata) from the STEP file","type":"boolean"},"meshDeflection":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%) so deflection auto-scales with feature size. When false, it is absolute in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection for mesh tessellation (radians) - controls curvature approximation","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshParallel":{"description":"Enable parallel tessellation for faster processing","type":"boolean"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshDeflection is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"},"faceCountThreshold":{"description":"Face count threshold for per-sub-shape meshing fallback. Default -1 means single-pass meshing of the whole compound (fastest). Set to a positive value (e.g. 100000) to fall back to per-solid meshing for very large assemblies in memory-constrained environments.","type":"integer","minimum":-1,"maximum":500000},"mergeFaces":{"description":"Merge co-planar adjacent faces to reduce mesh complexity","type":"boolean"},"splitIndices16":{"description":"Split meshes so each uses 16-bit index buffers (max 65535 vertices per mesh). Improves compatibility with some renderers.","type":"boolean"},"parallelWrite":{"description":"Write glTF output in parallel for faster file generation","type":"boolean"},"embedTextures":{"description":"Embed texture data directly in the .glb file instead of referencing external URIs","type":"boolean"},"forceUVExport":{"description":"Generate UV coordinates even when no textures are present (useful for post-processing)","type":"boolean"},"nodeNameFormat":{"description":"Strategy for naming glTF nodes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"meshNameFormat":{"description":"Strategy for naming glTF meshes from STEP product/instance labels","type":"string","enum":["empty","product","instance","instanceOrProduct","productOrInstance","productAndInstance","productAndInstanceAndOcaf"],"title":"GltfNameFormat"},"transformFormat":{"description":"Transform representation in glTF: 'compact' (default), 'mat4' (4x4 matrix), or 'trs' (translation/rotation/scale)","type":"string","enum":["compact","mat4","trs"],"title":"GltfTransformFormat"},"adjustZtoY":{"description":"Convert from Z-up (CAD convention) to Y-up (glTF/WebGL convention) coordinate system","type":"boolean"},"scale":{"description":"Uniform scale factor applied to the entire model (e.g. 0.001 to convert mm to meters)","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"}},"additionalProperties":false,"title":"ConvertAdvancedOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to glTF with full control over tessellation, naming, coordinate systems, and output format.","title":"StepToGltfAdvancedBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.StatusCodes.json b/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.api.mdx b/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.api.mdx
new file mode 100644
index 00000000..78de2425
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-gl-tf-glb-advanced-options.api.mdx
@@ -0,0 +1,70 @@
+---
+id: convert-step-to-gl-tf-glb-advanced-options
+title: "Convert - STEP to glTF (.glb), advanced options"
+description: "Full-control STEP → glTF conversion with fine-grained mesh, export, and coordinate options. Requires the 'convert' API key scope. Returns 202 with a task ID."
+sidebar_label: "Convert - STEP to glTF (.glb), advanced options"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Full-control STEP → glTF conversion with fine-grained mesh, export, and coordinate options. Requires the 'convert' API key scope. Returns 202 with a task ID.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-gl-tf-glb.RequestSchema.json b/docs/api/openapi-docs/convert-step-to-gl-tf-glb.RequestSchema.json
new file mode 100644
index 00000000..75f063b4
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-gl-tf-glb.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint)"},"meshPrecision":{"description":"Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"meshAngle":{"description":"Angular deflection in radians for mesh tessellation - controls curvature approximation. Smaller values produce smoother curved surfaces.","type":"number","minimum":0.01,"maximum":3.141592653589793,"title":"MeshAngle"},"meshRelative":{"description":"Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.","type":"boolean"},"internalVerticesMode":{"description":"Add interior vertices for better curved face fidelity (slower, set false for speed).","type":"boolean"},"controlSurfaceDeflection":{"description":"Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).","type":"boolean"}},"required":["stepFileId"],"additionalProperties":false,"description":"Convert a STEP file to glTF format with default settings. Upload the STEP file first, then pass its ID here.","title":"StepToGltfBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-gl-tf-glb.StatusCodes.json b/docs/api/openapi-docs/convert-step-to-gl-tf-glb.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-gl-tf-glb.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/convert-step-to-gl-tf-glb.api.mdx b/docs/api/openapi-docs/convert-step-to-gl-tf-glb.api.mdx
new file mode 100644
index 00000000..495a172d
--- /dev/null
+++ b/docs/api/openapi-docs/convert-step-to-gl-tf-glb.api.mdx
@@ -0,0 +1,70 @@
+---
+id: convert-step-to-gl-tf-glb
+title: "Convert - STEP to glTF (.glb)"
+description: "Simple STEP → glTF conversion using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID."
+sidebar_label: "Convert - STEP to glTF (.glb)"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Simple STEP → glTF conversion using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/delete-a-file.api.mdx b/docs/api/openapi-docs/delete-a-file.api.mdx
deleted file mode 100644
index 14826221..00000000
--- a/docs/api/openapi-docs/delete-a-file.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: delete-a-file
-title: "Delete a file"
-description: "Permanently removes a file and its stored blob."
-sidebar_label: "Delete a file"
-hide_title: true
-hide_table_of_contents: true
-api: eJy9Vk1vGzcQ/SvEnOKCkpw0J91US26FprYgOUUBQwgociQx5pIMP5QIwv73YLi7tiw5TdJDT9LuzsebmfeGPEASmwjDe7jWBiMsOSiMMmiftLMwhBmGSli0yexZwMrtMDLB1togE1YxnSKLyQVUbGXcqg8cvAiiwoSBwh7AigphCOQxVcBBU1Qv0hY4BPyUdUAFwxQycohyi5WA4QHS3pNXTEHbDXBYu1CJBEPIWSuoT1ESeDYdQ72koNE7GzFSnDeXl/TzgrVCgwkJkXQ2oU1kJ7w3WgqyG3yMZHw4B+VWH1EmqjQ4jyHpJpV7OLJZOWdQ2CZ6TE2BBFukHwjVYftevPq4hfePbksOQilNVQgzO4q8Fibiae+unF1r6q52lqWtSEywgNHlIJF9FpHFLCXGuM7G7I/alnQyBG1c3swxZpPgFJJ7gLbonwO1aHKybphs7ULDugKAjE4R0FTnrTnUNSF5e/n2fPo3LrG1y/Z/G30psOaAIbjw/WDSKXxJAs+r+EvIrbbYCyiUWBlkJTorzhzwi6h86c3fo3fT8ehuenvzYTKf385JOxXGKDY/kOSPXAl7mqLzLiJMQpt43uNb38yZxRSyTJn2QwfQJvySoOUJxjRV5/7z5hObjsvgUxCywfcc7ynb2uo7hD9JuVOo2jZbh3TxWactq057TvnKGnRdvQpXebPRdvNY6BNNJxR1XFr2sk4agvwsamGVCB1mtDs0zuNp2mfCKBRIW6dg2O6MsrbTFoYwEF4Pdq8HpLU4ODRruwYOEcOu2+k5GBjCNiUfhwPy6K90Wu1XOvUV7s5oNAtOZVkeaEFHlDnotC+hRl7/iftRpuT3y+PPCxJfI4ljo0fOivKyO1G2KBQG4N15809vNJv2GoOTjknnUbHRbMoecN9n5TkOWeUUmsiZFIrT9HYYEme/sFeftVFSBHXRZyNyKWRwObG0RdYNkUUKwwJK1HRGvr38lU1vFu+vr6dX08nN3YfF1e1s0i+DJ2KVQtoJ/dY2j12NxuzKuFzQAQdqeAP6df+y/+Zcn3qz7XkMhadWImvP3qBliVVKYhu0GBoaj2bTPltk711IkVXZJN1rSM5cTj4n9mpxN5lx9vu7u2vOFEpXeRdRkeq3F5x57dFoiwy/oMwUk5e13FsJsmraFstr0oWIeyvZR7diPjha6Npu+u3eFbLs3XZeXQ+An7DrGbNqDglDFW/XCww7LfEbhoNi1RNW9aSzjZgicDBaIqngKS8JLGhMIuz/NfXLEWma3sVUCXsUszmP2mvS6dAOT4fOf7hctdynzTLwRmhLLSmoD62C70kYxJ3XdG0qlzoOw/b6teSwdXQm3cPhQCN7H0xd0+tPGQMpcslhJ4Km9Vb0qXSk/+rl9XNczKt5K4UL1l3HvoG3E7Cllu+EyfQEHB5w/3RTrJc171RNQJqPIynRpyO3s2ObVsjjdhtP3k3uJlDXXwEr68fh
-sidebar_class_name: "delete api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Permanently removes a file and its stored blob.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.RequestSchema.json b/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.RequestSchema.json
deleted file mode 100644
index d90455c0..00000000
--- a/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"steps":{"minItems":1,"maxItems":50,"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"map","description":"Declares this step as a map (iteration) step"},"items":{"description":"Source array to iterate over. Typically a '$ref:N' reference to a previous step that produced an array."},"steps":{"minItems":1,"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N' to reference an input file's contents."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"},"description":"Sub-steps to execute for each item. Use '$item' for the current element, '$index' for the iteration number."},"reduce":{"description":"Optional sub-steps to combine map results. Use '$mapResult' to reference the collected array of iteration outputs.","type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N' to reference an input file's contents."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"}}},"required":["type","items","steps"],"description":"Iterate over an array, executing sub-steps for each element. Produces an array of results (or a reduced value).","title":"MapStep"},{"type":"object","properties":{"type":{"type":"string","const":"choice","description":"Declares this step as a choice (conditional) step"},"value":{"description":"Value to compare. Typically a '$ref:N' reference to a previous step result."},"operator":{"description":"Comparison operator to apply between value and compareTo","type":"string","enum":["eq","neq","gt","gte","lt","lte","exists"],"title":"ComparisonOperator"},"compareTo":{"description":"Value to compare against. Not required for 'exists' operator."},"then":{"minItems":1,"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N' to reference an input file's contents."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"},"description":"Sub-steps to execute when condition is true"},"else":{"description":"Sub-steps to execute when condition is false. If omitted, produces null.","type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N' to reference an input file's contents."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"}}},"required":["type","value","operator","then"],"description":"Conditional execution — evaluate a condition and run the matching branch.","title":"ChoiceStep"},{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N' to reference an input file's contents."},"output":{"description":"When true, this step's result is included in a separate result.json output alongside any shape files.","type":"boolean"}},"required":["operation","params"],"description":"A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.","title":"PipelineStep"}],"description":"A pipeline step — either a plain operation, a map (iteration), or a choice (conditional).","title":"PipelineAnyStep"},"description":"Ordered list of CAD operations executed sequentially. Later steps can reference earlier results using '$ref:N' syntax. Supports map and choice control-flow steps."},"inputFiles":{"description":"References to previously uploaded files. Use '$file:N' in step params to inject file contents.","maxItems":5,"type":"array","items":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"description":"ID of a previously uploaded file (from POST /files/upload)"},"role":{"type":"string","minLength":1,"description":"Role identifier for the file (e.g. 'step-model', 'coordinates-csv')"}},"required":["fileId","role"],"additionalProperties":false,"description":"Reference to an uploaded file to be used as input","title":"InputFileItem"}},"outputs":{"description":"Output format options applied to the final pipeline result. Supports json, csv, stl, 3mf in addition to standard formats. If omitted, raw result data is stored.","type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf","json","csv","stl","3mf"],"description":"Pipeline output file format. Includes all standard formats plus: 'json' (JSON data), 'csv' (CSV text), 'stl' (binary STL mesh — Manifold/JSCAD only), '3mf' (3MF mesh package — Manifold/JSCAD only).","title":"PipelineOutputFormat"},"description":"Output formats to generate. Supports standard CAD formats (step, stpz, gltf, decomposed-mesh) plus pipeline-specific formats (json, csv, stl, 3mf)."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"},"includePipelineInMetadata":{"description":"Include the full pipeline definition in metadata.json. Defaults to true. Set to false to exclude it for smaller metadata.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"title":"PipelineOutputOptions"}},"required":["steps"],"additionalProperties":false,"description":"Execute a chain of Bitbybit CAD operations sequentially. Supports $ref:N step references, $file:N file inputs, map iteration, and choice conditionals.","title":"PipelineBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.StatusCodes.json b/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.StatusCodes.json
deleted file mode 100644
index e5f5f4a4..00000000
--- a/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.api.mdx b/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.api.mdx
deleted file mode 100644
index 0d793bba..00000000
--- a/docs/api/openapi-docs/execute-a-chained-pipeline-of-cad-operations.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: execute-a-chained-pipeline-of-cad-operations
-title: "Execute a chained pipeline of CAD operations"
-description: "Runs multiple operations sequentially. Use '$ref:N' in params to reference step N's result."
-sidebar_label: "Execute a chained pipeline of CAD operations"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Runs multiple operations sequentially. Use '$ref:N' in params to reference step N's result.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-parametric-cad-model.RequestSchema.json b/docs/api/openapi-docs/execute-a-parametric-cad-model.RequestSchema.json
deleted file mode 100644
index 5b2c48a9..00000000
--- a/docs/api/openapi-docs/execute-a-parametric-cad-model.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"Model-specific parameters. Omitted params use their defaults. See model definition for available options.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive — choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) — each produces a separate downloadable result. Do not include both 'step' and 'stpz' — only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["outputs"],"description":"Submit a parametric model for generation with specified parameters and output formats","title":"ModelSubmissionBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-parametric-cad-model.StatusCodes.json b/docs/api/openapi-docs/execute-a-parametric-cad-model.StatusCodes.json
deleted file mode 100644
index 95926563..00000000
--- a/docs/api/openapi-docs/execute-a-parametric-cad-model.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-parametric-cad-model.api.mdx b/docs/api/openapi-docs/execute-a-parametric-cad-model.api.mdx
deleted file mode 100644
index 4833169c..00000000
--- a/docs/api/openapi-docs/execute-a-parametric-cad-model.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: execute-a-parametric-cad-model
-title: "Execute a parametric CAD model"
-description: "Generic endpoint — works for any registered model. See model-specific endpoints for fully typed parameters. Always returns 202 with a task ID for polling."
-sidebar_label: "Execute a parametric CAD model"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Generic endpoint — works for any registered model. See model-specific endpoints for fully typed parameters. Always returns 202 with a task ID for polling.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-single-cad-operation.StatusCodes.json b/docs/api/openapi-docs/execute-a-single-cad-operation.StatusCodes.json
deleted file mode 100644
index e5f5f4a4..00000000
--- a/docs/api/openapi-docs/execute-a-single-cad-operation.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-single-cad-operation.api.mdx b/docs/api/openapi-docs/execute-a-single-cad-operation.api.mdx
deleted file mode 100644
index 342c43b6..00000000
--- a/docs/api/openapi-docs/execute-a-single-cad-operation.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: execute-a-single-cad-operation
-title: "Execute a single CAD operation"
-description: "Runs a single CAD operation by its fully-qualified identifier."
-sidebar_label: "Execute a single CAD operation"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Runs a single CAD operation by its fully-qualified identifier.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-compound-parallel-cad-operations.RequestSchema.json b/docs/api/openapi-docs/execute-compound-parallel-cad-operations.RequestSchema.json
deleted file mode 100644
index 1a1a237d..00000000
--- a/docs/api/openapi-docs/execute-compound-parallel-cad-operations.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"parallel":{"type":"boolean","const":true,"description":"Must be true — signals that items should be processed concurrently"},"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","minLength":1,"description":"Fully-qualified CAD operation identifier. Supports OCCT, Manifold, JSCAD, and vector/math operations."},"params":{"description":"Operation-specific parameters for this sub-task"},"inputFiles":{"description":"References to previously uploaded files to be used as inputs for this operation","type":"array","items":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"description":"ID of a previously uploaded file (from POST /files/upload)"},"role":{"type":"string","minLength":1,"description":"Role identifier for the file (e.g. 'step-model', 'coordinates-csv')"}},"required":["fileId","role"],"additionalProperties":false,"description":"Reference to an uploaded file to be used as input","title":"InputFileItem"}},"outputFormats":{"description":"Per-item output format overrides. If omitted, the task produces raw result data.","maxItems":10,"type":"array","items":{"type":"string","minLength":1}}},"required":["operation"],"additionalProperties":false,"description":"A single operation within a compound (parallel) task. Each item runs independently.","title":"CompoundItem"},"description":"List of independent CAD operations to execute in parallel. Each item becomes a sub-task."}},"required":["parallel","items"],"additionalProperties":false,"description":"Execute multiple independent Bitbybit CAD operations in parallel. Each item runs as a separate sub-task and can be polled individually.","title":"CompoundExecuteBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-compound-parallel-cad-operations.api.mdx b/docs/api/openapi-docs/execute-compound-parallel-cad-operations.api.mdx
deleted file mode 100644
index 4a6c46a0..00000000
--- a/docs/api/openapi-docs/execute-compound-parallel-cad-operations.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: execute-compound-parallel-cad-operations
-title: "Execute compound (parallel) CAD operations"
-description: "Runs multiple independent operations in parallel."
-sidebar_label: "Execute compound (parallel) CAD operations"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Runs multiple independent operations in parallel.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/confirm-file-upload.ParamsDetails.json b/docs/api/openapi-docs/files-confirm-upload.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/confirm-file-upload.ParamsDetails.json
rename to docs/api/openapi-docs/files-confirm-upload.ParamsDetails.json
diff --git a/docs/api/openapi-docs/cancel-a-task.RequestSchema.json b/docs/api/openapi-docs/files-confirm-upload.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/cancel-a-task.RequestSchema.json
rename to docs/api/openapi-docs/files-confirm-upload.RequestSchema.json
diff --git a/docs/api/openapi-docs/confirm-file-upload.StatusCodes.json b/docs/api/openapi-docs/files-confirm-upload.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/confirm-file-upload.StatusCodes.json
rename to docs/api/openapi-docs/files-confirm-upload.StatusCodes.json
diff --git a/docs/api/openapi-docs/confirm-file-upload.api.mdx b/docs/api/openapi-docs/files-confirm-upload.api.mdx
similarity index 75%
rename from docs/api/openapi-docs/confirm-file-upload.api.mdx
rename to docs/api/openapi-docs/files-confirm-upload.api.mdx
index 4bf4be90..3b816217 100644
--- a/docs/api/openapi-docs/confirm-file-upload.api.mdx
+++ b/docs/api/openapi-docs/files-confirm-upload.api.mdx
@@ -1,11 +1,11 @@
---
-id: confirm-file-upload
-title: "Confirm file upload"
+id: files-confirm-upload
+title: "Files - confirm upload"
description: "Confirms that the file was successfully uploaded to the pre-signed URL."
-sidebar_label: "Confirm file upload"
+sidebar_label: "Files - confirm upload"
hide_title: true
hide_table_of_contents: true
-api: eJy9VttuGzcQ/ZUBn5KCujh1EXjfVF9aoYktSHJRwBACihxJjHfJDS+yVWH/vRjuriVLSpMARZ+k3R3OnJk5Z4ZbFsTSs+yB3egcPZtxptBLp8ugrWEZu7RmoV3hIaxEgLBCWOgc4Ul48FFK9H4R83wDscytUKgg2GRVOux4vTSo4H78ocs4K4UTBQZ0FG7LjCiQZYy8DRXjTFO0UoQV48zhl6gdKpYFF5EzL1dYCJZtWdiUdMoHp82ScbawrhCBZSxGrVh1iJ6SguEVq2bk1JfWePTk512/Tz8nrGWdMBImaU1AE8hSlGWupSDL3mdP5ttjWHb+GWWgXJ0t0QVdB7OPezZza3MUpvbuQ50iARfhO1w15TpRiROpaIUm6IVGV3ePmraf3lHxfBAh+lPeG6xsd7zibL4JuG+tTcAlOsZZoY0uYsGyPmeFeK7/X/T7788uLt79cv7+vH9xcXaIeSBDFHnNL6//RtAGUgggsgXrUIE1iV0e3RodYWhaNE0IvlWVj8OP10AmYBfJz0s6KSqrqn3uPezI2RSmTfl12BlnQilNMUQ+2mvXQuQeDzGMMURHshCLgA5EnW8tH9Ae1uioZaoL01Zs2oOxT+BQqA3pa44QPSqqz+XgCihgIqYnmQUdctwJd4w+5uEoM/vIGsr9GPpJrXlAs8bcli8V1GZ5kAqRrc3lJKwkRlZVBO28f34sx1sbYGGj+d+UmDKuOEPnrPu2M2nV93BOyJU22KHuiXmOkLxDOswZPouiTIX5c/BheDWYDu9uP12Px3djIneB3ovldwT5PRbCHIZoT6epGITO/XGN78q68eCDizJE0lgL0AR8DqwhDvpQz51DNqdPMLyChXUQnJA1vtd4D+nXZN8i/EEOHkLVpp5k2hp40mEFxWHNKR4Io8C2+Sqcx+WSaNsmuuPoNXm9SiU7LZyaID+KWhglXIu5FdBh2FfCSBQIK6toNVqfKEgbMmM9Uere+qxHivO9bT2oql6jRppYaULWqza6nGVsFULpsx6d7M51mG/mOnQVro/INHJWRZkeaG96lNHpsEmuBqX+AzeDSCAeZvufJyTBWhj7Ri/MFellu+hXKFTaFM014K/OYDTs1AYHdZO2RAWD0RAecdOF9OwzKKzC3HOQQnHq4Rpd4PATvHnSuZLCqbddGNCRRAkb68tL20rw5AYcStRr9HDe/xmGt5P7m5vh5fD6dvppcnk3uu6m9hO9UiJNn35tipeG72VuY0LHOKOC16DPuv3uu2OV6uWqU6JLbDUSobkSOS2Tr5QSLNE085zcdmESy9K64KGIedCdmupgYyhjgDeT6fWIw28fpjccFEpblJZWQ4F+9ZZDqUvMtUHAZ5SRfPI0pDtzQVZ12Xx6TeoQfmMkfLZzKJ2lOa/NsttMXyHT9G361daA8QN2vWJWxVlAV/i7xQTdWkv8imEvWXWEUR1pTS0p2rK5lkha2MUlmTmNQbjNv4Y+7ZG6SToqhNnz2ayk/e112LrtbgH9hzfiRhk0fXplLrShgqWcto3OH0g2xKwzuq6lGzpn2cu1pJX7jLMVjYfsgW231Np7l1cVvf4S0ZFyZ5ythdM0DJOOlfb0X50eVvvpvhk3knkL7W36K8hboRtqzVrkkZ4YZ4+42V30q1nFW/UTkPrjQEosw96xoyVPo+ZlFo7uJlNWVf8AhYhpXg==
+api: eJy9VttuGzcQ/ZUBn5KCujh1EXjfVF9aoYktSHJRwBACihxJjHfJDS+yVWH/vRjuriVLSpMARZ+k3R3OnJk5Z4ZbFsTSs+yB3egcPZtxptBLp8ugrWEZu7RmoV3hIaxEgLBCWOgc4Ul48FFK9H4R83wDscytUKgg2GRVOux4vTSo4H78ocs4K4UTBQZ0FG7LjCiQZYy8DRXjTFO0UoQV48zhl6gdKpYFF5EzL1dYCJZtWdiUdMoHp82ScbawrhCBZSxGrVh1iJ6SguEVq2bk1JfWePTk512/Tz8nrGWdMBImaU1AE8hSlGWupSDL3mdP5ttjWHb+GWWgXJ0t0QVdB7OPezZza3MUpvbuQ50iARfhO1w15TpRiROpaIUm6IVGV3ePmraf3lHxfBAh+lPeG6xsd7zibL4JuG+tTcAlOsZZoY0uYsGyPmeFeK7/X/T7788uLt79cv7+vH9xcXaIeSBDFHnNL6//RtAGUgggsgXrUIE1iV0e3RodYWhaNE0IvlWVj8OP10AmYBfJz0s6KSqrqn3uPezI2RSmTfl12BlnQilNMUQ+2mvXQuQeDzGMMURHshCLgA5EnW8tH9Ae1uioZaoL01Zs2oOxT+BQqA3pa44QPSqqz+XgCihgIqYnmQUdctwJd4w+5uEoM/vIGsr9GPpJrXlAs8bcli8V1GZ5kAqRrc3lJKwkRlZVBO28f34sx1sbYGGj+d+UmDKuOEPnrPu2M2nV93BOyJU22KHuiXmOkLxDOswZPouiTIX5c/BheDWYDu9uP12Px3djIneB3ovldwT5PRbCHIZoT6epGITO/XGN78q68eCDizJE0lgL0AR8DqwhDvpQz51DNqdPMLyChXUQnJA1vtd4D+nXZN8i/EEOHkLVpp5k2hp40mEFxWHNKR4Io8C2+Sqcx+WSaNsmuuPoNXm9SiU7LZyaID+KWhglXIu5FdBh2FfCSBQIK6toNVqfKEgbMmM9Uere+qxHivO9bT2oql6jRppYaULWqza6nGVsFULpsx6d7M51mG/mOnQVro/INHJWRZkeaG96lNHpsEmuBqX+AzeDSCAeZvufJyTBWhj7Ri/MFellu+hXKFTaFM014K/OYDTs1AYHdZO2RAWD0RAecdOF9OwzKKzC3HOQQnHq4Rpd4PATvHnSuZLCqbddGNCRRAkb68tL20rw5AYcStRr9HDe/xmGt5P7m5vh5fD6dvppcnk3uu6m9hO9UiJNn35tipeG72VuY0LHOKOC16DPumfd/rFK9XLVKdElthqJ0FyJnJbJV0oJlmiaeU5uuzCJZWld8FDEPOhOTXWwMZQxwJvJ9HrE4bcP0xsOCqUtSkuroUC/esuh1CXm2iDgM8pIPnka0p25IKu6bD69JnUIvzESPts5lM7SnNdm2W2mr5Bp+jb9amvA+AG7XjGr4iygK/zdYoJurSV+xbCXrDrCqI60ppYUbdlcSyQt7OKSzJzGINzmX0Of9kjdJB0Vwuz5TDdf6LSrrFlgh93b7nbQf3gpbsRBA6hX5kIbqllKa9tI/YGUQ+Q6oxtbuqRzlr3cTFrFzzhb0YTIHth2S929d3lV0esvER2Jd8bZWjhN8zBJWWlP/9XpebWf7ptxo5q30F6ov4K81bqh7qxFHumJcfaIm91dv5pVvB0ABKT+OJASy7B37GjP07R5GYeju8mUVdU/TFBqHQ==
sidebar_class_name: "post api-method"
info_path: api/open/bitbybit-cad-cloud-api
custom_edit_url: null
@@ -24,7 +24,7 @@ import Translate from "@docusaurus/Translate";
@@ -49,19 +49,19 @@ Confirms that the file was successfully uploaded to the pre-signed URL.
diff --git a/docs/api/openapi-docs/delete-a-file.ParamsDetails.json b/docs/api/openapi-docs/files-delete-a-file.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/delete-a-file.ParamsDetails.json
rename to docs/api/openapi-docs/files-delete-a-file.ParamsDetails.json
diff --git a/docs/api/openapi-docs/confirm-file-upload.RequestSchema.json b/docs/api/openapi-docs/files-delete-a-file.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/confirm-file-upload.RequestSchema.json
rename to docs/api/openapi-docs/files-delete-a-file.RequestSchema.json
diff --git a/docs/api/openapi-docs/delete-a-file.StatusCodes.json b/docs/api/openapi-docs/files-delete-a-file.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/delete-a-file.StatusCodes.json
rename to docs/api/openapi-docs/files-delete-a-file.StatusCodes.json
diff --git a/docs/api/openapi-docs/files-delete-a-file.api.mdx b/docs/api/openapi-docs/files-delete-a-file.api.mdx
new file mode 100644
index 00000000..cbe000cc
--- /dev/null
+++ b/docs/api/openapi-docs/files-delete-a-file.api.mdx
@@ -0,0 +1,70 @@
+---
+id: files-delete-a-file
+title: "Files - delete a file"
+description: "Permanently removes a file and its stored blob."
+sidebar_label: "Files - delete a file"
+hide_title: true
+hide_table_of_contents: true
+api: eJy9VltzGjcU/iua8xR3BNhtnnijBrdMU5sBp9MZD5MR0gEUayVFFxKG2f/eOdpdG4PTJH3oE+zuuXzn8n3SAZLYRBg+wI02GGHJQWGUQfuknYUhzDBUwqJNZs8CVm6HkQm21gaZsIrpFFlMLqBiK+NWfeDgRRAVJgwU9gBWVAhDII+pAg6aonqRtsAh4KesAyoYppCRQ5RbrAQMD5D2nrxiCtpugMPahUokGELOWkF9ipLAs+kY6iUFjd7ZiJHi/Hx5ST+vWCs0mJAQSWcT2kR2wnujpSC7wcdIxodzUG71EWWiSoPzGJJuUrnHI5uVcwaFbaLH1BRIsEX6jlAdtm/Fq49b+PDktuQglNJUhTCzo8hrYSKe9u7a2bWm7mpnWdqKxAQLGF0OEtlnEVnMUmKM62zM/qhtSSdD0MblzRxjNglOIblHaIv+MVCLJifrhsnWLjRbVwCQ0SkCmuq8NYe6JiRvL9+eT//WJbZ22f5voy8F1hwwBBe+HUw6ha9R4GUVfwq51RZ7AYUSK4OsRGfFmQN+EZUvvflr9G46Ht1P724/TObzuzlxp8IYxeY7kvyeK2FPU3TehYRJaBPPe3znmzmzmEKWKZM+dABtwi8J2j3BmKbq3H/efGLTcRl8CkI2+F7iPd22tvoO4Q+u3ClUbRvVIV581mnLqtOeU74ig66rV+Eqbzbabp4KfV7TCUUdl5a9zpNmQX4UtbBKhA4z2h0a5/E07QtilBVIW6dg2GpGke20hSEMhNeD3dWAuBYHh0a2a+AQMew6Tc/BwBC2Kfk4HJBHf6XTar/Sqa9wd7ZGs+BUluWBBDqizEGnfQk18voP3I8yJX9YHn9eEPkaShwbPe2sKC+7E2WLQmEA3p03f/dGs2mvMTjpmHQeFRvNpuwR931WnuOQVU6hiZxJoThNb4chcfYTe/NZGyVFUBd9NiKXsgwuJ5a2yLohskhhWECJms7It5e/sOnt4v3NzfR6Orm9/7C4vptN+mXwtFilkHZCv7bNY9ejMbs2Lhd0wIEa3oC+6l/1L8/5qTfbnsdQ9tRKZO3ZG7QssUpJbIMWQ7PGo9m0zxbZexdSZFU2SfeaJWcuJ58Te7O4n8w4++3d/Q1nCqWrvIuoiPXbC8689mi0RYZfUGaKyYss91aCrJq2xfKaeCHi3kr20a2YD44EXdtNv9VdIYvutvPqegD8ZLtebFbNIWGo4t16gWGnJX7FcFCsesKqnnS2IVMEDkZLJBY85yWCBY1JhP2/pn49Ik3Tu5gqYY9ilqsU67VnZXtdOh3e4fnw+Q+XrJYDpDADb4S21JqC/tAy+YEIQjt0RdencrnjMGyvYUsOW0dn0wMcDjS698HUNb3+lDEQM5ccdiJokrnCU6Uj/Vevy9BxMW/mLSUuWHct+wrejsiWWr8TJtMTcHjE/fONsV7WvGM3AWk+jqREn47czo5vkpInlRtP3k3uJ1DX/wAugcpg
+sidebar_class_name: "delete api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Permanently removes a file and its stored blob.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-file-details.ParamsDetails.json b/docs/api/openapi-docs/files-get-file-details.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/get-file-details.ParamsDetails.json
rename to docs/api/openapi-docs/files-get-file-details.ParamsDetails.json
diff --git a/docs/api/openapi-docs/delete-a-file.RequestSchema.json b/docs/api/openapi-docs/files-get-file-details.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/delete-a-file.RequestSchema.json
rename to docs/api/openapi-docs/files-get-file-details.RequestSchema.json
diff --git a/docs/api/openapi-docs/get-file-details.StatusCodes.json b/docs/api/openapi-docs/files-get-file-details.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/get-file-details.StatusCodes.json
rename to docs/api/openapi-docs/files-get-file-details.StatusCodes.json
diff --git a/docs/api/openapi-docs/files-get-file-details.api.mdx b/docs/api/openapi-docs/files-get-file-details.api.mdx
new file mode 100644
index 00000000..821fee1c
--- /dev/null
+++ b/docs/api/openapi-docs/files-get-file-details.api.mdx
@@ -0,0 +1,70 @@
+---
+id: files-get-file-details
+title: "Files - get file details"
+description: "Returns metadata and download URL for a single file."
+sidebar_label: "Files - get file details"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns metadata and download URL for a single file.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/list-uploaded-files.ParamsDetails.json b/docs/api/openapi-docs/files-list-uploaded-files.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/list-uploaded-files.ParamsDetails.json
rename to docs/api/openapi-docs/files-list-uploaded-files.ParamsDetails.json
diff --git a/docs/api/openapi-docs/get-all-task-results.RequestSchema.json b/docs/api/openapi-docs/files-list-uploaded-files.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/get-all-task-results.RequestSchema.json
rename to docs/api/openapi-docs/files-list-uploaded-files.RequestSchema.json
diff --git a/docs/api/openapi-docs/list-uploaded-files.StatusCodes.json b/docs/api/openapi-docs/files-list-uploaded-files.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/list-uploaded-files.StatusCodes.json
rename to docs/api/openapi-docs/files-list-uploaded-files.StatusCodes.json
diff --git a/docs/api/openapi-docs/list-uploaded-files.api.mdx b/docs/api/openapi-docs/files-list-uploaded-files.api.mdx
similarity index 75%
rename from docs/api/openapi-docs/list-uploaded-files.api.mdx
rename to docs/api/openapi-docs/files-list-uploaded-files.api.mdx
index f9917380..a0ce723c 100644
--- a/docs/api/openapi-docs/list-uploaded-files.api.mdx
+++ b/docs/api/openapi-docs/files-list-uploaded-files.api.mdx
@@ -1,11 +1,11 @@
---
-id: list-uploaded-files
-title: "List uploaded files"
+id: files-list-uploaded-files
+title: "Files - list uploaded files"
description: "Returns paginated list of uploaded files."
-sidebar_label: "List uploaded files"
+sidebar_label: "Files - list uploaded files"
hide_title: true
hide_table_of_contents: true
-api: eJytV9tOG0kQ/ZVSvySsxsZmQ7L4zUsgQZsEKwZpJYRW7ekaTyU93ZO+GLzI/76qnvEVR0C0vJiZqVufOnXpBxHk1IvBjTgnjV7cZkKhzx3VgawRA/EVQ3TGQy2nZGRABZp8AFtArLWVChUUrNkVmailkxUGdGzwQRhZoRiIWk5RZILY2o+Ibi4y4fBHJIdKDAqpPWbC5yVWUgweRJjXrEUm4BSd4HgKGXUQg/5ika2saqoo/C9mj3qbdn2QIfqXG/bBkZmKTKCJFeNZo1HNm9yaglyFir/e18nO7WJxy2Z9bY1Hz4aOej3+2Yafs5IQb+wENIGFZF1ryiULHX7zLPnwOCQ7+YY5K9bO1ugCNX7s9w2ZibUapWms+yAGwUVcZELJ8AxTKfMbYtI5yXBRwMo/T/1C7QNxG4RrQz8iJp4BKTSBCkIH0aOCYMFhgQ5NjhBK8q2YgdPhe2BvCSXOaGFdJYMYiBhJiUWW/DdpfyqCS0dMfw1LFZAeamdnxAWgIiu1BQHMFfSBHbQZu0q2n/Lx+eLzGbAIF1co2/Muk77IxGQeGtykmV8WqcQesboiQxUTsJeJSt43/5/0eu/6JydHx2/evemdnPSZ7q2miVqLxaOqT7Tz9G8CMvntwpeoNdyV6UsqEiAPr1qav4LXxgaYY1j1hYMuB+1LeXT8dm/ULQ5PRzP+OOwcHb+FEu9B0RSb/rMLURshFcCR7E9OF66ZNIV1oFDFVRE1oTal/+s1vRdFTQXm87xFDQebkLWMuf76Ccj7iCoDeScpcMCj66uDDF6tHK3FZ+i4ABRIo1q2e4heTjSyRhvOtvn2JUywsI4hq2qNHOaByESgoLGNd9yAwOR1yP1+GJ6m7sX4Ev542+tDoAp9kFUNdyWalKI2iDvpgQwFYpttbTQHaxz8Ojue6Xzlb5snzNj1Jw5M2TvDWtdOP+7HI4cdT1PDxGrlGN8uXBo9h9qhRxMSv1ZG2/kIZykFHmQR0EEfShsdT82d8y42p83NskduNKvttrJsC6tKy9YjbJ3BbbhvMyGVIj6S1KONltwOtx0WM1oVBskzIR1Nmu3hv0Oh9xgk6XSSNPv3TV+8z3X0NMPP+xpWv9frLbJ2xr9c/ZiVgw1S71V+Xo/ckwcvsuU2s1w/Gi8vA3T0xCoFdxRKSJYht9GEHXw/8TqwG5/9Ltqp/bJgxjHP0XtAM0Nt66abSjLcguTG1ldsLCK7wXxt1xix4L9MVBhKq8RATDENfRlKMRCHsqbDWf9wiaRHN1uuipFrTZQh1H5wyILdCYXJfEKhq3D2qN+MnFUxTw/cDzzm0VGYJ1PDmv7C+TCyz5vbzc9jXpCaCboptN5e0svl6leiVIku7WL4d2c4uug0AjsQ5rZGBcPRBXzHeRfSsx9AZRVqn0EuVcawztCFDH6D13ekVS6dOujCkFVSwm0MqWUtkwqezYDDHGmGHt70foeLL+Pr8/OL04uzL1f/jE8vR2fdRAQyhU0HaRPzZwte2oFOtY0pOpEJBrwJut/tdY8eHeUjTctOjS6tSrxRtSu9ozzZSkeCKZp2rWKzXRjHurYueKiiDtRp9iywMdQxwOvx1dkogw+frs4zUMiTx/IMrtCXBxnUVKMmg4D3mEe2mSWudSaSpRrYfHrN4076ucnhm53wgGfikpl225Yo89Qs2nwtMRDZDru2mMWNAl3lL4sxuhnl+BPBwyTVkUZ1cmua6vKpD+TIzF/75YpzhEGmi8PPXe+3mJqm9aGSZsMmF9lOk9hN3cP6evCiO1vL/YD34bDWkgxDEpvR1xTuDRcGc6ffTqF0Sywt3xZuxMMDJ+ra6cWCXzcXJq5DRWkjWV+ZvuN8fRucSR3Zb5rvPxFd9tjnyK5m3lr4lh8csXTqBNmypDm6RmuY51hvunh0r2Irq3b24exKLBb/ARofNjE=
+api: eJytV9tOG0kQ/ZVSvySsxsZmQ7L4zUsgQZsEKwZpJYRW7ekaTyU93ZO+GLzI/76qnvEVR0C0vJiZqVufOnXpBxHk1IvBjTgnjV7cZkKhzx3VgawRA/EVQ3TGQy2nZGRABZp8AFtArLWVChUUrNkVmailkxUGdGzwQRhZoRiIWk5RZILY2o+Ibi4y4fBHJIdKDAqpPWbC5yVWUgweRJjXrEUm4BSd4HgKGXUQg/5ika2saqoo/C9mj3qbdn2QIfqXG/bBkZmKTKCJFeNZo1HNm9yaglyFir/e18nO7WJxy2Z9bY1Hz4aOej3+2Yafs5IQb+wENIGFZF1ryiULHX7zLPnwOCQ7+YY5K9bO1ugCNX7s9w2ZibUapWms+yAGwUVcZELJ8AxTKfMbYtI5yXBRwMo/T/1C7QNxG4RrQz8iJp4BKTSBCkIH0aOCYMFhgQ5NjhBK8q2YgdPhe2BvCSXOaGFdJYMYiBhJiUWW/DdpfyqCS0dMfw1LFZAeamdnxAWgIiu1BQHMFfSBHbQZu0q2n/Lx+eLzGbAIF1co2/Muk77IxGQeGtykmV8WqcQesboiQxUTsJeJSt43/5/0eu/6JydHx2/evemdnPSZ7q2miVqLxaOqT7Tz9G8CMvntwpeoNdyV6UsqEiAPr1qav4LXxgaYY1j1hYMuB+1LeXT8dm/ULQ5PRzP+OOwcHb+FEu9B0RSb/rMLURshFcCR7E9OF66ZNIV1oFDFVRE1oTal/+s1vRdFTQXm87xFDQebkLWMuf76Ccj7iCoDeScpcMCj66uDDF6tHK3FZ+i4ABRIo1q2e4heTjSyRhvOtvn2JUywsI4hq2qNHOaByESgoLGNd9yAwOR1yP1+GJ6m7sX4Ev542+tDoAp9kFUNdyWalKI2iDvpgQwFYpttbTQHaxz8Ojue6Xzlb5snzNj1Jw5M2TvDWtdOP+7HI4cdT1PDxGrlGN8uXBo9h9qhRxMSv1ZG2/kIZykFHmQR0EEfShsdT82d8y42p83NskduNKvttrJsC6tKy9YjbJ3BbbhvMyGVIj6S1KONltwOtx0WM1oVBskzIR1Nmu3hv0Oh9xgk6XSSNPv3TV+8z3X0NMPP+xpWv9frLbJ2xr9c/ZiVgw1S71V+Xo/ckwcvsuU2s1w/Gi8vA3T0xCoFdxRKSJYht9GEHXw/8TqwG5/9Ltqp/bJgxjHP0XtAM0Nt66abSjLcguTG1ldsLCK7wXxt1xix4L9MVBhKq8RATDENfRlKMRCHsqbDWf9wiaRHN1uuipFrTZQh1H5wyILdCYXJfEKhq3D2qN+MnFUxTw/cDzzm0VGYJ1PDmv7C+TCyz5vbzc9jXpCaCboptN5e0svl6leiVIku7WL4d2c4uug0AjsQ5rZGBcPRBXzHeRfSsx9AZRVqn0EuVcawztCFDH6D13ekVS6dOujCkFVSwm0MqWUtkwqezYDDHGmGHt70foeLL+Pr8/OL04uzL1f/jE8vR2fdRAQyhU0HaRPzZwte2oFOtY0pOpEJBrwJut/td3uPjvKRpmWnRpdWJd6o2pXeUZ5spSPBFE27VrHZLoxjXVsXPFRRB+o0exbYGOoY4PX46myUwYdPV+cZKOTJY3kGV+jLgwxqqlGTQcB7zCPbzBLXOhPJUg1sPr3mcSf93OTwzU54wDNxyUy7bUuUeWoWbb6WGIhsh11bzOJGga7yl8UY3Yxy/IngYZLqSKM6uTVNdfnUB3Jk5q/9csU5wiDTxeHnrvdbTE3T+lBJs2Ez3c2g0/SL7Waxm8KH9TXhRXe3tgYC3ofDWksyDE1sRmBTwDdcIMyhfjuN0m2xtHxruBEPD5ywa6cXC37dXJy4HhWlzWR9dfqO8/WtcCZ1ZL9pzv9EdNlrnyO7mn1r4Vt+cMTSqSNky9Lm6BqtYZ5jveni0f2Kraza2oezK7FY/AeKEDiw
sidebar_class_name: "get api-method"
info_path: api/open/bitbybit-cad-cloud-api
custom_edit_url: null
@@ -24,7 +24,7 @@ import Translate from "@docusaurus/Translate";
@@ -49,19 +49,19 @@ Returns paginated list of uploaded files.
diff --git a/docs/api/openapi-docs/request-a-file-upload-url.RequestSchema.json b/docs/api/openapi-docs/files-request-an-upload-url.RequestSchema.json
similarity index 64%
rename from docs/api/openapi-docs/request-a-file-upload-url.RequestSchema.json
rename to docs/api/openapi-docs/files-request-an-upload-url.RequestSchema.json
index 53039a92..cf0f93a5 100644
--- a/docs/api/openapi-docs/request-a-file-upload-url.RequestSchema.json
+++ b/docs/api/openapi-docs/files-request-an-upload-url.RequestSchema.json
@@ -1 +1 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":255,"description":"Original filename including extension (e.g. 'part.step', 'model.obj'). Used for display and format detection."},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"MIME type of the file (e.g. 'application/step', 'model/gltf-binary'). Must match the actual file content."},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":1073741824,"description":"Exact file size in bytes. Must match the Content-Length of the subsequent PUT to the upload URL. Maximum: 1 GB."},"sha256":{"description":"SHA-256 hex digest of the file content. When provided, enables server-side deduplication — if an identical file was previously uploaded under this API key, the existing file is reused and no upload is needed.","type":"string","minLength":1,"maxLength":128}},"required":["filename","contentType","bytes"],"additionalProperties":false,"description":"Request a pre-signed upload URL. After receiving the URL, PUT the raw file bytes to it within the expiration window.","title":"FileUploadBody"}}}}}
\ No newline at end of file
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":255,"description":"Original filename including extension (e.g. 'part.step', 'model.obj'). Used for display and format detection."},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"MIME type of the file (e.g. 'application/step', 'model/gltf-binary'). Must match the actual file content."},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":1073741824,"description":"Exact file size in bytes. Must match the Content-Length of the subsequent PUT to the upload URL. Maximum: 1 GB."},"sha256":{"description":"SHA-256 hex digest of the file content. When provided, enables server-side deduplication - if an identical file was previously uploaded under this API key, the existing file is reused and no upload is needed.","type":"string","minLength":1,"maxLength":128}},"required":["filename","contentType","bytes"],"additionalProperties":false,"description":"Request a pre-signed upload URL. After receiving the URL, PUT the raw file bytes to it within the expiration window.","title":"FileUploadBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/files-request-an-upload-url.StatusCodes.json b/docs/api/openapi-docs/files-request-an-upload-url.StatusCodes.json
new file mode 100644
index 00000000..34ee0837
--- /dev/null
+++ b/docs/api/openapi-docs/files-request-an-upload-url.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"201":{"description":"Upload URL and file ID","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"fileId":{"type":"string","description":"Assigned file identifier - use this to reference the file in subsequent API calls","format":"uuid"},"uploadUrl":{"type":"string","description":"Pre-signed URL to PUT the raw file bytes to. Send the file content with Content-Type and Content-Length headers matching the request.","format":"uri"},"expiresIn":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Seconds until the upload URL expires. You must complete the PUT within this window."},"maxBytes":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Maximum allowed file size in bytes for this upload. Determined by your plan tier."},"status":{"type":"string","const":"pending"}},"required":["fileId","uploadUrl","expiresIn","maxBytes","status"],"additionalProperties":false,"description":"Response after requesting a file upload. Contains the pre-signed URL to PUT your file to.","title":"UploadResult"}},"required":["ok","data"],"additionalProperties":false,"description":"Success envelope containing the pre-signed upload URL and file metadata","title":"UploadResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/files-request-an-upload-url.api.mdx b/docs/api/openapi-docs/files-request-an-upload-url.api.mdx
new file mode 100644
index 00000000..29935be9
--- /dev/null
+++ b/docs/api/openapi-docs/files-request-an-upload-url.api.mdx
@@ -0,0 +1,70 @@
+---
+id: files-request-an-upload-url
+title: "Files - request an upload URL"
+description: "Returns a pre-signed URL for uploading a file via PUT."
+sidebar_label: "Files - request an upload URL"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns a pre-signed URL for uploading a file via PUT.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/generate-a-batch-of-parametric-models.RequestSchema.json b/docs/api/openapi-docs/generate-a-batch-of-parametric-models.RequestSchema.json
deleted file mode 100644
index df1f1393..00000000
--- a/docs/api/openapi-docs/generate-a-batch-of-parametric-models.RequestSchema.json
+++ /dev/null
@@ -1 +0,0 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"description":"Array of parameter variations. Each item produces a separate output with the same model."},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive — choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) — each produces a separate downloadable result. Do not include both 'step' and 'stpz' — only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["items","outputs"],"description":"Submit multiple parameter variations of the same model for parallel generation","title":"BatchModelSubmissionBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/generate-a-batch-of-parametric-models.api.mdx b/docs/api/openapi-docs/generate-a-batch-of-parametric-models.api.mdx
deleted file mode 100644
index 797ad1dc..00000000
--- a/docs/api/openapi-docs/generate-a-batch-of-parametric-models.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: generate-a-batch-of-parametric-models
-title: "Generate a batch of parametric models"
-description: "Creates a compound task with one sub-task per item. Each item can have different parameters but shares the same output config."
-sidebar_label: "Generate a batch of parametric models"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Creates a compound task with one sub-task per item. Each item can have different parameters but shares the same output config.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-all-task-results.api.mdx b/docs/api/openapi-docs/get-all-task-results.api.mdx
deleted file mode 100644
index 49158070..00000000
--- a/docs/api/openapi-docs/get-all-task-results.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: get-all-task-results
-title: "Get all task results"
-description: "Returns download URLs for every available result format in a single call. Use this instead of making multiple requests to /result/{format}."
-sidebar_label: "Get all task results"
-hide_title: true
-hide_table_of_contents: true
-api: eJztWN9v2zYQ/lcOfEkyyHLS9WV+8xK3M9Ylhp0MA4KgoMmLzJoiNZJyYxj634cjpfhX2rQvw4D1ybZEfvfx7vtOJ29Y4IVng3t2y/3Ss4eMSfTCqSooa9iATTHUzniQ9rPRlku4m37w8Ggd4ArdGviKK83nGsGhr3WgWyUPoAxw8MoUGkFwrXO48whhoTwo4wNyCfYRSr5UpoCy1kFVEePvGn3wECz0E2B/kxCbnGWs4o6XGNAR5Q0zvEQ2YIH75ViyjCliXPGwYBkjKOVQskFwNWbMiwWWnA02LKwr2uWDU6ZgGUv4bMDqWknWHGaAEgPjK9Y8EKivrPHoCefN+Tl97K++6vKklVmmRHGtd9KUonmWMWFNQBMIg1eVVoITRv+TJ6DNMWE7/4QiUBacrdAFlWjY5c6aubUauUnoPqTD05F4+Aaorsh+Zyl3jq8ptwFL/zpEl8zjNB/qalctS1zDKeZFDieFnp9kcOIDVvRZYuBE/uQsVqYleOf06yEmDnteFQajaElSzyIOi61elcYcRk+VcuiBPwZ0cAELW7t8TxtOEQFanVT3WvRZXRToA0ro9kQxUOSOBssYPvGy0gST6OSFnrOm2ZXvfUdi//g7XB4yxqVUFJjryU45Hrn2eCToVyW652R/RGerkq8H/mJcZRK0subV6NQlOAhLWaJkktdZxoIKMWtkziQl38Ef8bW0IRrg+/jOaiHQe0CzQm0rBDIsV4Y6lnw5hweZe5HntO0hrGmI6dvzt8dd5NoSSG3kv9UmOqWgc9a9Dias/AYL/MHFQhnsOeQyljaiQ9y8K/0/hx/GV8Pb8c31x9F0ejMlo5XoPS++IchvdcnNYYhud9R+4Er74xzfVEkH4IOrRagdymeCJuBTYK2O0IexPN4/TbdgfJWM7bhI/Pb5HqqxPX3H8DsleUh110qfVVhAeZhzigfcSLDdeSXO66IgFXcH3ep0RKhXMWUv+ygJ5HtZcyO56zh3fjoMe2SMX46THh/GyoOxAdYYto3hh1F+GOV/aZQogbCwkg1YgVGBNAAPWJ9Xqr+66NMT0/c3aUhu2qmank0e3aqbpGsaqNgihMoP+rQzn6swX89VyCWuXhitrKxF/EFjsUdROxXWEWpYqd9xPayJxP3D7u0ZOTD5YnfRdtSMF7s5foFcomNZN+X/1RtOxr204CBtwlYoYTgZ0yCZQ/ztB1BaidpnILjMqIQrdCGDn+D0s9JScCfPchjG2ZMUYevQzoWpkuAJBhwKVCv08Pb8Zxhfz+7evRtfjkfXtx9nlzeTUR6rT+qKB2nL9GubPLgcXsGltnVkxzJGCU+kL/Lz/M2xSVWx6FXooliNQGjfeJwSESseCQo06JKWh5NxDrO6qqwLPr1I9dqh2tahqgOczm5Hkwzef7h9l4FE6pjWoyTrL84yqFSFWhkEfEJRE2YWJ9benNOqlDYfL5M5uF8bAZ/sHCpnaTxSpsjb5stFbL5tvbocsOxAXXvKajIW0JX+5nGGbqUEfmFhP67qcSN7wprkKBKxVgLJCtu45DKnMHC3/mrolxGpmpX1oeRmB/M9hjjfkYlg66C92m22D6D/2Ftzay/qYP1Kc2Uo63V6hUrN4p68R/K8oOXxn4CMDZ7fq7sTP2RsYekpeM82G9LHndNNQ5f/rtGR/R8ytuJO0dFiM5DK03f5csPbTdnptPXdGXRv3F9g3nULQ/VdcV3TL5axJa63fwY0D03WtRAikm4OhcAq7Gw7GhSoXz330/ejW9Y0/wCikQJK
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns download URLs for every available result format in a single call. Use this instead of making multiple requests to /result/\{format\}.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-file-details.api.mdx b/docs/api/openapi-docs/get-file-details.api.mdx
deleted file mode 100644
index 5609b850..00000000
--- a/docs/api/openapi-docs/get-file-details.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: get-file-details
-title: "Get file details"
-description: "Returns metadata and download URL for a single file."
-sidebar_label: "Get file details"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns metadata and download URL for a single file.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-model-parameter-definitions.api.mdx b/docs/api/openapi-docs/get-model-parameter-definitions.api.mdx
deleted file mode 100644
index a846e464..00000000
--- a/docs/api/openapi-docs/get-model-parameter-definitions.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: get-model-parameter-definitions
-title: "Get model parameter definitions"
-description: "Returns parameter schema, types, defaults, and limits for the specified model."
-sidebar_label: "Get model parameter definitions"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns parameter schema, types, defaults, and limits for the specified model.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-result-default-format.api.mdx b/docs/api/openapi-docs/get-task-result-default-format.api.mdx
deleted file mode 100644
index 81e97396..00000000
--- a/docs/api/openapi-docs/get-task-result-default-format.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: get-task-result-default-format
-title: "Get task result (default format)"
-description: "Returns a download URL for the task's primary result. For compound tasks, returns a manifest with per-sub-task download links."
-sidebar_label: "Get task result (default format)"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns a download URL for the task's primary result. For compound tasks, returns a manifest with per-sub-task download links.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-result-in-a-specific-format.api.mdx b/docs/api/openapi-docs/get-task-result-in-a-specific-format.api.mdx
deleted file mode 100644
index eea1f4a8..00000000
--- a/docs/api/openapi-docs/get-task-result-in-a-specific-format.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: get-task-result-in-a-specific-format
-title: "Get task result in a specific format"
-description: "Returns a download URL for the requested output format (e.g. glb, step, stpz)."
-sidebar_label: "Get task result in a specific format"
-hide_title: true
-hide_table_of_contents: true
-api: eJztV99v2zYQ/leIe0oGWk66vsxvXuJ2xrrEsJNhQGAUNHmR2UgkS1JuXEP/+3CU5Di2+3PDXtaXOJLIu+/uvu943EAUeYDBHdyI8BBgzkFhkF67qK2BAUwxVt4EJpiyH0xhhWK30zfs3noWl8g8vq8wRFTMVtFVkT6UIrITzPKM5cWCsxDR0V/38TQDDk54UWJET143YESJMIAowsNYAQdNTp2IS+BAxrVHBYPoK+QQ5BJLAYMNxLWjXSF6bXLg0HiFAVSVVlDvB0GxsfEl1HzrsN3xfQ4PHEwxVMXng+esxCiUiIIzhdKWzgZUvRLD8hTqOTkPzpqAgfy9ODujn6NetoUotHkADtKaiCbSeuFcoaWg9f13gTZtDoOwi3coKXTnrUMfdePSPuysWVhboDCN9RCbhFDYIn6FqQ7hrS+OVet5VBOPvaBzgw2zon0KsGFYk1pdYMZGj057DEzcR/TsnC1t5bNn9feaqkOrm0J/yfusyvOGwN2eLbc7GMABH0XpCjLTwMnyYgF1vcuYu2dR70CYcxBKafInislOnu5FEXAfz2UXuzZNUNqahEgw4kyBBJXU0iYGOEQdEzRieUORzsgBREt8STX8NlSzSkoMgaFZYWEdMuKc0EabfLczECFbsF+COG3ZDnVNIF+evTzk+5UlSVVG/VckT7HXHNB7679sTFr1FQz7Q8ilNtjzKJRYFMiSdZY27zLrz+Gb8eXwZnx99XY0nV5PicclhiDyr3DyW1UKs++i253aVRS6CIc5vnYNBViIvpKx8qi2AE3ExwgthTDEsTrWk9InNr5sdOOFbPDtdcw9IrbRdwi/kY37UHe18kHHJSv3c07+mDCK2S5ehYsqz4nAXaBPNB2R1cuUsuMSagjyraiFUcJ3mDsp7bs9EMYvh0lP55kOzNjI1hifOsMPofwQyv9SKIkCcWkVDCDHxEAa6QbQF073V+d9Oo9Cf9PMmXW/OZn6myYdNXAI6FfdUFrR3ALLGF0Y9MlCttBxsV7omClcHZlgrKpkeqBBLqCsvI7rZGro9O+4HlYE5m6++3lGSmz0sbtoS2CRXnYT6hKFQg+8m1//6g0n416zYC990jpUbDgZswdcZyw9hwErrcIicCaF4lTKFfrI2U/s5IMulBRenWZsSFsSM2wVtwM+VZQFMsM8StQrDOzl2c9sfDW7ffVqfDEeXd28nV1cT0ZZYgGxLAXSluvXNnnsYnjJLgpbJXTAgRLegD7PzrIXh2LV+bLn0KcqGYmsvTx4LZOtFBLL0aBvOD2cjDM2q5yzPgZWVkXUvXYob+8nJ7Ob0YSz129uXu3O4SzN4Zw57bDQBhk+oqzIJk+DYW8haFWTtpBek0hEWBvJ3tkFc97ShKRNnrVNWMjUhNt6dTkAvseuZ8yqOUT0Zbi+n6FfaYmfWNhPq3rCqJ60plFWAA6FlkiSePJLavMao/Drz7o+bpGq6WyIpTA7Nl9j3J3vmDZMsOBQ6nst2fZm9ayWm6eD6d+/U7aKoebUd4XQhhJZNZePpg/ckZyIcee0PF11OQy2t87toDpo0c85LC2ddHew2VDtb31R1/T6fYWepD3nsBJeU9NMQlc60P/qeFPbDf9k2mrqlHUX00+E0HUCQ7VbiaKiJ+DwgOunOzNdar/L+T+9tH4X6Da/9bzmXU+j7DUfh1KiizvbDiYYaqDbRv96dAN1/TdVc9YV
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns a download URL for the requested output format (e.g. glb, step, stpz).
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-status.api.mdx b/docs/api/openapi-docs/get-task-status.api.mdx
deleted file mode 100644
index 908f6a43..00000000
--- a/docs/api/openapi-docs/get-task-status.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: get-task-status
-title: "Get task status"
-description: "Returns the current status and metadata of a task."
-sidebar_label: "Get task status"
-hide_title: true
-hide_table_of_contents: true
-api: eJy9WNtuI7kR/ZUCXyQFLVmeONlYb4rtmQg7YxuWJwgwMBYUuyRxzCbbvMhWDAH5h/3D/ZKgSLbcljS3DTZPanWzi6eqTlUd9jPzfOHY6BO75e7esbuCleiElbWXRrMRu0EfrHbglwgiWIvag/PcBwdcl1Ch5yX3HMwcOHju7gesYDW3vEKPliw/M80rZCNGTyclK5gkwzX3S1Ywiw9BWizZyNuABXNiiRVno2fm1zW95byVesEKNje24p6NWAiyZJtdoIQfJudsc0dGXW20Q0d23gyH9HNgdfKDFUwY7VF7WsbrWknBadnRZ0drn/cxmdlnFJ4ctaZG62Xaydy31syMUch1su588o9Qc/8dpnKsDoThtR8ftXwIGAMPskTt5VyihbmxUBulpF7ENFl0QXmw6K3EFVeHwnkv9cENUYeKCCI45a4yJark1Aqt7ztZ1QpbN3i54logra1ljUrq9LSqTdB016Pm2u8z7XZdI9Ho0dj7EXQELzvQdVIvFAKFJuakV0AnQuhAN7PMSgHxFj17Datz1NmF1YHuXCqEdN9lkw1S2hEfAsWRKxBLLnWymtDnTZVCBTPuxZIeJn860E0XfSdMjWWPPJVeYSbbzxTdTcEUn6H6dl7/ESqu+xZ5yWcq5ze9WjB84jHmI/aB3B5BafnC6L4INe2QWf2VTD5y6dOdh4Ahpcoagc6lu+SuQh8fzLlU8UJQ+FS6xqc61ux+DiNOOUexFgpjgeEI8n7QrVGXdFEiXaEWEl2vgIQCulKny14BL3igy4WXK1RrIFyBLPUK2GKEbiY3X3GpKFq9AhJq6KK1xoIRsXOV9FrjBXSDQ9vf/u8VkL3aGry9fQ/4JBDL/XROU5A3MXILiy4GnOv11Ty2vBx6HaoZWrYpWneUij3qdeDOkjvSaKjRCtSeLxC6w9/+8+vxcNgDY4HeBDmHZkOQDrTx4C0X91jGmvdL6RJZ7jPfYgQOYsu0+Da2ixjECp0jTI9L1M0EkA46KdSdAVwSPgLBlQLjl2jzMnQDQpKies2tPxyr3U64vuQVHuDxpmC8LCWB4+r6ddf8ak+tJI2hb1Xeh8mHC/C5F9HUy2yIXaOLg8Ugd6CjhfLz/kxqbtedAjrtyeE81p0eQZ2t/StsUntcoKVOKrWsqCCHBav4U7o+HQ5/Oj49ffOXk59Ohqenx7vopvLfB4FJDWmnzaY9Uz8lpxsYd18K3Zwrh3uRaGY7n5nggUNuxqV51MrkzpRB1Nz6VoncbHNNRgjUt0g2bqq37ZaDe1xjCbM1pHHVJGChZhTyFOZMvaC9VIn8TXNIxGs0yh/Euu9xbvtmwrdVTckdi86oFZbwopuKNNKApFNvANMlrxFW3Ep0FI1tiUcHhUXusRz7b7N7Mr2Cv/11eAxeVug8r+pU0MSnaPSRO8j28jCxW9O/v4V8adtWm5/hguucSjkH56VSeTJEJ+dSS7f846BsI9CaLC4Igkfdl9pcsNjbRWiD1lIvIsQ0QNz/lAdCkCrAwSNtMEPgwZuKeym4UmsoMc3m3UrfyuvY+hulsdUDrUnVTIXXPblVKG1KtTnwKgttf3+sseRhl+PdzBItVIjq4EU/bIPjiu3YK9qCtoW4PZ3P0XOp9iJk7lnW3z+Gd5ppgHqFytRRPHoudVTXTVckXzoO5sSOMu7vDqK6yWcTttkQvpPhyf7p5NJ4mGe5/H85m0S322rh68aEKb9nknKxlBpfVGxSY/Hltor95/j95Hx8O7m6/OXi5ubqJvXsqDZ+WChjW6ukQ2JKxV6Mr+rckZ23QfhAyq8BqD0+eZbZg86nk9juwTg+gsl5Ul6Wi4RvpyHtcDB73yD8QSLuQpU6zUXSjY/SL6HajTntFyvGNP6WOAuLBXG3cfSFplHqfa16EkF+FDXXJbcN5qaKdrd9VRhpbC9NyUZsgZGB9L1gxI54LY9Wx0dUbu7oOTW9DXUptKvmg0Owio3Y0vvajY7ojcFM+tl6Jv2gxNUeh66tKYOIf2heOBTBSr+Opsa1/BnX40Cbf7prP55S5aV6aC/aEpbHm83njiXyMsq+/DHkX/3x9aSfFuyEK54fYXw9IfUzgPjfjZIgcHSEKYt8fPUF/Am6j1KVgtuyN4AxvRKZQIoticSUQYjHUrAoUK7QwcnwzzC5nH58+3ZyNrm4vP1lenZ1fTGIWSdWRUdyev6egwdn43M4UyZEdKxg+QTNRux4MBy82S9OuVj2a7SRpFogtI7sZCtpnAXqfLonswOYhro21juogvKyn5WfCb4OHrrT24vrAt69v31bQInxZO6QPkQ5Oo03B3nAJxSBbBZRSfZnnFa9nPrTGOFurQV8NrOWEhnkpstFbLo5X00MWLHDrlfM2tDnDVu5q/kU7UoK/MLCo7iqz3XZF0anSqJxoaRAKoGXfam6rETP7fqrWx+2SNmsjfMV1y2b79C3R+9u2p5fZs7v+/yXC4B6y1GtuNQUlwj9OZfxJ6oOItAxLY9fHgs2ygrmrmBLQ1PpE3t+prx9tGqzodsPAS2V5V3BSAtTg4tFWkpH1+XhBtT2p3uT66EHzQfDL+BtqlhT3FdcBfpH6grXL98yN3eboiltApIejoXA2rde2xvc1Ee2/e3dxS3bbP4Le298Mw==
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns the current status and metadata of a task.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/health-check.api.mdx b/docs/api/openapi-docs/health-check.api.mdx
deleted file mode 100644
index 0fc01590..00000000
--- a/docs/api/openapi-docs/health-check.api.mdx
+++ /dev/null
@@ -1,62 +0,0 @@
----
-id: health-check
-title: "Health check"
-description: "Health check"
-sidebar_label: "Health check"
-hide_title: true
-hide_table_of_contents: true
-api: eJyVVe9vGzcM/VcIfmoH+Ue7YRjum5cljbGhMeoUGBAEgyzRPiU6SZV4bg3j/veB54sTO92w+Yt9Z+qRfO+R2iPrTcHqDq9Je67xXmEh02bHO6zu7hVmKimGQgWrPb6fTuXLUjHZJXYxYDWchMKa24IKTQxMgSVQp+Sd0RI4eSgSvcdiamq0/OJdIqwwrh7IMCpMOSbK7A654uOLmFWMnnQ4oBfGinNLnUKr+T9ADaU9xxXOLmxQIYW2ke7jIyq0tMnakhUSTlu82VLW3kN90mqnkF1DhXWTvgd+ijFf3sAvP0/fwfOZrhN+v7Quk5UqjhQ+h9wr1NY6wdB+8aKrtfaFznPMFvOnGk1N5hEyldYzuGB7GcIG4tBK2RWmBl6kZE9HNZdDh2cFHmgSzv9fXcvWGCoFKGzJx0Swjvmk0FcFfBpsh518zvGuT482xHW0WOGGevE111jh5JAAxdF5S1lsvsc2e6ywZk6lmkx0cuOV49Vu5XhsaftKtUWOtjX9Q/diNpZi4oO5Zsn9TrtZKzmPHtD9S1ToBKQmbSmjwqAb+ffP0WwxHx0CzogyMZEF0fGRdmPon0sFTbTkiwKjrQITw5YyK/gB3nx13hqd7dsxzOQIfHVcx5aBa4In6aAIDGQy5LZU4KfpjzD/uPx8dTW/mF9+vP1reXGzuBz3cruwjn0jgxy/DuzAxew3uPCx7atDhcLooeh34+n4/atWrt2mHiXK65gbHQxB0lk3xNmZHqtvCTYUKPcLQmDHsGxTipkLNK1nN+oPM8SWU8vwZnl7uVDw4Y/bKwWWTGxSLGShoVK/VZBcIu8CAX0j0wqmgrXzNFppiTrQVvrXOljQZRcMPMQVpBzFni5sxsP+0qbfX4NeTxygOrPPiXVkHVBuys16SXnrDP1D4KSPGulgRyaGwwzJBHpnSBz/nFfmKjtinXf/mvr7iKJmioUbHV5gno3OiWZH+zJ940ny2gXpqk+8H8bqDuvjTVFHWcV3uN8Lw5+z7zp5/aWlPNweW52dXomR7u479TQIMoePtJOFZQwl4XWrfXsYnLMbQ6buON8fLm+x6/4GZx5RPA==
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Health check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-file-details.RequestSchema.json b/docs/api/openapi-docs/health-status-check.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/get-file-details.RequestSchema.json
rename to docs/api/openapi-docs/health-status-check.RequestSchema.json
diff --git a/docs/api/openapi-docs/health-check.StatusCodes.json b/docs/api/openapi-docs/health-status-check.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/health-check.StatusCodes.json
rename to docs/api/openapi-docs/health-status-check.StatusCodes.json
diff --git a/docs/api/openapi-docs/health-status-check.api.mdx b/docs/api/openapi-docs/health-status-check.api.mdx
new file mode 100644
index 00000000..8f523a07
--- /dev/null
+++ b/docs/api/openapi-docs/health-status-check.api.mdx
@@ -0,0 +1,62 @@
+---
+id: health-status-check
+title: "Health - status check"
+description: "Health - status check"
+sidebar_label: "Health - status check"
+hide_title: true
+hide_table_of_contents: true
+api: eJyVVe9vGzcM/VcIfmoH+Ue2YRjum5clrbGhMeoUGBAEgyzRPiU6SZV4bg3j/veB54sTO+2w+Yt9Z+qRfHyP2iPrTcHqDt+T9lzjvcJCps2Od1jd3SvMVFIMhQpWe/xxOpUvS8Vkl9jFgNVwEgprbgsqNDEwBZZAnZJ3Rkvg5KFI9B6LqanR8ot3ibDCuHogw6gw5Zgoszvkio8vYlYxetLhgF4YK84tdQqt5v8ANZT2HFc4u7BBhRTaRrqPj6jQ0iZrS1ZIOG3xZktZew/1SaudQnYNFdZN+hb4KcZ8eQO//jK9gOczXSf8fm5dJitVHCl8DrlXqK11gqH94kVXa+0LneeYLeZPNZqazCNkKq1ncMH2YwgbiEMrZVeYGniRkj0dp7kcOjwr8ECTcP7/6lq2xlApQGFLPiaCdcwnhb4q4OMgO+zkc443SG40lH/EaIjraLHCDfUq0FxjhZNDJhRp5y1l0fse2+yxwpo5lWoy0cmNV45Xu5XjsaXtq/EtcrSt6R+6FyZZipoPKpsl9wftZq3kPIpB9y9RoROQmrSljAqDbuTfv0azxXx0CDhjzMREFmSgj7QbQ/9cKmiiJV8UGG0VmBi2lFnBD/Dmi/PW6GzfjmEmR+CL4zq2DFwTPM0QisBAJkNuSwV+nv4E8w/LT9fX88v51Yfbv5eXN4urcT93F9axb2SYy28DO3A5+x0ufWz76lChMHoo+mJ8MZ6+auW929SjRHkdc6ODIUg664Y4O9Nj9S3BhgLlflMI7BiWbUoxc4Gm9exG/WGG2HJqGd4sb68WCt79eXutwJKJTYqFLDRU6rcKkkvkXSCgr2RawVSwdp5GKy1RB9pK/1oHC7rsgoGHuIKUo+jUhc14WGTa9ItsmNcTB6jO5HMiHdkLlJtys15S3jpD3wmc9FEjHezIxHAwk1jRO0Mi/ee8YrDsiHXe/WvqbyPKNFMs3OjwAvN7HjoZ3lHHTF95krx2QdrrK9gP/rrD+nh31FGW8x3u90L1p+y7Tl5/bikP98lWZ6dXoqi7+049OUIM+Ug7WWHGUBKCt9q3Bwed3SFiv6PR313dYtf9A06HV10=
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Health - status check
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/list-available-parametric-models.api.mdx b/docs/api/openapi-docs/list-available-parametric-models.api.mdx
deleted file mode 100644
index c9431a1d..00000000
--- a/docs/api/openapi-docs/list-available-parametric-models.api.mdx
+++ /dev/null
@@ -1,62 +0,0 @@
----
-id: list-available-parametric-models
-title: "List available parametric models"
-description: "List available parametric models"
-sidebar_label: "List available parametric models"
-hide_title: true
-hide_table_of_contents: true
-api: eJyVVU1v2zgQ/SuDObWFbCfdnnTzpknXaLc16hRYIAgWNDm2mFAkS47UGob++2Ik27HdtOj6Yot+nI837422yGqdsbzDv4Mhl/G+wEQ5Bp8pY7nF1xcX8mUo62Qj2+CxHLDgVU3gbGYsUAfP5FmgKkZntRLo5CELfotZV1Qr+cWbSFhiWD6QlosxhUiJ7ZAtPB5hliE4Un6InhlLTg11BRrFvxGqHvp5wqmU1AYLtEz18XnmZP0aJfBJk9NWWaeWjqAPBdk16wxcKQatPCwJmkwGvlmugCuCyZBxshVeOiBvYrCeM3adcPq1sYmMMF0fmFbGWMmm3Pyo9pVymc6r+WAzQ1iBcg7UobKokqqJk9Wwi1ogW3a0H5Jc+6GA8Ig7Fv9fDYtGa8oZyLfkQiSQqSvrrV/3DLh9jafMPVvU553IsJPPs93+us2auAoGS1xTP3zFFZY4UdFO2svJAZYptZRE4VtsksMSK+aYy4kgx0vLy83S8thQi+dFzFMwje4funuJpJtkedOHmkb7njbTRpLe3R//vRCpDxI8Bj3JsD8UHUqOipShhAWKaLDEf0bT+Ww0AM7I1yGSgel8Bo+0GUP/nMsdIQVoZQoZSEuJC3gFL75ZZ7RK5uUYpnKlV2pouB/VXg6QJQwk0mRbyvDm4g+YfVx8ubmZXc2uP97+u7j6NL8e9xKyfhX6Rnaz/HNHHlxN38KVC01fHRYohA9FX44vxq9/aOUvu65GkdIqpFp5fTJfiTX4bU2eUr9GJOwYFk2MIXGGunFsR/1lhtBwbBheLG6v5wW8+3B7U4AhHeoYxJ015eplAdFGctYT0HfSjcQsYGUdjZZKUANtuT9W3oDKG6/hISwhpiCSt3493m05pfstt5vXngMsztR1oqyuQKZU50+rBaXWavoJcNKjRsqbkQ5+8KWI2FlN4pWnvOLVZIlV2vwy9fMRZZoxZK6VP4r5G6Y7meNB0kzfeRKdsl467YvZ7gx5J3oXSVyKZQ+Lrwqyz+9wu5UBfEmu6+T4a0NJ/HVfYKuSlTJ6exV7n4j1Hmkj21lrikJ7q1wz+OrstSOmPCyJd9e32HX/AZEGZz4=
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-List available parametric models
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/list-tasks.api.mdx b/docs/api/openapi-docs/list-tasks.api.mdx
deleted file mode 100644
index 6acebecd..00000000
--- a/docs/api/openapi-docs/list-tasks.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: list-tasks
-title: "List tasks"
-description: "Returns paginated list of tasks."
-sidebar_label: "List tasks"
-hide_title: true
-hide_table_of_contents: true
-api: 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
-sidebar_class_name: "get api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns paginated list of tasks.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/batch-fetch-model-definitions.RequestSchema.json b/docs/api/openapi-docs/models-batch-fetch-definitions.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/batch-fetch-model-definitions.RequestSchema.json
rename to docs/api/openapi-docs/models-batch-fetch-definitions.RequestSchema.json
diff --git a/docs/api/openapi-docs/batch-fetch-model-definitions.StatusCodes.json b/docs/api/openapi-docs/models-batch-fetch-definitions.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/batch-fetch-model-definitions.StatusCodes.json
rename to docs/api/openapi-docs/models-batch-fetch-definitions.StatusCodes.json
diff --git a/docs/api/openapi-docs/models-batch-fetch-definitions.api.mdx b/docs/api/openapi-docs/models-batch-fetch-definitions.api.mdx
new file mode 100644
index 00000000..b3ce2ac7
--- /dev/null
+++ b/docs/api/openapi-docs/models-batch-fetch-definitions.api.mdx
@@ -0,0 +1,70 @@
+---
+id: models-batch-fetch-definitions
+title: "Models - batch-fetch definitions"
+description: "Returns parameter schemas and defaults for the requested model names."
+sidebar_label: "Models - batch-fetch definitions"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns parameter schemas and defaults for the requested model names.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/build-a-dragon-cup.RequestSchema.json b/docs/api/openapi-docs/models-build-a-dragon-cup.RequestSchema.json
similarity index 65%
rename from docs/api/openapi-docs/build-a-dragon-cup.RequestSchema.json
rename to docs/api/openapi-docs/models-build-a-dragon-cup.RequestSchema.json
index c680f2a1..a283cd15 100644
--- a/docs/api/openapi-docs/build-a-dragon-cup.RequestSchema.json
+++ b/docs/api/openapi-docs/models-build-a-dragon-cup.RequestSchema.json
@@ -1 +1 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"example":{"params":{"height":8,"radiusBottom":4,"radiusTopOffset":2,"radiusMidOffset":2,"rotationTopAngle":20,"rotationMidAngle":20,"nrSkinCellsVertical":5,"nrSkinCellsHorizontal":10,"nrSkinCellDivisionsTop":1,"nrSkinCellDivisionsBottom":3,"skinCellOuterHeight":0.4,"skinCellInnerHeight":0.3,"skinCellBottomHeight":0.4,"skinCellTopHeight":0.4,"thickness":0.6,"bottomThickness":1,"precision":0.01,"rotation":0,"scale":1,"origin":[0,0,0],"direction":[0,1,0]},"outputs":{"formats":["step","gltf"]}},"schema":{"type":"object","properties":{"params":{"type":"object","properties":{"height":{"description":"Total cup height (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"radiusBottom":{"description":"Radius at the base (cm)","type":"number","exclusiveMinimum":0,"maximum":30},"radiusTopOffset":{"description":"How much the top radius differs from bottom","type":"number","minimum":0,"maximum":20},"radiusMidOffset":{"description":"Mid-section radius offset","type":"number","minimum":0,"maximum":20},"rotationTopAngle":{"description":"Top twist angle (degrees)","type":"number","minimum":-360,"maximum":360},"rotationMidAngle":{"description":"Mid twist angle (degrees)","type":"number","minimum":-360,"maximum":360},"nrSkinCellsVertical":{"description":"Vertical skin cell count","type":"integer","exclusiveMinimum":0,"maximum":30},"nrSkinCellsHorizontal":{"description":"Horizontal skin cell count","type":"integer","exclusiveMinimum":0,"maximum":50},"nrSkinCellDivisionsTop":{"description":"Subdivisions at top of each cell","type":"integer","exclusiveMinimum":0,"maximum":10},"nrSkinCellDivisionsBottom":{"description":"Subdivisions at bottom of each cell","type":"integer","exclusiveMinimum":0,"maximum":10},"skinCellOuterHeight":{"description":"Outer cell extrusion height","type":"number","exclusiveMinimum":0,"maximum":5},"skinCellInnerHeight":{"description":"Inner cell extrusion height","type":"number","exclusiveMinimum":0,"maximum":5},"skinCellBottomHeight":{"description":"Bottom cell height","type":"number","exclusiveMinimum":0,"maximum":5},"skinCellTopHeight":{"description":"Top cell height","type":"number","exclusiveMinimum":0,"maximum":5},"thickness":{"description":"Shell wall thickness","type":"number","exclusiveMinimum":0,"maximum":5},"bottomThickness":{"description":"Bottom plate thickness","type":"number","exclusiveMinimum":0,"maximum":5},"precision":{"description":"Geometry precision (lower = finer)","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"rotation":{"description":"Final rotation angle (degrees)","type":"number","minimum":-360,"maximum":360},"scale":{"description":"Uniform scale factor","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"},"origin":{"description":"[x, y, z] placement origin","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"},"direction":{"description":"[x, y, z] up direction","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"}},"additionalProperties":false,"description":"Dragon Cup model parameters — all optional, sane defaults apply","title":"DragonCupParams"},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive — choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) — each produces a separate downloadable result. Do not include both 'step' and 'stpz' — only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["outputs"],"additionalProperties":false,"description":"Request body for the Dragon Cup model","title":"DragonCupBody"}}}}}
\ No newline at end of file
+{"title":"Body","body":{"required":true,"content":{"application/json":{"example":{"params":{"height":8,"radiusBottom":4,"radiusTopOffset":2,"radiusMidOffset":2,"rotationTopAngle":20,"rotationMidAngle":20,"nrSkinCellsVertical":5,"nrSkinCellsHorizontal":10,"nrSkinCellDivisionsTop":1,"nrSkinCellDivisionsBottom":3,"skinCellOuterHeight":0.4,"skinCellInnerHeight":0.3,"skinCellBottomHeight":0.4,"skinCellTopHeight":0.4,"thickness":0.6,"bottomThickness":1,"precision":0.01,"rotation":0,"scale":1,"origin":[0,0,0],"direction":[0,1,0]},"outputs":{"formats":["step","gltf"]}},"schema":{"type":"object","properties":{"params":{"type":"object","properties":{"height":{"description":"Total cup height (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"radiusBottom":{"description":"Radius at the base (cm)","type":"number","exclusiveMinimum":0,"maximum":30},"radiusTopOffset":{"description":"How much the top radius differs from bottom","type":"number","minimum":0,"maximum":20},"radiusMidOffset":{"description":"Mid-section radius offset","type":"number","minimum":0,"maximum":20},"rotationTopAngle":{"description":"Top twist angle (degrees)","type":"number","minimum":-360,"maximum":360},"rotationMidAngle":{"description":"Mid twist angle (degrees)","type":"number","minimum":-360,"maximum":360},"nrSkinCellsVertical":{"description":"Vertical skin cell count","type":"integer","exclusiveMinimum":0,"maximum":30},"nrSkinCellsHorizontal":{"description":"Horizontal skin cell count","type":"integer","exclusiveMinimum":0,"maximum":50},"nrSkinCellDivisionsTop":{"description":"Subdivisions at top of each cell","type":"integer","exclusiveMinimum":0,"maximum":10},"nrSkinCellDivisionsBottom":{"description":"Subdivisions at bottom of each cell","type":"integer","exclusiveMinimum":0,"maximum":10},"skinCellOuterHeight":{"description":"Outer cell extrusion height","type":"number","exclusiveMinimum":0,"maximum":5},"skinCellInnerHeight":{"description":"Inner cell extrusion height","type":"number","exclusiveMinimum":0,"maximum":5},"skinCellBottomHeight":{"description":"Bottom cell height","type":"number","exclusiveMinimum":0,"maximum":5},"skinCellTopHeight":{"description":"Top cell height","type":"number","exclusiveMinimum":0,"maximum":5},"thickness":{"description":"Shell wall thickness","type":"number","exclusiveMinimum":0,"maximum":5},"bottomThickness":{"description":"Bottom plate thickness","type":"number","exclusiveMinimum":0,"maximum":5},"precision":{"description":"Geometry precision (lower = finer)","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"rotation":{"description":"Final rotation angle (degrees)","type":"number","minimum":-360,"maximum":360},"scale":{"description":"Uniform scale factor","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"},"origin":{"description":"[x, y, z] placement origin","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"},"direction":{"description":"[x, y, z] up direction","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"}},"additionalProperties":false,"description":"Dragon Cup model parameters - all optional, sane defaults apply","title":"DragonCupParams"},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["outputs"],"additionalProperties":false,"description":"Request body for the Dragon Cup model","title":"DragonCupBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/models-build-a-dragon-cup.StatusCodes.json b/docs/api/openapi-docs/models-build-a-dragon-cup.StatusCodes.json
new file mode 100644
index 00000000..111cf128
--- /dev/null
+++ b/docs/api/openapi-docs/models-build-a-dragon-cup.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/models-build-a-dragon-cup.api.mdx b/docs/api/openapi-docs/models-build-a-dragon-cup.api.mdx
new file mode 100644
index 00000000..a7f003f2
--- /dev/null
+++ b/docs/api/openapi-docs/models-build-a-dragon-cup.api.mdx
@@ -0,0 +1,70 @@
+---
+id: models-build-a-dragon-cup
+title: "Models - build a Dragon Cup"
+description: "Parametric dragon-scale textured cup with twisted lofted body, voronoi-like skin cells, and configurable shell thickness. All parameters are optional - defaults produce a ready-to-print model."
+sidebar_label: "Models - build a Dragon Cup"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Parametric dragon-scale textured cup with twisted lofted body, voronoi-like skin cells, and configurable shell thickness. All parameters are optional - defaults produce a ready-to-print model.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/build-a-phone-nest.RequestSchema.json b/docs/api/openapi-docs/models-build-a-phone-nest.RequestSchema.json
similarity index 61%
rename from docs/api/openapi-docs/build-a-phone-nest.RequestSchema.json
rename to docs/api/openapi-docs/models-build-a-phone-nest.RequestSchema.json
index 696404c5..dce35790 100644
--- a/docs/api/openapi-docs/build-a-phone-nest.RequestSchema.json
+++ b/docs/api/openapi-docs/models-build-a-phone-nest.RequestSchema.json
@@ -1 +1 @@
-{"title":"Body","body":{"required":true,"content":{"application/json":{"example":{"params":{"heightBottom":5,"heightTop":16,"widthBack":25,"widthFront":10,"length":16,"backOffset":6,"thickness":0.4,"applyOrnaments":false,"filletRadius":2,"phoneHeight":16.8,"phoneWidth":7.8,"phoneThickness":0.7,"precision":0.01,"rotation":0,"scale":1,"origin":[0,0,0],"direction":[0,1,0]},"outputs":{"formats":["step","gltf"]}},"schema":{"type":"object","properties":{"params":{"type":"object","properties":{"heightBottom":{"description":"Height of the bottom section (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"heightTop":{"description":"Height of the top section (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"widthBack":{"description":"Width at the back (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"widthFront":{"description":"Width at the front (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"length":{"description":"Depth / length (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"backOffset":{"description":"Back curve offset (cm)","type":"number","minimum":0,"maximum":30},"thickness":{"description":"Shell wall thickness","type":"number","exclusiveMinimum":0,"maximum":5},"applyOrnaments":{"description":"Add decorative perforations to the surface","type":"boolean"},"filletRadius":{"description":"Fillet radius on loft edges","type":"number","minimum":0,"maximum":15},"phoneHeight":{"description":"Phone mock-up height (cm)","type":"number","exclusiveMinimum":0,"maximum":35},"phoneWidth":{"description":"Phone mock-up width (cm)","type":"number","exclusiveMinimum":0,"maximum":35},"phoneThickness":{"description":"Phone mock-up thickness (cm)","type":"number","exclusiveMinimum":0,"maximum":3},"precision":{"description":"Geometry precision (lower = finer)","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"rotation":{"description":"Final rotation angle (degrees)","type":"number","minimum":-360,"maximum":360},"scale":{"description":"Uniform scale factor","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"},"origin":{"description":"[x, y, z] placement origin","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"},"direction":{"description":"[x, y, z] up direction","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"}},"additionalProperties":false,"description":"Phone Nest model parameters — all optional, sane defaults apply","title":"PhoneNestParams"},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive — choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) — each produces a separate downloadable result. Do not include both 'step' and 'stpz' — only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["outputs"],"additionalProperties":false,"description":"Request body for the Phone Nest model","title":"PhoneNestBody"}}}}}
\ No newline at end of file
+{"title":"Body","body":{"required":true,"content":{"application/json":{"example":{"params":{"heightBottom":5,"heightTop":16,"widthBack":25,"widthFront":10,"length":16,"backOffset":6,"thickness":0.4,"applyOrnaments":false,"filletRadius":2,"phoneHeight":16.8,"phoneWidth":7.8,"phoneThickness":0.7,"precision":0.01,"rotation":0,"scale":1,"origin":[0,0,0],"direction":[0,1,0]},"outputs":{"formats":["step","gltf"]}},"schema":{"type":"object","properties":{"params":{"type":"object","properties":{"heightBottom":{"description":"Height of the bottom section (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"heightTop":{"description":"Height of the top section (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"widthBack":{"description":"Width at the back (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"widthFront":{"description":"Width at the front (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"length":{"description":"Depth / length (cm)","type":"number","exclusiveMinimum":0,"maximum":50},"backOffset":{"description":"Back curve offset (cm)","type":"number","minimum":0,"maximum":30},"thickness":{"description":"Shell wall thickness","type":"number","exclusiveMinimum":0,"maximum":5},"applyOrnaments":{"description":"Add decorative perforations to the surface","type":"boolean"},"filletRadius":{"description":"Fillet radius on loft edges","type":"number","minimum":0,"maximum":15},"phoneHeight":{"description":"Phone mock-up height (cm)","type":"number","exclusiveMinimum":0,"maximum":35},"phoneWidth":{"description":"Phone mock-up width (cm)","type":"number","exclusiveMinimum":0,"maximum":35},"phoneThickness":{"description":"Phone mock-up thickness (cm)","type":"number","exclusiveMinimum":0,"maximum":3},"precision":{"description":"Geometry precision (lower = finer)","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"rotation":{"description":"Final rotation angle (degrees)","type":"number","minimum":-360,"maximum":360},"scale":{"description":"Uniform scale factor","type":"number","minimum":0.000001,"maximum":1000,"title":"PositiveScale"},"origin":{"description":"[x, y, z] placement origin","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"},"direction":{"description":"[x, y, z] up direction","type":"array","prefixItems":[{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000},{"type":"number","minimum":-1000,"maximum":1000}],"title":"Point3"}},"additionalProperties":false,"description":"Phone Nest model parameters - all optional, sane defaults apply","title":"PhoneNestParams"},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["outputs"],"additionalProperties":false,"description":"Request body for the Phone Nest model","title":"PhoneNestBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/models-build-a-phone-nest.StatusCodes.json b/docs/api/openapi-docs/models-build-a-phone-nest.StatusCodes.json
new file mode 100644
index 00000000..111cf128
--- /dev/null
+++ b/docs/api/openapi-docs/models-build-a-phone-nest.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/models-build-a-phone-nest.api.mdx b/docs/api/openapi-docs/models-build-a-phone-nest.api.mdx
new file mode 100644
index 00000000..564f3b0d
--- /dev/null
+++ b/docs/api/openapi-docs/models-build-a-phone-nest.api.mdx
@@ -0,0 +1,70 @@
+---
+id: models-build-a-phone-nest
+title: "Models - build a Phone Nest"
+description: "Parametric 3D-printable desktop phone holder/stand with a lofted cradle surface, optional ornamental perforations, and a phone mock-up shape. All parameters are optional - defaults produce a ready-to-print model."
+sidebar_label: "Models - build a Phone Nest"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Parametric 3D-printable desktop phone holder/stand with a lofted cradle surface, optional ornamental perforations, and a phone mock-up shape. All parameters are optional - defaults produce a ready-to-print model.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/execute-a-parametric-cad-model.ParamsDetails.json b/docs/api/openapi-docs/models-execute-a-parametric-model.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/execute-a-parametric-cad-model.ParamsDetails.json
rename to docs/api/openapi-docs/models-execute-a-parametric-model.ParamsDetails.json
diff --git a/docs/api/openapi-docs/models-execute-a-parametric-model.RequestSchema.json b/docs/api/openapi-docs/models-execute-a-parametric-model.RequestSchema.json
new file mode 100644
index 00000000..703dde85
--- /dev/null
+++ b/docs/api/openapi-docs/models-execute-a-parametric-model.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"Model-specific parameters. Omitted params use their defaults. See model definition for available options.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["outputs"],"description":"Submit a parametric model for generation with specified parameters and output formats","title":"ModelSubmissionBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/models-execute-a-parametric-model.StatusCodes.json b/docs/api/openapi-docs/models-execute-a-parametric-model.StatusCodes.json
new file mode 100644
index 00000000..73230f40
--- /dev/null
+++ b/docs/api/openapi-docs/models-execute-a-parametric-model.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/models-execute-a-parametric-model.api.mdx b/docs/api/openapi-docs/models-execute-a-parametric-model.api.mdx
new file mode 100644
index 00000000..fcc99f39
--- /dev/null
+++ b/docs/api/openapi-docs/models-execute-a-parametric-model.api.mdx
@@ -0,0 +1,70 @@
+---
+id: models-execute-a-parametric-model
+title: "Models - execute a parametric model"
+description: "Generic endpoint - works for any registered model. See model-specific endpoints for fully typed parameters. Always returns 202 with a task ID for polling."
+sidebar_label: "Models - execute a parametric model"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Generic endpoint - works for any registered model. See model-specific endpoints for fully typed parameters. Always returns 202 with a task ID for polling.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/generate-a-batch-of-parametric-models.ParamsDetails.json b/docs/api/openapi-docs/models-generate-a-batch.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/generate-a-batch-of-parametric-models.ParamsDetails.json
rename to docs/api/openapi-docs/models-generate-a-batch.ParamsDetails.json
diff --git a/docs/api/openapi-docs/models-generate-a-batch.RequestSchema.json b/docs/api/openapi-docs/models-generate-a-batch.RequestSchema.json
new file mode 100644
index 00000000..87c63c22
--- /dev/null
+++ b/docs/api/openapi-docs/models-generate-a-batch.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"description":"Array of parameter variations. Each item produces a separate output with the same model."},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["items","outputs"],"description":"Submit multiple parameter variations of the same model for parallel generation","title":"BatchModelSubmissionBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/generate-a-batch-of-parametric-models.StatusCodes.json b/docs/api/openapi-docs/models-generate-a-batch.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/generate-a-batch-of-parametric-models.StatusCodes.json
rename to docs/api/openapi-docs/models-generate-a-batch.StatusCodes.json
diff --git a/docs/api/openapi-docs/models-generate-a-batch.api.mdx b/docs/api/openapi-docs/models-generate-a-batch.api.mdx
new file mode 100644
index 00000000..b794a656
--- /dev/null
+++ b/docs/api/openapi-docs/models-generate-a-batch.api.mdx
@@ -0,0 +1,70 @@
+---
+id: models-generate-a-batch
+title: "Models - generate a batch"
+description: "Creates a compound task with one sub-task per item. Each item can have different parameters but shares the same output config."
+sidebar_label: "Models - generate a batch"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Creates a compound task with one sub-task per item. Each item can have different parameters but shares the same output config.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-model-parameter-definitions.ParamsDetails.json b/docs/api/openapi-docs/models-get-parameter-definitions.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/get-model-parameter-definitions.ParamsDetails.json
rename to docs/api/openapi-docs/models-get-parameter-definitions.ParamsDetails.json
diff --git a/docs/api/openapi-docs/get-model-parameter-definitions.RequestSchema.json b/docs/api/openapi-docs/models-get-parameter-definitions.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/get-model-parameter-definitions.RequestSchema.json
rename to docs/api/openapi-docs/models-get-parameter-definitions.RequestSchema.json
diff --git a/docs/api/openapi-docs/get-model-parameter-definitions.StatusCodes.json b/docs/api/openapi-docs/models-get-parameter-definitions.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/get-model-parameter-definitions.StatusCodes.json
rename to docs/api/openapi-docs/models-get-parameter-definitions.StatusCodes.json
diff --git a/docs/api/openapi-docs/models-get-parameter-definitions.api.mdx b/docs/api/openapi-docs/models-get-parameter-definitions.api.mdx
new file mode 100644
index 00000000..3c52f0b1
--- /dev/null
+++ b/docs/api/openapi-docs/models-get-parameter-definitions.api.mdx
@@ -0,0 +1,70 @@
+---
+id: models-get-parameter-definitions
+title: "Models - get parameter definitions"
+description: "Returns parameter schema, types, defaults, and limits for the specified model."
+sidebar_label: "Models - get parameter definitions"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns parameter schema, types, defaults, and limits for the specified model.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-result-default-format.RequestSchema.json b/docs/api/openapi-docs/models-list-available-models.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-result-default-format.RequestSchema.json
rename to docs/api/openapi-docs/models-list-available-models.RequestSchema.json
diff --git a/docs/api/openapi-docs/list-available-parametric-models.StatusCodes.json b/docs/api/openapi-docs/models-list-available-models.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/list-available-parametric-models.StatusCodes.json
rename to docs/api/openapi-docs/models-list-available-models.StatusCodes.json
diff --git a/docs/api/openapi-docs/models-list-available-models.api.mdx b/docs/api/openapi-docs/models-list-available-models.api.mdx
new file mode 100644
index 00000000..8c72005a
--- /dev/null
+++ b/docs/api/openapi-docs/models-list-available-models.api.mdx
@@ -0,0 +1,62 @@
+---
+id: models-list-available-models
+title: "Models - list available models"
+description: "Models - list available models"
+sidebar_label: "Models - list available models"
+hide_title: true
+hide_table_of_contents: true
+api: eJyVVV1v4zYQ/CuLfborZCtp+6Q3N02uRq93Rp0DCgRBQZNriwlF8siV7gxD/71YyXZsX/rlF1v0cHY5O0PtkNUmY/WAvwVDLuNjgYlyDD5TxmqH319dyZehrJONbIPHasSCVw2Bs5mxQB08k2eBqhid1Uqg5VMW/A6zrqlR8ou3kbDCsHoiLRtjCpES27FaeD7BrEJwpPzInhkrTi31BRrF/4GqGc/zglMpqS0WaJma0/XMyfoNCvHZIWedsk6tHMFABdm1mwxcKwatPKwI2kwGvliugWuCcqxY7kSXHsibGKznjH0vmn5ubSIjSjdHpZUxVqoptzjpfa1cpstu3tvMENagnAN17CyqpBriZDXsWQtky44OQ5Jt3zQQnnGv4v/rYdlqTTkD+Y5ciAQydWW99ZtBAXfo8Vy5V5v6fW8y7OVzWWk0I0xGylf4GuI6GKxwQ8PoFddYYamiLbvr8gjLlDpK4u8dtslhhTVzzFUpyOnK8mq7sjw11OFlC4sUTKuHh/5RmHSbLG8Hqlm0v9J21krRh8fTv5di9NGAp6AXEw6L4kKpUZMylLBAsQxW+MdktphPRsCF9DpEMjBbzOGZtlMYnnO1F6QArUwh4+gocQHfwZsv1hmtknk7hZlsGXwaWh4GdTADZKGBRJpsRxl+vPoB5h+Wn+7u5jfz2w/3fy5vPi5up4OBrF+H4SD7Sf60Fw9uZj/DjQvt0B0WKIKPTV9Pr6dX3xzlF7upJ5HSOqRGeX1mYuEa07YhT2m4RIR2Css2xpA4Q9M6tpNhM0NoObYMb5b3t4sC3r2/vyvAkA5NDJLNhnL9toBoIznrCegr6VY4C1hbR5OVEtQoWx6WlTeg8tZreAoriCmI4a3fTPd3nNLDHbef10EDLC7cdeasvkCm1OSP6yWlzmr6G2A5oCbKm4kOfkylmNhZTZKUl7qS1GSJVdr+Y+nXGWWaMWRulD/h/NfInU3xaGimr1xGp6yXcw6t7PZxfBC3iyGuJbDHS68Ocpc/4G4n8n9Kru9l+XNLSdL1WGCnkpXaQ7iKQ0okeM+0lZtZa4oieqdcO6bq4pUjkTxeEe9u77Hv/wKWz2SP
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Models - list available models
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/request-a-file-upload-url.StatusCodes.json b/docs/api/openapi-docs/request-a-file-upload-url.StatusCodes.json
deleted file mode 100644
index 67aa78c3..00000000
--- a/docs/api/openapi-docs/request-a-file-upload-url.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"201":{"description":"Upload URL and file ID","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"fileId":{"type":"string","description":"Assigned file identifier — use this to reference the file in subsequent API calls","format":"uuid"},"uploadUrl":{"type":"string","description":"Pre-signed URL to PUT the raw file bytes to. Send the file content with Content-Type and Content-Length headers matching the request.","format":"uri"},"expiresIn":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Seconds until the upload URL expires. You must complete the PUT within this window."},"maxBytes":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Maximum allowed file size in bytes for this upload. Determined by your plan tier."},"status":{"type":"string","const":"pending"}},"required":["fileId","uploadUrl","expiresIn","maxBytes","status"],"additionalProperties":false,"description":"Response after requesting a file upload. Contains the pre-signed URL to PUT your file to.","title":"UploadResult"}},"required":["ok","data"],"additionalProperties":false,"description":"Success envelope containing the pre-signed upload URL and file metadata","title":"UploadResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/request-a-file-upload-url.api.mdx b/docs/api/openapi-docs/request-a-file-upload-url.api.mdx
deleted file mode 100644
index 074d47d3..00000000
--- a/docs/api/openapi-docs/request-a-file-upload-url.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: request-a-file-upload-url
-title: "Request a file upload URL"
-description: "Returns a pre-signed URL for uploading a file via PUT."
-sidebar_label: "Request a file upload URL"
-hide_title: true
-hide_table_of_contents: true
-api: eJztWNtuIzcS/ZUCX2Zm0WpJjp2J9aaxPYmw9tiwrL3AMAKqWZI4wyY7vMhWDAH7EfuF+yWLIrullqxkLrvYl42f3C0263bOKRafmedzxwb37L1U6NhDxgS6wsrKS6PZgN2iD1Y74FBZ7Dg51yhgcnsJM2MhVMpwIfUcOMykQlhKDjeTu5xlzOIvAZ1/Z8SKDZ7jo7Qo2MDbgBkrjPaoPf3Eq0rJgpPB7kdHVp+ZKxZYcvrPrypkA2amH7HwLGOVNRVaL9HRr2RV8xJbK523Us9ZxkqpL1HP/YIN+hkr+VPzdHRysh/mtZVzqbmCZkOQulAhxoZPHrWTRsNrzOc5vKq49bnzWL3K4FVpBKrcTD++epPDxKGImRHSVYqvgOv4XHIPAj0WZC5n6038d9Hn/8z3q9HVBdAGYGbgF5hKUfvaTu6Oy9258rPOVGpuV+T6VXAeSu6LRdyDFz7U6YDa1+j3dOVT5muPpfY4R8syhk+FCk4u8UpqWYaSDXrR8/R/v/f2u7fH/R+Ojvfdv3jihU+GnPyVEg/RyAuXzpIbnZSKJlgXpo6gpj0hD7yJbxMyCag5XCUfBtCHH9/FINyCH518T1HsujL+adg5OvkeFvgEQs7R+Z2UNnmAvy5QQ2XNUgoUGaDmU4UOHNol2o6TAkGgCJvMw7/+8U+QM+AapEDtZdGk9pE7ItZSmuDUqnYbBQQt0IJfSAfDmxF8wlUW/cAn6TyBMn4tHVgMhDnCmTZN2NKBRhQoiIhfDK3+0Q/rddZi6v2WXruAbWDwkDEuhKQQubppEXPGlcOXUhIVYVdK2oUazjxasFigXFKMFPDk9jJLhV0gWP6YAo/mqdbSw6P0C6nr7FTSpow/Si3MY4xfekUJIIGbRGtRk9brFKyrjHYJ0ke9/ktMTDYOJjKT+dE5+68pmPnUWjM1RiHXaXfnk1iuMya4/0IxHIlDcrIb0tDVyU8gioicSbQRpsFhwp03YHGGFnWBWw5I3WYcYbPgSjmWsSRzbMBCkIJYlko7serzHt3s9hZvfrvkOYxRixekjDDYSAShNJZrTzMWyAVal0SlgVjdqfKdGKykECKg0I30Nyjeaa/3tn96enRy/Pa4d3ra3495jIXRwkHQXqo90YLacA5/NwFK0sHClJVCn0pB2dngXroN2tfR/rtv1OjPeVwLKXClzGMDnx3Njr0vepRiyeEcPdpSUmWnK1iZYKFSXIOXaJMWe+6DOwSRmgKsQk19mB0Sp5FgbaC1K9ZKxcbK1wpWEgfgtTBFnLSOO02QhDIutYu1qQ5iOUYeP/KmrUpJXm7RBeVfRGg+sZr7X+f4OBQFOgeol6hMlUjCpW4Qf1B/t/JWoufR6gE3Y0Jq8Tzu9V7q5V+4kiJpMFpr7P9KKWMiiLLR6Gc3K4w4ePDaRzzJBHYsckE9PoUE8WPCGidOUtDDy9H58G50/eHni9vb69tIRHSOz7/AyE+h5HrfRPM1iT96LpV7merrKuEBnLeh8MGi2DioPT55tt6cw1NfONyQR+eJt5YXyb9df/dRWUffePiV0Nx3Veokuqlp+wWU+zknexGcpolX4DTM54TmJtAtUi9o1/OYssN8SgD5Wq+5Ftw2Pje82je7x4+TQ/wYx0PiH9z4gxv/x9yIEPALI6i9GxchyGkGYV1eye6y36VG5LqpO1H/jqyhi4pnFuhEyRbeV27QpfX5VPrpaip9LnB54GxpRIiDN1s/0E5FsNKv4lbDSv4ZV8NApu8f2j+PiXiJDu1FG7zy+JJlTJKNdK5kGUt3EexvneHNqJMW7GWrMBWKZqjLIT67AcSZ3GVQcJFR5ZZofQZ/gtePUomCW/EmhyF9EoFggt8cXamA4GibenRCB8e972D0YTx5/350Nrr4cPfz+Oz65iKPRSdpud1ezlw0RG1fpuwcwrb3FNvX9TVAbztLbxhBKZmZmKq6/u/q8sDZ8BzOlAkxfpYxKmlKSz/v5Ucv2S/ni06FNrKAxpCKW16it7KIe8WkwRw11lPf8GaUwzhUlbHeQRmUl536+sUEXwUPr8d3FzcZ/Hh59z4DgXSqNjRAl+gWbzKoZIVKaholsQi0ZxbPRJ0pp1WpMC6+JtZxt9IFfDRTug2gI5fU87zOGi+iqtcJbXJAx9Ud/O5gd50xOi676xm1CVngbyzsxlUdrkWHhohIVTrmKlkgcWxrl+hrJXpuV79r+vCOhBfiZ8l1a8/tIN86BdMRcr+Az9v29u0XiTXhSMq6leJSx9kyTZVJNO6JjQSnPo1w8R6zGQpIyxYkMIN79vxMRZxYtV7T618CWlKBh4wtuZUkp1EEsobNJBCfcMUGrD1Wkh2uQtKAvYa9zpovhkWBlf/dtQ8tDby5Ht8Rq+rL0jI2YGb5I12k8kc2YCxjSeKjJMV3z0xxPQ+xj7K0J/39G7f/l0E=
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Returns a pre-signed URL for uploading a file via PUT.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.StatusCodes.json b/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.StatusCodes.json
deleted file mode 100644
index 93e09dac..00000000
--- a/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.StatusCodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{"responses":{"202":{"description":"Task re-queued","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier — use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"409":{"description":"Task is not in a retryable state","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.api.mdx b/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.api.mdx
deleted file mode 100644
index 31a9c811..00000000
--- a/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.api.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-id: retry-a-failed-or-cancelled-task
-title: "Retry a failed or cancelled task"
-description: "Re-queues a failed or cancelled task with the same parameters."
-sidebar_label: "Retry a failed or cancelled task"
-hide_title: true
-hide_table_of_contents: true
-api: eJztV19vGkcQ/yqjfYldHeC4eQlv1HYa1NRGgKtKFoqW3QE23O2e9w8OQif1Q/QT9pNUs3sHGHCTqFJfmif7jtmZ38z8fnOzG+b53LHuAxtzt3RskjGJTlhVemU067Ihth4DBnTAYcZVjhKMBcG1wJwePHdLeFJ+AX6B4HiBUHLLC/RoXZtlbPfEug8bpnmBrMvoWF+yjCkKUnK/YBmz+BiURcm63gbMmBMLLDjrbphfl3TKeav0nGVsZmzBPeuyEJRk1SFoygX616yakFNXGu3QkZ/Li0v6c8La1nkSJmG0R+3JkpdlrgQny84nR+abY1hm+gmFp1ytKdF6lYKZ5Z7N1JgcuU7enU8pEnDuv8JVXa4TlXieyr1WjwFTU5RE7dVMoYW//vgTgkPwC+XAGyhNnsPMWHCe++CAawkWvVW4QrDoQu7dqSon81Mw6qTYtobPcfW18ornCVgd9IznT3zt4FU68wpCaTQIi7Ha57t49zb/cuZDzLlXK4T74YdnKe6HDKXkHik1/MyLMid/HV6qzup1h+xcZ5MqXbGq2ufjw46wdQ32wU0yxqVUhITng73GzXju8BipD1ajhKcFauBw1buuG+aAC4GlR9mGAeGPkmrCUFbecrGE0pq5RRfl5ZWPaRCJr6h2KIexgUcZmCWr6fZteN+PxwO4vLiERkkN8EPQsdzcrbUghAKdS43ah9irbYe1L1ZVhPPNxZtjXd4aDzMT9H8myZh+lTG01tgvOxNG4peJ+SsXC6WxZZFLPs0RoneIh/d5+FvvQ/+6N+7f3X68GQ7vhsT/Ap3j868I8j4UXB+GaE7H8ei5yt1xje/KxAJw3gbhg0W5Bag9fvasZhE6nwbQIZnjT9C/TmKzXNRNf4b3kIt19g3CbyPk6BCq0mlSKaPTp6g4rDnFi1PONPlKnIb5XOn5NtEdUW/I63Us2WkVJYJ8K2quJbcNZtQrzE2Jh2GPhPH2hQ+WcqCNB0VKpNm9jonStMDvevmul/+lXiIF/MJI2imNixSk1fKlr3wnCoe+5WhXzYYaaN1gC+9L1+3QufZU+el6qnxb4uqISgNrZBDxgdZNhyJY5dfRVa9Uv+C6FwjCw2T/5xEJMMli32jLWx5fNvvxArlEy7Jme/691Rv0W8ngoGrClCihN+jDEtdtiM+uC4WRmLsMBJcZdXCF1mfwA5w9qVwKbuV5G3p0JBLCBB93j6aR4MgNWBSoVujgzcWP0L8d3b9717/q39yOP46u7gY37dh8IldMpO7ST3Xx4p5zlZsQ0bGMUcET6Nfti/blsUbVfNEq0UauarG9V1gloq+YEsxRo01U7g36bRiFsjTWOyhC7lUrER1M8GXwcDYa3wwy+PnD+F0GEoUpSuNQkvIX5xmUqsRcaQT8jCKQzwxmKsfWlJNVKpuLr0kbadX5ZKZ76067nr1cxNlb96upAcsO2PWMWVXGPNrC3c1GaFdK4AuGnWjV4lq2hNFJULSQ5kogKWEXl0RmFXoeSf5y6NMeqZukooLrPZ9Dksw/XAYP+7jZfYv+/WWyVgfNn06Zc6WpaCHdD5LSH0g6xK7XZB7vtBnrbrf3JPhJxhY0HroPbLOh5t7bvKro9WNAS9qdZGzFraJhGJUslaP/5elhtZ/j2bAWzTk019AXcDdS19ScFc8DPbGMLXG9uyFXkypr9E9A0o9pjd47dvSRp2GznYWDu9GYVdXfD+2O8g==
-sidebar_class_name: "post api-method"
-info_path: api/open/bitbybit-cad-cloud-api
-custom_edit_url: null
-hide_send_button: true
----
-
-import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
-import ParamsDetails from "@theme/ParamsDetails";
-import RequestSchema from "@theme/RequestSchema";
-import StatusCodes from "@theme/StatusCodes";
-import OperationTabs from "@theme/OperationTabs";
-import TabItem from "@theme/TabItem";
-import Heading from "@theme/Heading";
-import Translate from "@docusaurus/Translate";
-
-
-
-
-
-
-
-
-
-
-Re-queues a failed or cancelled task with the same parameters.
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.RequestSchema.json b/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.RequestSchema.json
new file mode 100644
index 00000000..34c923f8
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."},"faceIndex":{"default":0,"description":"0-based index of the face to analyze.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["stepFileId"],"additionalProperties":false,"description":"Compute the sheet-metal unfold metrics report for a single face of an uploaded STEP shape.","title":"UnfoldFaceReportBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.StatusCodes.json b/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.api.mdx b/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.api.mdx
new file mode 100644
index 00000000..bf94106d
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-a-face-metrics-report.api.mdx
@@ -0,0 +1,70 @@
+---
+id: sheet-metal-unfold-a-face-metrics-report
+title: "Sheet metal - unfold a face, metrics report"
+description: "Proprietary sheet-metal analysis: computes the unfold metrics report (developability, area, ...) for a single face of an uploaded STEP shape. Requires the 'cad' API key scope. Returns 202 with a task ID; the JSON report is delivered in the task metadata."
+sidebar_label: "Sheet metal - unfold a face, metrics report"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Proprietary sheet-metal analysis: computes the unfold metrics report (developability, area, ...) for a single face of an uploaded STEP shape. Requires the 'cad' API key scope. Returns 202 with a task ID; the JSON report is delivered in the task metadata.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.RequestSchema.json b/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.RequestSchema.json
new file mode 100644
index 00000000..a656c9d2
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."},"faceIndex":{"default":0,"description":"0-based index of the developable face (in the shape's BRepGraph face array) to unfold.","type":"integer","minimum":0,"maximum":9007199254740991},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Unfold a single developable face of an uploaded STEP shape to a flat face.","title":"UnfoldFaceToFlatBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.StatusCodes.json b/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.api.mdx b/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.api.mdx
new file mode 100644
index 00000000..a9e1e7db
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-a-face-to-flat-geometry.api.mdx
@@ -0,0 +1,70 @@
+---
+id: sheet-metal-unfold-a-face-to-flat-geometry
+title: "Sheet metal - unfold a face to flat geometry"
+description: "Proprietary sheet-metal unfold: flattens a single developable face (by index) of an uploaded STEP shape. Requires the 'cad' API key scope. Returns 202 with a task ID; the flattened geometry is delivered as the task's output files."
+sidebar_label: "Sheet metal - unfold a face to flat geometry"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Proprietary sheet-metal unfold: flattens a single developable face (by index) of an uploaded STEP shape. Requires the 'cad' API key scope. Returns 202 with a task ID; the flattened geometry is delivered as the task's output files.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.RequestSchema.json b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.RequestSchema.json
new file mode 100644
index 00000000..b0705aa1
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."},"kFactor":{"default":0.5,"description":"Sheet-metal K-factor (neutral-axis position), typically ~0.5.","type":"number","minimum":0,"maximum":1},"thicknessOverride":{"default":0,"description":"Sheet thickness override in model units; 0 auto-detects thickness from face pairs.","type":"number","minimum":0},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Flatten every constant-thickness sheet-metal solid in an uploaded STEP file AND return the per-solid metrics report - both in one call.","title":"UnfoldSolidBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.StatusCodes.json b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.api.mdx b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.api.mdx
new file mode 100644
index 00000000..0f22a5dd
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-geometry-report.api.mdx
@@ -0,0 +1,70 @@
+---
+id: sheet-metal-unfold-all-solids-geometry-report
+title: "Sheet metal - unfold all solids, geometry + report"
+description: "Proprietary sheet-metal unfold, full workflow: flattens every solid in an uploaded STEP file AND returns per-solid metrics in one call. Requires the 'cad' API key scope. Returns 202 with a task ID; flats are combined into one compound output per format and the per-solid report array is delivered in the task metadata."
+sidebar_label: "Sheet metal - unfold all solids, geometry + report"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Proprietary sheet-metal unfold, full workflow: flattens every solid in an uploaded STEP file AND returns per-solid metrics in one call. Requires the 'cad' API key scope. Returns 202 with a task ID; flats are combined into one compound output per format and the per-solid report array is delivered in the task metadata.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.RequestSchema.json b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.RequestSchema.json
new file mode 100644
index 00000000..62ef2090
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."},"kFactor":{"default":0.5,"description":"Sheet-metal K-factor (neutral-axis position), typically ~0.5.","type":"number","minimum":0,"maximum":1},"thicknessOverride":{"default":0,"description":"Sheet thickness override in model units; 0 auto-detects thickness from face pairs.","type":"number","minimum":0}},"required":["stepFileId"],"additionalProperties":false,"description":"Compute per-solid sheet-metal unfold metrics for every solid in an uploaded STEP file.","title":"UnfoldSolidReportBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.StatusCodes.json b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.api.mdx b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.api.mdx
new file mode 100644
index 00000000..7212f947
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-metrics-report.api.mdx
@@ -0,0 +1,70 @@
+---
+id: sheet-metal-unfold-all-solids-metrics-report
+title: "Sheet metal - unfold all solids, metrics report"
+description: "Proprietary sheet-metal analysis: computes per-solid unfold metrics for every solid in an uploaded STEP file. Requires the 'cad' API key scope. Returns 202 with a task ID; the JSON report array is delivered in the task metadata."
+sidebar_label: "Sheet metal - unfold all solids, metrics report"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Proprietary sheet-metal analysis: computes per-solid unfold metrics for every solid in an uploaded STEP file. Requires the 'cad' API key scope. Returns 202 with a task ID; the JSON report array is delivered in the task metadata.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.RequestSchema.json b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.RequestSchema.json
new file mode 100644
index 00000000..18667295
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stepFileId":{"type":"string","minLength":1,"description":"ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."},"kFactor":{"default":0.5,"description":"Sheet-metal K-factor (neutral-axis position), typically ~0.5.","type":"number","minimum":0,"maximum":1},"thicknessOverride":{"default":0,"description":"Sheet thickness override in model units; 0 auto-detects thickness from face pairs.","type":"number","minimum":0},"outputs":{"type":"object","properties":{"formats":{"minItems":1,"type":"array","items":{"type":"string","enum":["step","stpz","decomposed-mesh","gltf"],"description":"Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both.","title":"OutputFormat"},"description":"Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."},"meshPrecision":{"description":"Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"gltfMeshPrecision":{"description":"Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.","type":"number","minimum":0.0001,"maximum":10,"example":0.1,"title":"MeshPrecision"},"adjustYtoZ":{"description":"Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.","type":"boolean"}},"required":["formats"],"additionalProperties":false,"description":"Controls which output formats are generated and their quality settings","title":"OutputOptions"}},"required":["stepFileId"],"additionalProperties":false,"description":"Flatten every constant-thickness sheet-metal solid in an uploaded STEP file to flat patterns.","title":"UnfoldSolidToFlatBody"}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.StatusCodes.json b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.StatusCodes.json
new file mode 100644
index 00000000..efb0782f
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.api.mdx b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.api.mdx
new file mode 100644
index 00000000..5fb715b5
--- /dev/null
+++ b/docs/api/openapi-docs/sheet-metal-unfold-all-solids-to-flat-geometry.api.mdx
@@ -0,0 +1,70 @@
+---
+id: sheet-metal-unfold-all-solids-to-flat-geometry
+title: "Sheet metal - unfold all solids to flat geometry"
+description: "Proprietary sheet-metal unfold: loads every solid in an uploaded STEP file and flattens each to a flat pattern. Requires the 'cad' API key scope. Returns 202 with a task ID; all flats are combined into one compound output per format."
+sidebar_label: "Sheet metal - unfold all solids to flat geometry"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Proprietary sheet-metal unfold: loads every solid in an uploaded STEP file and flattens each to a flat pattern. Requires the 'cad' API key scope. Returns 202 with a task ID; all flats are combined into one compound output per format.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/cancel-a-task.ParamsDetails.json b/docs/api/openapi-docs/tasks-cancel-a-task.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/cancel-a-task.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-cancel-a-task.ParamsDetails.json
diff --git a/docs/api/openapi-docs/get-task-result-in-a-specific-format.RequestSchema.json b/docs/api/openapi-docs/tasks-cancel-a-task.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-result-in-a-specific-format.RequestSchema.json
rename to docs/api/openapi-docs/tasks-cancel-a-task.RequestSchema.json
diff --git a/docs/api/openapi-docs/cancel-a-task.StatusCodes.json b/docs/api/openapi-docs/tasks-cancel-a-task.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/cancel-a-task.StatusCodes.json
rename to docs/api/openapi-docs/tasks-cancel-a-task.StatusCodes.json
diff --git a/docs/api/openapi-docs/tasks-cancel-a-task.api.mdx b/docs/api/openapi-docs/tasks-cancel-a-task.api.mdx
new file mode 100644
index 00000000..7579c7cf
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-cancel-a-task.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-cancel-a-task
+title: "Tasks - cancel a task"
+description: "Cancels a waiting or queued task. Has no effect on completed/failed tasks."
+sidebar_label: "Tasks - cancel a task"
+hide_title: true
+hide_table_of_contents: true
+api: eJy9Vt9vGzcM/lcIPrWDbCdbn+7NS5zVWJcYdjoMCIxClmhbzVm66odTw7j/vaDuLnHsdG2AYU/23VHkR/L7SO0xylXA4g5vZbgPOBeoKShvqmicxQIvpFVUBpDwIE00dgXOw5dEiTREGe778F4GsA5ouSQVwVlQblOVFEkPltKUrV3oo8BKermhSJ4j7tHKDWGB/HmsUaDhgJWMaxTo6UsynjQW0ScSGNSaNhKLPcZdxadC9MauUODS+Y2MWGBKRmN9nADnBeNLrOfsNFTOBgrs59ezM/55wVrlnEtiTMrZSDaypayq0ijJloPPgc33p7Dc4jOpyLl6V5GPpgnm7g9sFs6VJG3jPcQmRQYu40+4ekL3Y4+Vp61xKcyijCm8VL3n6Td2sKCl89TVIWeMdX3YlDs8LNJRmLlAqbXhY7KcHIBfyjLQCcOcXRpuoXEW4lpGkJkx8CADhKQUhbBMZbl71pdoYkmP/JxSSGU8wejusa3q6yDNmqjQ8QWWzjeYnpXkGAWTZ9oewbpmNO/O3p2S7NpFWLpk/zd+5SRrgeS98z/BMKfpx1z5S6q1sdTzJLVclATZO+TDAumr5CmABf49/DC+HN6Ob64/jabTmylLdEMhyNVPBHmfNtIeh+hOZ61HacpwWuObquk1hOiTismTfgRoI32N2HKFQhzr0/PT5hOML5vme6kafM/xnqiiyb5D+EraHUM1thlurIwHE9ewOa45xwNpNbguX02LtFrxoO4SfaLpiL1e5pK9rJWGIK9FLa2WvsNMdkulq+g47DNhZArEtdNYoCZeFnk7xDUWOJCVGWzPB3lrDPbNdqhRYCC/7VZH8iUWuI6xCsWAT/QXJi52CxP7mrYnNJp4p5Nq5ticPankTdxlV8PK/Em7YeLgd/PDzzMWXyOJQ6NHzsr8sltca5KaPIpurf3TG07GvcbgqGLKVaRhOBnDPe36kJ9DARunqQwClNSCu7clHwX8Am8eTKmV9PptH4Z8JJPBpQhxTdA1EQK7AU+KzJYCvDv7DcbXs49XV+OL8ej69tPs4mYy6ufGM7FyIm2Hfm+LBxfDS7goXcroUCAXvAF93j/vn53q06zWvYp85qlVBO2K90ZlXzklWJEl39B4OBn3YZaqyvkYYJPKaHoNycGlWKUIb2a3o4mAPz7cXgnQxLcJF0iz6tdvBVSmotJYAvpKKrFPAUtTUm8h2aopW8ivWRcy7KyCz24BlXc81I1d9du5K1Weu22/uhqgOGLXM2bVAiP5TbhZzshvjaLvGA6yVU9a3VPONmIKKLA0ilgFT3FZYN5QlH73r6Ff9sjdrFyIG2kPfObLHPTaddUu1OPm7Z+Wz397zWvlwcNnUJXSWK5aTmzfivyOtcP0OmfzfPMUWLQXwbnAteO1dYf7PXf1oy/rml9/SeRZtHOBW+kNT8AsYW0C/9cvT6jDPN9MW7W8he5i+B28ncYtd2Ury8RPKPCedk931npei074DKT5OFSKqnhw7GSz85R5HICXow+j2xHW9TdEeQPH
+sidebar_class_name: "delete api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Cancels a waiting or queued task. Has no effect on completed/failed tasks.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-all-task-results.ParamsDetails.json b/docs/api/openapi-docs/tasks-get-all-results.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/get-all-task-results.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-get-all-results.ParamsDetails.json
diff --git a/docs/api/openapi-docs/get-task-status.RequestSchema.json b/docs/api/openapi-docs/tasks-get-all-results.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-status.RequestSchema.json
rename to docs/api/openapi-docs/tasks-get-all-results.RequestSchema.json
diff --git a/docs/api/openapi-docs/get-all-task-results.StatusCodes.json b/docs/api/openapi-docs/tasks-get-all-results.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/get-all-task-results.StatusCodes.json
rename to docs/api/openapi-docs/tasks-get-all-results.StatusCodes.json
diff --git a/docs/api/openapi-docs/tasks-get-all-results.api.mdx b/docs/api/openapi-docs/tasks-get-all-results.api.mdx
new file mode 100644
index 00000000..96c9a9bc
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-get-all-results.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-get-all-results
+title: "Tasks - get all results"
+description: "Returns download URLs for every available result format in a single call. Use this instead of making multiple requests to /result/{format}."
+sidebar_label: "Tasks - get all results"
+hide_title: true
+hide_table_of_contents: true
+api: eJztWMFuGzcQ/ZUBL7aL1cpuc6luqq2kQlNbkOyigCEEFDleMeKSG5KrWBD234shtdZacuLkUhRoTra05JvHmfdmh9qywAvPBvfslvuVZ/OMSfTCqSooa9iATTHUzniQ9rPRlku4m7738GAd4BrdBviaK80XGsGhr3WgRyUPoAxw8MoUGkFwrXO48whhqTwo4wNyCfYBSr5SpoCy1kFVEeNTjT54CBb6CbC/TYhNzjJWccdLDOiI8pYZXiIbsMD9aixZxhQxrnhYsowRlHIo2SC4GjPmxRJLzgZbFjYV7fLBKVOwjCV8NmB1rSRrDjNAiYHxFWvmBOorazx6wvn5/Jz+PF991eZJK7NKieJad9KUonmWMWFNQBMIg1eVVoITRv+jJ6DtMWG7+IgiUBacrdAFlWjYVWfNwlqN3CR0H9Lh6Ug8fANUW2TfWcqd4xvKbcDSvw7RJvM4zYe66qplhRs4xbzI4aTQi5MMTnzAiv6WGDiRPzmLldkRvHP69RAThz2vCoNRtCSpJxGH5V6vSmMOo8dKOfTAHwI6uIClrV3+TBtOEQFanVT3WvRZXRToA0po90QxUOSWBssYPvKy0gST6OSFXrCm6cr3viXx/PgdLvOMcSkVBeZ60inHA9cejwT9qkSfOdkf0dmr5OuBvxhXmQStrHk1OnUJDsJSliiZ5HWWsaBCzBqZM0nJt/BHfC1tiAb4Pr6zWgj0HtCsUdsKgQzLlaGOJV/O4UHmXuQ53fUQ1jTE9M35m+Mucm0JpDby32oTrVLQOeteBxNWfoMF/uRiqQz2HHIZSxvRIW7uSv+v4fvx1fB2fHP9YTSd3kzJaCV6z4tvCPJ7XXJzGKLdHbUfuNL+OMc3VdIB+OBqEWqH8omgCfgY2E5H6MNYHu+fpkcwvkrGdlwkfs/5Hqpxd/qW4XdK8pBq10qfVVhCeZhzigfcSLDteSUu6qIgFbcH3et0RKhXMWUv+ygJ5HtZcyO5azm3fjoMe2SMX4+THl/GyoOxATYY9o3hh1F+GOV/aZQogbC0kg1YgVGBNAAPWJ9Xqr++6NMb0/e3aUhudlM1vZs8unU7Sdc0ULFlCJUf9GlnvlBhsVmokEtcvzBaWVmL+IHGYo+idipsItSwUn/gZlgTift59/GMHJh80V20HzXjl+0cv0Qu0bGsnfL/7g0n415acJA2YSuUMJyMaZDMIX72AyitRO0zEFxmVMI1upDBT3D6WWkpuJNnOQzj7EmKsHXYzYWpkuAJBhwKVGv08Ob8Fxhfz+7evh1fjkfXtx9mlzeTUR6rT+qKB9mV6bdd8uByeAWX2taRHcsYJTyRvsgv8vNjk6pi2avQRbEagbC78TglIlY8EhRo0CUtDyfjHGZ1VVkXfLpI9XZDta1DVQc4nd2OJhm8e3/7NgOJ1DGtR0nWX55lUKkKtTII+IiiJswsTqy9BadVKW0+fk3m4H5jBHy0C6icpfFImSLfNV8uYvPd1avNAcsO1PVMWU3GArrS3zzM0K2VwC8s7MdVPW5kT1iTHEUi1kogWWEfl1zmFAbuNl8N/TIiVbOyPpTcdDDj5Rh6UGDozHn+sHzb/TvoP3Zx3jmMmli/0lwZSnydblGpX9yT/UihF7Q8/hiQscHT1bo98TxjS0svwnu23ZJE7pxuGvr6U42OOsA8Y2vuFB0t9gOpPP0vX+553ZSdTnfWO4P20v0F5m3DMFTiNdc1fWIZW+Fm/3tAM2+ytosQkfRwKARWobPtaFaglvXUUt+NblnT/AMb0QMJ
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns download URLs for every available result format in a single call. Use this instead of making multiple requests to /result/\{format\}.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-result-default-format.ParamsDetails.json b/docs/api/openapi-docs/tasks-get-result-default-format.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-result-default-format.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-get-result-default-format.ParamsDetails.json
diff --git a/docs/api/openapi-docs/health-check.RequestSchema.json b/docs/api/openapi-docs/tasks-get-result-default-format.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/health-check.RequestSchema.json
rename to docs/api/openapi-docs/tasks-get-result-default-format.RequestSchema.json
diff --git a/docs/api/openapi-docs/get-task-result-default-format.StatusCodes.json b/docs/api/openapi-docs/tasks-get-result-default-format.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-result-default-format.StatusCodes.json
rename to docs/api/openapi-docs/tasks-get-result-default-format.StatusCodes.json
diff --git a/docs/api/openapi-docs/tasks-get-result-default-format.api.mdx b/docs/api/openapi-docs/tasks-get-result-default-format.api.mdx
new file mode 100644
index 00000000..2405c57f
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-get-result-default-format.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-get-result-default-format
+title: "Tasks - get result (default format)"
+description: "Returns a download URL for the task's primary result. For compound tasks, returns a manifest with per-sub-task download links."
+sidebar_label: "Tasks - get result (default format)"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns a download URL for the task's primary result. For compound tasks, returns a manifest with per-sub-task download links.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-result-in-a-specific-format.ParamsDetails.json b/docs/api/openapi-docs/tasks-get-result-in-a-specific-format.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-result-in-a-specific-format.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-get-result-in-a-specific-format.ParamsDetails.json
diff --git a/docs/api/openapi-docs/list-available-parametric-models.RequestSchema.json b/docs/api/openapi-docs/tasks-get-result-in-a-specific-format.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/list-available-parametric-models.RequestSchema.json
rename to docs/api/openapi-docs/tasks-get-result-in-a-specific-format.RequestSchema.json
diff --git a/docs/api/openapi-docs/get-task-result-in-a-specific-format.StatusCodes.json b/docs/api/openapi-docs/tasks-get-result-in-a-specific-format.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-result-in-a-specific-format.StatusCodes.json
rename to docs/api/openapi-docs/tasks-get-result-in-a-specific-format.StatusCodes.json
diff --git a/docs/api/openapi-docs/tasks-get-result-in-a-specific-format.api.mdx b/docs/api/openapi-docs/tasks-get-result-in-a-specific-format.api.mdx
new file mode 100644
index 00000000..6ee4ae73
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-get-result-in-a-specific-format.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-get-result-in-a-specific-format
+title: "Tasks - get result in a specific format"
+description: "Returns a download URL for the requested output format (e.g. glb, step, stpz)."
+sidebar_label: "Tasks - get result in a specific format"
+hide_title: true
+hide_table_of_contents: true
+api: eJztV1Fv2zYQ/isHPiUDLSdbX+Y3L3E7Y11i2MkwIDAKmrzIbCSSJSk3nqH/PhwlOY7tNm037GV9iWOLvPvu7vtOdxsWRR7Y4I7diPAQ2JwzhUF67aK2hg3YFGPlTQAByn40hRUKbqdv4d56iEsEjx8qDBEV2Cq6KtKDUkQ4wSzPIC8WHEJER3/dX6cZ48wJL0qM6MnrhhlRIhuwKMLDWDHONDl1Ii4ZZ2Rce1RsEH2FnAW5xFKwwYbFtaNbIXptcsZZ45UNWFVpxer9ICg2GF+ymm8dtje+zeGBgymGqvh88BxKjEKJKDgolLZ0NqDqlRiWp6yek/PgrAkYyN+PZ2f0cdTLthCFNg+MM2lNRBPpvHCu0FLQ+f77QJc2h0HYxXuUFLrz1qGPunFpH3bOLKwtUJjGeohNQihsEb/AVIfw1hfHqvU8qonHXtC5wYZZ0T4F2DCsSa0uMIPRo9MeA4j7iB7OYWkrnz2rv9dUHTrdFPol77MqzxsCd3e23O5gMM7wUZSuIDMNnCwvFqyudxlz9yzqHQhzzoRSmvyJYrKTp3tRBNzHc9nFrk0TlLYmIRJAnCmQoJJa2sQwzqKOCRqxvKFIZ+QAoiW+pBp+HapZJSWGAGhWWFiHQJwT2miT73YGImQL9iWI05btrK4J5KuzV4d8v7Ikqcqo/4rkKfaaM/Te+peNSau+gGG/C7nUBnsehRKLAiFZh3R5l1l/DN+OL4c34+urd6Pp9HpKPC4xBJF/gZNfq1KYfRfd7dSuotBFOMzxtWsoACH6SsbKo9oCNBEfI2sphCGO1bGelB7B+LLRjReywbfXMfeI2EbfIfxKNu5D3dXKRx2XUO7nnPyBMApsF6/CRZXnROAu0CeajsjqZUrZcQk1BPla1MIo4TvMnZT23R4I4+fDpKf3mQ5gbIQ1xqfO8F0o34XyvxRKokBcWsUGLMfEQBrpBqwvnO6vzvv0Pgr9TTNn1v3mzdTfNOmoGWcB/aobSiuaW9gyRhcGfbKQLXRcrBc6ZgpXRyYYqyqZvtAgF1BWXsd1MjV0+jdcDysCczfffTwjJTb62D20JbBIP3YT6hKFQs94N7/+2RtOxr3mwF76pHWoYDgZwwOuM0jfwwBKq7AIHKRQnEq5Qh85/AAnH3WhpPDqNIMhXUnMsFXcDvhUUQhkBjxK1CsM8OrsJxhfzW5fvx5fjEdXN+9mF9eTUZZYQCxLgbTl+qVNHlwML+GisFVCxzijhDegz7Pz7OxQrDpf9hz6VCUjEdrlwWuZbKWQIEeDvuH0cDLOYFY5Z30MUFZF1L12KG/3k5PZzWjC4c3bm9e7czikOZyD0w4LbRDwEWVFNnkaDHsLQaeatIX0M4lEhLWR8N4uwHlLE5I2edY2YSFTE27r1eWA8T12PWNWzVlEX4br+xn6lZb4iYP9dKonjOpJaxplBcZZoSWSJJ78ktq8xij8+rOuj1ukajobYinMjs20KkIPcozdeK4NCAgOpb7XErbL1bNybp7eTf/+WtmKhvpT3xVCG8pl1ewfTSu4I0UR6c7peNp2ORtsF8/trDpo0c85W1p62d2xzYbKf+uLuqafP1ToSd1zzlbCa+qbSetKB/pfHe9ru+GfTFtZnUK3m34ihK4ZGCrfShQVfWOcPeD6aW2mvfabnP/TvfWbQLf5rec179oaZa95OJQSXdy5djDEUA/d9vo3oxtW138DLRPW1A==
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns a download URL for the requested output format (e.g. glb, step, stpz).
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/get-task-status.ParamsDetails.json b/docs/api/openapi-docs/tasks-get-task-status.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-status.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-get-task-status.ParamsDetails.json
diff --git a/docs/api/openapi-docs/list-tasks.RequestSchema.json b/docs/api/openapi-docs/tasks-get-task-status.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/list-tasks.RequestSchema.json
rename to docs/api/openapi-docs/tasks-get-task-status.RequestSchema.json
diff --git a/docs/api/openapi-docs/get-task-status.StatusCodes.json b/docs/api/openapi-docs/tasks-get-task-status.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/get-task-status.StatusCodes.json
rename to docs/api/openapi-docs/tasks-get-task-status.StatusCodes.json
diff --git a/docs/api/openapi-docs/tasks-get-task-status.api.mdx b/docs/api/openapi-docs/tasks-get-task-status.api.mdx
new file mode 100644
index 00000000..d8cadcde
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-get-task-status.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-get-task-status
+title: "Tasks - get task status"
+description: "Returns the current status and metadata of a task."
+sidebar_label: "Tasks - get task status"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns the current status and metadata of a task.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/list-tasks.ParamsDetails.json b/docs/api/openapi-docs/tasks-list-tasks.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/list-tasks.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-list-tasks.ParamsDetails.json
diff --git a/docs/api/openapi-docs/list-uploaded-files.RequestSchema.json b/docs/api/openapi-docs/tasks-list-tasks.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/list-uploaded-files.RequestSchema.json
rename to docs/api/openapi-docs/tasks-list-tasks.RequestSchema.json
diff --git a/docs/api/openapi-docs/list-tasks.StatusCodes.json b/docs/api/openapi-docs/tasks-list-tasks.StatusCodes.json
similarity index 100%
rename from docs/api/openapi-docs/list-tasks.StatusCodes.json
rename to docs/api/openapi-docs/tasks-list-tasks.StatusCodes.json
diff --git a/docs/api/openapi-docs/tasks-list-tasks.api.mdx b/docs/api/openapi-docs/tasks-list-tasks.api.mdx
new file mode 100644
index 00000000..b6cf9b1b
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-list-tasks.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-list-tasks
+title: "Tasks - list tasks"
+description: "Returns paginated list of tasks."
+sidebar_label: "Tasks - list tasks"
+hide_title: true
+hide_table_of_contents: true
+api: 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
+sidebar_class_name: "get api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Returns paginated list of tasks.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.ParamsDetails.json b/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.ParamsDetails.json
similarity index 100%
rename from docs/api/openapi-docs/retry-a-failed-or-cancelled-task.ParamsDetails.json
rename to docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.ParamsDetails.json
diff --git a/docs/api/openapi-docs/retry-a-failed-or-cancelled-task.RequestSchema.json b/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.RequestSchema.json
similarity index 100%
rename from docs/api/openapi-docs/retry-a-failed-or-cancelled-task.RequestSchema.json
rename to docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.RequestSchema.json
diff --git a/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.StatusCodes.json b/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.StatusCodes.json
new file mode 100644
index 00000000..536c19bd
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"202":{"description":"Task re-queued","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"taskId":{"type":"string","description":"Unique task identifier - use this to poll for status and retrieve results","format":"uuid"},"status":{"type":"string","const":"queued","description":"Initial task status (always 'queued' upon creation)"},"statusUrl":{"type":"string","description":"Relative URL to poll for task status updates","example":"/api/v1/tasks/{taskId}"}},"required":["taskId","status","statusUrl"],"additionalProperties":false,"description":"Returned when a CAD task is accepted. Poll the statusUrl to track progress.","title":"TaskCreatedResult"}},"required":["ok","data"],"additionalProperties":false,"description":"HTTP 202 response when a task is accepted for async processing","title":"TaskAcceptedResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}},"409":{"description":"Task is not in a retryable state","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Human-readable error message"},"details":{"description":"Optional structured error context"},"requestId":{"description":"Request ID for tracing","type":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Structured error information with machine-readable code and optional debugging context","title":"ErrorDetail"}},"required":["ok","error"],"additionalProperties":false,"description":"Standard error envelope","title":"ErrorResponse"}}}}}}
\ No newline at end of file
diff --git a/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.api.mdx b/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.api.mdx
new file mode 100644
index 00000000..69e5a63c
--- /dev/null
+++ b/docs/api/openapi-docs/tasks-retry-a-failed-or-cancelled-task.api.mdx
@@ -0,0 +1,70 @@
+---
+id: tasks-retry-a-failed-or-cancelled-task
+title: "Tasks - retry a failed or cancelled task"
+description: "Re-queues a failed or cancelled task with the same parameters."
+sidebar_label: "Tasks - retry a failed or cancelled task"
+hide_title: true
+hide_table_of_contents: true
+api: eJztV99vIjcQ/ldGfrmkWiBJ76W80STXQ70mCEhVKUInYw/gY9fe+AcJQvu/V2PvAgHSu1OlvvSeYHfH429mvm883jDP5451H9mYu6Vjk4xJdMKq0iujWZcNsfUUMKADDjOucpRgLAiuBeb04LlbwrPyC/ALBMcLhJJbXqBH69osY7sn1n3cMM0LZF1Gy/qSZUzRJiX3C5Yxi09BWZSs623AjDmxwIKz7ob5dUmrnLdKz1nGZsYW3LMuC0FJVh2Cpligf8OqCTl1pdEOHfm5uriinxPWto6TMAmjPWpPlrwscyU4WXa+ODLfHMMy0y8oPMVqTYnWq7SZWe7ZTI3Jkevk3fkUIgHn/htc1ek6kYnXoTxo9RQwFUVJ1F7NFFpoQXAIfqEceAOlyXOYGQvOcx8ccC3BorcKVwgWXci9O5XjZH4KRB0S22bwNaq+Vl7xPMGqNz3j+TNfO3iX1ryDUBoNwmLM9fluvwebfz3uIebcqxXCw/DTqxD3twyl5B4pNHzhRZmTvw4vVWd12SE719mkPFesqvbZ+Lija52DfXCTjHEpFSHh+WCvbDOeOzxG6oPVKOF5gRo4XPdu6nI54EJg6VG2YUD4o6CabSgqb7lYQmnN3KKL4vLKxzCIwteUO5TDWMCjCMyS1WT7Prwfx+MBXF1cQaOjBvgh6Jhu7tZaEEKBzqVC7UPs1bbD2herKsL5/uL9sSrvjIeZCfo/E2QMv8oYWmvs150JI/HrxPyDi4XS2LLIJZ/mCNE7xMX7PPyz96l/0xv37+8+3w6H90Pif4HO8fk3bPIxFFwfbtGsjs3Rc5W74xzfl4kF4LwNwgeLcgtQe3zxrGYROp/azyGZ4yfo3ySxWS7qor/Ce8jFOvoG4fcRcnQIVenUqZTR6SAqDnNO+8UuZ5p4JU7DfK70fBvojqi35PUmpuy0ihJBvhc115LbBjPqFeamxMNtj4TxyxvHlXKgjQdFSqTevY6BUrfAH3r5oZf/pV4iBfzCSJoojYsUpMHyrVO+E4VDZznaVTOfBho32ML70nU7tK49VX66nirflrg6otLAGhlEfKBh06EIVvl1dNUr1e+47gWC8DjZ/zwiASZZ7Bttecvjy2Y6XiCXaFnWzM5/tXqDfisZHGRNmBIl9AZ9WOK6DfHZdaEwEnOXgeAyowqu0PoMfoKzZ5VLwa08b0OPlkRCmODj7NEUEhy5AYsC1QodvL/4Gfp3o4cPH/rX/du78efR9f3gth2LT+SKgdRV+rVOXpxzrnMTIjqWMUp4An3ZvmxfHGtUzRetEm3kqhbbW4VVIvqKIcEcNdpE5d6g34ZRKEtjvYMi5F61EtHBBF8GD2ej8e0gg98+jT9kIFGYojQOJSl/cZ5BqUrMlUbAFxSBfGYwUzm2ppysUtpcfE3aSKPOFzPdG3fade/lIvbeul5NDlh2wK5XzKoy5tEW7n42QrtSAt8w7ESrFteyJYxOgqKBNFcCSQm7fUlkVqHnkeRvb33aI1WTVFRwvecz3hKhlc6cf7gSHtZzszuT/v2VslYJ9aFOmXOlKXkh3ROS4h9JQsSySzKPN9uMdbdTfBL+JGMLahPdR7bZUJEfbF5V9PopoCUNTzK24lZRU4yKlsrRf3m6ae3HeDasxXMOzWX0DdyN5DUVacXzQE8sY0tc7+7J1aTKmj5AQNLHNE7vLTs67KnpbHvi4H40ZlX1N/Goj7s=
+sidebar_class_name: "post api-method"
+info_path: api/open/bitbybit-cad-cloud-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Re-queues a failed or cancelled task with the same parameters.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/blog/2026-05-22-browser-is-the-new-cad-from-code-to-configurable-products.mdx b/docs/blog/2026-05-22-browser-is-the-new-cad-from-code-to-configurable-products.mdx
index 434fa3a5..db93c657 100644
--- a/docs/blog/2026-05-22-browser-is-the-new-cad-from-code-to-configurable-products.mdx
+++ b/docs/blog/2026-05-22-browser-is-the-new-cad-from-code-to-configurable-products.mdx
@@ -4,12 +4,12 @@ title: "The Browser Is the New CAD: From Code to Configurable Products"
authors: [ubarevicius]
tags: [bitbybit, cad, enterprise, cloud, configurator, hannover-messe, ai]
description: "An introduction to the talk delivered at Hannover Messe 2026 and featured by CAE-Forum: how browser-based CAD configurators extend professional tools into scalable, production-ready web experiences."
-image: /img/blog/the-browser-is-the-new-cad.webp
+image: /img/blog/bitbybit-dev-hannover-newsletter-cae-forum.webp
---
import BitByBitRenderCanvas from '@site/src/components/BitByBitRenderCanvas';
-
+
*In April 2026 Bitbybit travelled to Hannover, where Matas Ubarevičius delivered the [presentation titled "The Browser Is the New CAD: From Code to Configurable Products"](https://www.hannovermesse.de/event/the-browser-is-the-new-cad-from-code-to-configurable-products/tal/97742) at [Hannover Messe](https://www.hannovermesse.de/), the world's leading trade fair for the manufacturing industry. The talk was accepted by [CAE-Forum](https://cae-forum.com/) for their curated presentation stage and featured in their newsletter. In this blog post he shares his experience from the event and explains why this discourse matters for the manufacturing industry today.*
diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts
index 0ca1148f..3827bc23 100644
--- a/docs/docusaurus.config.ts
+++ b/docs/docusaurus.config.ts
@@ -12,10 +12,45 @@ const config: Config = {
},
title: "Bitbybit",
tagline: "Learn How To Use The Platform",
- favicon: "img/logo-gold-small.png",
+ favicon: "img/favicon-96x96.png",
markdown: { mermaid: true },
headTags: [
+ // Favicons sized as multiples of 48px so Google can index them for search results.
+ {
+ tagName: "link",
+ attributes: {
+ rel: "icon",
+ type: "image/x-icon",
+ href: "/favicon.ico",
+ sizes: "48x48",
+ },
+ },
+ {
+ tagName: "link",
+ attributes: {
+ rel: "icon",
+ type: "image/png",
+ href: "/img/favicon-96x96.png",
+ sizes: "96x96",
+ },
+ },
+ {
+ tagName: "link",
+ attributes: {
+ rel: "icon",
+ type: "image/png",
+ href: "/img/favicon-192x192.png",
+ sizes: "192x192",
+ },
+ },
+ {
+ tagName: "link",
+ attributes: {
+ rel: "apple-touch-icon",
+ href: "/img/favicon-192x192.png",
+ },
+ },
{
tagName: "script",
attributes: { type: "application/ld+json" },
diff --git a/docs/learn/3d-bits/for-developers/third-party-app-integrations.md b/docs/learn/3d-bits/for-developers/third-party-app-integrations.md
index 73a79e3b..b9b37f21 100644
--- a/docs/learn/3d-bits/for-developers/third-party-app-integrations.md
+++ b/docs/learn/3d-bits/for-developers/third-party-app-integrations.md
@@ -56,7 +56,7 @@ Add this logic to your app's change handler (e.g., inside your React `useEffect`
// 1. Construct the payload
const payload = {
app: 'YourAppName', // Your unique app identifier
- version: '1.0.2', // Schema version
+ version: '1.1.0', // Schema version
// IMPORTANT: Use a flat structure - do NOT nest related options
options: {
@@ -146,7 +146,7 @@ The `detail` property of the event should follow this interface:
interface ProductOptionsEventDetail {
// Identifying information
app: string; // Your app's unique identifier
- version: string; // Use '1.0.2'
+ version: string; // Use '1.1.0'
// Option data
// Key: Human Readable Name (displayed to user)
diff --git a/docs/learn/open-source-approach.md b/docs/learn/open-source-approach.md
index 6dc49b93..bbfa8191 100644
--- a/docs/learn/open-source-approach.md
+++ b/docs/learn/open-source-approach.md
@@ -70,7 +70,7 @@ To support the development and hosting of the Bitbybit platform, certain compone
2. **Code Execution "Runners":**
* While you can freely embed and use our "Runners" (the components that execute Bitbybit scripts) in your own websites, their internal source code is not public.
- * We provide built versions of these Runners under an MIT license via the [bitbybit-assets repository](https://github.com/bitbybit-dev/bitbybit-assets).
+ * We provide built versions of these Runners via the [bitbybit-assets repository](https://github.com/bitbybit-dev/bitbybit-assets). The Runner bundle as a whole is governed by the proprietary [Bitbybit Runner License](./runners/licensing) - free to use, embed, and self-host (including commercially), but you cannot reverse-engineer, modify, or redistribute it as a standalone product. The open-source components bundled within (OCCT, BabylonJS, Three.js, PlayCanvas, JSCAD, Manifold, etc.) retain their own licenses.
* These Runners enable the execution of some of our proprietary advanced algorithms (like certain 3D text/font features) free of charge within the context of the Runner, but the source code for those specific advanced algorithms will remain closed together with implementation details of Runners themselves.
3. **Visual Editor to JavaScript Conversion Logic:**
diff --git a/docs/learn/runners/intro-blockly.mdx b/docs/learn/runners/intro-blockly.mdx
index 39bdf340..d3bfc1bb 100644
--- a/docs/learn/runners/intro-blockly.mdx
+++ b/docs/learn/runners/intro-blockly.mdx
@@ -126,7 +126,7 @@ async function changeSize(size) {
window.changeSize = changeSize;
function getInlineScript() {
- return '{"type":"blockly","version":"1.0.2","script":"async function(e,r,t,n,s){var c,o;(c=(()=>{const r={property:\\"size\\"};e.HS.handleBlock(e.blocklyWorkspace,\\"T}wb0d1H1WU4~rHqU6Z8\\",r);try{return s.getBitbybitRunnerInputs()[r.property]}catch(e){errorHandle(e,\\"T}wb0d1H1WU4~rHqU6Z8\\")}})())||(c=1),o=await(()=>{let t={promise:(()=>{const t={entity:(()=>{const t={shape:(()=>{const t={size:c,center:(()=>{const t={x:0,y:0,z:0};e.HS.handleBlock(e.blocklyWorkspace,\\"..HOv-y|X^q[[1Ktwe5h\\",t);try{return r.point.pointXYZ(t)}catch(e){errorHandle(e,\\"..HOv-y|X^q[[1Ktwe5h\\")}})()};return async function(){return await e.HS.inputAwaiter(t,e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\"),e.HS.handleBlock(e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\",t),e.HS.startedAsyncTask(e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\",\\"#ddddff\\"),r.occt.shapes.solid.createCube(t).then((r=>(e.HS.finishedAsyncTask(e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\"),r)),(e=>{errorHandle(e.substring?e.substring(0,1e3):e,\\"NjKMI;:*GYJ2).3M?yj6\\")}))}()})(),radius:.4};return async function(){return await e.HS.inputAwaiter(t,e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\"),e.HS.handleBlock(e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\",t),e.HS.startedAsyncTask(e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\",\\"#ddddff\\"),r.occt.fillets.filletEdges(t).then((r=>(e.HS.finishedAsyncTask(e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\"),r)),(e=>{errorHandle(e.substring?e.substring(0,1e3):e,\\"6-?FxF/TH`00-Uh|_T12\\")}))}()})(),options:(()=>{const t={precision:.005,drawFaces:!0,faceColour:\\"#000099\\",drawEdges:!0,edgeColour:\\"#ffffff\\",edgeWidth:1};e.HS.handleBlock(e.blocklyWorkspace,\\"D6NqR%pIp.xzBt?@?tV4\\",t);try{return r.draw.optionsOcctShapeSimple(t)}catch(e){errorHandle(e,\\"D6NqR%pIp.xzBt?@?tV4\\")}})()};return async function(){return await e.HS.inputAwaiter(t,e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\"),e.HS.handleBlock(e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\",t),e.HS.startedAsyncTask(e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\",\\"#ddddff\\"),r.draw.drawAnyAsync(t).then((r=>(e.HS.finishedAsyncTask(e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\"),r)),(e=>{errorHandle(e.substring?e.substring(0,1e3):e,\\"3n^@/8zZXkRWbQFt?[(m\\")}))}()})()}.promise;return Array.isArray(t)&&(t=Promise.all(t)),t})(),(()=>{const r={property:\\"cubeMesh\\",value:o};e.HS.handleBlock(e.blocklyWorkspace,\\"#sP(;i?@t;x-M0rw:m)B\\",r);try{s.setBitbybitRunnerResultValue(r.property,r.value)}catch(e){errorHandle(e,\\"#sP(;i?@t;x-M0rw:m)B\\")}})()}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
+ return '{"type":"blockly","version":"1.1.0","script":"async function(e,r,t,n,s){var c,o;(c=(()=>{const r={property:\\"size\\"};e.HS.handleBlock(e.blocklyWorkspace,\\"T}wb0d1H1WU4~rHqU6Z8\\",r);try{return s.getBitbybitRunnerInputs()[r.property]}catch(e){errorHandle(e,\\"T}wb0d1H1WU4~rHqU6Z8\\")}})())||(c=1),o=await(()=>{let t={promise:(()=>{const t={entity:(()=>{const t={shape:(()=>{const t={size:c,center:(()=>{const t={x:0,y:0,z:0};e.HS.handleBlock(e.blocklyWorkspace,\\"..HOv-y|X^q[[1Ktwe5h\\",t);try{return r.point.pointXYZ(t)}catch(e){errorHandle(e,\\"..HOv-y|X^q[[1Ktwe5h\\")}})()};return async function(){return await e.HS.inputAwaiter(t,e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\"),e.HS.handleBlock(e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\",t),e.HS.startedAsyncTask(e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\",\\"#ddddff\\"),r.occt.shapes.solid.createCube(t).then((r=>(e.HS.finishedAsyncTask(e.blocklyWorkspace,\\"NjKMI;:*GYJ2).3M?yj6\\"),r)),(e=>{errorHandle(e.substring?e.substring(0,1e3):e,\\"NjKMI;:*GYJ2).3M?yj6\\")}))}()})(),radius:.4};return async function(){return await e.HS.inputAwaiter(t,e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\"),e.HS.handleBlock(e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\",t),e.HS.startedAsyncTask(e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\",\\"#ddddff\\"),r.occt.fillets.filletEdges(t).then((r=>(e.HS.finishedAsyncTask(e.blocklyWorkspace,\\"6-?FxF/TH`00-Uh|_T12\\"),r)),(e=>{errorHandle(e.substring?e.substring(0,1e3):e,\\"6-?FxF/TH`00-Uh|_T12\\")}))}()})(),options:(()=>{const t={precision:.005,drawFaces:!0,faceColour:\\"#000099\\",drawEdges:!0,edgeColour:\\"#ffffff\\",edgeWidth:1};e.HS.handleBlock(e.blocklyWorkspace,\\"D6NqR%pIp.xzBt?@?tV4\\",t);try{return r.draw.optionsOcctShapeSimple(t)}catch(e){errorHandle(e,\\"D6NqR%pIp.xzBt?@?tV4\\")}})()};return async function(){return await e.HS.inputAwaiter(t,e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\"),e.HS.handleBlock(e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\",t),e.HS.startedAsyncTask(e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\",\\"#ddddff\\"),r.draw.drawAnyAsync(t).then((r=>(e.HS.finishedAsyncTask(e.blocklyWorkspace,\\"3n^@/8zZXkRWbQFt?[(m\\"),r)),(e=>{errorHandle(e.substring?e.substring(0,1e3):e,\\"3n^@/8zZXkRWbQFt?[(m\\")}))}()})()}.promise;return Array.isArray(t)&&(t=Promise.all(t)),t})(),(()=>{const r={property:\\"cubeMesh\\",value:o};e.HS.handleBlock(e.blocklyWorkspace,\\"#sP(;i?@t;x-M0rw:m)B\\",r);try{s.setBitbybitRunnerResultValue(r.property,r.value)}catch(e){errorHandle(e,\\"#sP(;i?@t;x-M0rw:m)B\\")}})()}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
}
```
diff --git a/docs/learn/runners/intro-rete.mdx b/docs/learn/runners/intro-rete.mdx
index 64a600d3..5848bd7e 100644
--- a/docs/learn/runners/intro-rete.mdx
+++ b/docs/learn/runners/intro-rete.mdx
@@ -128,7 +128,7 @@ async function changeSize(size) {
window.changeSize = changeSize;
function getInlineScript() {
- return '{"type":"rete","version":"1.0.2","script":"(async function (BitByBit, bitbybit, bitbybitRunnerResult, bitbybitRunnerInputs, Bit) { const dataVarIDf383aaf1893995c7 = {property: [\\"size\\"]};let inputsVarIDf383aaf1893995c7 = {};inputsVarIDf383aaf1893995c7 = {...dataVarIDf383aaf1893995c7, ...inputsVarIDf383aaf1893995c7};const resultf383aaf1893995c7 = [{result: [bitbybitRunnerInputs[inputsVarIDf383aaf1893995c7.property[0]]]}];const dataVarIDcaa28d38f452b168 = {precision: [0.01], drawFaces: [true], faceColour: [\\"#1e00ff\\"], drawEdges: [true], edgeColour: [\\"#ffffff\\"], edgeWidth: [2]};let inputsVarIDcaa28d38f452b168 = {};inputsVarIDcaa28d38f452b168 = {...dataVarIDcaa28d38f452b168, ...inputsVarIDcaa28d38f452b168};const generatedVarIDcaa28d38f452b168 = BitByBit.HS.executeBasedOnType(inputsVarIDcaa28d38f452b168, false, (data) => bitbybit.draw.optionsOcctShapeSimple(data));const resultcaa28d38f452b168 = [{result: generatedVarIDcaa28d38f452b168, transformers: []}];const dataVarIDa9c61a71827d3e38 = {size: [1], center: [[0,0,0]]};let inputsVarIDa9c61a71827d3e38 = {};inputsVarIDa9c61a71827d3e38.size = resultf383aaf1893995c7;BitByBit.HS.updateListInputs(inputsVarIDa9c61a71827d3e38);inputsVarIDa9c61a71827d3e38 = {...dataVarIDa9c61a71827d3e38, ...inputsVarIDa9c61a71827d3e38};const generatedVarIDa9c61a71827d3e38 = await BitByBit.HS.executeBasedOnTypeAsync(inputsVarIDa9c61a71827d3e38, false, (data) => bitbybit.occt.shapes.solid.createCube(data));const resulta9c61a71827d3e38 = [{result: generatedVarIDa9c61a71827d3e38, transformers: []}]; const dataVarIDcd4c1f4de5199424 = {shape: [undefined], radius: [0.4], radiusList: [undefined], indexes: [undefined]};let inputsVarIDcd4c1f4de5199424 = {};inputsVarIDcd4c1f4de5199424.shape = resulta9c61a71827d3e38;BitByBit.HS.updateListInputs(inputsVarIDcd4c1f4de5199424);inputsVarIDcd4c1f4de5199424 = {...dataVarIDcd4c1f4de5199424, ...inputsVarIDcd4c1f4de5199424};const generatedVarIDcd4c1f4de5199424 = await BitByBit.HS.executeBasedOnTypeAsync(inputsVarIDcd4c1f4de5199424, false, (data) => bitbybit.occt.fillets.filletEdges(data));const resultcd4c1f4de5199424 = [{result: generatedVarIDcd4c1f4de5199424, transformers: []}]; const dataVarIDf2f8b4cf1de9ac4c = {entity: [undefined], options: [undefined], babylonMesh: [undefined]};let inputsVarIDf2f8b4cf1de9ac4c = {};inputsVarIDf2f8b4cf1de9ac4c.options = resultcaa28d38f452b168;inputsVarIDf2f8b4cf1de9ac4c.entity = resultcd4c1f4de5199424;BitByBit.HS.updateListInputs(inputsVarIDf2f8b4cf1de9ac4c);inputsVarIDf2f8b4cf1de9ac4c = {...dataVarIDf2f8b4cf1de9ac4c, ...inputsVarIDf2f8b4cf1de9ac4c};const generatedVarIDf2f8b4cf1de9ac4c = await BitByBit.HS.executeBasedOnTypeAsync(inputsVarIDf2f8b4cf1de9ac4c, false, (data) => bitbybit.draw.drawAnyAsync(data));const resultf2f8b4cf1de9ac4c = [{result: generatedVarIDf2f8b4cf1de9ac4c, transformers: []}]; const dataVarID613de15ba24c56db = {property: [\\"cubeMesh\\"]};let inputsVarID613de15ba24c56db = {};inputsVarID613de15ba24c56db.value = resultf2f8b4cf1de9ac4c;BitByBit.HS.updateListInputs(inputsVarID613de15ba24c56db);inputsVarID613de15ba24c56db = {...dataVarID613de15ba24c56db, ...inputsVarID613de15ba24c56db};setBitbybitRunnerResultValue(inputsVarID613de15ba24c56db.property[0], inputsVarID613de15ba24c56db.value[0]); })(BitByBit, bitbybit, bitbybitRunnerResult, bitbybitRunnerInputs, Bit);"}';
+ return '{"type":"rete","version":"1.1.0","script":"(async function (BitByBit, bitbybit, bitbybitRunnerResult, bitbybitRunnerInputs, Bit) { const dataVarIDf383aaf1893995c7 = {property: [\\"size\\"]};let inputsVarIDf383aaf1893995c7 = {};inputsVarIDf383aaf1893995c7 = {...dataVarIDf383aaf1893995c7, ...inputsVarIDf383aaf1893995c7};const resultf383aaf1893995c7 = [{result: [bitbybitRunnerInputs[inputsVarIDf383aaf1893995c7.property[0]]]}];const dataVarIDcaa28d38f452b168 = {precision: [0.01], drawFaces: [true], faceColour: [\\"#1e00ff\\"], drawEdges: [true], edgeColour: [\\"#ffffff\\"], edgeWidth: [2]};let inputsVarIDcaa28d38f452b168 = {};inputsVarIDcaa28d38f452b168 = {...dataVarIDcaa28d38f452b168, ...inputsVarIDcaa28d38f452b168};const generatedVarIDcaa28d38f452b168 = BitByBit.HS.executeBasedOnType(inputsVarIDcaa28d38f452b168, false, (data) => bitbybit.draw.optionsOcctShapeSimple(data));const resultcaa28d38f452b168 = [{result: generatedVarIDcaa28d38f452b168, transformers: []}];const dataVarIDa9c61a71827d3e38 = {size: [1], center: [[0,0,0]]};let inputsVarIDa9c61a71827d3e38 = {};inputsVarIDa9c61a71827d3e38.size = resultf383aaf1893995c7;BitByBit.HS.updateListInputs(inputsVarIDa9c61a71827d3e38);inputsVarIDa9c61a71827d3e38 = {...dataVarIDa9c61a71827d3e38, ...inputsVarIDa9c61a71827d3e38};const generatedVarIDa9c61a71827d3e38 = await BitByBit.HS.executeBasedOnTypeAsync(inputsVarIDa9c61a71827d3e38, false, (data) => bitbybit.occt.shapes.solid.createCube(data));const resulta9c61a71827d3e38 = [{result: generatedVarIDa9c61a71827d3e38, transformers: []}]; const dataVarIDcd4c1f4de5199424 = {shape: [undefined], radius: [0.4], radiusList: [undefined], indexes: [undefined]};let inputsVarIDcd4c1f4de5199424 = {};inputsVarIDcd4c1f4de5199424.shape = resulta9c61a71827d3e38;BitByBit.HS.updateListInputs(inputsVarIDcd4c1f4de5199424);inputsVarIDcd4c1f4de5199424 = {...dataVarIDcd4c1f4de5199424, ...inputsVarIDcd4c1f4de5199424};const generatedVarIDcd4c1f4de5199424 = await BitByBit.HS.executeBasedOnTypeAsync(inputsVarIDcd4c1f4de5199424, false, (data) => bitbybit.occt.fillets.filletEdges(data));const resultcd4c1f4de5199424 = [{result: generatedVarIDcd4c1f4de5199424, transformers: []}]; const dataVarIDf2f8b4cf1de9ac4c = {entity: [undefined], options: [undefined], babylonMesh: [undefined]};let inputsVarIDf2f8b4cf1de9ac4c = {};inputsVarIDf2f8b4cf1de9ac4c.options = resultcaa28d38f452b168;inputsVarIDf2f8b4cf1de9ac4c.entity = resultcd4c1f4de5199424;BitByBit.HS.updateListInputs(inputsVarIDf2f8b4cf1de9ac4c);inputsVarIDf2f8b4cf1de9ac4c = {...dataVarIDf2f8b4cf1de9ac4c, ...inputsVarIDf2f8b4cf1de9ac4c};const generatedVarIDf2f8b4cf1de9ac4c = await BitByBit.HS.executeBasedOnTypeAsync(inputsVarIDf2f8b4cf1de9ac4c, false, (data) => bitbybit.draw.drawAnyAsync(data));const resultf2f8b4cf1de9ac4c = [{result: generatedVarIDf2f8b4cf1de9ac4c, transformers: []}]; const dataVarID613de15ba24c56db = {property: [\\"cubeMesh\\"]};let inputsVarID613de15ba24c56db = {};inputsVarID613de15ba24c56db.value = resultf2f8b4cf1de9ac4c;BitByBit.HS.updateListInputs(inputsVarID613de15ba24c56db);inputsVarID613de15ba24c56db = {...dataVarID613de15ba24c56db, ...inputsVarID613de15ba24c56db};setBitbybitRunnerResultValue(inputsVarID613de15ba24c56db.property[0], inputsVarID613de15ba24c56db.value[0]); })(BitByBit, bitbybit, bitbybitRunnerResult, bitbybitRunnerInputs, Bit);"}';
}
```
diff --git a/docs/learn/runners/intro-typescript.mdx b/docs/learn/runners/intro-typescript.mdx
index 16be3bf5..c6450b0d 100644
--- a/docs/learn/runners/intro-typescript.mdx
+++ b/docs/learn/runners/intro-typescript.mdx
@@ -123,7 +123,7 @@ async function changeSize(size) {
window.changeSize = changeSize;
function getInlineScript() {
- return '{"type":"typescript","version":"1.0.2","script":"async function(t,e,i,n,s){s.mockBitbybitRunnerInputs({size:1});const a=s.getBitbybitRunnerInputs(),{occt:b}=e,u=(async()=>{const t=await b.shapes.solid.createCube({size:a.size,center:[0,0,0]}),i=await b.fillets.filletEdges({shape:t,radius:.4}),n=new s.Inputs.Draw.DrawOcctShapeSimpleOptions;n.faceColour=\\"#0000ff\\",n.edgeWidth=1,n.precision=.005;return{cubeMesh:await e.draw.drawAnyAsync({entity:i,options:n})}})();s.setBitbybitRunnerResult(u)}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
+ return '{"type":"typescript","version":"1.1.0","script":"async function(t,e,i,n,s){s.mockBitbybitRunnerInputs({size:1});const a=s.getBitbybitRunnerInputs(),{occt:b}=e,u=(async()=>{const t=await b.shapes.solid.createCube({size:a.size,center:[0,0,0]}),i=await b.fillets.filletEdges({shape:t,radius:.4}),n=new s.Inputs.Draw.DrawOcctShapeSimpleOptions;n.faceColour=\\"#0000ff\\",n.edgeWidth=1,n.precision=.005;return{cubeMesh:await e.draw.drawAnyAsync({entity:i,options:n})}})();s.setBitbybitRunnerResult(u)}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
}
```
diff --git a/docs/learn/runners/table-configurator-blockly.mdx b/docs/learn/runners/table-configurator-blockly.mdx
index 506c8cee..f6a96aef 100644
--- a/docs/learn/runners/table-configurator-blockly.mdx
+++ b/docs/learn/runners/table-configurator-blockly.mdx
@@ -176,7 +176,7 @@ Below are the `index.html` and `script.js` files you would use on StackBlitz or
window.changeModel = changeModel;
function getInlineScript() {
- return '{\"type\":\"rete\",\"version\":\"1.0.2\",\"script\":\"async function(e,t,s,r,n){let a={};a={property:[\\"width\\"],...a};const o=[{result:[r[a.property[0]]]}];let i={};i={property:[\\"length\\"],...i};const u=[{result:[r[i.property[0]]]}];let l={};l={property:[\\"height\\"],...l};const c=[{result:[r[l.property[0]]]}];let p={};p={property:[\\"thickness\\"],...p};const d=[{result:[r[p.property[0]]]}];let f={};f={precision:[.01],drawFaces:[!0],faceColour:[\\"#7984b9\\"],drawEdges:[!0],edgeColour:[\\"#ffffff\\"],edgeWidth:[1],...f};const y=[{result:e.HS.executeBasedOnType(f,!1,(e=>t.draw.optionsOcctShapeSimple(e))),transformers:[]}];let h={};h={skybox:[\\"clearSky\\"],size:[1e3],blur:[.1],environmentIntensity:[.7],...h};e.HS.executeBasedOnType(h,!1,(e=>t.babylon.scene.enableSkybox(e)));let S={};S={radius:[2],center:[[0,0,0]],direction:[[0,1,0]],...S};const H=[{result:await e.HS.executeBasedOnTypeAsync(S,!1,(e=>t.occt.shapes.face.createCircleFace(e))),transformers:[]}];let m={};m={direction:[[-100,-100,-100]],intensity:[3],diffuse:[\\"#ffffff\\"],specular:[\\"#ffffff\\"],shadowGeneratorMapSize:[1024],enableShadows:[!0],shadowDarkness:[0],...m};e.HS.executeBasedOnType(m,!1,(e=>t.babylon.scene.drawDirectionalLight(e)));const v={value1:[void 0],value2:[void 0]};let w={};w.value1=o,w.value2=[{result:[.7],transformers:[]}],e.HS.updateListInputs(w),w={...v,...w};const O=[{result:e.HS.executeBasedOnType(w,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],B={value1:[void 0],value2:[void 0]};let x={};x.value1=u,x.value2=[{result:[1.4],transformers:[]}],e.HS.updateListInputs(x),x={...B,...x};const b=[{result:e.HS.executeBasedOnType(x,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],L={value1:[void 0],value2:[void 0]};let g={};g.value1=c,g.value2=[{result:[.6],transformers:[]}],e.HS.updateListInputs(g),g={...L,...g};const I=[{result:e.HS.executeBasedOnType(g,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],T={value1:[void 0],value2:[void 0]};let A={};A.value1=d,A.value2=[{result:[.1],transformers:[]}],e.HS.updateListInputs(A),A={...T,...A};const k=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}];let D={};D.first=I,D.second=k,e.HS.updateListInputs(D),D={first:[1],second:[1],operation:[\\"subtract\\"],...D};const N=[{result:e.HS.executeBasedOnType(D,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let R={};R.first=k,e.HS.updateListInputs(R),R={first:[1],second:[2],operation:[\\"divide\\"],...R};const C=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let E={};E.first=O,E.second=k,e.HS.updateListInputs(E),E={first:[1],second:[2],operation:[\\"subtract\\"],...E};const G=[{result:e.HS.executeBasedOnType(E,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let V={};V.second=k,V.first=b,e.HS.updateListInputs(V),V={first:[1],second:[2],operation:[\\"subtract\\"],...V};const z=[{result:e.HS.executeBasedOnType(V,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let F={};F.first=N,e.HS.updateListInputs(F),F={first:[1],second:[2],operation:[\\"divide\\"],...F};const M=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let W={};W.first=I,W.second=C,e.HS.updateListInputs(W),W={first:[1],second:[1],operation:[\\"subtract\\"],...W};const X=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Y={};Y.width=G,Y.length=z,e.HS.updateListInputs(Y),Y={width:[1],length:[2],center:[[0,0,0]],direction:[[0,1,0]],...Y};const Z=[{result:await e.HS.executeBasedOnTypeAsync(Y,!1,(e=>t.occt.shapes.wire.createRectangleWire(e))),transformers:[]}];let P={};P.y=X,e.HS.updateListInputs(P),P={x:[0],y:[0],z:[0],...P};const j=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.y=M,e.HS.updateListInputs(q),q={x:[0],y:[0],z:[0],...q};const J=[{result:e.HS.executeBasedOnType(q,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],K={shape:[void 0]};let Q={};Q.shape=Z,e.HS.updateListInputs(Q),Q={...K,...Q};const U=[{result:await e.HS.executeBasedOnTypeAsync(Q,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}];let $={};$.width=k,$.length=k,$.height=N,$.center=J,e.HS.updateListInputs($),$={width:[1],length:[2],height:[3],center:[[0,0,0]],...$};const _=[{result:await e.HS.executeBasedOnTypeAsync($,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let ee={};ee.width=O,ee.length=b,ee.height=k,ee.center=j,e.HS.updateListInputs(ee),ee={width:[1],length:[2],height:[3],center:[[0,0,0]],...ee};const te=[{result:await e.HS.executeBasedOnTypeAsync(ee,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let se={};se.list=U,e.HS.updateListInputs(se),se={nrLevels:[1],...se};const re=[];for(let e=0;et.occt.transforms.translate(e))),transformers:[]}];let ue={};ue.listElements=[te[0],ie[0],H[0]],e.HS.updateListInputs(ue),ue={...ue};const le=[{result:[ue.listElements?ue.listElements:[]]}],ce={shapes:[void 0]};let pe={};pe.shapes=le,e.HS.updateListInputs(pe),pe={...ce,...pe};const de=[{result:await e.HS.executeBasedOnTypeAsync(pe,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],fe={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let ye={};ye.options=y,ye.entity=de,e.HS.updateListInputs(ye),ye={...fe,...ye};const he=[{result:await e.HS.executeBasedOnTypeAsync(ye,!1,(e=>t.draw.drawAnyAsync(e))),transformers:[]}];let Se={};Se.value=he,e.HS.updateListInputs(Se),Se={property:[\\"table\\"],...Se},setBitbybitRunnerResultValue(Se.property[0],Se.value[0])}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);\"}';
+ return '{\"type\":\"rete\",\"version\":\"1.1.0\",\"script\":\"async function(e,t,s,r,n){let a={};a={property:[\\"width\\"],...a};const o=[{result:[r[a.property[0]]]}];let i={};i={property:[\\"length\\"],...i};const u=[{result:[r[i.property[0]]]}];let l={};l={property:[\\"height\\"],...l};const c=[{result:[r[l.property[0]]]}];let p={};p={property:[\\"thickness\\"],...p};const d=[{result:[r[p.property[0]]]}];let f={};f={precision:[.01],drawFaces:[!0],faceColour:[\\"#7984b9\\"],drawEdges:[!0],edgeColour:[\\"#ffffff\\"],edgeWidth:[1],...f};const y=[{result:e.HS.executeBasedOnType(f,!1,(e=>t.draw.optionsOcctShapeSimple(e))),transformers:[]}];let h={};h={skybox:[\\"clearSky\\"],size:[1e3],blur:[.1],environmentIntensity:[.7],...h};e.HS.executeBasedOnType(h,!1,(e=>t.babylon.scene.enableSkybox(e)));let S={};S={radius:[2],center:[[0,0,0]],direction:[[0,1,0]],...S};const H=[{result:await e.HS.executeBasedOnTypeAsync(S,!1,(e=>t.occt.shapes.face.createCircleFace(e))),transformers:[]}];let m={};m={direction:[[-100,-100,-100]],intensity:[3],diffuse:[\\"#ffffff\\"],specular:[\\"#ffffff\\"],shadowGeneratorMapSize:[1024],enableShadows:[!0],shadowDarkness:[0],...m};e.HS.executeBasedOnType(m,!1,(e=>t.babylon.scene.drawDirectionalLight(e)));const v={value1:[void 0],value2:[void 0]};let w={};w.value1=o,w.value2=[{result:[.7],transformers:[]}],e.HS.updateListInputs(w),w={...v,...w};const O=[{result:e.HS.executeBasedOnType(w,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],B={value1:[void 0],value2:[void 0]};let x={};x.value1=u,x.value2=[{result:[1.4],transformers:[]}],e.HS.updateListInputs(x),x={...B,...x};const b=[{result:e.HS.executeBasedOnType(x,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],L={value1:[void 0],value2:[void 0]};let g={};g.value1=c,g.value2=[{result:[.6],transformers:[]}],e.HS.updateListInputs(g),g={...L,...g};const I=[{result:e.HS.executeBasedOnType(g,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],T={value1:[void 0],value2:[void 0]};let A={};A.value1=d,A.value2=[{result:[.1],transformers:[]}],e.HS.updateListInputs(A),A={...T,...A};const k=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}];let D={};D.first=I,D.second=k,e.HS.updateListInputs(D),D={first:[1],second:[1],operation:[\\"subtract\\"],...D};const N=[{result:e.HS.executeBasedOnType(D,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let R={};R.first=k,e.HS.updateListInputs(R),R={first:[1],second:[2],operation:[\\"divide\\"],...R};const C=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let E={};E.first=O,E.second=k,e.HS.updateListInputs(E),E={first:[1],second:[2],operation:[\\"subtract\\"],...E};const G=[{result:e.HS.executeBasedOnType(E,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let V={};V.second=k,V.first=b,e.HS.updateListInputs(V),V={first:[1],second:[2],operation:[\\"subtract\\"],...V};const z=[{result:e.HS.executeBasedOnType(V,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let F={};F.first=N,e.HS.updateListInputs(F),F={first:[1],second:[2],operation:[\\"divide\\"],...F};const M=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let W={};W.first=I,W.second=C,e.HS.updateListInputs(W),W={first:[1],second:[1],operation:[\\"subtract\\"],...W};const X=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Y={};Y.width=G,Y.length=z,e.HS.updateListInputs(Y),Y={width:[1],length:[2],center:[[0,0,0]],direction:[[0,1,0]],...Y};const Z=[{result:await e.HS.executeBasedOnTypeAsync(Y,!1,(e=>t.occt.shapes.wire.createRectangleWire(e))),transformers:[]}];let P={};P.y=X,e.HS.updateListInputs(P),P={x:[0],y:[0],z:[0],...P};const j=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.y=M,e.HS.updateListInputs(q),q={x:[0],y:[0],z:[0],...q};const J=[{result:e.HS.executeBasedOnType(q,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],K={shape:[void 0]};let Q={};Q.shape=Z,e.HS.updateListInputs(Q),Q={...K,...Q};const U=[{result:await e.HS.executeBasedOnTypeAsync(Q,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}];let $={};$.width=k,$.length=k,$.height=N,$.center=J,e.HS.updateListInputs($),$={width:[1],length:[2],height:[3],center:[[0,0,0]],...$};const _=[{result:await e.HS.executeBasedOnTypeAsync($,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let ee={};ee.width=O,ee.length=b,ee.height=k,ee.center=j,e.HS.updateListInputs(ee),ee={width:[1],length:[2],height:[3],center:[[0,0,0]],...ee};const te=[{result:await e.HS.executeBasedOnTypeAsync(ee,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let se={};se.list=U,e.HS.updateListInputs(se),se={nrLevels:[1],...se};const re=[];for(let e=0;et.occt.transforms.translate(e))),transformers:[]}];let ue={};ue.listElements=[te[0],ie[0],H[0]],e.HS.updateListInputs(ue),ue={...ue};const le=[{result:[ue.listElements?ue.listElements:[]]}],ce={shapes:[void 0]};let pe={};pe.shapes=le,e.HS.updateListInputs(pe),pe={...ce,...pe};const de=[{result:await e.HS.executeBasedOnTypeAsync(pe,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],fe={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let ye={};ye.options=y,ye.entity=de,e.HS.updateListInputs(ye),ye={...fe,...ye};const he=[{result:await e.HS.executeBasedOnTypeAsync(ye,!1,(e=>t.draw.drawAnyAsync(e))),transformers:[]}];let Se={};Se.value=he,e.HS.updateListInputs(Se),Se={property:[\\"table\\"],...Se},setBitbybitRunnerResultValue(Se.property[0],Se.value[0])}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);\"}';
}
```
diff --git a/docs/learn/runners/table-configurator-rete.mdx b/docs/learn/runners/table-configurator-rete.mdx
index 10a420dc..fac25495 100644
--- a/docs/learn/runners/table-configurator-rete.mdx
+++ b/docs/learn/runners/table-configurator-rete.mdx
@@ -66,7 +66,7 @@ Below are the `index.html` and `script.js` files you would use on StackBlitz or
-
+
@@ -175,7 +175,7 @@ async function changeModel(value, name) {
window.changeModel = changeModel;
function getInlineScript() {
- return '{"type":"rete","version":"1.0.2","script":"async function(e,t,s,r,n){let a={};a={property:[\\"width\\"],...a};const o=[{result:[r[a.property[0]]]}];let i={};i={property:[\\"length\\"],...i};const u=[{result:[r[i.property[0]]]}];let l={};l={property:[\\"height\\"],...l};const c=[{result:[r[l.property[0]]]}];let p={};p={property:[\\"thickness\\"],...p};const d=[{result:[r[p.property[0]]]}];let f={};f={precision:[.01],drawFaces:[!0],faceColour:[\\"#7984b9\\"],drawEdges:[!0],edgeColour:[\\"#ffffff\\"],edgeWidth:[1],...f};const y=[{result:e.HS.executeBasedOnType(f,!1,(e=>t.draw.optionsOcctShapeSimple(e))),transformers:[]}];let h={};h={skybox:[\\"clearSky\\"],size:[1e3],blur:[.1],environmentIntensity:[.7],...h};e.HS.executeBasedOnType(h,!1,(e=>t.babylon.scene.enableSkybox(e)));let S={};S={radius:[2],center:[[0,0,0]],direction:[[0,1,0]],...S};const H=[{result:await e.HS.executeBasedOnTypeAsync(S,!1,(e=>t.occt.shapes.face.createCircleFace(e))),transformers:[]}];let m={};m={direction:[[-100,-100,-100]],intensity:[3],diffuse:[\\"#ffffff\\"],specular:[\\"#ffffff\\"],shadowGeneratorMapSize:[1024],enableShadows:[!0],shadowDarkness:[0],...m};e.HS.executeBasedOnType(m,!1,(e=>t.babylon.scene.drawDirectionalLight(e)));const v={value1:[void 0],value2:[void 0]};let w={};w.value1=o,w.value2=[{result:[.7],transformers:[]}],e.HS.updateListInputs(w),w={...v,...w};const O=[{result:e.HS.executeBasedOnType(w,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],B={value1:[void 0],value2:[void 0]};let x={};x.value1=u,x.value2=[{result:[1.4],transformers:[]}],e.HS.updateListInputs(x),x={...B,...x};const b=[{result:e.HS.executeBasedOnType(x,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],L={value1:[void 0],value2:[void 0]};let g={};g.value1=c,g.value2=[{result:[.6],transformers:[]}],e.HS.updateListInputs(g),g={...L,...g};const I=[{result:e.HS.executeBasedOnType(g,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],T={value1:[void 0],value2:[void 0]};let A={};A.value1=d,A.value2=[{result:[.1],transformers:[]}],e.HS.updateListInputs(A),A={...T,...A};const k=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}];let D={};D.first=I,D.second=k,e.HS.updateListInputs(D),D={first:[1],second:[1],operation:[\\"subtract\\"],...D};const N=[{result:e.HS.executeBasedOnType(D,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let R={};R.first=k,e.HS.updateListInputs(R),R={first:[1],second:[2],operation:[\\"divide\\"],...R};const C=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let E={};E.first=O,E.second=k,e.HS.updateListInputs(E),E={first:[1],second:[2],operation:[\\"subtract\\"],...E};const G=[{result:e.HS.executeBasedOnType(E,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let V={};V.second=k,V.first=b,e.HS.updateListInputs(V),V={first:[1],second:[2],operation:[\\"subtract\\"],...V};const z=[{result:e.HS.executeBasedOnType(V,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let F={};F.first=N,e.HS.updateListInputs(F),F={first:[1],second:[2],operation:[\\"divide\\"],...F};const M=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let W={};W.first=I,W.second=C,e.HS.updateListInputs(W),W={first:[1],second:[1],operation:[\\"subtract\\"],...W};const X=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Y={};Y.width=G,Y.length=z,e.HS.updateListInputs(Y),Y={width:[1],length:[2],center:[[0,0,0]],direction:[[0,1,0]],...Y};const Z=[{result:await e.HS.executeBasedOnTypeAsync(Y,!1,(e=>t.occt.shapes.wire.createRectangleWire(e))),transformers:[]}];let P={};P.y=X,e.HS.updateListInputs(P),P={x:[0],y:[0],z:[0],...P};const j=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.y=M,e.HS.updateListInputs(q),q={x:[0],y:[0],z:[0],...q};const J=[{result:e.HS.executeBasedOnType(q,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],K={shape:[void 0]};let Q={};Q.shape=Z,e.HS.updateListInputs(Q),Q={...K,...Q};const U=[{result:await e.HS.executeBasedOnTypeAsync(Q,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}];let $={};$.width=k,$.length=k,$.height=N,$.center=J,e.HS.updateListInputs($),$={width:[1],length:[2],height:[3],center:[[0,0,0]],...$};const _=[{result:await e.HS.executeBasedOnTypeAsync($,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let ee={};ee.width=O,ee.length=b,ee.height=k,ee.center=j,e.HS.updateListInputs(ee),ee={width:[1],length:[2],height:[3],center:[[0,0,0]],...ee};const te=[{result:await e.HS.executeBasedOnTypeAsync(ee,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let se={};se.list=U,e.HS.updateListInputs(se),se={nrLevels:[1],...se};const re=[];for(let e=0;et.occt.transforms.translate(e))),transformers:[]}];let ue={};ue.listElements=[te[0],ie[0],H[0]],e.HS.updateListInputs(ue),ue={...ue};const le=[{result:[ue.listElements?ue.listElements:[]]}],ce={shapes:[void 0]};let pe={};pe.shapes=le,e.HS.updateListInputs(pe),pe={...ce,...pe};const de=[{result:await e.HS.executeBasedOnTypeAsync(pe,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],fe={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let ye={};ye.options=y,ye.entity=de,e.HS.updateListInputs(ye),ye={...fe,...ye};const he=[{result:await e.HS.executeBasedOnTypeAsync(ye,!1,(e=>t.draw.drawAnyAsync(e))),transformers:[]}];let Se={};Se.value=he,e.HS.updateListInputs(Se),Se={property:[\\"table\\"],...Se},setBitbybitRunnerResultValue(Se.property[0],Se.value[0])}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
+ return '{"type":"rete","version":"1.1.0","script":"async function(e,t,s,r,n){let a={};a={property:[\\"width\\"],...a};const o=[{result:[r[a.property[0]]]}];let i={};i={property:[\\"length\\"],...i};const u=[{result:[r[i.property[0]]]}];let l={};l={property:[\\"height\\"],...l};const c=[{result:[r[l.property[0]]]}];let p={};p={property:[\\"thickness\\"],...p};const d=[{result:[r[p.property[0]]]}];let f={};f={precision:[.01],drawFaces:[!0],faceColour:[\\"#7984b9\\"],drawEdges:[!0],edgeColour:[\\"#ffffff\\"],edgeWidth:[1],...f};const y=[{result:e.HS.executeBasedOnType(f,!1,(e=>t.draw.optionsOcctShapeSimple(e))),transformers:[]}];let h={};h={skybox:[\\"clearSky\\"],size:[1e3],blur:[.1],environmentIntensity:[.7],...h};e.HS.executeBasedOnType(h,!1,(e=>t.babylon.scene.enableSkybox(e)));let S={};S={radius:[2],center:[[0,0,0]],direction:[[0,1,0]],...S};const H=[{result:await e.HS.executeBasedOnTypeAsync(S,!1,(e=>t.occt.shapes.face.createCircleFace(e))),transformers:[]}];let m={};m={direction:[[-100,-100,-100]],intensity:[3],diffuse:[\\"#ffffff\\"],specular:[\\"#ffffff\\"],shadowGeneratorMapSize:[1024],enableShadows:[!0],shadowDarkness:[0],...m};e.HS.executeBasedOnType(m,!1,(e=>t.babylon.scene.drawDirectionalLight(e)));const v={value1:[void 0],value2:[void 0]};let w={};w.value1=o,w.value2=[{result:[.7],transformers:[]}],e.HS.updateListInputs(w),w={...v,...w};const O=[{result:e.HS.executeBasedOnType(w,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],B={value1:[void 0],value2:[void 0]};let x={};x.value1=u,x.value2=[{result:[1.4],transformers:[]}],e.HS.updateListInputs(x),x={...B,...x};const b=[{result:e.HS.executeBasedOnType(x,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],L={value1:[void 0],value2:[void 0]};let g={};g.value1=c,g.value2=[{result:[.6],transformers:[]}],e.HS.updateListInputs(g),g={...L,...g};const I=[{result:e.HS.executeBasedOnType(g,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],T={value1:[void 0],value2:[void 0]};let A={};A.value1=d,A.value2=[{result:[.1],transformers:[]}],e.HS.updateListInputs(A),A={...T,...A};const k=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}];let D={};D.first=I,D.second=k,e.HS.updateListInputs(D),D={first:[1],second:[1],operation:[\\"subtract\\"],...D};const N=[{result:e.HS.executeBasedOnType(D,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let R={};R.first=k,e.HS.updateListInputs(R),R={first:[1],second:[2],operation:[\\"divide\\"],...R};const C=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let E={};E.first=O,E.second=k,e.HS.updateListInputs(E),E={first:[1],second:[2],operation:[\\"subtract\\"],...E};const G=[{result:e.HS.executeBasedOnType(E,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let V={};V.second=k,V.first=b,e.HS.updateListInputs(V),V={first:[1],second:[2],operation:[\\"subtract\\"],...V};const z=[{result:e.HS.executeBasedOnType(V,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let F={};F.first=N,e.HS.updateListInputs(F),F={first:[1],second:[2],operation:[\\"divide\\"],...F};const M=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let W={};W.first=I,W.second=C,e.HS.updateListInputs(W),W={first:[1],second:[1],operation:[\\"subtract\\"],...W};const X=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Y={};Y.width=G,Y.length=z,e.HS.updateListInputs(Y),Y={width:[1],length:[2],center:[[0,0,0]],direction:[[0,1,0]],...Y};const Z=[{result:await e.HS.executeBasedOnTypeAsync(Y,!1,(e=>t.occt.shapes.wire.createRectangleWire(e))),transformers:[]}];let P={};P.y=X,e.HS.updateListInputs(P),P={x:[0],y:[0],z:[0],...P};const j=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.y=M,e.HS.updateListInputs(q),q={x:[0],y:[0],z:[0],...q};const J=[{result:e.HS.executeBasedOnType(q,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],K={shape:[void 0]};let Q={};Q.shape=Z,e.HS.updateListInputs(Q),Q={...K,...Q};const U=[{result:await e.HS.executeBasedOnTypeAsync(Q,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}];let $={};$.width=k,$.length=k,$.height=N,$.center=J,e.HS.updateListInputs($),$={width:[1],length:[2],height:[3],center:[[0,0,0]],...$};const _=[{result:await e.HS.executeBasedOnTypeAsync($,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let ee={};ee.width=O,ee.length=b,ee.height=k,ee.center=j,e.HS.updateListInputs(ee),ee={width:[1],length:[2],height:[3],center:[[0,0,0]],...ee};const te=[{result:await e.HS.executeBasedOnTypeAsync(ee,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let se={};se.list=U,e.HS.updateListInputs(se),se={nrLevels:[1],...se};const re=[];for(let e=0;et.occt.transforms.translate(e))),transformers:[]}];let ue={};ue.listElements=[te[0],ie[0],H[0]],e.HS.updateListInputs(ue),ue={...ue};const le=[{result:[ue.listElements?ue.listElements:[]]}],ce={shapes:[void 0]};let pe={};pe.shapes=le,e.HS.updateListInputs(pe),pe={...ce,...pe};const de=[{result:await e.HS.executeBasedOnTypeAsync(pe,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],fe={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let ye={};ye.options=y,ye.entity=de,e.HS.updateListInputs(ye),ye={...fe,...ye};const he=[{result:await e.HS.executeBasedOnTypeAsync(ye,!1,(e=>t.draw.drawAnyAsync(e))),transformers:[]}];let Se={};Se.value=he,e.HS.updateListInputs(Se),Se={property:[\\"table\\"],...Se},setBitbybitRunnerResultValue(Se.property[0],Se.value[0])}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
}
```
diff --git a/docs/learn/runners/table-configurator-typescript.mdx b/docs/learn/runners/table-configurator-typescript.mdx
index 9f29e3cf..16b9507c 100644
--- a/docs/learn/runners/table-configurator-typescript.mdx
+++ b/docs/learn/runners/table-configurator-typescript.mdx
@@ -71,7 +71,7 @@ Below are the `index.html` and `script.js` files you would use on StackBlitz or
-
+
@@ -181,7 +181,7 @@ Below are the `index.html` and `script.js` files you would use on StackBlitz or
window.changeModel = changeModel;
function getInlineScript() {
- return '{"type":"rete","version":"1.0.2","script":"async function(e,t,s,r,n){let a={};a={property:[\\"width\\"],...a};const o=[{result:[r[a.property[0]]]}];let i={};i={property:[\\"length\\"],...i};const u=[{result:[r[i.property[0]]]}];let l={};l={property:[\\"height\\"],...l};const c=[{result:[r[l.property[0]]]}];let p={};p={property:[\\"thickness\\"],...p};const d=[{result:[r[p.property[0]]]}];let f={};f={precision:[.01],drawFaces:[!0],faceColour:[\\"#7984b9\\"],drawEdges:[!0],edgeColour:[\\"#ffffff\\"],edgeWidth:[1],...f};const y=[{result:e.HS.executeBasedOnType(f,!1,(e=>t.draw.optionsOcctShapeSimple(e))),transformers:[]}];let h={};h={skybox:[\\"clearSky\\"],size:[1e3],blur:[.1],environmentIntensity:[.7],...h};e.HS.executeBasedOnType(h,!1,(e=>t.babylon.scene.enableSkybox(e)));let S={};S={radius:[2],center:[[0,0,0]],direction:[[0,1,0]],...S};const H=[{result:await e.HS.executeBasedOnTypeAsync(S,!1,(e=>t.occt.shapes.face.createCircleFace(e))),transformers:[]}];let m={};m={direction:[[-100,-100,-100]],intensity:[3],diffuse:[\\"#ffffff\\"],specular:[\\"#ffffff\\"],shadowGeneratorMapSize:[1024],enableShadows:[!0],shadowDarkness:[0],...m};e.HS.executeBasedOnType(m,!1,(e=>t.babylon.scene.drawDirectionalLight(e)));const v={value1:[void 0],value2:[void 0]};let w={};w.value1=o,w.value2=[{result:[.7],transformers:[]}],e.HS.updateListInputs(w),w={...v,...w};const O=[{result:e.HS.executeBasedOnType(w,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],B={value1:[void 0],value2:[void 0]};let x={};x.value1=u,x.value2=[{result:[1.4],transformers:[]}],e.HS.updateListInputs(x),x={...B,...x};const b=[{result:e.HS.executeBasedOnType(x,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],L={value1:[void 0],value2:[void 0]};let g={};g.value1=c,g.value2=[{result:[.6],transformers:[]}],e.HS.updateListInputs(g),g={...L,...g};const I=[{result:e.HS.executeBasedOnType(g,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],T={value1:[void 0],value2:[void 0]};let A={};A.value1=d,A.value2=[{result:[.1],transformers:[]}],e.HS.updateListInputs(A),A={...T,...A};const k=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}];let D={};D.first=I,D.second=k,e.HS.updateListInputs(D),D={first:[1],second:[1],operation:[\\"subtract\\"],...D};const N=[{result:e.HS.executeBasedOnType(D,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let R={};R.first=k,e.HS.updateListInputs(R),R={first:[1],second:[2],operation:[\\"divide\\"],...R};const C=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let E={};E.first=O,E.second=k,e.HS.updateListInputs(E),E={first:[1],second:[2],operation:[\\"subtract\\"],...E};const G=[{result:e.HS.executeBasedOnType(E,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let V={};V.second=k,V.first=b,e.HS.updateListInputs(V),V={first:[1],second:[2],operation:[\\"subtract\\"],...V};const z=[{result:e.HS.executeBasedOnType(V,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let F={};F.first=N,e.HS.updateListInputs(F),F={first:[1],second:[2],operation:[\\"divide\\"],...F};const M=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let W={};W.first=I,W.second=C,e.HS.updateListInputs(W),W={first:[1],second:[1],operation:[\\"subtract\\"],...W};const X=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Y={};Y.width=G,Y.length=z,e.HS.updateListInputs(Y),Y={width:[1],length:[2],center:[[0,0,0]],direction:[[0,1,0]],...Y};const Z=[{result:await e.HS.executeBasedOnTypeAsync(Y,!1,(e=>t.occt.shapes.wire.createRectangleWire(e))),transformers:[]}];let P={};P.y=X,e.HS.updateListInputs(P),P={x:[0],y:[0],z:[0],...P};const j=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.y=M,e.HS.updateListInputs(q),q={x:[0],y:[0],z:[0],...q};const J=[{result:e.HS.executeBasedOnType(q,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],K={shape:[void 0]};let Q={};Q.shape=Z,e.HS.updateListInputs(Q),Q={...K,...Q};const U=[{result:await e.HS.executeBasedOnTypeAsync(Q,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}];let $={};$.width=k,$.length=k,$.height=N,$.center=J,e.HS.updateListInputs($),$={width:[1],length:[2],height:[3],center:[[0,0,0]],...$};const _=[{result:await e.HS.executeBasedOnTypeAsync($,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let ee={};ee.width=O,ee.length=b,ee.height=k,ee.center=j,e.HS.updateListInputs(ee),ee={width:[1],length:[2],height:[3],center:[[0,0,0]],...ee};const te=[{result:await e.HS.executeBasedOnTypeAsync(ee,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let se={};se.list=U,e.HS.updateListInputs(se),se={nrLevels:[1],...se};const re=[];for(let e=0;et.occt.transforms.translate(e))),transformers:[]}];let ue={};ue.listElements=[te[0],ie[0],H[0]],e.HS.updateListInputs(ue),ue={...ue};const le=[{result:[ue.listElements?ue.listElements:[]]}],ce={shapes:[void 0]};let pe={};pe.shapes=le,e.HS.updateListInputs(pe),pe={...ce,...pe};const de=[{result:await e.HS.executeBasedOnTypeAsync(pe,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],fe={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let ye={};ye.options=y,ye.entity=de,e.HS.updateListInputs(ye),ye={...fe,...ye};const he=[{result:await e.HS.executeBasedOnTypeAsync(ye,!1,(e=>t.draw.drawAnyAsync(e))),transformers:[]}];let Se={};Se.value=he,e.HS.updateListInputs(Se),Se={property:[\\"table\\"],...Se},setBitbybitRunnerResultValue(Se.property[0],Se.value[0])}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
+ return '{"type":"rete","version":"1.1.0","script":"async function(e,t,s,r,n){let a={};a={property:[\\"width\\"],...a};const o=[{result:[r[a.property[0]]]}];let i={};i={property:[\\"length\\"],...i};const u=[{result:[r[i.property[0]]]}];let l={};l={property:[\\"height\\"],...l};const c=[{result:[r[l.property[0]]]}];let p={};p={property:[\\"thickness\\"],...p};const d=[{result:[r[p.property[0]]]}];let f={};f={precision:[.01],drawFaces:[!0],faceColour:[\\"#7984b9\\"],drawEdges:[!0],edgeColour:[\\"#ffffff\\"],edgeWidth:[1],...f};const y=[{result:e.HS.executeBasedOnType(f,!1,(e=>t.draw.optionsOcctShapeSimple(e))),transformers:[]}];let h={};h={skybox:[\\"clearSky\\"],size:[1e3],blur:[.1],environmentIntensity:[.7],...h};e.HS.executeBasedOnType(h,!1,(e=>t.babylon.scene.enableSkybox(e)));let S={};S={radius:[2],center:[[0,0,0]],direction:[[0,1,0]],...S};const H=[{result:await e.HS.executeBasedOnTypeAsync(S,!1,(e=>t.occt.shapes.face.createCircleFace(e))),transformers:[]}];let m={};m={direction:[[-100,-100,-100]],intensity:[3],diffuse:[\\"#ffffff\\"],specular:[\\"#ffffff\\"],shadowGeneratorMapSize:[1024],enableShadows:[!0],shadowDarkness:[0],...m};e.HS.executeBasedOnType(m,!1,(e=>t.babylon.scene.drawDirectionalLight(e)));const v={value1:[void 0],value2:[void 0]};let w={};w.value1=o,w.value2=[{result:[.7],transformers:[]}],e.HS.updateListInputs(w),w={...v,...w};const O=[{result:e.HS.executeBasedOnType(w,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],B={value1:[void 0],value2:[void 0]};let x={};x.value1=u,x.value2=[{result:[1.4],transformers:[]}],e.HS.updateListInputs(x),x={...B,...x};const b=[{result:e.HS.executeBasedOnType(x,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],L={value1:[void 0],value2:[void 0]};let g={};g.value1=c,g.value2=[{result:[.6],transformers:[]}],e.HS.updateListInputs(g),g={...L,...g};const I=[{result:e.HS.executeBasedOnType(g,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}],T={value1:[void 0],value2:[void 0]};let A={};A.value1=d,A.value2=[{result:[.1],transformers:[]}],e.HS.updateListInputs(A),A={...T,...A};const k=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.logic.firstDefinedValueGate(e))),transformers:[]}];let D={};D.first=I,D.second=k,e.HS.updateListInputs(D),D={first:[1],second:[1],operation:[\\"subtract\\"],...D};const N=[{result:e.HS.executeBasedOnType(D,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let R={};R.first=k,e.HS.updateListInputs(R),R={first:[1],second:[2],operation:[\\"divide\\"],...R};const C=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let E={};E.first=O,E.second=k,e.HS.updateListInputs(E),E={first:[1],second:[2],operation:[\\"subtract\\"],...E};const G=[{result:e.HS.executeBasedOnType(E,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let V={};V.second=k,V.first=b,e.HS.updateListInputs(V),V={first:[1],second:[2],operation:[\\"subtract\\"],...V};const z=[{result:e.HS.executeBasedOnType(V,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let F={};F.first=N,e.HS.updateListInputs(F),F={first:[1],second:[2],operation:[\\"divide\\"],...F};const M=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let W={};W.first=I,W.second=C,e.HS.updateListInputs(W),W={first:[1],second:[1],operation:[\\"subtract\\"],...W};const X=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Y={};Y.width=G,Y.length=z,e.HS.updateListInputs(Y),Y={width:[1],length:[2],center:[[0,0,0]],direction:[[0,1,0]],...Y};const Z=[{result:await e.HS.executeBasedOnTypeAsync(Y,!1,(e=>t.occt.shapes.wire.createRectangleWire(e))),transformers:[]}];let P={};P.y=X,e.HS.updateListInputs(P),P={x:[0],y:[0],z:[0],...P};const j=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.y=M,e.HS.updateListInputs(q),q={x:[0],y:[0],z:[0],...q};const J=[{result:e.HS.executeBasedOnType(q,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],K={shape:[void 0]};let Q={};Q.shape=Z,e.HS.updateListInputs(Q),Q={...K,...Q};const U=[{result:await e.HS.executeBasedOnTypeAsync(Q,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}];let $={};$.width=k,$.length=k,$.height=N,$.center=J,e.HS.updateListInputs($),$={width:[1],length:[2],height:[3],center:[[0,0,0]],...$};const _=[{result:await e.HS.executeBasedOnTypeAsync($,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let ee={};ee.width=O,ee.length=b,ee.height=k,ee.center=j,e.HS.updateListInputs(ee),ee={width:[1],length:[2],height:[3],center:[[0,0,0]],...ee};const te=[{result:await e.HS.executeBasedOnTypeAsync(ee,!1,(e=>t.occt.shapes.solid.createBox(e))),transformers:[]}];let se={};se.list=U,e.HS.updateListInputs(se),se={nrLevels:[1],...se};const re=[];for(let e=0;et.occt.transforms.translate(e))),transformers:[]}];let ue={};ue.listElements=[te[0],ie[0],H[0]],e.HS.updateListInputs(ue),ue={...ue};const le=[{result:[ue.listElements?ue.listElements:[]]}],ce={shapes:[void 0]};let pe={};pe.shapes=le,e.HS.updateListInputs(pe),pe={...ce,...pe};const de=[{result:await e.HS.executeBasedOnTypeAsync(pe,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],fe={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let ye={};ye.options=y,ye.entity=de,e.HS.updateListInputs(ye),ye={...fe,...ye};const he=[{result:await e.HS.executeBasedOnTypeAsync(ye,!1,(e=>t.draw.drawAnyAsync(e))),transformers:[]}];let Se={};Se.value=he,e.HS.updateListInputs(Se),Se={property:[\\"table\\"],...Se},setBitbybitRunnerResultValue(Se.property[0],Se.value[0])}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);"}';
}
```
diff --git a/docs/package.json b/docs/package.json
index 3551ed9f..89aae265 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "docs",
- "version": "1.0.2",
+ "version": "1.1.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
diff --git a/docs/src/components/BitByBitRenderCanvas/index.tsx b/docs/src/components/BitByBitRenderCanvas/index.tsx
index ddfd2643..d91d2489 100644
--- a/docs/src/components/BitByBitRenderCanvas/index.tsx
+++ b/docs/src/components/BitByBitRenderCanvas/index.tsx
@@ -66,7 +66,7 @@ const BitByBitRenderCanvas: React.FC = React.memo(({
const canvasContainerRef = useRef(null);
const uniqueId = useId();
const { siteConfig } = useDocusaurusContext();
- const defaultVersion = siteConfig.customFields?.bitbybitVersion as string || "1.0.2";
+ const defaultVersion = siteConfig.customFields?.bitbybitVersion as string || "1.1.0";
const [isIframeReady, setIsIframeReady] = useState(false);
const [loadIframe, setLoadIframe] = useState(!requireManualStart);
diff --git a/docs/src/components/Version/index.tsx b/docs/src/components/Version/index.tsx
index 862e18ab..91702b20 100644
--- a/docs/src/components/Version/index.tsx
+++ b/docs/src/components/Version/index.tsx
@@ -2,7 +2,7 @@ import React, { type ReactNode } from "react";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
interface VersionProps {
- /** Optional prefix to add before the version (e.g., "v" for "v1.0.2") */
+ /** Optional prefix to add before the version (e.g., "v" for "v1.1.0") */
prefix?: string;
/** Optional suffix to add after the version */
suffix?: string;
@@ -12,8 +12,8 @@ interface VersionProps {
* A component that displays the current Bitbybit version from package.json.
*
* Usage in MDX files:
- * - Just the version: → "1.0.2"
- * - With v prefix: → "v1.0.2"
+ * - Just the version: → "1.1.0"
+ * - With v prefix: → "v1.1.0"
* - In a link: [Download](https://example.com//file.md)
*/
export default function Version({ prefix = "", suffix = "" }: VersionProps): ReactNode {
diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico
new file mode 100644
index 00000000..bd098128
Binary files /dev/null and b/docs/static/favicon.ico differ
diff --git a/docs/static/img/blog/bitbybit-dev-hannover-newsletter-cae-forum.webp b/docs/static/img/blog/bitbybit-dev-hannover-newsletter-cae-forum.webp
new file mode 100644
index 00000000..d3f5623a
Binary files /dev/null and b/docs/static/img/blog/bitbybit-dev-hannover-newsletter-cae-forum.webp differ
diff --git a/docs/static/img/blog/the-browser-is-the-new-cad.webp b/docs/static/img/blog/the-browser-is-the-new-cad.webp
deleted file mode 100644
index 11b7907f..00000000
Binary files a/docs/static/img/blog/the-browser-is-the-new-cad.webp and /dev/null differ
diff --git a/docs/static/img/favicon-192x192.png b/docs/static/img/favicon-192x192.png
new file mode 100644
index 00000000..368e0500
Binary files /dev/null and b/docs/static/img/favicon-192x192.png differ
diff --git a/docs/static/img/favicon-96x96.png b/docs/static/img/favicon-96x96.png
new file mode 100644
index 00000000..acd1ed5d
Binary files /dev/null and b/docs/static/img/favicon-96x96.png differ
diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico
index c01d54bc..bd098128 100644
Binary files a/docs/static/img/favicon.ico and b/docs/static/img/favicon.ico differ
diff --git a/docs/static/llms.txt b/docs/static/llms.txt
index 4633ede4..3c9ac72e 100644
--- a/docs/static/llms.txt
+++ b/docs/static/llms.txt
@@ -206,29 +206,29 @@ VS Code MCP Setup:
}
```
-### AI Context Files (v1.0.2)
+### AI Context Files (v1.1.0)
Attach these files to your AI coding assistant for Bitbybit API knowledge.
#### Beginner Context (Monaco Editor)
For online TypeScript editor at bitbybit.dev:
-- Full Context (116k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-babylon-monaco-ai-context-v1.0.2.md
+- Full Context (116k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-babylon-monaco-ai-context-v1.1.0.md
#### BabylonJS Context
-- Full (116k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-babylon-ai-context-v1.0.2.md
-- Lite (114k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-babylon-no-comment-min-ai-v1.0.2.md
+- Full (116k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-babylon-ai-context-v1.1.0.md
+- Lite (114k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-babylon-no-comment-min-ai-v1.1.0.md
#### Three.js Context
-- Full (95k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-three-ai-context-v1.0.2.md
-- Lite (82k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-three-no-comment-min-ai-v1.0.2.md
+- Full (95k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-three-ai-context-v1.1.0.md
+- Lite (82k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-three-no-comment-min-ai-v1.1.0.md
#### PlayCanvas Context
-- Full (94k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-playcanvas-ai-context-v1.0.2.md
-- Lite (82k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.0.2/bitbybit-playcanvas-no-comment-min-ai-v1.0.2.md
+- Full (94k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-playcanvas-ai-context-v1.1.0.md
+- Lite (82k tokens): https://app.bitbybit.dev/assets/ai-prompt-context/v1.1.0/bitbybit-playcanvas-no-comment-min-ai-v1.1.0.md
### Full API on Github
- API with short explanations: https://github.com/bitbybit-dev/bitbybit/blob/master/docs/API.md
diff --git a/docs/static/openapi.json b/docs/static/openapi.json
index c593d519..51c2fc87 100644
--- a/docs/static/openapi.json
+++ b/docs/static/openapi.json
@@ -2,7 +2,7 @@
"openapi": "3.1.0",
"info": {
"title": "Bitbybit CAD Cloud API",
- "version": "1.0.2",
+ "version": "1.1.0",
"description": "High-performance parametric CAD model generation API. Supports multi-format output (STEP, GLTF, decomposed mesh), pipeline execution, file-based conversion, and async job processing.",
"contact": {
"name": "Bitbybit",
@@ -31,7 +31,7 @@
"tags": [
"Health"
],
- "summary": "Health check",
+ "summary": "Health - status check",
"security": [],
"responses": {
"200": {
@@ -52,7 +52,7 @@
"tags": [
"CAD Operations"
],
- "summary": "Execute a single CAD operation",
+ "summary": "CAD - execute a single operation",
"description": "Runs a single CAD operation by its fully-qualified identifier.",
"requestBody": {
"required": true,
@@ -103,7 +103,7 @@
"tags": [
"CAD Operations"
],
- "summary": "Execute a chained pipeline of CAD operations",
+ "summary": "CAD - execute a chained pipeline",
"description": "Runs multiple operations sequentially. Use '$ref:N' in params to reference step N's result.",
"requestBody": {
"required": true,
@@ -154,7 +154,7 @@
"tags": [
"CAD Operations"
],
- "summary": "Execute compound (parallel) CAD operations",
+ "summary": "CAD - execute compound (parallel) operations",
"description": "Runs multiple independent operations in parallel.",
"requestBody": {
"required": true,
@@ -205,7 +205,7 @@
"tags": [
"Models"
],
- "summary": "List available parametric models",
+ "summary": "Models - list available models",
"responses": {
"200": {
"description": "Model name list",
@@ -225,7 +225,7 @@
"tags": [
"Models"
],
- "summary": "Batch-fetch model definitions",
+ "summary": "Models - batch-fetch definitions",
"description": "Returns parameter schemas and defaults for the requested model names.",
"requestBody": {
"required": true,
@@ -266,8 +266,8 @@
"tags": [
"Models"
],
- "summary": "Execute a parametric CAD model",
- "description": "Generic endpoint — works for any registered model. See model-specific endpoints for fully typed parameters. Always returns 202 with a task ID for polling.",
+ "summary": "Models - execute a parametric model",
+ "description": "Generic endpoint - works for any registered model. See model-specific endpoints for fully typed parameters. Always returns 202 with a task ID for polling.",
"parameters": [
{
"name": "modelName",
@@ -338,7 +338,7 @@
"tags": [
"Models"
],
- "summary": "Generate a batch of parametric models",
+ "summary": "Models - generate a batch",
"description": "Creates a compound task with one sub-task per item. Each item can have different parameters but shares the same output config.",
"parameters": [
{
@@ -410,7 +410,7 @@
"tags": [
"Models"
],
- "summary": "Get model parameter definitions",
+ "summary": "Models - get parameter definitions",
"description": "Returns parameter schema, types, defaults, and limits for the specified model.",
"parameters": [
{
@@ -450,10 +450,10 @@
"/api/v1/models/dragon-cup": {
"post": {
"tags": [
- "Models — Dragon Cup"
+ "Models - Dragon Cup"
],
- "summary": "Build a Dragon Cup",
- "description": "Parametric dragon-scale textured cup with twisted lofted body, voronoi-like skin cells, and configurable shell thickness. All parameters are optional — defaults produce a ready-to-print model.",
+ "summary": "Models - build a Dragon Cup",
+ "description": "Parametric dragon-scale textured cup with twisted lofted body, voronoi-like skin cells, and configurable shell thickness. All parameters are optional - defaults produce a ready-to-print model.",
"requestBody": {
"required": true,
"content": {
@@ -540,10 +540,10 @@
"/api/v1/models/phone-nest": {
"post": {
"tags": [
- "Models — Phone Nest"
+ "Models - Phone Nest"
],
- "summary": "Build a Phone Nest",
- "description": "Parametric 3D-printable desktop phone holder/stand with a lofted cradle surface, optional ornamental perforations, and a phone mock-up shape. All parameters are optional — defaults produce a ready-to-print model.",
+ "summary": "Models - build a Phone Nest",
+ "description": "Parametric 3D-printable desktop phone holder/stand with a lofted cradle surface, optional ornamental perforations, and a phone mock-up shape. All parameters are optional - defaults produce a ready-to-print model.",
"requestBody": {
"required": true,
"content": {
@@ -628,7 +628,7 @@
"tags": [
"Convert"
],
- "summary": "Convert a STEP file to GLTF (.glb)",
+ "summary": "Convert - STEP to glTF (.glb)",
"description": "Simple STEP → glTF conversion using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID.",
"requestBody": {
"required": true,
@@ -689,7 +689,7 @@
"tags": [
"Convert"
],
- "summary": "Convert a STEP file to GLTF (.glb) - advanced options",
+ "summary": "Convert - STEP to glTF (.glb), advanced options",
"description": "Full-control STEP → glTF conversion with fine-grained mesh, export, and coordinate options. Requires the 'convert' API key scope. Returns 202 with a task ID.",
"requestBody": {
"required": true,
@@ -750,7 +750,7 @@
"tags": [
"Convert"
],
- "summary": "Convert a STEP file to Draco-compressed GLTF (.glb)",
+ "summary": "Convert - STEP to Draco-compressed glTF (.glb)",
"description": "STEP → glTF conversion with Draco geometry compression using a previously uploaded file. Requires the 'convert' API key scope. Returns 202 with a task ID.",
"requestBody": {
"required": true,
@@ -811,7 +811,7 @@
"tags": [
"Convert"
],
- "summary": "Convert a STEP file to Draco-compressed GLTF (.glb) - advanced options",
+ "summary": "Convert - STEP to Draco-compressed glTF (.glb), advanced options",
"description": "Full-control STEP → glTF conversion with Draco geometry compression. Combines fine-grained mesh, export, and coordinate options with Draco quantization controls. Requires the 'convert' API key scope. Returns 202 with a task ID.",
"requestBody": {
"required": true,
@@ -867,30 +867,30 @@
}
}
},
- "/api/v1/files/upload": {
+ "/api/v1/cad/pro/unfold/face-to-flat": {
"post": {
"tags": [
- "Files"
+ "Sheet Metal"
],
- "summary": "Request a file upload URL",
- "description": "Returns a pre-signed URL for uploading a file via PUT.",
+ "summary": "Sheet metal - unfold a face to flat geometry",
+ "description": "Proprietary sheet-metal unfold: flattens a single developable face (by index) of an uploaded STEP shape. Requires the 'cad' API key scope. Returns 202 with a task ID; the flattened geometry is delivered as the task's output files.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/FileUploadBody"
+ "$ref": "#/components/schemas/UnfoldFaceToFlatBody"
}
}
}
},
"responses": {
- "201": {
- "description": "Upload URL and file ID",
+ "202": {
+ "description": "Task accepted",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UploadResponse"
+ "$ref": "#/components/schemas/TaskAcceptedResponse"
}
}
}
@@ -905,6 +905,16 @@
}
}
},
+ "403": {
+ "description": "Insufficient scope",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
"500": {
"description": "Server error",
"content": {
@@ -918,53 +928,60 @@
}
}
},
- "/api/v1/files": {
- "get": {
+ "/api/v1/cad/pro/unfold/face-report": {
+ "post": {
"tags": [
- "Files"
+ "Sheet Metal"
],
- "summary": "List uploaded files",
- "description": "Returns paginated list of uploaded files.",
- "parameters": [
- {
- "name": "page",
- "in": "query",
- "required": false,
- "schema": {
- "type": "integer",
- "default": 1
+ "summary": "Sheet metal - unfold a face, metrics report",
+ "description": "Proprietary sheet-metal analysis: computes the unfold metrics report (developability, area, ...) for a single face of an uploaded STEP shape. Requires the 'cad' API key scope. Returns 202 with a task ID; the JSON report is delivered in the task metadata.",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnfoldFaceReportBody"
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Task accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskAcceptedResponse"
+ }
+ }
}
},
- {
- "name": "limit",
- "in": "query",
- "required": false,
- "schema": {
- "type": "integer",
- "default": 20
+ "400": {
+ "description": "Validation error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
}
},
- {
- "name": "status",
- "in": "query",
- "required": false,
- "schema": {
- "type": "string",
- "enum": [
- "pending",
- "confirmed",
- "expired"
- ]
+ "403": {
+ "description": "Insufficient scope",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
}
- }
- ],
- "responses": {
- "200": {
- "description": "File list",
+ },
+ "500": {
+ "description": "Server error",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/FileListResponse"
+ "$ref": "#/components/schemas/ErrorResponse"
}
}
}
@@ -972,38 +989,36 @@
}
}
},
- "/api/v1/files/{fileId}": {
- "get": {
+ "/api/v1/cad/pro/unfold/solid-to-flat": {
+ "post": {
"tags": [
- "Files"
+ "Sheet Metal"
],
- "summary": "Get file details",
- "description": "Returns metadata and download URL for a single file.",
- "parameters": [
- {
- "name": "fileId",
- "in": "path",
- "required": true,
- "schema": {
- "type": "string",
- "format": "uuid"
- },
- "description": "File ID"
+ "summary": "Sheet metal - unfold all solids to flat geometry",
+ "description": "Proprietary sheet-metal unfold: loads every solid in an uploaded STEP file and flattens each to a flat pattern. Requires the 'cad' API key scope. Returns 202 with a task ID; all flats are combined into one compound output per format.",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnfoldSolidToFlatBody"
+ }
+ }
}
- ],
+ },
"responses": {
- "200": {
- "description": "File details",
+ "202": {
+ "description": "Task accepted",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/FileDetailResponse"
+ "$ref": "#/components/schemas/TaskAcceptedResponse"
}
}
}
},
- "404": {
- "description": "Not found",
+ "400": {
+ "description": "Validation error",
"content": {
"application/json": {
"schema": {
@@ -1011,40 +1026,19 @@
}
}
}
- }
- }
- },
- "delete": {
- "tags": [
- "Files"
- ],
- "summary": "Delete a file",
- "description": "Permanently removes a file and its stored blob.",
- "parameters": [
- {
- "name": "fileId",
- "in": "path",
- "required": true,
- "schema": {
- "type": "string",
- "format": "uuid"
- },
- "description": "File ID"
- }
- ],
- "responses": {
- "200": {
- "description": "File deleted",
+ },
+ "403": {
+ "description": "Insufficient scope",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/DeleteFileResponse"
+ "$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
- "404": {
- "description": "Not found",
+ "500": {
+ "description": "Server error",
"content": {
"application/json": {
"schema": {
@@ -1056,38 +1050,56 @@
}
}
},
- "/api/v1/files/{fileId}/confirm": {
+ "/api/v1/cad/pro/unfold/solid-report": {
"post": {
"tags": [
- "Files"
+ "Sheet Metal"
],
- "summary": "Confirm file upload",
- "description": "Confirms that the file was successfully uploaded to the pre-signed URL.",
- "parameters": [
- {
- "name": "fileId",
- "in": "path",
- "required": true,
- "schema": {
- "type": "string",
- "format": "uuid"
- },
- "description": "File ID"
+ "summary": "Sheet metal - unfold all solids, metrics report",
+ "description": "Proprietary sheet-metal analysis: computes per-solid unfold metrics for every solid in an uploaded STEP file. Requires the 'cad' API key scope. Returns 202 with a task ID; the JSON report array is delivered in the task metadata.",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnfoldSolidReportBody"
+ }
+ }
}
- ],
+ },
"responses": {
- "200": {
- "description": "File confirmed",
+ "202": {
+ "description": "Task accepted",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ConfirmResponse"
+ "$ref": "#/components/schemas/TaskAcceptedResponse"
}
}
}
},
- "404": {
- "description": "Not found",
+ "400": {
+ "description": "Validation error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Insufficient scope",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Server error",
"content": {
"application/json": {
"schema": {
@@ -1099,73 +1111,60 @@
}
}
},
- "/api/v1/tasks": {
- "get": {
+ "/api/v1/cad/pro/unfold/solid": {
+ "post": {
"tags": [
- "Tasks"
+ "Sheet Metal"
],
- "summary": "List tasks",
- "description": "Returns paginated list of tasks.",
- "parameters": [
- {
- "name": "page",
- "in": "query",
- "required": false,
- "schema": {
- "type": "integer",
- "default": 1
+ "summary": "Sheet metal - unfold all solids, geometry + report",
+ "description": "Proprietary sheet-metal unfold, full workflow: flattens every solid in an uploaded STEP file AND returns per-solid metrics in one call. Requires the 'cad' API key scope. Returns 202 with a task ID; flats are combined into one compound output per format and the per-solid report array is delivered in the task metadata.",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UnfoldSolidBody"
+ }
}
- },
- {
- "name": "limit",
- "in": "query",
- "required": false,
- "schema": {
- "type": "integer",
- "default": 20
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Task accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskAcceptedResponse"
+ }
+ }
}
},
- {
- "name": "status",
- "in": "query",
- "required": false,
- "schema": {
- "type": "string",
- "enum": [
- "waiting",
- "queued",
- "processing",
- "completed",
- "failed",
- "cancelled",
- "expired"
- ]
+ "400": {
+ "description": "Validation error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
}
},
- {
- "name": "kind",
- "in": "query",
- "required": false,
- "schema": {
- "type": "string",
- "enum": [
- "cad",
- "model",
- "convert-simple",
- "convert-advanced",
- "pipeline",
- "compound"
- ]
+ "403": {
+ "description": "Insufficient scope",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
}
- }
- ],
- "responses": {
- "200": {
- "description": "Task list",
+ },
+ "500": {
+ "description": "Server error",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/TaskListResponse"
+ "$ref": "#/components/schemas/ErrorResponse"
}
}
}
@@ -1173,38 +1172,46 @@
}
}
},
- "/api/v1/tasks/{taskId}": {
- "get": {
+ "/api/v1/files/upload": {
+ "post": {
"tags": [
- "Tasks"
+ "Files"
],
- "summary": "Get task status",
- "description": "Returns the current status and metadata of a task.",
- "parameters": [
- {
- "name": "taskId",
- "in": "path",
- "required": true,
- "schema": {
- "type": "string",
- "format": "uuid"
- },
- "description": "Task ID"
+ "summary": "Files - request an upload URL",
+ "description": "Returns a pre-signed URL for uploading a file via PUT.",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/FileUploadBody"
+ }
+ }
}
- ],
+ },
"responses": {
- "200": {
- "description": "Task status",
+ "201": {
+ "description": "Upload URL and file ID",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/TaskDetailResponse"
+ "$ref": "#/components/schemas/UploadResponse"
}
}
}
},
- "404": {
- "description": "Not found",
+ "400": {
+ "description": "Validation error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Server error",
"content": {
"application/json": {
"schema": {
@@ -1214,42 +1221,55 @@
}
}
}
- },
- "delete": {
+ }
+ },
+ "/api/v1/files": {
+ "get": {
"tags": [
- "Tasks"
+ "Files"
],
- "summary": "Cancel a task",
- "description": "Cancels a waiting or queued task. Has no effect on completed/failed tasks.",
+ "summary": "Files - list uploaded files",
+ "description": "Returns paginated list of uploaded files.",
"parameters": [
{
- "name": "taskId",
- "in": "path",
- "required": true,
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "default": 1
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "default": 20
+ }
+ },
+ {
+ "name": "status",
+ "in": "query",
+ "required": false,
"schema": {
"type": "string",
- "format": "uuid"
- },
- "description": "Task ID"
+ "enum": [
+ "pending",
+ "confirmed",
+ "expired"
+ ]
+ }
}
],
"responses": {
"200": {
- "description": "Task cancelled",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/CancelTaskResponse"
- }
- }
- }
- },
- "404": {
- "description": "Not found",
+ "description": "File list",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse"
+ "$ref": "#/components/schemas/FileListResponse"
}
}
}
@@ -1257,32 +1277,32 @@
}
}
},
- "/api/v1/tasks/{taskId}/result": {
+ "/api/v1/files/{fileId}": {
"get": {
"tags": [
- "Tasks"
+ "Files"
],
- "summary": "Get task result (default format)",
- "description": "Returns a download URL for the task's primary result. For compound tasks, returns a manifest with per-sub-task download links.",
+ "summary": "Files - get file details",
+ "description": "Returns metadata and download URL for a single file.",
"parameters": [
{
- "name": "taskId",
+ "name": "fileId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
},
- "description": "Task ID"
+ "description": "File ID"
}
],
"responses": {
"200": {
- "description": "Result download link (standard) or compound manifest",
+ "description": "File details",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/TaskOrCompoundResultResponse"
+ "$ref": "#/components/schemas/FileDetailResponse"
}
}
}
@@ -1296,55 +1316,34 @@
}
}
}
- },
- "409": {
- "description": "Task is not yet completed",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse"
- }
- }
- }
}
}
- }
- },
- "/api/v1/tasks/{taskId}/result/{format}": {
- "get": {
+ },
+ "delete": {
"tags": [
- "Tasks"
+ "Files"
],
- "summary": "Get task result in a specific format",
- "description": "Returns a download URL for the requested output format (e.g. glb, step, stpz).",
+ "summary": "Files - delete a file",
+ "description": "Permanently removes a file and its stored blob.",
"parameters": [
{
- "name": "taskId",
+ "name": "fileId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
},
- "description": "Task ID"
- },
- {
- "name": "format",
- "in": "path",
- "required": true,
- "schema": {
- "type": "string"
- },
- "description": "Result format (e.g. glb, step, stpz, metadata, decomposed-mesh)"
+ "description": "File ID"
}
],
"responses": {
"200": {
- "description": "Result download link",
+ "description": "File deleted",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/TaskResultResponse"
+ "$ref": "#/components/schemas/DeleteFileResponse"
}
}
}
@@ -1358,46 +1357,36 @@
}
}
}
- },
- "409": {
- "description": "Task is not yet completed",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse"
- }
- }
- }
}
}
}
},
- "/api/v1/tasks/{taskId}/results": {
- "get": {
+ "/api/v1/files/{fileId}/confirm": {
+ "post": {
"tags": [
- "Tasks"
+ "Files"
],
- "summary": "Get all task results",
- "description": "Returns download URLs for every available result format in a single call. Use this instead of making multiple requests to /result/{format}.",
+ "summary": "Files - confirm upload",
+ "description": "Confirms that the file was successfully uploaded to the pre-signed URL.",
"parameters": [
{
- "name": "taskId",
+ "name": "fileId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
},
- "description": "Task ID"
+ "description": "File ID"
}
],
"responses": {
"200": {
- "description": "Download links for all available formats",
+ "description": "File confirmed",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/TaskResultsResponse"
+ "$ref": "#/components/schemas/ConfirmResponse"
}
}
}
@@ -1411,46 +1400,110 @@
}
}
}
- },
- "409": {
- "description": "Task is not yet completed",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse"
- }
- }
- }
}
}
}
},
- "/api/v1/tasks/{taskId}/retry": {
- "post": {
+ "/api/v1/tasks": {
+ "get": {
"tags": [
"Tasks"
],
- "summary": "Retry a failed or cancelled task",
- "description": "Re-queues a failed or cancelled task with the same parameters.",
+ "summary": "Tasks - list tasks",
+ "description": "Returns paginated list of tasks.",
"parameters": [
{
- "name": "taskId",
- "in": "path",
- "required": true,
+ "name": "page",
+ "in": "query",
+ "required": false,
"schema": {
- "type": "string",
- "format": "uuid"
+ "type": "integer",
+ "default": 1
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "default": 20
+ }
+ },
+ {
+ "name": "status",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "enum": [
+ "waiting",
+ "queued",
+ "processing",
+ "completed",
+ "failed",
+ "cancelled",
+ "expired"
+ ]
+ }
+ },
+ {
+ "name": "kind",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "enum": [
+ "cad",
+ "model",
+ "convert-simple",
+ "convert-advanced",
+ "pipeline",
+ "compound"
+ ]
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Task list",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskListResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tasks/{taskId}": {
+ "get": {
+ "tags": [
+ "Tasks"
+ ],
+ "summary": "Tasks - get task status",
+ "description": "Returns the current status and metadata of a task.",
+ "parameters": [
+ {
+ "name": "taskId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
},
"description": "Task ID"
}
],
"responses": {
- "202": {
- "description": "Task re-queued",
+ "200": {
+ "description": "Task status",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/TaskAcceptedResponse"
+ "$ref": "#/components/schemas/TaskDetailResponse"
}
}
}
@@ -1464,9 +1517,40 @@
}
}
}
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Tasks"
+ ],
+ "summary": "Tasks - cancel a task",
+ "description": "Cancels a waiting or queued task. Has no effect on completed/failed tasks.",
+ "parameters": [
+ {
+ "name": "taskId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Task ID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Task cancelled",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CancelTaskResponse"
+ }
+ }
+ }
},
- "409": {
- "description": "Task is not in a retryable state",
+ "404": {
+ "description": "Not found",
"content": {
"application/json": {
"schema": {
@@ -1477,85 +1561,306 @@
}
}
}
- }
- },
- "components": {
- "schemas": {
- "ExecuteBody": {
- "type": "object",
- "properties": {
- "operation": {
- "type": "string",
- "minLength": 1,
- "description": "Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createBox', 'manifold.primitives.cube', 'jscad.booleans.union'). Supports OCCT, Manifold, JSCAD, and vector/math operations."
- },
- "params": {
- "description": "Operation-specific parameters — varies by operation. See model definitions for available parameters."
- }
- },
- "required": [
- "operation"
+ },
+ "/api/v1/tasks/{taskId}/result": {
+ "get": {
+ "tags": [
+ "Tasks"
],
- "additionalProperties": false,
- "description": "Execute a single Bitbybit CAD operation. The operation runs asynchronously and returns a task ID for polling."
- },
- "PipelineBody": {
- "type": "object",
- "properties": {
- "steps": {
- "minItems": 1,
- "maxItems": 50,
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PipelineAnyStep"
+ "summary": "Tasks - get result (default format)",
+ "description": "Returns a download URL for the task's primary result. For compound tasks, returns a manifest with per-sub-task download links.",
+ "parameters": [
+ {
+ "name": "taskId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
},
- "description": "Ordered list of CAD operations executed sequentially. Later steps can reference earlier results using '$ref:N' syntax. Supports map and choice control-flow steps."
+ "description": "Task ID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Result download link (standard) or compound manifest",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskOrCompoundResultResponse"
+ }
+ }
+ }
},
- "inputFiles": {
- "description": "References to previously uploaded files. Use '$file:N' in step params to inject file contents.",
- "maxItems": 5,
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/InputFileItem"
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
}
},
- "outputs": {
- "description": "Output format options applied to the final pipeline result. Supports json, csv, stl, 3mf in addition to standard formats. If omitted, raw result data is stored.",
- "$ref": "#/components/schemas/PipelineOutputOptions"
+ "409": {
+ "description": "Task is not yet completed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
}
- },
- "required": [
- "steps"
+ }
+ }
+ },
+ "/api/v1/tasks/{taskId}/result/{format}": {
+ "get": {
+ "tags": [
+ "Tasks"
],
- "additionalProperties": false,
- "description": "Execute a chain of Bitbybit CAD operations sequentially. Supports $ref:N step references, $file:N file inputs, map iteration, and choice conditionals."
- },
- "PipelineAnyStep": {
- "anyOf": [
- {
- "$ref": "#/components/schemas/MapStep"
- },
+ "summary": "Tasks - get result in a specific format",
+ "description": "Returns a download URL for the requested output format (e.g. glb, step, stpz).",
+ "parameters": [
{
- "$ref": "#/components/schemas/ChoiceStep"
+ "name": "taskId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Task ID"
},
{
- "$ref": "#/components/schemas/PipelineStep"
+ "name": "format",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Result format (e.g. glb, step, stpz, metadata, decomposed-mesh)"
}
],
- "description": "A pipeline step — either a plain operation, a map (iteration), or a choice (conditional)."
- },
- "MapStep": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "map",
- "description": "Declares this step as a map (iteration) step"
- },
- "items": {
- "description": "Source array to iterate over. Typically a '$ref:N' reference to a previous step that produced an array."
+ "responses": {
+ "200": {
+ "description": "Result download link",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskResultResponse"
+ }
+ }
+ }
},
- "steps": {
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task is not yet completed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tasks/{taskId}/results": {
+ "get": {
+ "tags": [
+ "Tasks"
+ ],
+ "summary": "Tasks - get all results",
+ "description": "Returns download URLs for every available result format in a single call. Use this instead of making multiple requests to /result/{format}.",
+ "parameters": [
+ {
+ "name": "taskId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Task ID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Download links for all available formats",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskResultsResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task is not yet completed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tasks/{taskId}/retry": {
+ "post": {
+ "tags": [
+ "Tasks"
+ ],
+ "summary": "Tasks - retry a failed or cancelled task",
+ "description": "Re-queues a failed or cancelled task with the same parameters.",
+ "parameters": [
+ {
+ "name": "taskId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Task ID"
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Task re-queued",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskAcceptedResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task is not in a retryable state",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "ExecuteBody": {
+ "type": "object",
+ "properties": {
+ "operation": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createBox', 'manifold.primitives.cube', 'jscad.booleans.union'). Supports OCCT, Manifold, JSCAD, and vector/math operations."
+ },
+ "params": {
+ "description": "Operation-specific parameters - varies by operation. See model definitions for available parameters."
+ }
+ },
+ "required": [
+ "operation"
+ ],
+ "additionalProperties": false,
+ "description": "Execute a single Bitbybit CAD operation. The operation runs asynchronously and returns a task ID for polling."
+ },
+ "PipelineBody": {
+ "type": "object",
+ "properties": {
+ "steps": {
+ "minItems": 1,
+ "maxItems": 50,
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PipelineAnyStep"
+ },
+ "description": "Ordered list of CAD operations executed sequentially. Later steps can reference earlier results using '$ref:N' syntax. Supports map and choice control-flow steps."
+ },
+ "inputFiles": {
+ "description": "References to previously uploaded files. Use '$file:N' in step params to inject file contents (optionally '$file:N::' to pick a read format and/or decompress - see PipelineStep.params).",
+ "maxItems": 5,
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/InputFileItem"
+ }
+ },
+ "outputs": {
+ "description": "Output format options applied to the final pipeline result. Supports json, csv, stl, 3mf in addition to standard formats. If omitted, raw result data is stored.",
+ "$ref": "#/components/schemas/PipelineOutputOptions"
+ }
+ },
+ "required": [
+ "steps"
+ ],
+ "additionalProperties": false,
+ "description": "Execute a chain of Bitbybit CAD operations sequentially. Supports $ref:N step references, $file:N file inputs, map iteration, and choice conditionals."
+ },
+ "PipelineAnyStep": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/MapStep"
+ },
+ {
+ "$ref": "#/components/schemas/ChoiceStep"
+ },
+ {
+ "$ref": "#/components/schemas/PipelineStep"
+ }
+ ],
+ "description": "A pipeline step - either a plain operation, a map (iteration), or a choice (conditional)."
+ },
+ "MapStep": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "map",
+ "description": "Declares this step as a map (iteration) step"
+ },
+ "items": {
+ "description": "Source array to iterate over. Typically a '$ref:N' reference to a previous step that produced an array."
+ },
+ "steps": {
"minItems": 1,
"type": "array",
"items": {
@@ -1587,7 +1892,7 @@
"description": "Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations."
},
"params": {
- "description": "Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N' to reference an input file's contents."
+ "description": "Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:][:]' to reference an input file's contents - is one of text|buffer|uint8|json|base64 (default text), and the optional is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz)."
},
"output": {
"description": "When true, this step's result is included in a separate result.json output alongside any shape files.",
@@ -1640,7 +1945,7 @@
"operator",
"then"
],
- "description": "Conditional execution — evaluate a condition and run the matching branch."
+ "description": "Conditional execution - evaluate a condition and run the matching branch."
},
"ComparisonOperator": {
"type": "string",
@@ -1722,7 +2027,7 @@
"stl",
"3mf"
],
- "description": "Pipeline output file format. Includes all standard formats plus: 'json' (JSON data), 'csv' (CSV text), 'stl' (binary STL mesh — Manifold/JSCAD only), '3mf' (3MF mesh package — Manifold/JSCAD only)."
+ "description": "Pipeline output file format. Includes all standard formats plus: 'json' (JSON data), 'csv' (CSV text), 'stl' (binary STL mesh - Manifold/JSCAD only), '3mf' (3MF mesh package - Manifold/JSCAD only)."
},
"MeshPrecision": {
"type": "number",
@@ -1737,7 +2042,7 @@
"parallel": {
"type": "boolean",
"const": true,
- "description": "Must be true — signals that items should be processed concurrently"
+ "description": "Must be true - signals that items should be processed concurrently"
},
"items": {
"minItems": 1,
@@ -1838,7 +2143,7 @@
"items": {
"$ref": "#/components/schemas/OutputFormat"
},
- "description": "Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) — each produces a separate downloadable result. Do not include both 'step' and 'stpz' — only one STEP variant is supported per request."
+ "description": "Output formats to generate. Multiple formats can be requested (e.g. ['gltf', 'stpz']) - each produces a separate downloadable result. Do not include both 'step' and 'stpz' - only one STEP variant is supported per request."
},
"meshPrecision": {
"description": "Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes. Only ignored when output is limited to step/stpz formats.",
@@ -1867,7 +2172,7 @@
"decomposed-mesh",
"gltf"
],
- "description": "Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive — choose one or the other, not both."
+ "description": "Output file format: 'step' (raw STEP), 'stpz' (gzip-compressed STEP), 'decomposed-mesh' (triangulated JSON), 'gltf' (glTF 2.0 binary .glb). Note: 'step' and 'stpz' are mutually exclusive - choose one or the other, not both."
},
"BatchModelSubmissionBody": {
"type": "object",
@@ -2030,487 +2335,1115 @@
"description": "Uniform scale factor",
"$ref": "#/components/schemas/PositiveScale"
},
- "origin": {
- "description": "[x, y, z] placement origin",
- "$ref": "#/components/schemas/Point3"
+ "origin": {
+ "description": "[x, y, z] placement origin",
+ "$ref": "#/components/schemas/Point3"
+ },
+ "direction": {
+ "description": "[x, y, z] up direction",
+ "$ref": "#/components/schemas/Point3"
+ }
+ },
+ "additionalProperties": false,
+ "description": "Dragon Cup model parameters - all optional, sane defaults apply"
+ },
+ "PositiveScale": {
+ "type": "number",
+ "minimum": 0.000001,
+ "maximum": 1000,
+ "description": "Uniform scale factor. Range: [1e-6, 1000]"
+ },
+ "Point3": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number",
+ "minimum": -1000,
+ "maximum": 1000
+ },
+ {
+ "type": "number",
+ "minimum": -1000,
+ "maximum": 1000
+ },
+ {
+ "type": "number",
+ "minimum": -1000,
+ "maximum": 1000
+ }
+ ],
+ "description": "3D point as [x, y, z] tuple, each coordinate in [-1000, 1000]"
+ },
+ "PhoneNestBody": {
+ "type": "object",
+ "properties": {
+ "params": {
+ "$ref": "#/components/schemas/PhoneNestParams"
+ },
+ "outputs": {
+ "$ref": "#/components/schemas/OutputOptions"
+ }
+ },
+ "required": [
+ "outputs"
+ ],
+ "additionalProperties": false,
+ "description": "Request body for the Phone Nest model"
+ },
+ "PhoneNestParams": {
+ "type": "object",
+ "properties": {
+ "heightBottom": {
+ "description": "Height of the bottom section (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 50
+ },
+ "heightTop": {
+ "description": "Height of the top section (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 50
+ },
+ "widthBack": {
+ "description": "Width at the back (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 50
+ },
+ "widthFront": {
+ "description": "Width at the front (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 50
+ },
+ "length": {
+ "description": "Depth / length (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 50
+ },
+ "backOffset": {
+ "description": "Back curve offset (cm)",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 30
+ },
+ "thickness": {
+ "description": "Shell wall thickness",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 5
+ },
+ "applyOrnaments": {
+ "description": "Add decorative perforations to the surface",
+ "type": "boolean"
+ },
+ "filletRadius": {
+ "description": "Fillet radius on loft edges",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 15
+ },
+ "phoneHeight": {
+ "description": "Phone mock-up height (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 35
+ },
+ "phoneWidth": {
+ "description": "Phone mock-up width (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 35
+ },
+ "phoneThickness": {
+ "description": "Phone mock-up thickness (cm)",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 3
+ },
+ "precision": {
+ "description": "Geometry precision (lower = finer)",
+ "$ref": "#/components/schemas/MeshPrecision"
+ },
+ "rotation": {
+ "description": "Final rotation angle (degrees)",
+ "type": "number",
+ "minimum": -360,
+ "maximum": 360
+ },
+ "scale": {
+ "description": "Uniform scale factor",
+ "$ref": "#/components/schemas/PositiveScale"
+ },
+ "origin": {
+ "description": "[x, y, z] placement origin",
+ "$ref": "#/components/schemas/Point3"
+ },
+ "direction": {
+ "description": "[x, y, z] up direction",
+ "$ref": "#/components/schemas/Point3"
+ }
+ },
+ "additionalProperties": false,
+ "description": "Phone Nest model parameters - all optional, sane defaults apply"
+ },
+ "StepToGltfBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ },
+ "meshPrecision": {
+ "description": "Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).",
+ "$ref": "#/components/schemas/MeshPrecision"
+ },
+ "meshAngle": {
+ "description": "Angular deflection in radians for mesh tessellation - controls curvature approximation. Smaller values produce smoother curved surfaces.",
+ "$ref": "#/components/schemas/MeshAngle"
+ },
+ "meshRelative": {
+ "description": "Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.",
+ "type": "boolean"
+ },
+ "internalVerticesMode": {
+ "description": "Add interior vertices for better curved face fidelity (slower, set false for speed).",
+ "type": "boolean"
+ },
+ "controlSurfaceDeflection": {
+ "description": "Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "stepFileId"
+ ],
+ "additionalProperties": false,
+ "description": "Convert a STEP file to glTF format with default settings. Upload the STEP file first, then pass its ID here."
+ },
+ "MeshAngle": {
+ "type": "number",
+ "minimum": 0.01,
+ "maximum": 3.141592653589793,
+ "description": "Mesh angular deflection in radians. Range: [0.01, π]"
+ },
+ "StepToGltfAdvancedBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ },
+ "options": {
+ "description": "Advanced conversion settings. If omitted, sensible defaults are used.",
+ "$ref": "#/components/schemas/ConvertAdvancedOptions"
+ }
+ },
+ "required": [
+ "stepFileId"
+ ],
+ "additionalProperties": false,
+ "description": "Convert a STEP file to glTF with full control over tessellation, naming, coordinate systems, and output format."
+ },
+ "ConvertAdvancedOptions": {
+ "type": "object",
+ "properties": {
+ "readColors": {
+ "description": "Extract color attributes from the STEP file and apply to glTF materials",
+ "type": "boolean"
+ },
+ "readNames": {
+ "description": "Extract product/instance names from the STEP file and apply to glTF node names",
+ "type": "boolean"
+ },
+ "readMaterials": {
+ "description": "Extract material definitions from the STEP file",
+ "type": "boolean"
+ },
+ "readLayers": {
+ "description": "Extract layer/group structure from the STEP file",
+ "type": "boolean"
+ },
+ "readProps": {
+ "description": "Extract custom properties (e.g. part numbers, metadata) from the STEP file",
+ "type": "boolean"
+ },
+ "meshDeflection": {
+ "description": "Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%) so deflection auto-scales with feature size. When false, it is absolute in model units (mm for STEP).",
+ "$ref": "#/components/schemas/MeshPrecision"
+ },
+ "meshAngle": {
+ "description": "Angular deflection for mesh tessellation (radians) - controls curvature approximation",
+ "$ref": "#/components/schemas/MeshAngle"
+ },
+ "meshParallel": {
+ "description": "Enable parallel tessellation for faster processing",
+ "type": "boolean"
+ },
+ "meshRelative": {
+ "description": "Use size-aware relative deflection per face. When true, meshDeflection is a fraction of each edge's length. Set to false for absolute deflection in model units.",
+ "type": "boolean"
+ },
+ "internalVerticesMode": {
+ "description": "Add interior vertices for better curved face fidelity (slower, set false for speed).",
+ "type": "boolean"
+ },
+ "controlSurfaceDeflection": {
+ "description": "Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).",
+ "type": "boolean"
+ },
+ "faceCountThreshold": {
+ "description": "Face count threshold for per-sub-shape meshing fallback. Default -1 means single-pass meshing of the whole compound (fastest). Set to a positive value (e.g. 100000) to fall back to per-solid meshing for very large assemblies in memory-constrained environments.",
+ "type": "integer",
+ "minimum": -1,
+ "maximum": 500000
+ },
+ "mergeFaces": {
+ "description": "Merge co-planar adjacent faces to reduce mesh complexity",
+ "type": "boolean"
+ },
+ "splitIndices16": {
+ "description": "Split meshes so each uses 16-bit index buffers (max 65535 vertices per mesh). Improves compatibility with some renderers.",
+ "type": "boolean"
+ },
+ "parallelWrite": {
+ "description": "Write glTF output in parallel for faster file generation",
+ "type": "boolean"
+ },
+ "embedTextures": {
+ "description": "Embed texture data directly in the .glb file instead of referencing external URIs",
+ "type": "boolean"
+ },
+ "forceUVExport": {
+ "description": "Generate UV coordinates even when no textures are present (useful for post-processing)",
+ "type": "boolean"
+ },
+ "nodeNameFormat": {
+ "description": "Strategy for naming glTF nodes from STEP product/instance labels",
+ "$ref": "#/components/schemas/GltfNameFormat"
+ },
+ "meshNameFormat": {
+ "description": "Strategy for naming glTF meshes from STEP product/instance labels",
+ "$ref": "#/components/schemas/GltfNameFormat"
+ },
+ "transformFormat": {
+ "description": "Transform representation in glTF: 'compact' (default), 'mat4' (4x4 matrix), or 'trs' (translation/rotation/scale)",
+ "$ref": "#/components/schemas/GltfTransformFormat"
+ },
+ "adjustZtoY": {
+ "description": "Convert from Z-up (CAD convention) to Y-up (glTF/WebGL convention) coordinate system",
+ "type": "boolean"
+ },
+ "scale": {
+ "description": "Uniform scale factor applied to the entire model (e.g. 0.001 to convert mm to meters)",
+ "$ref": "#/components/schemas/PositiveScale"
+ }
+ },
+ "additionalProperties": false,
+ "description": "Fine-grained options controlling STEP → glTF conversion: tessellation quality, attribute extraction, coordinate systems, and output format."
+ },
+ "GltfNameFormat": {
+ "type": "string",
+ "enum": [
+ "empty",
+ "product",
+ "instance",
+ "instanceOrProduct",
+ "productOrInstance",
+ "productAndInstance",
+ "productAndInstanceAndOcaf"
+ ],
+ "description": "How node/mesh names are derived from STEP product/instance labels"
+ },
+ "GltfTransformFormat": {
+ "type": "string",
+ "enum": [
+ "compact",
+ "mat4",
+ "trs"
+ ],
+ "description": "Transform representation in glTF output"
+ },
+ "StepToGltfWithDracoBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ },
+ "meshPrecision": {
+ "description": "Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).",
+ "$ref": "#/components/schemas/MeshPrecision"
+ },
+ "meshAngle": {
+ "description": "Angular deflection in radians for mesh tessellation - controls curvature approximation. Smaller values produce smoother curved surfaces.",
+ "$ref": "#/components/schemas/MeshAngle"
+ },
+ "meshRelative": {
+ "description": "Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.",
+ "type": "boolean"
+ },
+ "internalVerticesMode": {
+ "description": "Add interior vertices for better curved face fidelity (slower, set false for speed).",
+ "type": "boolean"
+ },
+ "controlSurfaceDeflection": {
+ "description": "Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).",
+ "type": "boolean"
+ },
+ "draco": {
+ "description": "Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).",
+ "$ref": "#/components/schemas/DracoCompressionOptions"
+ }
+ },
+ "required": [
+ "stepFileId"
+ ],
+ "additionalProperties": false,
+ "description": "Convert a STEP file to Draco-compressed glTF with default settings. Upload the STEP file first, then pass its ID here."
+ },
+ "DracoCompressionOptions": {
+ "type": "object",
+ "properties": {
+ "useDraco": {
+ "description": "Apply Draco geometry compression to the glTF output. Defaults to true for the *-with-draco endpoints.",
+ "type": "boolean"
+ },
+ "dracoCompressionLevel": {
+ "description": "Draco compression level (0 = fastest/largest, 10 = slowest/smallest). Typical good default is 7.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 10
+ },
+ "dracoQuantizePositionBits": {
+ "description": "Quantization bits for vertex positions (higher = more precise, larger file). Typical: 14.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 31
+ },
+ "dracoQuantizeNormalBits": {
+ "description": "Quantization bits for normal vectors. Typical: 10.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 31
+ },
+ "dracoQuantizeTexcoordBits": {
+ "description": "Quantization bits for texture coordinates. Typical: 12.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 31
+ },
+ "dracoQuantizeColorBits": {
+ "description": "Quantization bits for vertex colors. Typical: 8.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 31
+ },
+ "dracoQuantizeGenericBits": {
+ "description": "Quantization bits for generic vertex attributes. Typical: 12.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 31
+ },
+ "dracoUnifiedQuantization": {
+ "description": "Use unified quantization across all meshes (better when meshes share a coordinate frame).",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "description": "Draco geometry compression options applied during glTF export."
+ },
+ "StepToGltfAdvancedWithDracoBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ },
+ "options": {
+ "description": "Advanced conversion settings. If omitted, sensible defaults are used.",
+ "$ref": "#/components/schemas/ConvertAdvancedOptions"
},
- "direction": {
- "description": "[x, y, z] up direction",
- "$ref": "#/components/schemas/Point3"
+ "draco": {
+ "description": "Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).",
+ "$ref": "#/components/schemas/DracoCompressionOptions"
}
},
+ "required": [
+ "stepFileId"
+ ],
"additionalProperties": false,
- "description": "Dragon Cup model parameters — all optional, sane defaults apply"
- },
- "PositiveScale": {
- "type": "number",
- "minimum": 0.000001,
- "maximum": 1000,
- "description": "Uniform scale factor. Range: [1e-6, 1000]"
+ "description": "Convert a STEP file to Draco-compressed glTF with full control over tessellation, naming, coordinate systems, output format, and Draco quantization."
},
- "Point3": {
- "type": "array",
- "prefixItems": [
- {
- "type": "number",
- "minimum": -1000,
- "maximum": 1000
+ "UnfoldFaceToFlatBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."
},
- {
- "type": "number",
- "minimum": -1000,
- "maximum": 1000
+ "faceIndex": {
+ "default": 0,
+ "description": "0-based index of the developable face (in the shape's BRepGraph face array) to unfold.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 9007199254740991
},
- {
- "type": "number",
- "minimum": -1000,
- "maximum": 1000
+ "outputs": {
+ "description": "Output formats for the flattened face geometry. Defaults to glTF.",
+ "$ref": "#/components/schemas/OutputOptions"
}
+ },
+ "required": [
+ "stepFileId"
],
- "description": "3D point as [x, y, z] tuple, each coordinate in [-1000, 1000]"
+ "additionalProperties": false,
+ "description": "Unfold a single developable face of an uploaded STEP shape to a flat face."
},
- "PhoneNestBody": {
+ "UnfoldFaceReportBody": {
"type": "object",
"properties": {
- "params": {
- "$ref": "#/components/schemas/PhoneNestParams"
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."
},
- "outputs": {
- "$ref": "#/components/schemas/OutputOptions"
+ "faceIndex": {
+ "default": 0,
+ "description": "0-based index of the face to analyze.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 9007199254740991
}
},
"required": [
- "outputs"
+ "stepFileId"
],
"additionalProperties": false,
- "description": "Request body for the Phone Nest model"
+ "description": "Compute the sheet-metal unfold metrics report for a single face of an uploaded STEP shape."
},
- "PhoneNestParams": {
+ "UnfoldSolidToFlatBody": {
"type": "object",
"properties": {
- "heightBottom": {
- "description": "Height of the bottom section (cm)",
- "type": "number",
- "exclusiveMinimum": 0,
- "maximum": 50
- },
- "heightTop": {
- "description": "Height of the top section (cm)",
- "type": "number",
- "exclusiveMinimum": 0,
- "maximum": 50
- },
- "widthBack": {
- "description": "Width at the back (cm)",
- "type": "number",
- "exclusiveMinimum": 0,
- "maximum": 50
- },
- "widthFront": {
- "description": "Width at the front (cm)",
- "type": "number",
- "exclusiveMinimum": 0,
- "maximum": 50
- },
- "length": {
- "description": "Depth / length (cm)",
- "type": "number",
- "exclusiveMinimum": 0,
- "maximum": 50
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."
},
- "backOffset": {
- "description": "Back curve offset (cm)",
+ "kFactor": {
+ "default": 0.5,
+ "description": "Sheet-metal K-factor (neutral-axis position), typically ~0.5.",
"type": "number",
"minimum": 0,
- "maximum": 30
+ "maximum": 1
},
- "thickness": {
- "description": "Shell wall thickness",
+ "thicknessOverride": {
+ "default": 0,
+ "description": "Sheet thickness override in model units; 0 auto-detects thickness from face pairs.",
"type": "number",
- "exclusiveMinimum": 0,
- "maximum": 5
+ "minimum": 0
},
- "applyOrnaments": {
- "description": "Add decorative perforations to the surface",
- "type": "boolean"
+ "outputs": {
+ "description": "Output formats for the flattened patterns. Every solid's flat is combined into one compound output per format. Defaults to glTF.",
+ "$ref": "#/components/schemas/OutputOptions"
+ }
+ },
+ "required": [
+ "stepFileId"
+ ],
+ "additionalProperties": false,
+ "description": "Flatten every constant-thickness sheet-metal solid in an uploaded STEP file to flat patterns."
+ },
+ "UnfoldSolidReportBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."
},
- "filletRadius": {
- "description": "Fillet radius on loft edges",
+ "kFactor": {
+ "default": 0.5,
+ "description": "Sheet-metal K-factor (neutral-axis position), typically ~0.5.",
"type": "number",
"minimum": 0,
- "maximum": 15
- },
- "phoneHeight": {
- "description": "Phone mock-up height (cm)",
- "type": "number",
- "exclusiveMinimum": 0,
- "maximum": 35
+ "maximum": 1
},
- "phoneWidth": {
- "description": "Phone mock-up width (cm)",
+ "thicknessOverride": {
+ "default": 0,
+ "description": "Sheet thickness override in model units; 0 auto-detects thickness from face pairs.",
"type": "number",
- "exclusiveMinimum": 0,
- "maximum": 35
+ "minimum": 0
+ }
+ },
+ "required": [
+ "stepFileId"
+ ],
+ "additionalProperties": false,
+ "description": "Compute per-solid sheet-metal unfold metrics for every solid in an uploaded STEP file."
+ },
+ "UnfoldSolidBody": {
+ "type": "object",
+ "properties": {
+ "stepFileId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint). Both plain STEP (.step/.stp) and gzip-compressed STEP (.stpz) uploads are accepted - compression is detected automatically."
},
- "phoneThickness": {
- "description": "Phone mock-up thickness (cm)",
+ "kFactor": {
+ "default": 0.5,
+ "description": "Sheet-metal K-factor (neutral-axis position), typically ~0.5.",
"type": "number",
- "exclusiveMinimum": 0,
- "maximum": 3
- },
- "precision": {
- "description": "Geometry precision (lower = finer)",
- "$ref": "#/components/schemas/MeshPrecision"
+ "minimum": 0,
+ "maximum": 1
},
- "rotation": {
- "description": "Final rotation angle (degrees)",
+ "thicknessOverride": {
+ "default": 0,
+ "description": "Sheet thickness override in model units; 0 auto-detects thickness from face pairs.",
"type": "number",
- "minimum": -360,
- "maximum": 360
- },
- "scale": {
- "description": "Uniform scale factor",
- "$ref": "#/components/schemas/PositiveScale"
- },
- "origin": {
- "description": "[x, y, z] placement origin",
- "$ref": "#/components/schemas/Point3"
+ "minimum": 0
},
- "direction": {
- "description": "[x, y, z] up direction",
- "$ref": "#/components/schemas/Point3"
+ "outputs": {
+ "description": "Output formats for the flattened patterns. For 'gltf'/'step'/'stpz', every solid's flat is combined into one compound output. The 'decomposed-mesh' format instead returns one mesh per solid (each tagged with its 'solidIndex'). Defaults to glTF.",
+ "$ref": "#/components/schemas/OutputOptions"
}
},
+ "required": [
+ "stepFileId"
+ ],
"additionalProperties": false,
- "description": "Phone Nest model parameters — all optional, sane defaults apply"
+ "description": "Flatten every constant-thickness sheet-metal solid in an uploaded STEP file AND return the per-solid metrics report - both in one call."
},
- "StepToGltfBody": {
+ "FileUploadBody": {
"type": "object",
"properties": {
- "stepFileId": {
+ "filename": {
"type": "string",
"minLength": 1,
- "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
- },
- "meshPrecision": {
- "description": "Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).",
- "$ref": "#/components/schemas/MeshPrecision"
- },
- "meshAngle": {
- "description": "Angular deflection in radians for mesh tessellation — controls curvature approximation. Smaller values produce smoother curved surfaces.",
- "$ref": "#/components/schemas/MeshAngle"
+ "maxLength": 255,
+ "description": "Original filename including extension (e.g. 'part.step', 'model.obj'). Used for display and format detection."
},
- "meshRelative": {
- "description": "Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.",
- "type": "boolean"
+ "contentType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "description": "MIME type of the file (e.g. 'application/step', 'model/gltf-binary'). Must match the actual file content."
},
- "internalVerticesMode": {
- "description": "Add interior vertices for better curved face fidelity (slower, set false for speed).",
- "type": "boolean"
+ "bytes": {
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 1073741824,
+ "description": "Exact file size in bytes. Must match the Content-Length of the subsequent PUT to the upload URL. Maximum: 1 GB."
},
- "controlSurfaceDeflection": {
- "description": "Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).",
- "type": "boolean"
+ "sha256": {
+ "description": "SHA-256 hex digest of the file content. When provided, enables server-side deduplication - if an identical file was previously uploaded under this API key, the existing file is reused and no upload is needed.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
}
},
"required": [
- "stepFileId"
+ "filename",
+ "contentType",
+ "bytes"
],
"additionalProperties": false,
- "description": "Convert a STEP file to glTF format with default settings. Upload the STEP file first, then pass its ID here."
- },
- "MeshAngle": {
- "type": "number",
- "minimum": 0.01,
- "maximum": 3.141592653589793,
- "description": "Mesh angular deflection in radians. Range: [0.01, π]"
+ "description": "Request a pre-signed upload URL. After receiving the URL, PUT the raw file bytes to it within the expiration window."
},
- "StepToGltfAdvancedBody": {
+ "UnfoldReportError": {
"type": "object",
"properties": {
- "stepFileId": {
- "type": "string",
- "minLength": 1,
- "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ "ok": {
+ "type": "boolean",
+ "const": false
+ },
+ "error": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ok",
+ "error"
+ ],
+ "description": "Returned when a shape/face cannot be processed by the unfold."
+ },
+ "UnfoldSolidReportItem": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "thickness": {
+ "type": "number"
+ },
+ "kFactor": {
+ "type": "number"
+ },
+ "warning": {
+ "type": "string"
+ },
+ "bends": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldBend"
+ }
+ },
+ "flatBBox": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "flatArea": {
+ "type": "number"
+ },
+ "referenceArea": {
+ "type": "number"
+ },
+ "totalArea": {
+ "type": "number"
+ },
+ "faces": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldFaceEntry"
+ }
+ },
+ "placed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldPlaced"
+ }
+ }
+ },
+ "required": [
+ "ok",
+ "thickness",
+ "kFactor",
+ "warning",
+ "bends",
+ "flatBBox",
+ "flatArea",
+ "referenceArea",
+ "totalArea",
+ "faces",
+ "placed"
+ ]
},
- "options": {
- "description": "Advanced conversion settings. If omitted, sensible defaults are used.",
- "$ref": "#/components/schemas/ConvertAdvancedOptions"
+ {
+ "$ref": "#/components/schemas/UnfoldSolidReportError"
}
- },
- "required": [
- "stepFileId"
],
- "additionalProperties": false,
- "description": "Convert a STEP file to glTF with full control over tessellation, naming, coordinate systems, and output format."
+ "description": "Sheet-metal unfold metrics for ONE solid (bend table + face roles + original->flat map). On failure, the ok:false branch still carries the partial diagnostics gathered before the failure."
},
- "ConvertAdvancedOptions": {
+ "UnfoldBend": {
"type": "object",
"properties": {
- "readColors": {
- "description": "Extract color attributes from the STEP file and apply to glTF materials",
- "type": "boolean"
- },
- "readNames": {
- "description": "Extract product/instance names from the STEP file and apply to glTF node names",
- "type": "boolean"
- },
- "readMaterials": {
- "description": "Extract material definitions from the STEP file",
- "type": "boolean"
+ "faceIndex": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "readLayers": {
- "description": "Extract layer/group structure from the STEP file",
- "type": "boolean"
+ "flatA": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "readProps": {
- "description": "Extract custom properties (e.g. part numbers, metadata) from the STEP file",
- "type": "boolean"
+ "flatB": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "meshDeflection": {
- "description": "Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%) so deflection auto-scales with feature size. When false, it is absolute in model units (mm for STEP).",
- "$ref": "#/components/schemas/MeshPrecision"
+ "lineStart": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
},
- "meshAngle": {
- "description": "Angular deflection for mesh tessellation (radians) — controls curvature approximation",
- "$ref": "#/components/schemas/MeshAngle"
+ "lineEnd": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
},
- "meshParallel": {
- "description": "Enable parallel tessellation for faster processing",
- "type": "boolean"
+ "lineMid": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
},
- "meshRelative": {
- "description": "Use size-aware relative deflection per face. When true, meshDeflection is a fraction of each edge's length. Set to false for absolute deflection in model units.",
- "type": "boolean"
+ "bendLineLength": {
+ "type": "number"
},
- "internalVerticesMode": {
- "description": "Add interior vertices for better curved face fidelity (slower, set false for speed).",
- "type": "boolean"
+ "angleDeg": {
+ "type": "number"
},
- "controlSurfaceDeflection": {
- "description": "Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).",
- "type": "boolean"
+ "innerRadius": {
+ "type": "number"
},
- "faceCountThreshold": {
- "description": "Face count threshold for per-sub-shape meshing fallback. Default -1 means single-pass meshing of the whole compound (fastest). Set to a positive value (e.g. 100000) to fall back to per-solid meshing for very large assemblies in memory-constrained environments.",
- "type": "integer",
- "minimum": -1,
- "maximum": 500000
+ "outerRadius": {
+ "type": "number"
},
- "mergeFaces": {
- "description": "Merge co-planar adjacent faces to reduce mesh complexity",
- "type": "boolean"
+ "neutralRadius": {
+ "type": "number"
},
- "splitIndices16": {
- "description": "Split meshes so each uses 16-bit index buffers (max 65535 vertices per mesh). Improves compatibility with some renderers.",
- "type": "boolean"
+ "innerRadiusStart": {
+ "type": "number"
},
- "parallelWrite": {
- "description": "Write glTF output in parallel for faster file generation",
- "type": "boolean"
+ "innerRadiusEnd": {
+ "type": "number"
},
- "embedTextures": {
- "description": "Embed texture data directly in the .glb file instead of referencing external URIs",
- "type": "boolean"
+ "outerRadiusStart": {
+ "type": "number"
},
- "forceUVExport": {
- "description": "Generate UV coordinates even when no textures are present (useful for post-processing)",
- "type": "boolean"
+ "outerRadiusEnd": {
+ "type": "number"
},
- "nodeNameFormat": {
- "description": "Strategy for naming glTF nodes from STEP product/instance labels",
- "$ref": "#/components/schemas/GltfNameFormat"
+ "T": {
+ "type": "number"
},
- "meshNameFormat": {
- "description": "Strategy for naming glTF meshes from STEP product/instance labels",
- "$ref": "#/components/schemas/GltfNameFormat"
+ "K": {
+ "type": "number"
},
- "transformFormat": {
- "description": "Transform representation in glTF: 'compact' (default), 'mat4' (4x4 matrix), or 'trs' (translation/rotation/scale)",
- "$ref": "#/components/schemas/GltfTransformFormat"
+ "allowance": {
+ "type": "number"
},
- "adjustZtoY": {
- "description": "Convert from Z-up (CAD convention) to Y-up (glTF/WebGL convention) coordinate system",
- "type": "boolean"
+ "bendDeduction": {
+ "type": "number"
},
- "scale": {
- "description": "Uniform scale factor applied to the entire model (e.g. 0.001 to convert mm to meters)",
- "$ref": "#/components/schemas/PositiveScale"
- }
- },
- "additionalProperties": false,
- "description": "Fine-grained options controlling STEP → glTF conversion: tessellation quality, attribute extraction, coordinate systems, and output format."
- },
- "GltfNameFormat": {
- "type": "string",
- "enum": [
- "empty",
- "product",
- "instance",
- "instanceOrProduct",
- "productOrInstance",
- "productAndInstance",
- "productAndInstanceAndOcaf"
- ],
- "description": "How node/mesh names are derived from STEP product/instance labels"
- },
- "GltfTransformFormat": {
- "type": "string",
- "enum": [
- "compact",
- "mat4",
- "trs"
- ],
- "description": "Transform representation in glTF output"
- },
- "StepToGltfWithDracoBody": {
- "type": "object",
- "properties": {
- "stepFileId": {
- "type": "string",
- "minLength": 1,
- "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ "outsideSetback": {
+ "type": "number"
},
- "meshPrecision": {
- "description": "Mesh linear deflection. When meshRelative is true (default), this is a fraction of each edge's length (e.g. 0.005 = 0.5%). When false, it is an absolute value in model units (mm for STEP).",
- "$ref": "#/components/schemas/MeshPrecision"
+ "innerArcLength": {
+ "type": "number"
},
- "meshAngle": {
- "description": "Angular deflection in radians for mesh tessellation — controls curvature approximation. Smaller values produce smoother curved surfaces.",
- "$ref": "#/components/schemas/MeshAngle"
+ "outerArcLength": {
+ "type": "number"
},
- "meshRelative": {
- "description": "Use size-aware relative deflection per face. When true, meshPrecision is a fraction of each edge's length. Set to false for absolute deflection in model units.",
- "type": "boolean"
+ "direction": {
+ "type": "string",
+ "enum": [
+ "up",
+ "down"
+ ]
},
- "internalVerticesMode": {
- "description": "Add interior vertices for better curved face fidelity (slower, set false for speed).",
- "type": "boolean"
+ "kind": {
+ "type": "string",
+ "enum": [
+ "cyl",
+ "cone"
+ ]
},
- "controlSurfaceDeflection": {
- "description": "Extra post-pass refining triangles that bulge beyond the deflection (slower, set false for speed).",
+ "layoutApprox": {
"type": "boolean"
- },
- "draco": {
- "description": "Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).",
- "$ref": "#/components/schemas/DracoCompressionOptions"
}
},
"required": [
- "stepFileId"
+ "faceIndex",
+ "flatA",
+ "flatB",
+ "lineStart",
+ "lineEnd",
+ "lineMid",
+ "bendLineLength",
+ "angleDeg",
+ "innerRadius",
+ "outerRadius",
+ "neutralRadius",
+ "innerRadiusStart",
+ "innerRadiusEnd",
+ "outerRadiusStart",
+ "outerRadiusEnd",
+ "T",
+ "K",
+ "allowance",
+ "bendDeduction",
+ "outsideSetback",
+ "innerArcLength",
+ "outerArcLength",
+ "direction",
+ "kind",
+ "layoutApprox"
],
- "additionalProperties": false,
- "description": "Convert a STEP file to Draco-compressed glTF with default settings. Upload the STEP file first, then pass its ID here."
+ "description": "One bend: line, angle, radii (inner/outer/neutral and per-end for cones), and developed lengths."
},
- "DracoCompressionOptions": {
+ "UnfoldFaceEntry": {
"type": "object",
"properties": {
- "useDraco": {
- "description": "Apply Draco geometry compression to the glTF output. Defaults to true for the *-with-draco endpoints.",
- "type": "boolean"
- },
- "dracoCompressionLevel": {
- "description": "Draco compression level (0 = fastest/largest, 10 = slowest/smallest). Typical good default is 7.",
+ "index": {
"type": "integer",
- "minimum": 0,
- "maximum": 10
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "dracoQuantizePositionBits": {
- "description": "Quantization bits for vertex positions (higher = more precise, larger file). Typical: 14.",
+ "uid": {
"type": "integer",
- "minimum": 0,
- "maximum": 31
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "dracoQuantizeNormalBits": {
- "description": "Quantization bits for normal vectors. Typical: 10.",
- "type": "integer",
- "minimum": 0,
- "maximum": 31
+ "surfaceType": {
+ "type": "string",
+ "enum": [
+ "Plane",
+ "Cylinder",
+ "Cone",
+ "Sphere",
+ "Torus",
+ "Other"
+ ]
},
- "dracoQuantizeTexcoordBits": {
- "description": "Quantization bits for texture coordinates. Typical: 12.",
- "type": "integer",
- "minimum": 0,
- "maximum": 31
+ "role": {
+ "type": "string",
+ "enum": [
+ "referenceFlat",
+ "otherSideFlat",
+ "rim",
+ "flat",
+ "bend",
+ "coneBend",
+ "cutout",
+ "ignored"
+ ]
+ },
+ "reference": {
+ "type": "boolean"
},
- "dracoQuantizeColorBits": {
- "description": "Quantization bits for vertex colors. Typical: 8.",
+ "opposite": {
"type": "integer",
- "minimum": 0,
- "maximum": 31
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "dracoQuantizeGenericBits": {
- "description": "Quantization bits for generic vertex attributes. Typical: 12.",
- "type": "integer",
- "minimum": 0,
- "maximum": 31
+ "area": {
+ "type": "number"
+ },
+ "centroid": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "labelPoint": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
},
- "dracoUnifiedQuantization": {
- "description": "Use unified quantization across all meshes (better when meshes share a coordinate frame).",
- "type": "boolean"
+ "tangentDot": {
+ "description": "Bend candidates (cylinder/cone) only: best |flange normal · cylinder radial| over the flanges. ~1 = tangent fold, ~0 = cutout/hole wall.",
+ "type": "number"
+ },
+ "bendOutcome": {
+ "description": "How the fold filter classified a bend candidate: 'fold' (kept), 'cutout' (rejected - not tangent / <2 flanges), 'duplicate' (dropped - one fold per flat pair), or '' (a bend face not on the reference side, never evaluated by the filter).",
+ "type": "string",
+ "enum": [
+ "fold",
+ "cutout",
+ "duplicate",
+ ""
+ ]
}
},
- "additionalProperties": false,
- "description": "Draco geometry compression options applied during glTF export."
+ "required": [
+ "index",
+ "uid",
+ "surfaceType",
+ "role",
+ "reference",
+ "opposite",
+ "area",
+ "centroid",
+ "labelPoint"
+ ],
+ "description": "A classified source face: stable key (index + BRepGraph uid), role, and label anchors."
},
- "StepToGltfAdvancedWithDracoBody": {
+ "UnfoldPlaced": {
"type": "object",
"properties": {
- "stepFileId": {
+ "kind": {
"type": "string",
- "minLength": 1,
- "description": "ID of the previously uploaded STEP file (returned by the file upload endpoint)"
+ "enum": [
+ "flat",
+ "bendStrip"
+ ]
},
- "options": {
- "description": "Advanced conversion settings. If omitted, sensible defaults are used.",
- "$ref": "#/components/schemas/ConvertAdvancedOptions"
+ "sourceFaceIndex": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "draco": {
- "description": "Draco compression options. If omitted, sensible defaults are used (level 7, 14/10/12/8/12 bits).",
- "$ref": "#/components/schemas/DracoCompressionOptions"
+ "role": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "referenceFlat",
+ "otherSideFlat",
+ "rim",
+ "flat",
+ "bend",
+ "coneBend",
+ "cutout",
+ "ignored"
+ ]
+ },
+ {
+ "type": "string",
+ "const": "unknown"
+ }
+ ]
+ },
+ "flatCentroid": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
}
},
"required": [
- "stepFileId"
+ "kind",
+ "sourceFaceIndex",
+ "role",
+ "flatCentroid"
],
- "additionalProperties": false,
- "description": "Convert a STEP file to Draco-compressed glTF with full control over tessellation, naming, coordinate systems, output format, and Draco quantization."
+ "description": "A sub-shape laid into the flat compound, mapped back to its source face (compound order)."
},
- "FileUploadBody": {
+ "UnfoldSolidReportError": {
"type": "object",
"properties": {
- "filename": {
- "type": "string",
- "minLength": 1,
- "maxLength": 255,
- "description": "Original filename including extension (e.g. 'part.step', 'model.obj'). Used for display and format detection."
+ "ok": {
+ "type": "boolean",
+ "const": false
},
- "contentType": {
- "type": "string",
- "minLength": 1,
- "maxLength": 255,
- "description": "MIME type of the file (e.g. 'application/step', 'model/gltf-binary'). Must match the actual file content."
+ "error": {
+ "type": "string"
},
- "bytes": {
- "type": "integer",
- "exclusiveMinimum": 0,
- "maximum": 1073741824,
- "description": "Exact file size in bytes. Must match the Content-Length of the subsequent PUT to the upload URL. Maximum: 1 GB."
+ "thickness": {
+ "type": "number"
},
- "sha256": {
- "description": "SHA-256 hex digest of the file content. When provided, enables server-side deduplication — if an identical file was previously uploaded under this API key, the existing file is reused and no upload is needed.",
- "type": "string",
- "minLength": 1,
- "maxLength": 128
+ "kFactor": {
+ "type": "number"
+ },
+ "warning": {
+ "type": "string"
+ },
+ "bends": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldBend"
+ }
+ },
+ "flatBBox": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "flatArea": {
+ "type": "number"
+ },
+ "referenceArea": {
+ "type": "number"
+ },
+ "totalArea": {
+ "type": "number"
+ },
+ "faces": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldFaceEntry"
+ }
+ },
+ "placed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldPlaced"
+ }
}
},
"required": [
- "filename",
- "contentType",
- "bytes"
+ "ok",
+ "error"
],
- "additionalProperties": false,
- "description": "Request a pre-signed upload URL. After receiving the URL, PUT the raw file bytes to it within the expiration window."
+ "description": "Returned when a solid cannot be fully unfolded; carries the partial diagnostics gathered before the failure (classified faces with roles, detected thickness, warnings) so the reason can be inspected."
},
"HealthResponse": {
"type": "object",
@@ -2576,7 +3509,7 @@
"properties": {
"taskId": {
"type": "string",
- "description": "Unique task identifier — use this to poll for status and retrieve results",
+ "description": "Unique task identifier - use this to poll for status and retrieve results",
"format": "uuid"
},
"status": {
@@ -2988,7 +3921,7 @@
"properties": {
"fileId": {
"type": "string",
- "description": "Assigned file identifier — use this to reference the file in subsequent API calls",
+ "description": "Assigned file identifier - use this to reference the file in subsequent API calls",
"format": "uuid"
},
"uploadUrl": {
@@ -3411,63 +4344,238 @@
],
"description": "ISO 8601 timestamp when the task completed (success or failure). Null if still running."
},
- "expiresAt": {
+ "expiresAt": {
+ "type": "string",
+ "description": "ISO 8601 timestamp when task results will be automatically deleted"
+ }
+ },
+ "required": [
+ "taskId",
+ "kind",
+ "label",
+ "status",
+ "progress",
+ "error",
+ "resultParts",
+ "metadata",
+ "createdAt",
+ "startedAt",
+ "finishedAt",
+ "expiresAt"
+ ],
+ "additionalProperties": false,
+ "description": "Complete task status including lifecycle timestamps, progress, and result metadata"
+ },
+ "TaskKind": {
+ "type": "string",
+ "enum": [
+ "cad",
+ "model",
+ "convert-simple",
+ "convert-advanced",
+ "pipeline",
+ "compound",
+ "tenant"
+ ],
+ "description": "Type of work: 'cad' (single operation), 'model' (parametric model), 'convert-simple'/'convert-advanced' (file conversion), 'pipeline' (sequential chain), 'compound' (parallel batch), 'tenant' (tenant-scoped)"
+ },
+ "ResultPartMeta": {
+ "type": "object",
+ "properties": {
+ "mime": {
+ "type": "string",
+ "description": "MIME type of the result file (e.g. 'model/gltf-binary', 'application/step')"
+ },
+ "bytes": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 9007199254740991,
+ "description": "Size of the result file in bytes"
+ }
+ },
+ "required": [
+ "mime",
+ "bytes"
+ ],
+ "additionalProperties": false,
+ "description": "Metadata about a single downloadable result part"
+ },
+ "TaskDetailResponse": {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "data": {
+ "$ref": "#/components/schemas/TaskDetail"
+ }
+ },
+ "required": [
+ "ok",
+ "data"
+ ],
+ "additionalProperties": false,
+ "description": "Success envelope containing a single task's full details"
+ },
+ "CancelTaskResponse": {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "data": {
+ "$ref": "#/components/schemas/CancelResult"
+ }
+ },
+ "required": [
+ "ok",
+ "data"
+ ],
+ "additionalProperties": false,
+ "description": "Success response for task cancellation"
+ },
+ "CancelResult": {
+ "type": "object",
+ "properties": {
+ "cancelled": {
+ "type": "boolean",
+ "const": true
+ },
+ "previousStatus": {
+ "type": "string",
+ "description": "Status before cancellation"
+ }
+ },
+ "required": [
+ "cancelled",
+ "previousStatus"
+ ],
+ "additionalProperties": false,
+ "description": "Confirmation that a task was successfully cancelled"
+ },
+ "TaskOrCompoundResultResponse": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TaskResultResponse"
+ },
+ {
+ "$ref": "#/components/schemas/CompoundResultManifestResponse"
+ }
+ ],
+ "description": "Result download link for standard tasks, or a compound manifest with per-sub-task download links"
+ },
+ "TaskResultResponse": {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "data": {
+ "$ref": "#/components/schemas/TaskResultDownload"
+ }
+ },
+ "required": [
+ "ok",
+ "data"
+ ],
+ "additionalProperties": false,
+ "description": "Success envelope containing a download link for a task result"
+ },
+ "TaskResultDownload": {
+ "type": "object",
+ "properties": {
+ "downloadUrl": {
+ "type": "string",
+ "description": "Pre-signed URL to download the result file. Expires after 1 hour.",
+ "format": "uri"
+ },
+ "filename": {
"type": "string",
- "description": "ISO 8601 timestamp when task results will be automatically deleted"
+ "description": "Suggested filename for the download",
+ "example": "result.glb"
}
},
"required": [
- "taskId",
- "kind",
- "label",
- "status",
- "progress",
- "error",
- "resultParts",
- "metadata",
- "createdAt",
- "startedAt",
- "finishedAt",
- "expiresAt"
+ "downloadUrl",
+ "filename"
],
"additionalProperties": false,
- "description": "Complete task status including lifecycle timestamps, progress, and result metadata"
+ "description": "Download information for a completed task result"
},
- "TaskKind": {
- "type": "string",
- "enum": [
- "cad",
- "model",
- "convert-simple",
- "convert-advanced",
- "pipeline",
- "compound",
- "tenant"
+ "CompoundResultManifestResponse": {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "data": {
+ "$ref": "#/components/schemas/CompoundResultManifest"
+ }
+ },
+ "required": [
+ "ok",
+ "data"
],
- "description": "Type of work: 'cad' (single operation), 'model' (parametric model), 'convert-simple'/'convert-advanced' (file conversion), 'pipeline' (sequential chain), 'compound' (parallel batch), 'tenant' (tenant-scoped)"
+ "additionalProperties": false,
+ "description": "Success envelope containing the compound task result manifest with per-sub-task download links"
},
- "ResultPartMeta": {
+ "CompoundResultManifest": {
"type": "object",
"properties": {
- "mime": {
+ "manifest": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CompoundResultEntry"
+ },
+ "description": "Per-sub-task status and download links"
+ }
+ },
+ "required": [
+ "manifest"
+ ],
+ "additionalProperties": false,
+ "description": "Result manifest for a completed compound task"
+ },
+ "CompoundResultEntry": {
+ "type": "object",
+ "properties": {
+ "taskId": {
"type": "string",
- "description": "MIME type of the result file (e.g. 'model/gltf-binary', 'application/step')"
+ "description": "Sub-task ID"
},
- "bytes": {
+ "index": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
- "description": "Size of the result file in bytes"
+ "description": "Position in the compound task"
+ },
+ "status": {
+ "$ref": "#/components/schemas/TaskStatus"
+ },
+ "downloadUrls": {
+ "description": "Download URLs keyed by format (only if completed)",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
}
},
"required": [
- "mime",
- "bytes"
+ "taskId",
+ "index",
+ "status"
],
"additionalProperties": false,
- "description": "Metadata about a single downloadable result part"
+ "description": "Status/result info for one sub-task in a compound manifest"
},
- "TaskDetailResponse": {
+ "TaskResultsResponse": {
"type": "object",
"properties": {
"ok": {
@@ -3475,7 +4583,7 @@
"const": true
},
"data": {
- "$ref": "#/components/schemas/TaskDetail"
+ "$ref": "#/components/schemas/TaskResultsDownload"
}
},
"required": [
@@ -3483,221 +4591,624 @@
"data"
],
"additionalProperties": false,
- "description": "Success envelope containing a single task's full details"
+ "description": "Success envelope containing download links for all result formats"
},
- "CancelTaskResponse": {
+ "TaskResultsDownload": {
"type": "object",
"properties": {
- "ok": {
- "type": "boolean",
- "const": true
- },
- "data": {
- "$ref": "#/components/schemas/CancelResult"
+ "downloads": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "format": {
+ "type": "string",
+ "description": "Result format key (e.g. 'glb', 'step', 'metadata')"
+ },
+ "downloadUrl": {
+ "type": "string",
+ "description": "Pre-signed URL to download the result file. Expires after 1 hour.",
+ "format": "uri"
+ },
+ "filename": {
+ "type": "string",
+ "description": "Suggested filename for the download",
+ "example": "result.glb"
+ }
+ },
+ "required": [
+ "format",
+ "downloadUrl",
+ "filename"
+ ],
+ "additionalProperties": false
+ },
+ "description": "Download links for all available result formats"
}
},
"required": [
- "ok",
- "data"
+ "downloads"
],
"additionalProperties": false,
- "description": "Success response for task cancellation"
+ "description": "Download information for all available result formats of a completed task"
},
- "CancelResult": {
+ "UnfoldReportErrorOutput": {
"type": "object",
"properties": {
- "cancelled": {
+ "ok": {
"type": "boolean",
- "const": true
+ "const": false
},
- "previousStatus": {
- "type": "string",
- "description": "Status before cancellation"
+ "error": {
+ "type": "string"
}
},
"required": [
- "cancelled",
- "previousStatus"
+ "ok",
+ "error"
],
"additionalProperties": false,
- "description": "Confirmation that a task was successfully cancelled"
+ "description": "Returned when a shape/face cannot be processed by the unfold."
},
- "TaskOrCompoundResultResponse": {
+ "UnfoldSolidReportItemOutput": {
"anyOf": [
{
- "$ref": "#/components/schemas/TaskResultResponse"
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "thickness": {
+ "type": "number"
+ },
+ "kFactor": {
+ "type": "number"
+ },
+ "warning": {
+ "type": "string"
+ },
+ "bends": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldBendOutput"
+ }
+ },
+ "flatBBox": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "flatArea": {
+ "type": "number"
+ },
+ "referenceArea": {
+ "type": "number"
+ },
+ "totalArea": {
+ "type": "number"
+ },
+ "faces": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldFaceEntryOutput"
+ }
+ },
+ "placed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldPlacedOutput"
+ }
+ }
+ },
+ "required": [
+ "ok",
+ "thickness",
+ "kFactor",
+ "warning",
+ "bends",
+ "flatBBox",
+ "flatArea",
+ "referenceArea",
+ "totalArea",
+ "faces",
+ "placed"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "$ref": "#/components/schemas/UnfoldSolidReportErrorOutput"
+ }
+ ],
+ "description": "Sheet-metal unfold metrics for ONE solid (bend table + face roles + original->flat map). On failure, the ok:false branch still carries the partial diagnostics gathered before the failure."
+ },
+ "UnfoldBendOutput": {
+ "type": "object",
+ "properties": {
+ "faceIndex": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "flatA": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "flatB": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "lineStart": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "lineEnd": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "lineMid": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "bendLineLength": {
+ "type": "number"
+ },
+ "angleDeg": {
+ "type": "number"
+ },
+ "innerRadius": {
+ "type": "number"
+ },
+ "outerRadius": {
+ "type": "number"
+ },
+ "neutralRadius": {
+ "type": "number"
+ },
+ "innerRadiusStart": {
+ "type": "number"
+ },
+ "innerRadiusEnd": {
+ "type": "number"
+ },
+ "outerRadiusStart": {
+ "type": "number"
+ },
+ "outerRadiusEnd": {
+ "type": "number"
+ },
+ "T": {
+ "type": "number"
+ },
+ "K": {
+ "type": "number"
+ },
+ "allowance": {
+ "type": "number"
+ },
+ "bendDeduction": {
+ "type": "number"
+ },
+ "outsideSetback": {
+ "type": "number"
+ },
+ "innerArcLength": {
+ "type": "number"
},
- {
- "$ref": "#/components/schemas/CompoundResultManifestResponse"
- }
- ],
- "description": "Result download link for standard tasks, or a compound manifest with per-sub-task download links"
- },
- "TaskResultResponse": {
- "type": "object",
- "properties": {
- "ok": {
- "type": "boolean",
- "const": true
+ "outerArcLength": {
+ "type": "number"
},
- "data": {
- "$ref": "#/components/schemas/TaskResultDownload"
- }
- },
- "required": [
- "ok",
- "data"
- ],
- "additionalProperties": false,
- "description": "Success envelope containing a download link for a task result"
- },
- "TaskResultDownload": {
- "type": "object",
- "properties": {
- "downloadUrl": {
+ "direction": {
"type": "string",
- "description": "Pre-signed URL to download the result file. Expires after 1 hour.",
- "format": "uri"
+ "enum": [
+ "up",
+ "down"
+ ]
},
- "filename": {
+ "kind": {
"type": "string",
- "description": "Suggested filename for the download",
- "example": "result.glb"
- }
- },
- "required": [
- "downloadUrl",
- "filename"
- ],
- "additionalProperties": false,
- "description": "Download information for a completed task result"
- },
- "CompoundResultManifestResponse": {
- "type": "object",
- "properties": {
- "ok": {
- "type": "boolean",
- "const": true
+ "enum": [
+ "cyl",
+ "cone"
+ ]
},
- "data": {
- "$ref": "#/components/schemas/CompoundResultManifest"
+ "layoutApprox": {
+ "type": "boolean"
}
},
"required": [
- "ok",
- "data"
+ "faceIndex",
+ "flatA",
+ "flatB",
+ "lineStart",
+ "lineEnd",
+ "lineMid",
+ "bendLineLength",
+ "angleDeg",
+ "innerRadius",
+ "outerRadius",
+ "neutralRadius",
+ "innerRadiusStart",
+ "innerRadiusEnd",
+ "outerRadiusStart",
+ "outerRadiusEnd",
+ "T",
+ "K",
+ "allowance",
+ "bendDeduction",
+ "outsideSetback",
+ "innerArcLength",
+ "outerArcLength",
+ "direction",
+ "kind",
+ "layoutApprox"
],
"additionalProperties": false,
- "description": "Success envelope containing the compound task result manifest with per-sub-task download links"
+ "description": "One bend: line, angle, radii (inner/outer/neutral and per-end for cones), and developed lengths."
},
- "CompoundResultManifest": {
+ "UnfoldFaceEntryOutput": {
"type": "object",
"properties": {
- "manifest": {
+ "index": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "uid": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "surfaceType": {
+ "type": "string",
+ "enum": [
+ "Plane",
+ "Cylinder",
+ "Cone",
+ "Sphere",
+ "Torus",
+ "Other"
+ ]
+ },
+ "role": {
+ "type": "string",
+ "enum": [
+ "referenceFlat",
+ "otherSideFlat",
+ "rim",
+ "flat",
+ "bend",
+ "coneBend",
+ "cutout",
+ "ignored"
+ ]
+ },
+ "reference": {
+ "type": "boolean"
+ },
+ "opposite": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "area": {
+ "type": "number"
+ },
+ "centroid": {
"type": "array",
- "items": {
- "$ref": "#/components/schemas/CompoundResultEntry"
- },
- "description": "Per-sub-task status and download links"
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "labelPoint": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "tangentDot": {
+ "description": "Bend candidates (cylinder/cone) only: best |flange normal · cylinder radial| over the flanges. ~1 = tangent fold, ~0 = cutout/hole wall.",
+ "type": "number"
+ },
+ "bendOutcome": {
+ "description": "How the fold filter classified a bend candidate: 'fold' (kept), 'cutout' (rejected - not tangent / <2 flanges), 'duplicate' (dropped - one fold per flat pair), or '' (a bend face not on the reference side, never evaluated by the filter).",
+ "type": "string",
+ "enum": [
+ "fold",
+ "cutout",
+ "duplicate",
+ ""
+ ]
}
},
"required": [
- "manifest"
+ "index",
+ "uid",
+ "surfaceType",
+ "role",
+ "reference",
+ "opposite",
+ "area",
+ "centroid",
+ "labelPoint"
],
"additionalProperties": false,
- "description": "Result manifest for a completed compound task"
+ "description": "A classified source face: stable key (index + BRepGraph uid), role, and label anchors."
},
- "CompoundResultEntry": {
+ "UnfoldPlacedOutput": {
"type": "object",
"properties": {
- "taskId": {
+ "kind": {
"type": "string",
- "description": "Sub-task ID"
+ "enum": [
+ "flat",
+ "bendStrip"
+ ]
},
- "index": {
+ "sourceFaceIndex": {
"type": "integer",
- "minimum": 0,
- "maximum": 9007199254740991,
- "description": "Position in the compound task"
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
},
- "status": {
- "$ref": "#/components/schemas/TaskStatus"
+ "role": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "referenceFlat",
+ "otherSideFlat",
+ "rim",
+ "flat",
+ "bend",
+ "coneBend",
+ "cutout",
+ "ignored"
+ ]
+ },
+ {
+ "type": "string",
+ "const": "unknown"
+ }
+ ]
},
- "downloadUrls": {
- "description": "Download URLs keyed by format (only if completed)",
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string"
- }
+ "flatCentroid": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
}
},
"required": [
- "taskId",
- "index",
- "status"
+ "kind",
+ "sourceFaceIndex",
+ "role",
+ "flatCentroid"
],
"additionalProperties": false,
- "description": "Status/result info for one sub-task in a compound manifest"
+ "description": "A sub-shape laid into the flat compound, mapped back to its source face (compound order)."
},
- "TaskResultsResponse": {
+ "UnfoldSolidReportErrorOutput": {
"type": "object",
"properties": {
"ok": {
"type": "boolean",
- "const": true
+ "const": false
},
- "data": {
- "$ref": "#/components/schemas/TaskResultsDownload"
+ "error": {
+ "type": "string"
+ },
+ "thickness": {
+ "type": "number"
+ },
+ "kFactor": {
+ "type": "number"
+ },
+ "warning": {
+ "type": "string"
+ },
+ "bends": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldBendOutput"
+ }
+ },
+ "flatBBox": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "flatArea": {
+ "type": "number"
+ },
+ "referenceArea": {
+ "type": "number"
+ },
+ "totalArea": {
+ "type": "number"
+ },
+ "faces": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldFaceEntryOutput"
+ }
+ },
+ "placed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnfoldPlacedOutput"
+ }
}
},
"required": [
"ok",
- "data"
+ "error"
],
"additionalProperties": false,
- "description": "Success envelope containing download links for all result formats"
+ "description": "Returned when a solid cannot be fully unfolded; carries the partial diagnostics gathered before the failure (classified faces with roles, detected thickness, warnings) so the reason can be inspected."
},
- "TaskResultsDownload": {
- "type": "object",
- "properties": {
- "downloads": {
- "type": "array",
- "items": {
+ "UnfoldFaceReport": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "const": true
+ },
+ "faceIndex": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "surfaceType": {
+ "type": "string",
+ "enum": [
+ "Plane",
+ "Cylinder",
+ "Cone",
+ "Sphere",
+ "Torus",
+ "Other"
+ ]
+ },
+ "developable": {
+ "type": "boolean"
+ },
+ "unfolded": {
+ "type": "boolean"
+ },
+ "area": {
+ "type": "number"
+ },
+ "flatArea": {
+ "type": "number"
+ },
+ "areaError": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "ok",
+ "faceIndex",
+ "surfaceType",
+ "developable",
+ "unfolded",
+ "area",
+ "flatArea",
+ "areaError"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "$ref": "#/components/schemas/UnfoldReportErrorOutput"
+ }
+ ],
+ "description": "Sheet-metal unfold metrics for a single face (surface type, developability, area before/after)."
+ },
+ "UnfoldSolidReport": {
+ "type": "array",
+ "items": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/UnfoldSolidReportItemOutput"
+ },
+ {
"type": "object",
"properties": {
- "format": {
- "type": "string",
- "description": "Result format key (e.g. 'glb', 'step', 'metadata')"
- },
- "downloadUrl": {
- "type": "string",
- "description": "Pre-signed URL to download the result file. Expires after 1 hour.",
- "format": "uri"
- },
- "filename": {
- "type": "string",
- "description": "Suggested filename for the download",
- "example": "result.glb"
+ "solidIndex": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
}
},
"required": [
- "format",
- "downloadUrl",
- "filename"
+ "solidIndex"
],
"additionalProperties": false
- },
- "description": "Download links for all available result formats"
- }
+ }
+ ]
},
- "required": [
- "downloads"
- ],
- "additionalProperties": false,
- "description": "Download information for all available result formats of a completed task"
+ "description": "Per-solid sheet-metal unfold metrics - one entry per solid in the STEP file (each carries its solidIndex)."
}
},
"securitySchemes": {
diff --git a/examples/angular/babylonjs/laptop-holder/package-lock.json b/examples/angular/babylonjs/laptop-holder/package-lock.json
index 664fff5f..d39ecc67 100644
--- a/examples/angular/babylonjs/laptop-holder/package-lock.json
+++ b/examples/angular/babylonjs/laptop-holder/package-lock.json
@@ -15,7 +15,7 @@
"@angular/material": "21.1.0",
"@angular/platform-browser": "21.1.0",
"@angular/router": "21.1.0",
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"rxjs": "^7.8.1",
"tslib": "^2.8.0",
"zone.js": "~0.15.0"
@@ -948,16 +948,16 @@
}
},
"node_modules/@babylonjs/core": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.8.0.tgz",
- "integrity": "sha512-A+McUA1/EYAV4uvLtfc5b5eCWJRS2WNzKScHqybwA0PfNsX8eoRAHzNs/iOzS7OxALjZE0J05bssixQVqXm4qQ==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.11.0.tgz",
+ "integrity": "sha512-MQH6Lop6Dn06n3gW8/CADb3FrO3jVudYHYZVu2TPNH0hXyJGAVPtVRpudF12UHn5ZV0ByQ1gu71vfKj88rFDCg==",
"license": "Apache-2.0",
"peer": true
},
"node_modules/@babylonjs/gui": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.8.0.tgz",
- "integrity": "sha512-ByC5afXZ/evNzUb7o4NnfoNOXz1kLJxA8VciXCvwIVm4fnR8E8l7OFxqNTZI+utePCSn7VBXgFTGUtxJ3ofQMw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.11.0.tgz",
+ "integrity": "sha512-uY9BBKDZDmOsxa1xdasiV1/Uqn5BPvvqZ/sw5X+EIGSBamtJ7ve4gVhNXT897Ce2zDfx6qXub4gPRoGCaZj+Nw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
@@ -973,9 +973,9 @@
}
},
"node_modules/@babylonjs/loaders": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.8.0.tgz",
- "integrity": "sha512-jlqLw3LZn+gdJSkitl1iYHfDtKDt6DuCN6lMPMnIhhFmypbYE8FiHiNDIhzoEEWxqDl+W07GhrpUQm+qy8Lsjg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.11.0.tgz",
+ "integrity": "sha512-l+bVNG3zOG4FhBT0WVlZSb49WVyzoduACMop/RDKQjVsSfUg2lMeKnHlrGccp/bsRxlR1Y/pKD9GQTkXsQ7gmQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -983,18 +983,18 @@
}
},
"node_modules/@babylonjs/materials": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.8.0.tgz",
- "integrity": "sha512-BqAUtI5QwoN1a/UdcEy1p83rL1vG30uPDnPDRkqtclFl4tWS6O2SEYb770/v2ekgDv4v0BwQvCIgfl2QjRijfw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.11.0.tgz",
+ "integrity": "sha512-0g8+oiqFpWJU+BW4z15qpohvYruACRtfHCrec1OnqhR09uOI9QEwkdbR2ep91/7j9Qt15/WxU2tqECrsXzKAkw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
}
},
"node_modules/@babylonjs/serializers": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.8.0.tgz",
- "integrity": "sha512-UeoH9x/PcCCxpy88GnOvQwMdhJBzeEPf5Gvb1dhrJNjeDJ0h81tp5Dt2LfpgP5klunObqn9cgO4HFJ0WX8vzgg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.11.0.tgz",
+ "integrity": "sha512-ZEcW65XXn3W2Ir6GBuHpGRspF+QM4F9gusK5RP0sYUElVzCBBTgb7ITQYDjwN+9pDjqudS9L3d5n5dZv8I7vuA==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -1002,18 +1002,18 @@
}
},
"node_modules/@bitbybit-dev/babylonjs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.0.2.tgz",
- "integrity": "sha512-5nPU7RiddwgjptsWJzI5hrHjqr+zSIC1Ff9iJo+5e51X55d5gFb47Qpxzao/7AcX7vjDVPd/5YWSQo7FeDIHhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.1.0.tgz",
+ "integrity": "sha512-8S9541qjE6d/AlCEkuhjY/3qMuSglpjUtQ2Iujdbm8NuOIkfkRwA+T3WNG6iHTB/ErUFNVfegaKd6t6kQTovtw==",
"license": "MIT",
"dependencies": {
- "@babylonjs/core": "9.8.0",
- "@babylonjs/gui": "9.8.0",
+ "@babylonjs/core": "9.11.0",
+ "@babylonjs/gui": "9.11.0",
"@babylonjs/havok": "1.3.12",
- "@babylonjs/loaders": "9.8.0",
- "@babylonjs/materials": "9.8.0",
- "@babylonjs/serializers": "9.8.0",
- "@bitbybit-dev/core": "1.0.2",
+ "@babylonjs/loaders": "9.11.0",
+ "@babylonjs/materials": "9.11.0",
+ "@babylonjs/serializers": "9.11.0",
+ "@bitbybit-dev/core": "1.1.0",
"earcut": "3.0.2"
},
"funding": {
@@ -1022,9 +1022,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -1032,15 +1032,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -1051,12 +1051,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -1069,12 +1069,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -1083,12 +1083,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -1097,12 +1097,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -1111,12 +1111,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -1124,12 +1124,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -1613,39 +1613,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -4691,9 +4691,9 @@
}
},
"node_modules/babylonjs-gltf2interface": {
- "version": "9.9.1",
- "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.9.1.tgz",
- "integrity": "sha512-qHE7pASEWbRORU+NEPSSL9fyVh6gBNqC1ugV94YL9Dz0HnLcH8YNcxdi6Pf+oXgFHRrXWZiJATn37HynsF7/0g==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.11.0.tgz",
+ "integrity": "sha512-IhDr08yK7K2EHvwICX1fMb2dK5K86XSqWsJQxwqMhUOmjA9AtCPWbfXLBYt2f3J6xSBsHHP+2MDnT7oozUeVZQ==",
"license": "Apache-2.0",
"peer": true
},
diff --git a/examples/angular/babylonjs/laptop-holder/package.json b/examples/angular/babylonjs/laptop-holder/package.json
index 64ee704a..e0562e18 100644
--- a/examples/angular/babylonjs/laptop-holder/package.json
+++ b/examples/angular/babylonjs/laptop-holder/package.json
@@ -16,7 +16,7 @@
"@angular/material":"21.1.0",
"@angular/platform-browser": "21.1.0",
"@angular/router": "21.1.0",
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"rxjs": "^7.8.1",
"tslib": "^2.8.0",
"zone.js": "~0.15.0"
diff --git a/examples/angular/threejs/vite-basic-example/package-lock.json b/examples/angular/threejs/vite-basic-example/package-lock.json
index 3dca8b00..d784c80b 100644
--- a/examples/angular/threejs/vite-basic-example/package-lock.json
+++ b/examples/angular/threejs/vite-basic-example/package-lock.json
@@ -13,7 +13,7 @@
"@angular/forms": "^20.0.0",
"@angular/platform-browser": "^20.0.0",
"@angular/router": "^20.0.0",
- "@bitbybit-dev/threejs": "1.0.2",
+ "@bitbybit-dev/threejs": "1.1.0",
"rxjs": "7.8.2",
"tslib": "^2.5.0",
"zone.js": "~0.15.0"
@@ -906,9 +906,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -916,15 +916,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -935,12 +935,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -953,12 +953,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -967,12 +967,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -981,12 +981,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -995,12 +995,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -1008,12 +1008,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -1022,12 +1022,12 @@
}
},
"node_modules/@bitbybit-dev/threejs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-1.0.2.tgz",
- "integrity": "sha512-uc/TTQYk73WgGKo07ij+GjjH4h94+vfaIzQCSjeXweF5DSwQJyXTaIfHO7lvyFuq4/RnO01Z1Aef9Iz+7C2W1A==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-1.1.0.tgz",
+ "integrity": "sha512-hivI46oNjHBVOsq7cpP7QJCE3YzAYkHBDZxUdUfL+556ihzOEoL7gJalSDrddKBpE2gVJLHuwnnnD3gvatOu6g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/core": "1.0.2",
+ "@bitbybit-dev/core": "1.1.0",
"three": "0.184.0"
},
"funding": {
@@ -1043,9 +1043,9 @@
"license": "Apache-2.0"
},
"node_modules/@emnapi/runtime": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz",
+ "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -1495,39 +1495,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -7974,9 +7974,9 @@
}
},
"node_modules/sharp/node_modules/semver": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
- "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
diff --git a/examples/angular/threejs/vite-basic-example/package.json b/examples/angular/threejs/vite-basic-example/package.json
index f849e577..c147039a 100644
--- a/examples/angular/threejs/vite-basic-example/package.json
+++ b/examples/angular/threejs/vite-basic-example/package.json
@@ -14,7 +14,7 @@
"@angular/forms": "^20.0.0",
"@angular/platform-browser": "^20.0.0",
"@angular/router": "^20.0.0",
- "@bitbybit-dev/threejs": "1.0.2",
+ "@bitbybit-dev/threejs": "1.1.0",
"rxjs": "7.8.2",
"tslib": "^2.5.0",
"zone.js": "~0.15.0"
diff --git a/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts b/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts
index b12810fc..d3d5180e 100644
--- a/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts
+++ b/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts
@@ -7,7 +7,7 @@ import Module from "manifold-3d";
const init = async () => {
const wasm = await Module({
locateFile: () => {
- return "https://git-cdn.bitbybit.dev/v1.0.2/wasm/manifold-3-3-2.wasm";
+ return "https://git-cdn.bitbybit.dev/v1.1.0/wasm/manifold-3-3-2.wasm";
},
});
wasm.setup();
diff --git a/examples/api/frontend/package-lock.json b/examples/api/frontend/package-lock.json
index 10a2792b..28295ed5 100644
--- a/examples/api/frontend/package-lock.json
+++ b/examples/api/frontend/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bitbybit-example-frontend",
- "version": "1.0.2",
+ "version": "1.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bitbybit-example-frontend",
- "version": "1.0.2",
+ "version": "1.1.0",
"dependencies": {
"react": "^19.1.0",
"react-dom": "^19.1.0",
diff --git a/examples/api/frontend/package.json b/examples/api/frontend/package.json
index 98ad031e..eee2dfb6 100644
--- a/examples/api/frontend/package.json
+++ b/examples/api/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-example-frontend",
- "version": "1.0.2",
+ "version": "1.1.0",
"private": true,
"type": "module",
"scripts": {
diff --git a/examples/api/hono-rest/package.json b/examples/api/hono-rest/package.json
index 4b80f290..bbc15bf8 100644
--- a/examples/api/hono-rest/package.json
+++ b/examples/api/hono-rest/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-api-hono-rest-threejs",
- "version": "1.0.2",
+ "version": "1.1.0",
"private": true,
"type": "module",
"scripts": {
diff --git a/examples/api/hono-sdk/package.json b/examples/api/hono-sdk/package.json
index 5c3f993b..1ae67f29 100644
--- a/examples/api/hono-sdk/package.json
+++ b/examples/api/hono-sdk/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-api-hono-sdk-threejs",
- "version": "1.0.2",
+ "version": "1.1.0",
"private": true,
"type": "module",
"scripts": {
@@ -9,7 +9,7 @@
},
"dependencies": {
"hono": "^4.7.0",
- "@bitbybit-dev/cad-cloud-sdk": "1.0.2"
+ "@bitbybit-dev/cad-cloud-sdk": "1.1.0"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20250410.0",
diff --git a/examples/api/nodejs-rest/package.json b/examples/api/nodejs-rest/package.json
index 7e29266c..5361006b 100644
--- a/examples/api/nodejs-rest/package.json
+++ b/examples/api/nodejs-rest/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-api-nodejs-rest-threejs",
- "version": "1.0.2",
+ "version": "1.1.0",
"private": true,
"type": "module",
"scripts": {
diff --git a/examples/api/nodejs-sdk/package.json b/examples/api/nodejs-sdk/package.json
index 3ea64f8c..aeea1d82 100644
--- a/examples/api/nodejs-sdk/package.json
+++ b/examples/api/nodejs-sdk/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-api-nodejs-sdk-threejs",
- "version": "1.0.2",
+ "version": "1.1.0",
"private": true,
"type": "module",
"scripts": {
@@ -11,7 +11,7 @@
"dependencies": {
"express": "^5.1.0",
"multer": "^1.4.5-lts.2",
- "@bitbybit-dev/cad-cloud-sdk": "1.0.2"
+ "@bitbybit-dev/cad-cloud-sdk": "1.1.0"
},
"devDependencies": {
"@types/express": "^5.0.2",
diff --git a/examples/nextjs/babylonjs/simple/package-lock.json b/examples/nextjs/babylonjs/simple/package-lock.json
index 4be5906d..f3063f95 100644
--- a/examples/nextjs/babylonjs/simple/package-lock.json
+++ b/examples/nextjs/babylonjs/simple/package-lock.json
@@ -8,7 +8,7 @@
"name": "simple",
"version": "0.1.0",
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"next": "16.2.6",
"react": "19.2.6",
"react-dom": "19.2.6"
@@ -21,16 +21,16 @@
}
},
"node_modules/@babylonjs/core": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.8.0.tgz",
- "integrity": "sha512-A+McUA1/EYAV4uvLtfc5b5eCWJRS2WNzKScHqybwA0PfNsX8eoRAHzNs/iOzS7OxALjZE0J05bssixQVqXm4qQ==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.11.0.tgz",
+ "integrity": "sha512-MQH6Lop6Dn06n3gW8/CADb3FrO3jVudYHYZVu2TPNH0hXyJGAVPtVRpudF12UHn5ZV0ByQ1gu71vfKj88rFDCg==",
"license": "Apache-2.0",
"peer": true
},
"node_modules/@babylonjs/gui": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.8.0.tgz",
- "integrity": "sha512-ByC5afXZ/evNzUb7o4NnfoNOXz1kLJxA8VciXCvwIVm4fnR8E8l7OFxqNTZI+utePCSn7VBXgFTGUtxJ3ofQMw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.11.0.tgz",
+ "integrity": "sha512-uY9BBKDZDmOsxa1xdasiV1/Uqn5BPvvqZ/sw5X+EIGSBamtJ7ve4gVhNXT897Ce2zDfx6qXub4gPRoGCaZj+Nw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
@@ -46,9 +46,9 @@
}
},
"node_modules/@babylonjs/loaders": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.8.0.tgz",
- "integrity": "sha512-jlqLw3LZn+gdJSkitl1iYHfDtKDt6DuCN6lMPMnIhhFmypbYE8FiHiNDIhzoEEWxqDl+W07GhrpUQm+qy8Lsjg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.11.0.tgz",
+ "integrity": "sha512-l+bVNG3zOG4FhBT0WVlZSb49WVyzoduACMop/RDKQjVsSfUg2lMeKnHlrGccp/bsRxlR1Y/pKD9GQTkXsQ7gmQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -56,18 +56,18 @@
}
},
"node_modules/@babylonjs/materials": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.8.0.tgz",
- "integrity": "sha512-BqAUtI5QwoN1a/UdcEy1p83rL1vG30uPDnPDRkqtclFl4tWS6O2SEYb770/v2ekgDv4v0BwQvCIgfl2QjRijfw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.11.0.tgz",
+ "integrity": "sha512-0g8+oiqFpWJU+BW4z15qpohvYruACRtfHCrec1OnqhR09uOI9QEwkdbR2ep91/7j9Qt15/WxU2tqECrsXzKAkw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
}
},
"node_modules/@babylonjs/serializers": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.8.0.tgz",
- "integrity": "sha512-UeoH9x/PcCCxpy88GnOvQwMdhJBzeEPf5Gvb1dhrJNjeDJ0h81tp5Dt2LfpgP5klunObqn9cgO4HFJ0WX8vzgg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.11.0.tgz",
+ "integrity": "sha512-ZEcW65XXn3W2Ir6GBuHpGRspF+QM4F9gusK5RP0sYUElVzCBBTgb7ITQYDjwN+9pDjqudS9L3d5n5dZv8I7vuA==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -75,18 +75,18 @@
}
},
"node_modules/@bitbybit-dev/babylonjs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.0.2.tgz",
- "integrity": "sha512-5nPU7RiddwgjptsWJzI5hrHjqr+zSIC1Ff9iJo+5e51X55d5gFb47Qpxzao/7AcX7vjDVPd/5YWSQo7FeDIHhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.1.0.tgz",
+ "integrity": "sha512-8S9541qjE6d/AlCEkuhjY/3qMuSglpjUtQ2Iujdbm8NuOIkfkRwA+T3WNG6iHTB/ErUFNVfegaKd6t6kQTovtw==",
"license": "MIT",
"dependencies": {
- "@babylonjs/core": "9.8.0",
- "@babylonjs/gui": "9.8.0",
+ "@babylonjs/core": "9.11.0",
+ "@babylonjs/gui": "9.11.0",
"@babylonjs/havok": "1.3.12",
- "@babylonjs/loaders": "9.8.0",
- "@babylonjs/materials": "9.8.0",
- "@babylonjs/serializers": "9.8.0",
- "@bitbybit-dev/core": "1.0.2",
+ "@babylonjs/loaders": "9.11.0",
+ "@babylonjs/materials": "9.11.0",
+ "@babylonjs/serializers": "9.11.0",
+ "@bitbybit-dev/core": "1.1.0",
"earcut": "3.0.2"
},
"funding": {
@@ -95,9 +95,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -105,15 +105,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -124,12 +124,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -142,12 +142,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -156,12 +156,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -170,12 +170,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -184,12 +184,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -197,12 +197,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -221,39 +221,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -1019,9 +1019,9 @@
}
},
"node_modules/babylonjs-gltf2interface": {
- "version": "9.9.1",
- "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.9.1.tgz",
- "integrity": "sha512-qHE7pASEWbRORU+NEPSSL9fyVh6gBNqC1ugV94YL9Dz0HnLcH8YNcxdi6Pf+oXgFHRrXWZiJATn37HynsF7/0g==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.11.0.tgz",
+ "integrity": "sha512-IhDr08yK7K2EHvwICX1fMb2dK5K86XSqWsJQxwqMhUOmjA9AtCPWbfXLBYt2f3J6xSBsHHP+2MDnT7oozUeVZQ==",
"license": "Apache-2.0",
"peer": true
},
diff --git a/examples/nextjs/babylonjs/simple/package.json b/examples/nextjs/babylonjs/simple/package.json
index 0220c304..a9429368 100644
--- a/examples/nextjs/babylonjs/simple/package.json
+++ b/examples/nextjs/babylonjs/simple/package.json
@@ -9,7 +9,7 @@
"lint": "next lint"
},
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"next": "16.2.6",
"react": "19.2.6",
"react-dom": "19.2.6"
diff --git a/examples/node/basic/index.ts b/examples/node/basic/index.ts
index 7390c35d..dcf20557 100644
--- a/examples/node/basic/index.ts
+++ b/examples/node/basic/index.ts
@@ -11,7 +11,7 @@ async function run() {
console.log("initializing...");
// For Node.js, we need to specify the path to the WASM file
- const wasmPath = require.resolve("@bitbybit-dev/occt/bitbybit-dev-occt/bitbybit-dev-occt.38836de9.wasm");
+ const wasmPath = require.resolve("@bitbybit-dev/occt/bitbybit-dev-occt/bitbybit-dev-occt.3bc993bf.wasm");
const occ = await initOpenCascade({
locateFile: (path: string) => {
diff --git a/examples/node/basic/package-lock.json b/examples/node/basic/package-lock.json
index 26208469..7fdf94f3 100644
--- a/examples/node/basic/package-lock.json
+++ b/examples/node/basic/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "basic",
- "version": "1.0.2",
+ "version": "1.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "basic",
- "version": "1.0.2",
+ "version": "1.1.0",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2"
+ "@bitbybit-dev/occt": "1.1.0"
},
"devDependencies": {
"concurrently": "^7.6.0",
@@ -34,9 +34,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -44,12 +44,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
diff --git a/examples/node/basic/package.json b/examples/node/basic/package.json
index 76e9565b..8eace5dd 100644
--- a/examples/node/basic/package.json
+++ b/examples/node/basic/package.json
@@ -1,6 +1,6 @@
{
"name": "basic",
- "version": "1.0.2",
+ "version": "1.1.0",
"description": "Example of how to use @bitbybit-dev/occt within node",
"main": "index.js",
"scripts": {
@@ -15,7 +15,7 @@
"node": ">=20.19.4"
},
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2"
+ "@bitbybit-dev/occt": "1.1.0"
},
"devDependencies": {
"extensionless": "1.9.9",
diff --git a/examples/node/express-app/bitbybit.ts b/examples/node/express-app/bitbybit.ts
index 5384f70d..acf74403 100644
--- a/examples/node/express-app/bitbybit.ts
+++ b/examples/node/express-app/bitbybit.ts
@@ -64,7 +64,7 @@ export class BitByBitBase {
async init() {
// Initialize OCCT (OpenCascade) with locateFile for Node.js WASM loading
- const wasmPath = require.resolve("@bitbybit-dev/occt/bitbybit-dev-occt/bitbybit-dev-occt.38836de9.wasm");
+ const wasmPath = require.resolve("@bitbybit-dev/occt/bitbybit-dev-occt/bitbybit-dev-occt.3bc993bf.wasm");
const occ = await (initOpenCascade as (options?: { locateFile?: (path: string) => string }) => Promise)({
locateFile: (path: string) => {
if (path.endsWith(".wasm")) {
diff --git a/examples/node/express-app/package-lock.json b/examples/node/express-app/package-lock.json
index 668e2fed..5d77a003 100644
--- a/examples/node/express-app/package-lock.json
+++ b/examples/node/express-app/package-lock.json
@@ -1,19 +1,19 @@
{
"name": "bitbybit-node-express",
- "version": "1.0.2",
+ "version": "1.1.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "bitbybit-node-express",
- "version": "1.0.2",
+ "version": "1.1.0",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/core": "1.0.2",
- "@bitbybit-dev/jscad": "1.0.2",
- "@bitbybit-dev/manifold": "1.0.2",
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/core": "1.1.0",
+ "@bitbybit-dev/jscad": "1.1.0",
+ "@bitbybit-dev/manifold": "1.1.0",
+ "@bitbybit-dev/occt": "1.1.0",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"jsonpath-plus": "^10.3.0",
@@ -31,9 +31,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -41,15 +41,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -60,12 +60,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -78,12 +78,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -92,12 +92,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -106,12 +106,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -120,12 +120,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -133,12 +133,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -2469,30 +2469,30 @@
},
"dependencies": {
"@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw=="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ=="
},
"@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"requires": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
}
},
"@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"requires": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -2501,46 +2501,46 @@
}
},
"@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"requires": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
}
},
"@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"requires": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
}
},
"@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"requires": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
}
},
"@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"requires": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
}
},
"@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"requires": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
}
},
diff --git a/examples/node/express-app/package.json b/examples/node/express-app/package.json
index be210cd4..10d47b39 100644
--- a/examples/node/express-app/package.json
+++ b/examples/node/express-app/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-node-express",
- "version": "1.0.2",
+ "version": "1.1.0",
"description": "Example of how to use @bitbybit-dev/core libraries within express app",
"main": "index.ts",
"scripts": {
@@ -12,11 +12,11 @@
"author": "Bit By Bit Developers",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/core": "1.0.2",
- "@bitbybit-dev/jscad": "1.0.2",
- "@bitbybit-dev/manifold": "1.0.2",
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/core": "1.1.0",
+ "@bitbybit-dev/jscad": "1.1.0",
+ "@bitbybit-dev/manifold": "1.1.0",
+ "@bitbybit-dev/occt": "1.1.0",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"jsonpath-plus": "^10.3.0",
diff --git a/examples/nuxt/babylonjs/basic/package-lock.json b/examples/nuxt/babylonjs/basic/package-lock.json
index e32e6b0d..9c3fa660 100644
--- a/examples/nuxt/babylonjs/basic/package-lock.json
+++ b/examples/nuxt/babylonjs/basic/package-lock.json
@@ -8,7 +8,7 @@
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"nuxt": "4.4.6",
"vue": "latest",
"vue-router": "latest"
@@ -414,16 +414,16 @@
}
},
"node_modules/@babylonjs/core": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.8.0.tgz",
- "integrity": "sha512-A+McUA1/EYAV4uvLtfc5b5eCWJRS2WNzKScHqybwA0PfNsX8eoRAHzNs/iOzS7OxALjZE0J05bssixQVqXm4qQ==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.11.0.tgz",
+ "integrity": "sha512-MQH6Lop6Dn06n3gW8/CADb3FrO3jVudYHYZVu2TPNH0hXyJGAVPtVRpudF12UHn5ZV0ByQ1gu71vfKj88rFDCg==",
"license": "Apache-2.0",
"peer": true
},
"node_modules/@babylonjs/gui": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.8.0.tgz",
- "integrity": "sha512-ByC5afXZ/evNzUb7o4NnfoNOXz1kLJxA8VciXCvwIVm4fnR8E8l7OFxqNTZI+utePCSn7VBXgFTGUtxJ3ofQMw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.11.0.tgz",
+ "integrity": "sha512-uY9BBKDZDmOsxa1xdasiV1/Uqn5BPvvqZ/sw5X+EIGSBamtJ7ve4gVhNXT897Ce2zDfx6qXub4gPRoGCaZj+Nw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
@@ -439,9 +439,9 @@
}
},
"node_modules/@babylonjs/loaders": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.8.0.tgz",
- "integrity": "sha512-jlqLw3LZn+gdJSkitl1iYHfDtKDt6DuCN6lMPMnIhhFmypbYE8FiHiNDIhzoEEWxqDl+W07GhrpUQm+qy8Lsjg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.11.0.tgz",
+ "integrity": "sha512-l+bVNG3zOG4FhBT0WVlZSb49WVyzoduACMop/RDKQjVsSfUg2lMeKnHlrGccp/bsRxlR1Y/pKD9GQTkXsQ7gmQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -449,18 +449,18 @@
}
},
"node_modules/@babylonjs/materials": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.8.0.tgz",
- "integrity": "sha512-BqAUtI5QwoN1a/UdcEy1p83rL1vG30uPDnPDRkqtclFl4tWS6O2SEYb770/v2ekgDv4v0BwQvCIgfl2QjRijfw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.11.0.tgz",
+ "integrity": "sha512-0g8+oiqFpWJU+BW4z15qpohvYruACRtfHCrec1OnqhR09uOI9QEwkdbR2ep91/7j9Qt15/WxU2tqECrsXzKAkw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
}
},
"node_modules/@babylonjs/serializers": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.8.0.tgz",
- "integrity": "sha512-UeoH9x/PcCCxpy88GnOvQwMdhJBzeEPf5Gvb1dhrJNjeDJ0h81tp5Dt2LfpgP5klunObqn9cgO4HFJ0WX8vzgg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.11.0.tgz",
+ "integrity": "sha512-ZEcW65XXn3W2Ir6GBuHpGRspF+QM4F9gusK5RP0sYUElVzCBBTgb7ITQYDjwN+9pDjqudS9L3d5n5dZv8I7vuA==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -468,18 +468,18 @@
}
},
"node_modules/@bitbybit-dev/babylonjs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.0.2.tgz",
- "integrity": "sha512-5nPU7RiddwgjptsWJzI5hrHjqr+zSIC1Ff9iJo+5e51X55d5gFb47Qpxzao/7AcX7vjDVPd/5YWSQo7FeDIHhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.1.0.tgz",
+ "integrity": "sha512-8S9541qjE6d/AlCEkuhjY/3qMuSglpjUtQ2Iujdbm8NuOIkfkRwA+T3WNG6iHTB/ErUFNVfegaKd6t6kQTovtw==",
"license": "MIT",
"dependencies": {
- "@babylonjs/core": "9.8.0",
- "@babylonjs/gui": "9.8.0",
+ "@babylonjs/core": "9.11.0",
+ "@babylonjs/gui": "9.11.0",
"@babylonjs/havok": "1.3.12",
- "@babylonjs/loaders": "9.8.0",
- "@babylonjs/materials": "9.8.0",
- "@babylonjs/serializers": "9.8.0",
- "@bitbybit-dev/core": "1.0.2",
+ "@babylonjs/loaders": "9.11.0",
+ "@babylonjs/materials": "9.11.0",
+ "@babylonjs/serializers": "9.11.0",
+ "@bitbybit-dev/core": "1.1.0",
"earcut": "3.0.2"
},
"funding": {
@@ -488,9 +488,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -498,15 +498,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -517,12 +517,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -535,12 +535,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -549,12 +549,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -563,12 +563,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -577,12 +577,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -590,12 +590,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -699,9 +699,9 @@
"license": "MIT"
},
"node_modules/@emnapi/wasi-threads": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
- "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -1125,39 +1125,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -2540,6 +2540,37 @@
"node": "^20.19.0 || >=22.12.0"
}
},
+ "node_modules/@oxc-minify/binding-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@oxc-minify/binding-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@oxc-minify/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@oxc-minify/binding-win32-arm64-msvc": {
"version": "0.131.0",
"resolved": "https://registry.npmjs.org/@oxc-minify/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.131.0.tgz",
@@ -2862,6 +2893,37 @@
"node": "^20.19.0 || >=22.12.0"
}
},
+ "node_modules/@oxc-parser/binding-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@oxc-parser/binding-win32-arm64-msvc": {
"version": "0.131.0",
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.131.0.tgz",
@@ -3193,6 +3255,37 @@
"node": "^20.19.0 || >=22.12.0"
}
},
+ "node_modules/@oxc-transform/binding-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@oxc-transform/binding-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@oxc-transform/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@oxc-transform/binding-win32-arm64-msvc": {
"version": "0.131.0",
"resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.131.0.tgz",
@@ -4830,9 +4923,9 @@
}
},
"node_modules/babylonjs-gltf2interface": {
- "version": "9.9.1",
- "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.9.1.tgz",
- "integrity": "sha512-qHE7pASEWbRORU+NEPSSL9fyVh6gBNqC1ugV94YL9Dz0HnLcH8YNcxdi6Pf+oXgFHRrXWZiJATn37HynsF7/0g==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.11.0.tgz",
+ "integrity": "sha512-IhDr08yK7K2EHvwICX1fMb2dK5K86XSqWsJQxwqMhUOmjA9AtCPWbfXLBYt2f3J6xSBsHHP+2MDnT7oozUeVZQ==",
"license": "Apache-2.0",
"peer": true
},
diff --git a/examples/nuxt/babylonjs/basic/package.json b/examples/nuxt/babylonjs/basic/package.json
index dd7c9298..8e301acf 100644
--- a/examples/nuxt/babylonjs/basic/package.json
+++ b/examples/nuxt/babylonjs/basic/package.json
@@ -11,7 +11,7 @@
"postinstall": "nuxt prepare"
},
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"nuxt": "4.4.6",
"vue": "latest",
"vue-router": "latest"
diff --git a/examples/package-lock.json b/examples/package-lock.json
index fbe248ce..99f3ccdc 100644
--- a/examples/package-lock.json
+++ b/examples/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bitbybit-examples",
- "version": "1.0.2",
+ "version": "1.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bitbybit-examples",
- "version": "1.0.2",
+ "version": "1.1.0",
"license": "MIT",
"devDependencies": {
"shx": "^0.4.0",
diff --git a/examples/package.json b/examples/package.json
index f055ee83..e8879d52 100644
--- a/examples/package.json
+++ b/examples/package.json
@@ -1,6 +1,6 @@
{
"name": "bitbybit-examples",
- "version": "1.0.2",
+ "version": "1.1.0",
"description": "Monorepo for browser CAD which holds bitbybit.dev npm packages",
"main": "index.js",
"scripts": {
diff --git a/examples/react/babylonjs/cup/package-lock.json b/examples/react/babylonjs/cup/package-lock.json
index eada9d7f..6c6a22b4 100644
--- a/examples/react/babylonjs/cup/package-lock.json
+++ b/examples/react/babylonjs/cup/package-lock.json
@@ -8,7 +8,7 @@
"name": "cup",
"version": "0.1.0",
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"@emotion/react": "11.9.0",
"@emotion/styled": "11.8.1",
"@mui/icons-material": "5.6.2",
@@ -1812,16 +1812,16 @@
}
},
"node_modules/@babylonjs/core": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.8.0.tgz",
- "integrity": "sha512-A+McUA1/EYAV4uvLtfc5b5eCWJRS2WNzKScHqybwA0PfNsX8eoRAHzNs/iOzS7OxALjZE0J05bssixQVqXm4qQ==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.11.0.tgz",
+ "integrity": "sha512-MQH6Lop6Dn06n3gW8/CADb3FrO3jVudYHYZVu2TPNH0hXyJGAVPtVRpudF12UHn5ZV0ByQ1gu71vfKj88rFDCg==",
"license": "Apache-2.0",
"peer": true
},
"node_modules/@babylonjs/gui": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.8.0.tgz",
- "integrity": "sha512-ByC5afXZ/evNzUb7o4NnfoNOXz1kLJxA8VciXCvwIVm4fnR8E8l7OFxqNTZI+utePCSn7VBXgFTGUtxJ3ofQMw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.11.0.tgz",
+ "integrity": "sha512-uY9BBKDZDmOsxa1xdasiV1/Uqn5BPvvqZ/sw5X+EIGSBamtJ7ve4gVhNXT897Ce2zDfx6qXub4gPRoGCaZj+Nw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
@@ -1837,9 +1837,9 @@
}
},
"node_modules/@babylonjs/loaders": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.8.0.tgz",
- "integrity": "sha512-jlqLw3LZn+gdJSkitl1iYHfDtKDt6DuCN6lMPMnIhhFmypbYE8FiHiNDIhzoEEWxqDl+W07GhrpUQm+qy8Lsjg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.11.0.tgz",
+ "integrity": "sha512-l+bVNG3zOG4FhBT0WVlZSb49WVyzoduACMop/RDKQjVsSfUg2lMeKnHlrGccp/bsRxlR1Y/pKD9GQTkXsQ7gmQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -1847,18 +1847,18 @@
}
},
"node_modules/@babylonjs/materials": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.8.0.tgz",
- "integrity": "sha512-BqAUtI5QwoN1a/UdcEy1p83rL1vG30uPDnPDRkqtclFl4tWS6O2SEYb770/v2ekgDv4v0BwQvCIgfl2QjRijfw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.11.0.tgz",
+ "integrity": "sha512-0g8+oiqFpWJU+BW4z15qpohvYruACRtfHCrec1OnqhR09uOI9QEwkdbR2ep91/7j9Qt15/WxU2tqECrsXzKAkw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
}
},
"node_modules/@babylonjs/serializers": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.8.0.tgz",
- "integrity": "sha512-UeoH9x/PcCCxpy88GnOvQwMdhJBzeEPf5Gvb1dhrJNjeDJ0h81tp5Dt2LfpgP5klunObqn9cgO4HFJ0WX8vzgg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.11.0.tgz",
+ "integrity": "sha512-ZEcW65XXn3W2Ir6GBuHpGRspF+QM4F9gusK5RP0sYUElVzCBBTgb7ITQYDjwN+9pDjqudS9L3d5n5dZv8I7vuA==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -1871,18 +1871,18 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
"node_modules/@bitbybit-dev/babylonjs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.0.2.tgz",
- "integrity": "sha512-5nPU7RiddwgjptsWJzI5hrHjqr+zSIC1Ff9iJo+5e51X55d5gFb47Qpxzao/7AcX7vjDVPd/5YWSQo7FeDIHhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.1.0.tgz",
+ "integrity": "sha512-8S9541qjE6d/AlCEkuhjY/3qMuSglpjUtQ2Iujdbm8NuOIkfkRwA+T3WNG6iHTB/ErUFNVfegaKd6t6kQTovtw==",
"license": "MIT",
"dependencies": {
- "@babylonjs/core": "9.8.0",
- "@babylonjs/gui": "9.8.0",
+ "@babylonjs/core": "9.11.0",
+ "@babylonjs/gui": "9.11.0",
"@babylonjs/havok": "1.3.12",
- "@babylonjs/loaders": "9.8.0",
- "@babylonjs/materials": "9.8.0",
- "@babylonjs/serializers": "9.8.0",
- "@bitbybit-dev/core": "1.0.2",
+ "@babylonjs/loaders": "9.11.0",
+ "@babylonjs/materials": "9.11.0",
+ "@babylonjs/serializers": "9.11.0",
+ "@bitbybit-dev/core": "1.1.0",
"earcut": "3.0.2"
},
"funding": {
@@ -1891,9 +1891,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -1901,15 +1901,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -1920,12 +1920,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -1938,12 +1938,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -1952,12 +1952,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -1966,12 +1966,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -1980,12 +1980,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -1993,12 +1993,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -2278,9 +2278,9 @@
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz",
+ "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -2493,39 +2493,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -6274,9 +6274,9 @@
}
},
"node_modules/babylonjs-gltf2interface": {
- "version": "9.9.1",
- "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.9.1.tgz",
- "integrity": "sha512-qHE7pASEWbRORU+NEPSSL9fyVh6gBNqC1ugV94YL9Dz0HnLcH8YNcxdi6Pf+oXgFHRrXWZiJATn37HynsF7/0g==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.11.0.tgz",
+ "integrity": "sha512-IhDr08yK7K2EHvwICX1fMb2dK5K86XSqWsJQxwqMhUOmjA9AtCPWbfXLBYt2f3J6xSBsHHP+2MDnT7oozUeVZQ==",
"license": "Apache-2.0",
"peer": true
},
@@ -16536,9 +16536,9 @@
}
},
"node_modules/sharp/node_modules/semver": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
- "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -19893,15 +19893,15 @@
}
},
"@babylonjs/core": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.8.0.tgz",
- "integrity": "sha512-A+McUA1/EYAV4uvLtfc5b5eCWJRS2WNzKScHqybwA0PfNsX8eoRAHzNs/iOzS7OxALjZE0J05bssixQVqXm4qQ==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.11.0.tgz",
+ "integrity": "sha512-MQH6Lop6Dn06n3gW8/CADb3FrO3jVudYHYZVu2TPNH0hXyJGAVPtVRpudF12UHn5ZV0ByQ1gu71vfKj88rFDCg==",
"peer": true
},
"@babylonjs/gui": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.8.0.tgz",
- "integrity": "sha512-ByC5afXZ/evNzUb7o4NnfoNOXz1kLJxA8VciXCvwIVm4fnR8E8l7OFxqNTZI+utePCSn7VBXgFTGUtxJ3ofQMw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.11.0.tgz",
+ "integrity": "sha512-uY9BBKDZDmOsxa1xdasiV1/Uqn5BPvvqZ/sw5X+EIGSBamtJ7ve4gVhNXT897Ce2zDfx6qXub4gPRoGCaZj+Nw==",
"requires": {}
},
"@babylonjs/havok": {
@@ -19913,21 +19913,21 @@
}
},
"@babylonjs/loaders": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.8.0.tgz",
- "integrity": "sha512-jlqLw3LZn+gdJSkitl1iYHfDtKDt6DuCN6lMPMnIhhFmypbYE8FiHiNDIhzoEEWxqDl+W07GhrpUQm+qy8Lsjg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.11.0.tgz",
+ "integrity": "sha512-l+bVNG3zOG4FhBT0WVlZSb49WVyzoduACMop/RDKQjVsSfUg2lMeKnHlrGccp/bsRxlR1Y/pKD9GQTkXsQ7gmQ==",
"requires": {}
},
"@babylonjs/materials": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.8.0.tgz",
- "integrity": "sha512-BqAUtI5QwoN1a/UdcEy1p83rL1vG30uPDnPDRkqtclFl4tWS6O2SEYb770/v2ekgDv4v0BwQvCIgfl2QjRijfw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.11.0.tgz",
+ "integrity": "sha512-0g8+oiqFpWJU+BW4z15qpohvYruACRtfHCrec1OnqhR09uOI9QEwkdbR2ep91/7j9Qt15/WxU2tqECrsXzKAkw==",
"requires": {}
},
"@babylonjs/serializers": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.8.0.tgz",
- "integrity": "sha512-UeoH9x/PcCCxpy88GnOvQwMdhJBzeEPf5Gvb1dhrJNjeDJ0h81tp5Dt2LfpgP5klunObqn9cgO4HFJ0WX8vzgg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.11.0.tgz",
+ "integrity": "sha512-ZEcW65XXn3W2Ir6GBuHpGRspF+QM4F9gusK5RP0sYUElVzCBBTgb7ITQYDjwN+9pDjqudS9L3d5n5dZv8I7vuA==",
"requires": {}
},
"@bcoe/v8-coverage": {
@@ -19936,45 +19936,45 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
"@bitbybit-dev/babylonjs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.0.2.tgz",
- "integrity": "sha512-5nPU7RiddwgjptsWJzI5hrHjqr+zSIC1Ff9iJo+5e51X55d5gFb47Qpxzao/7AcX7vjDVPd/5YWSQo7FeDIHhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.1.0.tgz",
+ "integrity": "sha512-8S9541qjE6d/AlCEkuhjY/3qMuSglpjUtQ2Iujdbm8NuOIkfkRwA+T3WNG6iHTB/ErUFNVfegaKd6t6kQTovtw==",
"requires": {
- "@babylonjs/core": "9.8.0",
- "@babylonjs/gui": "9.8.0",
+ "@babylonjs/core": "9.11.0",
+ "@babylonjs/gui": "9.11.0",
"@babylonjs/havok": "1.3.12",
- "@babylonjs/loaders": "9.8.0",
- "@babylonjs/materials": "9.8.0",
- "@babylonjs/serializers": "9.8.0",
- "@bitbybit-dev/core": "1.0.2",
+ "@babylonjs/loaders": "9.11.0",
+ "@babylonjs/materials": "9.11.0",
+ "@babylonjs/serializers": "9.11.0",
+ "@bitbybit-dev/core": "1.1.0",
"earcut": "3.0.2"
}
},
"@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw=="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ=="
},
"@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"requires": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
}
},
"@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"requires": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -19983,46 +19983,46 @@
}
},
"@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"requires": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
}
},
"@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"requires": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
}
},
"@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"requires": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
}
},
"@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"requires": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
}
},
"@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"requires": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
}
},
@@ -20153,9 +20153,9 @@
"requires": {}
},
"@emnapi/runtime": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz",
+ "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==",
"optional": true,
"requires": {
"tslib": "^2.4.0"
@@ -20322,30 +20322,30 @@
}
},
"@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"requires": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
}
},
"@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"requires": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
}
},
"@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"requires": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -22889,9 +22889,9 @@
}
},
"babylonjs-gltf2interface": {
- "version": "9.9.1",
- "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.9.1.tgz",
- "integrity": "sha512-qHE7pASEWbRORU+NEPSSL9fyVh6gBNqC1ugV94YL9Dz0HnLcH8YNcxdi6Pf+oXgFHRrXWZiJATn37HynsF7/0g==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.11.0.tgz",
+ "integrity": "sha512-IhDr08yK7K2EHvwICX1fMb2dK5K86XSqWsJQxwqMhUOmjA9AtCPWbfXLBYt2f3J6xSBsHHP+2MDnT7oozUeVZQ==",
"peer": true
},
"balanced-match": {
@@ -30160,9 +30160,9 @@
},
"dependencies": {
"semver": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
- "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="
}
}
},
diff --git a/examples/react/babylonjs/cup/package.json b/examples/react/babylonjs/cup/package.json
index e09f171e..c44078bb 100644
--- a/examples/react/babylonjs/cup/package.json
+++ b/examples/react/babylonjs/cup/package.json
@@ -4,7 +4,7 @@
"private": true,
"homepage": "https://app-store.bitbybit.dev/cup",
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"@emotion/react": "11.9.0",
"@emotion/styled": "11.8.1",
"web-ifc": "0.0.68",
diff --git a/examples/react/babylonjs/laptop-holder/package-lock.json b/examples/react/babylonjs/laptop-holder/package-lock.json
index be4fc4a7..93d6a581 100644
--- a/examples/react/babylonjs/laptop-holder/package-lock.json
+++ b/examples/react/babylonjs/laptop-holder/package-lock.json
@@ -8,7 +8,7 @@
"name": "laptop-holder",
"version": "0.1.0",
"dependencies": {
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@mui/icons-material": "^7.1.0",
@@ -314,16 +314,16 @@
}
},
"node_modules/@babylonjs/core": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.8.0.tgz",
- "integrity": "sha512-A+McUA1/EYAV4uvLtfc5b5eCWJRS2WNzKScHqybwA0PfNsX8eoRAHzNs/iOzS7OxALjZE0J05bssixQVqXm4qQ==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-9.11.0.tgz",
+ "integrity": "sha512-MQH6Lop6Dn06n3gW8/CADb3FrO3jVudYHYZVu2TPNH0hXyJGAVPtVRpudF12UHn5ZV0ByQ1gu71vfKj88rFDCg==",
"license": "Apache-2.0",
"peer": true
},
"node_modules/@babylonjs/gui": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.8.0.tgz",
- "integrity": "sha512-ByC5afXZ/evNzUb7o4NnfoNOXz1kLJxA8VciXCvwIVm4fnR8E8l7OFxqNTZI+utePCSn7VBXgFTGUtxJ3ofQMw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-9.11.0.tgz",
+ "integrity": "sha512-uY9BBKDZDmOsxa1xdasiV1/Uqn5BPvvqZ/sw5X+EIGSBamtJ7ve4gVhNXT897Ce2zDfx6qXub4gPRoGCaZj+Nw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
@@ -339,9 +339,9 @@
}
},
"node_modules/@babylonjs/loaders": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.8.0.tgz",
- "integrity": "sha512-jlqLw3LZn+gdJSkitl1iYHfDtKDt6DuCN6lMPMnIhhFmypbYE8FiHiNDIhzoEEWxqDl+W07GhrpUQm+qy8Lsjg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-9.11.0.tgz",
+ "integrity": "sha512-l+bVNG3zOG4FhBT0WVlZSb49WVyzoduACMop/RDKQjVsSfUg2lMeKnHlrGccp/bsRxlR1Y/pKD9GQTkXsQ7gmQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -349,18 +349,18 @@
}
},
"node_modules/@babylonjs/materials": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.8.0.tgz",
- "integrity": "sha512-BqAUtI5QwoN1a/UdcEy1p83rL1vG30uPDnPDRkqtclFl4tWS6O2SEYb770/v2ekgDv4v0BwQvCIgfl2QjRijfw==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-9.11.0.tgz",
+ "integrity": "sha512-0g8+oiqFpWJU+BW4z15qpohvYruACRtfHCrec1OnqhR09uOI9QEwkdbR2ep91/7j9Qt15/WxU2tqECrsXzKAkw==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0"
}
},
"node_modules/@babylonjs/serializers": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.8.0.tgz",
- "integrity": "sha512-UeoH9x/PcCCxpy88GnOvQwMdhJBzeEPf5Gvb1dhrJNjeDJ0h81tp5Dt2LfpgP5klunObqn9cgO4HFJ0WX8vzgg==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-9.11.0.tgz",
+ "integrity": "sha512-ZEcW65XXn3W2Ir6GBuHpGRspF+QM4F9gusK5RP0sYUElVzCBBTgb7ITQYDjwN+9pDjqudS9L3d5n5dZv8I7vuA==",
"license": "Apache-2.0",
"peerDependencies": {
"@babylonjs/core": "^9.0.0",
@@ -368,18 +368,18 @@
}
},
"node_modules/@bitbybit-dev/babylonjs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.0.2.tgz",
- "integrity": "sha512-5nPU7RiddwgjptsWJzI5hrHjqr+zSIC1Ff9iJo+5e51X55d5gFb47Qpxzao/7AcX7vjDVPd/5YWSQo7FeDIHhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-1.1.0.tgz",
+ "integrity": "sha512-8S9541qjE6d/AlCEkuhjY/3qMuSglpjUtQ2Iujdbm8NuOIkfkRwA+T3WNG6iHTB/ErUFNVfegaKd6t6kQTovtw==",
"license": "MIT",
"dependencies": {
- "@babylonjs/core": "9.8.0",
- "@babylonjs/gui": "9.8.0",
+ "@babylonjs/core": "9.11.0",
+ "@babylonjs/gui": "9.11.0",
"@babylonjs/havok": "1.3.12",
- "@babylonjs/loaders": "9.8.0",
- "@babylonjs/materials": "9.8.0",
- "@babylonjs/serializers": "9.8.0",
- "@bitbybit-dev/core": "1.0.2",
+ "@babylonjs/loaders": "9.11.0",
+ "@babylonjs/materials": "9.11.0",
+ "@babylonjs/serializers": "9.11.0",
+ "@bitbybit-dev/core": "1.1.0",
"earcut": "3.0.2"
},
"funding": {
@@ -388,9 +388,9 @@
}
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -398,15 +398,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -417,12 +417,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -435,12 +435,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -449,12 +449,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -463,12 +463,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -477,12 +477,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -490,12 +490,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -504,9 +504,9 @@
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz",
+ "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -1104,39 +1104,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -2479,9 +2479,9 @@
}
},
"node_modules/babylonjs-gltf2interface": {
- "version": "9.9.1",
- "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.9.1.tgz",
- "integrity": "sha512-qHE7pASEWbRORU+NEPSSL9fyVh6gBNqC1ugV94YL9Dz0HnLcH8YNcxdi6Pf+oXgFHRrXWZiJATn37HynsF7/0g==",
+ "version": "9.11.0",
+ "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-9.11.0.tgz",
+ "integrity": "sha512-IhDr08yK7K2EHvwICX1fMb2dK5K86XSqWsJQxwqMhUOmjA9AtCPWbfXLBYt2f3J6xSBsHHP+2MDnT7oozUeVZQ==",
"license": "Apache-2.0",
"peer": true
},
@@ -3506,9 +3506,9 @@
}
},
"node_modules/sharp/node_modules/semver": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
- "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
diff --git a/examples/react/babylonjs/laptop-holder/package.json b/examples/react/babylonjs/laptop-holder/package.json
index 5b65c6e6..5eb0e492 100644
--- a/examples/react/babylonjs/laptop-holder/package.json
+++ b/examples/react/babylonjs/laptop-holder/package.json
@@ -7,7 +7,7 @@
"dependencies": {
"react": "19.2.6",
"react-dom": "19.2.6",
- "@bitbybit-dev/babylonjs": "1.0.2",
+ "@bitbybit-dev/babylonjs": "1.1.0",
"@mui/icons-material": "^7.1.0",
"@mui/material": "^7.1.0",
"@emotion/react": "^11.14.0",
diff --git a/examples/react/threejs/vase/package-lock.json b/examples/react/threejs/vase/package-lock.json
index 7fc86426..dd7e56f7 100644
--- a/examples/react/threejs/vase/package-lock.json
+++ b/examples/react/threejs/vase/package-lock.json
@@ -9,7 +9,7 @@
"version": "0.1.0",
"dependencies": {
"@babel/plugin-proposal-private-property-in-object": "7.21.11",
- "@bitbybit-dev/threejs": "1.0.2",
+ "@bitbybit-dev/threejs": "1.1.0",
"@emotion/react": "11.11.0",
"@emotion/styled": "11.11.0",
"@mui/icons-material": "5.11.16",
@@ -1998,9 +1998,9 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
"node_modules/@bitbybit-dev/base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.0.2.tgz",
- "integrity": "sha512-PlcEiIc/DjAwlZYwee+Bzlk7d9JldIsUu7OmyR0G3Ntrgt2fR7KrYkvYu9Lm21hB/G0+p+vlIXXGAEy68dYAbw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-1.1.0.tgz",
+ "integrity": "sha512-V/vsG5fm7r7yFavbcf2WjGBlvAI0Bpt+iII5OR441SzTwpn4/e3owArux1pKyLw3XpteGjbd8LRPIJAahGzxaQ==",
"license": "MIT",
"funding": {
"type": "corporate",
@@ -2008,15 +2008,15 @@
}
},
"node_modules/@bitbybit-dev/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Pr9YO8rFuWn+UhsbS01pc9eygafYkNa+qePGeaHXhz2eRmdNYpzx3mnlU2Xtup2w4W/muwUpjvSCvUOcKS9zNA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-f30PxigDEs8H2FNTtTFzJzu9mfYW876IsATwR+t/b4V0VC1vi5/EL7hjrV6K19byo7ZZ+TNOeyVjzhszj90dFw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
- "@bitbybit-dev/jscad-worker": "1.0.2",
- "@bitbybit-dev/manifold-worker": "1.0.2",
- "@bitbybit-dev/occt-worker": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
+ "@bitbybit-dev/jscad-worker": "1.1.0",
+ "@bitbybit-dev/manifold-worker": "1.1.0",
+ "@bitbybit-dev/occt-worker": "1.1.0",
"jsonpath-plus": "10.3.0",
"rxjs": "7.8.2",
"verb-nurbs-web": "2.1.3"
@@ -2027,12 +2027,12 @@
}
},
"node_modules/@bitbybit-dev/jscad": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.0.2.tgz",
- "integrity": "sha512-pM8x31sWYQVzD1n6xIOr2DAeT+tVEKOs6hUcIxGv6uDjkLgSwQkVPUThh1Vcehc+MBwEDJ/PSRA57suC7kCJSA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-1.1.0.tgz",
+ "integrity": "sha512-ZJ54zAg4hLCqtdL7zfkkAesncBRxO4NZM4ZwMsknpkDbeOFPcL1fMmhJ6Fe31M3YCywJwMEFs7f2swd+Dw08tw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"@jscad/3mf-serializer": "2.1.12",
"@jscad/dxf-serializer": "2.1.18",
"@jscad/io-utils": "2.0.28",
@@ -2045,12 +2045,12 @@
}
},
"node_modules/@bitbybit-dev/jscad-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.0.2.tgz",
- "integrity": "sha512-EFQ7af0QTqm8XJoCRhgTm6gJXbABt3e1jxeJ5+rTnRTiqYtJkK7LVkXSMZmukc9cGups6ASpLQAn49BU32Nb9Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-1.1.0.tgz",
+ "integrity": "sha512-fw5pjsiSvBWduENF9dGeW+zQwF7CSKOEKw3Q+2/5nsxxAwFEyOONZWAUN3b2cMmeVXhVNkg6OImLyfnpcsQXuw==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/jscad": "1.0.2",
+ "@bitbybit-dev/jscad": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -2059,12 +2059,12 @@
}
},
"node_modules/@bitbybit-dev/manifold": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.0.2.tgz",
- "integrity": "sha512-sS0zYx++rva603gyGWyswyGS2dkhsGDh8k8IDnmREe1eaQ62UgmKTsIjtJ4a8JhPZnZeyNvyOd4FUVm1tcUlhg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-1.1.0.tgz",
+ "integrity": "sha512-Aol1A9kJUGE5dsAWtRlHVWnTzRkz5VO2DEWV1h3TsL4FEdNtzGqUBztehkh5NiQtWShjZpr6/hc4x/FfRyaKmQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2",
+ "@bitbybit-dev/base": "1.1.0",
"manifold-3d": "3.3.2"
},
"funding": {
@@ -2073,12 +2073,12 @@
}
},
"node_modules/@bitbybit-dev/manifold-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.0.2.tgz",
- "integrity": "sha512-Wwb3VAwc+5QOrxKRkZ9L4nkdNZBAhrCHxlN3E1Osin7c3c6idRbYnSNFix9UXDMWPmNXRmpyUprpOy7R4YoZuA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-1.1.0.tgz",
+ "integrity": "sha512-lrH7gCLFh4Bs9k9pVLuL7vboPttTVCwmaacqC1LDACgHwlPS385NmmsPcTNUCDlDuA/8wONfcQTcSUcG4Rmr2g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/manifold": "1.0.2",
+ "@bitbybit-dev/manifold": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -2087,12 +2087,12 @@
}
},
"node_modules/@bitbybit-dev/occt": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.0.2.tgz",
- "integrity": "sha512-KW4CE43A9KylbjfSPOnicO1+/JYmJKPtDKgYCPNIMHFldrRI+C44CCZ08FXWF2pMAfnQiB195mfcIr6CXkdcHw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-1.1.0.tgz",
+ "integrity": "sha512-4QNEPCbmv0TbfF4YKtVM84ojUKP8y+36npCt7iL71Wr1LOWhR1mUfyAfrKnukSW6oPqvTGVMPzOCl6SP3xYH+w==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/base": "1.0.2"
+ "@bitbybit-dev/base": "1.1.0"
},
"funding": {
"type": "corporate",
@@ -2100,12 +2100,12 @@
}
},
"node_modules/@bitbybit-dev/occt-worker": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.0.2.tgz",
- "integrity": "sha512-YECbqiBYG1g3h+P5+rFTFMNkq6BpZSWZgHNeLskUnXXNmnQWtvb3g2iIj3PrfmX5w3jrGb5xzVJ94jFo2qNgKA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-1.1.0.tgz",
+ "integrity": "sha512-DVdAJyMeoYccHBafEi8gHHOvZk+8DYtO7/iBsBphBhBMJlUN1YWl/hQkAmKNpGBEl+6Qvig4cBpkOcUtHNRelQ==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/occt": "1.0.2",
+ "@bitbybit-dev/occt": "1.1.0",
"rxjs": "7.8.2"
},
"funding": {
@@ -2114,12 +2114,12 @@
}
},
"node_modules/@bitbybit-dev/threejs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-1.0.2.tgz",
- "integrity": "sha512-uc/TTQYk73WgGKo07ij+GjjH4h94+vfaIzQCSjeXweF5DSwQJyXTaIfHO7lvyFuq4/RnO01Z1Aef9Iz+7C2W1A==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-1.1.0.tgz",
+ "integrity": "sha512-hivI46oNjHBVOsq7cpP7QJCE3YzAYkHBDZxUdUfL+556ihzOEoL7gJalSDrddKBpE2gVJLHuwnnnD3gvatOu6g==",
"license": "MIT",
"dependencies": {
- "@bitbybit-dev/core": "1.0.2",
+ "@bitbybit-dev/core": "1.1.0",
"three": "0.184.0"
},
"funding": {
@@ -2403,9 +2403,9 @@
"integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow=="
},
"node_modules/@emnapi/runtime": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz",
+ "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -2649,39 +2649,39 @@
}
},
"node_modules/@gltf-transform/core": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.3.0.tgz",
- "integrity": "sha512-ZeaQfszGJ9LYwELszu45CuDQCsE26lJNNe36FVmN8xclaT6WDdCj7fwGpQXo0/l/YgAVAHX+uO7YNBW75/SRYw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz",
+ "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==",
"license": "MIT",
"dependencies": {
- "property-graph": "^4.0.0"
+ "property-graph": "^4.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/extensions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.3.0.tgz",
- "integrity": "sha512-XDAjQPYVMHa/VDpSbfCBwI+/1muwRJCaXhUpLgnUzAjn0D//PgvIAcbNm1EwBl3LIWBSwjDUCn2LiMAjp+aXVw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz",
+ "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "ktx-parse": "^1.0.1"
+ "@gltf-transform/core": "^4.4.0",
+ "ktx-parse": "^1.1.0"
},
"funding": {
"url": "https://github.com/sponsors/donmccurdy"
}
},
"node_modules/@gltf-transform/functions": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.3.0.tgz",
- "integrity": "sha512-FZggHVgt3DHOezgESBrf2vDzuD2FYQYaNT2sT/aP316SIwhuiIwby3z7rhV9joDvWqqUaPkf1UmkjlOaY9riSQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz",
+ "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==",
"license": "MIT",
"dependencies": {
- "@gltf-transform/core": "^4.3.0",
- "@gltf-transform/extensions": "^4.3.0",
- "ktx-parse": "^1.0.1",
+ "@gltf-transform/core": "^4.4.0",
+ "@gltf-transform/extensions": "^4.4.0",
+ "ktx-parse": "^1.1.0",
"ndarray": "^1.0.19",
"ndarray-lanczos": "^0.3.0",
"ndarray-pixels": "^5.0.1"
@@ -16828,9 +16828,9 @@
}
},
"node_modules/sharp/node_modules/semver": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
- "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
diff --git a/examples/react/threejs/vase/package.json b/examples/react/threejs/vase/package.json
index 4956290e..35f0c1f1 100644
--- a/examples/react/threejs/vase/package.json
+++ b/examples/react/threejs/vase/package.json
@@ -4,7 +4,7 @@
"private": true,
"homepage": "https://app-store.bitbybit.dev/bitbybit-threejs",
"dependencies": {
- "@bitbybit-dev/threejs": "1.0.2",
+ "@bitbybit-dev/threejs": "1.1.0",
"@testing-library/jest-dom": "5.16.5",
"@testing-library/react": "14.0.0",
"@testing-library/user-event": "14.4.3",
diff --git a/examples/runner/babylon/full/inline-include/index.html b/examples/runner/babylon/full/inline-include/index.html
index 4254f61b..d78ef781 100644
--- a/examples/runner/babylon/full/inline-include/index.html
+++ b/examples/runner/babylon/full/inline-include/index.html
@@ -34,7 +34,7 @@
// This function simply outputs the script that was exported from the Rete editor by clicking "Export to Runner" and selecting Minify option.
function exportedScript() {
- return '{\"type\":\"rete\",\"version\":\"1.0.2\",\"script\":\"!async function(e,t,s,n,r){let a={};a={x:[0],y:[0],z:[1],...a};const o=[{result:e.HS.executeBasedOnType(a,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let i={};i={text:[\\"[true,false]\\"],...i};const c=[{result:e.HS.executeBasedOnType(i,!1,(e=>t.json.parse(e))),transformers:[]}];let p={};p={text:[\\"[false,true]\\"],...p};const u=[{result:e.HS.executeBasedOnType(p,!1,(e=>t.json.parse(e))),transformers:[]}],l=[{result:[5],transformers:[]}];let d={};d={x:[1],y:[0],z:[0],...d};const m=[{result:e.HS.executeBasedOnType(d,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],y=[{result:[12],transformers:[]}],S=[{result:[7],transformers:[]}];let H={};H={x:[0],y:[1],z:[0],...H};const f=[{result:e.HS.executeBasedOnType(H,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let h={};h={x:[0],y:[0],z:[1],...h};const x=[{result:e.HS.executeBasedOnType(h,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let v={};v={number:[.4],...v};const O=[{result:e.HS.executeBasedOnType(v,!1,(e=>t.math.number(e))),transformers:[]}];let I={};I={x:[0],y:[0],z:[-1],...I};const L=[{result:e.HS.executeBasedOnType(I,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let B={};B={x:[0],y:[0],z:[-2],...B};const w=[{result:e.HS.executeBasedOnType(B,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let T={};T={x:[0],y:[0],z:[1],...T};const g=[{result:e.HS.executeBasedOnType(T,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let A={};A={x:[0],y:[1.5],z:[0],...A};const E=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let b={};b={...{faceOpacity:[.5],edgeOpacity:[.5],edgeColour:[\\"#000000\\"],faceColour:[\\"#212121\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.02],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]},...b};const z=[{result:e.HS.executeBasedOnType(b,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let W={};W={name:[\\"Custom Material\\"],baseColor:[\\"#9c9cba\\"],emissiveColor:[\\"#000000\\"],metallic:[.9],roughness:[.1],alpha:[1],backFaceCulling:[!1],zOffset:[2],...W};const C=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.babylon.material.pbrMetallicRoughness.create(e))),transformers:[]}];let P={};P={x:[0],y:[0],z:[-1],...P};const X=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Y={};Y={x:[0],y:[0],z:[-1.5],...Y};const Z=[{result:e.HS.executeBasedOnType(Y,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let N={};N={x:[0],y:[0],z:[1],...N};const k=[{result:e.HS.executeBasedOnType(N,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let M={};M={skybox:[\\"city\\"],size:[1e3],blur:[.4],environmentIntensity:[.4],...M};e.HS.executeBasedOnType(M,!1,(e=>t.babylon.scene.enableSkybox(e)));let F={number:[{result:[20],transformers:[]}]};e.HS.updateListInputs(F),F={number:[20],...F};const D=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.number(e))),transformers:[]}];let R={};R.y=y,e.HS.updateListInputs(R),R={x:[0],y:[0],z:[0],...R};const j=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.item=y,e.HS.updateListInputs(q),q={...q};const V=[{result:q.item}];let G={};G.first=S,e.HS.updateListInputs(G),G={first:[1],second:[-2],operation:[\\"divide\\"],...G};const J=[{result:e.HS.executeBasedOnType(G,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let K={};K.first=S,e.HS.updateListInputs(K),K={first:[1],second:[-4],operation:[\\"divide\\"],...K};const Q=[{result:e.HS.executeBasedOnType(K,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let U={};U.first=y,U.second=O,e.HS.updateListInputs(U),U={first:[1],second:[.4],operation:[\\"add\\"],...U};const $=[{result:e.HS.executeBasedOnType(U,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let _={};_.item=S,e.HS.updateListInputs(_),_={..._};const ee=[{result:_.item}],te={faceOpacity:[1],edgeOpacity:[1],edgeColour:[\\"#1c1c1c\\"],faceColour:[\\"#bdbdbd\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.01],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]};let se={};se.faceMaterial=C,e.HS.updateListInputs(se),se={...te,...se};const ne=[{result:e.HS.executeBasedOnType(se,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let re={};re.center=Z,re.direction=X,e.HS.updateListInputs(re),re={radius:[3],height:[1.9],center:[[0,0,0]],direction:[[0,1,0]],...re};const ae=[{result:await e.HS.executeBasedOnTypeAsync(re,!1,(e=>t.occt.shapes.solid.createCylinder(e))),transformers:[]}];let oe={};oe.y=$,e.HS.updateListInputs(oe),oe={x:[0],y:[12],z:[0],...oe};const ie=[{result:e.HS.executeBasedOnType(oe,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ce={};ce.first=D,e.HS.updateListInputs(ce),ce={first:[1],second:[3],operation:[\\"multiply\\"],...ce};const pe=[{result:e.HS.executeBasedOnType(ce,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ue={};ue.first=V,ue.second=O,e.HS.updateListInputs(ue),ue={first:[1],second:[.4],operation:[\\"add\\"],...ue};const le=[{result:e.HS.executeBasedOnType(ue,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let de={};de.first=V,de.second=O,e.HS.updateListInputs(de),de={first:[1],second:[.4],operation:[\\"subtract\\"],...de};const me=[{result:e.HS.executeBasedOnType(de,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ye={};ye.first=ee,e.HS.updateListInputs(ye),ye={first:[1],second:[-.2],operation:[\\"multiply\\"],...ye};const Se=[{result:e.HS.executeBasedOnType(ye,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let He={};He.second=D,e.HS.updateListInputs(He),He={first:[360],second:[1],operation:[\\"divide\\"],...He};const fe=[{result:e.HS.executeBasedOnType(He,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}],he={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let xe={};xe.shape=ae,e.HS.updateListInputs(xe),xe={...he,...xe};const ve=[{result:await e.HS.executeBasedOnTypeAsync(xe,!1,(e=>t.occt.fillets.filletEdges(e))),transformers:[]}];let Oe={};Oe.start=L,Oe.end=ie,e.HS.updateListInputs(Oe),Oe={start:[[0,0,0]],end:[[0,1,0]],...Oe};const Ie=[{result:await e.HS.executeBasedOnTypeAsync(Oe,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let Le={};Le.second=pe,e.HS.updateListInputs(Le),Le={first:[360],second:[1],operation:[\\"divide\\"],...Le};const Be=[{result:e.HS.executeBasedOnType(Le,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let we={};we.start=w,we.end=ie,e.HS.updateListInputs(we),we={start:[[0,0,0]],end:[[0,1,0]],...we};const Te=[{result:await e.HS.executeBasedOnTypeAsync(we,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let ge={};ge.y=le,e.HS.updateListInputs(ge),ge={x:[0],y:[0],z:[.05],...ge};const Ae=[{result:e.HS.executeBasedOnType(ge,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ee={};Ee.y=me,Ee.z=Q,e.HS.updateListInputs(Ee),Ee={x:[0],y:[0],z:[-1],...Ee};const be=[{result:e.HS.executeBasedOnType(Ee,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ze={};ze.y=me,ze.z=J,e.HS.updateListInputs(ze),ze={x:[0],y:[0],z:[0],...ze};const We=[{result:e.HS.executeBasedOnType(ze,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ce={};Ce.z=Se,e.HS.updateListInputs(Ce),Ce={x:[0],y:[0],z:[0],...Ce};const Pe=[{result:e.HS.executeBasedOnType(Ce,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Xe={};Xe.step=fe,e.HS.updateListInputs(Xe),Xe={step:[.1],min:[0],max:[360],...Xe};const Ye=e.HS.executeBasedOnType(Xe,!1,(e=>t.vector.span(e))),Ze=[];for(let e=0;e<1;e++)Ze.push({type:\\"flat\\"});const Ne=[{result:Ye,transformers:Ze}];let ke={};ke.first=Se,e.HS.updateListInputs(ke),ke={first:[2],second:[-2],operation:[\\"multiply\\"],...ke};e.HS.executeBasedOnType(ke,!1,(e=>t.math.twoNrOperation(e)));let Me={};Me.listElements=ve,e.HS.updateListInputs(Me),Me={...Me};const Fe=[{result:[Me.listElements?Me.listElements:[]]}],De={shape:[void 0],axis:[[0,0,1]],angle:[0]};let Re={};Re.shape=Ie,Re.axis=o,Re.angle=Be,e.HS.updateListInputs(Re),Re={...De,...Re};const je=[{result:await e.HS.executeBasedOnTypeAsync(Re,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let qe={};qe.first=Be,e.HS.updateListInputs(qe),qe={first:[1],second:[.4],operation:[\\"multiply\\"],...qe};const Ve=[{result:e.HS.executeBasedOnType(qe,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ge={};Ge.first=Be,e.HS.updateListInputs(Ge),Ge={first:[1],second:[.6],operation:[\\"multiply\\"],...Ge};const Je=[{result:e.HS.executeBasedOnType(Ge,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ke={};Ke.listElements=[Ae[0],j[0],be[0],We[0]],e.HS.updateListInputs(Ke),Ke={...Ke};const Qe=[{result:[Ke.listElements?Ke.listElements:[]]}];let Ue={};Ue.item=Ne,e.HS.updateListInputs(Ue),Ue={...Ue};const $e=[{result:Ue.item}],_e={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let et={};et.shape=je,et.nrOfDivisions=l,e.HS.updateListInputs(et),et={..._e,...et};const tt=[{result:await e.HS.executeBasedOnTypeAsync(et,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],st={shape:[void 0],axis:[[0,0,1]],angle:[0]};let nt={};nt.shape=Te,nt.axis=o,nt.angle=[Ve[0],Je[0]],e.HS.updateListInputs(nt),nt={...st,...nt};const rt=[{result:await e.HS.executeBasedOnTypeAsync(nt,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let at={};at.number=Ve,e.HS.updateListInputs(at),at={number:[1],operation:[\\"negate\\"],...at};const ot=[{result:e.HS.executeBasedOnType(at,!1,(e=>t.math.oneNrOperation(e))),transformers:[]}],it={points:[void 0]};let ct={};ct.points=Qe,e.HS.updateListInputs(ct),ct={...it,...ct};const pt=[{result:await e.HS.executeBasedOnTypeAsync(ct,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(pt,t);const ut={list:[void 0],pattern:[[!0,!0,!1]]};let lt={};lt.list=tt,lt.pattern=u,e.HS.updateListInputs(lt),lt={...ut,...lt};const dt=[{result:e.HS.executeBasedOnType(lt,!0,(e=>t.lists.getByPattern(e))),transformers:[]}];let mt={};mt.listElements=rt,e.HS.updateListInputs(mt),mt={...mt};const yt=[{result:[mt.listElements?mt.listElements:[]]}],St={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let Ht={};Ht.shape=pt,Ht.origin=We,Ht.direction=f,e.HS.updateListInputs(Ht),Ht={...St,...Ht};const ft=[{result:await e.HS.executeBasedOnTypeAsync(Ht,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ht={shape:[void 0]};let xt={};xt.shape=pt,e.HS.updateListInputs(xt),xt={...ht,...xt};const vt=await e.HS.executeBasedOnTypeAsync(xt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),Ot=[];for(let e=0;e<1;e++)Ot.push({type:\\"flat\\"});const It=[{result:vt,transformers:Ot}],Lt={list:[void 0],index:[0],clone:[!0]};let Bt={};Bt.list=yt,e.HS.updateListInputs(Bt),Bt={...Lt,...Bt};const wt=[{result:e.HS.executeBasedOnType(Bt,!1,(e=>t.lists.getItem(e))),transformers:[]}],Tt={shape:[void 0]};let gt={};gt.shape=ft,e.HS.updateListInputs(gt),gt={...Tt,...gt};const At=[{result:await e.HS.executeBasedOnTypeAsync(gt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}],Et={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let bt={};bt.shape=wt,bt.nrOfDivisions=l,e.HS.updateListInputs(bt),bt={...Et,...bt};const zt=[{result:await e.HS.executeBasedOnTypeAsync(bt,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],Wt={list:[void 0],index:[3],clone:[!0]};let Ct={};Ct.list=At,e.HS.updateListInputs(Ct),Ct={...Wt,...Ct};const Pt=[{result:e.HS.executeBasedOnType(Ct,!1,(e=>t.lists.removeItemAtIndex(e))),transformers:[]}],Xt={list:[void 0],pattern:[[!0,!0,!1]]};let Yt={};Yt.list=zt,Yt.pattern=c,e.HS.updateListInputs(Yt),Yt={...Xt,...Yt};const Zt=[{result:e.HS.executeBasedOnType(Yt,!1,(e=>t.lists.getByPattern(e))),transformers:[]}],Nt={list:[void 0],clone:[!0]};let kt={};kt.list=Pt,e.HS.updateListInputs(kt),kt={...Nt,...kt};const Mt=e.HS.executeBasedOnType(kt,!1,(e=>t.lists.reverse(e))),Ft=[];for(let e=0;e<1;e++)Ft.push({type:\\"flat\\"});const Dt=[{result:Mt,transformers:Ft}];let Rt={};Rt.listElements=[Zt[0],dt[0]],e.HS.updateListInputs(Rt),Rt={...Rt};const jt=[{result:[Rt.listElements?Rt.listElements:[]]}];let qt={};qt.listElements=[It[0],Dt[0]],e.HS.updateListInputs(qt),qt={...qt};const Vt=[{result:[qt.listElements?qt.listElements:[]]}],Gt={list:[void 0],clone:[!0]};let Jt={};Jt.list=jt,e.HS.updateListInputs(Jt),Jt={...Gt,...Jt};const Kt=e.HS.executeBasedOnType(Jt,!1,(e=>t.lists.flipLists(e))),Qt=[];for(let e=0;e<2;e++)Qt.push({type:\\"flat\\"});const Ut=[{result:Kt,transformers:Qt}],$t={points:[void 0]};let _t={};_t.points=Vt,e.HS.updateListInputs(_t),_t={...$t,..._t};const es=[{result:await e.HS.executeBasedOnTypeAsync(_t,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let ts={};ts.listElements=Ut,e.HS.updateListInputs(ts),ts={...ts};const ss=[{result:[ts.listElements?ts.listElements:[]]}],ns={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let rs={};rs.shape=es,e.HS.updateListInputs(rs),rs={...ns,...rs};const as=[{result:await e.HS.executeBasedOnTypeAsync(rs,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],os={points:[void 0]};let is={};is.points=ss,e.HS.updateListInputs(is),is={...os,...is};const cs=[{result:await e.HS.executeBasedOnTypeAsync(is,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}],ps={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let us={};us.shape=as,us.direction=x,e.HS.updateListInputs(us),us={...ps,...us};const ls=[{result:await e.HS.executeBasedOnTypeAsync(us,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],ds={shape:[void 0]};let ms={};ms.shape=as,e.HS.updateListInputs(ms),ms={...ds,...ms};const ys=[{result:await e.HS.executeBasedOnTypeAsync(ms,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],Ss={shape:[void 0]};let Hs={};Hs.shape=as,e.HS.updateListInputs(Hs),Hs={...Ss,...Hs};const fs=[{result:await e.HS.executeBasedOnTypeAsync(Hs,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],hs={shape:[void 0]};let xs={};xs.shape=as,e.HS.updateListInputs(xs),xs={...hs,...xs};const vs=[{result:await e.HS.executeBasedOnTypeAsync(xs,!1,(e=>t.occt.shapes.wire.closeOpenWire(e))),transformers:[]}],Os={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Is={};Is.shape=vs,Is.direction=x,e.HS.updateListInputs(Is),Is={...Os,...Is};const Ls=[{result:await e.HS.executeBasedOnTypeAsync(Is,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Bs={shape:[void 0],radius:[1],radiusList:[void 0],indexes:[void 0],direction:[[0,1,0]]};let ws={};ws.shape=cs,ws.direction=g,e.HS.updateListInputs(ws),ws={...Bs,...ws};const Ts=[{result:await e.HS.executeBasedOnTypeAsync(ws,!1,(e=>t.occt.fillets.fillet3DWire(e))),transformers:[]}],gs={shape:[void 0],face:[void 0],distance:[-.2],tolerance:[.1]};let As={};As.shape=ls,e.HS.updateListInputs(As),As={...gs,...As};const Es=[{result:await e.HS.executeBasedOnTypeAsync(As,!1,(e=>t.occt.operations.offset(e))),transformers:[]}],bs={shape:[void 0],index:[0]};let zs={};zs.shape=ls,e.HS.updateListInputs(zs),zs={...bs,...zs};const Ws=[{result:await e.HS.executeBasedOnTypeAsync(zs,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}];let Cs={};Cs.item=ys,e.HS.updateListInputs(Cs),Cs={...Cs};const Ps=[{result:Cs.item}];let Xs={};Xs.item=fs,e.HS.updateListInputs(Xs),Xs={...Xs};const Ys=[{result:Xs.item}];let Zs={};Zs.start=fs,Zs.end=ys,e.HS.updateListInputs(Zs),Zs={start:[[0,0,0]],end:[[0,1,0]],...Zs};const Ns=[{result:await e.HS.executeBasedOnTypeAsync(Zs,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(Ns,t);const ks={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Ms={};Ms.shape=Ts,Ms.angle=ot,Ms.direction=o,e.HS.updateListInputs(Ms),Ms={...ks,...Ms};const Fs=[{result:await e.HS.executeBasedOnTypeAsync(Ms,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Ds={shape:[void 0]};let Rs={};Rs.shape=Ls,e.HS.updateListInputs(Rs),Rs={...Ds,...Rs};const js=[{result:await e.HS.executeBasedOnTypeAsync(Rs,!1,(e=>t.occt.shapes.solid.fromClosedShell(e))),transformers:[]}],qs={shape:[void 0],index:[1]};let Vs={};Vs.shape=Ws,e.HS.updateListInputs(Vs),Vs={...qs,...Vs};const Gs=[{result:await e.HS.executeBasedOnTypeAsync(Vs,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}],Js={shape:[void 0],index:[0]};let Ks={};Ks.shape=Es,e.HS.updateListInputs(Ks),Ks={...Js,...Ks};const Qs=[{result:await e.HS.executeBasedOnTypeAsync(Ks,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}],Us={shape:[void 0],translation:[[0,0,0]]};let $s={};$s.shape=Ns,$s.translation=E,e.HS.updateListInputs($s),$s={...Us,...$s};const _s=[{result:await e.HS.executeBasedOnTypeAsync($s,!1,(e=>t.occt.transforms.translate(e))),transformers:[]}],en={shape:[void 0],direction:[[0,1,0]]};let tn={};tn.shape=Fs,tn.direction=Pe,e.HS.updateListInputs(tn),tn={...en,...tn};const sn=[{result:await e.HS.executeBasedOnTypeAsync(tn,!1,(e=>t.occt.operations.extrude(e))),transformers:[]}];let nn={};nn.listElements=js,e.HS.updateListInputs(nn),nn={...nn};const rn=[{result:[nn.listElements?nn.listElements:[]]}],an={shape:[void 0],index:[1]};let on={};on.shape=Qs,e.HS.updateListInputs(on),on={...an,...on};const cn=[{result:await e.HS.executeBasedOnTypeAsync(on,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}];let pn={};pn.listElements=Gs,e.HS.updateListInputs(pn),pn={...pn};const un=[{result:[pn.listElements?pn.listElements:[]]}],ln={shape:[void 0]};let dn={};dn.shape=_s,e.HS.updateListInputs(dn),dn={...ln,...dn};const mn=[{result:await e.HS.executeBasedOnTypeAsync(dn,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],yn={shape:[void 0]};let Sn={};Sn.shape=_s,e.HS.updateListInputs(Sn),Sn={...yn,...Sn};const Hn=[{result:await e.HS.executeBasedOnTypeAsync(Sn,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],fn={shapes:[void 0]};let hn={};hn.shapes=un,e.HS.updateListInputs(hn),hn={...fn,...hn};const xn=[{result:await e.HS.executeBasedOnTypeAsync(hn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let vn={};vn.listElements=cn,e.HS.updateListInputs(vn),vn={...vn};const On=[{result:[vn.listElements?vn.listElements:[]]}],In={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let Ln={};Ln.shape=sn,Ln.shapes=Fe,e.HS.updateListInputs(Ln),Ln={...In,...Ln};const Bn=[{result:await e.HS.executeBasedOnTypeAsync(Ln,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}];let wn={};wn.item=Hn,e.HS.updateListInputs(wn),wn={...wn};const Tn=[{result:wn.item}];let gn={};gn.item=mn,e.HS.updateListInputs(gn),gn={...gn};const An=[{result:gn.item}],En={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let bn={};bn.shape=Bn,bn.shapes=rn,e.HS.updateListInputs(bn),bn={...En,...bn};const zn=[{result:await e.HS.executeBasedOnTypeAsync(bn,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}],Wn={shapes:[void 0]};let Cn={};Cn.shapes=On,e.HS.updateListInputs(Cn),Cn={...Wn,...Cn};const Pn=[{result:await e.HS.executeBasedOnTypeAsync(Cn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let Xn={};Xn.listElements=[Ps[0],Tn[0],An[0],Ys[0]],e.HS.updateListInputs(Xn),Xn={...Xn};const Yn=[{result:[Xn.listElements?Xn.listElements:[]]}],Zn={shape:[void 0],origin:[[0,0,0]],normal:[[0,0,1]]};let Nn={};Nn.shape=zn,Nn.normal=m,e.HS.updateListInputs(Nn),Nn={...Zn,...Nn};const kn=[{result:await e.HS.executeBasedOnTypeAsync(Nn,!1,(e=>t.occt.transforms.mirrorAlongNormal(e))),transformers:[]}];let Mn={};Mn.listElements=[xn[0],Pn[0]],e.HS.updateListInputs(Mn),Mn={...Mn};const Fn=[{result:[Mn.listElements?Mn.listElements:[]]}],Dn={points:[void 0]};let Rn={};Rn.points=Yn,e.HS.updateListInputs(Rn),Rn={...Dn,...Rn};const jn=[{result:await e.HS.executeBasedOnTypeAsync(Rn,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let qn={};qn.listElements=[kn[0],zn[0]],e.HS.updateListInputs(qn),qn={...qn};const Vn=[{result:[qn.listElements?qn.listElements:[]]}],Gn={shapes:[void 0],makeSolid:[!1]};let Jn={};Jn.shapes=Fn,e.HS.updateListInputs(Jn),Jn={...Gn,...Jn};const Kn=[{result:await e.HS.executeBasedOnTypeAsync(Jn,!1,(e=>t.occt.operations.loft(e))),transformers:[]}],Qn={shape:[void 0],radius:[.5],radiusList:[void 0],indexes:[void 0]};let Un={};Un.shape=jn,e.HS.updateListInputs(Un),Un={...Qn,...Un};const $n=[{result:await e.HS.executeBasedOnTypeAsync(Un,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],_n={shapes:[void 0]};let er={};er.shapes=Vn,e.HS.updateListInputs(er),er={..._n,...er};const tr=[{result:await e.HS.executeBasedOnTypeAsync(er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],sr={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let nr={};nr.shape=Kn,nr.origin=We,nr.direction=f,e.HS.updateListInputs(nr),nr={...sr,...nr};const rr=[{result:await e.HS.executeBasedOnTypeAsync(nr,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ar={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let or={};or.shape=$n,or.direction=x,e.HS.updateListInputs(or),or={...ar,...or};const ir=[{result:await e.HS.executeBasedOnTypeAsync(or,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}];let cr={};cr.listElements=[ls[0],Es[0],Kn[0],rr[0]],e.HS.updateListInputs(cr),cr={...cr};const pr=[{result:[cr.listElements?cr.listElements:[]]}],ur={shape:[void 0],offset:[-.1]};let lr={};lr.shape=ir,e.HS.updateListInputs(lr),lr={...ur,...lr};const dr=[{result:await e.HS.executeBasedOnTypeAsync(lr,!1,(e=>t.occt.operations.makeThickSolidSimple(e))),transformers:[]}],mr={shape:[void 0],angle:[0],center:[[0,0,0]],axis:[[0,0,1]]};let yr={};yr.shape=tr,yr.angle=$e,yr.axis=k,e.HS.updateListInputs(yr),yr={...mr,...yr};const Sr=[{result:await e.HS.executeBasedOnTypeAsync(yr,!1,(e=>t.occt.transforms.rotateAroundCenter(e))),transformers:[]}],Hr={shapes:[void 0],tolerance:[1e-7]};let fr={};fr.shapes=pr,e.HS.updateListInputs(fr),fr={...Hr,...fr};const hr=[{result:await e.HS.executeBasedOnTypeAsync(fr,!1,(e=>t.occt.shapes.shell.sewFaces(e))),transformers:[]}],xr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let vr={};vr.entity=dr,vr.options=z,e.HS.updateListInputs(vr),vr={...xr,...vr};await e.HS.executeBasedOnTypeAsync(vr,!1,(e=>t.draw.drawAnyAsync(e)));let Or={};Or.listElements=Sr,e.HS.updateListInputs(Or),Or={...Or};const Ir=[{result:[Or.listElements?Or.listElements:[]]}],Lr={shapes:[void 0]};let Br={};Br.shapes=Ir,e.HS.updateListInputs(Br),Br={...Lr,...Br};const wr=[{result:await e.HS.executeBasedOnTypeAsync(Br,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}];let Tr={};Tr.listElements=[hr[0],ve[0],wr[0]],e.HS.updateListInputs(Tr),Tr={...Tr};const gr=[{result:[Tr.listElements?Tr.listElements:[]]}],Ar={shapes:[void 0]};let Er={};Er.shapes=gr,e.HS.updateListInputs(Er),Er={...Ar,...Er};const br=[{result:await e.HS.executeBasedOnTypeAsync(Er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],zr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let Wr={};Wr.entity=br,Wr.options=ne,e.HS.updateListInputs(Wr),Wr={...zr,...Wr};await e.HS.executeBasedOnTypeAsync(Wr,!1,(e=>t.draw.drawAnyAsync(e)))}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);\"}'
+ return '{\"type\":\"rete\",\"version\":\"1.1.0\",\"script\":\"!async function(e,t,s,n,r){let a={};a={x:[0],y:[0],z:[1],...a};const o=[{result:e.HS.executeBasedOnType(a,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let i={};i={text:[\\"[true,false]\\"],...i};const c=[{result:e.HS.executeBasedOnType(i,!1,(e=>t.json.parse(e))),transformers:[]}];let p={};p={text:[\\"[false,true]\\"],...p};const u=[{result:e.HS.executeBasedOnType(p,!1,(e=>t.json.parse(e))),transformers:[]}],l=[{result:[5],transformers:[]}];let d={};d={x:[1],y:[0],z:[0],...d};const m=[{result:e.HS.executeBasedOnType(d,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],y=[{result:[12],transformers:[]}],S=[{result:[7],transformers:[]}];let H={};H={x:[0],y:[1],z:[0],...H};const f=[{result:e.HS.executeBasedOnType(H,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let h={};h={x:[0],y:[0],z:[1],...h};const x=[{result:e.HS.executeBasedOnType(h,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let v={};v={number:[.4],...v};const O=[{result:e.HS.executeBasedOnType(v,!1,(e=>t.math.number(e))),transformers:[]}];let I={};I={x:[0],y:[0],z:[-1],...I};const L=[{result:e.HS.executeBasedOnType(I,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let B={};B={x:[0],y:[0],z:[-2],...B};const w=[{result:e.HS.executeBasedOnType(B,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let T={};T={x:[0],y:[0],z:[1],...T};const g=[{result:e.HS.executeBasedOnType(T,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let A={};A={x:[0],y:[1.5],z:[0],...A};const E=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let b={};b={...{faceOpacity:[.5],edgeOpacity:[.5],edgeColour:[\\"#000000\\"],faceColour:[\\"#212121\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.02],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]},...b};const z=[{result:e.HS.executeBasedOnType(b,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let W={};W={name:[\\"Custom Material\\"],baseColor:[\\"#9c9cba\\"],emissiveColor:[\\"#000000\\"],metallic:[.9],roughness:[.1],alpha:[1],backFaceCulling:[!1],zOffset:[2],...W};const C=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.babylon.material.pbrMetallicRoughness.create(e))),transformers:[]}];let P={};P={x:[0],y:[0],z:[-1],...P};const X=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Y={};Y={x:[0],y:[0],z:[-1.5],...Y};const Z=[{result:e.HS.executeBasedOnType(Y,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let N={};N={x:[0],y:[0],z:[1],...N};const k=[{result:e.HS.executeBasedOnType(N,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let M={};M={skybox:[\\"city\\"],size:[1e3],blur:[.4],environmentIntensity:[.4],...M};e.HS.executeBasedOnType(M,!1,(e=>t.babylon.scene.enableSkybox(e)));let F={number:[{result:[20],transformers:[]}]};e.HS.updateListInputs(F),F={number:[20],...F};const D=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.number(e))),transformers:[]}];let R={};R.y=y,e.HS.updateListInputs(R),R={x:[0],y:[0],z:[0],...R};const j=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.item=y,e.HS.updateListInputs(q),q={...q};const V=[{result:q.item}];let G={};G.first=S,e.HS.updateListInputs(G),G={first:[1],second:[-2],operation:[\\"divide\\"],...G};const J=[{result:e.HS.executeBasedOnType(G,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let K={};K.first=S,e.HS.updateListInputs(K),K={first:[1],second:[-4],operation:[\\"divide\\"],...K};const Q=[{result:e.HS.executeBasedOnType(K,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let U={};U.first=y,U.second=O,e.HS.updateListInputs(U),U={first:[1],second:[.4],operation:[\\"add\\"],...U};const $=[{result:e.HS.executeBasedOnType(U,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let _={};_.item=S,e.HS.updateListInputs(_),_={..._};const ee=[{result:_.item}],te={faceOpacity:[1],edgeOpacity:[1],edgeColour:[\\"#1c1c1c\\"],faceColour:[\\"#bdbdbd\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.01],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]};let se={};se.faceMaterial=C,e.HS.updateListInputs(se),se={...te,...se};const ne=[{result:e.HS.executeBasedOnType(se,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let re={};re.center=Z,re.direction=X,e.HS.updateListInputs(re),re={radius:[3],height:[1.9],center:[[0,0,0]],direction:[[0,1,0]],...re};const ae=[{result:await e.HS.executeBasedOnTypeAsync(re,!1,(e=>t.occt.shapes.solid.createCylinder(e))),transformers:[]}];let oe={};oe.y=$,e.HS.updateListInputs(oe),oe={x:[0],y:[12],z:[0],...oe};const ie=[{result:e.HS.executeBasedOnType(oe,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ce={};ce.first=D,e.HS.updateListInputs(ce),ce={first:[1],second:[3],operation:[\\"multiply\\"],...ce};const pe=[{result:e.HS.executeBasedOnType(ce,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ue={};ue.first=V,ue.second=O,e.HS.updateListInputs(ue),ue={first:[1],second:[.4],operation:[\\"add\\"],...ue};const le=[{result:e.HS.executeBasedOnType(ue,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let de={};de.first=V,de.second=O,e.HS.updateListInputs(de),de={first:[1],second:[.4],operation:[\\"subtract\\"],...de};const me=[{result:e.HS.executeBasedOnType(de,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ye={};ye.first=ee,e.HS.updateListInputs(ye),ye={first:[1],second:[-.2],operation:[\\"multiply\\"],...ye};const Se=[{result:e.HS.executeBasedOnType(ye,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let He={};He.second=D,e.HS.updateListInputs(He),He={first:[360],second:[1],operation:[\\"divide\\"],...He};const fe=[{result:e.HS.executeBasedOnType(He,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}],he={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let xe={};xe.shape=ae,e.HS.updateListInputs(xe),xe={...he,...xe};const ve=[{result:await e.HS.executeBasedOnTypeAsync(xe,!1,(e=>t.occt.fillets.filletEdges(e))),transformers:[]}];let Oe={};Oe.start=L,Oe.end=ie,e.HS.updateListInputs(Oe),Oe={start:[[0,0,0]],end:[[0,1,0]],...Oe};const Ie=[{result:await e.HS.executeBasedOnTypeAsync(Oe,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let Le={};Le.second=pe,e.HS.updateListInputs(Le),Le={first:[360],second:[1],operation:[\\"divide\\"],...Le};const Be=[{result:e.HS.executeBasedOnType(Le,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let we={};we.start=w,we.end=ie,e.HS.updateListInputs(we),we={start:[[0,0,0]],end:[[0,1,0]],...we};const Te=[{result:await e.HS.executeBasedOnTypeAsync(we,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let ge={};ge.y=le,e.HS.updateListInputs(ge),ge={x:[0],y:[0],z:[.05],...ge};const Ae=[{result:e.HS.executeBasedOnType(ge,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ee={};Ee.y=me,Ee.z=Q,e.HS.updateListInputs(Ee),Ee={x:[0],y:[0],z:[-1],...Ee};const be=[{result:e.HS.executeBasedOnType(Ee,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ze={};ze.y=me,ze.z=J,e.HS.updateListInputs(ze),ze={x:[0],y:[0],z:[0],...ze};const We=[{result:e.HS.executeBasedOnType(ze,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ce={};Ce.z=Se,e.HS.updateListInputs(Ce),Ce={x:[0],y:[0],z:[0],...Ce};const Pe=[{result:e.HS.executeBasedOnType(Ce,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Xe={};Xe.step=fe,e.HS.updateListInputs(Xe),Xe={step:[.1],min:[0],max:[360],...Xe};const Ye=e.HS.executeBasedOnType(Xe,!1,(e=>t.vector.span(e))),Ze=[];for(let e=0;e<1;e++)Ze.push({type:\\"flat\\"});const Ne=[{result:Ye,transformers:Ze}];let ke={};ke.first=Se,e.HS.updateListInputs(ke),ke={first:[2],second:[-2],operation:[\\"multiply\\"],...ke};e.HS.executeBasedOnType(ke,!1,(e=>t.math.twoNrOperation(e)));let Me={};Me.listElements=ve,e.HS.updateListInputs(Me),Me={...Me};const Fe=[{result:[Me.listElements?Me.listElements:[]]}],De={shape:[void 0],axis:[[0,0,1]],angle:[0]};let Re={};Re.shape=Ie,Re.axis=o,Re.angle=Be,e.HS.updateListInputs(Re),Re={...De,...Re};const je=[{result:await e.HS.executeBasedOnTypeAsync(Re,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let qe={};qe.first=Be,e.HS.updateListInputs(qe),qe={first:[1],second:[.4],operation:[\\"multiply\\"],...qe};const Ve=[{result:e.HS.executeBasedOnType(qe,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ge={};Ge.first=Be,e.HS.updateListInputs(Ge),Ge={first:[1],second:[.6],operation:[\\"multiply\\"],...Ge};const Je=[{result:e.HS.executeBasedOnType(Ge,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ke={};Ke.listElements=[Ae[0],j[0],be[0],We[0]],e.HS.updateListInputs(Ke),Ke={...Ke};const Qe=[{result:[Ke.listElements?Ke.listElements:[]]}];let Ue={};Ue.item=Ne,e.HS.updateListInputs(Ue),Ue={...Ue};const $e=[{result:Ue.item}],_e={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let et={};et.shape=je,et.nrOfDivisions=l,e.HS.updateListInputs(et),et={..._e,...et};const tt=[{result:await e.HS.executeBasedOnTypeAsync(et,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],st={shape:[void 0],axis:[[0,0,1]],angle:[0]};let nt={};nt.shape=Te,nt.axis=o,nt.angle=[Ve[0],Je[0]],e.HS.updateListInputs(nt),nt={...st,...nt};const rt=[{result:await e.HS.executeBasedOnTypeAsync(nt,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let at={};at.number=Ve,e.HS.updateListInputs(at),at={number:[1],operation:[\\"negate\\"],...at};const ot=[{result:e.HS.executeBasedOnType(at,!1,(e=>t.math.oneNrOperation(e))),transformers:[]}],it={points:[void 0]};let ct={};ct.points=Qe,e.HS.updateListInputs(ct),ct={...it,...ct};const pt=[{result:await e.HS.executeBasedOnTypeAsync(ct,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(pt,t);const ut={list:[void 0],pattern:[[!0,!0,!1]]};let lt={};lt.list=tt,lt.pattern=u,e.HS.updateListInputs(lt),lt={...ut,...lt};const dt=[{result:e.HS.executeBasedOnType(lt,!0,(e=>t.lists.getByPattern(e))),transformers:[]}];let mt={};mt.listElements=rt,e.HS.updateListInputs(mt),mt={...mt};const yt=[{result:[mt.listElements?mt.listElements:[]]}],St={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let Ht={};Ht.shape=pt,Ht.origin=We,Ht.direction=f,e.HS.updateListInputs(Ht),Ht={...St,...Ht};const ft=[{result:await e.HS.executeBasedOnTypeAsync(Ht,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ht={shape:[void 0]};let xt={};xt.shape=pt,e.HS.updateListInputs(xt),xt={...ht,...xt};const vt=await e.HS.executeBasedOnTypeAsync(xt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),Ot=[];for(let e=0;e<1;e++)Ot.push({type:\\"flat\\"});const It=[{result:vt,transformers:Ot}],Lt={list:[void 0],index:[0],clone:[!0]};let Bt={};Bt.list=yt,e.HS.updateListInputs(Bt),Bt={...Lt,...Bt};const wt=[{result:e.HS.executeBasedOnType(Bt,!1,(e=>t.lists.getItem(e))),transformers:[]}],Tt={shape:[void 0]};let gt={};gt.shape=ft,e.HS.updateListInputs(gt),gt={...Tt,...gt};const At=[{result:await e.HS.executeBasedOnTypeAsync(gt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}],Et={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let bt={};bt.shape=wt,bt.nrOfDivisions=l,e.HS.updateListInputs(bt),bt={...Et,...bt};const zt=[{result:await e.HS.executeBasedOnTypeAsync(bt,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],Wt={list:[void 0],index:[3],clone:[!0]};let Ct={};Ct.list=At,e.HS.updateListInputs(Ct),Ct={...Wt,...Ct};const Pt=[{result:e.HS.executeBasedOnType(Ct,!1,(e=>t.lists.removeItemAtIndex(e))),transformers:[]}],Xt={list:[void 0],pattern:[[!0,!0,!1]]};let Yt={};Yt.list=zt,Yt.pattern=c,e.HS.updateListInputs(Yt),Yt={...Xt,...Yt};const Zt=[{result:e.HS.executeBasedOnType(Yt,!1,(e=>t.lists.getByPattern(e))),transformers:[]}],Nt={list:[void 0],clone:[!0]};let kt={};kt.list=Pt,e.HS.updateListInputs(kt),kt={...Nt,...kt};const Mt=e.HS.executeBasedOnType(kt,!1,(e=>t.lists.reverse(e))),Ft=[];for(let e=0;e<1;e++)Ft.push({type:\\"flat\\"});const Dt=[{result:Mt,transformers:Ft}];let Rt={};Rt.listElements=[Zt[0],dt[0]],e.HS.updateListInputs(Rt),Rt={...Rt};const jt=[{result:[Rt.listElements?Rt.listElements:[]]}];let qt={};qt.listElements=[It[0],Dt[0]],e.HS.updateListInputs(qt),qt={...qt};const Vt=[{result:[qt.listElements?qt.listElements:[]]}],Gt={list:[void 0],clone:[!0]};let Jt={};Jt.list=jt,e.HS.updateListInputs(Jt),Jt={...Gt,...Jt};const Kt=e.HS.executeBasedOnType(Jt,!1,(e=>t.lists.flipLists(e))),Qt=[];for(let e=0;e<2;e++)Qt.push({type:\\"flat\\"});const Ut=[{result:Kt,transformers:Qt}],$t={points:[void 0]};let _t={};_t.points=Vt,e.HS.updateListInputs(_t),_t={...$t,..._t};const es=[{result:await e.HS.executeBasedOnTypeAsync(_t,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let ts={};ts.listElements=Ut,e.HS.updateListInputs(ts),ts={...ts};const ss=[{result:[ts.listElements?ts.listElements:[]]}],ns={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let rs={};rs.shape=es,e.HS.updateListInputs(rs),rs={...ns,...rs};const as=[{result:await e.HS.executeBasedOnTypeAsync(rs,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],os={points:[void 0]};let is={};is.points=ss,e.HS.updateListInputs(is),is={...os,...is};const cs=[{result:await e.HS.executeBasedOnTypeAsync(is,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}],ps={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let us={};us.shape=as,us.direction=x,e.HS.updateListInputs(us),us={...ps,...us};const ls=[{result:await e.HS.executeBasedOnTypeAsync(us,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],ds={shape:[void 0]};let ms={};ms.shape=as,e.HS.updateListInputs(ms),ms={...ds,...ms};const ys=[{result:await e.HS.executeBasedOnTypeAsync(ms,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],Ss={shape:[void 0]};let Hs={};Hs.shape=as,e.HS.updateListInputs(Hs),Hs={...Ss,...Hs};const fs=[{result:await e.HS.executeBasedOnTypeAsync(Hs,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],hs={shape:[void 0]};let xs={};xs.shape=as,e.HS.updateListInputs(xs),xs={...hs,...xs};const vs=[{result:await e.HS.executeBasedOnTypeAsync(xs,!1,(e=>t.occt.shapes.wire.closeOpenWire(e))),transformers:[]}],Os={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Is={};Is.shape=vs,Is.direction=x,e.HS.updateListInputs(Is),Is={...Os,...Is};const Ls=[{result:await e.HS.executeBasedOnTypeAsync(Is,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Bs={shape:[void 0],radius:[1],radiusList:[void 0],indexes:[void 0],direction:[[0,1,0]]};let ws={};ws.shape=cs,ws.direction=g,e.HS.updateListInputs(ws),ws={...Bs,...ws};const Ts=[{result:await e.HS.executeBasedOnTypeAsync(ws,!1,(e=>t.occt.fillets.fillet3DWire(e))),transformers:[]}],gs={shape:[void 0],face:[void 0],distance:[-.2],tolerance:[.1]};let As={};As.shape=ls,e.HS.updateListInputs(As),As={...gs,...As};const Es=[{result:await e.HS.executeBasedOnTypeAsync(As,!1,(e=>t.occt.operations.offset(e))),transformers:[]}],bs={shape:[void 0],index:[0]};let zs={};zs.shape=ls,e.HS.updateListInputs(zs),zs={...bs,...zs};const Ws=[{result:await e.HS.executeBasedOnTypeAsync(zs,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}];let Cs={};Cs.item=ys,e.HS.updateListInputs(Cs),Cs={...Cs};const Ps=[{result:Cs.item}];let Xs={};Xs.item=fs,e.HS.updateListInputs(Xs),Xs={...Xs};const Ys=[{result:Xs.item}];let Zs={};Zs.start=fs,Zs.end=ys,e.HS.updateListInputs(Zs),Zs={start:[[0,0,0]],end:[[0,1,0]],...Zs};const Ns=[{result:await e.HS.executeBasedOnTypeAsync(Zs,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(Ns,t);const ks={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Ms={};Ms.shape=Ts,Ms.angle=ot,Ms.direction=o,e.HS.updateListInputs(Ms),Ms={...ks,...Ms};const Fs=[{result:await e.HS.executeBasedOnTypeAsync(Ms,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Ds={shape:[void 0]};let Rs={};Rs.shape=Ls,e.HS.updateListInputs(Rs),Rs={...Ds,...Rs};const js=[{result:await e.HS.executeBasedOnTypeAsync(Rs,!1,(e=>t.occt.shapes.solid.fromClosedShell(e))),transformers:[]}],qs={shape:[void 0],index:[1]};let Vs={};Vs.shape=Ws,e.HS.updateListInputs(Vs),Vs={...qs,...Vs};const Gs=[{result:await e.HS.executeBasedOnTypeAsync(Vs,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}],Js={shape:[void 0],index:[0]};let Ks={};Ks.shape=Es,e.HS.updateListInputs(Ks),Ks={...Js,...Ks};const Qs=[{result:await e.HS.executeBasedOnTypeAsync(Ks,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}],Us={shape:[void 0],translation:[[0,0,0]]};let $s={};$s.shape=Ns,$s.translation=E,e.HS.updateListInputs($s),$s={...Us,...$s};const _s=[{result:await e.HS.executeBasedOnTypeAsync($s,!1,(e=>t.occt.transforms.translate(e))),transformers:[]}],en={shape:[void 0],direction:[[0,1,0]]};let tn={};tn.shape=Fs,tn.direction=Pe,e.HS.updateListInputs(tn),tn={...en,...tn};const sn=[{result:await e.HS.executeBasedOnTypeAsync(tn,!1,(e=>t.occt.operations.extrude(e))),transformers:[]}];let nn={};nn.listElements=js,e.HS.updateListInputs(nn),nn={...nn};const rn=[{result:[nn.listElements?nn.listElements:[]]}],an={shape:[void 0],index:[1]};let on={};on.shape=Qs,e.HS.updateListInputs(on),on={...an,...on};const cn=[{result:await e.HS.executeBasedOnTypeAsync(on,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}];let pn={};pn.listElements=Gs,e.HS.updateListInputs(pn),pn={...pn};const un=[{result:[pn.listElements?pn.listElements:[]]}],ln={shape:[void 0]};let dn={};dn.shape=_s,e.HS.updateListInputs(dn),dn={...ln,...dn};const mn=[{result:await e.HS.executeBasedOnTypeAsync(dn,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],yn={shape:[void 0]};let Sn={};Sn.shape=_s,e.HS.updateListInputs(Sn),Sn={...yn,...Sn};const Hn=[{result:await e.HS.executeBasedOnTypeAsync(Sn,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],fn={shapes:[void 0]};let hn={};hn.shapes=un,e.HS.updateListInputs(hn),hn={...fn,...hn};const xn=[{result:await e.HS.executeBasedOnTypeAsync(hn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let vn={};vn.listElements=cn,e.HS.updateListInputs(vn),vn={...vn};const On=[{result:[vn.listElements?vn.listElements:[]]}],In={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let Ln={};Ln.shape=sn,Ln.shapes=Fe,e.HS.updateListInputs(Ln),Ln={...In,...Ln};const Bn=[{result:await e.HS.executeBasedOnTypeAsync(Ln,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}];let wn={};wn.item=Hn,e.HS.updateListInputs(wn),wn={...wn};const Tn=[{result:wn.item}];let gn={};gn.item=mn,e.HS.updateListInputs(gn),gn={...gn};const An=[{result:gn.item}],En={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let bn={};bn.shape=Bn,bn.shapes=rn,e.HS.updateListInputs(bn),bn={...En,...bn};const zn=[{result:await e.HS.executeBasedOnTypeAsync(bn,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}],Wn={shapes:[void 0]};let Cn={};Cn.shapes=On,e.HS.updateListInputs(Cn),Cn={...Wn,...Cn};const Pn=[{result:await e.HS.executeBasedOnTypeAsync(Cn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let Xn={};Xn.listElements=[Ps[0],Tn[0],An[0],Ys[0]],e.HS.updateListInputs(Xn),Xn={...Xn};const Yn=[{result:[Xn.listElements?Xn.listElements:[]]}],Zn={shape:[void 0],origin:[[0,0,0]],normal:[[0,0,1]]};let Nn={};Nn.shape=zn,Nn.normal=m,e.HS.updateListInputs(Nn),Nn={...Zn,...Nn};const kn=[{result:await e.HS.executeBasedOnTypeAsync(Nn,!1,(e=>t.occt.transforms.mirrorAlongNormal(e))),transformers:[]}];let Mn={};Mn.listElements=[xn[0],Pn[0]],e.HS.updateListInputs(Mn),Mn={...Mn};const Fn=[{result:[Mn.listElements?Mn.listElements:[]]}],Dn={points:[void 0]};let Rn={};Rn.points=Yn,e.HS.updateListInputs(Rn),Rn={...Dn,...Rn};const jn=[{result:await e.HS.executeBasedOnTypeAsync(Rn,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let qn={};qn.listElements=[kn[0],zn[0]],e.HS.updateListInputs(qn),qn={...qn};const Vn=[{result:[qn.listElements?qn.listElements:[]]}],Gn={shapes:[void 0],makeSolid:[!1]};let Jn={};Jn.shapes=Fn,e.HS.updateListInputs(Jn),Jn={...Gn,...Jn};const Kn=[{result:await e.HS.executeBasedOnTypeAsync(Jn,!1,(e=>t.occt.operations.loft(e))),transformers:[]}],Qn={shape:[void 0],radius:[.5],radiusList:[void 0],indexes:[void 0]};let Un={};Un.shape=jn,e.HS.updateListInputs(Un),Un={...Qn,...Un};const $n=[{result:await e.HS.executeBasedOnTypeAsync(Un,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],_n={shapes:[void 0]};let er={};er.shapes=Vn,e.HS.updateListInputs(er),er={..._n,...er};const tr=[{result:await e.HS.executeBasedOnTypeAsync(er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],sr={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let nr={};nr.shape=Kn,nr.origin=We,nr.direction=f,e.HS.updateListInputs(nr),nr={...sr,...nr};const rr=[{result:await e.HS.executeBasedOnTypeAsync(nr,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ar={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let or={};or.shape=$n,or.direction=x,e.HS.updateListInputs(or),or={...ar,...or};const ir=[{result:await e.HS.executeBasedOnTypeAsync(or,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}];let cr={};cr.listElements=[ls[0],Es[0],Kn[0],rr[0]],e.HS.updateListInputs(cr),cr={...cr};const pr=[{result:[cr.listElements?cr.listElements:[]]}],ur={shape:[void 0],offset:[-.1]};let lr={};lr.shape=ir,e.HS.updateListInputs(lr),lr={...ur,...lr};const dr=[{result:await e.HS.executeBasedOnTypeAsync(lr,!1,(e=>t.occt.operations.makeThickSolidSimple(e))),transformers:[]}],mr={shape:[void 0],angle:[0],center:[[0,0,0]],axis:[[0,0,1]]};let yr={};yr.shape=tr,yr.angle=$e,yr.axis=k,e.HS.updateListInputs(yr),yr={...mr,...yr};const Sr=[{result:await e.HS.executeBasedOnTypeAsync(yr,!1,(e=>t.occt.transforms.rotateAroundCenter(e))),transformers:[]}],Hr={shapes:[void 0],tolerance:[1e-7]};let fr={};fr.shapes=pr,e.HS.updateListInputs(fr),fr={...Hr,...fr};const hr=[{result:await e.HS.executeBasedOnTypeAsync(fr,!1,(e=>t.occt.shapes.shell.sewFaces(e))),transformers:[]}],xr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let vr={};vr.entity=dr,vr.options=z,e.HS.updateListInputs(vr),vr={...xr,...vr};await e.HS.executeBasedOnTypeAsync(vr,!1,(e=>t.draw.drawAnyAsync(e)));let Or={};Or.listElements=Sr,e.HS.updateListInputs(Or),Or={...Or};const Ir=[{result:[Or.listElements?Or.listElements:[]]}],Lr={shapes:[void 0]};let Br={};Br.shapes=Ir,e.HS.updateListInputs(Br),Br={...Lr,...Br};const wr=[{result:await e.HS.executeBasedOnTypeAsync(Br,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}];let Tr={};Tr.listElements=[hr[0],ve[0],wr[0]],e.HS.updateListInputs(Tr),Tr={...Tr};const gr=[{result:[Tr.listElements?Tr.listElements:[]]}],Ar={shapes:[void 0]};let Er={};Er.shapes=gr,e.HS.updateListInputs(Er),Er={...Ar,...Er};const br=[{result:await e.HS.executeBasedOnTypeAsync(Er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],zr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let Wr={};Wr.entity=br,Wr.options=ne,e.HS.updateListInputs(Wr),Wr={...zr,...Wr};await e.HS.executeBasedOnTypeAsync(Wr,!1,(e=>t.draw.drawAnyAsync(e)))}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);\"}'
};