mantenimento-app 2.1.6 → 2.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/app.js CHANGED
@@ -4193,10 +4193,30 @@ const defaultExpenseItems = [
4193
4193
  resultDetail = tr("spiegDetailResultTransfer");
4194
4194
  } else {
4195
4195
  const benefitRows = getCompensativeBenefitRows(m, c1n(), c2n());
4196
- const benefitsHtml = benefitRows.length
4197
- ? `<div class="spieg-line" style="margin-top:6px"><strong>${tr("calcCompBenefitsLabel")}:</strong> ${benefitRows.map((row) => `${escapeHtml(row.label)} (${eur(row.amount)})`).join(" | ")}</div>`
4198
- : "";
4199
- resultHtml = `<div class="spieg-result-empty ok">${tr("calcNoTransferSuggested")}</div>${benefitsHtml}`;
4196
+ if (benefitRows.length) {
4197
+ const rawBenefs = Array.isArray(m.compensativeBenefits)
4198
+ ? m.compensativeBenefits.filter((r) => r && Number(r.amount || 0) > 0.005)
4199
+ : [];
4200
+ const typeIcons = { family: "\uD83C\uDFDB", "primary-home-mortgage": "\uD83C\uDFE1" };
4201
+ const cardsHtml = benefitRows
4202
+ .map((row, i) => {
4203
+ const icon = (rawBenefs[i] && typeIcons[rawBenefs[i].type]) || "\u2726";
4204
+ return `<li class="spieg-benefit-card"><span class="spieg-benefit-icon">${icon}</span><span class="spieg-benefit-label">${escapeHtml(row.label)}</span><strong class="spieg-benefit-amount">${eur(row.amount)}</strong></li>`;
4205
+ })
4206
+ .join("");
4207
+ const total = benefitRows.reduce((s, r) => s + r.amount, 0);
4208
+ const totalLabel = currentLang === "en" ? "Total allocated benefits" : "Totale benefici allocati";
4209
+ resultHtml = `
4210
+ <div class="spieg-no-transfer-badge">&#9878;&#65039;&ensp;${escapeHtml(tr("calcNoTransferSuggested"))}</div>
4211
+ <div class="spieg-benefits-section">
4212
+ <div class="spieg-benefits-label">&#127873;&ensp;${escapeHtml(tr("calcCompBenefitsLabel"))}</div>
4213
+ <ul class="spieg-benefits-cards">${cardsHtml}</ul>
4214
+ <div class="spieg-benefits-total"><span>${escapeHtml(totalLabel)}</span><strong>${eur(total)}</strong></div>
4215
+ </div>
4216
+ `;
4217
+ } else {
4218
+ resultHtml = `<div class="spieg-result-empty ok">${tr("calcNoTransferSuggested")}</div>`;
4219
+ }
4200
4220
  resultDetail = tr("spiegDetailResultNoTransfer");
4201
4221
  }
4202
4222
 
@@ -4193,10 +4193,30 @@ const defaultExpenseItems = [
4193
4193
  resultDetail = tr("spiegDetailResultTransfer");
4194
4194
  } else {
4195
4195
  const benefitRows = getCompensativeBenefitRows(m, c1n(), c2n());
4196
- const benefitsHtml = benefitRows.length
4197
- ? `<div class="spieg-line" style="margin-top:6px"><strong>${tr("calcCompBenefitsLabel")}:</strong> ${benefitRows.map((row) => `${escapeHtml(row.label)} (${eur(row.amount)})`).join(" | ")}</div>`
4198
- : "";
4199
- resultHtml = `<div class="spieg-result-empty ok">${tr("calcNoTransferSuggested")}</div>${benefitsHtml}`;
4196
+ if (benefitRows.length) {
4197
+ const rawBenefs = Array.isArray(m.compensativeBenefits)
4198
+ ? m.compensativeBenefits.filter((r) => r && Number(r.amount || 0) > 0.005)
4199
+ : [];
4200
+ const typeIcons = { family: "\uD83C\uDFDB", "primary-home-mortgage": "\uD83C\uDFE1" };
4201
+ const cardsHtml = benefitRows
4202
+ .map((row, i) => {
4203
+ const icon = (rawBenefs[i] && typeIcons[rawBenefs[i].type]) || "\u2726";
4204
+ return `<li class="spieg-benefit-card"><span class="spieg-benefit-icon">${icon}</span><span class="spieg-benefit-label">${escapeHtml(row.label)}</span><strong class="spieg-benefit-amount">${eur(row.amount)}</strong></li>`;
4205
+ })
4206
+ .join("");
4207
+ const total = benefitRows.reduce((s, r) => s + r.amount, 0);
4208
+ const totalLabel = currentLang === "en" ? "Total allocated benefits" : "Totale benefici allocati";
4209
+ resultHtml = `
4210
+ <div class="spieg-no-transfer-badge">&#9878;&#65039;&ensp;${escapeHtml(tr("calcNoTransferSuggested"))}</div>
4211
+ <div class="spieg-benefits-section">
4212
+ <div class="spieg-benefits-label">&#127873;&ensp;${escapeHtml(tr("calcCompBenefitsLabel"))}</div>
4213
+ <ul class="spieg-benefits-cards">${cardsHtml}</ul>
4214
+ <div class="spieg-benefits-total"><span>${escapeHtml(totalLabel)}</span><strong>${eur(total)}</strong></div>
4215
+ </div>
4216
+ `;
4217
+ } else {
4218
+ resultHtml = `<div class="spieg-result-empty ok">${tr("calcNoTransferSuggested")}</div>`;
4219
+ }
4200
4220
  resultDetail = tr("spiegDetailResultNoTransfer");
4201
4221
  }
