refactor: Restructure mounting and PCB data into modular files, adding new armpitmfg options and updating data references.
This commit is contained in:
BIN
website/public/images/options/3030-pcb-mount.png
Normal file
BIN
website/public/images/options/3030-pcb-mount.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
@@ -34,7 +34,7 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
const handleStandCrossbarSupportToggle = (option) => {
|
const handleStandCrossbarSupportToggle = (option) => {
|
||||||
const currentSupports = config.standCrossbarSupports || [];
|
const currentSupports = config.standCrossbarSupports || [];
|
||||||
const isSelected = currentSupports.some((opt) => opt.id === option.id);
|
const isSelected = currentSupports.some((opt) => opt.id === option.id);
|
||||||
|
|
||||||
if (isSelected) {
|
if (isSelected) {
|
||||||
updateConfig({
|
updateConfig({
|
||||||
standCrossbarSupports: currentSupports.filter((opt) => opt.id !== option.id),
|
standCrossbarSupports: currentSupports.filter((opt) => opt.id !== option.id),
|
||||||
@@ -62,7 +62,7 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
|
|
||||||
const getSelectedOptionsForSubSection = (mainSectionId, subSectionId, subSection = null) => {
|
const getSelectedOptionsForSubSection = (mainSectionId, subSectionId, subSection = null) => {
|
||||||
const key = `${mainSectionId}.${subSectionId}`;
|
const key = `${mainSectionId}.${subSectionId}`;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'actuator.mounts':
|
case 'actuator.mounts':
|
||||||
return config.mount ? [config.mount] : [];
|
return config.mount ? [config.mount] : [];
|
||||||
@@ -88,36 +88,36 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
|
|
||||||
const isMainSectionComplete = (mainSectionId, mainSection) => {
|
const isMainSectionComplete = (mainSectionId, mainSection) => {
|
||||||
const subSections = Object.entries(mainSection.sections || {});
|
const subSections = Object.entries(mainSection.sections || {});
|
||||||
|
|
||||||
// Check if all sub-sections with options are complete
|
// Check if all sub-sections with options are complete
|
||||||
for (const [subSectionId, subSection] of subSections) {
|
for (const [subSectionId, subSection] of subSections) {
|
||||||
// Skip if no options available
|
// Skip if no options available
|
||||||
if (!subSection.options || subSection.options.length === 0) {
|
if (!subSection.options || subSection.options.length === 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectedOptions = getSelectedOptionsForSubSection(mainSectionId, subSectionId, subSection);
|
const selectedOptions = getSelectedOptionsForSubSection(mainSectionId, subSectionId, subSection);
|
||||||
|
|
||||||
// All sub-sections (both single-select and multi-select) require at least one selection
|
// All sub-sections (both single-select and multi-select) require at least one selection
|
||||||
// Multi-select means you can select multiple items, but you still need at least one
|
// Multi-select means you can select multiple items, but you still need at least one
|
||||||
if (selectedOptions.length === 0) {
|
if (selectedOptions.length === 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Auto-collapse main sections when they become complete
|
// Auto-collapse main sections when they become complete
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const mainSections = partsData.options ? Object.entries(partsData.options) : [];
|
const mainSections = partsData.options ? Object.entries(partsData.options) : [];
|
||||||
|
|
||||||
mainSections.forEach(([mainSectionId, mainSection]) => {
|
mainSections.forEach(([mainSectionId, mainSection]) => {
|
||||||
// Skip toyMounts and remoteControl sections (now in their own steps)
|
// Skip toyMounts and remoteControl sections (now in their own steps)
|
||||||
if (mainSectionId === 'toyMounts' || mainSectionId === 'remoteControl') {
|
if (mainSectionId === 'toyMounts' || mainSectionId === 'remoteControl') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMainSectionComplete(mainSectionId, mainSection)) {
|
if (isMainSectionComplete(mainSectionId, mainSection)) {
|
||||||
setExpandedMainSections((prev) => {
|
setExpandedMainSections((prev) => {
|
||||||
// Only auto-collapse if the section is currently expanded (undefined or true)
|
// Only auto-collapse if the section is currently expanded (undefined or true)
|
||||||
@@ -135,7 +135,7 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
|
|
||||||
const handleOptionClick = (option, mainSectionId, subSectionId) => {
|
const handleOptionClick = (option, mainSectionId, subSectionId) => {
|
||||||
const key = `${mainSectionId}.${subSectionId}`;
|
const key = `${mainSectionId}.${subSectionId}`;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'actuator.mounts':
|
case 'actuator.mounts':
|
||||||
handleMountSelect(option);
|
handleMountSelect(option);
|
||||||
@@ -167,11 +167,10 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
<button
|
<button
|
||||||
key={option.id}
|
key={option.id}
|
||||||
onClick={() => handleOptionClick(option, mainSectionId, subSectionId)}
|
onClick={() => handleOptionClick(option, mainSectionId, subSectionId)}
|
||||||
className={`p-4 border-2 rounded-lg text-left transition-all w-full ${
|
className={`p-4 border-2 rounded-lg text-left transition-all w-full ${isSelected
|
||||||
isSelected
|
|
||||||
? 'border-blue-600 dark:border-blue-500 bg-blue-50 dark:bg-blue-900/30'
|
? 'border-blue-600 dark:border-blue-500 bg-blue-50 dark:bg-blue-900/30'
|
||||||
: 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700/50'
|
: 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700/50'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
{option.image && (
|
{option.image && (
|
||||||
<div className="mb-3 flex justify-center">
|
<div className="mb-3 flex justify-center">
|
||||||
@@ -274,9 +273,8 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<svg
|
<svg
|
||||||
className={`w-4 h-4 text-gray-500 dark:text-gray-400 transition-transform ${
|
className={`w-4 h-4 text-gray-500 dark:text-gray-400 transition-transform ${isExpanded ? 'transform rotate-180' : ''
|
||||||
isExpanded ? 'transform rotate-180' : ''
|
}`}
|
||||||
}`}
|
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
@@ -308,21 +306,18 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
const isComplete = isMainSectionComplete(mainSectionId, mainSection);
|
const isComplete = isMainSectionComplete(mainSectionId, mainSection);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div key={mainSectionId} className={`border-2 rounded-lg overflow-hidden mb-4 ${
|
<div key={mainSectionId} className={`border-2 rounded-lg overflow-hidden mb-4 ${isComplete ? 'border-green-500 dark:border-green-600' : 'border-gray-300 dark:border-gray-700'
|
||||||
isComplete ? 'border-green-500 dark:border-green-600' : 'border-gray-300 dark:border-gray-700'
|
}`}>
|
||||||
}`}>
|
|
||||||
<button
|
<button
|
||||||
onClick={() => toggleMainSection(mainSectionId)}
|
onClick={() => toggleMainSection(mainSectionId)}
|
||||||
className={`w-full px-6 py-4 transition-colors flex items-center justify-between ${
|
className={`w-full px-6 py-4 transition-colors flex items-center justify-between ${isComplete
|
||||||
isComplete
|
? 'bg-green-50 dark:bg-green-900/30 hover:bg-green-100 dark:hover:bg-green-900/40'
|
||||||
? 'bg-green-50 dark:bg-green-900/30 hover:bg-green-100 dark:hover:bg-green-900/40'
|
|
||||||
: 'bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700'
|
: 'bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<h3 className={`text-xl font-bold ${
|
<h3 className={`text-xl font-bold ${isComplete ? 'text-green-900 dark:text-green-300' : 'text-gray-900 dark:text-white'
|
||||||
isComplete ? 'text-green-900 dark:text-green-300' : 'text-gray-900 dark:text-white'
|
}`}>
|
||||||
}`}>
|
|
||||||
{mainSection.title}
|
{mainSection.title}
|
||||||
</h3>
|
</h3>
|
||||||
{isComplete && (
|
{isComplete && (
|
||||||
@@ -347,9 +342,8 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<svg
|
<svg
|
||||||
className={`w-6 h-6 transition-transform ${
|
className={`w-6 h-6 transition-transform ${isExpanded ? 'transform rotate-180' : ''
|
||||||
isExpanded ? 'transform rotate-180' : ''
|
} ${isComplete ? 'text-green-600 dark:text-green-400' : 'text-gray-600 dark:text-gray-400'}`}
|
||||||
} ${isComplete ? 'text-green-600 dark:text-green-400' : 'text-gray-600 dark:text-gray-400'}`}
|
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
@@ -388,9 +382,9 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
const filteredSubSections = {};
|
const filteredSubSections = {};
|
||||||
Object.entries(mainSection.sections || {}).forEach(([subSectionId, subSection]) => {
|
Object.entries(mainSection.sections || {}).forEach(([subSectionId, subSection]) => {
|
||||||
// Check if this sub-section has mod options
|
// Check if this sub-section has mod options
|
||||||
const hasModOptions = subSection.options?.some(opt => opt.type === 'mod') ||
|
const hasModOptions = subSection.options?.some(opt => opt.type === 'mod') ||
|
||||||
subSection.componentType === 'mod';
|
subSection.componentType === 'mod';
|
||||||
|
|
||||||
if (hasModOptions) {
|
if (hasModOptions) {
|
||||||
// Filter options to only show mods
|
// Filter options to only show mods
|
||||||
const modOptions = subSection.options?.filter(opt => opt.type === 'mod') || [];
|
const modOptions = subSection.options?.filter(opt => opt.type === 'mod') || [];
|
||||||
@@ -423,7 +417,7 @@ export default function OptionsStep({ config, updateConfig, buildType }) {
|
|||||||
{buildType === 'upgrade' ? 'Select Upgrades & Modifications' : 'Select Options'}
|
{buildType === 'upgrade' ? 'Select Upgrades & Modifications' : 'Select Options'}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-gray-600 dark:text-gray-300 mb-6">
|
<p className="text-gray-600 dark:text-gray-300 mb-6">
|
||||||
{buildType === 'upgrade'
|
{buildType === 'upgrade'
|
||||||
? 'Choose upgrade components and modifications for your existing build.'
|
? 'Choose upgrade components and modifications for your existing build.'
|
||||||
: 'Choose your preferred mounting options and accessories.'}
|
: 'Choose your preferred mounting options and accessories.'}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
"pinned_sha": "52537c0896eaef83fd9771dcc633903c7aa6a8ab",
|
"pinned_sha": "52537c0896eaef83fd9771dcc633903c7aa6a8ab",
|
||||||
"pinned_raw_url": "https://raw.githubusercontent.com/KinkyMakers/OSSM-hardware/52537c0896eaef83fd9771dcc633903c7aa6a8ab/Printed Parts/Actuator/OSSM - Belt Tensioner.stl",
|
"pinned_raw_url": "https://raw.githubusercontent.com/KinkyMakers/OSSM-hardware/52537c0896eaef83fd9771dcc633903c7aa6a8ab/Printed Parts/Actuator/OSSM - Belt Tensioner.stl",
|
||||||
"checksum_sha256": "31c74250c237763b0013ff42cc714ce14c293382a726de363f1686a7559f525f",
|
"checksum_sha256": "31c74250c237763b0013ff42cc714ce14c293382a726de363f1686a7559f525f",
|
||||||
"last_checked": "2026-01-07T01:21:05.499523+00:00",
|
"last_checked": "2026-01-07T07:29:56.698523+00:00",
|
||||||
"status": "up-to-date"
|
"status": "up-to-date"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"quantity": 2,
|
"quantity": 2,
|
||||||
"relatedParts": [
|
"relatedParts": [
|
||||||
"ossm-24mm-nut-6-sided"
|
"ossm-24mm-nut-5-sided"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -177,7 +177,7 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"quantity": 7,
|
"quantity": 7,
|
||||||
"relatedParts": [
|
"relatedParts": [
|
||||||
"ossm-24mm-nut-hex"
|
"ossm-24mm-nut-5-sided"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -194,16 +194,15 @@
|
|||||||
"quantity": 7,
|
"quantity": 7,
|
||||||
"relatedParts": [
|
"relatedParts": [
|
||||||
"ossm-actuator-body-bottom",
|
"ossm-actuator-body-bottom",
|
||||||
"ossm-actuator-body-middle",
|
"ossm-actuator-body-middle"
|
||||||
"ossm-actuator-body-middle-pivot"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "hardware-fasteners-m5x35-shcs",
|
"id": "hardware-fasteners-m5x35-shcs",
|
||||||
"required": true,
|
"required": true,
|
||||||
"quantity": 7,
|
"quantity": 4,
|
||||||
"relatedParts": [
|
"relatedParts": [
|
||||||
"ossm-24mm-nut-shcs"
|
"ossm-actuator-body-middle-pivot"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -211,7 +210,7 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"quantity": 7,
|
"quantity": 7,
|
||||||
"relatedParts": [
|
"relatedParts": [
|
||||||
"ossm-24mm-nut-hex"
|
"ossm-24mm-nut-5-sided"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -236,8 +235,8 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"quantity": 1,
|
"quantity": 1,
|
||||||
"relatedParts": [
|
"relatedParts": [
|
||||||
"ossm-gt2-belt-clamp",
|
"ossm-24mm-clamping-thread-belt-clamp",
|
||||||
"ossm-24mm-nut-shcs",
|
"ossm-24mm-nut-5-sided",
|
||||||
"ossm-actuator-body-bottom"
|
"ossm-actuator-body-bottom"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,240 +0,0 @@
|
|||||||
{
|
|
||||||
"pitClamp": {
|
|
||||||
"category": "PitClamp",
|
|
||||||
"type": "base",
|
|
||||||
"printedParts": [
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-lower",
|
|
||||||
"name": "PitClamp Mini Lower",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 49.45,
|
|
||||||
"timeEstimate": "1h55m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"filePath": "OSSM - Base - PitClamp Mini - Lower V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/OSSM%20-%20Base%20-%20PitClamp%20Mini%20-%20Lower%20V1.1.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-lower",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/OSSM - Base - PitClamp Mini - Lower V1.1.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-upper",
|
|
||||||
"name": "PitClamp Mini Upper",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 27.36,
|
|
||||||
"timeEstimate": "1h11m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"filePath": "OSSM - Base - PitClamp Mini - Upper V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/OSSM%20-%20Base%20-%20PitClamp%20Mini%20-%20Upper%20V1.1.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-upper",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/OSSM - Base - PitClamp Mini - Upper V1.1.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-57AIM30",
|
|
||||||
"name": "PitClamp Mini 57AIM30",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 46.03,
|
|
||||||
"timeEstimate": "2h10m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"Condition": {
|
|
||||||
"motor.id": "57AIM30"
|
|
||||||
},
|
|
||||||
"filePath": "OSSM - Base - PitClamp Mini - 57AIM30 V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/OSSM%20-%20Mounting%20Ring%20-%20PitClamp%20Mini%20-%2057AIM%20V1.1.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-57AIM30",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/OSSM - Mounting Ring - PitClamp Mini - 57AIM V1.1.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-42AIM30",
|
|
||||||
"name": "PitClamp Mini 42AIM30",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 46.03,
|
|
||||||
"timeEstimate": "2h10m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"Condition": {
|
|
||||||
"motor.id": "42AIM30"
|
|
||||||
},
|
|
||||||
"filePath": "OSSM - Base - PitClamp Mini - 42AIM30 V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/Non-standard/OSSM%20-%20Mounting%20Ring%20-%20PitClamp%20Mini%20-%2042AIM%20V1.1.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-42AIM30",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/Non-standard/OSSM - Mounting Ring - PitClamp Mini - 42AIM V1.1.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-iHSV57",
|
|
||||||
"name": "PitClamp Mini iHSV57",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 46.03,
|
|
||||||
"timeEstimate": "2h10m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"Condition": {
|
|
||||||
"motor.id": "iHSV57"
|
|
||||||
},
|
|
||||||
"filePath": "OSSM - Base - PitClamp Mini - iHSV57 V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/Non-standard/OSSM%20-%20Mounting%20Ring%20-%20PitClamp%20Mini%20-%20iHSV57.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-iHSV57",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/Non-standard/OSSM - Mounting Ring - PitClamp Mini - iHSV57.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-handle",
|
|
||||||
"name": "PitClamp Mini Handle",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 9.23,
|
|
||||||
"timeEstimate": "2h10m",
|
|
||||||
"colour": "secondary",
|
|
||||||
"required": true,
|
|
||||||
"filePath": "OSSM - Handle - PitClamp Mini V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/OSSM%20-%20Base%20-%20PitClamp%20Mini%20-%20Handle.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-handle",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/OSSM - Base - PitClamp Mini - Handle.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-dogbone-nuts",
|
|
||||||
"name": "PitClamp Mini Dogbone Nuts",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 4.44,
|
|
||||||
"timeEstimate": "20m49s",
|
|
||||||
"colour": "secondary",
|
|
||||||
"required": true,
|
|
||||||
"quantity": 2,
|
|
||||||
"filePath": "OSSM - Dogbone Nuts - PitClamp Mini V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/OSSM%20-%20Base%20-%20PitClamp%20Mini%20-%20Dogbone%20Nuts.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-dogbone-nuts",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/OSSM - Base - PitClamp Mini - Dogbone Nuts.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pitclamp-mini-dogbone-bolts ",
|
|
||||||
"name": "PitClamp Mini Dogbone Bolts",
|
|
||||||
"description": "PitClamp mounting system",
|
|
||||||
"filamentEstimate": 4.44,
|
|
||||||
"timeEstimate": "20m49s",
|
|
||||||
"colour": "secondary",
|
|
||||||
"required": true,
|
|
||||||
"quantity": 2,
|
|
||||||
"filePath": "OSSM - Dogbone Bolts - PitClamp Mini V1.1.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Mounting/OSSM%20-%20Base%20-%20PitClamp%20Mini%20-%20Dogbone%20Bolts.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pitclamp-mini-dogbone-bolts ",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Mounting/OSSM - Base - PitClamp Mini - Dogbone Bolts.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"hardwareParts": [
|
|
||||||
{
|
|
||||||
"id": "pitclamp-hardware",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"middlePivot": {
|
|
||||||
"category": "Middle Pivot",
|
|
||||||
"type": "base",
|
|
||||||
"printedParts": [
|
|
||||||
{
|
|
||||||
"id": "ossm-actuator-body-middle-pivot",
|
|
||||||
"name": "Actuator Body Middle Pivot",
|
|
||||||
"description": "Middle Pivot mounting system",
|
|
||||||
"filamentEstimate": 147.19,
|
|
||||||
"timeEstimate": "5h8m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"replaces": [
|
|
||||||
"ossm-actuator-body-middle"
|
|
||||||
],
|
|
||||||
"filePath": "OSSM - Actuator Body Middle Pivot.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Actuator/Non-standard/OSSM%20-%20Actuator%20-%20Body%20-%20Middle%20Pivot.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-actuator-body-middle-pivot",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Actuator/Non-standard/OSSM - Actuator - Body - Middle Pivot.stl",
|
|
||||||
"pinned_sha": "ad39a03b628b8e38549b99036c8dfd4131948545",
|
|
||||||
"pinned_raw_url": "https://raw.githubusercontent.com/KinkyMakers/OSSM-hardware/ad39a03b628b8e38549b99036c8dfd4131948545/Printed Parts/Actuator/Non-standard/OSSM - Actuator - Body - Middle Pivot.stl",
|
|
||||||
"checksum_sha256": "f6403a3c53e0d8c8e63d48bf853ab17c9f283421b1665b5503dbb04d59d0f52d",
|
|
||||||
"last_checked": "2026-01-07T01:21:04.528132+00:00",
|
|
||||||
"status": "up-to-date"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-handle-spacer",
|
|
||||||
"name": "Handle Spacer",
|
|
||||||
"description": "Handle spacer part",
|
|
||||||
"filamentEstimate": 0,
|
|
||||||
"colour": "secondary",
|
|
||||||
"required": true,
|
|
||||||
"quantity": 2,
|
|
||||||
"filePath": "OSSM - Handle Spacer.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Stand/OSSM%20-%20Stand%20-%203030%20Extrusion%20Base%20-%20Handle%20Spacer.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-handle-spacer",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Stand/OSSM - Stand - 3030 Extrusion Base - Handle Spacer.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"hardwareParts": [
|
|
||||||
{
|
|
||||||
"id": "middle-pivot-hardware",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
121
website/src/data/components/mounting/armpitmfg.json
Normal file
121
website/src/data/components/mounting/armpitmfg.json
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
{
|
||||||
|
"pitclamp": {
|
||||||
|
"name": "PitClamp Mini",
|
||||||
|
"description": "armpitMFG PitClamp Mini - Modular Quick-Release Mount",
|
||||||
|
"image": "https://raw.githubusercontent.com/armpitMFG/PitClamp-Mini/main/Images/Renders/Primary/Parts%20Only.png",
|
||||||
|
"printedParts": [
|
||||||
|
{
|
||||||
|
"id": "pitclamp-mini-base-ossm-v2",
|
||||||
|
"name": "PitClamp Mini Base - OSSM v2",
|
||||||
|
"description": "Modular base for OSSM v2",
|
||||||
|
"filamentEstimate": 65,
|
||||||
|
"timeEstimate": "2h30m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "PitClamp Mini - Base - Modular - OSSM v2.stl",
|
||||||
|
"url": "https://github.com/armpitMFG/PitClamp-Mini/blob/main/Files/Bases/PitClamp%20Mini%20-%20Base%20-%20Modular%20-%20OSSM%20v2.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "pitclamp-mini-base-ossm-v2",
|
||||||
|
"local_path": "vendor/armpitMFG-PitClamp-Mini/Files/Bases/PitClamp Mini - Base - Modular - OSSM v2.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pitclamp-mini-rail-clamp",
|
||||||
|
"name": "PitClamp Mini Rail Clamp",
|
||||||
|
"description": "Standard rail clamp mod",
|
||||||
|
"filamentEstimate": 25,
|
||||||
|
"timeEstimate": "1h",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "PitClamp Mini - Rail - Standard Mod - Clamp V1.1.stl",
|
||||||
|
"url": "https://github.com/armpitMFG/PitClamp-Mini/blob/main/Files/Rail%20Components/PitClamp%20Mini%20-%20Rail%20-%20Standard%20Mod%20-%20Clamp%20V1.1.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "pitclamp-mini-rail-clamp",
|
||||||
|
"local_path": "vendor/armpitMFG-PitClamp-Mini/Files/Rail Components/PitClamp Mini - Rail - Standard Mod - Clamp V1.1.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pitclamp-mini-rail-pivot",
|
||||||
|
"name": "PitClamp Mini Rail Pivot",
|
||||||
|
"description": "Standard rail pivot mod",
|
||||||
|
"filamentEstimate": 25,
|
||||||
|
"timeEstimate": "1h",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "PitClamp Mini - Rail - Standard Mod - Pivot V1.1.stl",
|
||||||
|
"url": "https://github.com/armpitMFG/PitClamp-Mini/blob/main/Files/Rail%20Components/PitClamp%20Mini%20-%20Rail%20-%20Standard%20Mod%20-%20Pivot%20V1.1.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "pitclamp-mini-rail-pivot",
|
||||||
|
"local_path": "vendor/armpitMFG-PitClamp-Mini/Files/Rail Components/PitClamp Mini - Rail - Standard Mod - Pivot V1.1.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pitclamp-mini-ring-57aim",
|
||||||
|
"name": "PitClamp Mini Ring - 57AIM",
|
||||||
|
"description": "Motor ring for 57AIM",
|
||||||
|
"filamentEstimate": 45,
|
||||||
|
"timeEstimate": "1h45m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"Condition": {
|
||||||
|
"motor.id": "57AIM30"
|
||||||
|
},
|
||||||
|
"filePath": "PitClamp Mini - Ring v1.1 - 57AIM - 5mm Offset +Passthru.stl",
|
||||||
|
"url": "https://github.com/armpitMFG/PitClamp-Mini/blob/main/Files/Rings/PitClamp%20Mini%20-%20Ring%20v1.1%20-%2057AIM%20-%205mm%20Offset%20+Passthru.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "pitclamp-mini-ring-57aim",
|
||||||
|
"local_path": "vendor/armpitMFG-PitClamp-Mini/Files/Rings/PitClamp Mini - Ring v1.1 - 57AIM - 5mm Offset +Passthru.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pitclamp-mini-ring-ihsv57",
|
||||||
|
"name": "PitClamp Mini Ring - iHSV57",
|
||||||
|
"description": "Motor ring for iHSV57",
|
||||||
|
"filamentEstimate": 45,
|
||||||
|
"timeEstimate": "1h45m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"Condition": {
|
||||||
|
"motor.id": "iHSV57"
|
||||||
|
},
|
||||||
|
"filePath": "PitClamp Mini - Ring - iHSV57 - Default - 5mm Offset.stl",
|
||||||
|
"url": "https://github.com/armpitMFG/PitClamp-Mini/blob/main/Files/Rings/PitClamp%20Mini%20-%20Ring%20-%20iHSV57%20-%20Default%20-%205mm%20Offset.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "pitclamp-mini-ring-ihsv57",
|
||||||
|
"local_path": "vendor/armpitMFG-PitClamp-Mini/Files/Rings/PitClamp Mini - Ring - iHSV57 - Default - 5mm Offset.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hardwareParts": [
|
||||||
|
{
|
||||||
|
"id": "pitclamp-hardware",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
13
website/src/data/components/mounting/index.js
Normal file
13
website/src/data/components/mounting/index.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import ossm from './ossm.json';
|
||||||
|
import armpitmfg from './armpitmfg.json';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
"mounting": {
|
||||||
|
"category": "Mounting",
|
||||||
|
"type": "base",
|
||||||
|
"systems": {
|
||||||
|
...ossm,
|
||||||
|
...armpitmfg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
59
website/src/data/components/mounting/ossm.json
Normal file
59
website/src/data/components/mounting/ossm.json
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
"middle-pivot": {
|
||||||
|
"name": "Middle Pivot",
|
||||||
|
"description": "Standard OSSM Middle Pivot mounting system",
|
||||||
|
"image": "/images/options/middle-pivot.png",
|
||||||
|
"printedParts": [
|
||||||
|
{
|
||||||
|
"id": "ossm-actuator-body-middle-pivot",
|
||||||
|
"name": "Actuator Body Middle Pivot",
|
||||||
|
"description": "Middle Pivot mounting system",
|
||||||
|
"filamentEstimate": 147.19,
|
||||||
|
"timeEstimate": "5h8m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"replaces": [
|
||||||
|
"ossm-actuator-body-middle"
|
||||||
|
],
|
||||||
|
"filePath": "OSSM - Actuator Body Middle Pivot.stl",
|
||||||
|
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Actuator/Non-standard/OSSM%20-%20Actuator%20-%20Body%20-%20Middle%20Pivot.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "ossm-actuator-body-middle-pivot",
|
||||||
|
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Actuator/Non-standard/OSSM - Actuator - Body - Middle Pivot.stl",
|
||||||
|
"pinned_sha": "ad39a03b628b8e38549b99036c8dfd4131948545",
|
||||||
|
"pinned_raw_url": "https://raw.githubusercontent.com/KinkyMakers/OSSM-hardware/ad39a03b628b8e38549b99036c8dfd4131948545/Printed Parts/Actuator/Non-standard/OSSM - Actuator - Body - Middle Pivot.stl",
|
||||||
|
"checksum_sha256": "f6403a3c53e0d8c8e63d48bf853ab17c9f283421b1665b5503dbb04d59d0f52d",
|
||||||
|
"last_checked": "2026-01-07T01:21:04.528132+00:00",
|
||||||
|
"status": "up-to-date"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ossm-handle-spacer",
|
||||||
|
"name": "Handle Spacer",
|
||||||
|
"description": "Handle spacer part",
|
||||||
|
"filamentEstimate": 10,
|
||||||
|
"colour": "secondary",
|
||||||
|
"required": true,
|
||||||
|
"quantity": 2,
|
||||||
|
"filePath": "OSSM - Handle Spacer.stl",
|
||||||
|
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/Stand/OSSM%20-%20Stand%20-%203030%20Extrusion%20Base%20-%20Handle%20Spacer.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "ossm-handle-spacer",
|
||||||
|
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/Stand/OSSM - Stand - 3030 Extrusion Base - Handle Spacer.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hardwareParts": [
|
||||||
|
{
|
||||||
|
"id": "hardware-fasteners-m5x35-shcs",
|
||||||
|
"required": true,
|
||||||
|
"quantity": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
{
|
|
||||||
"3030-mount": {
|
|
||||||
"category": "PCB Mount",
|
|
||||||
"type": "base",
|
|
||||||
"printedParts": [
|
|
||||||
{
|
|
||||||
"id": "ossm-pcb-3030-mount",
|
|
||||||
"name": "PCB 3030 Mount",
|
|
||||||
"description": "PCB mount for 3030 extrusion",
|
|
||||||
"filamentEstimate": 15,
|
|
||||||
"timeEstimate": "45m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"filePath": "OSSM - PCB - 3030 Mount.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/PCB/OSSM%20-%20PCB%20-%203030%20Mount.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pcb-3030-mount",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/PCB/OSSM - PCB - 3030 Mount.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ossm-pcb-3030-mount-cover",
|
|
||||||
"name": "PCB 3030 Mount Cover",
|
|
||||||
"description": "Cover for the 3030 mount",
|
|
||||||
"filamentEstimate": 15,
|
|
||||||
"timeEstimate": "45m",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"filePath": "OSSM - PCB - 3030 Mount Cover.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/PCB/OSSM%20-%20PCB%20-%203030%20Mount%20Cover.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pcb-3030-mount-cover",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/PCB/OSSM - PCB - 3030 Mount Cover.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"hardwareParts": [
|
|
||||||
{
|
|
||||||
"id": "hardware-fasteners-m6x12-shcs",
|
|
||||||
"required": true,
|
|
||||||
"quantity": 4,
|
|
||||||
"relatedParts": [
|
|
||||||
"ossm-pcb-3030-mount"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "hardware-fasteners-m6-t-nuts",
|
|
||||||
"required": true,
|
|
||||||
"quantity": 4,
|
|
||||||
"relatedParts": [
|
|
||||||
"ossm-pcb-3030-mount"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"aio-cover-mount": {
|
|
||||||
"category": "PCB Mount",
|
|
||||||
"type": "base",
|
|
||||||
"printedParts": [
|
|
||||||
{
|
|
||||||
"id": "ossm-pcb-aio-cover-mount",
|
|
||||||
"name": "PCB AIO Cover Mount",
|
|
||||||
"description": "All-in-one cover mount on the actuator",
|
|
||||||
"filamentEstimate": 20,
|
|
||||||
"timeEstimate": "1h",
|
|
||||||
"colour": "primary",
|
|
||||||
"required": true,
|
|
||||||
"filePath": "OSSM - PCB - AIO Cover Mount.stl",
|
|
||||||
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/PCB/OSSM%20-%20PCB%20-%20AIO%20Cover%20Mount.stl?raw=true",
|
|
||||||
"vendor": {
|
|
||||||
"manifest_id": "ossm-pcb-aio-cover-mount",
|
|
||||||
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/PCB/OSSM - PCB - AIO Cover Mount.stl",
|
|
||||||
"pinned_sha": null,
|
|
||||||
"pinned_raw_url": null,
|
|
||||||
"checksum_sha256": null,
|
|
||||||
"last_checked": null,
|
|
||||||
"status": "error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"hardwareParts": [
|
|
||||||
{
|
|
||||||
"id": "hardware-fasteners-m3x8-shcs",
|
|
||||||
"required": true,
|
|
||||||
"quantity": 4,
|
|
||||||
"relatedParts": [
|
|
||||||
"ossm-pcb-aio-cover-mount"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
56
website/src/data/components/pcb/armpitmfg.json
Normal file
56
website/src/data/components/pcb/armpitmfg.json
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"aio-cover-mount": {
|
||||||
|
"name": "AIO Cover Mount",
|
||||||
|
"description": "All-in-one cover mount for OSSM v2 AIO PCB",
|
||||||
|
"image": "https://raw.githubusercontent.com/armpitMFG/OSSM-Parts/main/OSSM%20v2%20AIO%20PCB%20Backpack%20Mod/Images/Workspace/AIO%20PCB%20Backpack%20-%20Back%20Right.png",
|
||||||
|
"printedParts": [
|
||||||
|
{
|
||||||
|
"id": "ossm-pcb-aio-backpack-base",
|
||||||
|
"name": "AIO PCB Backpack Base",
|
||||||
|
"description": "Base part for AIO PCB Backpack V2.3c",
|
||||||
|
"filamentEstimate": 45,
|
||||||
|
"timeEstimate": "2h",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "OSSM Mods - AIO PCB Backpack - Base V2.3c.stl",
|
||||||
|
"url": "https://github.com/armpitMFG/OSSM-Parts/blob/main/OSSM%20v2%20AIO%20PCB%20Backpack%20Mod/Files/OSSM%20Mods%20-%20AIO%20PCB%20Backpack%20-%20Base%20V2.3c.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "ossm-pcb-aio-backpack-base",
|
||||||
|
"local_path": "vendor/armpitMFG-OSSM-Parts/OSSM v2 AIO PCB Backpack Mod/Files/OSSM Mods - AIO PCB Backpack - Base V2.3c.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ossm-pcb-aio-backpack-cap",
|
||||||
|
"name": "AIO PCB Backpack Cap",
|
||||||
|
"description": "Default cap for AIO PCB Backpack",
|
||||||
|
"filamentEstimate": 15,
|
||||||
|
"timeEstimate": "45m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "OSSM Mods - AIO PCB Backpack - Cap (Default).stl",
|
||||||
|
"url": "https://github.com/armpitMFG/OSSM-Parts/blob/main/OSSM%20v2%20AIO%20PCB%20Backpack%20Mod/Files/OSSM%20Mods%20-%20AIO%20PCB%20Backpack%20-%20Cap%20(Default).stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "ossm-pcb-aio-backpack-cap",
|
||||||
|
"local_path": "vendor/armpitMFG-OSSM-Parts/OSSM v2 AIO PCB Backpack Mod/Files/OSSM Mods - AIO PCB Backpack - Cap (Default).stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hardwareParts": [
|
||||||
|
{
|
||||||
|
"id": "hardware-fasteners-m3x8-shcs",
|
||||||
|
"required": true,
|
||||||
|
"quantity": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
13
website/src/data/components/pcb/index.js
Normal file
13
website/src/data/components/pcb/index.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import ossm from './ossm.json';
|
||||||
|
import armpitmfg from './armpitmfg.json';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
"pcbMounts": {
|
||||||
|
"category": "PCB Mount",
|
||||||
|
"type": "base",
|
||||||
|
"systems": {
|
||||||
|
...ossm,
|
||||||
|
...armpitmfg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
69
website/src/data/components/pcb/ossm.json
Normal file
69
website/src/data/components/pcb/ossm.json
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"3030-mount": {
|
||||||
|
"name": "3030 Mount",
|
||||||
|
"description": "PCB mount for 3030 extrusion",
|
||||||
|
"image": "/images/options/3030-pcb-mount.png",
|
||||||
|
"category": "PCB Mount",
|
||||||
|
"type": "base",
|
||||||
|
"printedParts": [
|
||||||
|
{
|
||||||
|
"id": "ossm-pcb-3030-mount",
|
||||||
|
"name": "PCB 3030 Mount",
|
||||||
|
"description": "PCB mount for 3030 extrusion",
|
||||||
|
"filamentEstimate": 15,
|
||||||
|
"timeEstimate": "45m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "OSSM - PCB - 3030 Mount.stl",
|
||||||
|
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/PCB/OSSM%20-%20PCB%20-%203030%20Mount.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "ossm-pcb-3030-mount",
|
||||||
|
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/PCB/OSSM - PCB - 3030 Mount.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ossm-pcb-3030-mount-cover",
|
||||||
|
"name": "PCB 3030 Mount Cover",
|
||||||
|
"description": "Cover for the 3030 mount",
|
||||||
|
"filamentEstimate": 15,
|
||||||
|
"timeEstimate": "45m",
|
||||||
|
"colour": "primary",
|
||||||
|
"required": true,
|
||||||
|
"filePath": "OSSM - PCB - 3030 Mount Cover.stl",
|
||||||
|
"url": "https://github.com/KinkyMakers/OSSM-hardware/blob/main/Printed%20Parts/PCB/OSSM%20-%20PCB%20-%203030%20Mount%20Cover.stl?raw=true",
|
||||||
|
"vendor": {
|
||||||
|
"manifest_id": "ossm-pcb-3030-mount-cover",
|
||||||
|
"local_path": "vendor/KinkyMakers-OSSM-hardware/Printed Parts/PCB/OSSM - PCB - 3030 Mount Cover.stl",
|
||||||
|
"pinned_sha": null,
|
||||||
|
"pinned_raw_url": null,
|
||||||
|
"checksum_sha256": null,
|
||||||
|
"last_checked": null,
|
||||||
|
"status": "pending"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hardwareParts": [
|
||||||
|
{
|
||||||
|
"id": "hardware-fasteners-m6x12-shcs",
|
||||||
|
"required": true,
|
||||||
|
"quantity": 4,
|
||||||
|
"relatedParts": [
|
||||||
|
"ossm-pcb-3030-mount"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "hardware-fasteners-m6-t-nuts",
|
||||||
|
"required": true,
|
||||||
|
"quantity": 4,
|
||||||
|
"relatedParts": [
|
||||||
|
"ossm-pcb-3030-mount"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,23 +4,10 @@
|
|||||||
"sections": {
|
"sections": {
|
||||||
"mounts": {
|
"mounts": {
|
||||||
"title": "Mounts",
|
"title": "Mounts",
|
||||||
"options": [
|
"useComponents": "mounting",
|
||||||
{
|
"componentIds": [
|
||||||
"id": "middle-pivot",
|
"middle-pivot",
|
||||||
"name": "Middle Pivot",
|
"pitclamp"
|
||||||
"description": "Middle Pivot mounting system",
|
|
||||||
"image": "/images/options/middle-pivot.png",
|
|
||||||
"filamentEstimate": "~147g",
|
|
||||||
"type": "base"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "pitclamp",
|
|
||||||
"name": "PitClamp Mini",
|
|
||||||
"description": "PitClamp Mini mounting system",
|
|
||||||
"image": "/images/options/PitClamp Mini Base.png",
|
|
||||||
"filamentEstimate": "~137g",
|
|
||||||
"type": "base"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"isMultiSelect": false
|
"isMultiSelect": false
|
||||||
},
|
},
|
||||||
@@ -49,23 +36,10 @@
|
|||||||
},
|
},
|
||||||
"pcbMount": {
|
"pcbMount": {
|
||||||
"title": "PCB Mount",
|
"title": "PCB Mount",
|
||||||
"options": [
|
"useComponents": "pcbMounts",
|
||||||
{
|
"componentIds": [
|
||||||
"id": "3030-mount",
|
"3030-mount",
|
||||||
"name": "3030 Mount",
|
"aio-cover-mount"
|
||||||
"description": "PCB mount for 3030 extrusion",
|
|
||||||
"image": null,
|
|
||||||
"filamentEstimate": null,
|
|
||||||
"type": "base"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "aio-cover-mount",
|
|
||||||
"name": "AIO Cover Mount",
|
|
||||||
"description": "All-in-one cover mount on the actuator",
|
|
||||||
"image": null,
|
|
||||||
"filamentEstimate": null,
|
|
||||||
"type": "base"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"isMultiSelect": false
|
"isMultiSelect": false
|
||||||
}
|
}
|
||||||
@@ -77,19 +51,28 @@
|
|||||||
"hinges": {
|
"hinges": {
|
||||||
"title": "Hinges",
|
"title": "Hinges",
|
||||||
"useComponents": "hinges",
|
"useComponents": "hinges",
|
||||||
"componentIds": ["pivot-plate", "pitclamp-reinforced-3030"],
|
"componentIds": [
|
||||||
|
"pivot-plate",
|
||||||
|
"pitclamp-reinforced-3030"
|
||||||
|
],
|
||||||
"isMultiSelect": false
|
"isMultiSelect": false
|
||||||
},
|
},
|
||||||
"feet": {
|
"feet": {
|
||||||
"title": "Feet",
|
"title": "Feet",
|
||||||
"useComponents": "feet",
|
"useComponents": "feet",
|
||||||
"componentIds": ["standard-feet", "suction-feet"],
|
"componentIds": [
|
||||||
|
"standard-feet",
|
||||||
|
"suction-feet"
|
||||||
|
],
|
||||||
"isMultiSelect": false
|
"isMultiSelect": false
|
||||||
},
|
},
|
||||||
"crossbarSupports": {
|
"crossbarSupports": {
|
||||||
"title": "Crossbar Supports",
|
"title": "Crossbar Supports",
|
||||||
"useComponents": "crossbarSupports",
|
"useComponents": "crossbarSupports",
|
||||||
"componentIds": ["standard-90-degree-support", "3d-printed-90-degree-support"],
|
"componentIds": [
|
||||||
|
"standard-90-degree-support",
|
||||||
|
"3d-printed-90-degree-support"
|
||||||
|
],
|
||||||
"isMultiSelect": false
|
"isMultiSelect": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,24 +83,38 @@
|
|||||||
"sections": {
|
"sections": {
|
||||||
"vacULock": {
|
"vacULock": {
|
||||||
"title": "Vac-U-Lock",
|
"title": "Vac-U-Lock",
|
||||||
"componentIds": ["ossm-toy-mount-double-double-24mm-threaded", "ossm-toy-mount-double-double-rail-mounted"],
|
"componentIds": [
|
||||||
|
"ossm-toy-mount-double-double-24mm-threaded",
|
||||||
|
"ossm-toy-mount-double-double-rail-mounted"
|
||||||
|
],
|
||||||
"isMultiSelect": true
|
"isMultiSelect": true
|
||||||
},
|
},
|
||||||
"flangeMount": {
|
"flangeMount": {
|
||||||
"title": "Flange Mount",
|
"title": "Flange Mount",
|
||||||
"componentIds": ["ossm-toy-mount-flange-base-24mm-threaded", "ossm-toy-mount-flange-base-dildo-ring-2.5in", "ossm-toy-mount-flange-base-dildo-ring-2in"],
|
"componentIds": [
|
||||||
|
"ossm-toy-mount-flange-base-24mm-threaded",
|
||||||
|
"ossm-toy-mount-flange-base-dildo-ring-2.5in",
|
||||||
|
"ossm-toy-mount-flange-base-dildo-ring-2in"
|
||||||
|
],
|
||||||
"isMultiSelect": true
|
"isMultiSelect": true
|
||||||
},
|
},
|
||||||
"suCSOn": {
|
"suCSOn": {
|
||||||
"title": "SuCSOn",
|
"title": "SuCSOn",
|
||||||
"componentIds": ["ossm-toy-mount-sucson-mount-base-plate-24mm-threaded", "ossm-toy-mount-sucson-mount-ring-insert-55mm", "ossm-toy-mount-sucson-mount-threaded-ring"],
|
"componentIds": [
|
||||||
|
"ossm-toy-mount-sucson-mount-base-plate-24mm-threaded",
|
||||||
|
"ossm-toy-mount-sucson-mount-ring-insert-55mm",
|
||||||
|
"ossm-toy-mount-sucson-mount-threaded-ring"
|
||||||
|
],
|
||||||
"isMultiSelect": true
|
"isMultiSelect": true
|
||||||
},
|
},
|
||||||
"tieDown": {
|
"tieDown": {
|
||||||
"title": "TieDown",
|
"title": "TieDown",
|
||||||
"componentIds": ["ossm-toy-mount-tie-down-and-suction-plate-110mm", "ossm-toy-mount-tie-down-and-suction-plate-135mm"],
|
"componentIds": [
|
||||||
|
"ossm-toy-mount-tie-down-and-suction-plate-110mm",
|
||||||
|
"ossm-toy-mount-tie-down-and-suction-plate-135mm"
|
||||||
|
],
|
||||||
"isMultiSelect": true
|
"isMultiSelect": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,10 @@ import colors from './common/colors.json';
|
|||||||
import hardwareData from './common/hardware.json';
|
import hardwareData from './common/hardware.json';
|
||||||
import actuatorComponents from './components/actuator.json';
|
import actuatorComponents from './components/actuator.json';
|
||||||
import standComponents from './components/stand.json';
|
import standComponents from './components/stand.json';
|
||||||
import mountingComponents from './components/mounting.json';
|
import mountingComponents from './components/mounting/index.js';
|
||||||
import toyMountsComponents from './components/toyMounts/index.js';
|
import toyMountsComponents from './components/toyMounts/index.js';
|
||||||
import remoteComponents from './components/remote.json';
|
import remoteComponents from './components/remote.json';
|
||||||
import pcbComponents from './components/pcb.json';
|
import pcbComponents from './components/pcb/index.js';
|
||||||
|
|
||||||
// Create a hardware lookup map from hardware.json
|
// Create a hardware lookup map from hardware.json
|
||||||
const hardwareLookup = new Map();
|
const hardwareLookup = new Map();
|
||||||
|
|||||||
Reference in New Issue
Block a user