1 | "use strict";
|
2 |
|
3 | var React = require('react');
|
4 | var common_1 = require('../common');
|
5 | var AlignmentContainer_1 = require('./AlignmentContainer');
|
6 | var CropMarks_1 = require('./CropMarks');
|
7 | var mobx_react_devtools_1 = require('mobx-react-devtools');
|
8 | var RED = 'rgba(255, 0, 0, 0.1)';
|
9 | var 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 | });
|
72 | Object.defineProperty(exports, "__esModule", { value: true });
|
73 | exports.default = ComponentHost;
|
74 | function 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 | }
|
86 | function isDark(color) {
|
87 | return color.getAlpha() < 0.4 ? false : color.getBrightness() < 130;
|
88 | }
|
89 | function 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 |