3.12 Mini Utilities Extindere si Fix-uri

- NumberToText: Romanian number-to-words converter (lei/bani, compact, spaced)
- ColorPaletteExtractor: image upload -> top 8 color swatches with hex copy
- AreaConverter: bidirectional (mp, ari, ha, km2, sq ft)
- UValueConverter: bidirectional U->R and R->U toggle
- MDLPA: replaced broken iframe with 3 styled external link cards
- PdfReducer: drag-and-drop, simplified to 2 levels, Deblocare PDF + PDF/A links
- DWG-to-DXF skipped (needs backend service)
This commit is contained in:
AI Assistant
2026-02-28 01:54:40 +02:00
parent 6535c8ce7f
commit 989a9908ba
2 changed files with 623 additions and 130 deletions
@@ -343,8 +343,7 @@ export function DigitalSignaturesModule() {
{groupedAssets.map(([group, items]) => (
<div key={group}>
<h3 className="mb-3 text-sm font-medium text-muted-foreground">
{group}{" "}
<span className="text-xs">({items.length})</span>
{group} <span className="text-xs">({items.length})</span>
</h3>
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
{items.map((asset) => (
@@ -539,15 +538,11 @@ function AssetCard({
<FileDown className="mr-2 h-4 w-4" />
<span>Original</span>
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => void downloadAsWord(asset)}
>
<DropdownMenuItem onClick={() => void downloadAsWord(asset)}>
<FileText className="mr-2 h-4 w-4" />
<span>Word (.docx)</span>
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => void downloadAsPdf(asset)}
>
<DropdownMenuItem onClick={() => void downloadAsPdf(asset)}>
<FileDown className="mr-2 h-4 w-4" />
<span>PDF (.pdf)</span>
</DropdownMenuItem>
@@ -575,8 +570,7 @@ function ImageUploadField({
const [processing, setProcessing] = useState(false);
const handleFile = async (file: File) => {
const isTiff =
file.type === "image/tiff" || /\.tiff?$/i.test(file.name);
const isTiff = file.type === "image/tiff" || /\.tiff?$/i.test(file.name);
if (isTiff) {
setProcessing(true);
@@ -638,9 +632,7 @@ function ImageUploadField({
) : (
<>
<Upload className="h-6 w-6" />
<span>
Trage imaginea aici sau apasă pentru a selecta
</span>
<span>Trage imaginea aici sau apasă pentru a selecta</span>
<span className="text-xs text-muted-foreground/60">
PNG, JPG, TIFF
</span>
@@ -778,9 +770,7 @@ function AssetForm({
const [company, setCompany] = useState<CompanyId>(
initial?.company ?? "beletage",
);
const [subcategory, setSubcategory] = useState(
initial?.subcategory ?? "",
);
const [subcategory, setSubcategory] = useState(initial?.subcategory ?? "");
const [tags, setTags] = useState<string[]>(initial?.tags ?? []);
const [tagInput, setTagInput] = useState("");
@@ -927,9 +917,7 @@ function AssetForm({
if (tagInput.trim()) addTag(tagInput);
}}
placeholder={
tags.length === 0
? "Adaugă etichete (Enter sau virgulă)..."
: ""
tags.length === 0 ? "Adaugă etichete (Enter sau virgulă)..." : ""
}
className="min-w-[120px] flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"
/>