- Created ToDo list functionality (CRUD) with household support.
- Linked ToDo lists to packing lists and displayed them on the packing list overview page.
- Added 'display_name' to users table, allowing separation of login name and display name.
- Fixed the irregular '+' click bug in Phase 1 by completely decoupling the local UI state updates from the backend sync latency, relying purely on DOM syncing.
- Reverted Phase 1 Lager card heights back to 200px as originally requested.
- Fixed print view empty first page by removing page-break-inside: avoid from carrier-section.
- Added backpack manufacturer and model to the print view table.
- Reverted adjust_single to use UPDATE when an item is already on the table, fixing the first-click bug and preventing duplicate rows in Phase 1.
- Added a modal 'Move' button to items in Phase 2 allowing them to be moved between backpacks and compartments directly.
- Further reduced the height of Lager cards to remove empty space below buttons.
- Fixed the print view by updating the SQL query and adding manufacturer + product designation to the rows.
- Reverted Phase 1 table addition to increment quantity of a single row rather than creating multiple rows.
- Added a modal in Phase 2 that triggers when dragging an item with quantity > 1 into a backpack, asking how many items to move.
- The remaining items are kept on the table.
- Updated the 'return to table' functionality when deleting from a backpack to correctly merge quantities back onto the virtual table without affecting other compartments.
- Modified API handler so adding items from Phase 1 always creates distinct rows on the Table. This allows splitting and dragging identical items into different backpack compartments.
- Added a modal prompt when removing an item from a backpack, asking the user whether to delete it completely or just move it back to the virtual table.
- Changed Phase 1 layout to 2/3 (Lager) and 1/3 (Table) split.
- Added an interactive, draggable resizer handle between the two panes.
- Made Lager cards ~10% wider and enforced a strict uniform height (200px).
- Added manufacturer name to cards and applied text-overflow: ellipsis to prevent line breaks.
- Reduced font sizes for metadata to fit compactly.
- Safely removed SortableJS destroy() logic to prevent JS crash.
- Fixed missing thumbnails in Phase 2 after drag & drop (SQL query was missing image_url field during sync).
- Removed flex-grow from Phase 1 cards and added align-items: start to grid to prevent empty bottom spaces.
- Forced image wrapper to 120px height to ensure images appear large while keeping cards short.
- Added 30x30 image thumbnail with tooltip to list items in Phase 2 (Table & Backpack).
- Set default Group By to Category and Sort By to Weight (Asc) in Phase 1.
- Reverted Phase 1 Lager cards to a squarish layout but retained the large image sizing.
- Removed the tooltip hover effect from the Phase 1 Lager images.
- Added product designation (model/type) to the Lager cards in Phase 1.
- Added product designation to the item rows on the Table and in the Backpacks (Phase 1 & 2).
- The images were stuck at 30x30px due to an '!important' rule in the global style.css.
- Overrode the rule in manage_packing_list_items.php to let images scale to 100px.
- Made the grid cards smaller and squarish again (140px min-width) as requested.
- Greatly increased image sizes in Lager grid (220px height, 250px width).
- Added new dropdown for sorting by Name, Weight, or Quantity.
- Sorting works correctly alongside grouping.
- Safely destroy Sortable instances before clearing innerHTML.
- Added Group By dropdown (Kategorie, Hersteller, Lagerort) to Phase 1.
- Increased image size in Lager grid from 130px to 160px.
- Set volume to external: true in docker-compose.yml to attach to original user uploads volume.
- Fixed PHP Fatal error by preventing literal pass-by-reference in bind_param.
- Made JSON null parsing for carrier_id more robust.
- Added error logging to api_error.log for future debugging.
- Increased image size in Lager grid.
- Allowed dragging by clicking anywhere on the item row.
- Removed empty space/dropzone gaps on the table.
- Added debounce to syncListState to prevent concurrent save errors during rapid drag & drop.
- Created grid view for available articles (Lager) with +/- buttons.
- Added middle pane for staging items (Auf dem Tisch).
- Updated drag and drop sync to handle three phases.
- Added direct links to Phase 1 and Phase 2 from the packing list overview.
- api_packing_list_handler.php: Use robust LEFT JOINs to fetch backpack/compartment names, fixing '0' display issue for templates.
- packing_lists.php: Add 'Edit Details' button for templates.
- edit_packing_list_details.php: Allow sharing templates with household (checkbox) and adjust title for templates.
- DB-Schema erweitert (is_template Spalte in packing_lists)
- packing_lists.php: Tabs für Listen/Vorlagen und Filterung
- save_as_template.php: Funktion zum Speichern einer Liste als Vorlage
- add_packing_list.php: Neue Liste aus Vorlage erstellen
- packing_list_utils.php: Zentrale Kopier-Logik (inkl. Träger & Hierarchien)
- edit_packing_list_details.php: Navigation angepasst
- DB-Erweiterung für linked_article_id in backpack_compartments.
- UI in edit_backpack.php zum Verknüpfen von Artikeln als Fächer.
- Sync-Logik in backpack_utils.php übernimmt Artikel-Daten.
- Gewichts-Kalkulation in backpacks.php berücksichtigt Zusatztaschen.
- Changelog aktualisiert.