@fsegurai/codemirror-theme-high-contrast-light 6.0.4 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +40 -32
  2. package/dist/index.cjs +655 -382
  3. package/dist/index.js +655 -382
  4. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -101,6 +101,498 @@ function applyMergeRevertStyles(styles) {
101
101
  document.head.appendChild(styleEl);
102
102
  }
103
103
 
104
+ // Shared theme core: every theme package describes a palette (`ThemeDefinition`) and this module turns it into the
105
+ // CodeMirror extension. Generated into each package by `bun run generate:helpers`; edit only the copy in
106
+ // `packages/.helper/utils/`.
107
+ /** Parent of every fine role: an omitted fine role resolves to its parent. */
108
+ const ROLE_PARENTS = {
109
+ controlKeyword: 'keyword',
110
+ moduleKeyword: 'keyword',
111
+ definitionKeyword: 'keyword',
112
+ operatorKeyword: 'operator',
113
+ modifier: 'keyword',
114
+ arithmeticOperator: 'operator',
115
+ logicOperator: 'operator',
116
+ compareOperator: 'operator',
117
+ bitwiseOperator: 'operator',
118
+ updateOperator: 'operator',
119
+ derefOperator: 'operator',
120
+ definitionOperator: 'operator',
121
+ typeOperator: 'operator',
122
+ controlOperator: 'operator',
123
+ separator: 'punctuation',
124
+ bracket: 'punctuation',
125
+ paren: 'bracket',
126
+ brace: 'bracket',
127
+ squareBracket: 'bracket',
128
+ angleBracket: 'bracket',
129
+ character: 'name',
130
+ macroName: 'name',
131
+ variable: 'name',
132
+ localVariable: 'variable',
133
+ variableDefinition: 'variable',
134
+ nameDefinition: 'variableDefinition',
135
+ functionDefinition: 'function',
136
+ self: 'variable',
137
+ label: 'name',
138
+ propertyDefinition: 'property',
139
+ method: 'property',
140
+ methodDefinition: 'method',
141
+ specialProperty: 'property',
142
+ typeDefinition: 'type',
143
+ className: 'type',
144
+ namespace: 'type',
145
+ standardTag: 'tag',
146
+ annotation: 'meta',
147
+ documentMeta: 'meta',
148
+ processingInstruction: 'meta',
149
+ attributeValue: 'string',
150
+ literal: 'string',
151
+ docString: 'string',
152
+ regexp: 'string',
153
+ specialString: 'regexp',
154
+ escape: 'string',
155
+ unit: 'number',
156
+ atom: 'constant',
157
+ bool: 'atom',
158
+ null: 'constant',
159
+ constantName: 'constant',
160
+ standardName: 'constant',
161
+ color: 'standardName',
162
+ specialVariable: 'constant',
163
+ docComment: 'comment',
164
+ headingLevel: 'heading',
165
+ heading1: 'headingLevel',
166
+ heading2: 'headingLevel',
167
+ heading3: 'headingLevel',
168
+ heading4: 'headingLevel',
169
+ heading5: 'headingLevel',
170
+ heading6: 'headingLevel',
171
+ list: 'name',
172
+ quote: 'string',
173
+ monospace: 'string',
174
+ contentSeparator: 'punctuation',
175
+ };
176
+ /**
177
+ * Canonical tag → role table shared by every theme: every Lezer base tag and the modifier combinations that the
178
+ * official grammars emit. Each tag appears once, so no rule is shadowed by a later one.
179
+ */
180
+ const SYNTAX_TAGS = [
181
+ ['keyword', [highlight.tags.keyword]],
182
+ ['controlKeyword', [highlight.tags.controlKeyword]],
183
+ ['moduleKeyword', [highlight.tags.moduleKeyword]],
184
+ ['definitionKeyword', [highlight.tags.definitionKeyword]],
185
+ ['operatorKeyword', [highlight.tags.operatorKeyword]],
186
+ ['modifier', [highlight.tags.modifier]],
187
+ ['operator', [highlight.tags.operator]],
188
+ ['arithmeticOperator', [highlight.tags.arithmeticOperator]],
189
+ ['logicOperator', [highlight.tags.logicOperator]],
190
+ ['compareOperator', [highlight.tags.compareOperator]],
191
+ ['bitwiseOperator', [highlight.tags.bitwiseOperator]],
192
+ ['updateOperator', [highlight.tags.updateOperator]],
193
+ ['derefOperator', [highlight.tags.derefOperator]],
194
+ ['definitionOperator', [highlight.tags.definitionOperator]],
195
+ ['typeOperator', [highlight.tags.typeOperator]],
196
+ ['controlOperator', [highlight.tags.controlOperator]],
197
+ ['punctuation', [highlight.tags.punctuation, highlight.tags.function(highlight.tags.punctuation)]],
198
+ ['separator', [highlight.tags.separator]],
199
+ ['bracket', [highlight.tags.bracket]],
200
+ ['paren', [highlight.tags.paren]],
201
+ ['brace', [highlight.tags.brace, highlight.tags.special(highlight.tags.brace)]],
202
+ ['squareBracket', [highlight.tags.squareBracket]],
203
+ ['angleBracket', [highlight.tags.angleBracket]],
204
+ ['name', [highlight.tags.name, highlight.tags.special(highlight.tags.name)]],
205
+ ['character', [highlight.tags.character]],
206
+ ['macroName', [highlight.tags.macroName]],
207
+ ['variable', [highlight.tags.variableName, highlight.tags.standard(highlight.tags.variableName)]],
208
+ ['localVariable', [highlight.tags.local(highlight.tags.variableName)]],
209
+ ['variableDefinition', [highlight.tags.definition(highlight.tags.variableName)]],
210
+ ['nameDefinition', [highlight.tags.definition(highlight.tags.name)]],
211
+ ['function', [highlight.tags.function(highlight.tags.variableName)]],
212
+ ['functionDefinition', [highlight.tags.definition(highlight.tags.function(highlight.tags.variableName))]],
213
+ ['self', [highlight.tags.self]],
214
+ ['label', [highlight.tags.labelName]],
215
+ ['property', [highlight.tags.propertyName]],
216
+ ['propertyDefinition', [highlight.tags.definition(highlight.tags.propertyName)]],
217
+ ['method', [highlight.tags.function(highlight.tags.propertyName)]],
218
+ ['methodDefinition', [highlight.tags.definition(highlight.tags.function(highlight.tags.propertyName))]],
219
+ ['specialProperty', [highlight.tags.special(highlight.tags.propertyName), highlight.tags.definition(highlight.tags.special(highlight.tags.propertyName))]],
220
+ ['type', [highlight.tags.typeName, highlight.tags.standard(highlight.tags.typeName)]],
221
+ ['typeDefinition', [highlight.tags.definition(highlight.tags.typeName)]],
222
+ ['className', [highlight.tags.className, highlight.tags.definition(highlight.tags.className), highlight.tags.constant(highlight.tags.className)]],
223
+ ['namespace', [highlight.tags.namespace]],
224
+ ['tag', [highlight.tags.tagName]],
225
+ ['standardTag', [highlight.tags.standard(highlight.tags.tagName)]],
226
+ ['attribute', [highlight.tags.attributeName, highlight.tags.special(highlight.tags.attributeName)]],
227
+ ['attributeValue', [highlight.tags.attributeValue]],
228
+ ['literal', [highlight.tags.literal]],
229
+ ['string', [highlight.tags.string]],
230
+ ['docString', [highlight.tags.docString]],
231
+ ['regexp', [highlight.tags.regexp]],
232
+ ['specialString', [highlight.tags.special(highlight.tags.string), highlight.tags.special(highlight.tags.docString)]],
233
+ ['escape', [highlight.tags.escape]],
234
+ ['number', [highlight.tags.number, highlight.tags.integer, highlight.tags.float]],
235
+ ['unit', [highlight.tags.unit]],
236
+ ['atom', [highlight.tags.atom]],
237
+ ['bool', [highlight.tags.bool]],
238
+ ['null', [highlight.tags.null]],
239
+ ['constantName', [highlight.tags.constant(highlight.tags.name)]],
240
+ ['standardName', [highlight.tags.standard(highlight.tags.name)]],
241
+ ['color', [highlight.tags.color]],
242
+ ['specialVariable', [highlight.tags.special(highlight.tags.variableName)]],
243
+ ['comment', [highlight.tags.comment, highlight.tags.lineComment, highlight.tags.blockComment]],
244
+ ['docComment', [highlight.tags.docComment]],
245
+ ['meta', [highlight.tags.meta]],
246
+ ['documentMeta', [highlight.tags.documentMeta]],
247
+ ['processingInstruction', [highlight.tags.processingInstruction]],
248
+ ['annotation', [highlight.tags.annotation]],
249
+ ['content', [highlight.tags.content, highlight.tags.special(highlight.tags.content)]],
250
+ ['heading', [highlight.tags.heading]],
251
+ ['heading1', [highlight.tags.heading1]],
252
+ ['heading2', [highlight.tags.heading2]],
253
+ ['heading3', [highlight.tags.heading3]],
254
+ ['heading4', [highlight.tags.heading4]],
255
+ ['heading5', [highlight.tags.heading5]],
256
+ ['heading6', [highlight.tags.heading6]],
257
+ ['list', [highlight.tags.list]],
258
+ ['quote', [highlight.tags.quote]],
259
+ ['monospace', [highlight.tags.monospace]],
260
+ ['contentSeparator', [highlight.tags.contentSeparator]],
261
+ ['link', [highlight.tags.link]],
262
+ ['url', [highlight.tags.url]],
263
+ ['emphasis', [highlight.tags.emphasis]],
264
+ ['strong', [highlight.tags.strong]],
265
+ ['strikethrough', [highlight.tags.strikethrough]],
266
+ ['invalid', [highlight.tags.invalid]],
267
+ ['inserted', [highlight.tags.inserted]],
268
+ ['deleted', [highlight.tags.deleted]],
269
+ ['changed', [highlight.tags.changed]],
270
+ ];
271
+ /** Inline SVG image (same encoding as `@codemirror/lint`), used to draw lint markers in the theme colors. */
272
+ function svg(content, attrs = 'viewBox="0 0 40 40"') {
273
+ return `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" ${attrs}>${encodeURIComponent(content)}</svg>')`;
274
+ }
275
+ /** Wavy underline of a lint range. */
276
+ function lintUnderline(color) {
277
+ return svg(`<path d="m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0" stroke="${color}" fill="none" stroke-width=".7"/>`, 'width="6" height="3"');
278
+ }
279
+ /**
280
+ * Canonical UI template: the same selectors for every theme, only palette values differ. Rules of equal specificity
281
+ * keep the order of the original theme files (later rules win).
282
+ */
283
+ function uiTemplate(ui) {
284
+ return {
285
+ '&': {
286
+ color: ui.foreground,
287
+ backgroundColor: ui.background,
288
+ border: ui.border,
289
+ fontSize: generalContent.fontSize,
290
+ fontFamily: generalContent.fontFamily,
291
+ },
292
+ '.cm-content': { caretColor: ui.cursor, lineHeight: generalContent.lineHeight },
293
+ '.cm-cursor, .cm-dropCursor': {
294
+ borderLeftColor: ui.cursor,
295
+ borderLeftWidth: ui.cursorWidth,
296
+ boxShadow: ui.cursorShadow,
297
+ },
298
+ '.cm-cursor-secondary': { borderLeftColor: ui.cursor, opacity: '0.6' },
299
+ '.cm-fat-cursor': {
300
+ backgroundColor: ui.fatCursor.background,
301
+ color: ui.background,
302
+ border: ui.fatCursor.border,
303
+ boxShadow: ui.cursorShadow,
304
+ },
305
+ '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': { backgroundColor: ui.selection, color: ui.selectionForeground, outline: ui.selectionOutline },
306
+ '&:not(.cm-focused) .cm-selectionBackground': { backgroundColor: ui.selectionInactive },
307
+ '.cm-selectionLayer': { zIndex: 100 },
308
+ '.cm-searchMatch': {
309
+ backgroundColor: ui.searchMatch.background,
310
+ outline: `${ui.outlineWidth} solid ${ui.searchMatch.outline}`,
311
+ color: ui.searchMatch.foreground,
312
+ borderRadius: generalSearchField.borderRadius,
313
+ boxShadow: ui.searchMatch.shadow,
314
+ },
315
+ '.cm-searchMatch span': { color: ui.searchMatch.foreground },
316
+ '.cm-searchMatch.cm-searchMatch-selected': {
317
+ backgroundColor: ui.searchMatch.selectedBackground,
318
+ color: ui.searchMatch.selectedForeground,
319
+ padding: generalSearchField.padding,
320
+ outline: ui.searchMatch.selectedOutline,
321
+ boxShadow: ui.searchMatch.selectedShadow,
322
+ },
323
+ '.cm-searchMatch.cm-searchMatch-selected span': { color: ui.searchMatch.selectedForeground },
324
+ '.cm-search.cm-panel.cm-textfield': {
325
+ color: ui.panel.foreground,
326
+ borderRadius: generalSearchField.borderRadius,
327
+ padding: generalSearchField.padding,
328
+ },
329
+ '.cm-textfield': {
330
+ backgroundColor: ui.panel.inputBackground,
331
+ color: ui.panel.foreground,
332
+ border: ui.panel.inputBorder,
333
+ borderRadius: generalSearchField.borderRadius,
334
+ padding: generalSearchField.padding,
335
+ },
336
+ '.cm-panels': {
337
+ backgroundColor: ui.panel.background,
338
+ color: ui.panel.foreground,
339
+ border: ui.panel.outline,
340
+ borderRadius: generalPanel.borderRadius,
341
+ boxShadow: ui.panel.shadow,
342
+ },
343
+ '.cm-panels.cm-panels-top': { borderBottom: `${ui.panel.borderWidth} solid ${ui.panel.border}` },
344
+ '.cm-panels.cm-panels-bottom': { borderTop: `${ui.panel.borderWidth} solid ${ui.panel.border}` },
345
+ '.cm-panel.cm-gotoLine': { color: ui.panel.foreground, padding: generalPanel.padding },
346
+ '.cm-panel button, .cm-button': {
347
+ backgroundColor: ui.panel.buttonBackground,
348
+ backgroundImage: 'none',
349
+ color: ui.panel.buttonForeground,
350
+ border: ui.panel.buttonBorder,
351
+ borderRadius: generalPanel.borderRadius,
352
+ padding: generalPanel.padding,
353
+ },
354
+ '.cm-panel button:hover, .cm-button:hover': {
355
+ backgroundColor: ui.panel.buttonHoverBackground,
356
+ color: ui.panel.buttonHoverForeground,
357
+ border: ui.panel.buttonHoverBorder,
358
+ boxShadow: ui.panel.buttonHoverShadow,
359
+ },
360
+ '.cm-activeLine': {
361
+ backgroundColor: ui.activeLine,
362
+ borderLeft: ui.activeLineBorder.left,
363
+ borderRight: ui.activeLineBorder.right,
364
+ borderRadius: generalLine.borderRadius,
365
+ zIndex: 1,
366
+ },
367
+ '.cm-gutters': {
368
+ backgroundColor: ui.gutter.background,
369
+ color: ui.gutter.foreground,
370
+ border: generalGutter.border,
371
+ borderRight: `${ui.outlineWidth} solid ${ui.gutter.border}`,
372
+ paddingRight: generalGutter.paddingRight,
373
+ },
374
+ '.cm-activeLineGutter': {
375
+ backgroundColor: ui.gutter.activeBackground,
376
+ color: ui.gutter.activeForeground,
377
+ fontWeight: ui.gutter.activeFontWeight,
378
+ border: ui.gutter.activeBorder,
379
+ },
380
+ '.cm-lineNumbers': { fontSize: generalGutter.fontSize, lineHeight: generalGutter.lineHeight },
381
+ '.cm-foldGutter': { fontSize: generalGutter.fontSize, lineHeight: generalGutter.lineHeight },
382
+ '.cm-foldGutter .cm-gutterElement': { color: ui.gutter.foreground, cursor: 'pointer' },
383
+ '.cm-foldGutter .cm-gutterElement:hover': { color: ui.gutter.foldHover },
384
+ '.cm-gutter-lint': { color: ui.gutter.foreground },
385
+ '.cm-lint-marker': { width: '1em', height: '1em' },
386
+ '.cm-lint-marker-error': {
387
+ content: svg(`<circle cx="20" cy="20" r="15" fill="${ui.diagnostic.error}" stroke="${ui.background}" stroke-width="4"/>`),
388
+ },
389
+ '.cm-lint-marker-warning': {
390
+ content: svg(`<path fill="${ui.diagnostic.warning}" stroke="${ui.background}" stroke-width="4" stroke-linejoin="round" d="M20 6L37 35L3 35Z"/>`),
391
+ },
392
+ '.cm-lint-marker-info': {
393
+ content: svg(`<path fill="${ui.diagnostic.info}" stroke="${ui.background}" stroke-width="4" stroke-linejoin="round" d="M5 5L35 5L35 35L5 35Z"/>`),
394
+ },
395
+ '.cm-changeGutter': { backgroundColor: ui.gutter.background },
396
+ '.cm-merge-b .cm-changedLineGutter, .cm-inlineChangedLineGutter': { background: ui.diff.insertedForeground },
397
+ '.cm-merge-a .cm-changedLineGutter, .cm-deletedLineGutter': { background: ui.diff.deletedForeground },
398
+ '.cm-insertedLine': {
399
+ textDecoration: generalDiff.insertedTextDecoration,
400
+ backgroundColor: ui.diff.insertedBackground,
401
+ color: ui.diff.insertedForeground,
402
+ padding: generalDiff.insertedLinePadding,
403
+ borderRadius: generalDiff.borderRadius,
404
+ },
405
+ 'ins.cm-insertedLine, ins.cm-insertedLine:not(:has(.cm-changedText))': {
406
+ textDecoration: generalDiff.insertedTextDecoration,
407
+ backgroundColor: `${ui.diff.insertedBackground} !important`,
408
+ color: ui.diff.insertedForeground,
409
+ padding: generalDiff.insertedLinePadding,
410
+ borderRadius: generalDiff.borderRadius,
411
+ border: ui.diff.insertedBorder,
412
+ },
413
+ 'ins.cm-insertedLine .cm-changedText': { background: 'transparent !important' },
414
+ '.cm-deletedLine': {
415
+ textDecoration: generalDiff.deletedTextDecoration,
416
+ backgroundColor: ui.diff.deletedBackground,
417
+ color: ui.diff.deletedForeground,
418
+ padding: generalDiff.insertedLinePadding,
419
+ borderRadius: generalDiff.borderRadius,
420
+ },
421
+ // Merge view deletions only: `del` decorations, inline deletion widgets and the lines of deleted chunks. `:where()`
422
+ // keeps the specificity of the former bare `del` selector without styling other `del` elements.
423
+ 'del.cm-deletedLine, del.cm-deletedText, :where(.cm-deletedChunk) del, :where(.cm-deletedChunk) del:not(:has(.cm-deletedText))': {
424
+ textDecoration: generalDiff.deletedTextDecoration,
425
+ backgroundColor: `${ui.diff.deletedBackground} !important`,
426
+ color: ui.diff.deletedForeground,
427
+ padding: generalDiff.insertedLinePadding,
428
+ borderRadius: generalDiff.borderRadius,
429
+ border: ui.diff.deletedBorder,
430
+ },
431
+ ':where(.cm-deletedChunk) del .cm-deletedText, :where(.cm-deletedChunk) del .cm-changedText, del:where(.cm-deletedLine) .cm-deletedText, del:where(.cm-deletedLine) .cm-changedText': { background: 'transparent !important' },
432
+ '.cm-merge-b .cm-changedLine, .cm-inlineChangedLine': { backgroundColor: ui.diff.insertedBackground },
433
+ '.cm-merge-a .cm-changedLine, .cm-deletedChunk': { backgroundColor: ui.diff.deletedBackground },
434
+ '.cm-collapsedLines': {
435
+ background: ui.foldPlaceholder.background,
436
+ color: ui.foldPlaceholder.foreground,
437
+ },
438
+ '.cm-mergeSpacer': { background: ui.merge.backgroundColor },
439
+ '.cm-tooltip': {
440
+ backgroundColor: ui.tooltip.background,
441
+ color: ui.tooltip.foreground,
442
+ border: `${ui.outlineWidth} solid ${ui.tooltip.border}`,
443
+ borderRadius: generalTooltip.borderRadius,
444
+ padding: generalTooltip.padding,
445
+ boxShadow: ui.tooltip.shadow,
446
+ },
447
+ '.cm-tooltip-autocomplete > ul': { backgroundColor: ui.tooltip.listBackground, border: ui.tooltip.listBorder },
448
+ '.cm-tooltip-autocomplete > ul > li': { padding: generalTooltip.padding, lineHeight: generalTooltip.lineHeight },
449
+ '.cm-tooltip-autocomplete > ul > li:hover': { backgroundColor: ui.tooltip.hoverBackground },
450
+ '.cm-tooltip-autocomplete > ul > li[aria-selected]': {
451
+ backgroundColor: ui.tooltip.selectedBackground,
452
+ color: ui.tooltip.selectedForeground,
453
+ border: ui.tooltip.selectedBorder,
454
+ borderRadius: generalTooltip.borderRadiusSelected,
455
+ },
456
+ '.cm-tooltip-autocomplete > ul > li > span.cm-completionIcon': {
457
+ color: ui.tooltip.icon,
458
+ paddingRight: generalTooltip.paddingRight,
459
+ },
460
+ '.cm-tooltip-autocomplete > ul > li > span.cm-completionDetail': { color: ui.tooltip.detail, fontStyle: 'italic' },
461
+ '.cm-completionMatchedText': {
462
+ color: 'inherit',
463
+ fontWeight: 'bold',
464
+ textDecoration: 'underline',
465
+ textDecorationColor: ui.matchingBracket.outline,
466
+ },
467
+ '.cm-completionInfo': {
468
+ backgroundColor: ui.tooltip.background,
469
+ color: ui.tooltip.foreground,
470
+ border: `${ui.outlineWidth} solid ${ui.tooltip.border}`,
471
+ padding: generalTooltip.padding,
472
+ },
473
+ '.cm-tooltip .cm-tooltip-arrow:before': { borderTopColor: 'transparent', borderBottomColor: 'transparent' },
474
+ '.cm-tooltip .cm-tooltip-arrow:after': {
475
+ borderTopColor: ui.tooltip.background,
476
+ borderBottomColor: ui.tooltip.background,
477
+ },
478
+ '.cm-tooltip-lint': { color: ui.tooltip.foreground, padding: '0' },
479
+ '.cm-tooltip-section:not(:first-child)': { borderTop: `1px solid ${ui.tooltip.border}` },
480
+ '.cm-diagnostic-error': {
481
+ borderLeft: `${ui.diagnostic.borderWidth} solid ${ui.diagnostic.error}`,
482
+ backgroundColor: ui.diagnostic.errorBackground,
483
+ },
484
+ '.cm-diagnostic-warning': {
485
+ borderLeft: `${ui.diagnostic.borderWidth} solid ${ui.diagnostic.warning}`,
486
+ backgroundColor: ui.diagnostic.warningBackground,
487
+ },
488
+ '.cm-diagnostic-info': {
489
+ borderLeft: `${ui.diagnostic.borderWidth} solid ${ui.diagnostic.info}`,
490
+ backgroundColor: ui.diagnostic.infoBackground,
491
+ },
492
+ '.cm-diagnostic-hint': { borderLeft: `${ui.diagnostic.borderWidth} solid ${ui.diagnostic.hint}` },
493
+ '.cm-diagnosticAction': {
494
+ backgroundColor: ui.panel.buttonBackground,
495
+ color: ui.panel.buttonForeground,
496
+ border: ui.panel.buttonBorder,
497
+ borderRadius: generalPanel.borderRadius,
498
+ },
499
+ '.cm-lintRange-error': { backgroundImage: lintUnderline(ui.diagnostic.error) },
500
+ '.cm-lintRange-warning': { backgroundImage: lintUnderline(ui.diagnostic.warning) },
501
+ '.cm-lintRange-info': { backgroundImage: lintUnderline(ui.diagnostic.info) },
502
+ '.cm-lintRange-hint': { backgroundImage: lintUnderline(ui.diagnostic.hint) },
503
+ '.cm-lintPoint-error': { borderBottom: `${ui.diagnostic.underlineWidth} wavy ${ui.diagnostic.error}` },
504
+ '.cm-lintPoint-warning': { borderBottom: `${ui.diagnostic.underlineWidth} wavy ${ui.diagnostic.warning}` },
505
+ '.cm-lintPoint-info': { borderBottom: `${ui.diagnostic.underlineWidth} wavy ${ui.diagnostic.info}` },
506
+ '.cm-matchingBracket': {
507
+ backgroundColor: ui.matchingBracket.background,
508
+ outline: `${ui.outlineWidth} solid ${ui.matchingBracket.outline}`,
509
+ borderRadius: generalMatching.borderRadius,
510
+ boxShadow: ui.matchingBracket.shadow,
511
+ },
512
+ '.cm-nonmatchingBracket': {
513
+ backgroundColor: ui.nonMatchingBracket.background,
514
+ outline: `${ui.outlineWidth} solid ${ui.nonMatchingBracket.outline}`,
515
+ borderRadius: generalMatching.borderRadius,
516
+ },
517
+ '.cm-selectionMatch': {
518
+ backgroundColor: ui.selectionMatch.background,
519
+ outline: `${ui.outlineWidth} solid ${ui.selectionMatch.outline}`,
520
+ borderRadius: generalMatching.borderRadius,
521
+ },
522
+ '.cm-snippetField': {
523
+ backgroundColor: ui.selectionMatch.background,
524
+ outline: `1px dashed ${ui.selectionMatch.outline}`,
525
+ borderRadius: generalMatching.borderRadius,
526
+ },
527
+ '.cm-snippetFieldPosition': { borderLeft: `1px dotted ${ui.cursor}` },
528
+ '.cm-foldPlaceholder': {
529
+ backgroundColor: ui.foldPlaceholder.background,
530
+ color: ui.foldPlaceholder.foreground,
531
+ border: `${ui.outlineWidth} ${ui.foldPlaceholder.borderStyle} ${ui.foldPlaceholder.border}`,
532
+ borderRadius: generalPlaceholder.borderRadius,
533
+ padding: generalPlaceholder.padding,
534
+ margin: generalPlaceholder.margin,
535
+ },
536
+ // Transparent outline: invisible normally, repainted with the system color in forced-colors mode (drops box-shadow).
537
+ '&.cm-focused': { outline: '2px solid transparent', boxShadow: ui.focusRing },
538
+ '& .cm-scroller::-webkit-scrollbar': { width: generalScroller.width, height: generalScroller.height },
539
+ '& .cm-scroller::-webkit-scrollbar-track': { background: ui.scrollbar.track, border: ui.scrollbar.trackBorder },
540
+ '& .cm-scroller::-webkit-scrollbar-thumb': {
541
+ backgroundColor: ui.scrollbar.thumb,
542
+ borderRadius: generalScroller.borderRadius,
543
+ border: ui.scrollbar.thumbBorder,
544
+ },
545
+ '& .cm-scroller::-webkit-scrollbar-thumb:hover': {
546
+ backgroundColor: ui.scrollbar.thumbHover,
547
+ boxShadow: ui.scrollbar.thumbHoverShadow,
548
+ },
549
+ '.cm-ghostText': { opacity: ui.ghostTextOpacity, color: ui.ghostText },
550
+ '.cm-placeholder': { color: ui.ghostText },
551
+ '.cm-specialChar': { color: ui.specialChar },
552
+ '.cm-trailingSpace': { backgroundColor: ui.diff.deletedBackground },
553
+ '.cm-highlightSpace': {
554
+ backgroundImage: `radial-gradient(circle at 50% 55%, ${ui.gutter.foreground} 20%, transparent 0)`,
555
+ },
556
+ '.cm-crosshair': { cursor: 'crosshair' },
557
+ };
558
+ }
559
+ /** Drops `null` declarations and selectors left without declarations. */
560
+ function emittedRules(spec) {
561
+ const result = {};
562
+ for (const [selector, declarations] of Object.entries(spec)) {
563
+ const emitted = Object.entries(declarations).filter((entry) => entry[1] !== null);
564
+ if (emitted.length > 0)
565
+ result[selector] = Object.fromEntries(emitted);
566
+ }
567
+ return result;
568
+ }
569
+ /** Style of a role, falling back through `ROLE_PARENTS` for omitted fine roles. */
570
+ function resolveRole(syntax, role) {
571
+ let current = role;
572
+ while (current) {
573
+ const style = syntax[current];
574
+ if (style)
575
+ return style;
576
+ current = ROLE_PARENTS[current];
577
+ }
578
+ return {};
579
+ }
580
+ /** Highlight rules of a theme: one rule per entry of the canonical table. */
581
+ function highlightRules(definition) {
582
+ return SYNTAX_TAGS.map(([role, tagList]) => (Object.assign({ tag: [...tagList] }, resolveRole(definition.syntax, role))));
583
+ }
584
+ /** Builds the editor theme, the syntax highlighting and the merge view styles of a theme definition. */
585
+ function defineTheme(definition) {
586
+ const theme = view.EditorView.theme(emittedRules(uiTemplate(definition.ui)), { dark: definition.dark });
587
+ const highlightStyle = language.HighlightStyle.define(highlightRules(definition));
588
+ return {
589
+ extension: [theme, language.syntaxHighlighting(highlightStyle)],
590
+ theme,
591
+ highlightStyle,
592
+ mergeStyles: Object.assign({}, definition.ui.merge),
593
+ };
594
+ }
595
+
104
596
  /**
105
597
  * High Contrast Light theme color definitions
106
598
  * -------------------------------------------
@@ -109,411 +601,192 @@ function applyMergeRevertStyles(styles) {
109
601
  // Base colors - Pure white and black for maximum contrast
110
602
  const base00 = '#ffffff', // Background - pure white
111
603
  base01 = '#e0e0e0', // Selection background
112
- base02 = '#707070', // Comments - medium grey
604
+ base02 = '#4f4f4f', // Comments - medium grey
113
605
  base03 = '#505050', // Dark grey
114
606
  base04 = '#000000', // Foreground - pure black
115
607
  // High contrast accent colors for a light background
116
- darkBlue = '#0000ff', darkCyan = '#008080', darkGreen = '#008000', darkRed = '#c80000', darkMagenta = '#800080', darkOrange = '#d04800', darkPurple = '#6600cc', darkBrown = '#7c3400';
608
+ darkBlue = '#0000ff', darkCyan = '#095959', darkGreen = '#0e5d0c', darkRed = '#a40000', darkMagenta = '#800080', darkOrange = '#8e3003', darkPurple = '#6600cc', darkBrown = '#7c3400';
117
609
  // UI specific colors
118
- const invalid = darkRed, lightBackground = base00, background = base00, tooltipBackground = '#f0f0f0', selection = '#0078d4', selectionMatch = '#0078d480', cursor = darkBlue, activeBracketBg = '#e0e0e0', activeBracketBorder = darkCyan, diagnosticWarning = darkOrange, linkColor = darkBlue, visitedLinkColor = darkPurple;
610
+ const tooltipBackground = '#f0f0f0', selection = '#0078d4', selectionMatch = '#0078d480';
119
611
  // Diff/merge specific colors
120
- const addedBackground = '#00800040', removedBackground = '#c8000040', addedText = darkGreen, removedText = darkRed;
121
- /**
122
- * Enhanced editor theme styles for High Contrast Light
123
- */
124
- const highContrastLightTheme = view.EditorView.theme({
125
- // Base editor styles
126
- '&': {
127
- color: base04,
128
- backgroundColor: background,
129
- fontSize: generalContent.fontSize,
130
- fontFamily: generalContent.fontFamily,
612
+ const addedBackground = '#00800040', removedBackground = '#c8000040';
613
+ const theme = defineTheme({
614
+ dark: false,
615
+ ui: {
616
+ background: base00,
617
+ foreground: base04,
131
618
  border: `2px solid ${base04}`,
132
- },
133
- // Content and cursor
134
- '.cm-content': {
135
- caretColor: cursor,
136
- lineHeight: generalContent.lineHeight,
137
- },
138
- '.cm-cursor, .cm-dropCursor': {
139
- borderLeftColor: cursor,
140
- borderLeftWidth: '3px',
141
- },
142
- '.cm-fat-cursor': {
143
- backgroundColor: cursor,
144
- color: background,
145
- border: `2px solid ${base04}`,
146
- },
147
- // Selection
148
- '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
149
- backgroundColor: '#4d90fe',
150
- outline: `2px solid ${darkBlue}`,
151
- },
152
- // Make sure selection appears above active line
153
- '.cm-selectionLayer': {
154
- zIndex: 100,
155
- },
156
- // Search functionality
157
- '.cm-searchMatch': {
158
- backgroundColor: '#ffff00',
159
- outline: `2px solid ${darkOrange}`,
160
- color: base04,
161
- borderRadius: generalSearchField.borderRadius,
162
- '& span': {
163
- color: base04,
619
+ cursor: darkBlue,
620
+ cursorWidth: '3px',
621
+ cursorShadow: 'none',
622
+ fatCursor: { background: darkBlue, border: `2px solid ${base04}` },
623
+ selection: '#9fc3fe',
624
+ selectionInactive: '#9fc3fe',
625
+ selectionForeground: null,
626
+ selectionOutline: `2px solid ${darkBlue}`,
627
+ activeLine: '#ffffccba',
628
+ activeLineBorder: { left: `3px solid ${darkBlue}`, right: `1px solid ${base02}` },
629
+ ghostText: base02,
630
+ ghostTextOpacity: '0.7',
631
+ specialChar: darkRed,
632
+ searchMatch: {
633
+ background: '#ffff00',
634
+ outline: darkOrange,
635
+ foreground: base04,
636
+ shadow: 'none',
637
+ selectedBackground: darkOrange,
638
+ selectedForeground: base00,
639
+ selectedOutline: `2px solid ${base04}`,
640
+ selectedShadow: 'none',
164
641
  },
165
- },
166
- '.cm-searchMatch.cm-searchMatch-selected': {
167
- backgroundColor: darkOrange,
168
- color: base00,
169
- padding: generalSearchField.padding,
170
- outline: `2px solid ${base04}`,
171
- '& span': {
172
- color: base00,
642
+ selectionMatch: { background: selectionMatch, outline: `${darkBlue}50` },
643
+ matchingBracket: { background: base01, outline: darkCyan, shadow: 'none' },
644
+ nonMatchingBracket: { background: '#ff000030', outline: darkRed },
645
+ panel: {
646
+ background: base00,
647
+ foreground: base04,
648
+ border: base04,
649
+ borderWidth: '2px',
650
+ outline: `2px solid ${base04}`,
651
+ shadow: 'none',
652
+ buttonBackground: tooltipBackground,
653
+ buttonForeground: darkBlue,
654
+ buttonBorder: `2px solid ${base04}`,
655
+ buttonHoverBackground: base01,
656
+ buttonHoverForeground: darkBlue,
657
+ buttonHoverBorder: `2px solid ${darkBlue}`,
658
+ buttonHoverShadow: 'none',
659
+ inputBackground: base00,
660
+ inputBorder: `2px solid ${base04}`,
173
661
  },
174
- },
175
- '.cm-search.cm-panel.cm-textfield': {
176
- color: base04,
177
- backgroundColor: base00,
178
- border: `2px solid ${base04}`,
179
- borderRadius: generalSearchField.borderRadius,
180
- padding: generalSearchField.padding,
181
- },
182
- // Panels
183
- '.cm-panels': {
184
- backgroundColor: lightBackground,
185
- color: base04,
186
- borderRadius: '4px',
187
- border: `2px solid ${base04}`,
188
- },
189
- '.cm-panels.cm-panels-top': {
190
- borderBottom: `2px solid ${base04}`,
191
- },
192
- '.cm-panels.cm-panels-bottom': {
193
- borderTop: `2px solid ${base04}`,
194
- },
195
- '.cm-panel button': {
196
- backgroundColor: tooltipBackground,
197
- color: darkBlue,
198
- border: `2px solid ${base04}`,
199
- borderRadius: generalPanel.borderRadius,
200
- padding: generalPanel.padding,
201
- },
202
- '.cm-panel button:hover': {
203
- backgroundColor: base01,
204
- border: `2px solid ${darkBlue}`,
205
- },
206
- // Line highlighting
207
- '.cm-activeLine': {
208
- backgroundColor: '#ffffccba',
209
- borderRadius: generalLine.borderRadius,
210
- borderLeft: `3px solid ${darkBlue}`,
211
- borderRight: `1px solid ${base02}`,
212
- zIndex: 1,
213
- },
214
- // Gutters
215
- '.cm-gutters': {
216
- backgroundColor: lightBackground,
217
- color: base03,
218
- border: generalGutter.border,
219
- borderRight: `2px solid ${base04}`,
220
- paddingRight: generalGutter.paddingRight,
221
- },
222
- '.cm-activeLineGutter': {
223
- backgroundColor: base01,
224
- color: darkBlue,
225
- fontWeight: 'bold',
226
- border: `1px solid ${base02}`,
227
- },
228
- '.cm-lineNumbers': {
229
- fontSize: generalGutter.fontSize,
230
- lineHeight: generalGutter.lineHeight,
231
- },
232
- '.cm-foldGutter': {
233
- fontSize: generalGutter.fontSize,
234
- lineHeight: generalGutter.lineHeight,
235
- },
236
- '.cm-foldGutter .cm-gutterElement': {
237
- color: base03,
238
- cursor: 'pointer',
239
- },
240
- '.cm-foldGutter .cm-gutterElement:hover': {
241
- color: darkCyan,
242
- },
243
- // Diff/Merge View Styles
244
- '.cm-insertedLine': {
245
- textDecoration: generalDiff.insertedTextDecoration,
246
- backgroundColor: addedBackground,
247
- color: addedText,
248
- padding: generalDiff.insertedLinePadding,
249
- borderRadius: generalDiff.borderRadius,
250
- border: `2px solid ${addedText}`,
251
- },
252
- 'ins.cm-insertedLine, ins.cm-insertedLine:not(:has(.cm-changedText))': {
253
- textDecoration: generalDiff.insertedTextDecoration,
254
- backgroundColor: `${addedBackground} !important`,
255
- color: addedText,
256
- padding: generalDiff.insertedLinePadding,
257
- borderRadius: generalDiff.borderRadius,
258
- border: `2px solid ${addedText}`,
259
- },
260
- 'ins.cm-insertedLine .cm-changedText': {
261
- background: 'transparent !important',
262
- },
263
- '.cm-deletedLine': {
264
- textDecoration: generalDiff.deletedTextDecoration,
265
- backgroundColor: removedBackground,
266
- color: removedText,
267
- padding: generalDiff.insertedLinePadding,
268
- borderRadius: generalDiff.borderRadius,
269
- border: `2px solid ${removedText}`,
270
- },
271
- 'del.cm-deletedLine, del, del:not(:has(.cm-deletedText))': {
272
- textDecoration: generalDiff.deletedTextDecoration,
273
- backgroundColor: `${removedBackground} !important`,
274
- color: removedText,
275
- padding: generalDiff.insertedLinePadding,
276
- borderRadius: generalDiff.borderRadius,
277
- border: `2px solid ${removedText}`,
278
- },
279
- 'del .cm-deletedText, del .cm-changedText': {
280
- background: 'transparent !important',
281
- },
282
- // Tooltips and autocomplete
283
- '.cm-tooltip': {
284
- backgroundColor: tooltipBackground,
285
- border: `2px solid ${darkBlue}`,
286
- borderRadius: generalTooltip.borderRadius,
287
- padding: generalTooltip.padding,
288
- color: base04,
289
- },
290
- '.cm-tooltip-autocomplete': {
291
- '& > ul': {
292
- backgroundColor: tooltipBackground,
293
- border: `2px solid ${base04}`,
662
+ gutter: {
663
+ background: base00,
664
+ foreground: base03,
665
+ border: base04,
666
+ activeBackground: base01,
667
+ activeForeground: darkBlue,
668
+ activeFontWeight: 'bold',
669
+ activeBorder: `1px solid ${base02}`,
670
+ foldHover: darkCyan,
294
671
  },
295
- '& > ul > li': {
296
- padding: generalTooltip.padding,
297
- lineHeight: generalTooltip.lineHeight,
672
+ foldPlaceholder: { background: tooltipBackground, foreground: darkBlue, border: darkBlue, borderStyle: 'solid' },
673
+ tooltip: {
674
+ background: tooltipBackground,
675
+ foreground: base04,
676
+ border: darkBlue,
677
+ listBackground: tooltipBackground,
678
+ listBorder: `2px solid ${base04}`,
679
+ hoverBackground: 'transparent',
680
+ selectedBackground: selection,
681
+ selectedForeground: base00,
682
+ selectedBorder: `2px solid ${darkBlue}`,
683
+ icon: darkCyan,
684
+ detail: darkOrange,
685
+ shadow: 'none',
298
686
  },
299
- '& > ul > li[aria-selected]': {
300
- backgroundColor: selection,
301
- color: base00,
302
- borderRadius: generalTooltip.borderRadiusSelected,
303
- border: `2px solid ${darkBlue}`,
687
+ diff: {
688
+ insertedBackground: addedBackground,
689
+ insertedForeground: darkGreen,
690
+ insertedBorder: `2px solid ${darkGreen}`,
691
+ deletedBackground: removedBackground,
692
+ deletedForeground: darkRed,
693
+ deletedBorder: `2px solid ${darkRed}`,
304
694
  },
305
- '& > ul > li > span.cm-completionIcon': {
306
- color: darkCyan,
307
- paddingRight: generalTooltip.paddingRight,
695
+ diagnostic: {
696
+ error: darkRed,
697
+ warning: darkOrange,
698
+ info: darkBlue,
699
+ hint: darkBlue,
700
+ errorBackground: '#ff000020',
701
+ warningBackground: '#ff990020',
702
+ infoBackground: `${darkBlue}20`,
703
+ borderWidth: '4px',
704
+ underlineWidth: '3px',
308
705
  },
309
- '& > ul > li > span.cm-completionDetail': {
310
- color: darkOrange,
311
- fontStyle: 'italic',
706
+ scrollbar: {
707
+ track: base00,
708
+ trackBorder: `2px solid ${base04}`,
709
+ thumb: base03,
710
+ thumbBorder: `2px solid ${base04}`,
711
+ thumbHover: darkBlue,
712
+ thumbHoverShadow: 'none',
312
713
  },
313
- },
314
- '.cm-tooltip .cm-tooltip-arrow:before': {
315
- borderTopColor: 'transparent',
316
- borderBottomColor: 'transparent',
317
- },
318
- '.cm-tooltip .cm-tooltip-arrow:after': {
319
- borderTopColor: darkBlue,
320
- borderBottomColor: darkBlue,
321
- },
322
- // Diagnostics styling
323
- '.cm-diagnostic': {
324
- '&-error': {
325
- borderLeft: `4px solid ${darkRed}`,
326
- backgroundColor: '#ff000020',
714
+ focusRing: `0 0 0 2px ${base00}, 0 0 0 5px ${darkBlue}`,
715
+ outlineWidth: '2px',
716
+ merge: {
717
+ backgroundColor: base00,
718
+ borderColor: darkBlue,
719
+ buttonColor: darkBlue,
720
+ buttonHoverColor: darkOrange,
327
721
  },
328
- '&-warning': {
329
- borderLeft: `4px solid ${diagnosticWarning}`,
330
- backgroundColor: '#ff990020',
722
+ },
723
+ syntax: {
724
+ keyword: { color: darkMagenta, fontWeight: 'bold' },
725
+ definitionKeyword: { color: darkMagenta },
726
+ modifier: { color: darkPurple, fontStyle: 'italic' },
727
+ separator: { color: darkBlue },
728
+ operator: { color: darkCyan },
729
+ punctuation: { color: base04 },
730
+ bracket: { color: darkBrown },
731
+ angleBracket: { color: darkCyan },
732
+ brace: { color: darkCyan },
733
+ name: { color: base04 },
734
+ localVariable: { color: darkOrange },
735
+ variableDefinition: { color: darkOrange },
736
+ nameDefinition: { color: darkBlue },
737
+ function: { color: darkBlue },
738
+ self: { color: darkRed },
739
+ label: { color: darkBlue },
740
+ property: { color: darkBlue, fontStyle: 'normal' },
741
+ type: { color: darkCyan },
742
+ typeDefinition: { color: darkCyan, fontWeight: 'bold' },
743
+ className: { color: darkCyan, fontStyle: 'italic' },
744
+ namespace: { color: darkOrange, fontStyle: 'italic' },
745
+ tag: { color: darkMagenta },
746
+ attribute: { color: darkCyan },
747
+ content: { color: base04 },
748
+ string: { color: darkGreen },
749
+ regexp: { color: darkMagenta },
750
+ number: { color: darkOrange },
751
+ constant: { color: darkOrange },
752
+ comment: { fontStyle: 'italic', color: base02 },
753
+ meta: { color: base02 },
754
+ processingInstruction: { color: darkGreen },
755
+ annotation: { color: darkRed, fontStyle: 'italic' },
756
+ heading: { fontWeight: 'bold', color: darkMagenta },
757
+ headingLevel: { color: darkMagenta },
758
+ list: { color: darkMagenta },
759
+ quote: { color: darkPurple },
760
+ monospace: { color: darkBlue, fontStyle: 'italic' },
761
+ contentSeparator: { color: darkPurple },
762
+ link: {
763
+ color: darkPurple,
764
+ fontWeight: '500',
765
+ textDecoration: 'underline',
766
+ textUnderlinePosition: 'under',
331
767
  },
332
- '&-info': {
333
- borderLeft: `4px solid ${linkColor}`,
334
- backgroundColor: '#0000ff20',
768
+ url: { color: darkBlue, textDecoration: 'underline', textUnderlineOffset: '2px' },
769
+ emphasis: { fontStyle: 'italic', color: darkMagenta },
770
+ strong: { fontWeight: 'bold', color: darkOrange },
771
+ strikethrough: { color: darkRed, textDecoration: 'line-through' },
772
+ invalid: {
773
+ color: darkRed,
774
+ textDecoration: 'underline wavy',
775
+ borderBottom: `2px wavy ${darkRed}`,
335
776
  },
777
+ inserted: { color: darkGreen },
778
+ deleted: { color: darkRed },
779
+ changed: { color: darkOrange },
336
780
  },
337
- '.cm-lintPoint-error': {
338
- borderBottom: `3px wavy ${darkRed}`,
339
- },
340
- '.cm-lintPoint-warning': {
341
- borderBottom: `3px wavy ${diagnosticWarning}`,
342
- },
343
- // Matching brackets
344
- '.cm-matchingBracket': {
345
- backgroundColor: activeBracketBg,
346
- outline: `2px solid ${activeBracketBorder}`,
347
- borderRadius: generalMatching.borderRadius,
348
- },
349
- '.cm-nonmatchingBracket': {
350
- backgroundColor: '#ff000030',
351
- outline: `2px solid ${invalid}`,
352
- borderRadius: generalMatching.borderRadius,
353
- },
354
- // Selection matches
355
- '.cm-selectionMatch': {
356
- backgroundColor: selectionMatch,
357
- outline: `2px solid ${darkBlue}50`,
358
- borderRadius: generalMatching.borderRadius,
359
- },
360
- // Fold placeholder
361
- '.cm-foldPlaceholder': {
362
- backgroundColor: tooltipBackground,
363
- color: darkBlue,
364
- border: `2px solid ${darkBlue}`,
365
- borderRadius: generalPlaceholder.borderRadius,
366
- padding: generalPlaceholder.padding,
367
- margin: generalPlaceholder.margin,
368
- },
369
- // Focus outline
370
- '&.cm-focused': {
371
- outline: `3px solid ${darkBlue}`,
372
- outlineOffset: '2px',
373
- },
374
- // Scrollbars
375
- '& .cm-scroller::-webkit-scrollbar': {
376
- width: generalScroller.width,
377
- height: generalScroller.height,
378
- },
379
- '& .cm-scroller::-webkit-scrollbar-track': {
380
- background: lightBackground,
381
- border: `2px solid ${base04}`,
382
- },
383
- '& .cm-scroller::-webkit-scrollbar-thumb': {
384
- backgroundColor: base03,
385
- border: `2px solid ${base04}`,
386
- borderRadius: generalScroller.borderRadius,
387
- },
388
- '& .cm-scroller::-webkit-scrollbar-thumb:hover': {
389
- backgroundColor: darkBlue,
390
- },
391
- // Ghost text
392
- '.cm-ghostText': {
393
- opacity: '0.7',
394
- color: base02,
395
- },
396
- }, { dark: false });
397
- /**
398
- * Enhanced syntax highlighting for High Contrast Light theme
399
- */
400
- const highContrastLightHighlightStyle = language.HighlightStyle.define([
401
- // Keywords and control flow
402
- { tag: highlight.tags.keyword, color: darkMagenta, fontWeight: 'bold' },
403
- { tag: highlight.tags.controlKeyword, color: darkMagenta, fontWeight: 'bold' },
404
- { tag: highlight.tags.moduleKeyword, color: darkMagenta, fontWeight: 'bold' },
405
- // Names and variables
406
- { tag: [highlight.tags.name, highlight.tags.deleted, highlight.tags.character, highlight.tags.macroName], color: base04 },
407
- { tag: [highlight.tags.variableName], color: base04 },
408
- { tag: [highlight.tags.propertyName], color: darkBlue, fontStyle: 'normal' },
409
- // Classes and types
410
- { tag: [highlight.tags.typeName], color: darkCyan },
411
- { tag: [highlight.tags.className], color: darkCyan, fontStyle: 'italic' },
412
- { tag: [highlight.tags.namespace], color: darkOrange, fontStyle: 'italic' },
413
- // Operators and punctuation
414
- { tag: [highlight.tags.operator, highlight.tags.operatorKeyword], color: darkCyan },
415
- { tag: [highlight.tags.bracket], color: darkBrown },
416
- { tag: [highlight.tags.brace], color: darkCyan },
417
- { tag: [highlight.tags.punctuation], color: base04 },
418
- // Functions and parameters
419
- { tag: [highlight.tags.function(highlight.tags.variableName), highlight.tags.labelName], color: darkBlue },
420
- { tag: [highlight.tags.definition(highlight.tags.function(highlight.tags.variableName))], color: darkBlue },
421
- { tag: [highlight.tags.definition(highlight.tags.variableName)], color: darkOrange },
422
- // Constants and literals
423
- { tag: highlight.tags.number, color: darkOrange },
424
- { tag: highlight.tags.changed, color: darkOrange },
425
- { tag: highlight.tags.annotation, color: darkRed, fontStyle: 'italic' },
426
- { tag: highlight.tags.modifier, color: darkPurple, fontStyle: 'italic' },
427
- { tag: highlight.tags.self, color: darkRed },
428
- { tag: [highlight.tags.color, highlight.tags.constant(highlight.tags.name), highlight.tags.standard(highlight.tags.name)], color: darkOrange },
429
- { tag: [highlight.tags.atom, highlight.tags.bool, highlight.tags.special(highlight.tags.variableName)], color: darkOrange },
430
- // Strings and regex
431
- { tag: [highlight.tags.processingInstruction, highlight.tags.inserted], color: darkGreen },
432
- { tag: [highlight.tags.special(highlight.tags.string), highlight.tags.regexp], color: darkMagenta },
433
- { tag: highlight.tags.string, color: darkGreen },
434
- // Punctuation and structure
435
- { tag: highlight.tags.definition(highlight.tags.typeName), color: darkCyan, fontWeight: 'bold' },
436
- { tag: [highlight.tags.definition(highlight.tags.name), highlight.tags.separator], color: darkBlue },
437
- // Comments and documentation
438
- { tag: highlight.tags.meta, color: base02 },
439
- { tag: highlight.tags.comment, fontStyle: 'italic', color: base02 },
440
- { tag: highlight.tags.docComment, fontStyle: 'italic', color: base02 },
441
- // HTML/XML elements
442
- { tag: [highlight.tags.tagName], color: darkMagenta },
443
- { tag: [highlight.tags.attributeName], color: darkCyan },
444
- // Markdown and text formatting
445
- { tag: [highlight.tags.heading], fontWeight: 'bold', color: darkMagenta },
446
- { tag: [highlight.tags.strong], fontWeight: 'bold', color: darkOrange },
447
- { tag: [highlight.tags.emphasis], fontStyle: 'italic', color: darkMagenta },
448
- // Links and URLs
449
- {
450
- tag: [highlight.tags.link],
451
- color: visitedLinkColor,
452
- fontWeight: '500',
453
- textDecoration: 'underline',
454
- textUnderlinePosition: 'under',
455
- },
456
- {
457
- tag: [highlight.tags.url],
458
- color: linkColor,
459
- textDecoration: 'underline',
460
- textUnderlineOffset: '2px',
461
- },
462
- // Special states
463
- {
464
- tag: [highlight.tags.invalid],
465
- color: darkRed,
466
- textDecoration: 'underline wavy',
467
- borderBottom: `2px wavy ${darkRed}`,
468
- },
469
- { tag: [highlight.tags.strikethrough], color: darkRed, textDecoration: 'line-through' },
470
- // Enhanced syntax highlighting
471
- { tag: highlight.tags.constant(highlight.tags.name), color: darkOrange },
472
- { tag: highlight.tags.deleted, color: darkRed },
473
- { tag: highlight.tags.squareBracket, color: darkBrown },
474
- { tag: highlight.tags.angleBracket, color: darkCyan },
475
- // Additional specific styles
476
- { tag: highlight.tags.monospace, color: darkBlue, fontStyle: 'italic' },
477
- { tag: [highlight.tags.contentSeparator], color: darkPurple },
478
- { tag: highlight.tags.quote, color: darkPurple },
479
- { tag: highlight.tags.integer, color: darkOrange },
480
- { tag: highlight.tags.float, color: darkOrange },
481
- { tag: highlight.tags.null, color: darkOrange },
482
- { tag: highlight.tags.attributeValue, color: darkGreen },
483
- { tag: highlight.tags.escape, color: darkGreen },
484
- { tag: highlight.tags.paren, color: darkBrown },
485
- { tag: highlight.tags.lineComment, color: base02, fontStyle: 'italic' },
486
- { tag: highlight.tags.blockComment, color: base02, fontStyle: 'italic' },
487
- { tag: highlight.tags.definitionKeyword, color: darkMagenta },
488
- { tag: highlight.tags.arithmeticOperator, color: darkCyan },
489
- { tag: highlight.tags.logicOperator, color: darkCyan },
490
- { tag: highlight.tags.compareOperator, color: darkCyan },
491
- { tag: highlight.tags.bitwiseOperator, color: darkCyan },
492
- { tag: highlight.tags.updateOperator, color: darkCyan },
493
- { tag: highlight.tags.derefOperator, color: darkCyan },
494
- { tag: highlight.tags.local(highlight.tags.variableName), color: darkOrange },
495
- { tag: highlight.tags.list, color: darkMagenta },
496
- { tag: highlight.tags.unit, color: darkOrange },
497
- { tag: highlight.tags.heading1, color: darkMagenta },
498
- { tag: highlight.tags.heading2, color: darkMagenta },
499
- { tag: highlight.tags.heading3, color: darkMagenta },
500
- { tag: highlight.tags.heading4, color: darkMagenta },
501
- { tag: highlight.tags.heading5, color: darkMagenta },
502
- { tag: highlight.tags.heading6, color: darkMagenta },
503
- ]);
781
+ });
504
782
  /**
505
783
  * Combined High Contrast Light theme extension
506
784
  */
507
- const highContrastLight = [highContrastLightTheme, language.syntaxHighlighting(highContrastLightHighlightStyle)];
785
+ const highContrastLight = theme.extension;
508
786
  /**
509
787
  * High Contrast Light merge revert styles configuration
510
788
  */
511
- const highContrastLightMergeStyles = {
512
- backgroundColor: lightBackground,
513
- borderColor: darkBlue,
514
- buttonColor: darkBlue,
515
- buttonHoverColor: darkOrange,
516
- };
789
+ const highContrastLightMergeStyles = theme.mergeStyles;
517
790
 
518
791
  exports.applyMergeRevertStyles = applyMergeRevertStyles;
519
792
  exports.highContrastLight = highContrastLight;