|
|
@@ -63,78 +63,266 @@ import { FilamentHoverCard, EmptySlotHoverCard } from '../components/FilamentHov
|
|
|
import { LinkSpoolModal } from '../components/LinkSpoolModal';
|
|
|
import { useToast } from '../contexts/ToastContext';
|
|
|
|
|
|
-// Bambu Lab color code mapping (color suffix from tray_id_name -> color name)
|
|
|
-// tray_id_name format: "A00-Y2" where Y2 is the color code
|
|
|
-const BAMBU_COLOR_CODES: Record<string, string> = {
|
|
|
- // Yellows
|
|
|
- 'Y0': 'Yellow',
|
|
|
- 'Y1': 'Savana Yellow',
|
|
|
- 'Y2': 'Sunflower Yellow',
|
|
|
- 'Y3': 'Lemon Yellow',
|
|
|
- // Oranges
|
|
|
- 'O0': 'Orange',
|
|
|
- 'O1': 'Mandarin Orange',
|
|
|
- 'O2': 'Coral Orange',
|
|
|
- // Reds
|
|
|
- 'R0': 'Red',
|
|
|
- 'R1': 'Scarlet Red',
|
|
|
- 'R2': 'Magenta',
|
|
|
- 'R3': 'Sakura Pink',
|
|
|
- 'R4': 'Raspberry Red',
|
|
|
- // Pinks
|
|
|
- 'P0': 'Pink',
|
|
|
- 'P1': 'Sakura Pink',
|
|
|
- // Purples
|
|
|
- 'V0': 'Purple',
|
|
|
- 'V1': 'Violet',
|
|
|
- 'V2': 'Lilac Purple',
|
|
|
- // Blues
|
|
|
- 'B0': 'Blue',
|
|
|
- 'B1': 'Sky Blue',
|
|
|
- 'B2': 'Navy Blue',
|
|
|
- 'B3': 'Ice Blue',
|
|
|
- 'B4': 'Cyan',
|
|
|
- // Greens
|
|
|
- 'G0': 'Green',
|
|
|
- 'G1': 'Grass Green',
|
|
|
- 'G2': 'Lime Green',
|
|
|
- 'G3': 'Mint Green',
|
|
|
- 'G4': 'Olive Green',
|
|
|
- 'G5': 'Jungle Green',
|
|
|
- 'G6': 'Bambu Green',
|
|
|
- // Browns
|
|
|
- 'N0': 'Brown',
|
|
|
- 'N1': 'Peanut Brown',
|
|
|
- 'N2': 'Coffee Brown',
|
|
|
- 'N3': 'Caramel Brown',
|
|
|
- // Grays
|
|
|
- 'A0': 'Gray',
|
|
|
- 'A1': 'Charcoal Gray',
|
|
|
- 'A2': 'Silver Gray',
|
|
|
- 'A3': 'Titan Gray',
|
|
|
- // Blacks
|
|
|
- 'K0': 'Black',
|
|
|
- 'K1': 'Black',
|
|
|
- // Whites
|
|
|
- 'W0': 'White',
|
|
|
- 'W1': 'Jade White',
|
|
|
- 'W2': 'Ivory White',
|
|
|
- // Special
|
|
|
- 'T0': 'Transparent',
|
|
|
- 'C0': 'Marble',
|
|
|
- 'X0': 'Bronze',
|
|
|
- 'X1': 'Gold',
|
|
|
- 'X2': 'Silver',
|
|
|
+// Complete Bambu Lab filament color mapping by tray_id_name
|
|
|
+// Source: https://github.com/queengooborg/Bambu-Lab-RFID-Library
|
|
|
+const BAMBU_FILAMENT_COLORS: Record<string, string> = {
|
|
|
+ // PLA Basic (A00)
|
|
|
+ 'A00-W1': 'Jade White',
|
|
|
+ 'A00-P0': 'Beige',
|
|
|
+ 'A00-D2': 'Light Gray',
|
|
|
+ 'A00-Y0': 'Yellow',
|
|
|
+ 'A00-Y2': 'Sunflower Yellow',
|
|
|
+ 'A00-A1': 'Pumpkin Orange',
|
|
|
+ 'A00-A0': 'Orange',
|
|
|
+ 'A00-Y4': 'Gold',
|
|
|
+ 'A00-G3': 'Bright Green',
|
|
|
+ 'A00-G1': 'Bambu Green',
|
|
|
+ 'A00-G2': 'Mistletoe Green',
|
|
|
+ 'A00-R3': 'Hot Pink',
|
|
|
+ 'A00-P6': 'Magenta',
|
|
|
+ 'A00-R0': 'Red',
|
|
|
+ 'A00-R2': 'Maroon Red',
|
|
|
+ 'A00-P5': 'Purple',
|
|
|
+ 'A00-P2': 'Indigo Purple',
|
|
|
+ 'A00-B5': 'Turquoise',
|
|
|
+ 'A00-B8': 'Cyan',
|
|
|
+ 'A00-B3': 'Cobalt Blue',
|
|
|
+ 'A00-N0': 'Brown',
|
|
|
+ 'A00-N1': 'Cocoa Brown',
|
|
|
+ 'A00-Y3': 'Bronze',
|
|
|
+ 'A00-D0': 'Gray',
|
|
|
+ 'A00-D1': 'Silver',
|
|
|
+ 'A00-B1': 'Blue Grey',
|
|
|
+ 'A00-D3': 'Dark Gray',
|
|
|
+ 'A00-K0': 'Black',
|
|
|
+ // PLA Basic Gradient (A00-M*)
|
|
|
+ 'A00-M3': 'Pink Citrus',
|
|
|
+ 'A00-M6': 'Dusk Glare',
|
|
|
+ 'A00-M0': 'Arctic Whisper',
|
|
|
+ 'A00-M1': 'Solar Breeze',
|
|
|
+ 'A00-M5': 'Blueberry Bubblegum',
|
|
|
+ 'A00-M4': 'Mint Lime',
|
|
|
+ 'A00-M2': 'Ocean to Meadow',
|
|
|
+ 'A00-M7': 'Cotton Candy Cloud',
|
|
|
+ // PLA Lite (A18)
|
|
|
+ 'A18-K0': 'Black',
|
|
|
+ 'A18-D0': 'Gray',
|
|
|
+ 'A18-W0': 'White',
|
|
|
+ 'A18-R0': 'Red',
|
|
|
+ 'A18-Y0': 'Yellow',
|
|
|
+ 'A18-B0': 'Cyan',
|
|
|
+ 'A18-B1': 'Blue',
|
|
|
+ 'A18-P0': 'Matte Beige',
|
|
|
+ // PLA Matte (A01)
|
|
|
+ 'A01-W2': 'Ivory White',
|
|
|
+ 'A01-W3': 'Bone White',
|
|
|
+ 'A01-Y2': 'Lemon Yellow',
|
|
|
+ 'A01-A2': 'Mandarin Orange',
|
|
|
+ 'A01-P3': 'Sakura Pink',
|
|
|
+ 'A01-P4': 'Lilac Purple',
|
|
|
+ 'A01-R3': 'Plum',
|
|
|
+ 'A01-R1': 'Scarlet Red',
|
|
|
+ 'A01-R4': 'Dark Red',
|
|
|
+ 'A01-G0': 'Apple Green',
|
|
|
+ 'A01-G1': 'Grass Green',
|
|
|
+ 'A01-G7': 'Dark Green',
|
|
|
+ 'A01-B4': 'Ice Blue',
|
|
|
+ 'A01-B0': 'Sky Blue',
|
|
|
+ 'A01-B3': 'Marine Blue',
|
|
|
+ 'A01-B6': 'Dark Blue',
|
|
|
+ 'A01-Y3': 'Desert Tan',
|
|
|
+ 'A01-N1': 'Latte Brown',
|
|
|
+ 'A01-N3': 'Caramel',
|
|
|
+ 'A01-R2': 'Terracotta',
|
|
|
+ 'A01-N2': 'Dark Brown',
|
|
|
+ 'A01-N0': 'Dark Chocolate',
|
|
|
+ 'A01-D3': 'Ash Gray',
|
|
|
+ 'A01-D0': 'Nardo Gray',
|
|
|
+ 'A01-K1': 'Charcoal',
|
|
|
+ // PLA Glow (A12)
|
|
|
+ 'A12-G0': 'Green',
|
|
|
+ 'A12-R0': 'Pink',
|
|
|
+ 'A12-A0': 'Orange',
|
|
|
+ 'A12-Y0': 'Yellow',
|
|
|
+ 'A12-B0': 'Blue',
|
|
|
+ // PLA Marble (A07)
|
|
|
+ 'A07-R5': 'Red Granite',
|
|
|
+ 'A07-D4': 'White Marble',
|
|
|
+ // PLA Aero (A11)
|
|
|
+ 'A11-W0': 'White',
|
|
|
+ 'A11-K0': 'Black',
|
|
|
+ // PLA Sparkle (A08)
|
|
|
+ 'A08-G3': 'Alpine Green Sparkle',
|
|
|
+ 'A08-D5': 'Slate Gray Sparkle',
|
|
|
+ 'A08-B7': 'Royal Purple Sparkle',
|
|
|
+ 'A08-R2': 'Crimson Red Sparkle',
|
|
|
+ 'A08-K2': 'Onyx Black Sparkle',
|
|
|
+ 'A08-Y1': 'Classic Gold Sparkle',
|
|
|
+ // PLA Metal (A02)
|
|
|
+ 'A02-B2': 'Cobalt Blue Metallic',
|
|
|
+ 'A02-G2': 'Oxide Green Metallic',
|
|
|
+ 'A02-Y1': 'Iridium Gold Metallic',
|
|
|
+ 'A02-D2': 'Iron Gray Metallic',
|
|
|
+ // PLA Translucent (A17)
|
|
|
+ 'A17-B1': 'Blue',
|
|
|
+ 'A17-A0': 'Orange',
|
|
|
+ 'A17-P0': 'Purple',
|
|
|
+ // PLA Silk+ (A06)
|
|
|
+ 'A06-Y1': 'Gold',
|
|
|
+ 'A06-D0': 'Titan Gray',
|
|
|
+ 'A06-D1': 'Silver',
|
|
|
+ 'A06-W0': 'White',
|
|
|
+ 'A06-R0': 'Candy Red',
|
|
|
+ 'A06-G0': 'Candy Green',
|
|
|
+ 'A06-G1': 'Mint',
|
|
|
+ 'A06-B1': 'Blue',
|
|
|
+ 'A06-B0': 'Baby Blue',
|
|
|
+ 'A06-P0': 'Purple',
|
|
|
+ 'A06-R1': 'Rose Gold',
|
|
|
+ 'A06-R2': 'Pink',
|
|
|
+ 'A06-Y0': 'Champagne',
|
|
|
+ // PLA Silk Multi-Color (A05)
|
|
|
+ 'A05-M8': 'Dawn Radiance',
|
|
|
+ 'A05-M4': 'Aurora Purple',
|
|
|
+ 'A05-M1': 'South Beach',
|
|
|
+ 'A05-T3': 'Neon City',
|
|
|
+ 'A05-T2': 'Midnight Blaze',
|
|
|
+ 'A05-T1': 'Gilded Rose',
|
|
|
+ 'A05-T4': 'Blue Hawaii',
|
|
|
+ 'A05-T5': 'Velvet Eclipse',
|
|
|
+ // PLA Galaxy (A15)
|
|
|
+ 'A15-B0': 'Purple',
|
|
|
+ 'A15-G0': 'Green',
|
|
|
+ 'A15-G1': 'Nebulae',
|
|
|
+ 'A15-R0': 'Brown',
|
|
|
+ // PLA Wood (A16)
|
|
|
+ 'A16-K0': 'Black Walnut',
|
|
|
+ 'A16-R0': 'Rosewood',
|
|
|
+ 'A16-N0': 'Clay Brown',
|
|
|
+ 'A16-G0': 'Classic Birch',
|
|
|
+ 'A16-W0': 'White Oak',
|
|
|
+ 'A16-Y0': 'Ochre Yellow',
|
|
|
+ // PLA-CF (A50)
|
|
|
+ 'A50-D6': 'Lava Gray',
|
|
|
+ 'A50-K0': 'Black',
|
|
|
+ 'A50-B6': 'Royal Blue',
|
|
|
+ // PLA Tough+ (A10)
|
|
|
+ 'A10-W0': 'White',
|
|
|
+ 'A10-D0': 'Gray',
|
|
|
+ // PLA Tough (A09)
|
|
|
+ 'A09-B5': 'Lavender Blue',
|
|
|
+ 'A09-B4': 'Light Blue',
|
|
|
+ 'A09-A0': 'Orange',
|
|
|
+ 'A09-D1': 'Silver',
|
|
|
+ 'A09-R3': 'Vermilion Red',
|
|
|
+ 'A09-Y0': 'Yellow',
|
|
|
+ // PETG HF (G02)
|
|
|
+ 'G02-K0': 'Black',
|
|
|
+ 'G02-W0': 'White',
|
|
|
+ 'G02-R0': 'Red',
|
|
|
+ 'G02-D0': 'Gray',
|
|
|
+ 'G02-D1': 'Dark Gray',
|
|
|
+ 'G02-Y1': 'Cream',
|
|
|
+ 'G02-Y0': 'Yellow',
|
|
|
+ 'G02-A0': 'Orange',
|
|
|
+ 'G02-N1': 'Peanut Brown',
|
|
|
+ 'G02-G1': 'Lime Green',
|
|
|
+ 'G02-G0': 'Green',
|
|
|
+ 'G02-G2': 'Forest Green',
|
|
|
+ 'G02-B1': 'Lake Blue',
|
|
|
+ 'G02-B0': 'Blue',
|
|
|
+ // PETG Translucent (G01)
|
|
|
+ 'G01-G1': 'Translucent Teal',
|
|
|
+ 'G01-B0': 'Translucent Light Blue',
|
|
|
+ 'G01-C0': 'Clear',
|
|
|
+ 'G01-D0': 'Translucent Gray',
|
|
|
+ 'G01-G0': 'Translucent Olive',
|
|
|
+ 'G01-N0': 'Translucent Brown',
|
|
|
+ 'G01-A0': 'Translucent Orange',
|
|
|
+ 'G01-P1': 'Translucent Pink',
|
|
|
+ 'G01-P0': 'Translucent Purple',
|
|
|
+ // PETG-CF (G50)
|
|
|
+ 'G50-P7': 'Violet Purple',
|
|
|
+ 'G50-K0': 'Black',
|
|
|
+ // ABS (B00)
|
|
|
+ 'B00-D1': 'Silver',
|
|
|
+ 'B00-K0': 'Black',
|
|
|
+ 'B00-W0': 'White',
|
|
|
+ 'B00-G6': 'Bambu Green',
|
|
|
+ 'B00-G7': 'Olive',
|
|
|
+ 'B00-Y1': 'Tangerine Yellow',
|
|
|
+ 'B00-A0': 'Orange',
|
|
|
+ 'B00-R0': 'Red',
|
|
|
+ 'B00-B4': 'Azure',
|
|
|
+ 'B00-B0': 'Blue',
|
|
|
+ 'B00-B6': 'Navy Blue',
|
|
|
+ // ABS-GF (B50)
|
|
|
+ 'B50-A0': 'Orange',
|
|
|
+ 'B50-K0': 'Black',
|
|
|
+ // ASA (B01)
|
|
|
+ 'B01-W0': 'White',
|
|
|
+ 'B01-K0': 'Black',
|
|
|
+ 'B01-D0': 'Gray',
|
|
|
+ // ASA Aero (B02)
|
|
|
+ 'B02-W0': 'White',
|
|
|
+ // PC (C00)
|
|
|
+ 'C00-C1': 'Transparent',
|
|
|
+ 'C00-C0': 'Clear Black',
|
|
|
+ 'C00-K0': 'Black',
|
|
|
+ 'C00-W0': 'White',
|
|
|
+ // PC FR (C01)
|
|
|
+ 'C01-K0': 'Black',
|
|
|
+ // TPU for AMS (U02)
|
|
|
+ 'U02-B0': 'Blue',
|
|
|
+ 'U02-D0': 'Gray',
|
|
|
+ 'U02-K0': 'Black',
|
|
|
+ // PAHT-CF (N04)
|
|
|
+ 'N04-K0': 'Black',
|
|
|
+ // PA6-GF (N08)
|
|
|
+ 'N08-K0': 'Black',
|
|
|
+ // Support for PLA/PETG (S02, S05)
|
|
|
+ 'S02-W0': 'Nature',
|
|
|
+ 'S02-W1': 'White',
|
|
|
+ 'S05-C0': 'Black',
|
|
|
+ // Support for ABS (S06)
|
|
|
+ 'S06-W0': 'White',
|
|
|
+ // Support for PA/PET (S03)
|
|
|
+ 'S03-G1': 'Green',
|
|
|
+ // PVA (S04)
|
|
|
+ 'S04-Y0': 'Clear',
|
|
|
+};
|
|
|
+
|
|
|
+// Fallback color codes for unknown material prefixes
|
|
|
+const BAMBU_COLOR_CODE_FALLBACK: Record<string, string> = {
|
|
|
+ 'W0': 'White', 'W1': 'Jade White', 'W2': 'Ivory White', 'W3': 'Bone White',
|
|
|
+ 'Y0': 'Yellow', 'Y1': 'Gold', 'Y2': 'Sunflower Yellow', 'Y3': 'Bronze', 'Y4': 'Gold',
|
|
|
+ 'A0': 'Orange', 'A1': 'Pumpkin Orange', 'A2': 'Mandarin Orange',
|
|
|
+ 'R0': 'Red', 'R1': 'Scarlet Red', 'R2': 'Maroon Red', 'R3': 'Hot Pink', 'R4': 'Dark Red', 'R5': 'Red Granite',
|
|
|
+ 'P0': 'Beige', 'P1': 'Pink', 'P2': 'Indigo Purple', 'P3': 'Sakura Pink', 'P4': 'Lilac Purple', 'P5': 'Purple', 'P6': 'Magenta', 'P7': 'Violet Purple',
|
|
|
+ 'B0': 'Blue', 'B1': 'Blue Grey', 'B2': 'Cobalt Blue', 'B3': 'Cobalt Blue', 'B4': 'Ice Blue', 'B5': 'Turquoise', 'B6': 'Navy Blue', 'B7': 'Royal Purple', 'B8': 'Cyan',
|
|
|
+ 'G0': 'Green', 'G1': 'Grass Green', 'G2': 'Mistletoe Green', 'G3': 'Bright Green', 'G6': 'Bambu Green', 'G7': 'Dark Green',
|
|
|
+ 'N0': 'Brown', 'N1': 'Peanut Brown', 'N2': 'Dark Brown', 'N3': 'Caramel',
|
|
|
+ 'D0': 'Gray', 'D1': 'Silver', 'D2': 'Light Gray', 'D3': 'Dark Gray', 'D4': 'White Marble', 'D5': 'Slate Gray', 'D6': 'Lava Gray',
|
|
|
+ 'K0': 'Black', 'K1': 'Charcoal', 'K2': 'Onyx Black',
|
|
|
+ 'C0': 'Clear Black', 'C1': 'Transparent',
|
|
|
+ 'M0': 'Arctic Whisper', 'M1': 'Solar Breeze', 'M2': 'Ocean to Meadow', 'M3': 'Pink Citrus', 'M4': 'Aurora Purple', 'M5': 'Blueberry Bubblegum', 'M6': 'Dusk Glare', 'M7': 'Cotton Candy Cloud', 'M8': 'Dawn Radiance',
|
|
|
+ 'T1': 'Gilded Rose', 'T2': 'Midnight Blaze', 'T3': 'Neon City', 'T4': 'Blue Hawaii', 'T5': 'Velvet Eclipse',
|
|
|
};
|
|
|
|
|
|
// Get color name from Bambu Lab tray_id_name (e.g., "A00-Y2" -> "Sunflower Yellow")
|
|
|
function getBambuColorName(trayIdName: string | null | undefined): string | null {
|
|
|
if (!trayIdName) return null;
|
|
|
- // Extract color code after the dash (e.g., "A00-Y2" -> "Y2")
|
|
|
+
|
|
|
+ // First try exact match with full tray_id_name
|
|
|
+ if (BAMBU_FILAMENT_COLORS[trayIdName]) {
|
|
|
+ return BAMBU_FILAMENT_COLORS[trayIdName];
|
|
|
+ }
|
|
|
+
|
|
|
+ // Fall back to color code suffix lookup for unknown material prefixes
|
|
|
const parts = trayIdName.split('-');
|
|
|
if (parts.length < 2) return null;
|
|
|
const colorCode = parts[1];
|
|
|
- return BAMBU_COLOR_CODES[colorCode] || null;
|
|
|
+ return BAMBU_COLOR_CODE_FALLBACK[colorCode] || null;
|
|
|
}
|
|
|
|
|
|
// Convert hex color to basic color name
|