Skip to content

Commit fe07d67

Browse files
authored
feat: add more CSS vars for track changes (#2715)
* feat: add more CSS vars for track changes * fix(tracked-changes): reset deleted text decoration styling
1 parent 23064ee commit fe07d67

5 files changed

Lines changed: 129 additions & 16 deletions

File tree

apps/docs/guides/general/custom-themes.mdx

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,14 +278,46 @@ Insert, delete, and format change decorations in the document.
278278
| Variable | Default | Controls |
279279
|----------|---------|----------|
280280
| `--sd-tracked-changes-insert-background` | `#399c7222` | Insert highlight |
281-
| `--sd-tracked-changes-insert-border` | `#00853d` | Insert left border |
281+
| `--sd-tracked-changes-insert-border` | `#00853d` | Insert border color |
282+
| `--sd-tracked-changes-insert-border-width` | `1px` | Insert border width |
283+
| `--sd-tracked-changes-insert-focused-border-width` | `2px` | Focused insert border width |
284+
| `--sd-tracked-changes-insert-text` | `currentColor` | Insert text color |
285+
| `--sd-tracked-changes-insert-decoration-line` | `none` | Insert text decoration |
286+
| `--sd-tracked-changes-insert-decoration-thickness` | `1px` | Insert decoration thickness |
287+
| `--sd-tracked-changes-insert-underline-offset` | `0px` | Insert underline offset |
282288
| `--sd-tracked-changes-delete-background` | `#cb0e4722` | Delete highlight |
283-
| `--sd-tracked-changes-delete-border` | `#cb0e47` | Delete left border |
289+
| `--sd-tracked-changes-delete-border` | `#cb0e47` | Delete border color |
290+
| `--sd-tracked-changes-delete-border-width` | `1px` | Delete border width |
291+
| `--sd-tracked-changes-delete-focused-border-width` | `2px` | Focused delete border width |
292+
| `--sd-tracked-changes-delete-text` | `currentColor` | Delete text color |
293+
| `--sd-tracked-changes-delete-decoration-thickness` | `2px` | Delete strike thickness |
284294
| `--sd-tracked-changes-format-border` | `gold` | Format change border |
285295
| `--sd-tracked-changes-insert-background-focused` | `#399c7244` | Focused insert |
286296
| `--sd-tracked-changes-delete-background-focused` | `#cb0e4744` | Focused delete |
287297
| `--sd-tracked-changes-format-background-focused` | `#ffd70033` | Focused format change |
288298

299+
Word-style redlines can be approximated with CSS vars only:
300+
301+
```css
302+
.word-like-redlines {
303+
--sd-tracked-changes-insert-border-width: 0px;
304+
--sd-tracked-changes-insert-focused-border-width: 0px;
305+
--sd-tracked-changes-insert-background: transparent;
306+
--sd-tracked-changes-insert-text: #bf3848;
307+
--sd-tracked-changes-insert-decoration-line: underline;
308+
--sd-tracked-changes-insert-decoration-thickness: 1.5px;
309+
--sd-tracked-changes-insert-underline-offset: 2px;
310+
311+
--sd-tracked-changes-delete-border-width: 0px;
312+
--sd-tracked-changes-delete-focused-border-width: 0px;
313+
--sd-tracked-changes-delete-background: transparent;
314+
--sd-tracked-changes-delete-text: #2e64a8;
315+
--sd-tracked-changes-delete-decoration-thickness: 1.5px;
316+
}
317+
```
318+
319+
If you also want tracked-change text inside comment threads to match, set `--sd-ui-comments-insert-text` and `--sd-ui-comments-delete-text` too.
320+
289321
### Content controls
290322

291323
DOCX content controls (SDTs) — form fields, dropdowns, date pickers.

packages/layout-engine/painters/dom/src/index.test.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3953,6 +3953,60 @@ describe('DomPainter', () => {
39533953
expect(trackedSpan.classList.contains('highlighted')).toBe(true);
39543954
});
39553955

3956+
it('injects a delete-decoration reset that overrides inherited underline metadata', () => {
3957+
document.body.appendChild(mount);
3958+
mount.style.setProperty('--sd-tracked-changes-delete-text', '#2e64a8');
3959+
mount.style.setProperty('--sd-tracked-changes-delete-decoration-thickness', '1.5px');
3960+
3961+
try {
3962+
const trackedDeleteBlock: FlowBlock = {
3963+
kind: 'paragraph',
3964+
id: 'tracked-delete-underline-reset',
3965+
runs: [
3966+
{
3967+
text: 'Deleted underlined text',
3968+
fontFamily: 'Arial',
3969+
fontSize: 16,
3970+
underline: {
3971+
style: 'wavy',
3972+
color: '#1f9d55',
3973+
},
3974+
trackedChange: {
3975+
kind: 'delete',
3976+
id: 'tracked-delete-1',
3977+
},
3978+
},
3979+
],
3980+
attrs: {
3981+
trackedChangesMode: 'review',
3982+
trackedChangesEnabled: true,
3983+
},
3984+
};
3985+
3986+
const { paragraphMeasure, paragraphLayout } = buildSingleParagraphData(
3987+
trackedDeleteBlock.id,
3988+
trackedDeleteBlock.runs[0].text.length,
3989+
);
3990+
3991+
const painter = createTestPainter({ blocks: [trackedDeleteBlock], measures: [paragraphMeasure] });
3992+
painter.paint(paragraphLayout, mount);
3993+
3994+
const trackedSpan = mount.querySelector('[data-track-change-id="tracked-delete-1"]') as HTMLElement;
3995+
expect(trackedSpan).toBeTruthy();
3996+
expect(trackedSpan.style.textDecorationLine).toBe('underline');
3997+
expect(trackedSpan.style.textDecorationStyle).toBe('wavy');
3998+
expectCssColor(trackedSpan.style.textDecorationColor, '#1f9d55');
3999+
4000+
const styleEl = document.head.querySelector('[data-superdoc-track-change-styles="true"]') as HTMLStyleElement;
4001+
expect(styleEl).toBeTruthy();
4002+
expect(styleEl.textContent).toMatch(
4003+
/\.track-delete-dec\.highlighted\s*\{[\s\S]*text-decoration:\s*line-through\s+solid\s+var\(--sd-tracked-changes-delete-text,\s*currentColor\)\s+var\(--sd-tracked-changes-delete-decoration-thickness,\s*2px\)\s*!important;/,
4004+
);
4005+
} finally {
4006+
mount.remove();
4007+
}
4008+
});
4009+
39564010
describe('token resolution tests', () => {
39574011
it('renders footer with page numbers resolved', () => {
39584012
const footerBlock: FlowBlock = {

packages/layout-engine/painters/dom/src/styles.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -237,17 +237,26 @@ const TRACK_CHANGE_STYLES = `
237237
}
238238
239239
.superdoc-layout .track-insert-dec.highlighted {
240-
border-top: 1px dashed var(--sd-tracked-changes-insert-border, #00853d);
241-
border-bottom: 1px dashed var(--sd-tracked-changes-insert-border, #00853d);
240+
border-top: var(--sd-tracked-changes-insert-border-width, 1px) dashed var(--sd-tracked-changes-insert-border, #00853d);
241+
border-bottom: var(--sd-tracked-changes-insert-border-width, 1px) dashed var(--sd-tracked-changes-insert-border, #00853d);
242242
background-color: var(--sd-tracked-changes-insert-background, #399c7222);
243+
color: var(--sd-tracked-changes-insert-text, currentColor);
244+
text-decoration-line: var(--sd-tracked-changes-insert-decoration-line, none);
245+
text-decoration-color: var(--sd-tracked-changes-insert-text, currentColor);
246+
text-decoration-thickness: var(--sd-tracked-changes-insert-decoration-thickness, 1px);
247+
text-underline-offset: var(--sd-tracked-changes-insert-underline-offset, 0px);
243248
}
244249
245250
.superdoc-layout .track-delete-dec.highlighted {
246-
border-top: 1px dashed var(--sd-tracked-changes-delete-border, #cb0e47);
247-
border-bottom: 1px dashed var(--sd-tracked-changes-delete-border, #cb0e47);
251+
border-top: var(--sd-tracked-changes-delete-border-width, 1px) dashed var(--sd-tracked-changes-delete-border, #cb0e47);
252+
border-bottom: var(--sd-tracked-changes-delete-border-width, 1px) dashed var(--sd-tracked-changes-delete-border, #cb0e47);
248253
background-color: var(--sd-tracked-changes-delete-background, #cb0e4722);
249-
text-decoration: line-through !important;
250-
text-decoration-thickness: 2px !important;
254+
color: var(--sd-tracked-changes-delete-text, currentColor);
255+
text-decoration:
256+
line-through
257+
solid
258+
var(--sd-tracked-changes-delete-text, currentColor)
259+
var(--sd-tracked-changes-delete-decoration-thickness, 2px) !important;
251260
}
252261
253262
.superdoc-layout .track-format-dec.highlighted {
@@ -256,13 +265,13 @@ const TRACK_CHANGE_STYLES = `
256265
257266
.superdoc-layout .track-insert-dec.highlighted.track-change-focused {
258267
border-style: solid;
259-
border-width: 2px;
268+
border-width: var(--sd-tracked-changes-insert-focused-border-width, 2px);
260269
background-color: var(--sd-tracked-changes-insert-background-focused, #399c7244);
261270
}
262271
263272
.superdoc-layout .track-delete-dec.highlighted.track-change-focused {
264273
border-style: solid;
265-
border-width: 2px;
274+
border-width: var(--sd-tracked-changes-delete-focused-border-width, 2px);
266275
background-color: var(--sd-tracked-changes-delete-background-focused, #cb0e4744);
267276
}
268277

packages/super-editor/src/editors/v1/assets/styles/elements/prosemirror.css

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,17 +255,25 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
255255
}
256256

257257
.sd-editor-scoped .ProseMirror .track-insert-dec.highlighted {
258-
border-top: 1px dashed var(--sd-tracked-changes-insert-border, #00853d);
259-
border-bottom: 1px dashed var(--sd-tracked-changes-insert-border, #00853d);
258+
border-top: var(--sd-tracked-changes-insert-border-width, 1px) dashed var(--sd-tracked-changes-insert-border, #00853d);
259+
border-bottom: var(--sd-tracked-changes-insert-border-width, 1px) dashed
260+
var(--sd-tracked-changes-insert-border, #00853d);
260261
background-color: var(--sd-tracked-changes-insert-background, #399c7222);
262+
color: var(--sd-tracked-changes-insert-text, currentColor);
263+
text-decoration-line: var(--sd-tracked-changes-insert-decoration-line, none);
264+
text-decoration-color: var(--sd-tracked-changes-insert-text, currentColor);
265+
text-decoration-thickness: var(--sd-tracked-changes-insert-decoration-thickness, 1px);
266+
text-underline-offset: var(--sd-tracked-changes-insert-underline-offset, 0px);
261267
}
262268

263269
.sd-editor-scoped .ProseMirror .track-delete-dec.highlighted {
264-
border-top: 1px dashed var(--sd-tracked-changes-delete-border, #cb0e47);
265-
border-bottom: 1px dashed var(--sd-tracked-changes-delete-border, #cb0e47);
270+
border-top: var(--sd-tracked-changes-delete-border-width, 1px) dashed var(--sd-tracked-changes-delete-border, #cb0e47);
271+
border-bottom: var(--sd-tracked-changes-delete-border-width, 1px) dashed
272+
var(--sd-tracked-changes-delete-border, #cb0e47);
266273
background-color: var(--sd-tracked-changes-delete-background, #cb0e4722);
267-
text-decoration: line-through !important;
268-
text-decoration-thickness: 2px !important;
274+
color: var(--sd-tracked-changes-delete-text, currentColor);
275+
text-decoration: line-through solid var(--sd-tracked-changes-delete-text, currentColor)
276+
var(--sd-tracked-changes-delete-decoration-thickness, 2px) !important;
269277
}
270278

271279
.sd-editor-scoped .ProseMirror .track-format-dec.highlighted {

packages/superdoc/src/assets/styles/helpers/variables.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,18 @@
180180
/* Styles: tracked changes — old names honored via fallback */
181181
--sd-tracked-changes-insert-background: var(--sd-track-insert-bg, #399c7222);
182182
--sd-tracked-changes-insert-border: var(--sd-track-insert-border, #00853d);
183+
--sd-tracked-changes-insert-border-width: 1px;
184+
--sd-tracked-changes-insert-focused-border-width: 2px;
185+
--sd-tracked-changes-insert-text: currentColor;
186+
--sd-tracked-changes-insert-decoration-line: none;
187+
--sd-tracked-changes-insert-decoration-thickness: 1px;
188+
--sd-tracked-changes-insert-underline-offset: 0px;
183189
--sd-tracked-changes-delete-background: var(--sd-track-delete-bg, #cb0e4722);
184190
--sd-tracked-changes-delete-border: var(--sd-track-delete-border, #cb0e47);
191+
--sd-tracked-changes-delete-border-width: 1px;
192+
--sd-tracked-changes-delete-focused-border-width: 2px;
193+
--sd-tracked-changes-delete-text: currentColor;
194+
--sd-tracked-changes-delete-decoration-thickness: 2px;
185195
--sd-tracked-changes-format-border: var(--sd-track-format-border, gold);
186196
--sd-tracked-changes-insert-background-focused: #399c7244;
187197
--sd-tracked-changes-delete-background-focused: #cb0e4744;

0 commit comments

Comments
 (0)