diff --git a/frontend/src/components/simulator/ComponentPropertyDialog.tsx b/frontend/src/components/simulator/ComponentPropertyDialog.tsx index 89ce04fe..4311d2f1 100644 --- a/frontend/src/components/simulator/ComponentPropertyDialog.tsx +++ b/frontend/src/components/simulator/ComponentPropertyDialog.tsx @@ -336,8 +336,11 @@ export const ComponentPropertyDialog: React.FC = ( )} {/* microSD card — upload your own files (paid). Free auto-copy of the - project's files happens at simulation start, not here. */} - {componentMetadata.id === 'microsd-card' && ( + project's files happens at simulation start, not here. Parts that + carry their OWN TF slot (metadata.sdSlot, e.g. the Seeed Round + Display shield) get the same panel: their attach reads + properties.sdFiles when it builds the card image. */} + {(componentMetadata.id === 'microsd-card' || componentMetadata.sdSlot === true) && ( onPropertyChange?.(componentId, 'sdFiles', next)} diff --git a/frontend/src/types/component-metadata.ts b/frontend/src/types/component-metadata.ts index 5fc808f4..dffaf4cb 100644 --- a/frontend/src/types/component-metadata.ts +++ b/frontend/src/types/component-metadata.ts @@ -51,6 +51,12 @@ export interface ComponentMetadata { // ComponentRegistry sorts featured components first after loading the // metadata, keeping the original order within each group. featured?: boolean; + // The part carries a microSD/TF slot of its own (e.g. the Seeed Round + // Display shield). The property dialog shows the same "SD Card" upload + // panel the standalone microsd-card gets, and the part's simulation reads + // `properties.sdFiles` when it builds the card image. Without this flag a + // built-in slot exists electrically but there is no way to put files on it. + sdSlot?: boolean; } export interface ComponentMetadataCollection {