feat(F-048): completed feature

This commit is contained in:
chattie
2026-08-19 07:17:14 +02:00
parent 8ee1938af9
commit 835ab66eda
187 changed files with 12361 additions and 1065 deletions

View File

@@ -0,0 +1,59 @@
'use client';
/**
* Normalized table row actions following the /categories pattern:
* icon buttons (not text) with hover color and title tooltips.
*
* FIX-12: replaces text "Editar"/"Eliminar" buttons across backoffice tables.
*/
const PencilIcon = (
<svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
);
const TrashIcon = (
<svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
</svg>
);
interface RowActionsProps {
onEdit?: () => void;
onDelete?: () => void;
editTitle?: string;
deleteTitle?: string;
}
export function RowActions({
onEdit,
onDelete,
editTitle = 'Editar',
deleteTitle = 'Eliminar',
}: RowActionsProps) {
return (
<div className="flex gap-2">
{onEdit && (
<button
onClick={onEdit}
className="p-1.5 text-gray-400 hover:text-[#2D6A4F] hover:bg-green-50 rounded-lg transition-colors"
title={editTitle}
aria-label={editTitle}
>
{PencilIcon}
</button>
)}
{onDelete && (
<button
onClick={onDelete}
className="p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded-lg transition-colors"
title={deleteTitle}
aria-label={deleteTitle}
>
{TrashIcon}
</button>
)}
</div>
);
}