@fsegurai/codemirror-theme-abyss 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 +655 -354
  3. package/dist/index.js +655 -354
  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,10 +99,502 @@ 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
  // Base colors - Ocean depths
108
595
  const base00 = '#000c18', // - Background (deep ocean blue)
109
596
  base01 = '#a3c9e9', // - Foreground (lighter blue for enhanced readability)
110
- base02 = '#0e6299', // - Selection (more vibrant blue for better visibility)
597
+ base02 = '#032d4a', // - Selection (more vibrant blue for better visibility)
111
598
  base03 = '#b4a2f7', // - Gutter background (darker for contrast)
112
599
  base04 = '#e6d4a3', // - Cursor (warmer gold for better visibility)
113
600
  base05 = '#0066ff20', // - Active line (subtle blue tint)
@@ -126,372 +613,186 @@ base11 = '#66ecd4', // - URLs (brighter teal)
126
613
  // UI elements
127
614
  invalid = '#ff5370', darkBackground = '#0a1422', // Darker background for better contrast
128
615
  highlightBackground = '#0055ff15', tooltipBackground = '#05101d', // Darker tooltip for better contrast
129
- cursor = base04, selection = base02, activeBracketBg = '#0a5999b0', activeBracketBorder = base0F,
616
+ activeBracketBg = '#0a5999b0',
130
617
  // Diff/merge specific colors
131
618
  addedBackground = '#0e4e1d50', // Dark green with transparency for insertions
132
619
  removedBackground = '#78112240', // Dark red with transparency for deletions
133
- addedText = '#4ce660', // Bright green for added text (matching string color)
134
620
  removedText = '#ff6b7d'; // Bright red for removed text
