@fsegurai/codemirror-theme-basic-light 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 +662 -383
  3. package/dist/index.js +662 -383
  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 color palette for Basic Light theme
109
596
  * ----------------------------------------
@@ -113,418 +600,210 @@ function applyMergeRevertStyles(styles) {
113
600
  const base00 = '#1c2434', // deep navy - primary text (darker for better contrast)
114
601
  base01 = '#2d3748', // dark slate - secondary text, cursor
115
602
  base02 = '#4a5568', // medium slate - gutter text
116
- base03 = '#718096', // steel blue - comments, panel text
603
+ base03 = '#57657a', // steel blue - comments, panel text
117
604
  // Background shades
118
605
  base04 = '#edf2f750', // very light blue w/transparency - active line gutter
119
606
  base05 = '#f7fafc', // off-white - tooltip background
120
607
  base06 = '#f0f4f8', // snow-white - gutter background
121
608
  // Primary accent colors (cool tones)
122
- base07 = '#0c7792', // teal - links, braces (more saturated)
609
+ base07 = '#0e6d86', // teal - links, braces (more saturated)
123
610
  base08 = '#0369a1', // azure blue - numbers, constants (deeper)
124
- base09 = '#2b6cb0', // royal blue - variables, parameters
611
+ base09 = '#2566aa', // royal blue - variables, parameters
125
612
  base0A = '#1a365d', // deep navy - keywords, headings
126
613
  // Secondary accent colors (warm and complementary)
127
- base0B = '#c53030', // red - square brackets (more vibrant)
128
- base0C = '#dd6b20', // orange - strings (warmer, more vibrant)
129
- base0D = '#d69e2e', // amber - class names (more saturated)
130
- base0E = '#2f855a', // green - operators (deeper, richer)
131
- base0F = '#805ad5'; // purple - tag names (more vibrant)
614
+ base0B = '#be282a', // red - square brackets (more vibrant)
615
+ base0C = '#a24b11', // orange - strings (warmer, more vibrant)
616
+ base0D = '#845d06', // amber - class names (more saturated)
617
+ base0E = '#167249', // green - operators (deeper, richer)
618
+ base0F = '#734bc5'; // purple - tag names (more vibrant)
132
619
  // UI-specific colors
133
- const invalid = '#e53e3e', // bright red - errors (more visible)
134
- darkBackground = base06, // panel background
620
+ const invalid = '#c61724', // bright red - errors (more visible)
135
621
  highlightBackground = '#ebf4ff40', // active line highlight (subtle blue)
136
622
  background = '#ffffff', // editor background
137
- tooltipBackground = base05, // tooltip background
138
623
  selection = '#90cdf480', // selection background (clearer blue)
139
624
  selectionMatch = '#63b3ed40', // selection match highlight
140
- cursor = base01, // cursor color
141
- activeBracketBg = '#0c779220', // active bracket background (transparent teal)
142
- activeBracketBorder = base09;
625
+ activeBracketBg = '#0c779220'; // active bracket background (transparent teal)
143
626
  // Diff/merge specific colors
144
627
  const addedBackground = '#e6ffec60', // Light green with transparency for insertions
145
628
  removedBackground = '#ffebe9a0', // Light red with transparency for deletions
146
629
  addedText = '#24783b', // Dark green for added text
147
630
  removedText = '#cf222e'; // Dark red for removed text
148
- /**
149
- * Enhanced editor theme styles for Basic Light
150
- */
151
- const basicLightTheme = /*@__PURE__*/EditorView.theme({
152
- // Base editor styles
153
- '&': {
154
- color: base00,
155
- backgroundColor: background,
156
- fontSize: generalContent.fontSize,
157
- fontFamily: generalContent.fontFamily,
158
- },
159
- // Content and cursor
160
- '.cm-content': {
161
- caretColor: cursor,
162
- lineHeight: generalContent.lineHeight,
163
- },
164
- '.cm-cursor, .cm-dropCursor': {
165
- borderLeftColor: cursor,
166
- borderLeftWidth: generalCursor.borderLeftWidth,
167
- },
168
- '.cm-fat-cursor': {
169
- backgroundColor: `${cursor}99`,
170
- color: background,
171
- },
172
- // Selection
173
- '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
174
- backgroundColor: selection,
175
- color: base0A,
176
- },
177
- // Make sure selection appears above active line
178
- '.cm-selectionLayer': {
179
- zIndex: 100,
180
- },
181
- // Search functionality
182
- '.cm-searchMatch': {
183
- backgroundColor: '#63b3ed40',
184
- outline: `1px solid ${base09}`,
185
- color: base00,
186
- borderRadius: generalSearchField.borderRadius,
187
- '& span': {
188
- color: base00,
631
+ const theme = /*@__PURE__*/defineTheme({
632
+ dark: false,
633
+ ui: {
634
+ background: background,
635
+ foreground: base00,
636
+ border: 'none',
637
+ cursor: base01,
638
+ cursorWidth: '2px',
639
+ cursorShadow: 'none',
640
+ fatCursor: { background: `${base01}99`, border: 'none' },
641
+ selection: selection,
642
+ selectionInactive: selection,
643
+ selectionForeground: base0A,
644
+ selectionOutline: 'none',
645
+ activeLine: highlightBackground,
646
+ activeLineBorder: { left: 'none', right: 'none' },
647
+ ghostText: base03,
648
+ ghostTextOpacity: '0.5',
649
+ specialChar: invalid,
650
+ focusRing: `0 0 0 2px ${background}, 0 0 0 4px ${base09}`,
651
+ outlineWidth: '1px',
652
+ searchMatch: {
653
+ background: selectionMatch,
654
+ outline: base09,
655
+ foreground: base00,
656
+ shadow: 'none',
657
+ selectedBackground: '#63b3ed70',
658
+ selectedForeground: base00,
659
+ selectedOutline: `1px solid ${base09}`,
660
+ selectedShadow: 'none',
189
661
  },
190
- },
191
- '.cm-searchMatch.cm-searchMatch-selected': {
192
- backgroundColor: '#63b3ed70',
193
- color: base00,
194
- padding: generalSearchField.padding,
195
- '& span': {
196
- color: base00,
662
+ selectionMatch: { background: selectionMatch, outline: `${base09}30` },
663
+ matchingBracket: { background: activeBracketBg, outline: base09, shadow: 'none' },
664
+ nonMatchingBracket: { background: `${invalid}20`, outline: invalid },
665
+ panel: {
666
+ background: base06,
667
+ foreground: base03,
668
+ border: '#e2e8f0',
669
+ borderWidth: '1px',
670
+ outline: 'none',
671
+ shadow: 'none',
672
+ buttonBackground: base06,
673
+ buttonForeground: base02,
674
+ buttonBorder: 'none',
675
+ buttonHoverBackground: '#e2e8f0',
676
+ buttonHoverForeground: base02,
677
+ buttonHoverBorder: 'none',
678
+ buttonHoverShadow: 'none',
679
+ inputBackground: background,
680
+ inputBorder: '1px solid #e2e8f0',
197
681
  },
198
- },
199
- '.cm-search.cm-panel.cm-textfield': {
200
- color: base02,
201
- borderRadius: generalSearchField.borderRadius,
202
- padding: generalSearchField.padding,
203
- },
204
- // Panels
205
- '.cm-panels': {
206
- backgroundColor: darkBackground,
207
- color: base03,
208
- borderRadius: '4px',
209
- },
210
- '.cm-panels.cm-panels-top': {
211
- borderBottom: '1px solid #e2e8f0',
212
- },
213
- '.cm-panels.cm-panels-bottom': {
214
- borderTop: '1px solid #e2e8f0',
215
- },
216
- '.cm-panel button': {
217
- backgroundColor: darkBackground,
218
- color: base02,
219
- border: generalPanel.border,
220
- borderRadius: generalPanel.borderRadius,
221
- padding: generalPanel.padding,
222
- },
223
- '.cm-panel button:hover': {
224
- backgroundColor: '#e2e8f0',
225
- },
226
- // Line highlighting
227
- '.cm-activeLine': {
228
- backgroundColor: highlightBackground,
229
- borderRadius: generalLine.borderRadius,
230
- zIndex: 1,
231
- },
232
- // Gutters
233
- '.cm-gutters': {
234
- backgroundColor: base06,
235
- color: base02,
236
- border: generalGutter.border,
237
- borderRight: '1px solid #e2e8f0',
238
- paddingRight: generalGutter.paddingRight,
239
- },
240
- '.cm-activeLineGutter': {
241
- backgroundColor: base04,
242
- color: base00,
243
- fontWeight: generalGutter.fontWeight,
244
- },
245
- '.cm-lineNumbers': {
246
- fontSize: generalGutter.fontSize,
247
- lineHeight: generalGutter.lineHeight,
248
- },
249
- '.cm-foldGutter': {
250
- fontSize: generalGutter.fontSize,
251
- lineHeight: generalGutter.lineHeight,
252
- },
253
- '.cm-foldGutter .cm-gutterElement': {
254
- color: base02,
255
- cursor: 'pointer',
256
- },
257
- '.cm-foldGutter .cm-gutterElement:hover': {
258
- color: base00,
259
- },
260
- // Diff/Merge View Styles
261
- // Inserted/Added Content
262
- '.cm-insertedLine': {
263
- textDecoration: generalDiff.insertedTextDecoration,
264
- backgroundColor: addedBackground,
265
- color: addedText,
266
- padding: generalDiff.insertedLinePadding,
267
- borderRadius: generalDiff.borderRadius,
268
- },
269
- 'ins.cm-insertedLine, ins.cm-insertedLine:not(:has(.cm-changedText))': {
270
- textDecoration: generalDiff.insertedTextDecoration,
271
- backgroundColor: `${addedBackground} !important`,
272
- color: addedText,
273
- padding: generalDiff.insertedLinePadding,
274
- borderRadius: generalDiff.borderRadius,
275
- border: `1px solid ${addedText}30`,
276
- },
277
- 'ins.cm-insertedLine .cm-changedText': {
278
- background: 'transparent !important',
279
- },
280
- // Deleted/Removed Content
281
- '.cm-deletedLine': {
282
- textDecoration: generalDiff.deletedTextDecoration,
283
- backgroundColor: removedBackground,
284
- color: removedText,
285
- padding: generalDiff.insertedLinePadding,
286
- borderRadius: generalDiff.borderRadius,
287
- },
288
- 'del.cm-deletedLine, del, del:not(:has(.cm-deletedText))': {
289
- textDecoration: generalDiff.deletedTextDecoration,
290
- backgroundColor: `${removedBackground} !important`,
291
- color: removedText,
292
- padding: generalDiff.insertedLinePadding,
293
- borderRadius: generalDiff.borderRadius,
294
- border: `1px solid ${removedText}30`,
295
- },
296
- 'del .cm-deletedText, del .cm-changedText': {
297
- background: 'transparent !important',
298
- },
299
- // Tooltips and autocomplete
300
- '.cm-tooltip': {
301
- backgroundColor: tooltipBackground,
302
- border: '1px solid #e2e8f0',
303
- borderRadius: generalTooltip.borderRadius,
304
- padding: generalTooltip.padding,
305
- boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
306
- },
307
- '.cm-tooltip-autocomplete': {
308
- '& > ul': {
309
- backgroundColor: tooltipBackground,
310
- border: 'none',
682
+ gutter: {
683
+ background: base06,
684
+ foreground: base02,
685
+ border: '#e2e8f0',
686
+ activeBackground: base04,
687
+ activeForeground: base00,
688
+ activeFontWeight: '500',
689
+ activeBorder: 'none',
690
+ foldHover: base00,
311
691
  },
312
- '& > ul > li': {
313
- padding: generalTooltip.padding,
314
- lineHeight: generalTooltip.lineHeight,
692
+ foldPlaceholder: { background: 'transparent', foreground: base03, border: `${base09}50`, borderStyle: 'dotted' },
693
+ tooltip: {
694
+ background: base05,
695
+ foreground: base00,
696
+ border: '#e2e8f0',
697
+ shadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
698
+ listBackground: base05,
699
+ listBorder: 'none',
700
+ hoverBackground: 'transparent',
701
+ selectedBackground: activeBracketBg,
702
+ selectedForeground: base00,
703
+ selectedBorder: 'none',
704
+ icon: base03,
705
+ detail: base03,
315
706
  },
316
- '& > ul > li[aria-selected]': {
317
- backgroundColor: '#0c779220',
318
- color: base00,
319
- borderRadius: generalTooltip.borderRadiusSelected,
707
+ diff: {
708
+ insertedBackground: addedBackground,
709
+ insertedForeground: addedText,
710
+ insertedBorder: `1px solid ${addedText}30`,
711
+ deletedBackground: removedBackground,
712
+ deletedForeground: removedText,
713
+ deletedBorder: `1px solid ${removedText}30`,
320
714
  },
321
- '& > ul > li > span.cm-completionIcon': {
322
- color: base03,
323
- paddingRight: generalTooltip.paddingRight,
715
+ diagnostic: {
716
+ error: invalid,
717
+ warning: base0D,
718
+ info: base07,
719
+ hint: base07,
720
+ errorBackground: 'transparent',
721
+ warningBackground: 'transparent',
722
+ infoBackground: 'transparent',
723
+ borderWidth: '3px',
724
+ underlineWidth: '2px',
324
725
  },
325
- '& > ul > li > span.cm-completionDetail': {
326
- color: base03,
327
- fontStyle: 'italic',
726
+ scrollbar: {
727
+ track: base06,
728
+ trackBorder: 'none',
729
+ thumb: '#cbd5e0',
730
+ thumbBorder: `3px solid ${base06}`,
731
+ thumbHover: '#a0aec0',
732
+ thumbHoverShadow: 'none',
328
733
  },
329
- },
330
- '.cm-tooltip .cm-tooltip-arrow:before': {
331
- borderTopColor: 'transparent',
332
- borderBottomColor: 'transparent',
333
- },
334
- '.cm-tooltip .cm-tooltip-arrow:after': {
335
- borderTopColor: tooltipBackground,
336
- borderBottomColor: tooltipBackground,
337
- },
338
- // Diagnostics styling
339
- '.cm-diagnostic': {
340
- '&-error': {
341
- borderLeft: `3px solid ${invalid}`,
734
+ merge: {
735
+ backgroundColor: base06,
736
+ borderColor: '#e2e8f0',
737
+ buttonColor: base02,
738
+ buttonHoverColor: '#e2e8f0',
342
739
  },
343
- '&-warning': {
344
- borderLeft: `3px solid ${base0D}`,
740
+ },
741
+ syntax: {
742
+ keyword: { color: base0A, fontWeight: 'bold' },
743
+ definitionKeyword: { color: base0A },
744
+ modifier: { color: base08, fontStyle: 'italic' },
745
+ angleBracket: { color: base0C },
746
+ squareBracket: { color: base0B },
747
+ functionDefinition: { color: base09 },
748
+ operator: { color: base0E },
749
+ punctuation: { color: base07 },
750
+ name: { color: base09 },
751
+ function: { color: base08 },
752
+ self: { color: base08 },
753
+ label: { color: base08 },
754
+ property: { color: base09, fontStyle: 'normal' },
755
+ type: { color: base0D },
756
+ typeDefinition: { color: base0D, fontWeight: 'bold' },
757
+ className: { color: base0D, fontStyle: 'italic' },
758
+ namespace: { color: base09, fontStyle: 'italic' },
759
+ tag: { color: base0F },
760
+ attribute: { color: base0D },
761
+ content: { color: base00 },
762
+ string: { color: base0C },
763
+ regexp: { color: base0B },
764
+ constantName: { color: base0A },
765
+ standardName: { color: base0A },
766
+ null: { color: base08 },
767
+ heading5: { color: base08 },
768
+ heading6: { color: base08 },
769
+ number: { color: base08 },
770
+ constant: { color: base0C },
771
+ comment: { fontStyle: 'italic', color: base03 },
772
+ meta: { color: base08 },
773
+ processingInstruction: { color: base07 },
774
+ annotation: { color: invalid, fontStyle: 'italic' },
775
+ heading: { fontWeight: 'bold', color: base08 },
776
+ list: { color: base08 },
777
+ quote: { color: base01 },
778
+ monospace: { color: base00 },
779
+ contentSeparator: { color: base0D },
780
+ link: {
781
+ color: base07,
782
+ fontWeight: '500',
783
+ textDecoration: 'underline',
784
+ textUnderlinePosition: 'under',
345
785
  },
346
- '&-info': {
347
- borderLeft: `3px solid ${base07}`,
786
+ url: { color: base0C, textDecoration: 'underline', textUnderlineOffset: '2px' },
787
+ emphasis: { fontStyle: 'italic', color: base0A },
788
+ strong: { fontWeight: 'bold', color: base09 },
789
+ strikethrough: { color: invalid, textDecoration: 'line-through' },
790
+ invalid: {
791
+ color: base00,
792
+ textDecoration: 'underline wavy',
793
+ borderBottom: `1px wavy ${invalid}`,
348
794
  },
795
+ inserted: { color: base07 },
796
+ deleted: { color: invalid },
797
+ changed: { color: base08 },
349
798
  },
350
- '.cm-lintPoint-error': {
351
- borderBottom: `2px wavy ${invalid}`,
352
- },
353
- '.cm-lintPoint-warning': {
354
- borderBottom: `2px wavy ${base0D}`,
355
- },
356
- // Matching brackets
357
- '.cm-matchingBracket': {
358
- backgroundColor: activeBracketBg,
359
- outline: `1px solid ${activeBracketBorder}`,
360
- borderRadius: generalMatching.borderRadius,
361
- },
362
- '.cm-nonmatchingBracket': {
363
- backgroundColor: `${invalid}20`,
364
- outline: `1px solid ${invalid}`,
365
- borderRadius: generalMatching.borderRadius,
366
- },
367
- // Selection matches
368
- '.cm-selectionMatch': {
369
- backgroundColor: selectionMatch,
370
- outline: `1px solid ${base09}30`,
371
- borderRadius: generalMatching.borderRadius,
372
- },
373
- // Fold placeholder
374
- '.cm-foldPlaceholder': {
375
- backgroundColor: 'transparent',
376
- color: base03,
377
- border: `1px dotted ${base09}50`,
378
- borderRadius: generalPlaceholder.borderRadius,
379
- padding: generalPlaceholder.padding,
380
- margin: generalPlaceholder.margin,
381
- },
382
- // Focus outline
383
- '&.cm-focused': {
384
- outline: 'none',
385
- boxShadow: `0 0 0 2px ${background}, 0 0 0 3px ${base09}30`,
386
- },
387
- // Scrollbars
388
- '& .cm-scroller::-webkit-scrollbar': {
389
- width: generalScroller.width,
390
- height: generalScroller.height,
391
- },
392
- '& .cm-scroller::-webkit-scrollbar-track': {
393
- background: base06,
394
- },
395
- '& .cm-scroller::-webkit-scrollbar-thumb': {
396
- backgroundColor: '#cbd5e0',
397
- borderRadius: generalScroller.borderRadius,
398
- border: `3px solid ${base06}`,
399
- },
400
- '& .cm-scroller::-webkit-scrollbar-thumb:hover': {
401
- backgroundColor: '#a0aec0',
402
- },
403
- // Ghost text
404
- '.cm-ghostText': {
405
- opacity: '0.5',
406
- color: '#718096',
407
- },
408
- }, { dark: false });
409
- /**
410
- * Enhanced syntax highlighting for the Basic Light theme
411
- */
412
- const basicLightHighlightStyle = /*@__PURE__*/HighlightStyle.define([
413
- // Keywords and control flow
414
- { tag: tags.keyword, color: base0A, fontWeight: 'bold' },
415
- { tag: tags.controlKeyword, color: base0A, fontWeight: 'bold' },
416
- { tag: tags.moduleKeyword, color: base0A, fontWeight: 'bold' },
417
- // Names and variables
418
- { tag: [tags.name, tags.deleted, tags.character, tags.macroName], color: base09 },
419
- { tag: [tags.variableName], color: base09 },
420
- { tag: [tags.propertyName], color: base09, fontStyle: 'normal' },
421
- // Classes and types
422
- { tag: [tags.typeName], color: base0D },
423
- { tag: [tags.className], color: base0D, fontStyle: 'italic' },
424
- { tag: [tags.namespace], color: base09, fontStyle: 'italic' },
425
- // Operators and punctuation
426
- { tag: [tags.operator, tags.operatorKeyword], color: base0E },
427
- { tag: [tags.bracket], color: base07 },
428
- { tag: [tags.brace], color: base07 },
429
- { tag: [tags.punctuation], color: base07 },
430
- // Functions and parameters
431
- { tag: [/*@__PURE__*/tags.function(tags.variableName), tags.labelName], color: base08 },
432
- { tag: [/*@__PURE__*/tags.definition(tags.variableName)], color: base09 },
433
- // Constants and literals
434
- { tag: tags.number, color: base08 },
435
- { tag: tags.changed, color: base08 },
436
- { tag: tags.annotation, color: invalid, fontStyle: 'italic' },
437
- { tag: tags.modifier, color: base08, fontStyle: 'italic' },
438
- { tag: tags.self, color: base08 },
439
- { tag: [tags.color, /*@__PURE__*/tags.constant(tags.name), /*@__PURE__*/tags.standard(tags.name)], color: base0A },
440
- { tag: [tags.atom, tags.bool, /*@__PURE__*/tags.special(tags.variableName)], color: base0C },
441
- // Strings and regex
442
- { tag: [tags.processingInstruction, tags.inserted], color: base07 },
443
- { tag: [/*@__PURE__*/tags.special(tags.string), tags.regexp], color: base0B },
444
- { tag: tags.string, color: base0C },
445
- // Punctuation and structure
446
- { tag: /*@__PURE__*/tags.definition(tags.typeName), color: base0D, fontWeight: 'bold' },
447
- // Comments and documentation
448
- { tag: tags.meta, color: base08 },
449
- { tag: tags.comment, fontStyle: 'italic', color: base03 },
450
- { tag: tags.docComment, fontStyle: 'italic', color: base03 },
451
- // HTML/XML elements
452
- { tag: [tags.tagName], color: base0F },
453
- { tag: [tags.attributeName], color: base0D },
454
- // Markdown and text formatting
455
- { tag: [tags.heading], fontWeight: 'bold', color: base08 },
456
- { tag: [tags.strong], fontWeight: 'bold', color: base09 },
457
- { tag: [tags.emphasis], fontStyle: 'italic', color: base0A },
458
- // Links and URLs
459
- {
460
- tag: [tags.link],
461
- color: base07,
462
- fontWeight: '500',
463
- textDecoration: 'underline',
464
- textUnderlinePosition: 'under',
465
- },
466
- {
467
- tag: [tags.url],
468
- color: base0C,
469
- textDecoration: 'underline',
470
- textUnderlineOffset: '2px',
471
- },
472
- // Special states
473
- {
474
- tag: [tags.invalid],
475
- color: base00,
476
- textDecoration: 'underline wavy',
477
- borderBottom: `1px wavy ${invalid}`,
478
- },
479
- { tag: [tags.strikethrough], color: invalid, textDecoration: 'line-through' },
480
- // Enhanced syntax highlighting
481
- { tag: /*@__PURE__*/tags.constant(tags.name), color: base0A },
482
- { tag: tags.deleted, color: invalid },
483
- { tag: tags.squareBracket, color: base0B },
484
- { tag: tags.angleBracket, color: base0C },
485
- // Additional specific styles
486
- { tag: tags.heading1, fontWeight: 'bold', color: base08 },
487
- { tag: /*@__PURE__*/tags.special(tags.heading1), fontWeight: 'bold', color: base08 },
488
- {
489
- tag: [tags.heading2, tags.heading3, tags.heading4],
490
- fontWeight: 'bold',
491
- color: base08,
492
- },
493
- { tag: [tags.heading5, tags.heading6], color: base08 },
494
- { tag: tags.monospace, color: base00 },
495
- { tag: [tags.contentSeparator], color: base0D },
496
- { tag: tags.quote, color: base01 },
497
- { tag: tags.integer, color: base08 },
498
- { tag: tags.float, color: base08 },
499
- { tag: tags.null, color: base08 },
500
- { tag: tags.attributeValue, color: base0C },
501
- { tag: tags.escape, color: base0C },
502
- { tag: tags.paren, color: base07 },
503
- { tag: tags.lineComment, color: base03, fontStyle: 'italic' },
504
- { tag: tags.blockComment, color: base03, fontStyle: 'italic' },
505
- { tag: tags.definitionKeyword, color: base0A },
506
- { tag: tags.arithmeticOperator, color: base0E },
507
- { tag: tags.logicOperator, color: base0E },
508
- { tag: tags.compareOperator, color: base0E },
509
- { tag: tags.bitwiseOperator, color: base0E },
510
- { tag: tags.updateOperator, color: base0E },
511
- { tag: tags.derefOperator, color: base0E },
512
- { tag: /*@__PURE__*/tags.local(tags.variableName), color: base09 },
513
- { tag: tags.list, color: base08 },
514
- { tag: tags.unit, color: base08 },
515
- ]);
799
+ });
516
800
  /**
517
801
  * Combined Basic Light theme extension
518
802
  */
519
- const basicLight = [basicLightTheme, /*@__PURE__*/syntaxHighlighting(basicLightHighlightStyle)];
803
+ const basicLight = theme.extension;
520
804
  /**
521
805
  * Basic Light merge revert styles configuration
522
806
  */
523
- const basicLightMergeStyles = {
524
- backgroundColor: darkBackground,
525
- borderColor: '#e2e8f0',
526
- buttonColor: base02,
527
- buttonHoverColor: '#e2e8f0',
528
- };
807
+ const basicLightMergeStyles = theme.mergeStyles;
529
808
 
530
809
  export { applyMergeRevertStyles, basicLight, basicLightMergeStyles };