// RĂ´le : regroupe les constantes et helpers DOM du bloc-notes riche. export const TEXT_COLORS = ["#f5f7ff", "#b4bdd3", "#f6c453", "#22d3ee", "#8b5cf6", "#d946ef"]; export const HIGHLIGHT_COLORS = ["#f6c453", "#22d3ee", "#8b5cf6", "#d946ef", "#202745"]; export const DRAWING_WIDTHS = [2, 4, 8, 12]; export function getPlainText(element) { return (element?.innerText || "").replace(/\n{3,}/g, "\n\n").trim(); } export function getSelectionTextOffset(container) { const selection = document.getSelection(); if (!container || !selection?.rangeCount || !container.contains(selection.anchorNode)) return null; const range = selection.getRangeAt(0); const prefix = range.cloneRange(); prefix.selectNodeContents(container); prefix.setEnd(range.startContainer, range.startOffset); return prefix.toString().length; } export function restoreSelectionTextOffset(container, offset) { if (!container || offset == null) return; const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT); let remaining = offset; let node = walker.nextNode(); while (node) { const length = node.textContent.length; if (remaining <= length) { const range = document.createRange(); range.setStart(node, remaining); range.collapse(true); const selection = document.getSelection(); selection.removeAllRanges(); selection.addRange(range); return; } remaining -= length; node = walker.nextNode(); } const range = document.createRange(); range.selectNodeContents(container); range.collapse(false); const selection = document.getSelection(); selection.removeAllRanges(); selection.addRange(range); } export function isHtmlEmpty(html, text) { return !text && !String(html || "").replace(//gi, "").replace(/<[^>]*>/g, "").replace(/ /gi, " ").trim(); } export function formatUpdatedAt(value) { if (!value) return ""; const date = new Date(value); if (Number.isNaN(date.getTime())) return ""; return new Intl.DateTimeFormat("fr-FR", { dateStyle: "short", timeStyle: "short" }).format(date); } export function queryCommandState(command) { try { return document.queryCommandState(command); } catch { return false; } } export function queryBlockFormat() { try { return String(document.queryCommandValue("formatBlock") || "").replace(/[<>]/g, "").toLowerCase(); } catch { return ""; } }