UNPKG

3.83 kBJavaScriptView Raw
1"use strict";
2
3var React = require('react');
4var common_1 = require('../common');
5var AlignmentContainer_1 = require('./AlignmentContainer');
6var CropMarks_1 = require('./CropMarks');
7var mobx_react_devtools_1 = require('mobx-react-devtools');
8var RED = 'rgba(255, 0, 0, 0.1)';
9var ComponentHost = common_1.Radium(function (props) {
10 var story = props.story;
11 var _props$mobXDevTools = props.mobXDevTools;
12 var mobXDevTools = _props$mobXDevTools === undefined ? true : _props$mobXDevTools;
13 var title = props.title;
14 var align = props.align;
15 var width = props.width;
16 var height = props.height;
17 var _props$padding = props.padding;
18 var padding = _props$padding === undefined ? 50 : _props$padding;
19 var background = props.background;
20 var _props$backdrop = props.backdrop;
21 var backdrop = _props$backdrop === undefined ? 'white' : _props$backdrop;
22 var hr = props.hr;
23 var _props$cropMarks = props.cropMarks;
24 var cropMarks = _props$cropMarks === undefined ? true : _props$cropMarks;
25 var _props$border = props.border;
26 var border = _props$border === undefined ? 0 : _props$border;
27
28 hr = hr === false ? false : true;
29 var componentBackground = formatColor(background);
30 var backdropColor = common_1.color.create(formatColor(backdrop));
31 var isBackdropDark = isDark(backdropColor);
32 var cropMarkColor = isBackdropDark ? 'rgba(255, 255, 255, 0.3)' : 'rgba(0, 0, 0, 0.1)';
33 var titleColor = isBackdropDark ? 'rgba(255, 255, 255, 0.7)' : 'rgba(0, 0, 0, 0.6)';
34 var componentBorder = border;
35 if (common_1.R.is(Number, border)) {
36 componentBorder = 'solid 1px ' + common_1.color.toGrayAlpha(border);
37 }
38 if (border === true) {
39 componentBorder = 'dashed 1px rgba(0, 0, 0, 0.2)';
40 }
41 var styles = common_1.css({
42 base: {
43 Absolute: 0,
44 display: 'flex',
45 flexDirection: 'column',
46 background: backdropColor.toRgbString()
47 },
48 header: {
49 borderBottom: hr && 'solid 1px ' + cropMarkColor,
50 paddingTop: 2,
51 paddingBottom: hr && 15,
52 marginLeft: 15,
53 marginTop: 15,
54 marginRight: 15
55 },
56 h2: {
57 fontWeight: 200,
58 fontSize: 20,
59 padding: 0,
60 margin: 0,
61 color: titleColor
62 },
63 body: {
64 boxSizing: 'border-box',
65 position: 'relative',
66 flex: 1,
67 margin: formatMarginPadding(padding)
68 }
69 });
70 return React.createElement("div", { style: styles.base }, title && React.createElement("div", { style: styles.header }, React.createElement("h2", { style: styles.h2 }, title)), props.styles, React.createElement("div", { style: styles.body }, React.createElement(AlignmentContainer_1.default, { align: align }, React.createElement(CropMarks_1.default, { width: width, height: height, background: componentBackground, cropMarkColor: cropMarkColor, cropMarksVisible: cropMarks, border: componentBorder }, story()))), mobXDevTools && React.createElement(mobx_react_devtools_1.default, { position: { bottom: -1, right: -1 } }));
71});
72Object.defineProperty(exports, "__esModule", { value: true });
73exports.default = ComponentHost;
74function formatColor(value) {
75 if (value === undefined) {
76 return;
77 }
78 if (common_1.R.is(Number, value)) {
79 return common_1.color.toGrayHex(value);
80 }
81 if (value === true) {
82 return RED;
83 }
84 return value;
85}
86function isDark(color) {
87 return color.getAlpha() < 0.4 ? false : color.getBrightness() < 130;
88}
89function formatMarginPadding(value) {
90 if (common_1.R.is(Array, value)) {
91 return value.slice(0, 4).map(function (n) {
92 return n + 'px';
93 }).join(' ');
94 }
95 return value;
96}
\No newline at end of file