---
phase: 24-shipment-presets-ui
plan: 01
type: execute
wave: 1
depends_on: ["23-01"]
files_modified:
- resources/views/shipments/prepare.php
- resources/scss/modules/_shipment-presets.scss
- resources/scss/main.scss
autonomous: false
---
## Goal
Dodać sekcję presetów przesyłek nad formularzem przygotowania przesyłki: kolorowe przyciski, popup tworzenia presetu (nazwa + kolor), JS autofill formularza po kliknięciu.
## Purpose
Użytkownik chce jednym kliknięciem wypełnić formularz przesyłki zapisanymi parametrami — bez ręcznego wybierania przewoźnika, usługi, wymiarów za każdym razem.
## Output
- Sekcja presetów z kolorowymi przyciskami nad formularzem
- Popup do tworzenia presetu (nazwa + kolor) z bieżących wartości formularza
- JS: autofill formularza po kliknięciu przycisku presetu
- SCSS style dla presetów
## Project Context
@.paul/PROJECT.md
@.paul/ROADMAP.md
@.paul/STATE.md
## Prior Work
@.paul/phases/23-shipment-presets-backend/23-01-SUMMARY.md
## Source Files
@resources/views/shipments/prepare.php
@src/Modules/Shipments/ShipmentPresetController.php
@routes/web.php
No specialized flows required for this plan (sonar-scanner required post-APPLY).
## AC-1: Przyciski presetów widoczne nad formularzem
```gherkin
Given użytkownik otwiera stronę przygotowania przesyłki
When w bazie istnieją presety
Then nad formularzem wyświetlają się kolorowe przyciski z nazwami presetów
And wyświetla się przycisk "Dodaj przycisk dostawy"
```
## AC-2: Kliknięcie presetu wypełnia formularz
```gherkin
Given preset ma zapisane: carrier=inpost, package_type=PACKAGE, weight=2kg, wymiary 30x25x10
When użytkownik klika przycisk tego presetu
Then formularz automatycznie wypełnia się tymi wartościami
And odpowiedni panel przewoźnika staje się widoczny
And usługa dostawy zostaje wybrana
```
## AC-3: Przycisk "Dodaj przycisk dostawy" tworzy preset z bieżących wartości
```gherkin
Given użytkownik wypełnił formularz (wybrał przewoźnika, usługę, wymiary itp.)
When klika "Dodaj przycisk dostawy"
Then pojawia się popup z polem nazwy i wyborem koloru
When wpisuje nazwę i klika Zapisz
Then preset zostaje zapisany przez API i przycisk pojawia się w sekcji
```
Task 1: SCSS style dla presetów
resources/scss/modules/_shipment-presets.scss, resources/scss/main.scss
1. Utworzyć `resources/scss/modules/_shipment-presets.scss`:
- `.shipment-presets` — kontener sekcji (flex, wrap, gap: 8px, margin-bottom: 16px)
- `.shipment-presets__btn` — przycisk presetu:
- Inline-flex, border-radius: 6px, padding: 6px 14px
- Biały tekst, tło z custom property `--preset-color`
- Hover: opacity 0.85, cursor pointer
- Font-size: 13px, font-weight: 500
- `.shipment-presets__add` — przycisk dodawania:
- Border: 1px dashed #ccc, background transparent
- Color: #666, hover: border-color #999
- `.preset-modal` — overlay popup:
- Position fixed, inset 0, background rgba(0,0,0,0.4), z-index 1000
- Display flex, align-items center, justify-content center
- `.preset-modal__content` — zawartość popup:
- Background white, border-radius 8px, padding 24px, min-width 360px, max-width 420px
- `.preset-modal__colors` — grid kolorów:
- Display flex, gap 8px, flex-wrap wrap
- `.preset-modal__color-swatch` — próbka koloru:
- Width 28px, height 28px, border-radius 50%, cursor pointer
- Border: 2px solid transparent
- `&.is-selected` — border-color: #333
2. Dodać `@import 'modules/shipment-presets';` w `resources/scss/main.scss`
Sprawdzić że plik SCSS istnieje i import dodany do main.scss
AC-1 partially: style gotowe
Task 2: HTML sekcja presetów + popup + JavaScript
resources/views/shipments/prepare.php
1. **Sekcja presetów** — wstawić PRZED `