--- phase: 82-product-title-tooltip plan: 01 type: execute wave: 1 depends_on: [] files_modified: [src/Modules/Orders/OrdersController.php] autonomous: true --- ## Goal Dodanie natywnego tooltipa (atrybut `title`) do uciętych nazw produktów na liście zamówień, aby po najechaniu myszką wyświetlała się pełna nazwa. ## Purpose Na liście zamówień nazwy produktów są obcinane przez `text-overflow: ellipsis`. Użytkownik nie ma możliwości zobaczenia pełnej nazwy bez wchodzenia w szczegóły zamówienia. Tooltip rozwiązuje ten problem minimalnym kosztem. ## Output Zmodyfikowany `OrdersController::productsHtml()` — atrybut `title` na elemencie `.orders-product__name`. ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Source Files @src/Modules/Orders/OrdersController.php (metoda productsHtml(), linia 664) No specialized flows required. ## AC-1: Tooltip z pełną nazwą produktu ```gherkin Given lista zamówień z produktem o długiej nazwie uciętej przez ellipsis When użytkownik najedzie kursorem na uciętą nazwę produktu Then pojawia się natywny tooltip przeglądarki z pełną nazwą produktu ``` ## AC-2: Brak tooltipa dla pustych nazw ```gherkin Given produkt bez nazwy (wyświetlany jako "-") When użytkownik najedzie kursorem na "-" Then nie pojawia się tooltip (brak atrybutu title lub pusty) ``` Task 1: Dodanie atrybutu title do .orders-product__name src/Modules/Orders/OrdersController.php W metodzie `productsHtml()`, linia 664, dodać atrybut `title` do `
`: Zmienić: ```php . '
' . htmlspecialchars($name !== '' ? $name : '-', ENT_QUOTES, 'UTF-8') . '
' ``` Na: ```php . '
' . htmlspecialchars($name !== '' ? $name : '-', ENT_QUOTES, 'UTF-8') . '
' ``` - Atrybut `title` dodawany tylko gdy nazwa nie jest pusta - Wartość `title` escapowana przez `htmlspecialchars` (XSS safety) - Nie zmieniać żadnej innej logiki metody Otworzyć /orders/list, najechać na uciętą nazwę produktu — powinien pojawić się tooltip z pełną nazwą AC-1 i AC-2 spełnione: tooltip pokazuje pełną nazwę; brak tooltipa dla pustych nazw ## DO NOT CHANGE - resources/scss/* (styl truncacji zostaje bez zmian) - resources/views/orders/* (widoki bez zmian) - Logika budowania `$itemsPreview` i reszta metody `productsHtml()` ## SCOPE LIMITS - Tylko natywny tooltip HTML (`title`), bez custom JS tooltip library - Tylko lista zamówień — nie strona szczegółów Before declaring plan complete: - [ ] Atrybut `title` obecny w renderowanym HTML produktów z długą nazwą - [ ] Brak atrybutu `title` dla produktów bez nazwy - [ ] Brak regresji — lista zamówień renderuje się poprawnie - [ ] Wszystkie acceptance criteria spełnione - Tooltip z pełną nazwą produktu widoczny po hover na liście zamówień - Brak zmian CSS ani JS - Brak regresji w renderowaniu listy After completion, create `.paul/phases/82-product-title-tooltip/82-01-SUMMARY.md`