mantenimento-app 2.1.7 → 2.1.8
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 +34 -13
- package/frontend/public/app.js +34 -13
- package/frontend/public/index.html +3 -3
- package/frontend/public/styles.css +75 -5
- package/package.json +1 -1
package/app.js
CHANGED
|
@@ -4376,33 +4376,54 @@ const defaultExpenseItems = [
|
|
|
4376
4376
|
${m.incomeMode === "cu" ? `<br /><strong>${tr("calcIncomeBaseNote")}</strong> ${tr("cuNetNoteText")}` : ""}
|
|
4377
4377
|
`;
|
|
4378
4378
|
|
|
4379
|
-
let mainHtml
|
|
4379
|
+
let mainHtml;
|
|
4380
4380
|
if (m.assegnoDa1a2 > 0.005) {
|
|
4381
|
+
const perChild = m.figli > 1 ? `<div class="result-transfer-child">${eur(m.assegnoDa1a2 / m.figli)} ${escapeHtml(currentLang === "en" ? "per child" : "per figlio")}</div>` : "";
|
|
4381
4382
|
mainHtml = `
|
|
4382
|
-
<
|
|
4383
|
-
|
|
4383
|
+
<div class="result-transfer-dir">
|
|
4384
|
+
<span class="result-chip-name">${escapeHtml(c1n())}</span>
|
|
4385
|
+
<span class="result-chip-arr">→</span>
|
|
4386
|
+
<span class="result-chip-name">${escapeHtml(c2n())}</span>
|
|
4387
|
+
</div>
|
|
4388
|
+
<div class="result-transfer-value">${eur(m.assegnoDa1a2)}<span class="result-transfer-per"> ${escapeHtml(tr("pdfPerMonth"))}</span></div>
|
|
4389
|
+
${perChild}
|
|
4384
4390
|
`;
|
|
4385
4391
|
} else if (m.assegnoDa2a1 > 0.005) {
|
|
4392
|
+
const perChild = m.figli > 1 ? `<div class="result-transfer-child">${eur(m.assegnoDa2a1 / m.figli)} ${escapeHtml(currentLang === "en" ? "per child" : "per figlio")}</div>` : "";
|
|
4386
4393
|
mainHtml = `
|
|
4387
|
-
<
|
|
4388
|
-
|
|
4394
|
+
<div class="result-transfer-dir">
|
|
4395
|
+
<span class="result-chip-name">${escapeHtml(c2n())}</span>
|
|
4396
|
+
<span class="result-chip-arr">→</span>
|
|
4397
|
+
<span class="result-chip-name">${escapeHtml(c1n())}</span>
|
|
4398
|
+
</div>
|
|
4399
|
+
<div class="result-transfer-value">${eur(m.assegnoDa2a1)}<span class="result-transfer-per"> ${escapeHtml(tr("pdfPerMonth"))}</span></div>
|
|
4400
|
+
${perChild}
|
|
4389
4401
|
`;
|
|
4390
4402
|
} else {
|
|
4391
4403
|
const benefitRows = getCompensativeBenefitRows(m, c1n(), c2n());
|
|
4404
|
+
let benefitCardsHtml = "";
|
|
4392
4405
|
if (benefitRows.length) {
|
|
4393
|
-
const
|
|
4394
|
-
.
|
|
4406
|
+
const rawBenefs = Array.isArray(m.compensativeBenefits)
|
|
4407
|
+
? m.compensativeBenefits.filter((r) => r && Number(r.amount || 0) > 0.005)
|
|
4408
|
+
: [];
|
|
4409
|
+
const typeIcons = { family: "\uD83C\uDFDB", "primary-home-mortgage": "\uD83C\uDFE1" };
|
|
4410
|
+
const cardsHtml = benefitRows
|
|
4411
|
+
.map((row, i) => {
|
|
4412
|
+
const icon = (rawBenefs[i] && typeIcons[rawBenefs[i].type]) || "\u2726";
|
|
4413
|
+
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>`;
|
|
4414
|
+
})
|
|
4395
4415
|
.join("");
|
|
4396
|
-
|
|
4397
|
-
|
|
4416
|
+
const total = benefitRows.reduce((s, r) => s + r.amount, 0);
|
|
4417
|
+
const totalLabel = currentLang === "en" ? "Total allocated benefits" : "Totale benefici allocati";
|
|
4418
|
+
benefitCardsHtml = `
|
|
4398
4419
|
<div class="result-benefits-box">
|
|
4399
|
-
<
|
|
4400
|
-
<ul class="
|
|
4420
|
+
<div class="spieg-benefits-label">🎁 ${escapeHtml(tr("calcCompBenefitsLabel"))}</div>
|
|
4421
|
+
<ul class="spieg-benefits-cards">${cardsHtml}</ul>
|
|
4422
|
+
<div class="spieg-benefits-total"><span>${escapeHtml(totalLabel)}</span><strong>${eur(total)}</strong></div>
|
|
4401
4423
|
</div>
|
|
4402
4424
|
`;
|
|
4403
|
-
} else if (benefitsInline) {
|
|
4404
|
-
mainHtml = `<span class="result-main-line">${escapeHtml(msg("calcNoTransferWithBenefits", { benefits: benefitsInline }))}</span>`;
|
|
4405
4425
|
}
|
|
4426
|
+
mainHtml = `<div class="spieg-no-transfer-badge">⚖️ ${escapeHtml(tr("calcNoTransferSuggested"))}</div>${benefitCardsHtml}`;
|
|
4406
4427
|
}
|
|
4407
4428
|
resultMain.innerHTML = mainHtml;
|
|
4408
4429
|
|
package/frontend/public/app.js
CHANGED
|
@@ -4376,33 +4376,54 @@ const defaultExpenseItems = [
|
|
|
4376
4376
|
${m.incomeMode === "cu" ? `<br /><strong>${tr("calcIncomeBaseNote")}</strong> ${tr("cuNetNoteText")}` : ""}
|
|
4377
4377
|
`;
|
|
4378
4378
|
|
|
4379
|
-
let mainHtml
|
|
4379
|
+
let mainHtml;
|
|
4380
4380
|
if (m.assegnoDa1a2 > 0.005) {
|
|
4381
|
+
const perChild = m.figli > 1 ? `<div class="result-transfer-child">${eur(m.assegnoDa1a2 / m.figli)} ${escapeHtml(currentLang === "en" ? "per child" : "per figlio")}</div>` : "";
|
|
4381
4382
|
mainHtml = `
|
|
4382
|
-
<
|
|
4383
|
-
|
|
4383
|
+
<div class="result-transfer-dir">
|
|
4384
|
+
<span class="result-chip-name">${escapeHtml(c1n())}</span>
|
|
4385
|
+
<span class="result-chip-arr">→</span>
|
|
4386
|
+
<span class="result-chip-name">${escapeHtml(c2n())}</span>
|
|
4387
|
+
</div>
|
|
4388
|
+
<div class="result-transfer-value">${eur(m.assegnoDa1a2)}<span class="result-transfer-per"> ${escapeHtml(tr("pdfPerMonth"))}</span></div>
|
|
4389
|
+
${perChild}
|
|
4384
4390
|
`;
|
|
4385
4391
|
} else if (m.assegnoDa2a1 > 0.005) {
|
|
4392
|
+
const perChild = m.figli > 1 ? `<div class="result-transfer-child">${eur(m.assegnoDa2a1 / m.figli)} ${escapeHtml(currentLang === "en" ? "per child" : "per figlio")}</div>` : "";
|
|
4386
4393
|
mainHtml = `
|
|
4387
|
-
<
|
|
4388
|
-
|
|
4394
|
+
<div class="result-transfer-dir">
|
|
4395
|
+
<span class="result-chip-name">${escapeHtml(c2n())}</span>
|
|
4396
|
+
<span class="result-chip-arr">→</span>
|
|
4397
|
+
<span class="result-chip-name">${escapeHtml(c1n())}</span>
|
|
4398
|
+
</div>
|
|
4399
|
+
<div class="result-transfer-value">${eur(m.assegnoDa2a1)}<span class="result-transfer-per"> ${escapeHtml(tr("pdfPerMonth"))}</span></div>
|
|
4400
|
+
${perChild}
|
|
4389
4401
|
`;
|
|
4390
4402
|
} else {
|
|
4391
4403
|
const benefitRows = getCompensativeBenefitRows(m, c1n(), c2n());
|
|
4404
|
+
let benefitCardsHtml = "";
|
|
4392
4405
|
if (benefitRows.length) {
|
|
4393
|
-
const
|
|
4394
|
-
.
|
|
4406
|
+
const rawBenefs = Array.isArray(m.compensativeBenefits)
|
|
4407
|
+
? m.compensativeBenefits.filter((r) => r && Number(r.amount || 0) > 0.005)
|
|
4408
|
+
: [];
|
|
4409
|
+
const typeIcons = { family: "\uD83C\uDFDB", "primary-home-mortgage": "\uD83C\uDFE1" };
|
|
4410
|
+
const cardsHtml = benefitRows
|
|
4411
|
+
.map((row, i) => {
|
|
4412
|
+
const icon = (rawBenefs[i] && typeIcons[rawBenefs[i].type]) || "\u2726";
|
|
4413
|
+
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>`;
|
|
4414
|
+
})
|
|
4395
4415
|
.join("");
|
|
4396
|
-
|
|
4397
|
-
|
|
4416
|
+
const total = benefitRows.reduce((s, r) => s + r.amount, 0);
|
|
4417
|
+
const totalLabel = currentLang === "en" ? "Total allocated benefits" : "Totale benefici allocati";
|
|
4418
|
+
benefitCardsHtml = `
|
|
4398
4419
|
<div class="result-benefits-box">
|
|
4399
|
-
<
|
|
4400
|
-
<ul class="
|
|
4420
|
+
<div class="spieg-benefits-label">🎁 ${escapeHtml(tr("calcCompBenefitsLabel"))}</div>
|
|
4421
|
+
<ul class="spieg-benefits-cards">${cardsHtml}</ul>
|
|
4422
|
+
<div class="spieg-benefits-total"><span>${escapeHtml(totalLabel)}</span><strong>${eur(total)}</strong></div>
|
|
4401
4423
|
</div>
|
|
4402
4424
|
`;
|
|
4403
|
-
} else if (benefitsInline) {
|
|
4404
|
-
mainHtml = `<span class="result-main-line">${escapeHtml(msg("calcNoTransferWithBenefits", { benefits: benefitsInline }))}</span>`;
|
|
4405
4425
|
}
|
|
4426
|
+
mainHtml = `<div class="spieg-no-transfer-badge">⚖️ ${escapeHtml(tr("calcNoTransferSuggested"))}</div>${benefitCardsHtml}`;
|
|
4406
4427
|
}
|
|
4407
4428
|
resultMain.innerHTML = mainHtml;
|
|
4408
4429
|
|
|
@@ -475,8 +475,8 @@
|
|
|
475
475
|
<div class="live-title">⚡ Impatto in Tempo Reale sul Netto</div>
|
|
476
476
|
<div class="live-grid" id="liveNet"></div>
|
|
477
477
|
<div class="result-pill">
|
|
478
|
-
<div
|
|
479
|
-
<div id="risultatoMain"
|
|
478
|
+
<div class="result-pill-head"><span>🎯</span><span>Assegno suggerito</span></div>
|
|
479
|
+
<div id="risultatoMain">Calcolo in tempo reale</div>
|
|
480
480
|
</div>
|
|
481
481
|
<div id="liveBreakdown"></div>
|
|
482
482
|
</div>
|
|
@@ -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.
|
|
586
|
+
<script src="app.js?v=2.1.8"></script>
|
|
587
587
|
</body>
|
|
588
588
|
</html>
|
|
589
589
|
|
|
@@ -2232,6 +2232,79 @@
|
|
|
2232
2232
|
color: #123b38;
|
|
2233
2233
|
}
|
|
2234
2234
|
|
|
2235
|
+
.result-pill-head {
|
|
2236
|
+
display: flex;
|
|
2237
|
+
align-items: center;
|
|
2238
|
+
gap: 7px;
|
|
2239
|
+
font-size: 0.71rem;
|
|
2240
|
+
font-weight: 800;
|
|
2241
|
+
text-transform: uppercase;
|
|
2242
|
+
letter-spacing: 0.07em;
|
|
2243
|
+
color: #3a6560;
|
|
2244
|
+
padding-bottom: 9px;
|
|
2245
|
+
margin-bottom: 9px;
|
|
2246
|
+
border-bottom: 1px solid rgba(0,0,0,0.08);
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2249
|
+
.result-transfer-dir {
|
|
2250
|
+
display: inline-flex;
|
|
2251
|
+
align-items: center;
|
|
2252
|
+
gap: 8px;
|
|
2253
|
+
background: linear-gradient(135deg, rgba(27, 110, 100, 0.11), rgba(27, 110, 100, 0.05));
|
|
2254
|
+
border: 1.5px solid rgba(27, 110, 100, 0.24);
|
|
2255
|
+
border-radius: 999px;
|
|
2256
|
+
padding: 6px 16px;
|
|
2257
|
+
margin-bottom: 10px;
|
|
2258
|
+
max-width: 100%;
|
|
2259
|
+
}
|
|
2260
|
+
|
|
2261
|
+
.result-chip-name {
|
|
2262
|
+
font-weight: 800;
|
|
2263
|
+
font-size: 0.9rem;
|
|
2264
|
+
color: #124741;
|
|
2265
|
+
overflow-wrap: anywhere;
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2268
|
+
.result-chip-arr {
|
|
2269
|
+
font-size: 1.1rem;
|
|
2270
|
+
color: #1d7d72;
|
|
2271
|
+
font-weight: 900;
|
|
2272
|
+
flex-shrink: 0;
|
|
2273
|
+
}
|
|
2274
|
+
|
|
2275
|
+
.result-transfer-value {
|
|
2276
|
+
display: block;
|
|
2277
|
+
font-size: 2.0rem;
|
|
2278
|
+
font-weight: 900;
|
|
2279
|
+
color: #0b5e57;
|
|
2280
|
+
line-height: 1.15;
|
|
2281
|
+
letter-spacing: -0.3px;
|
|
2282
|
+
text-shadow: 0 1px 0 rgba(255,255,255,0.75);
|
|
2283
|
+
font-variant-numeric: tabular-nums;
|
|
2284
|
+
margin-bottom: 4px;
|
|
2285
|
+
}
|
|
2286
|
+
|
|
2287
|
+
.result-transfer-per {
|
|
2288
|
+
font-size: 0.48em;
|
|
2289
|
+
font-weight: 700;
|
|
2290
|
+
color: #2d7068;
|
|
2291
|
+
vertical-align: middle;
|
|
2292
|
+
margin-left: 2px;
|
|
2293
|
+
}
|
|
2294
|
+
|
|
2295
|
+
.result-transfer-child {
|
|
2296
|
+
display: inline-block;
|
|
2297
|
+
margin-top: 2px;
|
|
2298
|
+
font-size: 0.78rem;
|
|
2299
|
+
color: #3d6b63;
|
|
2300
|
+
font-weight: 600;
|
|
2301
|
+
font-variant-numeric: tabular-nums;
|
|
2302
|
+
background: rgba(0,0,0,0.045);
|
|
2303
|
+
border-radius: 8px;
|
|
2304
|
+
padding: 3px 10px;
|
|
2305
|
+
border: 1px solid rgba(0,0,0,0.08);
|
|
2306
|
+
}
|
|
2307
|
+
|
|
2235
2308
|
.result-main-flow {
|
|
2236
2309
|
display: block;
|
|
2237
2310
|
font-size: 1.02rem;
|
|
@@ -2275,12 +2348,9 @@
|
|
|
2275
2348
|
}
|
|
2276
2349
|
|
|
2277
2350
|
.result-benefits-box {
|
|
2278
|
-
border: 1px solid #bdd6cf;
|
|
2279
|
-
border-radius: 12px;
|
|
2280
|
-
background: linear-gradient(180deg, rgba(249, 253, 252, 0.92), rgba(241, 249, 246, 0.92));
|
|
2281
|
-
padding: 8px;
|
|
2282
2351
|
display: grid;
|
|
2283
|
-
gap:
|
|
2352
|
+
gap: 6px;
|
|
2353
|
+
margin-top: 8px;
|
|
2284
2354
|
}
|
|
2285
2355
|
|
|
2286
2356
|
.result-benefits-list {
|