Compare commits
3 Commits
deploy-202
...
deploy-202
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
063ef4f096 | ||
|
|
d55d0e5e02 | ||
|
|
cff73c1381 |
10
CLAUDE.md
10
CLAUDE.md
@@ -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
|
||||
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
×
|
||||
</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 && (
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
×
|
||||
</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>
|
||||
);
|
||||
}
|
||||
|
||||
213
database/migrations/023_cleanup_fake_colors_add_missing.sql
Normal file
213
database/migrations/023_cleanup_fake_colors_add_missing.sql
Normal 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;
|
||||
@@ -115,9 +115,9 @@ export const BAMBU_LAB_CATALOG: BambuLabCatalog = {
|
||||
},
|
||||
'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 },
|
||||
],
|
||||
},
|
||||
Metal: {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,174 @@ 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 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",
|
||||
|
||||
// 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",
|
||||
|
||||
// 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",
|
||||
"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
|
||||
|
||||
Reference in New Issue
Block a user