From 2aacb6f71f3392846d83fc2893f9c433fd6a4098 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 7 Dec 2022 00:27:25 +0800 Subject: [PATCH] feat(github): add githubDarkInit/githubLightInit method to github theme. --- themes/github/README.md | 24 ++++++++ themes/github/src/index.ts | 122 +++++++++++++++++++++---------------- 2 files changed, 92 insertions(+), 54 deletions(-) diff --git a/themes/github/README.md b/themes/github/README.md index 10d78cc69..1f6af7418 100644 --- a/themes/github/README.md +++ b/themes/github/README.md @@ -20,6 +20,30 @@ npm install @uiw/codemirror-theme-github --save ``` +```jsx +import { githubLight, githubLightInit, githubDark, githubDarkInit } from '@uiw/codemirror-theme-github'; + + + +``` + +## API + +```tsx +import { CreateThemeOptions } from '@uiw/codemirror-themes'; +export declare const githubLightInit: (options?: CreateThemeOptions) => import('@codemirror/state').Extension; +export declare const githubLight: import('@codemirror/state').Extension; +export declare const githubDarkInit: (options?: CreateThemeOptions) => import('@codemirror/state').Extension; +export declare const githubDark: import('@codemirror/state').Extension; +``` + ## Usage ```jsx diff --git a/themes/github/src/index.ts b/themes/github/src/index.ts index e40df4f2b..501f1f26f 100644 --- a/themes/github/src/index.ts +++ b/themes/github/src/index.ts @@ -2,59 +2,73 @@ * @name github */ import { tags as t } from '@lezer/highlight'; -import { createTheme } from '@uiw/codemirror-themes'; +import { createTheme, CreateThemeOptions } from '@uiw/codemirror-themes'; -export const githubLight = createTheme({ - theme: 'light', - settings: { - background: '#fff', - foreground: '#24292e', - selection: '#BBDFFF', - selectionMatch: '#BBDFFF', - gutterBackground: '#fff', - gutterForeground: '#6e7781', - }, - styles: [ - { tag: [t.comment, t.bracket], color: '#6a737d' }, - { tag: [t.className, t.propertyName], color: '#6f42c1' }, - { tag: [t.variableName, t.attributeName, t.number, t.operator], color: '#005cc5' }, - { tag: [t.keyword, t.typeName, t.typeOperator, t.typeName], color: '#d73a49' }, - { tag: [t.string, t.meta, t.regexp], color: '#032f62' }, - { tag: [t.name, t.quote], color: '#22863a' }, - { tag: [t.heading], color: '#24292e', fontWeight: 'bold' }, - { tag: [t.emphasis], color: '#24292e', fontStyle: 'italic' }, - { tag: [t.deleted], color: '#b31d28', backgroundColor: 'ffeef0' }, - { tag: [t.atom, t.bool, t.special(t.variableName)], color: '#e36209' }, - { tag: [t.url, t.escape, t.regexp, t.link], color: '#032f62' }, - { tag: t.link, textDecoration: 'underline' }, - { tag: t.strikethrough, textDecoration: 'line-through' }, - { tag: t.invalid, color: '#cb2431' }, - ], -}); +export const githubLightInit = (options?: CreateThemeOptions) => { + const { theme = 'light', settings = {}, styles = [] } = options || {}; + return createTheme({ + theme: theme, + settings: { + background: '#fff', + foreground: '#24292e', + selection: '#BBDFFF', + selectionMatch: '#BBDFFF', + gutterBackground: '#fff', + gutterForeground: '#6e7781', + ...settings, + }, + styles: [ + { tag: [t.comment, t.bracket], color: '#6a737d' }, + { tag: [t.className, t.propertyName], color: '#6f42c1' }, + { tag: [t.variableName, t.attributeName, t.number, t.operator], color: '#005cc5' }, + { tag: [t.keyword, t.typeName, t.typeOperator, t.typeName], color: '#d73a49' }, + { tag: [t.string, t.meta, t.regexp], color: '#032f62' }, + { tag: [t.name, t.quote], color: '#22863a' }, + { tag: [t.heading], color: '#24292e', fontWeight: 'bold' }, + { tag: [t.emphasis], color: '#24292e', fontStyle: 'italic' }, + { tag: [t.deleted], color: '#b31d28', backgroundColor: 'ffeef0' }, + { tag: [t.atom, t.bool, t.special(t.variableName)], color: '#e36209' }, + { tag: [t.url, t.escape, t.regexp, t.link], color: '#032f62' }, + { tag: t.link, textDecoration: 'underline' }, + { tag: t.strikethrough, textDecoration: 'line-through' }, + { tag: t.invalid, color: '#cb2431' }, + ...styles, + ], + }); +}; -export const githubDark = createTheme({ - theme: 'dark', - settings: { - background: '#0d1117', - foreground: '#c9d1d9', - caret: '#c9d1d9', - selection: '#003d73', - selectionMatch: '#003d73', - lineHighlight: '#36334280', - }, - styles: [ - { tag: [t.comment, t.bracket], color: '#8b949e' }, - { tag: [t.className, t.propertyName], color: '#d2a8ff' }, - { tag: [t.variableName, t.attributeName, t.number, t.operator], color: '#79c0ff' }, - { tag: [t.keyword, t.typeName, t.typeOperator, t.typeName], color: '#ff7b72' }, - { tag: [t.string, t.meta, t.regexp], color: '#a5d6ff' }, - { tag: [t.name, t.quote], color: '#7ee787' }, - { tag: [t.heading], color: '#d2a8ff', fontWeight: 'bold' }, - { tag: [t.emphasis], color: '#d2a8ff', fontStyle: 'italic' }, - { tag: [t.deleted], color: '#ffdcd7', backgroundColor: 'ffeef0' }, - { tag: [t.atom, t.bool, t.special(t.variableName)], color: '#ffab70' }, - { tag: t.link, textDecoration: 'underline' }, - { tag: t.strikethrough, textDecoration: 'line-through' }, - { tag: t.invalid, color: '#f97583' }, - ], -}); +export const githubLight = githubLightInit(); + +export const githubDarkInit = (options?: CreateThemeOptions) => { + const { theme = 'dark', settings = {}, styles = [] } = options || {}; + return createTheme({ + theme: theme, + settings: { + background: '#0d1117', + foreground: '#c9d1d9', + caret: '#c9d1d9', + selection: '#003d73', + selectionMatch: '#003d73', + lineHighlight: '#36334280', + ...settings, + }, + styles: [ + { tag: [t.comment, t.bracket], color: '#8b949e' }, + { tag: [t.className, t.propertyName], color: '#d2a8ff' }, + { tag: [t.variableName, t.attributeName, t.number, t.operator], color: '#79c0ff' }, + { tag: [t.keyword, t.typeName, t.typeOperator, t.typeName], color: '#ff7b72' }, + { tag: [t.string, t.meta, t.regexp], color: '#a5d6ff' }, + { tag: [t.name, t.quote], color: '#7ee787' }, + { tag: [t.heading], color: '#d2a8ff', fontWeight: 'bold' }, + { tag: [t.emphasis], color: '#d2a8ff', fontStyle: 'italic' }, + { tag: [t.deleted], color: '#ffdcd7', backgroundColor: 'ffeef0' }, + { tag: [t.atom, t.bool, t.special(t.variableName)], color: '#ffab70' }, + { tag: t.link, textDecoration: 'underline' }, + { tag: t.strikethrough, textDecoration: 'line-through' }, + { tag: t.invalid, color: '#f97583' }, + ...styles, + ], + }); +}; + +export const githubDark = githubDarkInit();