feat: mobilni responsivita, testy, klavesove zkratky, drag & drop, univerzalizace

- Mobile responsive CSS (touch targets 44px, iOS anti-zoom, reduced motion)
- Vitest setup s 39 testy (formatters, attendanceHelpers, useTableSort)
- Klavesove zkratky (Shift+? napoveda, Ctrl+S ulozit, navigace)
- Drag & drop pro polozky nabidek (@dnd-kit, SortableRow, useSortableList)
- Univerzalizace: odstraneni BOHA brandingu z UI, emailu, PDF
- Smazany nepotrebne soubory (deploy.sh, AUTH_SYSTEM.md, example_design, .htaccess)
- CORS konfigurovatelny pres env promennou

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 17:33:37 +01:00
parent 5ef6fc8064
commit bb2bbb8ff6
35 changed files with 2716 additions and 4392 deletions

View File

@@ -330,16 +330,6 @@ export default function OfferDetail() {
setItems(prev => prev.length > 1 ? prev.filter((_, i) => i !== index) : prev)
}
const moveItem = (index, direction) => {
setItems(prev => {
const newItems = [...prev]
const target = index + direction
if (target < 0 || target >= newItems.length) return prev
;[newItems[index], newItems[target]] = [newItems[target], newItems[index]]
return newItems
})
}
const addItemFromTemplate = (template) => {
setItems(prev => [...prev, {
_key: `item-${++_keyCounter}`,
@@ -921,10 +911,10 @@ export default function OfferDetail() {
<OfferItemsSection
items={items}
setItems={setItems}
updateItem={updateItem}
addItem={addItem}
removeItem={removeItem}
moveItem={moveItem}
itemTemplates={itemTemplates}
showItemTemplateMenu={showItemTemplateMenu}
setShowItemTemplateMenu={setShowItemTemplateMenu}