From e4803aa14ff06635abeee7d093816dbf48108dbb Mon Sep 17 00:00:00 2001 From: Shinuwa Date: Sun, 9 Aug 2026 17:59:40 +0200 Subject: [PATCH] Polish calculator large number readability --- .../toolboxes/modules/CalculatorModule.jsx | 35 ++++++++++++++--- website/src/styles/_toolboxes.scss | 39 +++++++++++++++---- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/website/src/features/toolboxes/modules/CalculatorModule.jsx b/website/src/features/toolboxes/modules/CalculatorModule.jsx index 9149e8a..b506ca7 100644 --- a/website/src/features/toolboxes/modules/CalculatorModule.jsx +++ b/website/src/features/toolboxes/modules/CalculatorModule.jsx @@ -5,6 +5,8 @@ import { useInlineEdit } from "../../../hooks/useInlineEdit.js"; import { moveItem, useGroupedReorder } from "../../../hooks/useGroupedReorder.js"; import { TextExchangeActions } from "./TextExchangeActions.jsx"; +const DISPLAY_NUMBER_FORMATTER = new Intl.NumberFormat("fr-FR", { maximumFractionDigits: 6 }); + function calculateExpression(expression) { const normalized = String(expression || "").replaceAll(",", ".").trim(); if (!normalized || !/^[\d\s+\-*/().]+$/.test(normalized)) return null; @@ -24,13 +26,13 @@ function formatResult(value) { function formatDisplayResult(value) { if (!Number.isFinite(value)) return ""; - return new Intl.NumberFormat("fr-FR", { maximumFractionDigits: 6 }).format(Number.parseFloat(value.toFixed(6))); + return DISPLAY_NUMBER_FORMATTER.format(Number.parseFloat(value.toFixed(6))); } function getResultLengthClass(value) { const length = formatResult(value).replace(/[^\d]/g, "").length; - if (length >= 16) return "is-compact"; - if (length >= 12) return "is-long"; + if (length >= 13) return "is-compact"; + if (length >= 9) return "is-long"; return ""; } @@ -47,6 +49,21 @@ function getEntriesInTreeOrder(entries, parentId = "") { return getChildren(entries, parentId).flatMap((entry) => [entry, ...getEntriesInTreeOrder(entries, entry.id)]); } +function FormattedCalculatorNumber({ value }) { + if (!Number.isFinite(value)) return "-"; + let integerGroupIndex = 0; + const normalized = Number.parseFloat(value.toFixed(6)); + return DISPLAY_NUMBER_FORMATTER.formatToParts(normalized).map((part, index) => { + if (part.type === "integer") { + const className = `calculator-number-group ${integerGroupIndex % 2 ? "is-muted" : "is-strong"}`; + integerGroupIndex += 1; + return {part.value}; + } + if (part.type === "group") return {part.value}; + return {part.value}; + }); +} + export function CalculatorModule({ toolboxId, moduleId, context, editing }) { const data = context.normalizeCalculatorData(context.getModuleData(toolboxId, moduleId, { entries: [] })); const textContent = context.moduleText?.calculator || {}; @@ -165,7 +182,9 @@ export function CalculatorModule({ toolboxId, moduleId, context, editing }) {
{textContent.resultLabel || "Résultat"} - {result == null ? "-" : formatDisplayResult(result)} + + +