mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
201 lines
4.4 KiB
TypeScript
201 lines
4.4 KiB
TypeScript
import { styled } from '@nextui-org/react';
|
|
import makeCodeTheme, { getCodeThemeColors } from '../playground/code-theme';
|
|
|
|
const codeTheme = makeCodeTheme();
|
|
const {
|
|
stringColor,
|
|
functionColor,
|
|
punctuationColor,
|
|
primitiveColor,
|
|
classnameColor
|
|
} = getCodeThemeColors();
|
|
|
|
export const Pre = styled('pre', {
|
|
$$background: codeTheme.plain.backgroundColor,
|
|
$$text: codeTheme.plain.color,
|
|
$$outline: '$shadows$md',
|
|
$$syntax1: functionColor?.style.color,
|
|
$$syntax2: stringColor?.style.color,
|
|
$$syntax3: primitiveColor?.style.color,
|
|
$$syntax4: '$colors$yellow600',
|
|
$$syntax5: classnameColor?.style.color,
|
|
$$syntax6: '$colors$yellow400',
|
|
$$comment: punctuationColor?.style.color,
|
|
$$removed: '$colors$red300',
|
|
$$added: '$colors$green300',
|
|
$$lineNumbers: punctuationColor?.style.color,
|
|
$$fadedLines: punctuationColor?.style.color,
|
|
$$highlightedWord1Bg: '$colors$purple500',
|
|
$$highlightedWord1BgActive: '$colors$purple600',
|
|
$$highlightedWord1Text: '$colors$purple800',
|
|
$$highlightedWord2Bg: '$colors$red100',
|
|
$$highlightedWord2BgActive: '$colors$red500',
|
|
$$highlightedWord2Text: '$colors$red200',
|
|
$$highlightedWord3Bg: '$colors$green300',
|
|
$$highlightedWord3BgActive: '$colors$green500',
|
|
$$highlightedWord3Text: '$colors$green100',
|
|
|
|
boxSizing: 'border-box',
|
|
borderRadius: '$lg',
|
|
padding: '$8',
|
|
overflow: 'auto',
|
|
fontFamily: '$mono',
|
|
fontSize: '$xs',
|
|
lineHeight: '21px',
|
|
whiteSpace: 'pre',
|
|
position: 'relative',
|
|
backgroundColor: '$$background',
|
|
color: '$$text',
|
|
boxShadow: '$$outline',
|
|
width: '100%',
|
|
|
|
'& > code': {
|
|
color: 'inherit',
|
|
fontSize: 'inherit',
|
|
background: 'inherit',
|
|
display: 'block',
|
|
transition: 'none',
|
|
'&:hover': {
|
|
opacity: 1
|
|
}
|
|
},
|
|
|
|
'.token.parameter': {
|
|
color: '$$text'
|
|
},
|
|
|
|
'.token.tag, .token.selector, .token.selector .class, .token.function': {
|
|
color: '$$syntax1'
|
|
},
|
|
|
|
'.token.script.language-javascript': {
|
|
color: '$$text'
|
|
},
|
|
|
|
'.token.class-name': {
|
|
color: '$$syntax5'
|
|
},
|
|
|
|
'.token.attr-value, .token.class, .token.string, .token.number, .token.unit, .token.color':
|
|
{
|
|
color: '$$syntax2'
|
|
},
|
|
|
|
'.token.keyword, .token.rule, .token.operator, .token.pseudo-class, .token.important':
|
|
{
|
|
color: '$$syntax3'
|
|
},
|
|
'.token.attr-name': {
|
|
color: '$$syntax6'
|
|
},
|
|
'.token.punctuation, .token.module, .token.property': {
|
|
color: '$$syntax4'
|
|
},
|
|
|
|
'.token.comment': {
|
|
color: '$$comment'
|
|
},
|
|
|
|
'.token.atapply .token:not(.rule):not(.important)': {
|
|
color: 'inherit'
|
|
},
|
|
|
|
'.language-shell .token:not(.comment)': {
|
|
color: 'inherit'
|
|
},
|
|
|
|
'.language-css .token.function': {
|
|
color: 'inherit'
|
|
},
|
|
|
|
'.token.deleted:not(.prefix), .token.inserted:not(.prefix)': {
|
|
display: 'block',
|
|
px: '$4',
|
|
mx: '-20px'
|
|
},
|
|
|
|
'.token.deleted:not(.prefix)': {
|
|
color: '$$removed'
|
|
},
|
|
|
|
'.token.inserted:not(.prefix)': {
|
|
color: '$$added'
|
|
},
|
|
|
|
'.token.deleted.prefix, .token.inserted.prefix': {
|
|
userSelect: 'none'
|
|
},
|
|
|
|
// Styles for highlighted word
|
|
'.highlight-word': {
|
|
$$bgAndShadow: '$$highlightedWord1Bg',
|
|
$$xOffset: '1px',
|
|
color: '$$highlightedWord1Text',
|
|
backgroundColor: '$$bgAndShadow',
|
|
display: 'inline-block',
|
|
boxShadow: '$$xOffset 0 0 0 $$bgAndShadow, -$$xOffset 0 0 0 $$bgAndShadow',
|
|
|
|
// reset the color for tokens inside highlighted words
|
|
'.token': {
|
|
color: 'inherit'
|
|
},
|
|
|
|
'&.on': {
|
|
$$bgAndShadow: '$$highlightedWord1BgActive',
|
|
transition: 'all 100ms ease',
|
|
cursor: 'pointer'
|
|
}
|
|
},
|
|
|
|
'.token.deleted .highlight-word': {
|
|
$$bgAndShadow: '$$highlightedWord2Bg',
|
|
color: '$$highlightedWord2Text',
|
|
|
|
'&.on': {
|
|
$$bgAndShadow: '$$highlightedWord2BgActive'
|
|
}
|
|
},
|
|
|
|
'.token.inserted .highlight-word': {
|
|
$$bgAndShadow: '$$highlightedWord3Bg',
|
|
color: '$$highlightedWord3Text',
|
|
|
|
'&.on': {
|
|
$$bgAndShadow: '$$highlightedWord3BgActive'
|
|
}
|
|
},
|
|
|
|
// Line numbers
|
|
'&[data-line-numbers=true]': {
|
|
'.highlight-line': {
|
|
position: 'relative',
|
|
paddingLeft: '$9',
|
|
|
|
'&::before': {
|
|
content: 'attr(data-line)',
|
|
position: 'absolute',
|
|
left: -5,
|
|
top: 0,
|
|
color: '$$lineNumbers'
|
|
}
|
|
}
|
|
},
|
|
|
|
// Styles for highlighted lines
|
|
'.highlight-line': {
|
|
'&, *': {
|
|
transition: 'color 150ms ease'
|
|
},
|
|
'&[data-highlighted=false]': {
|
|
'&, *': {
|
|
color: '$$fadedLines'
|
|
}
|
|
}
|
|
},
|
|
|
|
// Typewriter styles
|
|
'.typewriter': {
|
|
opacity: 0
|
|
}
|
|
});
|