{selectedFile.name}
++ {(selectedFile.size / 1024 / 1024).toFixed(2)} MB +
++ {isDragActive + ? "Drop file here" + : "Drop STEP file here or click to browse"} +
++ Supports .step and .stp files +
+ > + )} ++ {project.name} +
+ {project.description && ( ++ {project.description} +
+ )} ++ Create shareable links for operators to view instructions on any + device. +
+ + {/* Existing Links */} + {shareLinks.length > 0 && ( +
+ {baseUrl}/share/{link.token.slice(0, 8)}...
+
+ + {link.expiresAt + ? `Expires: ${new Date(link.expiresAt).toLocaleDateString()}` + : "No expiration"} + {link.password && " | Password protected"} +
++ Generate a video of the full assembly sequence with all + animations and annotations. +
++ Generate a printable PDF document with step-by-step instructions + and images. +
+ ++ Operators can view instructions on mobile devices using share + links. The viewer is optimized for touch screens. +
++ Add specific notes for this assembly step. These will be shown to + operators during assembly. +
+ ++ No standard notes assigned +
+ ) : ( ++ No standard notes found +
+ )} ++ No tools assigned +
+ ) : ( ++ {step.notes} +
++ {stepMediaIds.length} attachment + {stepMediaIds.length !== 1 ? "s" : ""} +
++ No tools assigned to this step +
+ ) : ( ++ No tools found +
+ )} ++ Loading... +
+ )} + + {tools.length === 0 && fetcher.state === "idle" && ( ++ No tools added yet. +
+ )} + +{tool.name}
+ {tool.category && ( ++ {tool.category} +
+ )} ++ Loading... +
+ )} + + {specs.length === 0 && fetcher.state === "idle" && ( ++ No torque specs added yet. +
+ )} + +{spec.name}
++ {spec.torqueValue} {spec.unit} + {spec.tolerance ? ` ±${spec.tolerance}` : ""} +
++ Loading... +
+ )} + + {associations.length === 0 && fetcher.state === "idle" && ( ++ No associations added yet. +
+ )} + +{assoc.name}
+
+
+ {assoc.matchPattern}
+
+ ({assoc.matchType})
+
{message}
+Redirecting to dashboard...
; +} diff --git a/apps/assembly/app/routes/file+/model.$.tsx b/apps/assembly/app/routes/file+/model.$.tsx new file mode 100644 index 0000000000..5d5f75ee56 --- /dev/null +++ b/apps/assembly/app/routes/file+/model.$.tsx @@ -0,0 +1,72 @@ +import { requirePermissions } from "@carbon/auth/auth.server"; +import type { LoaderFunctionArgs } from "react-router"; + +/** + * Route to serve 3D model files (GLB, GLTF) from Supabase storage + * URL pattern: /file/model/{storage-path} + * Example: /file/model/companyId/assembly/projectId/model.glb + */ + +const SUPPORTED_MODEL_TYPES: Record+ Sign in to create assembly instructions +
++ Check your email for a login link +
++ {totalProjects} project{totalProjects !== 1 ? "s" : ""} +
++ Upload a STEP file to create your first assembly instructions with + automated disassembly simulation. +
++ {project.status === "simulating" + ? "Simulation is running... This may take a few minutes." + : project.status === "failed" + ? "Simulation failed. You can retry by re-running the simulation." + : "No assembly steps yet. Run a simulation to generate work instructions."} +
+ {project.status !== "simulating" && ( ++ Configure your assembly instruction libraries and automation rules +
++ {item.count} items +
++ {item.description} +
++ Default animation speeds, export preferences, and other global + settings will be available here. +
++ Auto-apply tools and instructions based on part names (tribal + knowledge capture) +
++ How it works: When a part name matches the pattern, + the associated instructions, tools, and specifications will be + automatically suggested. This helps capture tribal knowledge and + speeds up instruction creation. +
++ Create rules to automatically apply instructions to matching parts. +
+| + | |||||
|---|---|---|---|---|---|
| {assoc.name} | +
+
+ {assoc.matchPattern}
+
+ |
+ {assoc.matchType} | ++ {assoc.defaultInstruction || "-"} + | ++ + {assoc.usageCount ?? 0} uses /{" "} + {assoc.confirmationCount ?? 0} confirmed + + | +
+
+
+ |
+
+ Manage tools that can be assigned to assembly steps +
++ Add tools to your library so they can be assigned to assembly steps. +
+| + | ||||
|---|---|---|---|---|
| {tool.name} | +{tool.category || "-"} | +{tool.partNumber || "-"} | ++ {tool.description || "-"} + | +
+
+
+ |
+
+ Define torque specs for fasteners +
++ Add torque specifications to standardize fastener requirements. +
+| + | |||||
|---|---|---|---|---|---|
| {spec.name} | +{spec.fastenerType || "-"} | ++ {spec.torqueValue} {spec.torqueUnit} + | ++ {spec.tolerance + ? `+/- ${spec.tolerance} ${spec.torqueUnit}` + : "-"} + | ++ {spec.notes || "-"} + | +
+
+
+ |
+
+ Waiting to parse assembly structure... +
+ )} + + {parsingStatus === "processing" && ( +Failed to parse assembly structure.
+ {parsingError && ( ++ {parsingError} +
+ )} ++ This is a single part, not an assembly. +
+ )} +