5 Commits

Author SHA1 Message Date
DaX
f982ae3410 Update filament catalog: add new materials, finishes, and colors
All checks were successful
Deploy / detect (push) Successful in 6s
Deploy / deploy-api (push) Has been skipped
Deploy / deploy-frontend (push) Successful in 2m18s
Deploy / tag-deploy (push) Successful in 4s
- Add PLA Translucent, PLA Aero, TPU for AMS as new material/finish entries
- Add PA6 CF finish, expand PA6-GF, PC Basic, PC FR color lists
- Move 7 colors from PLA Basic Gradient to PLA Silk Multi-Color
- Add colors to PLA Basic, Silk+, Tough+, Galaxy, Wood, PETG HF, ABS-GF,
  TPU 85A, TPU 95A HF
- Remove Jade White from PETG HF, White from TPU 85A
- Fix Translucent Tea typo to Translucent Teal in PETG catalog
- Remove "Druga boja..." custom option from dashboard color picker
- Add missing hex entries to color lookup table
2026-03-05 13:41:20 +01:00
DaX
2a3bc5fdd8 Add migration 024: fix colors cleanup for partial 023 state
All checks were successful
Deploy / detect (push) Successful in 7s
Deploy / deploy-frontend (push) Has been skipped
Deploy / deploy-api (push) Successful in 30s
Deploy / tag-deploy (push) Successful in 4s
2026-03-05 03:26:42 +01:00
DaX
063ef4f096 Fix all color hex codes to match spreadsheet source of truth
All checks were successful
Deploy / detect (push) Successful in 4s
Deploy / deploy-api (push) Successful in 43s
Deploy / deploy-frontend (push) Successful in 3m11s
Deploy / tag-deploy (push) Successful in 6s
- Update 121 hex codes in bambuLabColors.ts from spreadsheet
- Update 118 hex codes in bambuLabColorsComplete.ts
- Add 118 hex UPDATE statements to migration 023
- Remove ABS GF and TPU 95A HF entries from complete colors
2026-03-05 03:21:44 +01:00
DaX
d55d0e5e02 Clean up fake colors and add missing Bambu Lab colors
All checks were successful
Deploy / detect (push) Successful in 4s
Deploy / deploy-api (push) Successful in 34s
Deploy / deploy-frontend (push) Successful in 2m4s
Deploy / tag-deploy (push) Successful in 4s
- Add migration 023: delete 67 fake colors, rename IronGray typo, add 16 missing real colors from spreadsheet
- Fix frontend color mappings: remove typo duplicates, rename Silk prefixed colors to match catalog
- Add Translucent Teal, Phantom Blue, Mystic Magenta mappings
- Remove non-existent ABS GF, TPU 95A HF entries
- Update tests for corrected color names
2026-03-05 03:04:19 +01:00
DaX
cff73c1381 Add manual customer creation and fix color edit modal
All checks were successful
Deploy / detect (push) Successful in 4s
Deploy / deploy-frontend (push) Successful in 2m24s
Deploy / tag-deploy (push) Successful in 5s
Deploy / deploy-api (push) Has been skipped
- Add "Dodaj kupca" button and modal form to customers page
- Fix color edit modal dark mode styling and add backdrop blur
2026-03-05 02:35:13 +01:00
11 changed files with 944 additions and 287 deletions

View File

@@ -48,14 +48,14 @@ scripts/deploy-frontend.sh # Manual frontend deploy to S3/CloudFront
### Frontend (Next.js App Router)
- `/app/page.tsx` — Public filament inventory table (home page)
- `/app/upadaj/` — Admin panel: login, `/dashboard` (filament CRUD), `/colors` (color management), `/requests` (customer color requests)
- `/app/upadaj/` — Admin panel: login, `/dashboard` (filament CRUD), `/colors` (color management), `/customers` (customer management), `/sales` (sales recording), `/requests` (customer color requests), `/analytics` (revenue/inventory dashboards)
- `/src/services/api.ts` — Axios instance with auth interceptors (auto token injection, 401/403 redirect)
- `/src/data/bambuLabColors.ts` — Primary color-to-hex mapping with gradient support (used by `ColorCell` component)
- `/src/data/bambuLabColorsComplete.ts` — Extended color database grouped by finish type (used by filters)
### API (`/api/server.js`)
Single-file Express server running on EC2 (port 80). All routes inline.
- Endpoints: `/api/login`, `/api/filaments`, `/api/colors`, `/api/sale/bulk`, `/api/color-requests`
- Endpoints: `/api/login`, `/api/filaments`, `/api/colors`, `/api/customers`, `/api/sales`, `/api/color-requests`, `/api/analytics/*`
- Auth: JWT tokens with 24h expiry, single admin user (password from `ADMIN_PASSWORD` env var)
### Database (PostgreSQL on RDS)
@@ -64,13 +64,15 @@ Key schemas and constraints:
```
filaments: id, tip (material), finish, boja (color), refill, spulna, kolicina, cena, sale_*
colors: id, name, hex, cena_refill (default 3499), cena_spulna (default 3999)
customers: id, name, phone (unique), city, notes, created_at
sales: id, customer_id (FK→customers), total_amount, notes, created_at + sale_items join table
color_requests: id, color_name, message, contact_name, contact_phone, status
```
**Critical constraints:**
- `filaments.boja` → FK to `colors.name` (ON UPDATE CASCADE) — colors must exist before filaments reference them
- `kolicina = refill + spulna` — enforced by check constraint
- Migrations in `/database/migrations/` with sequential numbering (currently up to `020_`)
- Migrations in `/database/migrations/` with sequential numbering (currently up to `023_`)
## Key Patterns
@@ -86,7 +88,7 @@ color_requests: id, color_name, message, contact_name, contact_phone, status
3. Optionally add to `src/data/bambuLabColorsComplete.ts` finish groups
### API Communication
- Service modules in `src/services/api.ts`: `authService`, `colorService`, `filamentService`, `colorRequestService`
- Service modules in `src/services/api.ts`: `authService`, `colorService`, `filamentService`, `colorRequestService`, `customerService`, `saleService`, `analyticsService`
- Auth token stored in localStorage with 24h expiry
- Cache busting on filament fetches via timestamp query param

View File

@@ -33,9 +33,9 @@ describe('Bambu Lab Colors Data', () => {
});
});
it('should have Unknown fallback color', () => {
expect(bambuLabColors).toHaveProperty('Unknown');
expect(bambuLabColors.Unknown.hex).toBe('#CCCCCC');
it('should return fallback for unknown colors', () => {
const result = getFilamentColor('NonExistentColor');
expect(result.hex).toBe('#CCCCCC');
});
});

View File

