+
+ {t('settings.slicerBundles.description', {
+ defaultValue:
+ 'Import a Printer Preset Bundle (.bbscfg) exported from BambuStudio (File → Export → Export Preset Bundle → "Printer preset bundle"). Once imported, slice requests can pick presets from the bundle by name without re-uploading the JSON profile triplet.',
+ })}
+
+
+
+
+ fileInputRef.current?.click()}
+ disabled={importMutation.isPending}
+ >
+ {importMutation.isPending ? (
+ <>
+
+ {t('settings.slicerBundles.uploading', { defaultValue: 'Uploading…' })}
+ >
+ ) : (
+ <>
+
+ {t('settings.slicerBundles.uploadButton', { defaultValue: 'Upload bundle' })}
+ >
+ )}
+
+
+
+ {isLoading ? (
+
+
+ {t('settings.slicerBundles.loading', { defaultValue: 'Loading bundles…' })}
+
+ ) : bundles && bundles.length > 0 ? (
+
+ {bundles.map((b) => (
+
+
+
{b.printer_preset_name}
+
+ {t('settings.slicerBundles.summary', {
+ defaultValue:
+ '{{processCount}} process · {{filamentCount}} filament presets',
+ processCount: b.process.length,
+ filamentCount: b.filament.length,
+ })}
+ {b.version && ` · v${b.version}`}
+
+
+ setPendingDelete(b)}
+ disabled={deleteMutation.isPending}
+ className="ml-3 p-1.5 text-bambu-gray hover:text-red-400 disabled:opacity-40"
+ aria-label={t('settings.slicerBundles.delete', { defaultValue: 'Delete' })}
+ >
+
+
+
+ ))}
+
+ ) : (
+
+ {t('settings.slicerBundles.empty', {
+ defaultValue: 'No bundles imported yet.',
+ })}
+
+ )}
+
+
+ {pendingDelete && (
+