templates, handlers, CSS, JS: special cakes UI, HTMX nav, dashboard overhaul

Special cakes UI: overlay drawer, basket integration, catalogue tag
filter, form parsing, JS save/edit/remove.
HTMX navigation: MainContent component, nav links with hx-get,
handlers return partial on HX-Request.
Dashboard: metrics grid, CakeBreakdown, OrderRow with status select,
CakeCounts/OrderCounts, torty filter, tort badge, results-pane.
Collapsible sidebar: toggle button, localStorage, CSS transitions.
Location field: dropdown replaced with pill toggle.
Inline style cleanup: moved to CSS classes (tag-grid, grow, icon.sm,
header-actions, toggle-group, success-icon, etc.).
Dead CSS removal: pagination, status-chip, badge-pill, login-page.
Helpers: exported CakeTitle/OrderTitle, added tagNames, tagIDsComma,
orderItemsDesc, specialCakeDetail, removed unused helpers.
This commit is contained in:
bronkuu 2026-06-15 18:50:21 +02:00
parent 17b92a706a
commit 5a5372b831
18 changed files with 1153 additions and 422 deletions

View file

@ -0,0 +1,79 @@
package templates
import (
"strconv"
"git.bronku.xyz/bronku/cake-order-tracker/models"
)
templ SpecialCakeOverlay(allTags []models.Tag) {
<div id="sc-overlay" class="overlay">
<div class="overlay-backdrop" onclick="closeSpecialCakeOverlay()"></div>
<div class="overlay-panel">
<div class="overlay-header">
<h2>
<span class="material-symbols-outlined">cake_add</span>
<span id="sc-overlay-title">Dodaj tort specjalny</span>
</h2>
<button type="button" class="close-btn" onclick="closeSpecialCakeOverlay()">
<span class="material-symbols-outlined">close</span>
</button>
</div>
<div class="overlay-body">
<div class="overlay-form">
<div class="form-group">
<label>Nazwa *</label>
<input class="form-input" type="text" id="sc-name" placeholder="Nazwa tortu"/>
</div>
<div class="form-group">
<label>Cena *</label>
<input class="form-input" type="number" id="sc-price" min="0" step="0.01" placeholder="0.00"/>
</div>
<div class="form-group">
<label>Wielkość</label>
<input class="form-input" type="text" id="sc-size" placeholder="np. 20cm, 30x40"/>
</div>
<div class="form-group">
<label>Kształt</label>
<select class="form-input" id="sc-shape">
<option value="">—</option>
<option value="round">Okrągły</option>
<option value="square">Kwadrat</option>
</select>
</div>
<div class="form-group">
<label>Smak</label>
<input class="form-input" type="text" id="sc-flavour" placeholder="np. czekoladowy"/>
</div>
<div class="form-group">
<label>Notatki</label>
<input class="form-input" type="text" id="sc-notes" placeholder="Dodatkowe informacje"/>
</div>
if len(allTags) > 0 {
<div class="form-group">
<label>Tagi</label>
<div class="tag-grid" id="sc-overlay-tags">
for _, t := range allTags {
<label class="tag-chip">
<input type="checkbox" class="sc-tag-cb" value={ strconv.Itoa(t.ID) } style="display:none"/>
{ t.Name }
</label>
}
</div>
<div class="horizontal-group" style="margin-top:0.375rem">
<input class="form-input grow" type="text" id="sc-new-tag" placeholder="Nowy tag..."/>
</div>
</div>
}
</div>
</div>
<div class="overlay-footer">
<button type="button" class="btn outline" onclick="closeSpecialCakeOverlay()">Anuluj</button>
<button type="button" class="btn primary" onclick="saveSpecialCake()">
<span class="material-symbols-outlined">check</span>
Zapisz
</button>
</div>
</div>
</div>
}