@@ -21,9 +21,9 @@ describe('Bambu Lab Colors Complete Data', () => {
});
it('should have silk colors', () => {
expect(bambuLabColors).toHaveProperty('Silk Aurora Purple');
expect(bambuLabColors).toHaveProperty('Silk Phantom Blue');
expect(bambuLabColors).toHaveProperty('Silk Mystic Magenta');
expect(bambuLabColors).toHaveProperty('Aurora Purple');
expect(bambuLabColors).toHaveProperty('Phantom Blue');
expect(bambuLabColors).toHaveProperty('Mystic Magenta');
});
it('should have valid hex colors', () => {
@@ -50,7 +50,7 @@ describe('Bambu Lab Colors Complete Data', () => {
it('should return valid hex for getColorHex', () => {
const hex = getColorHex('Black');
expect(hex).toBe('#000000');
expect(hex).toBe('#1A1A1A');
const unknownHex = getColorHex('Unknown Color');
expect(unknownHex).toBe('#000000');

View File

@@ -887,7 +887,6 @@ function FilamentForm({
{color.name}
</option>
))}
<option value="custom">Druga boja...</option>
</select>
</div>

View File

@@ -370,10 +370,24 @@ export default function ColorsManagement() {
{/* Edit Modal */}
{editingColor && (
<div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4">
<div className="bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-auto">
<div
className="fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4"
onClick={() => setEditingColor(null)}
>
<div
className="bg-white dark:bg-gray-800 rounded-xl shadow-2xl border border-gray-200 dark:border-gray-700 max-w-md w-full max-h-[90vh] overflow-auto"
onClick={(e) => e.stopPropagation()}
>
<div className="flex justify-between items-center p-6 pb-0">
<h3 className="text-xl font-bold text-gray-900 dark:text-white">Izmeni boju</h3>
<button
onClick={() => setEditingColor(null)}
className="text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-2xl leading-none"
>
&times;
</button>
</div>
<div className="p-6">
<h3 className="text-xl font-bold mb-4 text-gray-900 dark:text-white">Izmeni boju</h3>
<ColorForm
color={editingColor}
onSave={(color) => {
@@ -477,7 +491,7 @@ function ColorForm({
readOnly={isBambuLabColor}
pattern="^#[0-9A-Fa-f]{6}$"
placeholder="#000000"
className={`flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 ${isBambuLabColor ? 'bg-gray-100 dark:bg-gray-900 cursor-not-allowed' : ''}`}
className={`flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 ${isBambuLabColor ? 'bg-gray-100 dark:bg-gray-900 cursor-not-allowed' : 'bg-white dark:bg-gray-700'}`}
/>
</div>
{isBambuLabColor && (

View File

@@ -25,6 +25,10 @@ export default function CustomersManagement() {
const [saving, setSaving] = useState(false);
const [darkMode, setDarkMode] = useState(false);
const [mounted, setMounted] = useState(false);
const [showAddModal, setShowAddModal] = useState(false);
const [addForm, setAddForm] = useState({ name: '', phone: '', city: '', notes: '' });
const [addError, setAddError] = useState('');
const [addSaving, setAddSaving] = useState(false);
// Initialize dark mode
useEffect(() => {
@@ -139,6 +143,35 @@ export default function CustomersManagement() {
}
};
const handleAddCustomer = async () => {
if (!addForm.name.trim()) {
setAddError('Ime je obavezno');
return;
}
setAddSaving(true);
setAddError('');
try {
await customerService.create({
name: addForm.name.trim(),
phone: addForm.phone.trim() || undefined,
city: addForm.city.trim() || undefined,
notes: addForm.notes.trim() || undefined,
});
setShowAddModal(false);
setAddForm({ name: '', phone: '', city: '', notes: '' });
await fetchCustomers();
} catch (err: unknown) {
const error = err as { response?: { data?: { code?: string } } };
if (error.response?.data?.code === '23505') {
setAddError('Kupac sa ovim brojem telefona vec postoji');
} else {
setAddError('Greska pri dodavanju kupca');
}
} finally {
setAddSaving(false);
}
};
const handleLogout = () => {
localStorage.removeItem('authToken');
localStorage.removeItem('tokenExpiry');
@@ -230,8 +263,8 @@ export default function CustomersManagement() {
</div>
)}
{/* Search bar */}
<div className="mb-6">
{/* Search bar + Add button */}
<div className="mb-6 flex items-center gap-4">
<input
type="text"
placeholder="Pretrazi kupce..."
@@ -239,6 +272,12 @@ export default function CustomersManagement() {
onChange={(e) => setSearchTerm(e.target.value)}
className="w-full max-w-md px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 focus:ring-2 focus:ring-blue-500 focus:border-transparent"
/>
<button
onClick={() => setShowAddModal(true)}
className="px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 whitespace-nowrap font-medium"
>
+ Dodaj kupca
</button>
</div>
{/* Customer count */}
@@ -488,6 +527,108 @@ export default function CustomersManagement() {
</main>
</div>
</div>
{/* Add Customer Modal */}
{showAddModal && (
<div
className="fixed inset-0 bg-black/50 flex items-center justify-center z-50"
onClick={() => setShowAddModal(false)}
>
<div
className="bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-md mx-4 p-6"
onClick={(e) => e.stopPropagation()}
>
<div className="flex justify-between items-center mb-4">
<h2 className="text-xl font-bold text-gray-900 dark:text-white">
Dodaj kupca
</h2>
<button
onClick={() => setShowAddModal(false)}
className="text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-2xl leading-none"
>
&times;
</button>
</div>
{addError && (
<div className="mb-4 p-3 bg-red-50 dark:bg-red-900/20 text-red-800 dark:text-red-400 rounded text-sm">
{addError}
</div>
)}
<div className="space-y-4">
<div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
Ime *
</label>
<input
type="text"
value={addForm.name}
onChange={(e) => setAddForm({ ...addForm, name: e.target.value })}
className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-green-500 focus:border-transparent"
placeholder="Ime i prezime"
autoFocus
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
Telefon
</label>
<input
type="text"
value={addForm.phone}
onChange={(e) => setAddForm({ ...addForm, phone: e.target.value })}
className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-green-500 focus:border-transparent"
placeholder="Broj telefona"
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
Grad
</label>
<input
type="text"
value={addForm.city}
onChange={(e) => setAddForm({ ...addForm, city: e.target.value })}
className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-green-500 focus:border-transparent"
placeholder="Grad"
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
Napomena
</label>
<textarea
value={addForm.notes}
onChange={(e) => setAddForm({ ...addForm, notes: e.target.value })}
rows={3}
className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-green-500 focus:border-transparent"
placeholder="npr. stampa figurice, obicno crna..."
/>
</div>
</div>
<div className="flex justify-end gap-3 mt-6">
<button
onClick={() => setShowAddModal(false)}
className="px-4 py-2 bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-lg hover:bg-gray-300 dark:hover:bg-gray-600"
>
Otkazi
</button>
<button
onClick={handleAddCustomer}
disabled={addSaving}
className="px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 disabled:opacity-50 font-medium"
>
{addSaving ? 'Cuvanje...' : 'Dodaj'}
</button>
</div>
</div>
</div>
)}
</div>
);
}

View File

@@ -0,0 +1,213 @@
-- Migration 023: Clean up fake colors and add missing real Bambu Lab colors
-- Source of truth: bambu_lab_filaments.numbers spreadsheet
BEGIN;
-- 1. Rename typo: IronGray Metallic → Iron Gray Metallic (FK cascades to filaments)
UPDATE colors SET name = 'Iron Gray Metallic' WHERE name = 'IronGray Metallic';
-- 2. Delete 67 fake colors not used by any filament
DELETE FROM colors WHERE name IN (
'Coton Candy Cloud',
'Glow in the Dark Blue',
'Glow in the Dark Green',
'Grey',
'Indingo Purple',
'Ivory',
'Ivory White',
'Light Blue',
'Light Green',
'Matte Black',
'Matte Blue',
'Matte Brown',
'Matte Coral',
'Matte Green',
'Matte Grey',
'Matte Lime',
'Matte Mint',
'Matte Navy',
'Matte Orange',
'Matte Pink',
'Matte Purple',
'Matte White',
'Matte Yellow',
'Metal Bronze',
'Metal Copper',
'Metal Gold',
'Metal Grey',
'Metal Silver',
'Mint Green',
'Natural',
'Navy Blue',
'Nebulane',
'Silk Black',
'Silk Blue',
'Silk Bronze',
'Silk Copper',
'Silk Emerald',
'Silk Gold',
'Silk Green',
'Silk Jade',
'Silk Orange',
'Silk Pearl',
'Silk Pink',
'Silk Purple',
'Silk Red',
'Silk Rose Gold',
'Silk Ruby',
'Silk Sapphire',
'Silk Silver',
'Silk White',
'Sky Blue',
'Sparkle Blue',
'Sparkle Gold',
'Sparkle Green',
'Sparkle Purple',
'Sparkle Red',
'Sparkle Silver',
'Support G',
'Support White',
'Translucent Tea',
'Transparent Blue',
'Transparent Green',
'Transparent Orange',
'Transparent Purple',
'Transparent Red',
'Transparent Yellow',
'Violet'
);
-- 3. Add 17 missing real Bambu Lab colors from spreadsheet
INSERT INTO colors (name, hex) VALUES
('Aurora Purple', '#9C27B0'),
('Candy Green', '#66CDAA'),
('Candy Red', '#E8505B'),
('Crystal Blue', '#68B8E8'),
('Flesh', '#FFCCB0'),
('Forest Green', '#39541A'),
('Grape Jelly', '#6A0DAD'),
('Lake Blue', '#1F79E5'),
('Lime', '#76FF03'),
('Mystic Magenta', '#E040FB'),
('Nebulae', '#4A148C'),
('Neon Green', '#76FF03'),
('Phantom Blue', '#1A237E'),
('Quicksilver', '#A6A6A6'),
('Rose Gold', '#B76E79'),
('Translucent Teal', '#008B8B')
ON CONFLICT (name) DO NOTHING;
-- 4. Fix hex codes for existing colors to match spreadsheet
UPDATE colors SET hex = '#3B7DD8' WHERE name = 'ABS Azure';
UPDATE colors SET hex = '#00AE42' WHERE name = 'ABS Bambu Green';
UPDATE colors SET hex = '#1A1A1A' WHERE name = 'ABS Black';
UPDATE colors SET hex = '#1A3C8F' WHERE name = 'ABS Blue';
UPDATE colors SET hex = '#1B2A4A' WHERE name = 'ABS Navy Blue';
UPDATE colors SET hex = '#6B7339' WHERE name = 'ABS Olive';
UPDATE colors SET hex = '#F57C20' WHERE name = 'ABS Orange';
UPDATE colors SET hex = '#C0392B' WHERE name = 'ABS Red';
UPDATE colors SET hex = '#B0B0B0' WHERE name = 'ABS Silver';
UPDATE colors SET hex = '#FFBF00' WHERE name = 'ABS Tangerine Yellow';
UPDATE colors SET hex = '#2E7D32' WHERE name = 'Alpine Green Sparkle';
UPDATE colors SET hex = '#E0EFF6' WHERE name = 'Arctic Whisper';
UPDATE colors SET hex = '#00AE42' WHERE name = 'Bambu Green';
UPDATE colors SET hex = '#1A1A1A' WHERE name = 'Black';
UPDATE colors SET hex = '#3E2723' WHERE name = 'Black Walnut';
UPDATE colors SET hex = '#FF5722' WHERE name = 'Blaze';
UPDATE colors SET hex = '#7B8E97' WHERE name = 'Blue Grey';
UPDATE colors SET hex = '#00C5CD' WHERE name = 'Blue Hawaii';
UPDATE colors SET hex = '#7C4DFF' WHERE name = 'Blueberry Bubblegum';
UPDATE colors SET hex = '#9F332A' WHERE name = 'Brick Red';
UPDATE colors SET hex = '#5EC323' WHERE name = 'Bright Green';
UPDATE colors SET hex = '#DE3163' WHERE name = 'Cherry Pink';
UPDATE colors SET hex = '#D7C49E' WHERE name = 'Classic Birch';
UPDATE colors SET hex = '#CFB53B' WHERE name = 'Classic Gold Sparkle';
UPDATE colors SET hex = '#B08968' WHERE name = 'Clay Brown';
UPDATE colors SET hex = '#F0F0F0' WHERE name = 'Clear';
UPDATE colors SET hex = '#2C2C2C' WHERE name = 'Clear Black';
UPDATE colors SET hex = '#0047AB' WHERE name = 'Cobalt Blue';
UPDATE colors SET hex = '#6B4332' WHERE name = 'Cocoa Brown';
UPDATE colors SET hex = '#F8BBD0' WHERE name = 'Cotton Candy Cloud';
UPDATE colors SET hex = '#F5E6C8' WHERE name = 'Cream';
UPDATE colors SET hex = '#B71C1C' WHERE name = 'Crimson Red Sparkle';
UPDATE colors SET hex = '#515151' WHERE name = 'Dark Gray';
UPDATE colors SET hex = '#FFDAB9' WHERE name = 'Dawn Radiance';
UPDATE colors SET hex = '#FF7043' WHERE name = 'Dusk Glare';
UPDATE colors SET hex = '#E0F7FA' WHERE name = 'Frozen';
UPDATE colors SET hex = '#B76E79' WHERE name = 'Gilded Rose';
UPDATE colors SET hex = '#5DADE2' WHERE name = 'Glow Blue';
UPDATE colors SET hex = '#82E0AA' WHERE name = 'Glow Green';
UPDATE colors SET hex = '#FFB347' WHERE name = 'Glow Orange';
UPDATE colors SET hex = '#FFEB3B' WHERE name = 'Glow Yellow';
UPDATE colors SET hex = '#00AE42' WHERE name = 'Green';
UPDATE colors SET hex = '#FF4F81' WHERE name = 'Hot Pink';
UPDATE colors SET hex = '#A5DEE4' WHERE name = 'Ice Blue';
UPDATE colors SET hex = '#324585' WHERE name = 'Indigo Blue';
UPDATE colors SET hex = '#3B2D6B' WHERE name = 'Indigo Purple';
UPDATE colors SET hex = '#C5A04D' WHERE name = 'Iridium Gold Metallic';
UPDATE colors SET hex = '#5B3A8C' WHERE name = 'Iris Purple';
UPDATE colors SET hex = '#6E6E6E' WHERE name = 'Iron Gray Metallic';
UPDATE colors SET hex = '#4A6FA5' WHERE name = 'Jeans Blue';
UPDATE colors SET hex = '#5B5B5B' WHERE name = 'Lava Gray';
UPDATE colors SET hex = '#B39DDB' WHERE name = 'Lavender';
UPDATE colors SET hex = '#B2EBF2' WHERE name = 'Light Cyan';
UPDATE colors SET hex = '#C8C8C8' WHERE name = 'Light Gray';
UPDATE colors SET hex = '#C8E6C9' WHERE name = 'Light Jade';
UPDATE colors SET hex = '#7EC845' WHERE name = 'Lime Green';
UPDATE colors SET hex = '#0BDA51' WHERE name = 'Malachite Green';
UPDATE colors SET hex = '#7B2D34' WHERE name = 'Maroon Red';
UPDATE colors SET hex = '#7B9B5B' WHERE name = 'Matcha Green';
UPDATE colors SET hex = '#8DB600' WHERE name = 'Matte Apple Green';
UPDATE colors SET hex = '#CBC6B8' WHERE name = 'Matte Bone White';
UPDATE colors SET hex = '#AE835B' WHERE name = 'Matte Caramel';
UPDATE colors SET hex = '#3C3C3C' WHERE name = 'Matte Charcoal';
UPDATE colors SET hex = '#1B3A5C' WHERE name = 'Matte Dark Blue';
UPDATE colors SET hex = '#4D3324' WHERE name = 'Matte Dark Chocolate';
UPDATE colors SET hex = '#8B1A1A' WHERE name = 'Matte Dark Red';
UPDATE colors SET hex = '#61C680' WHERE name = 'Matte Grass Green';
UPDATE colors SET hex = '#FFFFFF' WHERE name = 'Matte Ivory White';
UPDATE colors SET hex = '#6E6E6E' WHERE name = 'Matte Nardo Gray';
UPDATE colors SET hex = '#7D3F6B' WHERE name = 'Matte Plum';
UPDATE colors SET hex = '#7EB6D9' WHERE name = 'Matte Sky Blue';
UPDATE colors SET hex = '#B15533' WHERE name = 'Matte Terracotta';
UPDATE colors SET hex = '#F8E875' WHERE name = 'Mellow Yellow';
UPDATE colors SET hex = '#2C1654' WHERE name = 'Midnight Blaze';
UPDATE colors SET hex = '#98FFB0' WHERE name = 'Mint';
UPDATE colors SET hex = '#A5D6A7' WHERE name = 'Mint Lime';
UPDATE colors SET hex = '#39FF14' WHERE name = 'Neon City';
UPDATE colors SET hex = '#FF6D00' WHERE name = 'Neon Orange';
UPDATE colors SET hex = '#4DB6AC' WHERE name = 'Ocean to Meadow';
UPDATE colors SET hex = '#CC7722' WHERE name = 'Ochre Yellow';
UPDATE colors SET hex = '#1A1A1A' WHERE name = 'Onyx Black Sparkle';
UPDATE colors SET hex = '#4A6741' WHERE name = 'Oxide Green Metallic';
UPDATE colors SET hex = '#A0724A' WHERE name = 'Peanut Brown';
UPDATE colors SET hex = '#FF8A65' WHERE name = 'Pink Citrus';
UPDATE colors SET hex = '#E87530' WHERE name = 'Pumpkin Orange';
UPDATE colors SET hex = '#A0522D' WHERE name = 'Red Granite';
UPDATE colors SET hex = '#65000B' WHERE name = 'Rosewood';
UPDATE colors SET hex = '#002FA7' WHERE name = 'Royal Blue';
UPDATE colors SET hex = '#6A1B9A' WHERE name = 'Royal Purple Sparkle';
UPDATE colors SET hex = '#708090' WHERE name = 'Slate Gray Sparkle';
UPDATE colors SET hex = '#FFD54F' WHERE name = 'Solar Breeze';
UPDATE colors SET hex = '#00BCD4' WHERE name = 'South Beach';
UPDATE colors SET hex = '#FEC600' WHERE name = 'Sunflower Yellow';
UPDATE colors SET hex = '#009FA1' WHERE name = 'Teal';
UPDATE colors SET hex = '#8A8D8F' WHERE name = 'Titan Gray';
UPDATE colors SET hex = '#A9A9A9' WHERE name = 'Translucent Gray';
UPDATE colors SET hex = '#8B4513' WHERE name = 'Translucent Brown';
UPDATE colors SET hex = '#ADD8E6' WHERE name = 'Translucent Light Blue';
UPDATE colors SET hex = '#808000' WHERE name = 'Translucent Olive';
UPDATE colors SET hex = '#FF8C00' WHERE name = 'Translucent Orange';
UPDATE colors SET hex = '#FFB6C1' WHERE name = 'Translucent Pink';
UPDATE colors SET hex = '#800080' WHERE name = 'Translucent Purple';
UPDATE colors SET hex = '#E8E8E8' WHERE name = 'Transparent';
UPDATE colors SET hex = '#3B0A45' WHERE name = 'Velvet Eclipse';
UPDATE colors SET hex = '#583061' WHERE name = 'Violet Purple';
UPDATE colors SET hex = '#E8E8E8' WHERE name = 'White Marble';
UPDATE colors SET hex = '#C8B88A' WHERE name = 'White Oak';
UPDATE colors SET hex = '#FF69B4' WHERE name = 'Glow Pink';
UPDATE colors SET hex = '#F7E7CE' WHERE name = 'Champagne';
UPDATE colors SET hex = '#0047AB' WHERE name = 'Cobalt Blue Metallic';
UPDATE colors SET hex = '#B87333' WHERE name = 'Copper Brown Metallic';
COMMIT;

View File

@@ -0,0 +1,205 @@
-- Migration 024: Fix colors cleanup (handles partial state from 023)
-- Source of truth: bambu_lab_filaments.numbers spreadsheet
-- Delete the typo duplicate (keep the correct one)
DELETE FROM colors WHERE name = 'IronGray Metallic';
-- Delete fake colors not used by any filament
DELETE FROM colors WHERE name IN (
'Coton Candy Cloud',
'Glow in the Dark Blue',
'Glow in the Dark Green',
'Grey',
'Indingo Purple',
'Ivory',
'Ivory White',
'Light Blue',
'Light Green',
'Matte Black',
'Matte Blue',
'Matte Brown',
'Matte Coral',
'Matte Green',
'Matte Grey',
'Matte Lime',
'Matte Mint',
'Matte Navy',
'Matte Orange',
'Matte Pink',
'Matte Purple',
'Matte White',
'Matte Yellow',
'Metal Bronze',
'Metal Copper',
'Metal Gold',
'Metal Grey',
'Metal Silver',
'Mint Green',
'Natural',
'Navy Blue',
'Nebulane',
'Silk Black',
'Silk Blue',
'Silk Bronze',
'Silk Copper',
'Silk Emerald',
'Silk Gold',
'Silk Green',
'Silk Jade',
'Silk Orange',
'Silk Pearl',
'Silk Pink',
'Silk Purple',
'Silk Red',
'Silk Rose Gold',
'Silk Ruby',
'Silk Sapphire',
'Silk Silver',
'Silk White',
'Sky Blue',
'Sparkle Blue',
'Sparkle Gold',
'Sparkle Green',
'Sparkle Purple',
'Sparkle Red',
'Sparkle Silver',
'Support G',
'Support White',
'Translucent Tea',
'Transparent Blue',
'Transparent Green',
'Transparent Orange',
'Transparent Purple',
'Transparent Red',
'Transparent Yellow',
'Violet'
);
-- Fix all hex codes to match spreadsheet
UPDATE colors SET hex = '#3B7DD8' WHERE name = 'ABS Azure';
UPDATE colors SET hex = '#00AE42' WHERE name = 'ABS Bambu Green';
UPDATE colors SET hex = '#1A1A1A' WHERE name = 'ABS Black';
UPDATE colors SET hex = '#1A3C8F' WHERE name = 'ABS Blue';
UPDATE colors SET hex = '#1B2A4A' WHERE name = 'ABS Navy Blue';
UPDATE colors SET hex = '#6B7339' WHERE name = 'ABS Olive';
UPDATE colors SET hex = '#F57C20' WHERE name = 'ABS Orange';
UPDATE colors SET hex = '#C0392B' WHERE name = 'ABS Red';
UPDATE colors SET hex = '#B0B0B0' WHERE name = 'ABS Silver';
UPDATE colors SET hex = '#FFBF00' WHERE name = 'ABS Tangerine Yellow';
UPDATE colors SET hex = '#2E7D32' WHERE name = 'Alpine Green Sparkle';
UPDATE colors SET hex = '#E0EFF6' WHERE name = 'Arctic Whisper';
UPDATE colors SET hex = '#9C27B0' WHERE name = 'Aurora Purple';
UPDATE colors SET hex = '#00AE42' WHERE name = 'Bambu Green';
UPDATE colors SET hex = '#1A1A1A' WHERE name = 'Black';
UPDATE colors SET hex = '#3E2723' WHERE name = 'Black Walnut';
UPDATE colors SET hex = '#FF5722' WHERE name = 'Blaze';
UPDATE colors SET hex = '#7B8E97' WHERE name = 'Blue Grey';
UPDATE colors SET hex = '#00C5CD' WHERE name = 'Blue Hawaii';
UPDATE colors SET hex = '#7C4DFF' WHERE name = 'Blueberry Bubblegum';
UPDATE colors SET hex = '#9F332A' WHERE name = 'Brick Red';
UPDATE colors SET hex = '#5EC323' WHERE name = 'Bright Green';
UPDATE colors SET hex = '#66CDAA' WHERE name = 'Candy Green';
UPDATE colors SET hex = '#E8505B' WHERE name = 'Candy Red';
UPDATE colors SET hex = '#F7E7CE' WHERE name = 'Champagne';
UPDATE colors SET hex = '#DE3163' WHERE name = 'Cherry Pink';
UPDATE colors SET hex = '#D7C49E' WHERE name = 'Classic Birch';
UPDATE colors SET hex = '#CFB53B' WHERE name = 'Classic Gold Sparkle';
UPDATE colors SET hex = '#B08968' WHERE name = 'Clay Brown';
UPDATE colors SET hex = '#F0F0F0' WHERE name = 'Clear';
UPDATE colors SET hex = '#2C2C2C' WHERE name = 'Clear Black';
UPDATE colors SET hex = '#0047AB' WHERE name = 'Cobalt Blue';
UPDATE colors SET hex = '#0047AB' WHERE name = 'Cobalt Blue Metallic';
UPDATE colors SET hex = '#6B4332' WHERE name = 'Cocoa Brown';
UPDATE colors SET hex = '#B87333' WHERE name = 'Copper Brown Metallic';
UPDATE colors SET hex = '#F8BBD0' WHERE name = 'Cotton Candy Cloud';
UPDATE colors SET hex = '#F5E6C8' WHERE name = 'Cream';
UPDATE colors SET hex = '#B71C1C' WHERE name = 'Crimson Red Sparkle';
UPDATE colors SET hex = '#68B8E8' WHERE name = 'Crystal Blue';
UPDATE colors SET hex = '#515151' WHERE name = 'Dark Gray';
UPDATE colors SET hex = '#FFDAB9' WHERE name = 'Dawn Radiance';
UPDATE colors SET hex = '#FF7043' WHERE name = 'Dusk Glare';
UPDATE colors SET hex = '#FFCCB0' WHERE name = 'Flesh';
UPDATE colors SET hex = '#39541A' WHERE name = 'Forest Green';
UPDATE colors SET hex = '#E0F7FA' WHERE name = 'Frozen';
UPDATE colors SET hex = '#B76E79' WHERE name = 'Gilded Rose';
UPDATE colors SET hex = '#5DADE2' WHERE name = 'Glow Blue';
UPDATE colors SET hex = '#82E0AA' WHERE name = 'Glow Green';
UPDATE colors SET hex = '#FFB347' WHERE name = 'Glow Orange';
UPDATE colors SET hex = '#FF69B4' WHERE name = 'Glow Pink';
UPDATE colors SET hex = '#FFEB3B' WHERE name = 'Glow Yellow';
UPDATE colors SET hex = '#6A0DAD' WHERE name = 'Grape Jelly';
UPDATE colors SET hex = '#00AE42' WHERE name = 'Green';
UPDATE colors SET hex = '#FF4F81' WHERE name = 'Hot Pink';
UPDATE colors SET hex = '#A5DEE4' WHERE name = 'Ice Blue';
UPDATE colors SET hex = '#324585' WHERE name = 'Indigo Blue';
UPDATE colors SET hex = '#3B2D6B' WHERE name = 'Indigo Purple';
UPDATE colors SET hex = '#C5A04D' WHERE name = 'Iridium Gold Metallic';
UPDATE colors SET hex = '#5B3A8C' WHERE name = 'Iris Purple';
UPDATE colors SET hex = '#6E6E6E' WHERE name = 'Iron Gray Metallic';
UPDATE colors SET hex = '#4A6FA5' WHERE name = 'Jeans Blue';
UPDATE colors SET hex = '#1F79E5' WHERE name = 'Lake Blue';
UPDATE colors SET hex = '#5B5B5B' WHERE name = 'Lava Gray';
UPDATE colors SET hex = '#B39DDB' WHERE name = 'Lavender';
UPDATE colors SET hex = '#B2EBF2' WHERE name = 'Light Cyan';
UPDATE colors SET hex = '#C8C8C8' WHERE name = 'Light Gray';
UPDATE colors SET hex = '#C8E6C9' WHERE name = 'Light Jade';
UPDATE colors SET hex = '#76FF03' WHERE name = 'Lime';
UPDATE colors SET hex = '#7EC845' WHERE name = 'Lime Green';
UPDATE colors SET hex = '#0BDA51' WHERE name = 'Malachite Green';
UPDATE colors SET hex = '#7B2D34' WHERE name = 'Maroon Red';
UPDATE colors SET hex = '#7B9B5B' WHERE name = 'Matcha Green';
UPDATE colors SET hex = '#8DB600' WHERE name = 'Matte Apple Green';
UPDATE colors SET hex = '#CBC6B8' WHERE name = 'Matte Bone White';
UPDATE colors SET hex = '#AE835B' WHERE name = 'Matte Caramel';
UPDATE colors SET hex = '#3C3C3C' WHERE name = 'Matte Charcoal';
UPDATE colors SET hex = '#1B3A5C' WHERE name = 'Matte Dark Blue';
UPDATE colors SET hex = '#4D3324' WHERE name = 'Matte Dark Chocolate';
UPDATE colors SET hex = '#8B1A1A' WHERE name = 'Matte Dark Red';
UPDATE colors SET hex = '#61C680' WHERE name = 'Matte Grass Green';
UPDATE colors SET hex = '#FFFFFF' WHERE name = 'Matte Ivory White';
UPDATE colors SET hex = '#6E6E6E' WHERE name = 'Matte Nardo Gray';
UPDATE colors SET hex = '#7D3F6B' WHERE name = 'Matte Plum';
UPDATE colors SET hex = '#7EB6D9' WHERE name = 'Matte Sky Blue';
UPDATE colors SET hex = '#B15533' WHERE name = 'Matte Terracotta';
UPDATE colors SET hex = '#F8E875' WHERE name = 'Mellow Yellow';
UPDATE colors SET hex = '#2C1654' WHERE name = 'Midnight Blaze';
UPDATE colors SET hex = '#98FFB0' WHERE name = 'Mint';
UPDATE colors SET hex = '#A5D6A7' WHERE name = 'Mint Lime';
UPDATE colors SET hex = '#E040FB' WHERE name = 'Mystic Magenta';
UPDATE colors SET hex = '#4A148C' WHERE name = 'Nebulae';
UPDATE colors SET hex = '#39FF14' WHERE name = 'Neon City';
UPDATE colors SET hex = '#76FF03' WHERE name = 'Neon Green';
UPDATE colors SET hex = '#FF6D00' WHERE name = 'Neon Orange';
UPDATE colors SET hex = '#4DB6AC' WHERE name = 'Ocean to Meadow';
UPDATE colors SET hex = '#CC7722' WHERE name = 'Ochre Yellow';
UPDATE colors SET hex = '#1A1A1A' WHERE name = 'Onyx Black Sparkle';
UPDATE colors SET hex = '#4A6741' WHERE name = 'Oxide Green Metallic';
UPDATE colors SET hex = '#A0724A' WHERE name = 'Peanut Brown';
UPDATE colors SET hex = '#1A237E' WHERE name = 'Phantom Blue';
UPDATE colors SET hex = '#FF8A65' WHERE name = 'Pink Citrus';
UPDATE colors SET hex = '#E87530' WHERE name = 'Pumpkin Orange';
UPDATE colors SET hex = '#A6A6A6' WHERE name = 'Quicksilver';
UPDATE colors SET hex = '#A0522D' WHERE name = 'Red Granite';
UPDATE colors SET hex = '#B76E79' WHERE name = 'Rose Gold';
UPDATE colors SET hex = '#65000B' WHERE name = 'Rosewood';
UPDATE colors SET hex = '#002FA7' WHERE name = 'Royal Blue';
UPDATE colors SET hex = '#6A1B9A' WHERE name = 'Royal Purple Sparkle';
UPDATE colors SET hex = '#708090' WHERE name = 'Slate Gray Sparkle';
UPDATE colors SET hex = '#FFD54F' WHERE name = 'Solar Breeze';
UPDATE colors SET hex = '#00BCD4' WHERE name = 'South Beach';
UPDATE colors SET hex = '#FEC600' WHERE name = 'Sunflower Yellow';
UPDATE colors SET hex = '#009FA1' WHERE name = 'Teal';
UPDATE colors SET hex = '#8A8D8F' WHERE name = 'Titan Gray';
UPDATE colors SET hex = '#A9A9A9' WHERE name = 'Translucent Gray';
UPDATE colors SET hex = '#8B4513' WHERE name = 'Translucent Brown';
UPDATE colors SET hex = '#ADD8E6' WHERE name = 'Translucent Light Blue';
UPDATE colors SET hex = '#808000' WHERE name = 'Translucent Olive';
UPDATE colors SET hex = '#FF8C00' WHERE name = 'Translucent Orange';
UPDATE colors SET hex = '#FFB6C1' WHERE name = 'Translucent Pink';
UPDATE colors SET hex = '#800080' WHERE name = 'Translucent Purple';
UPDATE colors SET hex = '#008B8B' WHERE name = 'Translucent Teal';
UPDATE colors SET hex = '#E8E8E8' WHERE name = 'Transparent';
UPDATE colors SET hex = '#3B0A45' WHERE name = 'Velvet Eclipse';
UPDATE colors SET hex = '#583061' WHERE name = 'Violet Purple';
UPDATE colors SET hex = '#E8E8E8' WHERE name = 'White Marble';
UPDATE colors SET hex = '#C8B88A' WHERE name = 'White Oak';

View File

@@ -52,23 +52,19 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
{ name: 'Bronze', refill: true, spool: false },
{ name: 'Silver', refill: true, spool: false },
{ name: 'Dark Gray', refill: true, spool: false },
{ name: 'Indigo Purple', refill: true, spool: false },
{ name: 'Cocoa Brown', refill: true, spool: false },
{ name: 'Gray', refill: true, spool: false },
],
},
'Basic Gradient': {
colors: [
{ name: 'Neon City', refill: false, spool: true },
{ name: 'Midnight Blaze', refill: false, spool: true },
{ name: 'South Beach', refill: false, spool: true },
{ name: 'Arctic Whisper', refill: false, spool: true },
{ name: 'Cotton Candy Cloud', refill: false, spool: true },
{ name: 'Ocean to Meadow', refill: false, spool: true },
{ name: 'Solar Breeze', refill: false, spool: true },
{ name: 'Velvet Eclipse', refill: false, spool: true },
{ name: 'Dawn Radiance', refill: false, spool: true },
{ name: 'Dusk Glare', refill: false, spool: true },
{ name: 'Blueberry Bubblegum', refill: false, spool: true },
{ name: 'Blue Hawaii', refill: false, spool: true },
{ name: 'Gilded Rose', refill: false, spool: true },
{ name: 'Pink Citrus', refill: false, spool: true },
{ name: 'Mint Lime', refill: false, spool: true },
],
@@ -111,13 +107,26 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
{ name: 'Rose Gold', refill: false, spool: true },
{ name: 'Champagne', refill: false, spool: true },
{ name: 'Baby Blue', refill: false, spool: true },
{ name: 'Gold', refill: false, spool: true },
{ name: 'Silver', refill: false, spool: true },
{ name: 'White', refill: false, spool: true },
{ name: 'Blue', refill: false, spool: true },
{ name: 'Purple', refill: false, spool: true },
{ name: 'Pink', refill: false, spool: true },
],
},
'Silk Multi-Color': {
colors: [
{ name: 'Silk Aurora Purple', refill: false, spool: true },
{ name: 'Silk Phantom Blue', refill: false, spool: true },
{ name: 'Silk Mystic Magenta', refill: false, spool: true },
{ name: 'Aurora Purple', refill: false, spool: true },
{ name: 'Phantom Blue', refill: false, spool: true },
{ name: 'Mystic Magenta', refill: false, spool: true },
{ name: 'Dawn Radiance', refill: false, spool: true },
{ name: 'South Beach', refill: false, spool: true },
{ name: 'Neon City', refill: false, spool: true },
{ name: 'Midnight Blaze', refill: false, spool: true },
{ name: 'Gilded Rose', refill: false, spool: true },
{ name: 'Blue Hawaii', refill: false, spool: true },
{ name: 'Velvet Eclipse', refill: false, spool: true },
],
},
Metal: {
@@ -142,6 +151,9 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
Galaxy: {
colors: [
{ name: 'Nebulae', refill: true, spool: true },
{ name: 'Purple', refill: false, spool: true },
{ name: 'Green', refill: false, spool: true },
{ name: 'Brown', refill: false, spool: true },
],
},
Marble: {
@@ -164,11 +176,40 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
{ name: 'Ochre Yellow', refill: false, spool: true },
{ name: 'White Oak', refill: false, spool: true },
{ name: 'Clay Brown', refill: false, spool: true },
{ name: 'Black Walnut', refill: false, spool: true },
{ name: 'Rosewood', refill: false, spool: true },
{ name: 'Classic Birch', refill: false, spool: true },
],
},
'Tough+': {
colors: [
{ name: 'Black', refill: true, spool: true },
{ name: 'White', refill: true, spool: true },
{ name: 'Yellow', refill: true, spool: true },
{ name: 'Orange', refill: true, spool: true },
{ name: 'Gray', refill: true, spool: true },
{ name: 'Silver', refill: true, spool: true },
{ name: 'Cyan', refill: true, spool: true },
],
},
Translucent: {
colors: [
{ name: 'Teal', refill: false, spool: true },
{ name: 'Blue', refill: false, spool: true },
{ name: 'Orange', refill: false, spool: true },
{ name: 'Purple', refill: false, spool: true },
{ name: 'Red', refill: false, spool: true },
{ name: 'Light Jade', refill: false, spool: true },
{ name: 'Mellow Yellow', refill: false, spool: true },
{ name: 'Cherry Pink', refill: false, spool: true },
{ name: 'Ice Blue', refill: false, spool: true },
{ name: 'Lavender', refill: false, spool: true },
],
},
Aero: {
colors: [
{ name: 'White', refill: false, spool: true },
{ name: 'Gray', refill: false, spool: true },
],
},
CF: {
@@ -186,12 +227,14 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
PETG: {
HF: {
colors: [
{ name: 'Jade White', refill: true, spool: true },
{ name: 'Black', refill: true, spool: true },
{ name: 'White', refill: true, spool: true },
{ name: 'Red', refill: true, spool: true },
{ name: 'Green', refill: true, spool: true },
{ name: 'Blue', refill: true, spool: true },
{ name: 'Gray', refill: true, spool: true },
{ name: 'Dark Gray', refill: true, spool: true },
{ name: 'Yellow', refill: true, spool: true },
{ name: 'Orange', refill: true, spool: true },
{ name: 'Cream', refill: true, spool: true },
{ name: 'Forest Green', refill: true, spool: true },
@@ -210,7 +253,7 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
{ name: 'Translucent Olive', refill: false, spool: true },
{ name: 'Translucent Pink', refill: false, spool: true },
{ name: 'Translucent Light Blue', refill: false, spool: true },
{ name: 'Translucent Tea', refill: false, spool: true },
{ name: 'Translucent Teal', refill: false, spool: true },
],
},
CF: {
@@ -244,6 +287,12 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
colors: [
{ name: 'ABS GF Yellow', refill: true, spool: false },
{ name: 'ABS GF Orange', refill: true, spool: false },
{ name: 'Orange', refill: true, spool: false },
{ name: 'Red', refill: true, spool: false },
{ name: 'Blue', refill: true, spool: false },
{ name: 'White', refill: true, spool: false },
{ name: 'Gray', refill: true, spool: false },
{ name: 'Black', refill: true, spool: false },
],
},
},
@@ -251,10 +300,10 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
'85A': {
colors: [
{ name: 'Black', refill: false, spool: true },
{ name: 'White', refill: false, spool: true },
{ name: 'Flesh', refill: false, spool: true },
{ name: 'Light Cyan', refill: false, spool: true },
{ name: 'Neon Orange', refill: false, spool: true },
{ name: 'Lime Green', refill: false, spool: true },
],
},
'90A': {
@@ -275,6 +324,23 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
{ name: 'Black', refill: true, spool: false },
{ name: 'White', refill: true, spool: false },
{ name: 'TPU 95A HF Yellow', refill: true, spool: false },
{ name: 'Gray', refill: true, spool: false },
{ name: 'Yellow', refill: true, spool: false },
{ name: 'Blue', refill: true, spool: false },
{ name: 'Red', refill: true, spool: false },
],
},
},
'TPU for AMS': {
Basic: {
colors: [
{ name: 'Blue', refill: false, spool: true },
{ name: 'Red', refill: false, spool: true },
{ name: 'Yellow', refill: false, spool: true },
{ name: 'Neon Green', refill: false, spool: true },
{ name: 'White', refill: false, spool: true },
{ name: 'Gray', refill: false, spool: true },
{ name: 'Black', refill: false, spool: true },
],
},
},
@@ -301,9 +367,21 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
},
},
PA6: {
CF: {
colors: [
{ name: 'Black', refill: false, spool: true },
],
},
GF: {
colors: [
{ name: 'Black', refill: false, spool: true },
{ name: 'Blue', refill: false, spool: true },
{ name: 'Orange', refill: false, spool: true },
{ name: 'Yellow', refill: false, spool: true },
{ name: 'Lime', refill: false, spool: true },
{ name: 'Brown', refill: false, spool: true },
{ name: 'White', refill: false, spool: true },
{ name: 'Gray', refill: false, spool: true },
],
},
},
@@ -319,11 +397,15 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
colors: [
{ name: 'Clear Black', refill: false, spool: true },
{ name: 'Transparent', refill: false, spool: true },
{ name: 'Black', refill: false, spool: true },
{ name: 'White', refill: false, spool: true },
],
},
FR: {
colors: [
{ name: 'Black', refill: false, spool: true },
{ name: 'White', refill: false, spool: true },
{ name: 'Gray', refill: false, spool: true },
],
},
},

View File

@@ -4,214 +4,204 @@ export interface ColorMapping {
}
export const bambuLabColors: Record<string, ColorMapping> = {
'Alpine Green Sparkle': { hex: '#3F5443' },
'Alpine Green Sparkle': { hex: '#2E7D32' },
'Apple Green': { hex: '#C6E188' },
'Arctic Whisper': { hex: '#ECF7F8' },
'Arctic Whisper': { hex: '#E0EFF6' },
'Ash Grey': { hex: '#9B9EA0' },
'Aurora Purple': { hex: '#285BB7' },
'Aurora Purple': { hex: ['#7F3696', '#006EC9'], isGradient: true },
'Azure': { hex: '#489FDF' },
'Baby Blue': { hex: '#AEC3ED' },
'Baby Blue': { hex: '#89CFF0' },
'Bambu Green': { hex: '#00AE42' },
'Beige': { hex: '#F7E6DE' },
'Black': { hex: '#000000' },
'Black Walnut': { hex: '#4D4229' },
'Blaze': { hex: '#E78390' },
'Black': { hex: '#1A1A1A' },
'Black Walnut': { hex: '#3E2723' },
'Blaze': { hex: '#FF5722' },
'Blue': { hex: '#0A2989' },
'Blue Grey': { hex: '#5B6579' },
'Blue Hawaii': { hex: '#739FE6' },
'Blueberry Bubblegum': { hex: '#BADCF4' },
'Blue Grey': { hex: '#7B8E97' },
'Blue Hawaii': { hex: '#00C5CD' },
'Blueberry Bubblegum': { hex: '#7C4DFF' },
'Bone White': { hex: '#C8C5B6' },
'Bright Green': { hex: '#BDCF00' },
'Bright Green': { hex: '#5EC323' },
'Brick Red': { hex: '#9F332A' },
'Bronze': { hex: '#847D48' },
'Brown': { hex: '#9D432C' },
'Burgundy Red': { hex: '#951E23' },
'Candy Green': { hex: '#408619' },
'Candy Red': { hex: '#BB3A2E' },
'Burgundy Red': { hex: '#800020' },
'Candy Green': { hex: '#66CDAA' },
'Candy Red': { hex: '#E8505B' },
'Caramel': { hex: '#A4845C' },
'Champagne': { hex: '#EBD0B1' },
'Champagne': { hex: '#F7E7CE' },
'Charcoal': { hex: '#000000' },
'Cherry Pink': { hex: '#E9B6CC' },
'Cherry Pink': { hex: '#DE3163' },
'Chocolate': { hex: '#4A3729' },
'Classic Birch': { hex: '#E8D5B7' },
'Classic Gold Sparkle': { hex: '#E4BD68' },
'Clay Brown': { hex: '#8E621A' },
'Clear': { hex: '#FAFAFA' },
'Clear Black': { hex: '#5A5161' },
'Cobalt Blue': { hex: '#0055B8' },
'Cobalt Blue Metallic': { hex: '#39699E' },
'Cocoa Brown': { hex: '#6F5034' },
'Copper Brown Metallic': { hex: '#AA6443' },
'Cotton Candy Cloud': { hex: '#E9E2EC' },
'Cream': { hex: '#F3E0B8' },
'Crimson Red Sparkle': { hex: '#792B36' },
'Classic Birch': { hex: '#D7C49E' },
'Classic Gold Sparkle': { hex: '#CFB53B' },
'Clay Brown': { hex: '#B08968' },
'Clear': { hex: '#F0F0F0' },
'Clear Black': { hex: '#2C2C2C' },
'Cobalt Blue': { hex: '#0047AB' },
'Cobalt Blue Metallic': { hex: '#0047AB' },
'Cocoa Brown': { hex: '#6B4332' },
'Copper Brown Metallic': { hex: '#B87333' },
'Cotton Candy Cloud': { hex: '#F8BBD0' },
'Cream': { hex: '#F5E6C8' },
'Crimson Red Sparkle': { hex: '#B71C1C' },
'Cyan': { hex: '#0086D6' },
'Dark Blue': { hex: '#042F56' },
'Dark Brown': { hex: '#7D6556' },
'Dark Chocolate': { hex: '#4A3729' },
'Dark Gray': { hex: '#555555' },
'Dark Gray': { hex: '#515151' },
'Dark Green': { hex: '#68724D' },
'Dark Red': { hex: '#BB3D43' },
'Dawn Radiance': { hex: '#C472A1' },
'Dawn Radiance': { hex: '#FFDAB9' },
'Desert Tan': { hex: '#E8DBB7' },
'Dusk Glare': { hex: '#F6B790' },
'Forest Green': { hex: '#415520' },
'Frozen': { hex: '#A6DEF3' },
'Gilded Rose': { hex: '#ED982C' },
'Glow Blue': { hex: '#7AC0E9' },
'Glow Green': { hex: '#A1FFAC' },
'Glow Orange': { hex: '#FF9D5B' },
'Glow Pink': { hex: '#F17B8F' },
'Glow Yellow': { hex: '#F8FF80' },
'Dusk Glare': { hex: '#FF7043' },
'Forest Green': { hex: '#39541A' },
'Frozen': { hex: '#E0F7FA' },
'Gilded Rose': { hex: '#B76E79' },
'Glow Blue': { hex: '#5DADE2' },
'Glow Green': { hex: '#82E0AA' },
'Glow Orange': { hex: '#FFB347' },
'Glow Pink': { hex: '#FF69B4' },
'Glow Yellow': { hex: '#FFEB3B' },
'Gold': { hex: '#E4BD68' },
'Gray': { hex: '#8E9089' },
'Green': { hex: '#3B665E' },
'Hot Pink': { hex: '#F5547D' },
'Ice Blue': { hex: '#A3D8E1' },
'Green': { hex: '#00AE42' },
'Hot Pink': { hex: '#FF4F81' },
'Ice Blue': { hex: '#A5DEE4' },
'Indigo Blue': { hex: '#324585' },
'Indigo Purple': { hex: '#482A60' },
'Iridium Gold Metallic': { hex: '#B39B84' },
'Iris Purple': { hex: '#69398E' },
'Iron Gray Metallic': { hex: '#6B6C6F' },
'IronGray Metallic': { hex: '#6B6C6F' },
'Ivory White': { hex: '#FFFFFF' },
'Indigo Purple': { hex: '#3B2D6B' },
'Iridium Gold Metallic': { hex: '#C5A04D' },
'Iris Purple': { hex: '#5B3A8C' },
'Iron Gray Metallic': { hex: '#6E6E6E' },
'Jade White': { hex: '#FFFFFF' },
'Jeans Blue': { hex: '#6E88BC' },
'Lake Blue': { hex: '#4672E4' },
'Jeans Blue': { hex: '#4A6FA5' },
'Lake Blue': { hex: '#1F79E5' },
'Latte Brown': { hex: '#D3B7A7' },
'Lava Gray': { hex: '#4D5054' },
'Lavender': { hex: '#B5AAD5' },
'Lava Gray': { hex: '#5B5B5B' },
'Lavender': { hex: '#B39DDB' },
'Lemon Yellow': { hex: '#F7D959' },
'Light Blue': { hex: '#61B0FF' },
'Light Cyan': { hex: '#B9E3DF' },
'Light Gray': { hex: '#D0D2D4' },
'Light Jade': { hex: '#A4D6AD' },
'Light Cyan': { hex: '#B2EBF2' },
'Light Gray': { hex: '#C8C8C8' },
'Light Jade': { hex: '#C8E6C9' },
'Lilac Purple': { hex: '#AE96D4' },
'Lime': { hex: '#C5ED48' },
'Lime Green': { hex: '#8EE43D' },
'Lime': { hex: '#76FF03' },
'Lime Green': { hex: '#7EC845' },
'Magenta': { hex: '#EC008C' },
'Malachite Green': { hex: '#16B08E' },
'Malachite Green': { hex: '#0BDA51' },
'Mandarin Orange': { hex: '#F99963' },
'Marine Blue': { hex: '#0078BF' },
'Maroon Red': { hex: '#0A2989' },
'Matcha Green': { hex: '#5C9748' },
'Mellow Yellow': { hex: '#EFDCAA' },
'Midnight Blaze': { hex: '#0047BB' },
'Mint': { hex: '#A5DAB7' },
'Mint Lime': { hex: '#BAF382' },
'Maroon Red': { hex: '#7B2D34' },
'Matcha Green': { hex: '#7B9B5B' },
'Mellow Yellow': { hex: '#F8E875' },
'Midnight Blaze': { hex: '#2C1654' },
'Mint': { hex: '#98FFB0' },
'Mint Lime': { hex: '#A5D6A7' },
'Mistletoe Green': { hex: '#3F8E43' },
'Nardo Gray': { hex: '#747474' },
'Navy Blue': { hex: '#0C2340' },
'Nebulae': { hex: '#424379' },
'Nebulane': { hex: '#424379' },
'Neon City': { hex: '#0047BB' },
'Neon Green': { hex: '#ABFF1E' },
'Neon Orange': { hex: '#F68A1B' },
'Ochre Yellow': { hex: '#BC8B39' },
'Ocean to Meadow': { hex: '#A1E4CA' },
'Nebulae': { hex: '#4A148C' },
'Neon City': { hex: '#39FF14' },
'Neon Green': { hex: '#76FF03' },
'Neon Orange': { hex: '#FF6D00' },
'Ochre Yellow': { hex: '#CC7722' },
'Ocean to Meadow': { hex: '#4DB6AC' },
'Olive': { hex: '#748C45' },
'Onyx Black Sparkle': { hex: '#2D2B28' },
'Onyx Black Sparkle': { hex: '#1A1A1A' },
'Orange': { hex: '#FF6A13' },
'Oxide Green Metallic': { hex: '#1D7C6A' },
'Peanut Brown': { hex: '#7E5A1F' },
'Oxide Green Metallic': { hex: '#4A6741' },
'Peanut Brown': { hex: '#A0724A' },
'Pink': { hex: '#F55A74' },
'Pink Citrus': { hex: '#F8C4BC' },
'Pink Citrus': { hex: '#FF8A65' },
'Plum': { hex: '#851A52' },
'Pumpkin Orange': { hex: '#FF8E16' },
'Pumpkin Orange': { hex: '#E87530' },
'Purple': { hex: '#5E43B7' },
'Red': { hex: '#C12E1F' },
'Red Granite': { hex: '#AD4E38' },
'Rose Gold': { hex: '#B29593' },
'Rosewood': { hex: '#472A22' },
'Royal Blue': { hex: '#2842AD' },
'Royal Purple Sparkle': { hex: '#483D8B' },
'Red Granite': { hex: '#A0522D' },
'Rose Gold': { hex: '#B76E79' },
'Rosewood': { hex: '#65000B' },
'Royal Blue': { hex: '#002FA7' },
'Royal Purple Sparkle': { hex: '#6A1B9A' },
'Sakura Pink': { hex: '#E8AFCF' },
'Scarlet Red': { hex: '#DE4343' },
'Silver': { hex: '#A6A9AA' },
'Sky Blue': { hex: '#73B2E5' },
'Slate Gray Sparkle': { hex: '#8E9089' },
'Solar Breeze': { hex: '#F3D9D5' },
'South Beach': { hex: '#468791' },
'Sunflower Yellow': { hex: '#FEC601' },
'Slate Gray Sparkle': { hex: '#708090' },
'Solar Breeze': { hex: '#FFD54F' },
'South Beach': { hex: '#00BCD4' },
'Sunflower Yellow': { hex: '#FEC600' },
'Tangerine Yellow': { hex: '#FFC72C' },
'Teal': { hex: '#77EDD7' },
'Teal': { hex: '#009FA1' },
'Terracotta': { hex: '#A25A37' },
'Titan Gray': { hex: '#606367' },
'Transparent': { hex: '#FFFFFF' },
'Titan Gray': { hex: '#8A8D8F' },
'Transparent': { hex: '#E8E8E8' },
'Turquoise': { hex: '#00B1B7' },
'Velvet Eclipse': { hex: '#000000' },
'Velvet Eclipse': { hex: '#3B0A45' },
'Violet Purple': { hex: '#583061' },
'White': { hex: '#FFFFFF' },
'White Marble': { hex: '#F7F3F0' },
'White Oak': { hex: '#D2CCA2' },
'White Marble': { hex: '#E8E8E8' },
'White Oak': { hex: '#C8B88A' },
'Yellow': { hex: '#F4EE2A' },
// ABS Colors
'ABS GF Yellow': { hex: '#FDD835' },
'ABS GF Orange': { hex: '#F48438' },
'ABS Azure': { hex: '#489FDF' },
'ABS Olive': { hex: '#748C45' },
'ABS Blue': { hex: '#0A2989' },
'ABS Tangerine Yellow': { hex: '#FFC72C' },
'ABS Navy Blue': { hex: '#0C2340' },
'ABS Orange': { hex: '#FF6A13' },
'ABS Azure': { hex: '#3B7DD8' },
'ABS Olive': { hex: '#6B7339' },
'ABS Blue': { hex: '#1A3C8F' },
'ABS Tangerine Yellow': { hex: '#FFBF00' },
'ABS Navy Blue': { hex: '#1B2A4A' },
'ABS Orange': { hex: '#F57C20' },
'ABS Bambu Green': { hex: '#00AE42' },
'ABS Red': { hex: '#C12E1F' },
'ABS Red': { hex: '#C0392B' },
'ABS White': { hex: '#FFFFFF' },
'ABS Black': { hex: '#000000' },
'ABS Silver': { hex: '#A6A9AA' },
'ABS Black': { hex: '#1A1A1A' },
'ABS Silver': { hex: '#B0B0B0' },
// PETG Translucent Colors
'Translucent Gray': { hex: '#B8B8B8' },
'Translucent Brown': { hex: '#C89A74' },
'Translucent Purple': { hex: '#C5A8D8' },
'Translucent Orange': { hex: '#FFB380' },
'Translucent Olive': { hex: '#A4B885' },
'Translucent Pink': { hex: '#F9B8D0' },
'Translucent Light Blue': { hex: '#A8D8F0' },
'Translucent Tea': { hex: '#D9C7A8' },
'Translucent Gray': { hex: '#A9A9A9' },
'Translucent Brown': { hex: '#8B4513' },
'Translucent Purple': { hex: '#800080' },
'Translucent Orange': { hex: '#FF8C00' },
'Translucent Olive': { hex: '#808000' },
'Translucent Pink': { hex: '#FFB6C1' },
'Translucent Light Blue': { hex: '#ADD8E6' },
'Translucent Teal': { hex: '#008B8B' },
// PLA Matte Colors
'Matte Ivory White': { hex: '#FFFFF0' },
'Matte Charcoal': { hex: '#333333' },
'Matte Ivory White': { hex: '#FFFFFF' },
'Matte Charcoal': { hex: '#3C3C3C' },
'Matte Scarlet Red': { hex: '#DE4343' },
'Matte Marine Blue': { hex: '#0078BF' },
'Matte Mandarin Orange': { hex: '#F99963' },
'Matte Ash Gray': { hex: '#9B9EA0' },
'Matte Desert Tan': { hex: '#E8DBB7' },
'Matte Nardo Gray': { hex: '#747474' },
'Matte Apple Green': { hex: '#C6E188' },
'Matte Bone White': { hex: '#C8C5B6' },
'Matte Caramel': { hex: '#A4845C' },
'Matte Dark Blue': { hex: '#042F56' },
'Matte Nardo Gray': { hex: '#6E6E6E' },
'Matte Apple Green': { hex: '#8DB600' },
'Matte Bone White': { hex: '#CBC6B8' },
'Matte Caramel': { hex: '#AE835B' },
'Matte Dark Blue': { hex: '#1B3A5C' },
'Matte Dark Brown': { hex: '#7D6556' },
'Matte Dark Chocolate': { hex: '#4A3729' },
'Matte Dark Chocolate': { hex: '#4D3324' },
'Matte Dark Green': { hex: '#68724D' },
'Matte Dark Red': { hex: '#BB3D43' },
'Matte Grass Green': { hex: '#7CB342' },
'Matte Dark Red': { hex: '#8B1A1A' },
'Matte Grass Green': { hex: '#61C680' },
'Matte Ice Blue': { hex: '#A3D8E1' },
'Matte Lemon Yellow': { hex: '#F7D959' },
'Matte Lilac Purple': { hex: '#AE96D4' },
'Matte Plum': { hex: '#851A52' },
'Matte Plum': { hex: '#7D3F6B' },
'Matte Sakura Pink': { hex: '#E8AFCF' },
'Matte Sky Blue': { hex: '#73B2E5' },
'Matte Sky Blue': { hex: '#7EB6D9' },
'Matte Latte Brown': { hex: '#D3B7A7' },
'Matte Terracotta': { hex: '#A25A37' },
'Matte Terracotta': { hex: '#B15533' },
// PLA Silk Multi-Color
'Silk Aurora Purple': { hex: ['#7F3696', '#006EC9'], isGradient: true },
'Silk Phantom Blue': { hex: ['#00629B', '#000000'], isGradient: true },
'Silk Mystic Magenta': { hex: ['#720062', '#3A913F'], isGradient: true },
'Phantom Blue': { hex: ['#00629B', '#000000'], isGradient: true },
'Mystic Magenta': { hex: ['#720062', '#3A913F'], isGradient: true },
// TPU Colors
'Flesh': { hex: '#E8C4A2' },
'Grape Jelly': { hex: '#6B2D75' },
'Crystal Blue': { hex: '#5BC0EB' },
'Quicksilver': { hex: '#A6A9AA' },
'TPU 95A HF Yellow': { hex: '#F3E600' },
// Default fallback
'Unknown': { hex: '#CCCCCC' }
'Flesh': { hex: '#FFCCB0' },
'Grape Jelly': { hex: '#6A0DAD' },
'Crystal Blue': { hex: '#68B8E8' },
'Quicksilver': { hex: '#A6A6A6' }
};
export function getFilamentColor(colorName: string): ColorMapping {
@@ -240,7 +230,7 @@ export function getFilamentColor(colorName: string): ColorMapping {
}
// Return default unknown color
return bambuLabColors['Unknown'];
return { hex: '#CCCCCC' };
}
export function getColorStyle(colorMapping: ColorMapping): React.CSSProperties {

View File

@@ -7,19 +7,19 @@ import { BAMBU_LAB_CATALOG } from './bambuLabCatalog';
export const bambuLabColors: Record<string, string> = {
// PLA Basic
"Jade White": "#FFFFFF",
"Black": "#000000",
"Black": "#1A1A1A",
"White": "#FFFFFF",
"Red": "#E53935",
"Blue": "#1E88E5",
"Green": "#43A047",
"Yellow": "#FDD835",
"Orange": "#FB8C00",
"Red": "#C12E1F",
"Blue": "#0A2989",
"Green": "#00AE42",
"Yellow": "#F4EE2A",
"Orange": "#FF6A13",
"Purple": "#5E43B7",
"Pink": "#F55A74",
"Gray": "#8E9089",
"Brown": "#9D432C",
"Light Blue": "#61B0FF",
"Light Gray": "#D0D2D4",
"Light Gray": "#C8C8C8",
"Sky Blue": "#73B2E5",
"Navy Blue": "#0C2340",
"Magenta": "#EC008C",
@@ -29,177 +29,188 @@ export const bambuLabColors: Record<string, string> = {
"Lemon Yellow": "#F7D959",
"Cyan": "#0086D6",
"Sakura Pink": "#E8AFCF",
"Cobalt Blue": "#0055B8",
"Cobalt Blue": "#0047AB",
"Mistletoe Green": "#3F8E43",
"Dark Red": "#BB3D43",
"Hot Pink": "#F5547D",
"Lavender": "#B5AAD5",
"Sunflower Yellow": "#FEC601",
"Pumpkin Orange": "#FF8E16",
"Lime": "#C5ED48",
"Blue Grey": "#5B6579",
"Hot Pink": "#FF4F81",
"Lavender": "#B39DDB",
"Sunflower Yellow": "#FEC600",
"Pumpkin Orange": "#E87530",
"Lime": "#76FF03",
"Blue Grey": "#7B8E97",
"Gold": "#E4BD68",
"Bright Green": "#BDCF00",
"Maroon Red": "#0A2989",
"Bright Green": "#5EC323",
"Maroon Red": "#7B2D34",
"Turquoise": "#00B1B7",
"Bronze": "#847D48",
"Silver": "#A6A9AA",
"Dark Gray": "#555555",
"Dark Gray": "#515151",
// PLA Basic Gradient
"Neon City": "#0047BB",
"Midnight Blaze": "#0047BB",
"South Beach": "#468791",
"Arctic Whisper": "#ECF7F8",
"Cotton Candy Cloud": "#E9E2EC",
"Ocean to Meadow": "#A1E4CA",
"Solar Breeze": "#F3D9D5",
"Velvet Eclipse": "#000000",
"Dawn Radiance": "#C472A1",
"Dusk Glare": "#F6B790",
"Blueberry Bubblegum": "#BADCF4",
"Blue Hawaii": "#739FE6",
"Gilded Rose": "#ED982C",
"Pink Citrus": "#F8C4BC",
"Mint Lime": "#BAF382",
"Neon City": "#39FF14",
"Midnight Blaze": "#2C1654",
"South Beach": "#00BCD4",
"Arctic Whisper": "#E0EFF6",
"Cotton Candy Cloud": "#F8BBD0",
"Ocean to Meadow": "#4DB6AC",
"Solar Breeze": "#FFD54F",
"Velvet Eclipse": "#3B0A45",
"Dawn Radiance": "#FFDAB9",
"Dusk Glare": "#FF7043",
"Blueberry Bubblegum": "#7C4DFF",
"Blue Hawaii": "#00C5CD",
"Gilded Rose": "#B76E79",
"Pink Citrus": "#FF8A65",
"Mint Lime": "#A5D6A7",
// PLA Matte
"Matte Ivory White": "#FFFFF0",
"Matte Charcoal": "#333333",
"Matte Ivory White": "#FFFFFF",
"Matte Charcoal": "#3C3C3C",
"Matte Scarlet Red": "#DE4343",
"Matte Marine Blue": "#0078BF",
"Matte Mandarin Orange": "#F99963",
"Matte Ash Gray": "#9B9EA0",
"Matte Desert Tan": "#E8DBB7",
"Matte Nardo Gray": "#747474",
"Matte Apple Green": "#C6E188",
"Matte Bone White": "#C8C5B6",
"Matte Caramel": "#A4845C",
"Matte Dark Blue": "#042F56",
"Matte Nardo Gray": "#6E6E6E",
"Matte Apple Green": "#8DB600",
"Matte Bone White": "#CBC6B8",
"Matte Caramel": "#AE835B",
"Matte Dark Blue": "#1B3A5C",
"Matte Dark Brown": "#7D6556",
"Matte Dark Chocolate": "#4A3729",
"Matte Dark Chocolate": "#4D3324",
"Matte Dark Green": "#68724D",
"Matte Dark Red": "#BB3D43",
"Matte Grass Green": "#7CB342",
"Matte Dark Red": "#8B1A1A",
"Matte Grass Green": "#61C680",
"Matte Ice Blue": "#A3D8E1",
"Matte Lemon Yellow": "#F7D959",
"Matte Lilac Purple": "#AE96D4",
"Matte Plum": "#851A52",
"Matte Plum": "#7D3F6B",
"Matte Sakura Pink": "#E8AFCF",
"Matte Sky Blue": "#73B2E5",
"Matte Sky Blue": "#7EB6D9",
"Matte Latte Brown": "#D3B7A7",
"Matte Terracotta": "#A25A37",
"Matte Terracotta": "#B15533",
// PLA Silk+
"Candy Green": "#408619",
"Candy Red": "#BB3A2E",
"Mint": "#A5DAB7",
"Titan Gray": "#606367",
"Rose Gold": "#B29593",
"Champagne": "#EBD0B1",
"Baby Blue": "#AEC3ED",
"Candy Green": "#66CDAA",
"Candy Red": "#E8505B",
"Mint": "#98FFB0",
"Titan Gray": "#8A8D8F",
"Rose Gold": "#B76E79",
"Champagne": "#F7E7CE",
"Baby Blue": "#89CFF0",
// PLA Silk Multi-Color
"Silk Aurora Purple": "#7F3696",
"Silk Phantom Blue": "#00629B",
"Silk Mystic Magenta": "#720062",
"Aurora Purple": "#9C27B0",
"Phantom Blue": "#1A237E",
"Mystic Magenta": "#E040FB",
// PLA Metal
"Iron Gray Metallic": "#6B6C6F",
"Iridium Gold Metallic": "#B39B84",
"Cobalt Blue Metallic": "#39699E",
"Copper Brown Metallic": "#AA6443",
"Oxide Green Metallic": "#1D7C6A",
"Iron Gray Metallic": "#6E6E6E",
"Iridium Gold Metallic": "#C5A04D",
"Cobalt Blue Metallic": "#0047AB",
"Copper Brown Metallic": "#B87333",
"Oxide Green Metallic": "#4A6741",
// PLA Sparkle
"Onyx Black Sparkle": "#2D2B28",
"Classic Gold Sparkle": "#E4BD68",
"Crimson Red Sparkle": "#792B36",
"Royal Purple Sparkle": "#483D8B",
"Slate Gray Sparkle": "#8E9089",
"Alpine Green Sparkle": "#3F5443",
"Onyx Black Sparkle": "#1A1A1A",
"Classic Gold Sparkle": "#CFB53B",
"Crimson Red Sparkle": "#B71C1C",
"Royal Purple Sparkle": "#6A1B9A",
"Slate Gray Sparkle": "#708090",
"Alpine Green Sparkle": "#2E7D32",
// PLA Translucent
"Teal": "#009FA1",
"Light Jade": "#C8E6C9",
"Mellow Yellow": "#F8E875",
"Cherry Pink": "#DE3163",
"Ice Blue": "#A5DEE4",
// PLA Galaxy
"Nebulae": "#424379",
"Nebulae": "#4A148C",
// PLA Marble
"White Marble": "#F7F3F0",
"Red Granite": "#AD4E38",
"White Marble": "#E8E8E8",
"Red Granite": "#A0522D",
// PLA Glow
"Glow Blue": "#7AC0E9",
"Glow Green": "#A1FFAC",
"Glow Orange": "#FF9D5B",
"Glow Pink": "#F17B8F",
"Glow Yellow": "#F8FF80",
"Glow Blue": "#5DADE2",
"Glow Green": "#82E0AA",
"Glow Orange": "#FFB347",
"Glow Pink": "#FF69B4",
"Glow Yellow": "#FFEB3B",
// PLA Wood
"Ochre Yellow": "#BC8B39",
"White Oak": "#D2CCA2",
"Clay Brown": "#8E621A",
"Ochre Yellow": "#CC7722",
"White Oak": "#C8B88A",
"Clay Brown": "#B08968",
"Black Walnut": "#3E2723",
"Rosewood": "#65000B",
"Classic Birch": "#D7C49E",
// PLA CF
"Burgundy Red": "#951E23",
"Jeans Blue": "#6E88BC",
"Lava Gray": "#4D5054",
"Matcha Green": "#5C9748",
"Royal Blue": "#2842AD",
"Iris Purple": "#69398E",
"Burgundy Red": "#800020",
"Jeans Blue": "#4A6FA5",
"Lava Gray": "#5B5B5B",
"Matcha Green": "#7B9B5B",
"Royal Blue": "#002FA7",
"Iris Purple": "#5B3A8C",
// PETG HF
"Cream": "#F3E0B8",
"Forest Green": "#415520",
"Lake Blue": "#4672E4",
"Lime Green": "#8EE43D",
"Peanut Brown": "#7E5A1F",
"Cream": "#F5E6C8",
"Forest Green": "#39541A",
"Lake Blue": "#1F79E5",
"Lime Green": "#7EC845",
"Peanut Brown": "#A0724A",
// PETG Translucent
"Clear": "#FAFAFA",
"Translucent Gray": "#B8B8B8",
"Translucent Brown": "#C89A74",
"Translucent Purple": "#C5A8D8",
"Translucent Orange": "#FFB380",
"Translucent Olive": "#A4B885",
"Translucent Pink": "#F9B8D0",
"Translucent Light Blue": "#A8D8F0",
"Translucent Tea": "#D9C7A8",
"Clear": "#F0F0F0",
"Translucent Gray": "#A9A9A9",
"Translucent Brown": "#8B4513",
"Translucent Purple": "#800080",
"Translucent Orange": "#FF8C00",
"Translucent Olive": "#808000",
"Translucent Pink": "#FFB6C1",
"Translucent Light Blue": "#ADD8E6",
"Translucent Teal": "#008B8B",
// PETG CF
"Brick Red": "#9F332A",
"Indigo Blue": "#324585",
"Malachite Green": "#16B08E",
"Malachite Green": "#0BDA51",
"Violet Purple": "#583061",
// ABS
"ABS Azure": "#489FDF",
"ABS Black": "#000000",
"ABS Blue": "#0A2989",
"ABS Olive": "#748C45",
"ABS Tangerine Yellow": "#FFC72C",
"ABS Navy Blue": "#0C2340",
"ABS Orange": "#FF6A13",
"ABS Azure": "#3B7DD8",
"ABS Black": "#1A1A1A",
"ABS Blue": "#1A3C8F",
"ABS Olive": "#6B7339",
"ABS Tangerine Yellow": "#FFBF00",
"ABS Navy Blue": "#1B2A4A",
"ABS Orange": "#F57C20",
"ABS Bambu Green": "#00AE42",
"ABS Red": "#C12E1F",
"ABS Red": "#C0392B",
"ABS White": "#FFFFFF",
"ABS Silver": "#A6A9AA",
"ABS GF Yellow": "#FDD835",
"ABS GF Orange": "#F48438",
"ABS Silver": "#B0B0B0",
// Additional PLA Basic
"Indigo Purple": "#3B2D6B",
// TPU
"Flesh": "#E8C4A2",
"Light Cyan": "#B9E3DF",
"Neon Orange": "#F68A1B",
"Blaze": "#E78390",
"Frozen": "#A6DEF3",
"Grape Jelly": "#6B2D75",
"Crystal Blue": "#5BC0EB",
"Quicksilver": "#A6A9AA",
"Cocoa Brown": "#6F5034",
"TPU 95A HF Yellow": "#F3E600",
"Neon Green": "#76FF03",
"Flesh": "#FFCCB0",
"Light Cyan": "#B2EBF2",
"Neon Orange": "#FF6D00",
"Blaze": "#FF5722",
"Frozen": "#E0F7FA",
"Grape Jelly": "#6A0DAD",
"Crystal Blue": "#68B8E8",
"Quicksilver": "#A6A6A6",
"Cocoa Brown": "#6B4332",
// PC
"Clear Black": "#5A5161",
"Transparent": "#FFFFFF",
"Clear Black": "#2C2C2C",
"Transparent": "#E8E8E8",
};
// Colors grouped by finish type — derived from catalog