stem-core
Version:
Frontend and core-library framework
145 lines (120 loc) • 4.01 kB
JSX
import {UI} from "./UIBase";
import {SimpleStyledElement} from "./Bootstrap3";
import {BasicLevelStyleSheet} from "./GlobalStyle";
import {registerStyle} from "./style/Theme";
import {buildColors} from "./Color";
import {styleRule} from "../decorators/Style";
import {Level} from "./Constants";
export function cardPanelColorToStyle(color) {
let colors = buildColors(color);
return {
borderColor: colors[4],
};
}
export class CardPanelStyle extends BasicLevelStyleSheet(cardPanelColorToStyle) {
DEFAULT = [{
display: "flex",
alignItems: "center",
width: "100%",
flexDirection: "row",
padding: "5px",
minHeight: this.themeProperties.CARD_PANEL_HEADER_HEIGHT,
textTransform: this.themeProperties.CARD_PANEL_TEXT_TRANSFORM,
paddingLeft: this.themeProperties.CARD_PANEL_HEADING_PADDING,
paddingRight: this.themeProperties.CARD_PANEL_HEADING_PADDING,
},
cardPanelHeaderColorToStyle(this.themeProperties.COLOR_BACKGROUND)
];
LARGE = {
minHeight: this.themeProperties.CARD_PANEL_HEADER_HEIGHT_LARGE,
paddingLeft: this.themeProperties.CARD_PANEL_HEADING_PADDING_LARGE,
paddingRight: this.themeProperties.CARD_PANEL_HEADING_PADDING_LARGE,
};
body = {
};
panel = [{
borderWidth: this.themeProperties.BASE_BORDER_WIDTH,
borderRadius: this.themeProperties.BASE_BORDER_RADIUS,
boxShadow: this.themeProperties.BASE_BOX_SHADOW,
borderStyle: this.themeProperties.BASE_BORDER_STYLE,
backgroundColor: this.themeProperties.COLOR_BACKGROUND,
},
cardPanelColorToStyle(this.themeProperties.COLOR_BACKGROUND)
];
centered = {
textAlign: "center",
justifyContent: "center",
};
}
function cardPanelHeaderColorToStyle(color){
let colors = buildColors(color);
return {
color: colors[6],
backgroundColor: colors[1],
borderBottomColor: colors[4],
};
}
export const CardPanelHeaderStyle = BasicLevelStyleSheet(cardPanelHeaderColorToStyle);
class CardPanel extends SimpleStyledElement {
extraNodeAttributes(attr) {
attr.addClass(this.styleSheet.panel);
}
getLevel() {
return super.getLevel() || Level.PRIMARY;
}
getTitle() {
return this.options.title;
}
getHeaderStyleSheet() {
return CardPanelHeaderStyle.getInstance();
}
getDefaultOptions() {
return {
headingCentered: true,
bodyCentered: false,
};
}
getHeadingClasses() {
let headingClasses = "";
const headingLevel = this.getHeaderStyleSheet().Level(this.getLevel()),
{headingCentered} = this.options;
if (headingLevel) {
headingClasses = headingClasses + headingLevel;
}
headingClasses = headingClasses + this.styleSheet.DEFAULT;
if (this.getSize()) {
headingClasses = headingClasses + this.styleSheet.Size(this.getSize());
}
if (headingCentered) {
headingClasses = headingClasses + this.styleSheet.centered;
}
return headingClasses;
}
getBodyClasses() {
const {bodyCentered} = this.options;
let bodyClasses = this.styleSheet.body;
if (bodyCentered) {
bodyClasses = bodyClasses + this.styleSheet.centered;
}
return bodyClasses;
}
getChildrenToRender() {
const headingClasses = this.getHeadingClasses();
const bodyClasses = this.getBodyClasses();
return [
<div ref="panelTitle" className={headingClasses}>
{this.getTitle()}
</div>,
<div ref="panelBody" className={bodyClasses} style={this.options.bodyStyle}>
{this.render()}
</div>,
];
}
}
export {CardPanel};