4202
4222
 
@@ -583,7 +583,7 @@
583
583
  <script src="supabase.min.js"></script>
584
584
  <script src="fabric.min.js"></script>
585
585
  <script src="html2pdf.bundle.min.js"></script>
586
- <script src="app.js?v=2.1.6"></script>
586
+ <script src="app.js?v=2.1.7"></script>
587
587
  </body>
588
588
  </html>
589
589
 
@@ -1648,11 +1648,11 @@
1648
1648
  }
1649
1649
 
1650
1650
  .spieg-item-body--result {
1651
- background: #ffffff;
1652
- border: 1px dashed #9fceb9;
1653
- border-radius: 10px;
1654
- padding: 10px 12px;
1655
- gap: 6px;
1651
+ background: transparent;
1652
+ border: none;
1653
+ border-radius: 0;
1654
+ padding: 0;
1655
+ gap: 8px;
1656
1656
  }
1657
1657
 
1658
1658
  .spieg-result-flow {
@@ -1681,6 +1681,113 @@
1681
1681
  color: #0f6a61;
1682
1682
  }
1683
1683
 
1684
+ .spieg-no-transfer-badge {
1685
+ display: flex;
1686
+ align-items: center;
1687
+ justify-content: center;
1688
+ gap: 8px;
1689
+ font-size: 1.0rem;
1690
+ font-weight: 900;
1691
+ color: #0a5a52;
1692
+ background: linear-gradient(135deg, #dbf5ed, #c5eedf);
1693
+ border: 1.5px solid #7ec4b2;
1694
+ border-radius: 999px;
1695
+ padding: 9px 20px;
1696
+ letter-spacing: 0.1px;
1697
+ box-shadow: 0 2px 10px rgba(14, 90, 82, 0.14), inset 0 1px 0 rgba(255,255,255,0.7);
1698
+ margin-bottom: 10px;
1699
+ }
1700
+
1701
+ .spieg-benefits-section {
1702
+ display: grid;
1703
+ gap: 6px;
1704
+ }
1705
+
1706
+ .spieg-benefits-label {
1707
+ font-size: 0.71rem;
1708
+ font-weight: 800;
1709
+ text-transform: uppercase;
1710
+ letter-spacing: 0.06em;
1711
+ color: #4e7068;
1712
+ display: flex;
1713
+ align-items: center;
1714
+ gap: 5px;
1715
+ padding-left: 2px;
1716
+ }
1717
+
1718
+ .spieg-benefits-cards {
1719
+ margin: 0;
1720
+ padding: 0;
1721
+ list-style: none;
1722
+ display: grid;
1723
+ gap: 5px;
1724
+ }
1725
+
1726
+ .spieg-benefit-card {
1727
+ display: grid;
1728
+ grid-template-columns: 28px 1fr auto;
1729
+ align-items: center;
1730
+ gap: 8px;
1731
+ padding: 8px 10px;
1732
+ border-radius: 10px;
1733
+ border: 1px solid #b8d9cf;
1734
+ background: linear-gradient(135deg, rgba(255,255,255,0.97), rgba(240,250,246,0.92));
1735
+ font-size: 0.83rem;
1736
+ line-height: 1.35;
1737
+ box-shadow: 0 1px 4px rgba(16, 74, 68, 0.08);
1738
+ }
1739
+
1740
+ .spieg-benefit-icon {
1741
+ display: flex;
1742
+ align-items: center;
1743
+ justify-content: center;
1744
+ width: 28px;
1745
+ height: 28px;
1746
+ border-radius: 50%;
1747
+ background: linear-gradient(135deg, #e3f5ef, #d0ede5);
1748
+ border: 1px solid #b6d9cf;
1749
+ font-size: 1.0em;
1750
+ flex-shrink: 0;
1751
+ }
1752
+
1753
+ .spieg-benefit-label {
1754
+ font-weight: 600;
1755
+ color: #1f4642;
1756
+ word-break: break-word;
1757
+ }
1758
+
1759
+ .spieg-benefit-amount {
1760
+ white-space: nowrap;
1761
+ font-size: 0.94rem;
1762
+ font-weight: 900;
1763
+ color: #0c5e55;
1764
+ font-variant-numeric: tabular-nums;
1765
+ background: rgba(11, 98, 88, 0.09);
1766
+ border-radius: 7px;
1767
+ padding: 2px 8px;
1768
+ border: 1px solid rgba(11, 98, 88, 0.14);
1769
+ }
1770
+
1771
+ .spieg-benefits-total {
1772
+ display: flex;
1773
+ justify-content: space-between;
1774
+ align-items: center;
1775
+ padding: 7px 12px;
1776
+ border-radius: 9px;
1777
+ background: linear-gradient(135deg, #c8eee3, #aee3d4);
1778
+ border: 1.5px solid #7ec9b6;
1779
+ font-size: 0.8rem;
1780
+ font-weight: 700;
1781
+ color: #0a4c47;
1782
+ }
1783
+
1784
+ .spieg-benefits-total strong {
1785
+ font-size: 1.05rem;
1786
+ font-weight: 900;
1787
+ color: #073e3a;
1788
+ font-variant-numeric: tabular-nums;
1789
+ }
1790
+
1684
1791
  @page {
1685
1792
  size: A4 landscape;
1686
1793
  margin: 8mm;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mantenimento-app",
3
- "version": "2.1.6",
3
+ "version": "2.1.7",
4
4
  "description": "Frontend + backend architecture for the mantenimento calculator",
5
5
  "type": "commonjs",
6
6
  "main": "backend/calculate-model.js",