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)}
+
+
+