-
+
+
- doli-front
+
+
+ Doli
-
+
diff --git a/public/doli-favicon.svg b/public/doli-favicon.svg
new file mode 100644
index 0000000..ca7cd64
--- /dev/null
+++ b/public/doli-favicon.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/src/components/BlockedNavigationToast.js b/src/components/BlockedNavigationToast.js
index c33ff4c..18668c9 100644
--- a/src/components/BlockedNavigationToast.js
+++ b/src/components/BlockedNavigationToast.js
@@ -1,10 +1,6 @@
-/**
- * Muestra un toast de aviso cuando se bloquea la navegación
- * @param {string} message - Mensaje a mostrar
- * @param {number} duration - Duración en ms (default: 3000)
- */
+import { icons } from '../services/icons.js';
+
export function showBlockedNavigationToast(message = 'Guarda los cambios antes de salir', duration = 3000) {
- // Eliminar toast existente si hay uno
const existingToast = document.querySelector('.blocked-nav-toast');
if (existingToast) {
existingToast.remove();
@@ -15,23 +11,17 @@ export function showBlockedNavigationToast(message = 'Guarda los cambios antes d
toast.innerHTML = /*html*/`
-
+ ${icons.info}
${message}
`;
document.body.appendChild(toast);
- // Animar entrada
requestAnimationFrame(() => {
toast.classList.add('visible');
});
- // Auto-cerrar después del tiempo especificado
setTimeout(() => {
toast.classList.remove('visible');
toast.classList.add('hiding');
@@ -42,4 +32,4 @@ export function showBlockedNavigationToast(message = 'Guarda los cambios antes d
}, duration);
return toast;
-}
+}
\ No newline at end of file
diff --git a/src/components/InvoiceItem.js b/src/components/InvoiceItem.js
index 4f480da..d481d8a 100644
--- a/src/components/InvoiceItem.js
+++ b/src/components/InvoiceItem.js
@@ -1,14 +1,14 @@
+import { icons } from '../services/icons.js';
+
export function InvoiceItem(invoice, onView) {
const item = document.createElement('tr');
item.className = 'invoice-item';
- // Formatear fecha
const formatDate = (dateString) => {
const date = new Date(dateString);
return date.toLocaleDateString('es-ES');
};
- // Formatear moneda
const formatCurrency = (amount) => {
return new Intl.NumberFormat('es-ES', {
style: 'currency',
@@ -16,19 +16,17 @@ export function InvoiceItem(invoice, onView) {
}).format(amount);
};
- // Obtener clase de estado
const getStatusClass = (status) => {
const statusMap = {
- 'draft': 'status-draft',
- 'validated': 'status-unpaid',
- 'paid': 'status-paid',
- 'unpaid': 'status-unpaid',
- 'canceled': 'status-canceled'
+ 'draft': 'badge-draft',
+ 'validated': 'badge-unpaid',
+ 'paid': 'badge-paid',
+ 'unpaid': 'badge-unpaid',
+ 'canceled': 'badge-draft'
};
- return statusMap[status] || 'status-default';
+ return statusMap[status] || 'badge-draft';
};
- // Obtener texto de estado
const getStatusText = (status) => {
const statusTextMap = {
'draft': 'Borrador',
@@ -40,35 +38,40 @@ export function InvoiceItem(invoice, onView) {
return statusTextMap[status] || status;
};
+ function escapeHtml(str) {
+ if (str == null) return '';
+ const div = document.createElement('div');
+ div.textContent = String(str);
+ return div.innerHTML;
+ }
+
item.innerHTML = /*html*/`