diff --git a/CHANGELOG.md b/CHANGELOG.md index b262829be..cd0474863 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ All notable changes to Bambuddy will be documented in this file. - **Japanese Locale Complete Overhaul** — Restructured `ja.ts` from a divergent format (different key structure, 12 structural conflicts, 1,366 missing translations) to match the English/German locale structure exactly. Translated all 2,083 keys into Japanese, achieving full parity with EN/DE. Zero structural divergences, zero missing keys. ### Fixed +- **Sidebar Links Custom Icons Have Inverted Colors** ([#308](https://github.com/maziggy/bambuddy/issues/308)) — Custom uploaded icons in sidebar links had their colors inverted in dark mode due to a CSS `invert()` filter. The filter was intended for monochrome preset icons but was incorrectly applied to user-uploaded images (e.g., full-color logos). Removed the invert filter from custom icon rendering in the sidebar and the add/edit link modal. - **Virtual Printer FTP Transfer Fails With Connection Reset** ([#58](https://github.com/maziggy/bambuddy/issues/58)) — Large 3MF uploads to the virtual printer intermittently failed with `[Errno 104] Connection reset by peer` while the small verify_job always succeeded. The `_handle_data_connection` callback returned immediately, allowing the asyncio server-handler task to complete while the data connection was still in active use. The passive port listener also stayed open during transfers, risking duplicate data connections. Fixed by keeping the callback alive until the transfer completes (`_transfer_done` event), closing the passive listener after accepting the connection, and rejecting duplicate data connections. Also added a 5-second drain timeout to MQTT status pushes to prevent blocking when the slicer is busy uploading. - **Camera Stop 401 When Auth Enabled** — Camera stop requests (`sendBeacon`) failed with 401 Unauthorized when authentication was enabled because `sendBeacon` cannot send auth headers. Replaced with `fetch` + `keepalive: true` which supports Authorization headers while remaining reliable during page unload. - **Spoolman Creates Duplicate Spools on Startup** ([#295](https://github.com/maziggy/bambuddy/pull/295)) — Each AMS tray independently fetched all spools from Spoolman, causing redundant API calls and duplicate spool creation with large databases (300+ spools). Now fetches spools once and reuses cached data across all tray operations. Added retry logic (3 attempts, 500ms delay) with connection recreation for transient network errors. diff --git a/frontend/src/components/AddExternalLinkModal.tsx b/frontend/src/components/AddExternalLinkModal.tsx index fa9417db1..d4c29a4ca 100644 --- a/frontend/src/components/AddExternalLinkModal.tsx +++ b/frontend/src/components/AddExternalLinkModal.tsx @@ -5,8 +5,6 @@ import { api } from '../api/client'; import type { ExternalLink, ExternalLinkCreate, ExternalLinkUpdate } from '../api/client'; import { Button } from './Button'; import { IconPicker, getIconByName } from './IconPicker'; -import { useTheme } from '../contexts/ThemeContext'; - interface AddExternalLinkModalProps { link?: ExternalLink | null; onClose: () => void; @@ -14,7 +12,6 @@ interface AddExternalLinkModalProps { export function AddExternalLinkModal({ link, onClose }: AddExternalLinkModalProps) { const queryClient = useQueryClient(); - const { mode } = useTheme(); const isEditing = !!link; const fileInputRef = useRef(null); @@ -166,7 +163,7 @@ export function AddExternalLinkModal({ link, onClose }: AddExternalLinkModalProp
{useCustomIcon && customIconPreview ? ( - + ) : ( )} @@ -233,7 +230,7 @@ export function AddExternalLinkModal({ link, onClose }: AddExternalLinkModalProp /> {useCustomIcon && customIconPreview ? (
- Custom icon + Custom icon