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