feat(editor): add multicolor highlight with auto-contrast text (#3110)

* feat(editor): add multicolor highlight with auto-contrast text

Enable the Tiptap Highlight extension in multicolor mode, replacing the
single-color yellow toggle with a full color picker (16 presets + custom).
When the chosen highlight color is perceptually dark, text inside the mark
automatically renders white for readability.

Changes span the full pipeline:
- Editor: ColorPicker UI, extended renderHTML for contrast detection
- PDF: normalizeMarkElements preserves data-color as inline style
- DOCX: mergeStyle reads actual background-color from <mark>
- Utils: new isDarkColor() luminance helper

Backward-compatible: legacy <mark> without data-color still renders yellow.

Resolves #3109

* fix: handle multicolor highlight edge cases

---------

Co-authored-by: Amruth Pillai <im.amruth@gmail.com>
This commit is contained in:
JamesGoslings
2026-06-01 14:58:15 +02:00
committed by GitHub
co-authored by Amruth Pillai
parent 1507d869c7
commit e96a51f31c
63 changed files with 565 additions and 179 deletions
+7 -3
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: en_GB\n"
"Project-Id-Version: reactive-resume\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-01 11:26\n"
"PO-Revision-Date: 2026-06-01 12:55\n"
"Last-Translator: \n"
"Language-Team: English, United Kingdom\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -653,6 +653,7 @@ msgstr "Chinese (Traditional)"
msgid "Choose a model and resume draft."
msgstr "Choose a model and resume draft."
#. Preset or custom shade refer to the color picker
#. Preset or custom shade refer to the color picker
#: src/components/input/rich-input.tsx
msgid "Choose a preset or custom shade."
@@ -670,6 +671,7 @@ msgstr "Choose an existing conversation from the sidebar, or start a new draft-f
msgid "Circle"
msgstr "Circle"
#. Clear the highlight color
#. Clear the text color
#: src/components/input/rich-input.tsx
msgid "Clear"
@@ -1779,6 +1781,10 @@ msgstr "High"
msgid "Highlight"
msgstr "Highlight"
#: src/components/input/rich-input.tsx
msgid "Highlight Color"
msgstr "Highlight Color"
#: src/libs/locale.ts
msgid "Hindi"
msgstr "Hindi"
@@ -1808,7 +1814,6 @@ msgid "Hungarian"
msgstr "Hungarian"
#: src/components/level/combobox.tsx
#: src/dialogs/resume/sections/custom.tsx
#: src/routes/builder/$resumeId/-sidebar/right/sections/design.tsx
msgid "Icon"
msgstr "Icon"
@@ -3996,4 +4001,3 @@ msgstr "Zoom out"
#: src/libs/locale.ts
msgid "Zulu"
msgstr "Zulu"