fix(ui): Freigeben-Button in Topbar + Toolbar-Farben nicht mehr abgeschnitten (v1.6.7)
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 32m5s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 32m5s
- Freigeben: prominenter grüner Button neben Speichern, sichtbar solange man den Bearbeitungs-Lock hält (war nur als versteckter Link in der Statuszeile) - Linke Toolbar kompakter (flachere Buttons/Trenner, pb-3), damit Farben und Linienstärke auf kleineren Screens nicht mehr unten rauslaufen Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lageplan",
|
||||
"version": "1.6.6",
|
||||
"version": "1.6.7",
|
||||
"description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1030,6 +1030,9 @@ export default function AppPage() {
|
||||
}
|
||||
}}
|
||||
windLive={windLive}
|
||||
isEditingByMe={isEditingByMe}
|
||||
onStopEditing={handleStopEditing}
|
||||
editingLoading={editingLoading}
|
||||
/>
|
||||
|
||||
{/* Kompakte Status-Zeile — eine Zeile mit Chips statt bis zu vier gestapelten Bannern.
|
||||
|
||||
@@ -83,8 +83,8 @@ export function LeftToolbar({
|
||||
}: LeftToolbarProps) {
|
||||
return (
|
||||
<TooltipProvider delayDuration={300}>
|
||||
<aside data-tour="toolbar" className="w-14 lg:w-20 border-r border-border bg-card flex flex-col items-center py-1.5 lg:py-2 shrink-0 overflow-y-auto overflow-x-hidden z-10">
|
||||
{/* Draw Tools — Touch-Ziele mind. 44px auf Mobil/Tablet */}
|
||||
<aside data-tour="toolbar" className="w-14 lg:w-20 border-r border-border bg-card flex flex-col items-center py-1 lg:py-2 pb-3 shrink-0 overflow-y-auto overflow-x-hidden z-10">
|
||||
{/* Draw Tools — Touch-Ziele gross genug für Finger */}
|
||||
<div className="flex flex-col gap-0.5">
|
||||
{drawTools.map((tool) => (
|
||||
<Tooltip key={tool.mode}>
|
||||
@@ -92,7 +92,7 @@ export function LeftToolbar({
|
||||
<Button
|
||||
variant={drawMode === tool.mode ? 'default' : 'ghost'}
|
||||
size="icon"
|
||||
className="w-11 h-11 lg:w-12 lg:h-12"
|
||||
className="w-11 h-10 lg:w-12 lg:h-12"
|
||||
onClick={() => onDrawModeChange(tool.mode)}
|
||||
disabled={!canEdit && tool.mode !== 'select'}
|
||||
>
|
||||
@@ -106,16 +106,16 @@ export function LeftToolbar({
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="w-8 lg:w-12 h-px bg-border my-1" />
|
||||
<div className="w-8 lg:w-12 h-px bg-border my-0.5 lg:my-1" />
|
||||
|
||||
{/* Undo/Redo — mobil gestapelt (44px), Desktop 2-spaltig */}
|
||||
{/* Undo/Redo — mobil gestapelt (flach), Desktop 2-spaltig */}
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-0.5">
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
className="w-11 h-11 lg:w-8 lg:h-8"
|
||||
className="w-11 h-9 lg:w-8 lg:h-8"
|
||||
onClick={onUndo}
|
||||
disabled={!canEdit}
|
||||
>
|
||||
@@ -132,7 +132,7 @@ export function LeftToolbar({
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
className="w-11 h-11 lg:w-8 lg:h-8"
|
||||
className="w-11 h-9 lg:w-8 lg:h-8"
|
||||
onClick={onRedo}
|
||||
disabled={!canEdit}
|
||||
>
|
||||
@@ -146,10 +146,10 @@ export function LeftToolbar({
|
||||
|
||||
</div>
|
||||
|
||||
<div className="w-8 lg:w-12 h-px bg-border my-1" />
|
||||
<div className="w-8 lg:w-12 h-px bg-border my-0.5 lg:my-1" />
|
||||
|
||||
{/* Color Picker - 2-col grid, grössere Swatches für Touch */}
|
||||
<div className="grid grid-cols-2 gap-1">
|
||||
<div className="grid grid-cols-2 gap-1 shrink-0">
|
||||
{colors.map((color) => (
|
||||
<button
|
||||
key={color.value}
|
||||
@@ -167,10 +167,10 @@ export function LeftToolbar({
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="w-8 lg:w-12 h-px bg-border my-1" />
|
||||
<div className="w-8 lg:w-12 h-px bg-border my-0.5 lg:my-1" />
|
||||
|
||||
{/* Linienstärke */}
|
||||
<div className="flex flex-col gap-1">
|
||||
<div className="flex flex-col gap-0.5 shrink-0">
|
||||
{widths.map((w) => (
|
||||
<button
|
||||
key={w.value}
|
||||
@@ -178,7 +178,7 @@ export function LeftToolbar({
|
||||
disabled={!canEdit}
|
||||
title={`Linienstärke: ${w.label}`}
|
||||
className={cn(
|
||||
'w-11 h-8 lg:w-12 lg:h-8 rounded-md flex items-center justify-center transition-colors',
|
||||
'w-11 h-7 lg:w-12 lg:h-8 rounded-md flex items-center justify-center transition-colors',
|
||||
selectedWidth === w.value ? 'bg-primary/15 ring-1 ring-primary' : 'hover:bg-accent',
|
||||
!canEdit && 'opacity-50 cursor-not-allowed'
|
||||
)}
|
||||
|
||||
@@ -80,6 +80,12 @@ interface TopbarProps {
|
||||
onTogglePresentationLock?: () => void
|
||||
/** Windrichtung wird live aktualisiert (für die Live-Anzeige oben) */
|
||||
windLive?: boolean
|
||||
/** true, wenn der aktuelle Nutzer den Bearbeitungs-Lock hält */
|
||||
isEditingByMe?: boolean
|
||||
/** Karte speichern & für andere freigeben (Lock lösen) */
|
||||
onStopEditing?: () => void
|
||||
/** Lock-Aktion läuft gerade */
|
||||
editingLoading?: boolean
|
||||
}
|
||||
|
||||
export function Topbar({
|
||||
@@ -107,6 +113,9 @@ export function Topbar({
|
||||
presentationLocked,
|
||||
onTogglePresentationLock,
|
||||
windLive,
|
||||
isEditingByMe,
|
||||
onStopEditing,
|
||||
editingLoading,
|
||||
}: TopbarProps) {
|
||||
const [isLoadDialogOpen, setIsLoadDialogOpen] = useState(false)
|
||||
const [isHoseSettingsOpen, setIsHoseSettingsOpen] = useState(false)
|
||||
@@ -236,6 +245,21 @@ export function Topbar({
|
||||
{isSaving ? <Loader2 className="w-5 h-5 animate-spin" /> : <Save className="w-5 h-5" />}
|
||||
</Button>
|
||||
|
||||
{/* Freigeben — nur sichtbar, solange ich den Bearbeitungs-Lock halte.
|
||||
Speichert und gibt die Karte für andere frei. Grün = ich bin am Zeichnen. */}
|
||||
{isEditingByMe && onStopEditing && (
|
||||
<Button
|
||||
variant="outline"
|
||||
className="h-9 md:h-10 px-2 md:px-2.5 shrink-0 border-green-500 text-green-700 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-950/40"
|
||||
onClick={onStopEditing}
|
||||
disabled={editingLoading}
|
||||
title="Karte speichern & für andere freigeben"
|
||||
>
|
||||
{editingLoading ? <Loader2 className="w-5 h-5 animate-spin lg:mr-1" /> : <Unlock className="w-5 h-5 lg:mr-1" />}
|
||||
<span className="hidden lg:inline">Freigeben</span>
|
||||
</Button>
|
||||
)}
|
||||
|
||||
{/* Neu — Split-Button für Einsatz/Übung (ein Akzent statt zwei farbiger Buttons) */}
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
|
||||
Reference in New Issue
Block a user