redux-devtools/packages/react-json-tree/src/createStylingFromTheme.js

190 lines
4.5 KiB
JavaScript
Raw Normal View History

import { createStyling } from 'react-base16-styling';
import solarized from './themes/solarized';
const colorMap = theme => ({
BACKGROUND_COLOR: theme.base00,
TEXT_COLOR: theme.base07,
STRING_COLOR: theme.base0B,
DATE_COLOR: theme.base0B,
NUMBER_COLOR: theme.base09,
BOOLEAN_COLOR: theme.base09,
NULL_COLOR: theme.base08,
UNDEFINED_COLOR: theme.base08,
FUNCTION_COLOR: theme.base08,
SYMBOL_COLOR: theme.base08,
LABEL_COLOR: theme.base0D,
ARROW_COLOR: theme.base0D,
ITEM_STRING_COLOR: theme.base0B,
ITEM_STRING_EXPANDED_COLOR: theme.base03
});
const valueColorMap = colors => ({
String: colors.STRING_COLOR,
Date: colors.DATE_COLOR,
Number: colors.NUMBER_COLOR,
Boolean: colors.BOOLEAN_COLOR,
Null: colors.NULL_COLOR,
Undefined: colors.UNDEFINED_COLOR,
Function: colors.FUNCTION_COLOR,
Symbol: colors.SYMBOL_COLOR
});
const getDefaultThemeStyling = theme => {
const colors = colorMap(theme);
return {
tree: {
border: 0,
padding: 0,
marginTop: '0.5em',
marginBottom: '0.5em',
marginLeft: '0.125em',
marginRight: 0,
listStyle: 'none',
MozUserSelect: 'none',
WebkitUserSelect: 'none',
backgroundColor: colors.BACKGROUND_COLOR
},
value: ({ style }, nodeType, keyPath) => ({
style: {
...style,
paddingTop: '0.25em',
paddingRight: 0,
marginLeft: '0.875em',
WebkitUserSelect: 'text',
MozUserSelect: 'text',
wordWrap: 'break-word',
paddingLeft: keyPath.length > 1 ? '2.125em' : '1.25em',
textIndent: '-0.5em',
wordBreak: 'break-all'
}
}),
label: {
display: 'inline-block',
color: colors.LABEL_COLOR
},
valueLabel: {
margin: '0 0.5em 0 0'
},
valueText: ({ style }, nodeType) => ({
style: {
...style,
color: valueColorMap(colors)[nodeType]
}
}),
itemRange: (styling, expanded) => ({
style: {
paddingTop: expanded ? 0 : '0.25em',
cursor: 'pointer',
color: colors.LABEL_COLOR
}
}),
arrow: ({ style }, nodeType, expanded) => ({
style: {
...style,
marginLeft: 0,
transition: '150ms',
WebkitTransition: '150ms',
MozTransition: '150ms',
WebkitTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',
MozTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',
transform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',
transformOrigin: '45% 50%',
WebkitTransformOrigin: '45% 50%',
MozTransformOrigin: '45% 50%',
position: 'relative',
lineHeight: '1.1em',
fontSize: '0.75em'
}
}),
arrowContainer: ({ style }, arrowStyle) => ({
style: {
...style,
display: 'inline-block',
paddingRight: '0.5em',
paddingLeft: arrowStyle === 'double' ? '1em' : 0,
cursor: 'pointer'
}
}),
arrowSign: {
color: colors.ARROW_COLOR
},
arrowSignInner: {
position: 'absolute',
top: 0,
left: '-0.4em'
},
nestedNode: ({ style }, keyPath, nodeType, expanded, expandable) => ({
style: {
...style,
position: 'relative',
paddingTop: '0.25em',
marginLeft: keyPath.length > 1 ? '0.875em' : 0,
paddingLeft: !expandable ? '1.125em' : 0
}
}),
rootNode: {
padding: 0,
margin: 0
},
nestedNodeLabel: ({ style }, keyPath, nodeType, expanded, expandable) => ({
style: {
...style,
margin: 0,
padding: 0,
WebkitUserSelect: expandable ? 'inherit' : 'text',
MozUserSelect: expandable ? 'inherit' : 'text',
cursor: expandable ? 'pointer' : 'default'
}
}),
nestedNodeItemString: ({ style }, keyPath, nodeType, expanded) => ({
style: {
...style,
paddingLeft: '0.5em',
cursor: 'default',
color: expanded
? colors.ITEM_STRING_EXPANDED_COLOR
: colors.ITEM_STRING_COLOR
}
}),
nestedNodeItemType: {
marginLeft: '0.3em',
marginRight: '0.3em'
},
nestedNodeChildren: ({ style }, nodeType, expanded) => ({
style: {
...style,
padding: 0,
margin: 0,
listStyle: 'none',
display: expanded ? 'block' : 'none'
}
}),
rootNodeChildren: {
padding: 0,
margin: 0,
listStyle: 'none'
}
};
};
export default createStyling(getDefaultThemeStyling, {
defaultBase16: solarized
});