135
- /**
136
- * Enhanced editor theme styles for Abyss
137
- */
138
- const abyssTheme = /*@__PURE__*/EditorView.theme({
139
- // Base editor styles
140
- '&': {
141
- color: base01,
142
- backgroundColor: base00,
143
- fontSize: generalContent.fontSize,
144
- fontFamily: generalContent.fontFamily,
145
- },
146
- // Content and cursor
147
- '.cm-content': {
148
- caretColor: cursor,
149
- lineHeight: generalContent.lineHeight,
150
- },
151
- '.cm-cursor, .cm-dropCursor': {
152
- borderLeftColor: cursor,
153
- borderLeftWidth: generalCursor.borderLeftWidth,
154
- },
155
- '.cm-fat-cursor': {
156
- backgroundColor: `${cursor}99`,
157
- color: base00,
158
- },
159
- // Selection
160
- '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
161
- backgroundColor: selection,
162
- },
163
- // Search functionality
164
- '.cm-searchMatch': {
165
- backgroundColor: '#155ab380',
166
- outline: `1px solid ${base08}`,
167
- borderRadius: generalSearchField.borderRadius,
168
- '& span': {
169
- color: base06,
621
+ const theme = /*@__PURE__*/defineTheme({
622
+ dark: true,
623
+ ui: {
624
+ background: base00,
625
+ foreground: base01,
626
+ border: 'none',
627
+ cursor: base04,
628
+ cursorWidth: '2px',
629
+ cursorShadow: 'none',
630
+ fatCursor: { background: `${base04}99`, border: 'none' },
631
+ selection: base02,
632
+ selectionInactive: base02,
633
+ selectionForeground: null,
634
+ selectionOutline: 'none',
635
+ activeLine: highlightBackground,
636
+ activeLineBorder: { left: 'none', right: 'none' },
637
+ ghostText: base06,
638
+ ghostTextOpacity: '0.5',
639
+ specialChar: invalid,
640
+ focusRing: `0 0 0 2px ${base05}, 0 0 0 4px ${base08}`,
641
+ outlineWidth: '1px',
642
+ searchMatch: {
643
+ background: '#155ab380',
644
+ outline: base08,
645
+ foreground: base06,
646
+ shadow: 'none',
647
+ selectedBackground: '#2a6ac080',
648
+ selectedForeground: base06,
649
+ selectedOutline: `1px solid ${base08}`,
650
+ selectedShadow: 'none',
170
651
  },
171
- },
172
- '.cm-searchMatch.cm-searchMatch-selected': {
173
- backgroundColor: '#2a6ac080',
174
- color: base06,
175
- padding: generalSearchField.padding,
176
- '& span': {
177
- color: base06,
178
- },
179
- },
180
- '.cm-search.cm-panel.cm-textfield': {
181
- color: base01,
182
- borderRadius: generalSearchField.borderRadius,
183
- padding: generalSearchField.padding,
184
- },
185
- // Panels
186
- '.cm-panels': {
187
- backgroundColor: darkBackground,
188
- color: base01,
189
- },
190
- '.cm-panels.cm-panels-top': {
191
- borderBottom: '2px solid #0a3555',
192
- },
193
- '.cm-panels.cm-panels-bottom': {
194
- borderTop: '2px solid #0a3555',
195
- },
196
- '.cm-panel button': {
197
- backgroundColor: darkBackground,
198
- color: base01,
199
- border: generalPanel.border,
200
- borderRadius: generalPanel.borderRadius,
201
- padding: generalPanel.padding,
202
- },
203
- '.cm-panel button:hover': {
204
- backgroundColor: '#0a3555',
205
- },
206
- // Line highlighting
207
- '.cm-activeLine': {
208
- backgroundColor: highlightBackground,
209
- borderRadius: generalLine.borderRadius,
210
- },
211
- // Gutters
212
- '.cm-gutters': {
213
- backgroundColor: darkBackground,
214
- color: '#5f7e97',
215
- border: generalGutter.border,
216
- paddingRight: generalGutter.paddingRight,
217
- },
218
- '.cm-activeLineGutter': {
219
- backgroundColor: highlightBackground,
220
- color: base01,
221
- fontWeight: generalGutter.fontWeight,
222
- },
223
- '.cm-lineNumbers': {
224
- fontSize: generalGutter.fontSize,
225
- lineHeight: generalGutter.lineHeight,
226
- },
227
- '.cm-foldGutter': {
228
- fontSize: generalGutter.fontSize,
229
- lineHeight: generalGutter.lineHeight,
230
- },
231
- '.cm-foldGutter .cm-gutterElement': {
232
- color: '#5f7e97',
233
- cursor: 'pointer',
234
- },
235
- '.cm-foldGutter .cm-gutterElement:hover': {
236
- color: base01,
237
- },
238
- // Diff/Merge View Styles
239
- // Inserted/Added Content
240
- '.cm-insertedLine': {
241
- textDecoration: generalDiff.insertedTextDecoration,
242
- backgroundColor: addedBackground,
243
- color: addedText,
244
- padding: generalDiff.insertedLinePadding,
245
- borderRadius: generalDiff.borderRadius,
246
- },
247
- 'ins.cm-insertedLine, ins.cm-insertedLine:not(:has(.cm-changedText))': {
248
- textDecoration: generalDiff.insertedTextDecoration,
249
- backgroundColor: `${addedBackground} !important`,
250
- color: addedText,
251
- padding: generalDiff.insertedLinePadding,
252
- borderRadius: generalDiff.borderRadius,
253
- border: `1px solid ${addedText}40`,
254
- },
255
- 'ins.cm-insertedLine .cm-changedText': {
256
- background: 'transparent !important',
257
- },
258
- // Deleted/Removed Content
259
- '.cm-deletedLine': {
260
- textDecoration: generalDiff.deletedTextDecoration,
261
- backgroundColor: removedBackground,
262
- color: removedText,
263
- padding: generalDiff.insertedLinePadding,
264
- borderRadius: generalDiff.borderRadius,
265
- },
266
- 'del.cm-deletedLine, del, del:not(:has(.cm-deletedText))': {
267
- textDecoration: generalDiff.deletedTextDecoration,
268
- backgroundColor: `${removedBackground} !important`,
269
- color: removedText,
270
- padding: generalDiff.insertedLinePadding,
271
- borderRadius: generalDiff.borderRadius,
272
- border: `1px solid ${removedText}40`,
273
- },
274
- 'del .cm-deletedText, del .cm-changedText': {
275
- background: 'transparent !important',
276
- },
277
- // Tooltips and autocomplete
278
- '.cm-tooltip': {
279
- backgroundColor: tooltipBackground,
280
- border: '1px solid #084671',
281
- borderRadius: generalTooltip.borderRadius,
282
- padding: generalTooltip.padding,
283
- boxShadow: '0 2px 8px rgba(0, 0, 0, 0.5)',
284
- },
285
- '.cm-tooltip-autocomplete': {
286
- '& > ul > li': {
287
- padding: generalTooltip.padding,
288
- lineHeight: generalTooltip.lineHeight,
652
+ selectionMatch: { background: '#155ab340', outline: base08 },
653
+ matchingBracket: { background: activeBracketBg, outline: base0F, shadow: 'none' },
654
+ nonMatchingBracket: { background: '#780e1e80', outline: invalid },
655
+ panel: {
656
+ background: darkBackground,
657
+ foreground: base01,
658
+ border: '#0a3555',
659
+ borderWidth: '2px',
660
+ outline: 'none',
661
+ shadow: 'none',
662
+ buttonBackground: darkBackground,
663
+ buttonForeground: base01,
664
+ buttonBorder: 'none',
665
+ buttonHoverBackground: '#0a3555',
666
+ buttonHoverForeground: base01,
667
+ buttonHoverBorder: 'none',
668
+ buttonHoverShadow: 'none',
669
+ inputBackground: base00,
670
+ inputBorder: '1px solid #0a3555',
289
671
  },
290
- '& > ul > li[aria-selected]': {
291
- backgroundColor: '#084671',
292
- color: '#e0edff',
293
- borderRadius: generalTooltip.borderRadiusSelected,
672
+ gutter: {
673
+ background: darkBackground,
674
+ foreground: '#62829b',
675
+ activeBackground: highlightBackground,
676
+ activeForeground: base01,
677
+ activeFontWeight: '500',
678
+ activeBorder: 'none',
679
+ foldHover: base01,
680
+ border: '#0a3555',
294
681
  },
295
- '& > ul > li > span.cm-completionIcon': {
296
- color: '#5f7e97',
297
- paddingRight: generalTooltip.paddingRight,
682
+ foldPlaceholder: { background: 'transparent', foreground: '#62829b', border: base0F, borderStyle: 'dotted' },
683
+ tooltip: {
684
+ background: tooltipBackground,
685
+ foreground: base01,
686
+ border: '#084671',
687
+ shadow: '0 2px 8px rgba(0, 0, 0, 0.5)',
688
+ selectedBackground: '#084671',
689
+ selectedForeground: '#e0edff',
690
+ selectedBorder: 'none',
691
+ icon: '#62829b',
692
+ detail: '#62829b',
693
+ listBackground: tooltipBackground,
694
+ listBorder: 'none',
695
+ hoverBackground: 'transparent',
298
696
  },
299
- '& > ul > li > span.cm-completionDetail': {
300
- color: '#5f7e97',
301
- fontStyle: 'italic',
697
+ diff: {
698
+ insertedBackground: addedBackground,
699
+ insertedForeground: base0A,
700
+ insertedBorder: `1px solid ${base0A}40`,
701
+ deletedBackground: removedBackground,
702
+ deletedForeground: removedText,
703
+ deletedBorder: `1px solid ${removedText}40`,
302
704
  },
303
- },
304
- '.cm-tooltip .cm-tooltip-arrow:before': {
305
- borderTopColor: 'transparent',
306
- borderBottomColor: 'transparent',
307
- },
308
- '.cm-tooltip .cm-tooltip-arrow:after': {
309
- borderTopColor: tooltipBackground,
310
- borderBottomColor: tooltipBackground,
311
- },
312
- // Diagnostics styling
313
- '.cm-diagnostic': {
314
- '&-error': {
315
- borderLeft: `3px solid ${invalid}`,
705
+ diagnostic: {
706
+ error: invalid,
707
+ warning: base0A,
708
+ info: base0B,
709
+ hint: base0B,
710
+ errorBackground: 'transparent',
711
+ warningBackground: 'transparent',
712
+ infoBackground: 'transparent',
713
+ borderWidth: '3px',
714
+ underlineWidth: '2px',
316
715
  },
317
- '&-warning': {
318
- borderLeft: `3px solid ${base0A}`,
716
+ scrollbar: {
717
+ track: darkBackground,
718
+ trackBorder: 'none',
719
+ thumb: '#62829b',
720
+ thumbBorder: `3px solid ${darkBackground}`,
721
+ thumbHover: '#4cc9ff',
722
+ thumbHoverShadow: 'none',
319
723
  },
320
- '&-info': {
321
- borderLeft: `3px solid ${base0B}`,
724
+ merge: {
725
+ backgroundColor: darkBackground,
726
+ borderColor: '#084671',
727
+ buttonColor: base01,
728
+ buttonHoverColor: '#0a3555',
322
729
  },
323
730
  },
324
- '.cm-lintPoint-error': {
325
- borderBottom: `2px wavy ${invalid}`,
326
- },
327
- '.cm-lintPoint-warning': {
328
- borderBottom: `2px wavy ${base0A}`,
329
- },
330
- // Matching brackets
331
- '.cm-matchingBracket': {
332
- backgroundColor: activeBracketBg,
333
- outline: `1px solid ${activeBracketBorder}`,
334
- borderRadius: generalMatching.borderRadius,
335
- },
336
- '.cm-nonmatchingBracket': {
337
- backgroundColor: '#780e1e80',
338
- outline: `1px solid ${invalid}`,
339
- borderRadius: generalMatching.borderRadius,
340
- },
341
- // Selection matches
342
- '.cm-selectionMatch': {
343
- backgroundColor: '#155ab340',
344
- outline: `1px solid ${base08}`,
345
- borderRadius: generalMatching.borderRadius,
346
- },
347
- // Fold placeholder
348
- '.cm-foldPlaceholder': {
349
- backgroundColor: 'transparent',
350
- color: '#5f7e97',
351
- fontStyle: 'italic',
352
- border: `1px dotted ${activeBracketBorder}`,
353
- borderRadius: generalPlaceholder.borderRadius,
354
- padding: generalPlaceholder.padding,
355
- margin: generalPlaceholder.margin,
356
- },
357
- // Focus outline
358
- '&.cm-focused': {
359
- outline: 'none',
360
- boxShadow: `0 0 0 2px ${base05}, 0 0 0 4px ${base00}`,
361
- },
362
- // Scrollbars
363
- '& .cm-scroller::-webkit-scrollbar': {
364
- width: generalScroller.width,
365
- height: generalScroller.height,
366
- },
367
- '& .cm-scroller::-webkit-scrollbar-track': {
368
- background: darkBackground,
369
- },
370
- '& .cm-scroller::-webkit-scrollbar-thumb': {
371
- backgroundColor: '#5f7e97',
372
- borderRadius: generalScroller.borderRadius,
373
- border: `3px solid ${darkBackground}`,
374
- },
375
- '& .cm-scroller::-webkit-scrollbar-thumb:hover': {
376
- backgroundColor: '#4cc9ff',
377
- },
378
- // Ghost text
379
- '.cm-ghostText': {
380
- opacity: '0.5',
381
- color: '#ffffff',
382
- },
383
- }, { dark: true });
384
- /**
385
- * Enhanced syntax highlighting for the Abyss theme
386
- */
387
- const abyssHighlightStyle = /*@__PURE__*/HighlightStyle.define([
388
- // Keywords and control flow
389
- { tag: tags.keyword, color: base07, fontWeight: 'bold' },
390
- { tag: tags.controlKeyword, color: base0F, fontWeight: 'bold' },
391
- { tag: tags.moduleKeyword, color: base07, fontWeight: 'bold' },
392
- // Names and variables
393
- { tag: [tags.name, tags.deleted, tags.character, tags.macroName], color: base08 },
394
- { tag: [tags.variableName], color: '#7ab2ff' },
395
- { tag: [tags.propertyName], color: base0E, fontStyle: 'normal' },
396
- // Classes and types
397
- { tag: [tags.typeName], color: base03 },
398
- { tag: [tags.className], color: base0D, fontStyle: 'italic' },
399
- { tag: [tags.namespace], color: base0C, fontStyle: 'italic' },
400
- // Operators and punctuation - clearer blues
401
- { tag: [tags.operator, tags.operatorKeyword], color: base0E },
402
- { tag: [tags.bracket], color: base01 },
403
- { tag: [tags.brace], color: base01 },
404
- { tag: [tags.punctuation], color: base01 },
405
- // Functions and parameters
406
- { tag: [/*@__PURE__*/tags.function(tags.variableName), tags.labelName], color: base0B },
407
- { tag: [/*@__PURE__*/tags.definition(tags.variableName)], color: base0B },
408
- // Constants and literals
409
- { tag: tags.number, color: base0C },
410
- { tag: tags.changed, color: base0C },
411
- { tag: tags.annotation, color: base0C, fontStyle: 'italic' },
412
- { tag: tags.modifier, color: base0C, fontStyle: 'italic' },
413
- { tag: tags.self, color: base0C },
414
- { tag: [tags.color, /*@__PURE__*/tags.constant(tags.name), /*@__PURE__*/tags.standard(tags.name)], color: base0C },
415
- { tag: [tags.atom, tags.bool, /*@__PURE__*/tags.special(tags.variableName)], color: '#ff9e64' },
416
- // Strings and regex
417
- { tag: [tags.processingInstruction, tags.inserted], color: base0A },
418
- { tag: [/*@__PURE__*/tags.special(tags.string), tags.regexp], color: base0A },
419
- // Punctuation and structure
420
- { tag: /*@__PURE__*/tags.definition(tags.typeName), color: base0B, fontWeight: 'bold' },
421
- { tag: [tags.operator, tags.operatorKeyword], color: '#78b6ff' },
422
- { tag: [tags.bracket], color: '#8da0bf' },
423
- { tag: [tags.brace], color: '#8da0bf' },
424
- { tag: [tags.punctuation], color: '#8da0bf' },
425
- // Comments and documentation
426
- { tag: tags.meta, color: base09 },
427
- { tag: tags.comment, fontStyle: 'italic', color: base09 },
428
- { tag: tags.docComment, fontStyle: 'italic', color: base09 },
429
- // HTML/XML elements
430
- { tag: [tags.tagName], color: base0F },
431
- { tag: [tags.attributeName], color: '#ffd580' },
432
- // Markdown and text formatting
433
- { tag: [tags.heading], fontWeight: 'bold', color: base0E },
434
- { tag: [tags.strong], fontWeight: 'bold' },
435
- { tag: [tags.emphasis], fontStyle: 'italic' },
436
- // Links and URLs
437
- { tag: [tags.link], color: base10, fontWeight: '500' },
438
- {
439
- tag: [tags.url],
440
- color: base11,
441
- textDecoration: 'underline',
442
- textUnderlineOffset: '2px',
443
- },
444
- // Special states
445
- { tag: [tags.invalid], color: invalid, textDecoration: 'underline wavy' },
446
- { tag: [tags.strikethrough], color: invalid, textDecoration: 'line-through' },
447
- // Enhanced syntax highlighting
448
- { tag: /*@__PURE__*/tags.constant(tags.name), color: base0C },
449
- { tag: tags.controlKeyword, color: base07, fontWeight: 'bold' },
450
- { tag: tags.deleted, color: base08 },
451
- { tag: tags.labelName, color: base0B },
452
- { tag: tags.string, color: base0A },
453
- { tag: tags.integer, color: base0C },
454
- { tag: tags.float, color: base0C },
455
- { tag: tags.null, color: base0C },
456
- { tag: tags.attributeValue, color: base0A },
457
- { tag: tags.escape, color: base0A },
458
- { tag: tags.paren, color: base01 },
459
- { tag: tags.lineComment, color: base09, fontStyle: 'italic' },
460
- { tag: tags.blockComment, color: base09, fontStyle: 'italic' },
461
- { tag: tags.definitionKeyword, color: base07 },
462
- { tag: tags.arithmeticOperator, color: base0E },
463
- { tag: tags.logicOperator, color: base0E },
464
- { tag: tags.compareOperator, color: base0E },
465
- { tag: tags.bitwiseOperator, color: base0E },
466
- { tag: tags.updateOperator, color: base0E },
467
- { tag: tags.derefOperator, color: base0E },
468
- { tag: /*@__PURE__*/tags.local(tags.variableName), color: base0B },
469
- { tag: tags.contentSeparator, color: base0E },
470
- { tag: tags.list, color: base0E },
471
- { tag: tags.unit, color: base0C },
472
- { tag: tags.squareBracket, color: base01 },
473
- { tag: tags.angleBracket, color: base01 },
474
- { tag: tags.heading1, color: base0E },
475
- { tag: tags.heading2, color: base0E },
476
- { tag: tags.heading3, color: base0E },
477
- { tag: tags.heading4, color: base0E },
478
- { tag: tags.heading5, color: base0E },
479
- { tag: tags.heading6, color: base0E },
480
- { tag: tags.monospace, color: base0E },
481
- { tag: tags.quote, color: base0A },
482
- ]);
731
+ syntax: {
732
+ keyword: { color: base07, fontWeight: 'bold' },
733
+ definitionKeyword: { color: base07 },
734
+ operatorKeyword: { color: '#78b6ff' },
735
+ modifier: { color: base0C, fontStyle: 'italic' },
736
+ arithmeticOperator: { color: base0E },
737
+ logicOperator: { color: base0E },
738
+ compareOperator: { color: base0E },
739
+ bitwiseOperator: { color: base0E },
740
+ updateOperator: { color: base0E },
741
+ derefOperator: { color: base0E },
742
+ operator: { color: '#78b6ff' },
743
+ punctuation: { color: '#8da0bf' },
744
+ bracket: { color: '#8da0bf' },
745
+ paren: { color: base01 },
746
+ squareBracket: { color: base01 },
747
+ angleBracket: { color: base01 },
748
+ name: { color: base08 },
749
+ variable: { color: '#7ab2ff' },
750
+ localVariable: { color: base0B },
751
+ variableDefinition: { color: base0B },
752
+ nameDefinition: { color: base08 },
753
+ function: { color: base0B },
754
+ self: { color: base0C },
755
+ label: { color: base0B },
756
+ property: { color: base0E, fontStyle: 'normal' },
757
+ type: { color: base03 },
758
+ typeDefinition: { color: base0B, fontWeight: 'bold' },
759
+ className: { color: base0D, fontStyle: 'italic' },
760
+ namespace: { color: base0C, fontStyle: 'italic' },
761
+ tag: { color: base0F },
762
+ attribute: { color: '#ffd580' },
763
+ content: { color: base01 },
764
+ string: { color: base0A },
765
+ number: { color: base0C },
766
+ constant: { color: base0C },
767
+ comment: { fontStyle: 'italic', color: base09 },
768
+ meta: { color: base09 },
769
+ processingInstruction: { color: base0A },
770
+ atom: { color: '#ff9e64' },
771
+ specialVariable: { color: '#ff9e64' },
772
+ annotation: { color: base0C, fontStyle: 'italic' },
773
+ heading: { fontWeight: 'bold', color: base0E },
774
+ headingLevel: { color: base0E },
775
+ list: { color: base0E },
776
+ monospace: { color: base0E },
777
+ contentSeparator: { color: base0E },
778
+ link: { color: base10, fontWeight: '500' },
779
+ url: { color: base11, textDecoration: 'underline', textUnderlineOffset: '2px' },
780
+ emphasis: { fontStyle: 'italic' },
781
+ strong: { fontWeight: 'bold' },
782
+ strikethrough: { color: invalid, textDecoration: 'line-through' },
783
+ invalid: { color: invalid, textDecoration: 'underline wavy' },
784
+ inserted: { color: base0A },
785
+ deleted: { color: base08 },
786
+ changed: { color: base0C },
787
+ },
788
+ });
483
789
  /**
484
790
  * Combined Abyss theme extension
485
791
  */
486
- const abyss = [abyssTheme, /*@__PURE__*/syntaxHighlighting(abyssHighlightStyle)];
792
+ const abyss = theme.extension;
487
793
  /**
488
794
  * Abyss merge revert styles configuration
489
795
  */
490
- const abyssMergeStyles = {
491
- backgroundColor: darkBackground,
492
- borderColor: '#084671',
493
- buttonColor: base01,
494
- buttonHoverColor: '#0a3555',
495
- };
796
+ const abyssMergeStyles = theme.mergeStyles;
496
797
 
497
798
  export { abyss, abyssMergeStyles, applyMergeRevertStyles };