diff --git a/TRANSLATIONS.md b/TRANSLATIONS.md index 6b60ea4..2fa4fd6 100644 --- a/TRANSLATIONS.md +++ b/TRANSLATIONS.md @@ -1,6 +1,6 @@ # Translation Status -Last updated: 2026-10-07 09:57:47 +Last updated: 2026-10-09 09:28:47 Reference locale (en): **346 keys** diff --git a/frontend/src/lib/components/InvoiceEditor.svelte b/frontend/src/lib/components/InvoiceEditor.svelte index 3528718..4d27298 100644 --- a/frontend/src/lib/components/InvoiceEditor.svelte +++ b/frontend/src/lib/components/InvoiceEditor.svelte @@ -3,6 +3,7 @@ import { Plus, GripVertical } from "lucide-svelte"; import { goto } from "$app/navigation"; import { generateId } from "$lib/utils/id"; + import ProductCombobox from "$lib/components/ProductCombobox.svelte"; let { data, invoice = null, formId = "invoice-editor-form" } = $props(); let initInvoice = untrack(() => invoice); @@ -363,12 +364,7 @@ {#if products.length > 0} - + applyProductSelection(item, productId)} /> {/if} diff --git a/frontend/src/lib/components/ProductCombobox.svelte b/frontend/src/lib/components/ProductCombobox.svelte new file mode 100644 index 0000000..22c785f --- /dev/null +++ b/frontend/src/lib/components/ProductCombobox.svelte @@ -0,0 +1,169 @@ + + +
+
+ { + open = true; + activeIndex = 0; + }} + onkeydown={handleKeydown} + /> + {#if value} + + {:else} + + {/if} +
+ + {#if open} + + + {/if} +
diff --git a/frontend/src/lib/i18n/locales/de.json b/frontend/src/lib/i18n/locales/de.json index 5cb042b..c1d6447 100644 --- a/frontend/src/lib/i18n/locales/de.json +++ b/frontend/src/lib/i18n/locales/de.json @@ -33,6 +33,7 @@ "Category Name": "Kategoriename", "City": "Stadt", "City + Postal Code": "Stadt + Postleitzahl", + "Clear": "Leeren", "Clear All": "Alle abwählen", "Company": "Unternehmen", "Company Address": "Unternehmensadresse", @@ -181,6 +182,7 @@ "No description": "Keine Beschreibung", "No invoices found": "Keine Rechnungen gefunden", "No invoices match this filter": "Keine Rechnungen entsprechen diesem Filter", + "No products found": "Keine Produkte gefunden", "No products yet.": "Noch keine Produkte.", "No tax definitions yet.": "Noch keine Steuerdefinitionen.", "No templates found.": "Keine Vorlagen gefunden.", diff --git a/frontend/src/lib/i18n/locales/en.json b/frontend/src/lib/i18n/locales/en.json index e62f93c..530fb1e 100644 --- a/frontend/src/lib/i18n/locales/en.json +++ b/frontend/src/lib/i18n/locales/en.json @@ -33,6 +33,7 @@ "Category Name": "Category Name", "City": "City", "City + Postal Code": "City + Postal Code", + "Clear": "Clear", "Clear All": "Clear All", "Company": "Company", "Company Address": "Company Address", @@ -181,6 +182,7 @@ "No description": "No description", "No invoices found": "No invoices found", "No invoices match this filter": "No invoices match this filter", + "No products found": "No products found", "No products yet.": "No products yet.", "No tax definitions yet.": "No tax definitions yet.", "No templates found.": "No templates found.", diff --git a/frontend/src/lib/i18n/locales/es-ar.json b/frontend/src/lib/i18n/locales/es-ar.json index 930a4f9..f425013 100644 --- a/frontend/src/lib/i18n/locales/es-ar.json +++ b/frontend/src/lib/i18n/locales/es-ar.json @@ -33,6 +33,7 @@ "Category Name": "Nombre de la categoría", "City": "Ciudad", "City + Postal Code": "Ciudad + código postal", + "Clear": "Borrar", "Clear All": "Limpiar todo", "Company": "Empresa", "Company Address": "Dirección de la empresa", @@ -181,6 +182,7 @@ "No description": "Sin descripción", "No invoices found": "No se encontraron facturas", "No invoices match this filter": "Ninguna factura coincide con este filtro", + "No products found": "No se encontraron productos", "No products yet.": "Aún no hay productos registrados.", "No tax definitions yet.": "Aún no hay impuestos definidos.", "No templates found.": "No se encontraron plantillas.", diff --git a/frontend/src/lib/i18n/locales/es-co.json b/frontend/src/lib/i18n/locales/es-co.json index 9bba523..b3d10f1 100644 --- a/frontend/src/lib/i18n/locales/es-co.json +++ b/frontend/src/lib/i18n/locales/es-co.json @@ -33,6 +33,7 @@ "Category Name": "Nombre de la categoría", "City": "Ciudad", "City + Postal Code": "Ciudad + código postal", + "Clear": "Borrar", "Clear All": "Limpiar todo", "Company": "Empresa", "Company Address": "Dirección de la empresa", @@ -181,6 +182,7 @@ "No description": "Sin descripción", "No invoices found": "No se encontraron facturas", "No invoices match this filter": "Ninguna factura coincide con este filtro", + "No products found": "No se encontraron productos", "No products yet.": "Aún no hay productos registrados.", "No tax definitions yet.": "Aún no hay impuestos definidos.", "No templates found.": "No se encontraron plantillas.", diff --git a/frontend/src/lib/i18n/locales/nl.json b/frontend/src/lib/i18n/locales/nl.json index ef26290..72d8bc5 100644 --- a/frontend/src/lib/i18n/locales/nl.json +++ b/frontend/src/lib/i18n/locales/nl.json @@ -33,6 +33,7 @@ "Category Name": "Categorienaam", "City": "Plaats", "City + Postal Code": "Plaats + postcode", + "Clear": "Wissen", "Clear All": "Alles wissen", "Company": "Bedrijf", "Company Address": "Adres", @@ -181,6 +182,7 @@ "No description": "Geen omschrijving", "No invoices found": "Geen facturen gevonden", "No invoices match this filter": "Geen facturen voldoen aan dit filter", + "No products found": "Geen producten gevonden", "No products yet.": "Nog geen producten.", "No tax definitions yet.": "Nog geen belastingdefinities.", "No templates found.": "Geen templates gevonden.", diff --git a/frontend/src/lib/i18n/locales/pt-br.json b/frontend/src/lib/i18n/locales/pt-br.json index eeca4c8..e860925 100644 --- a/frontend/src/lib/i18n/locales/pt-br.json +++ b/frontend/src/lib/i18n/locales/pt-br.json @@ -33,6 +33,7 @@ "Category Name": "Nome da categoria", "City": "Cidade", "City + Postal Code": "Cidade + CEP", + "Clear": "Limpar", "Clear All": "Limpar tudo", "Company": "Empresa", "Company Address": "Endereço da Empresa", @@ -181,6 +182,7 @@ "No description": "Sem descrição", "No invoices found": "Nenhuma fatura encontrada", "No invoices match this filter": "Nenhuma fatura corresponde a este filtro", + "No products found": "Nenhum produto encontrado", "No products yet.": "Nenhum produto ainda.", "No tax definitions yet.": "Nenhuma definição de imposto ainda.", "No templates found.": "Nenhum modelo encontrado.", diff --git a/frontend/src/lib/i18n/locales/tr.json b/frontend/src/lib/i18n/locales/tr.json index b492c59..ce9c325 100644 --- a/frontend/src/lib/i18n/locales/tr.json +++ b/frontend/src/lib/i18n/locales/tr.json @@ -33,6 +33,7 @@ "Category Name": "Kategori Adı", "City": "Şehir", "City + Postal Code": "Şehir + posta kodu", + "Clear": "Temizle", "Clear All": "Tümünü Temizle", "Company": "Şirket", "Company Address": "Şirket Adresi", @@ -181,6 +182,7 @@ "No description": "Açıklama yok", "No invoices found": "Fatura bulunamadı", "No invoices match this filter": "Bu filtreyle eşleşen fatura yok", + "No products found": "Ürün bulunamadı", "No products yet.": "Henüz ürün yok.", "No tax definitions yet.": "Henüz vergi tanımı yok.", "No templates found.": "Şablon bulunamadı.",