exports.ids = [0];
exports.modules = {

/***/ 144:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);

// EXTERNAL MODULE: ./src/theme.ts
var theme = __webpack_require__(1);

// EXTERNAL MODULE: ./src/components/Button.tsx
var Button = __webpack_require__(29);

// EXTERNAL MODULE: ./node_modules/react/index.js
var react = __webpack_require__(0);
var react_default = /*#__PURE__*/__webpack_require__.n(react);

// EXTERNAL MODULE: ./src/icons/styles.ts
var styles = __webpack_require__(8);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/createElement/index.js + 2 modules
var createElement = __webpack_require__(21);

// CONCATENATED MODULE: ./src/icons/Collapse.tsx
var __assign = (undefined && undefined.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/google/material-design-icons
 *
 * SVG contents redistributed under Apache License 2.0:
 * https://github.com/google/material-design-icons/blob/master/LICENSE
 * Copyright 2015 Google, Inc. All Rights Reserved.
 */



var Collapse = function (props) {
    return Object(createElement["a" /* default */])('svg', __assign(__assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("g", null,
        react_default.a.createElement("path", { d: "M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" }),
        react_default.a.createElement("path", { fill: "none", d: "M0 0h24v24H0V0z" })));
};
Collapse.metadata = { height: 24, width: 24 };
/* harmony default export */ var icons_Collapse = (Collapse);

// EXTERNAL MODULE: ../formatting/index.ts + 1 modules
var formatting = __webpack_require__(17);

// CONCATENATED MODULE: ./src/icons/Remove.tsx
var Remove_assign = (undefined && undefined.__assign) || function () {
    Remove_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Remove_assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/google/material-design-icons
 *
 * SVG contents redistributed under Apache License 2.0:
 * https://github.com/google/material-design-icons/blob/master/LICENSE
 * Copyright 2015 Google, Inc. All Rights Reserved.
 */



var Remove = function (props) {
    return Object(createElement["a" /* default */])('svg', Remove_assign(Remove_assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("g", null,
        react_default.a.createElement("path", { d: "M0 0h24v24H0z", fill: "none" }),
        react_default.a.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z" })));
};
Remove.metadata = { height: 24, width: 24 };
/* harmony default export */ var icons_Remove = (Remove);

// EXTERNAL MODULE: ./src/components/Hoverable.tsx
var Hoverable = __webpack_require__(27);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/Text/index.js
var Text = __webpack_require__(90);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/StyleSheet/index.js + 1 modules
var StyleSheet = __webpack_require__(4);

// CONCATENATED MODULE: ./src/components/TextLink.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */




var DrawerLink = function (props) {
    var href = props.href, style = props.style, text = props.text;
    return (react_default.a.createElement(Hoverable["a" /* default */], null, function (isHovered) {
        return (react_default.a.createElement(Text["a" /* default */], { accessibilityRole: "link", href: href, style: [TextLink_styles.root, isHovered && TextLink_styles.rootHovered, style], target: "_blank" }, text));
    }));
};
var TextLink_styles = StyleSheet["a" /* default */].create({
    root: {
        borderRadius: theme["a" /* BorderRadius */].Normal,
        color: theme["b" /* Color */].Primary40
    },
    rootHovered: {
        backgroundColor: theme["b" /* Color */].Primary00
    }
});
/* harmony default export */ var TextLink = (DrawerLink);

// EXTERNAL MODULE: ./src/store/actions.ts
var actions = __webpack_require__(9);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/View/index.js
var View = __webpack_require__(7);

// CONCATENATED MODULE: ./src/components/Table.tsx
var Table_assign = (undefined && undefined.__assign) || function () {
    Table_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Table_assign.apply(this, arguments);
};
/**
 * Copyright (c) 2019 Paul Armstrong
 */


var Table = function (props) {
    return Object(createElement["a" /* default */])('table', Table_assign(Table_assign({}, props), { accessibilityRole: 'table', style: [Table_styles.table, props.style] }));
};
var Thead = function (props) {
    return Object(createElement["a" /* default */])('thead', Table_assign(Table_assign({}, props), { accessibilityRole: 'group', style: [Table_styles.group, props.style] }));
};
var Tbody = function (props) {
    return Object(createElement["a" /* default */])('tbody', Table_assign(Table_assign({}, props), { accessibilityRole: 'group', style: [Table_styles.group, props.style] }));
};
var Tr = function (props) {
    return Object(createElement["a" /* default */])('tr', Table_assign(Table_assign({}, props), { accessibilityRole: 'row', style: [Table_styles.row, props.style] }));
};
var Th = function (props) {
    return Object(createElement["a" /* default */])('th', Table_assign(Table_assign({}, props), { accessibilityRole: 'cell', style: [Table_styles.cell, props.style] }));
};
var Td = function (props) {
    return Object(createElement["a" /* default */])('td', Table_assign(Table_assign({}, props), { accessibilityRole: 'cell', style: [Table_styles.cell, props.style] }));
};
var Table_styles = StyleSheet["a" /* default */].create({
    table: {
        borderCollapse: 'collapse'
    },
    group: {
        boxSizing: 'border-box'
    },
    row: {
        boxSizing: 'border-box'
    },
    cell: {
        boxSizing: 'border-box',
        borderWidth: StyleSheet["a" /* default */].hairlineWidth,
        borderBottomStyle: 'solid',
        borderRightStyle: 'dotted',
        borderColor: theme["b" /* Color */].Gray10,
        margin: 0,
        paddingHorizontal: theme["f" /* Spacing */].Xsmall,
        textAlign: 'right'
    }
});

// EXTERNAL MODULE: ./node_modules/react-redux/es/index.js + 22 modules
var es = __webpack_require__(2);

// CONCATENATED MODULE: ./src/components/BuildInfo.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */











var titleCase = function (value) {
    return "" + value.charAt(0).toUpperCase() + value.slice(1);
};
var BuildInfo = function (props) {
    var focusedRevision = props.focusedRevision, style = props.style;
    var build = Object(es["c" /* useSelector */])(function (state) {
        return state.comparator.builds.find(function (build) { return build.getMetaValue('revision') === focusedRevision; });
    });
    var revision = build.getMetaValue('revision');
    var revisionUrl = build.getMetaUrl('revision');
    var dispatch = Object(es["b" /* useDispatch */])();
    var handleClose = react_default.a.useCallback(function () {
        dispatch(Object(actions["i" /* setFocusedRevision */])(undefined));
    }, [dispatch]);
    var handleRemove = react_default.a.useCallback(function () {
        dispatch(Object(actions["d" /* removeComparedRevision */])(focusedRevision));
    }, [dispatch, focusedRevision]);
    return (react_default.a.createElement(View["a" /* default */], { style: [BuildInfo_styles.root, style] },
        react_default.a.createElement(View["a" /* default */], { style: BuildInfo_styles.header },
            react_default.a.createElement(Text["a" /* default */], { style: BuildInfo_styles.headerText },
                "Build: ",
                Object(formatting["c" /* formatSha */])(revision)),
            react_default.a.createElement(Button["a" /* default */], { icon: icons_Collapse, iconOnly: true, onPress: handleClose, title: "Collapse details" })),
        react_default.a.createElement(Table, null,
            react_default.a.createElement(Tbody, null,
                react_default.a.createElement(Tr, null,
                    react_default.a.createElement(Th, null,
                        react_default.a.createElement(Text["a" /* default */], null, "Revision")),
                    react_default.a.createElement(Td, { style: BuildInfo_styles.infoCell }, revisionUrl ? react_default.a.createElement(TextLink, { href: revisionUrl, text: revision }) : react_default.a.createElement(Text["a" /* default */], null, revision))),
                react_default.a.createElement(Tr, null,
                    react_default.a.createElement(Th, null,
                        react_default.a.createElement(Text["a" /* default */], null, "Date")),
                    react_default.a.createElement(Td, { style: BuildInfo_styles.infoCell },
                        react_default.a.createElement(Text["a" /* default */], null, build.timestamp.toLocaleString()))),
                Object.keys(build.meta)
                    .filter(function (metaKey) { return metaKey !== 'revision' && metaKey !== 'timestamp'; })
                    .map(function (metaKey) {
                    var value = build.getMetaValue(metaKey);
                    var url = build.getMetaUrl(metaKey);
                    return (react_default.a.createElement(Tr, { key: metaKey },
                        react_default.a.createElement(Th, null,
                            react_default.a.createElement(Text["a" /* default */], null, titleCase(metaKey))),
                        react_default.a.createElement(Td, { style: BuildInfo_styles.infoCell }, url ? react_default.a.createElement(TextLink, { href: url, text: value }) : react_default.a.createElement(Text["a" /* default */], null, value))));
                }))),
        react_default.a.createElement(View["a" /* default */], { style: BuildInfo_styles.footer },
            react_default.a.createElement(Button["a" /* default */], { color: "secondary", icon: icons_Remove, onPress: handleRemove, title: "Remove build" }))));
};
var BuildInfo_styles = StyleSheet["a" /* default */].create({
    root: {
        paddingVertical: theme["f" /* Spacing */].Normal,
        paddingHorizontal: theme["f" /* Spacing */].Large
    },
    header: {
        flexDirection: 'row',
        justifyContent: 'space-between',
        alignItems: 'center'
    },
    headerText: {
        fontWeight: theme["d" /* FontWeight */].Bold,
        fontSize: theme["c" /* FontSize */].Normal
    },
    infoCell: {
        textAlign: 'left'
    },
    footer: {
        alignItems: 'flex-start',
        paddingTop: theme["f" /* Spacing */].Normal
    }
});
/* harmony default export */ var components_BuildInfo = (BuildInfo);

// EXTERNAL MODULE: ./src/modules/ColorScale.ts + 43 modules
var ColorScale = __webpack_require__(32);

// EXTERNAL MODULE: /Users/parmstrong/Development/build-tracker/node_modules/d3-color/src/index.js + 5 modules
var src = __webpack_require__(3);

// EXTERNAL MODULE: ./node_modules/react-dom/index.js
var react_dom = __webpack_require__(16);
var react_dom_default = /*#__PURE__*/__webpack_require__.n(react_dom);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/Dimensions/index.js
var Dimensions = __webpack_require__(57);

// CONCATENATED MODULE: ./src/components/Tooltip.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */




var tipSpace = 6;
var Tooltip = function (props) {
    var relativeTo = props.relativeTo, text = props.text;
    var _a = react_default.a.useState({ top: -999, left: 0 }), position = _a[0], setPosition = _a[1];
    var portalRoot = document.getElementById('tooltipPortal');
    var ref = react_default.a.createRef();
    react_default.a.useEffect(function () {
        var mounted = true;
        if (relativeTo.current) {
            var _a = Dimensions["a" /* default */].get('window'), windowWidth_1 = _a.width, windowHeight_1 = _a.height;
            ref.current.measure(function (_x, _y, tipWidth, tipHeight) {
                if (!mounted) {
                    return;
                }
                relativeTo.current.measureInWindow(function (x, y, width, height) {
                    if (!mounted) {
                        return;
                    }
                    var top = y + height + tipSpace;
                    var left = x + width / 2 - tipWidth / 2;
                    // too far right when underneath
                    if (left + tipWidth > windowWidth_1) {
                        left = x - tipWidth - tipSpace;
                        top = y + height / 2 - tipHeight / 2;
                    }
                    // too far left when underneath
                    else if (left < 0) {
                        left = x + width + tipSpace;
                        top = y + height / 2 - tipHeight / 2;
                    }
                    // too close to bottom
                    else if (top + tipHeight > windowHeight_1) {
                        top = y - tipHeight - tipSpace;
                    }
                    setPosition({ left: left, top: top });
                });
            });
        }
        return function () {
            mounted = false;
        };
        /* eslint-disable react-hooks/exhaustive-deps */
        // Tests break if you pass the ref/relativeTo higher object in and not the actual value we're using
    }, [ref.current, relativeTo.current]);
    /* eslint-enable react-hooks/exhaustive-deps */
    var tooltip = (react_default.a.createElement(View["a" /* default */], { accessibilityRole: "tooltip", ref: ref, style: [Tooltip_styles.root, { top: position.top, left: position.left }, position.top > 0 && Tooltip_styles.show] },
        react_default.a.createElement(Text["a" /* default */], { style: Tooltip_styles.text }, text)));
    return portalRoot ? react_dom_default.a.createPortal(tooltip, portalRoot) : tooltip;
};
var Tooltip_styles = StyleSheet["a" /* default */].create({
    root: {
        maxWidth: 400,
        position: 'absolute',
        backgroundColor: theme["b" /* Color */].Gray50,
        borderRadius: theme["a" /* BorderRadius */].Normal,
        paddingHorizontal: theme["f" /* Spacing */].Small,
        paddingVertical: theme["f" /* Spacing */].Xsmall,
        transitionProperty: 'transform, opacity',
        transitionDuration: '0.1s',
        transitionTimingFunction: theme["e" /* MotionTiming */].Accelerate,
        transform: [{ scale: 0.75 }],
        opacity: 0
    },
    show: {
        transform: [{ scale: 1 }],
        opacity: 1
    },
    text: {
        color: theme["g" /* TextColor */].Gray50,
        fontSize: theme["c" /* FontSize */].Xsmall,
        textAlign: 'center'
    }
});
/* harmony default export */ var components_Tooltip = (Tooltip);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/TouchableOpacity/index.js + 5 modules
var TouchableOpacity = __webpack_require__(91);

// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/Switch/index.js
var Switch = __webpack_require__(132);

// CONCATENATED MODULE: ./src/components/ComparisonTable/ArtifactCell.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */







var ArtifactCell = function (props) {
    var text = props.cell.text, color = props.color, disabled = props.disabled, isActive = props.isActive, onDisable = props.onDisable, onEnable = props.onEnable, onFocus = props.onFocus, style = props.style;
    var brighterColor = Object(src["d" /* hsl */])(color);
    brighterColor.s = 0.2;
    brighterColor.l = 0.8;
    var textRef = react_default.a.useRef(null);
    var handleValueChange = function (toggled) {
        toggled ? onEnable(text) : onDisable(text);
    };
    var handlePress = react_default.a.useCallback(function () {
        onFocus(text);
    }, [onFocus, text]);
    return (react_default.a.createElement(Th, { style: style },
        react_default.a.createElement(View["a" /* default */], { style: ArtifactCell_styles.artifact },
            react_default.a.createElement(Hoverable["a" /* default */], null, function (isHovered) { return (react_default.a.createElement(View["a" /* default */], null,
                react_default.a.createElement(TouchableOpacity["a" /* default */], { accessibilityRole: "button", onPress: handlePress, style: ArtifactCell_styles.name },
                    react_default.a.createElement(Text["a" /* default */], { accessibilityLabel: text, ref: textRef, style: [ArtifactCell_styles.nameText, isHovered && ArtifactCell_styles.hoveredText] }, text)),
                isHovered ? react_default.a.createElement(components_Tooltip, { relativeTo: textRef, text: "Show \"" + text + "\" only" }) : null)); }),
            react_default.a.createElement(View["a" /* default */], { style: ArtifactCell_styles.switch },
                react_default.a.createElement(Switch["a" /* default */], { activeThumbColor: color, activeTrackColor: brighterColor.toString(), disabled: disabled, onValueChange: handleValueChange, value: isActive })))));
};
var ArtifactCell_styles = StyleSheet["a" /* default */].create({
    artifact: {
        flexDirection: 'row',
        justifyContent: 'space-between',
        paddingVertical: theme["f" /* Spacing */].Xxsmall
    },
    name: {
        flexShrink: 1,
        flexGrow: 1,
        maxWidth: '15vw',
        alignItems: 'flex-start',
        justifyContent: 'center',
        paddingEnd: theme["f" /* Spacing */].Xsmall
    },
    nameText: {
        width: '100%',
        whiteSpace: 'nowrap',
        textAlign: 'left',
        display: 'block',
        overflow: 'hidden',
        textOverflow: 'ellipsis'
    },
    switch: {
        paddingStart: theme["f" /* Spacing */].Xsmall
    },
    hoveredText: {
        color: theme["b" /* Color */].Primary30
    }
});
/* harmony default export */ var ComparisonTable_ArtifactCell = (react_default.a.memo(ArtifactCell));

// EXTERNAL MODULE: ../types/index.ts + 1 modules
var types = __webpack_require__(15);

// CONCATENATED MODULE: ./src/icons/Error.tsx
var Error_assign = (undefined && undefined.__assign) || function () {
    Error_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Error_assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/google/material-design-icons
 *
 * SVG contents redistributed under Apache License 2.0:
 * https://github.com/google/material-design-icons/blob/master/LICENSE
 * Copyright 2015 Google, Inc. All Rights Reserved.
 */



var Error = function (props) {
    return Object(createElement["a" /* default */])('svg', Error_assign(Error_assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("g", null,
        react_default.a.createElement("path", { d: "M0 0h24v24H0z", fill: "none" }),
        react_default.a.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" })));
};
Error.metadata = { height: 24, width: 24 };
/* harmony default export */ var icons_Error = (Error);

// CONCATENATED MODULE: ./src/icons/Hash.tsx
var Hash_assign = (undefined && undefined.__assign) || function () {
    Hash_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Hash_assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/Templarian/MaterialDesign-JS
 *
 * SVG contents redistributed under MIT License
 * https://github.com/Templarian/MaterialDesign-JS/blob/master/LICENSE
 * Copyright 2018 Austin Andrews
 */



var Hash_Error = function (props) {
    return Object(createElement["a" /* default */])('svg', Hash_assign(Hash_assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("path", { d: "M3,5A2,2 0 0,1 5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5M7,18H9L9.35,16H13.35L13,18H15L15.35,16H17.35L17.71,14H15.71L16.41,10H18.41L18.76,8H16.76L17.12,6H15.12L14.76,8H10.76L11.12,6H9.12L8.76,8H6.76L6.41,10H8.41L7.71,14H5.71L5.35,16H7.35L7,18M10.41,10H14.41L13.71,14H9.71L10.41,10Z" }));
};
Hash_Error.metadata = { height: 24, width: 24 };
/* harmony default export */ var Hash = (Hash_Error);

// CONCATENATED MODULE: ./src/icons/Warning.tsx
var Warning_assign = (undefined && undefined.__assign) || function () {
    Warning_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Warning_assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/google/material-design-icons
 *
 * SVG contents redistributed under Apache License 2.0:
 * https://github.com/google/material-design-icons/blob/master/LICENSE
 * Copyright 2015 Google, Inc. All Rights Reserved.
 */



var Warning = function (props) {
    return Object(createElement["a" /* default */])('svg', Warning_assign(Warning_assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("g", null,
        react_default.a.createElement("path", { d: "M0 0h24v24H0z", fill: "none" }),
        react_default.a.createElement("path", { d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" })));
};
Warning.metadata = { height: 24, width: 24 };
/* harmony default export */ var icons_Warning = (Warning);

// CONCATENATED MODULE: ./src/components/ComparisonTable/DeltaCell.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */










var happy = {
    red: 6,
    green: 176,
    blue: 41
};
var danger = {
    red: 249,
    green: 84,
    blue: 84
};
var warning = {
    red: 237,
    green: 170,
    blue: 46
};
var scale = function (_a, percentDelta) {
    var red = _a.red, blue = _a.blue, green = _a.green;
    return "rgba(" + red + "," + green + "," + blue + "," + Math.max(Math.min(Math.abs(percentDelta), 1), 0) + ")";
};
var DeltaCell = function (props) {
    var cell = props.cell, sizeKey = props.sizeKey, style = props.style;
    var sizeDelta = cell.sizes[sizeKey];
    var percentDelta = cell.percents[sizeKey];
    var viewRef = react_default.a.useRef(null);
    var failingBudgets = cell.failingBudgets;
    var errorBudgets = failingBudgets.filter(function (budget) { return budget.level === types["a" /* BudgetLevel */].ERROR; });
    var warningBudgets = failingBudgets.filter(function (budget) { return budget.level === types["a" /* BudgetLevel */].WARN; });
    var backgroundColor = 'transparent';
    if (errorBudgets.length) {
        backgroundColor = scale(danger, 1);
    }
    else if (warningBudgets.length) {
        backgroundColor = scale(warning, 1);
    }
    else if (percentDelta > 0) {
        backgroundColor = scale(danger, percentDelta);
    }
    else if (sizeDelta === 0 && cell.hashChanged) {
        backgroundColor = scale(warning, 0.5);
    }
    else if (sizeDelta !== 0) {
        backgroundColor = scale(happy, percentDelta);
    }
    var stringChange = sizeDelta + " bytes (" + (percentDelta * 100).toFixed(3) + "%)";
    var text = Object(formatting["b" /* formatBytes */])(sizeDelta);
    var hashChangedOnly = sizeDelta === 0 && cell.hashChanged;
    var tooltipText = failingBudgets.length
        ? failingBudgets.map(function (budget) { return Object(formatting["a" /* formatBudgetResult */])(budget, cell.name); }).join(', ')
        : hashChangedOnly
            ? Object(formatting["d" /* formatUnexpectedHashChange */])(cell.name, false)
            : "\"" + cell.name + "\" changed by " + stringChange;
    return (react_default.a.createElement(Td, { accessibilityLabel: tooltipText, style: [style, { backgroundColor: backgroundColor }] }, text ? (react_default.a.createElement(Hoverable["a" /* default */], null, function (isHovered) { return (react_default.a.createElement(View["a" /* default */], { ref: viewRef, style: DeltaCell_styles.textWrapper, testID: "delta" },
        sizeDelta !== 0 || hashChangedOnly ? (react_default.a.createElement(Text["a" /* default */], null,
            errorBudgets.length ? (react_default.a.createElement(icons_Error, null)) : warningBudgets.length ? (react_default.a.createElement(icons_Warning, null)) : hashChangedOnly ? (react_default.a.createElement(Hash, null)) : (''),
            ' ')) : null,
        sizeDelta !== 0 ? react_default.a.createElement(Text["a" /* default */], null, text) : null,
        isHovered ? react_default.a.createElement(components_Tooltip, { relativeTo: viewRef, text: tooltipText }) : null)); })) : null));
};
var DeltaCell_styles = StyleSheet["a" /* default */].create({
    textWrapper: {
        flexDirection: 'row',
        justifyContent: 'flex-end'
    }
});
/* harmony default export */ var ComparisonTable_DeltaCell = (react_default.a.memo(DeltaCell));

// CONCATENATED MODULE: ./src/components/ComparisonTable/TotalCell.tsx




var TotalCell = function (props) {
    var cell = props.cell, sizeKey = props.sizeKey, style = props.style;
    var value = cell.sizes[sizeKey];
    var text = value === 0 ? '' : Object(formatting["b" /* formatBytes */])(value);
    return react_default.a.createElement(Td, { style: style }, text ? react_default.a.createElement(Text["a" /* default */], null, text) : null);
};
/* harmony default export */ var ComparisonTable_TotalCell = (react_default.a.memo(TotalCell));

// EXTERNAL MODULE: ../comparator/index.ts + 6 modules
var comparator_0 = __webpack_require__(41);

// CONCATENATED MODULE: ./src/components/ComparisonTable/BodyRow.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */








var BodyRow = function (props) {
    var colorScale = props.colorScale, isActive = props.isActive, isHovered = props.isHovered, onDisableArtifact = props.onDisableArtifact, onEnableArtifact = props.onEnableArtifact, onFocusArtifact = props.onFocusArtifact, onHoverArtifact = props.onHoverArtifact, row = props.row, rowIndex = props.rowIndex, sizeKey = props.sizeKey;
    var mapBodyCell = function (cell, i) {
        switch (cell.type) {
            case comparator_0["a" /* CellType */].ARTIFACT: {
                return (react_default.a.createElement(ComparisonTable_ArtifactCell, { cell: cell, color: colorScale(rowIndex), key: i, isActive: isActive, onDisable: onDisableArtifact, onEnable: onEnableArtifact, onFocus: onFocusArtifact }));
            }
            case comparator_0["a" /* CellType */].DELTA:
                return react_default.a.createElement(ComparisonTable_DeltaCell, { cell: cell, key: i, sizeKey: sizeKey });
            case comparator_0["a" /* CellType */].TOTAL:
                return react_default.a.createElement(ComparisonTable_TotalCell, { cell: cell, key: i, sizeKey: sizeKey });
            default:
                return null;
        }
    };
    var backgroundColor = 'transparent';
    var artifactName = row[0].text;
    if (isHovered) {
        var color = Object(src["d" /* hsl */])(colorScale(rowIndex));
        color.l = 0.9;
        backgroundColor = color.toString();
    }
    var handleMouseEnter = react_default.a.useCallback(function () {
        onHoverArtifact(isActive ? artifactName : null);
    }, [artifactName, isActive, onHoverArtifact]);
    // @ts-ignore
    var columns = row.map(mapBodyCell);
    return (react_default.a.createElement(Tr, { onMouseEnter: handleMouseEnter, style: [BodyRow_styles.row, { backgroundColor: backgroundColor }] }, columns));
};
var BodyRow_styles = StyleSheet["a" /* default */].create({
    row: {
        transitionProperty: 'background-color',
        transitionDuration: '0.1s'
    }
});
/* harmony default export */ var ComparisonTable_BodyRow = (react_default.a.memo(BodyRow));

// CONCATENATED MODULE: ./src/icons/Folder.tsx
var Folder_assign = (undefined && undefined.__assign) || function () {
    Folder_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Folder_assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/google/material-design-icons
 *
 * SVG contents redistributed under Apache License 2.0:
 * https://github.com/google/material-design-icons/blob/master/LICENSE
 * Copyright 2015 Google, Inc. All Rights Reserved.
 */



var Folder = function (props) {
    return Object(createElement["a" /* default */])('svg', Folder_assign(Folder_assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("g", null,
        react_default.a.createElement("path", { d: "M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" }),
        react_default.a.createElement("path", { d: "M0 0h24v24H0z", fill: "none" })));
};
Folder.metadata = { height: 24, width: 24 };
/* harmony default export */ var icons_Folder = (Folder);

// CONCATENATED MODULE: ./src/components/ComparisonTable/GroupCell.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */







var GroupCell = function (props) {
    var _a = props.cell, artifactNames = _a.artifactNames, text = _a.text, disabled = props.disabled, isActive = props.isActive, onDisable = props.onDisable, onEnable = props.onEnable, onFocus = props.onFocus, style = props.style;
    var nameRef = react_default.a.useRef(null);
    var handleValueChange = react_default.a.useCallback(function (toggled) {
        toggled ? onEnable(artifactNames) : onDisable(artifactNames);
    }, [artifactNames, onDisable, onEnable]);
    var handleFocus = react_default.a.useCallback(function () {
        onFocus(artifactNames);
    }, [artifactNames, onFocus]);
    return (react_default.a.createElement(Th, { style: style },
        react_default.a.createElement(View["a" /* default */], { style: GroupCell_styles.artifact },
            react_default.a.createElement(Hoverable["a" /* default */], null, function (isHovered) { return (react_default.a.createElement(TouchableOpacity["a" /* default */], { accessibilityRole: "button", onPress: handleFocus, style: GroupCell_styles.name },
                react_default.a.createElement(View["a" /* default */], { ref: nameRef },
                    react_default.a.createElement(Text["a" /* default */], { style: isHovered && GroupCell_styles.hoveredText },
                        react_default.a.createElement(icons_Folder, { style: [GroupCell_styles.folder, isHovered && GroupCell_styles.hoveredText], testID: "groupicon" }),
                        " ",
                        text),
                    isHovered ? react_default.a.createElement(components_Tooltip, { relativeTo: nameRef, text: "" + artifactNames.join(', ') }) : null))); }),
            react_default.a.createElement(View["a" /* default */], { style: GroupCell_styles.switch },
                react_default.a.createElement(Switch["a" /* default */], { activeThumbColor: theme["b" /* Color */].Primary30, activeTrackColor: theme["b" /* Color */].Primary00, disabled: disabled, onValueChange: handleValueChange, value: isActive })))));
};
var GroupCell_styles = StyleSheet["a" /* default */].create({
    artifact: {
        flexDirection: 'row',
        justifyContent: 'space-between',
        paddingVertical: theme["f" /* Spacing */].Xxsmall
    },
    name: {
        flexShrink: 1,
        flexGrow: 1,
        alignItems: 'flex-start',
        justifyContent: 'center',
        paddingEnd: theme["f" /* Spacing */].Xsmall
    },
    folder: {
        color: theme["b" /* Color */].Gray40
    },
    switch: {
        paddingStart: theme["f" /* Spacing */].Xsmall
    },
    hoveredText: {
        color: theme["b" /* Color */].Primary30
    }
});
/* harmony default export */ var ComparisonTable_GroupCell = (react_default.a.memo(GroupCell));

// CONCATENATED MODULE: ./src/components/ComparisonTable/GroupRow.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */








var GroupRow = function (props) {
    var isActive = props.isActive, onDisable = props.onDisable, onEnable = props.onEnable, onFocus = props.onFocus, onHover = props.onHover, row = props.row, sizeKey = props.sizeKey;
    var mapGroupCell = function (cell, i) {
        switch (cell.type) {
            case comparator_0["a" /* CellType */].GROUP: {
                return (react_default.a.createElement(ComparisonTable_GroupCell, { cell: cell, key: i, isActive: isActive, onDisable: onDisable, onEnable: onEnable, onFocus: onFocus, style: GroupRow_styles.cell }));
            }
            case comparator_0["a" /* CellType */].TOTAL:
                return react_default.a.createElement(ComparisonTable_TotalCell, { cell: cell, key: i, sizeKey: sizeKey, style: GroupRow_styles.cell });
            case comparator_0["a" /* CellType */].TOTAL_DELTA:
                return react_default.a.createElement(ComparisonTable_DeltaCell, { cell: cell, key: i, sizeKey: sizeKey, style: GroupRow_styles.cell });
        }
    };
    var artifactNames = row[0].artifactNames;
    var handleMouseEnter = react_default.a.useCallback(function () {
        onHover(isActive ? artifactNames : []);
    }, [artifactNames, isActive, onHover]);
    // @ts-ignore
    var rows = row.map(mapGroupCell);
    return (react_default.a.createElement(Tr, { onMouseEnter: handleMouseEnter, style: [GroupRow_styles.row] }, rows));
};
var GroupRow_styles = StyleSheet["a" /* default */].create({
    row: {
        backgroundColor: theme["b" /* Color */].Gray05,
        transitionProperty: 'background-color',
        transitionDuration: '0.1s'
    },
    cell: {
        borderColor: theme["b" /* Color */].Gray20
    }
});
/* harmony default export */ var ComparisonTable_GroupRow = (react_default.a.memo(GroupRow));

// CONCATENATED MODULE: ./src/icons/Info.tsx
var Info_assign = (undefined && undefined.__assign) || function () {
    Info_assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return Info_assign.apply(this, arguments);
};
/**
 * Material design redistributed from https://github.com/google/material-design-icons
 *
 * SVG contents redistributed under Apache License 2.0:
 * https://github.com/google/material-design-icons/blob/master/LICENSE
 * Copyright 2015 Google, Inc. All Rights Reserved.
 */



var Info = function (props) {
    return Object(createElement["a" /* default */])('svg', Info_assign(Info_assign({}, props), { style: [styles["a" /* default */].root, props.style], viewBox: '0 0 24 24' }), react_default.a.createElement("g", null,
        react_default.a.createElement("path", { d: "M0 0h24v24H0z", fill: "none" }),
        react_default.a.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z" })));
};
Info.metadata = { height: 24, width: 24 };
/* harmony default export */ var icons_Info = (Info);

// EXTERNAL MODULE: ./src/components/Menu.tsx
var Menu = __webpack_require__(64);

// EXTERNAL MODULE: ./src/components/MenuItem.tsx
var MenuItem = __webpack_require__(39);

// CONCATENATED MODULE: ./src/components/ComparisonTable/RevisionCell.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */










var RevisionCell = function (props) {
    var cell = props.cell, onFocus = props.onFocus, onRemove = props.onRemove, style = props.style;
    var contentRef = react_default.a.useRef(null);
    var _a = react_default.a.useState(false), showMenu = _a[0], toggleMenu = _a[1];
    var handleToggleMenu = react_default.a.useCallback(function (event) {
        event.preventDefault();
        toggleMenu(function (showMenu) { return !showMenu; });
    }, []);
    var handleRemove = react_default.a.useCallback(function (event) {
        onRemove(cell.revision);
        handleToggleMenu(event);
    }, [cell.revision, handleToggleMenu, onRemove]);
    var handleFocus = react_default.a.useCallback(function () {
        onFocus(cell.revision);
    }, [cell.revision, onFocus]);
    var handleFocusFromMenu = react_default.a.useCallback(function (event) {
        onFocus(cell.revision);
        handleToggleMenu(event);
    }, [cell.revision, handleToggleMenu, onFocus]);
    return (react_default.a.createElement(react_default.a.Fragment, null,
        react_default.a.createElement(Hoverable["a" /* default */], null, function (isHovered) { return (react_default.a.createElement(Th, { accessibilityLabel: "Build " + cell.revision, style: [style, isHovered && RevisionCell_styles.hovered] },
            react_default.a.createElement(TouchableOpacity["a" /* default */], { accessibilityRole: "button", onContextMenu: handleToggleMenu, onPress: handleFocus, ref: contentRef, style: RevisionCell_styles.content },
                react_default.a.createElement(Text["a" /* default */], { style: RevisionCell_styles.revision }, Object(formatting["c" /* formatSha */])(cell.revision))))); }),
        showMenu ? (react_default.a.createElement(Menu["a" /* default */], { onDismiss: handleToggleMenu, relativeTo: contentRef },
            react_default.a.createElement(MenuItem["a" /* default */], { icon: icons_Info, label: "More info", onPress: handleFocusFromMenu }),
            react_default.a.createElement(MenuItem["a" /* default */], { icon: icons_Remove, label: "Remove", onPress: handleRemove }))) : null));
};
var RevisionCell_styles = StyleSheet["a" /* default */].create({
    hovered: {
        backgroundColor: theme["b" /* Color */].Primary00
    },
    content: {
        justifyContent: 'center',
        width: '100%',
        height: '100%'
    },
    revision: {
        fontWeight: 'bold'
    }
});
/* harmony default export */ var ComparisonTable_RevisionCell = (react_default.a.memo(RevisionCell));

// CONCATENATED MODULE: ./src/components/ComparisonTable/RevisionDeltaCell.tsx






var RevisionDeltaCell = function (props) {
    var _a = props.cell, againstRevision = _a.againstRevision, deltaIndex = _a.deltaIndex, revision = _a.revision;
    var viewRef = react_default.a.useRef(null);
    return (react_default.a.createElement(Th, { accessibilityLabel: "Delta from " + againstRevision + " to " + revision, style: props.style },
        react_default.a.createElement(Hoverable["a" /* default */], null, function (isHovered) { return (react_default.a.createElement(View["a" /* default */], { ref: viewRef, testID: "delta" },
            react_default.a.createElement(Text["a" /* default */], { style: RevisionDeltaCell_styles.delta }, "\uD835\uDEAB" + deltaIndex),
            isHovered ? (react_default.a.createElement(components_Tooltip, { relativeTo: viewRef, text: "Delta from " + Object(formatting["c" /* formatSha */])(againstRevision) + " to " + Object(formatting["c" /* formatSha */])(revision) })) : null)); })));
};
var RevisionDeltaCell_styles = StyleSheet["a" /* default */].create({
    delta: {
        fontWeight: 'bold'
    }
});
/* harmony default export */ var ComparisonTable_RevisionDeltaCell = (react_default.a.memo(RevisionDeltaCell));

// CONCATENATED MODULE: ./src/components/ComparisonTable/TextCell.tsx



var TextCell = function (props) {
    var El = props.header ? Th : Td;
    return (react_default.a.createElement(El, { style: props.style },
        react_default.a.createElement(Text["a" /* default */], null, props.cell.text)));
};
/* harmony default export */ var ComparisonTable_TextCell = (react_default.a.memo(TextCell));

// CONCATENATED MODULE: ./src/components/ComparisonTable/HeaderRow.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */







var HeaderRow = function (props) {
    var onFocusRevision = props.onFocusRevision, onRemoveRevision = props.onRemoveRevision, row = props.row;
    var mapHeaderCell = function (cell, i) {
        switch (cell.type) {
            case comparator_0["a" /* CellType */].TEXT:
                return react_default.a.createElement(ComparisonTable_TextCell, { cell: cell, header: true, key: cell.text, style: HeaderRow_styles.headerCell });
            case comparator_0["a" /* CellType */].REVISION:
                return (react_default.a.createElement(ComparisonTable_RevisionCell, { cell: cell, key: cell.revision, onFocus: onFocusRevision, onRemove: onRemoveRevision, style: HeaderRow_styles.headerCell }));
            case comparator_0["a" /* CellType */].REVISION_DELTA:
                return (react_default.a.createElement(ComparisonTable_RevisionDeltaCell, { cell: cell, key: cell.revision + "-" + cell.againstRevision + "-" + i, style: HeaderRow_styles.headerCell }));
        }
    };
    return react_default.a.createElement(Tr, null, row.map(mapHeaderCell));
};
var HeaderRow_styles = StyleSheet["a" /* default */].create({
    headerCell: {
        backgroundColor: 'white',
        position: 'sticky',
        top: 0,
        zIndex: 4,
        height: 'calc(4rem - 1px)'
    }
});
/* harmony default export */ var ComparisonTable_HeaderRow = (react_default.a.memo(HeaderRow));

// CONCATENATED MODULE: ./src/components/ComparisonTable/ComparisonTable.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */






var emptyArray = [];
var ComparisonTable = function (props) {
    var activeArtifacts = props.activeArtifacts, colorScale = props.colorScale, comparator = props.comparator, disabledArtifactsVisible = props.disabledArtifactsVisible, hoveredArtifacts = props.hoveredArtifacts, onDisableArtifacts = props.onDisableArtifacts, onEnableArtifacts = props.onEnableArtifacts, onFocusArtifacts = props.onFocusArtifacts, onFocusRevision = props.onFocusRevision, onHoverArtifacts = props.onHoverArtifacts, onRemoveRevision = props.onRemoveRevision, sizeKey = props.sizeKey;
    var matrix = comparator.toJSON();
    var handleMouseOut = react_default.a.useCallback(function () {
        onHoverArtifacts([]);
    }, [onHoverArtifacts]);
    var handleHoverArtifact = react_default.a.useCallback(function (artifactName) {
        onHoverArtifacts(artifactName ? [artifactName] : emptyArray);
    }, [onHoverArtifacts]);
    var handleDisableArtifact = react_default.a.useCallback(function (artifactName) {
        onDisableArtifacts([artifactName]);
    }, [onDisableArtifacts]);
    var handleEnableArtifact = react_default.a.useCallback(function (artifactName) {
        onEnableArtifacts([artifactName]);
    }, [onEnableArtifacts]);
    var handleFocusArtifact = react_default.a.useCallback(function (artifactName) {
        onFocusArtifacts([artifactName]);
    }, [onFocusArtifacts]);
    return (react_default.a.createElement(Table, { onMouseLeave: handleMouseOut, style: ComparisonTable_styles.table },
        react_default.a.createElement(Thead, null,
            react_default.a.createElement(ComparisonTable_HeaderRow, { onFocusRevision: onFocusRevision, onRemoveRevision: onRemoveRevision, row: matrix.header }),
            matrix.groups.map(function (row) {
                var _a = row[0], artifactNames = _a.artifactNames, groupName = _a.text;
                var isActive = Object.keys(activeArtifacts)
                    .filter(function (artifactName) { return artifactNames.includes(artifactName); })
                    .every(function (artifactName) { return activeArtifacts[artifactName]; });
                return (react_default.a.createElement(ComparisonTable_GroupRow, { isActive: isActive, key: groupName, onDisable: onDisableArtifacts, onEnable: onEnableArtifacts, onFocus: onFocusArtifacts, onHover: onHoverArtifacts, row: row, sizeKey: sizeKey }));
            })),
        react_default.a.createElement(Tbody, null, matrix.artifacts.map(function (row, i) {
            var artifactName = row[0].text;
            var isActive = activeArtifacts[artifactName];
            if (!isActive && !disabledArtifactsVisible) {
                return null;
            }
            return (react_default.a.createElement(ComparisonTable_BodyRow, { colorScale: colorScale, isActive: isActive, isHovered: hoveredArtifacts.includes(artifactName), key: artifactName, onDisableArtifact: handleDisableArtifact, onEnableArtifact: handleEnableArtifact, onFocusArtifact: handleFocusArtifact, onHoverArtifact: handleHoverArtifact, row: row, rowIndex: i, sizeKey: sizeKey }));
        }))));
};
var ComparisonTable_styles = StyleSheet["a" /* default */].create({
    table: {
        position: 'relative'
    }
});
/* harmony default export */ var ComparisonTable_ComparisonTable = (ComparisonTable);

// CONCATENATED MODULE: ./src/components/ComparisonTable/index.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */



// EXTERNAL MODULE: ./node_modules/react-native-web/dist/exports/ScrollView/index.js + 4 modules
var ScrollView = __webpack_require__(133);

// CONCATENATED MODULE: ./src/views/Comparison.tsx
/**
 * Copyright (c) 2019 Paul Armstrong
 */








var Comparison = function (props) {
    var style = props.style;
    var activeArtifacts = Object(es["c" /* useSelector */])(function (state) { return state.activeArtifacts; });
    var colorScaleName = Object(es["c" /* useSelector */])(function (state) { return state.colorScale; });
    var comparator = Object(es["c" /* useSelector */])(function (state) { return state.activeComparator; });
    var disabledArtifactsVisible = Object(es["c" /* useSelector */])(function (state) { return state.disabledArtifactsVisible; });
    var focusedRevision = Object(es["c" /* useSelector */])(function (state) { return state.focusedRevision; });
    var hoveredArtifacts = Object(es["c" /* useSelector */])(function (state) { return state.hoveredArtifacts; });
    var sizeKey = Object(es["c" /* useSelector */])(function (state) { return state.sizeKey; });
    var dispatch = Object(es["b" /* useDispatch */])();
    var colorScale = react_default.a.useMemo(function () { return ColorScale["a" /* default */][colorScaleName].domain([0, comparator.artifactNames.length]); }, [
        colorScaleName,
        comparator.artifactNames.length
    ]);
    var handleDisableArtifacts = react_default.a.useCallback(function (artifactNames) {
        dispatch(Object(actions["f" /* setArtifactActive */])(artifactNames, false));
    }, [dispatch]);
    var handleEnableArtifacts = react_default.a.useCallback(function (artifactNames) {
        dispatch(Object(actions["f" /* setArtifactActive */])(artifactNames, true));
    }, [dispatch]);
    var handleFocusArtifacts = react_default.a.useCallback(function (artifactNames) {
        dispatch(Object(actions["f" /* setArtifactActive */])(artifactNames, true));
        dispatch(Object(actions["f" /* setArtifactActive */])(Object.keys(activeArtifacts).filter(function (name) { return !artifactNames.includes(name); }), false));
    }, [activeArtifacts, dispatch]);
    var handleFocusRevision = react_default.a.useCallback(function (revision) {
        dispatch(Object(actions["i" /* setFocusedRevision */])(revision));
    }, [dispatch]);
    var handleRemoveRevision = react_default.a.useCallback(function (revision) {
        dispatch(Object(actions["d" /* removeComparedRevision */])(revision));
    }, [dispatch]);
    var handleHoverArtifacts = react_default.a.useCallback(function (artifacts) {
        dispatch(Object(actions["k" /* setHoveredArtifacts */])(artifacts));
    }, [dispatch]);
    return (react_default.a.createElement(View["a" /* default */], { style: style },
        react_default.a.createElement(ScrollView["a" /* default */], { horizontal: true, style: Comparison_styles.tableScroll },
            react_default.a.createElement(ScrollView["a" /* default */], null,
                react_default.a.createElement(ComparisonTable_ComparisonTable, { activeArtifacts: activeArtifacts, colorScale: colorScale, comparator: comparator, disabledArtifactsVisible: disabledArtifactsVisible, hoveredArtifacts: hoveredArtifacts, onDisableArtifacts: handleDisableArtifacts, onEnableArtifacts: handleEnableArtifacts, onFocusArtifacts: handleFocusArtifacts, onFocusRevision: handleFocusRevision, onHoverArtifacts: handleHoverArtifacts, onRemoveRevision: handleRemoveRevision, sizeKey: sizeKey }))),
        focusedRevision ? (react_default.a.createElement(react_default.a.Suspense, { fallback: null },
            react_default.a.createElement(View["a" /* default */], { style: Comparison_styles.buildInfo, testID: "buildinfo" },
                react_default.a.createElement(components_BuildInfo, { focusedRevision: focusedRevision })))) : null));
};
var Comparison_styles = StyleSheet["a" /* default */].create({
    tableScroll: {
        width: '100%',
        transitionProperty: 'height',
        transitionDuration: '0.1s'
    },
    buildInfo: {
        width: '100%',
        borderTopColor: theme["b" /* Color */].Gray10,
        borderTopWidth: StyleSheet["a" /* default */].hairlineWidth,
        animationDuration: '0.1s',
        animationKeyframes: [
            {
                '0%': { transform: [{ translateY: '100%' }] },
                '100%': { transform: [{ translateY: '0%' }] }
            }
        ],
        animationTimingFunction: 'ease-out',
        animationIterationCount: 1
    }
});
/* harmony default export */ var views_Comparison = __webpack_exports__["default"] = (Comparison);


/***/ })

};;