@uiw/react-native
Version:
UIW for React Native
239 lines (207 loc) • 23.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const DEVICE_WIDTH = _reactNative.Dimensions.get('window').width;
const DEVICE_HEIGHT = _reactNative.Dimensions.get('window').height;
class Drawer extends _react.Component {
constructor(props) {
super(props);
this.onOverlayClick = e => {
const {
maskClosable
} = this.props;
if (!maskClosable) {
return false;
}
e.stopPropagation();
this.closeDrawer();
};
this.state = {
zIndexValue: 0,
overlayValue: new _reactNative.Animated.Value(0),
drawerValue: new _reactNative.Animated.ValueXY({ ...this.getInitPosition()
})
};
}
componentDidMount() {
if (this.props.isOpen) {
this.openDrawer();
}
}
UNSAFE_componentWillReceiveProps(nextProps) {
if (nextProps.isOpen !== this.props.isOpen) {
this.handleDrawer(!!nextProps.isOpen);
}
}
render() {
const {
isOpen,
style,
drawerWidth,
drawerBackgroundColor,
maskProps,
placement,
drawerHeight
} = this.props;
const {
drawerValue,
overlayValue,
zIndexValue
} = this.state;
const isTopOrBottom = placement === 'top' || placement === 'bottom';
const changeStyle = isTopOrBottom ? 'height' : 'width';
const dynamicDrawerStyles = {
backgroundColor: drawerBackgroundColor
};
if (isTopOrBottom) {
dynamicDrawerStyles.top = placement === 'top' ? 0 : null;
dynamicDrawerStyles.bottom = placement === 'bottom' ? 0 : null;
dynamicDrawerStyles.height = drawerWidth;
dynamicDrawerStyles.width = '100%';
} else {
dynamicDrawerStyles.left = placement === 'left' ? 0 : null;
dynamicDrawerStyles.right = placement === 'right' ? 0 : null;
dynamicDrawerStyles.width = drawerWidth;
}
const overlayOpacity = overlayValue.interpolate({
inputRange: [0, 1],
outputRange: [0, 0.3],
extrapolate: 'clamp'
});
return <_react.Fragment>
<_reactNative.Animated.View style={[styles.drawer, dynamicDrawerStyles, style, // eslint-disable-next-line react-native/no-inline-styles
{
[changeStyle]: isOpen ? isTopOrBottom ? drawerHeight : drawerWidth : 0,
transform: [{
translateX: drawerValue.x
}, // x轴移动
{
translateY: drawerValue.y
} // y轴移动
]
}]}>
{this.props.children}
</_reactNative.Animated.View>
<_reactNative.Animated.View pointerEvents={isOpen ? 'auto' : 'none'} style={[styles.overlay, styles.positionFull, maskProps, {
// opacity: overlayValue,
opacity: overlayOpacity,
zIndex: zIndexValue
}]}>
<_reactNative.TouchableOpacity style={[styles.positionFull, // eslint-disable-next-line react-native/no-inline-styles
{
zIndex: 3003,
position: 'absolute'
}]} onPress={this.onOverlayClick.bind(this)} />
</_reactNative.Animated.View>
</_react.Fragment>;
}
handleDrawer(isOpen) {
isOpen ? this.openDrawer() : this.closeDrawer();
}
getInitPosition() {
const {
drawerWidth,
placement,
drawerHeight
} = this.props;
const xy = {
x: 0,
y: 0
};
if (placement === 'left') {
xy.x = -(drawerWidth || 0);
}
if (placement === 'right') {
xy.x = DEVICE_WIDTH || 0;
}
if (placement === 'top') {
xy.y = -(drawerHeight || 0);
}
if (placement === 'bottom') {
xy.y = DEVICE_HEIGHT || 0;
}
return xy;
}
openDrawer() {
this.setState({
zIndexValue: 3002
});
_reactNative.Animated.parallel([_reactNative.Animated.spring(this.state.drawerValue, {
toValue: {
x: 0,
y: 0
},
overshootClamping: true,
useNativeDriver: true
}), _reactNative.Animated.spring(this.state.overlayValue, {
toValue: 0.7,
overshootClamping: true,
useNativeDriver: true
})]).start(() => {
this.props.openDrawer(true);
this.props.onChange(true);
});
}
closeDrawer() {
const {
drawerValue,
overlayValue
} = this.state;
_reactNative.Animated.parallel([_reactNative.Animated.spring(drawerValue, {
toValue: { ...this.getInitPosition()
},
overshootClamping: true,
useNativeDriver: true
}), _reactNative.Animated.spring(overlayValue, {
toValue: 0,
overshootClamping: true,
useNativeDriver: true
})]).start(() => {
this.props.closeDrawer(false);
this.props.onChange(false);
this.setState({
zIndexValue: 0
});
});
}
}
exports.default = Drawer;
Drawer.defaultProps = {
placement: 'left',
drawerBackgroundColor: '#fff',
drawerWidth: 300,
drawerHeight: 500,
maskClosable: true,
isOpen: false,
onChange: () => null,
openDrawer: () => null,
closeDrawer: () => null
};
const styles = _reactNative.StyleSheet.create({
drawer: {
position: 'absolute',
top: 0,
bottom: 0,
flex: 1,
zIndex: 3004
},
positionFull: {
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
right: 0
},
overlay: {
backgroundColor: '#000',
zIndex: 3002
}
});
module.exports = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EcmF3ZXIvaW5kZXgudHN4Il0sIm5hbWVzIjpbIkRFVklDRV9XSURUSCIsIkRpbWVuc2lvbnMiLCJnZXQiLCJ3aWR0aCIsIkRFVklDRV9IRUlHSFQiLCJoZWlnaHQiLCJEcmF3ZXIiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwib25PdmVybGF5Q2xpY2siLCJlIiwibWFza0Nsb3NhYmxlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2xvc2VEcmF3ZXIiLCJzdGF0ZSIsInpJbmRleFZhbHVlIiwib3ZlcmxheVZhbHVlIiwiQW5pbWF0ZWQiLCJWYWx1ZSIsImRyYXdlclZhbHVlIiwiVmFsdWVYWSIsImdldEluaXRQb3NpdGlvbiIsImNvbXBvbmVudERpZE1vdW50IiwiaXNPcGVuIiwib3BlbkRyYXdlciIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibmV4dFByb3BzIiwiaGFuZGxlRHJhd2VyIiwicmVuZGVyIiwic3R5bGUiLCJkcmF3ZXJXaWR0aCIsImRyYXdlckJhY2tncm91bmRDb2xvciIsIm1hc2tQcm9wcyIsInBsYWNlbWVudCIsImRyYXdlckhlaWdodCIsImlzVG9wT3JCb3R0b20iLCJjaGFuZ2VTdHlsZSIsImR5bmFtaWNEcmF3ZXJTdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVybGF5T3BhY2l0eSIsImludGVycG9sYXRlIiwiaW5wdXRSYW5nZSIsIm91dHB1dFJhbmdlIiwiZXh0cmFwb2xhdGUiLCJzdHlsZXMiLCJkcmF3ZXIiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYIiwieCIsInRyYW5zbGF0ZVkiLCJ5IiwiY2hpbGRyZW4iLCJvdmVybGF5IiwicG9zaXRpb25GdWxsIiwib3BhY2l0eSIsInpJbmRleCIsInBvc2l0aW9uIiwiYmluZCIsInh5Iiwic2V0U3RhdGUiLCJwYXJhbGxlbCIsInNwcmluZyIsInRvVmFsdWUiLCJvdmVyc2hvb3RDbGFtcGluZyIsInVzZU5hdGl2ZURyaXZlciIsInN0YXJ0Iiwib25DaGFuZ2UiLCJkZWZhdWx0UHJvcHMiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiZmxleCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7QUFVQSxNQUFNQSxZQUFZLEdBQUdDLHdCQUFXQyxHQUFYLENBQWUsUUFBZixFQUF5QkMsS0FBOUM7O0FBQ0EsTUFBTUMsYUFBYSxHQUFHSCx3QkFBV0MsR0FBWCxDQUFlLFFBQWYsRUFBeUJHLE1BQS9DOztBQW9CZSxNQUFNQyxNQUFOLFNBQXFCQyxnQkFBckIsQ0FBeUQ7QUFZdEVDLEVBQUFBLFdBQVcsQ0FBQ0MsS0FBRCxFQUFxQjtBQUM5QixVQUFNQSxLQUFOOztBQUQ4QixTQWtCaENDLGNBbEJnQyxHQWtCZEMsQ0FBRCxJQUE4QjtBQUM3QyxZQUFNO0FBQUVDLFFBQUFBO0FBQUYsVUFBbUIsS0FBS0gsS0FBOUI7O0FBQ0EsVUFBSSxDQUFDRyxZQUFMLEVBQW1CO0FBQ2pCLGVBQU8sS0FBUDtBQUNEOztBQUNERCxNQUFBQSxDQUFDLENBQUNFLGVBQUY7QUFDQSxXQUFLQyxXQUFMO0FBQ0QsS0F6QitCOztBQUU5QixTQUFLQyxLQUFMLEdBQWE7QUFDWEMsTUFBQUEsV0FBVyxFQUFFLENBREY7QUFFWEMsTUFBQUEsWUFBWSxFQUFFLElBQUlDLHNCQUFTQyxLQUFiLENBQW1CLENBQW5CLENBRkg7QUFHWEMsTUFBQUEsV0FBVyxFQUFFLElBQUlGLHNCQUFTRyxPQUFiLENBQXFCLEVBQUUsR0FBRyxLQUFLQyxlQUFMO0FBQUwsT0FBckI7QUFIRixLQUFiO0FBS0Q7O0FBQ0RDLEVBQUFBLGlCQUFpQixHQUFHO0FBQ2xCLFFBQUksS0FBS2QsS0FBTCxDQUFXZSxNQUFmLEVBQXVCO0FBQ3JCLFdBQUtDLFVBQUw7QUFDRDtBQUNGOztBQUNEQyxFQUFBQSxnQ0FBZ0MsQ0FBQ0MsU0FBRCxFQUF5QjtBQUN2RCxRQUFJQSxTQUFTLENBQUNILE1BQVYsS0FBcUIsS0FBS2YsS0FBTCxD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LFlBQVksRUFBRTtBQUNaRyxJQUFBQSxRQUFRLEVBQUUsVUFERTtBQUVackIsSUFBQUEsR0FBRyxFQUFFLENBRk87QUFHWkMsSUFBQUEsTUFBTSxFQUFFLENBSEk7QUFJWkMsSUFBQUEsSUFBSSxFQUFFLENBSk07QUFLWkMsSUFBQUEsS0FBSyxFQUFFO0FBTEssR0FSaUI7QUFlL0JjLEVBQUFBLE9BQU8sRUFBRTtBQUNQbEIsSUFBQUEsZUFBZSxFQUFFLE1BRFY7QUFFUHFCLElBQUFBLE1BQU0sRUFBRTtBQUZEO0FBZnNCLENBQWxCLENBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEFuaW1hdGVkLFxuICBTdHlsZVNoZWV0LFxuICBUb3VjaGFibGVPcGFjaXR5LFxuICBWaWV3UHJvcHMsXG4gIFZpZXdTdHlsZSxcbiAgRGltZW5zaW9ucyxcbiAgR2VzdHVyZVJlc3BvbmRlckV2ZW50LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5jb25zdCBERVZJQ0VfV0lEVEggPSBEaW1lbnNpb25zLmdldCgnd2luZG93Jykud2lkdGg7XG5jb25zdCBERVZJQ0VfSEVJR0hUID0gRGltZW5zaW9ucy5nZXQoJ3dpbmRvdycpLmhlaWdodDtcblxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJQcm9wcyBleHRlbmRzIFZpZXdQcm9wcyB7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIG1hc2tDbG9zYWJsZT86IGJvb2xlYW47XG4gIHBsYWNlbWVudD86ICdyaWdodCcgfCAnbGVmdCcgfCAndG9wJyB8ICdib3R0b20nO1xuICBkcmF3ZXJXaWR0aD86IG51bWJlcjtcbiAgZHJhd2VySGVpZ2h0PzogbnVtYmVyO1xuICBtYXNrUHJvcHM/OiBWaWV3U3R5bGU7XG4gIGRyYXdlckJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAoaXNPcGVuOiBib29sZWFuKSA9PiB2b2lkO1xuICBvcGVuRHJhd2VyPzogKGlzT3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgY2xvc2VEcmF3ZXI/OiAoaXNPcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJTdGF0ZSB7XG4gIGRyYXdlclZhbHVlOiBBbmltYXRlZC5WYWx1ZVhZO1xuICBvdmVybGF5VmFsdWU6IEFuaW1hdGVkLlZhbHVlO1xuICB6SW5kZXhWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3ZXIgZXh0ZW5kcyBDb21wb25lbnQ8RHJhd2VyUHJvcHMsIERyYXdlclN0YXRlPiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcGxhY2VtZW50OiAnbGVmdCcsXG4gICAgZHJhd2VyQmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgZHJhd2VyV2lkdGg6IDMwMCxcbiAgICBkcmF3ZXJIZWlnaHQ6IDUwMCxcbiAgICBtYXNrQ2xvc2FibGU6IHRydWUsXG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBvbkNoYW5nZTogKCkgPT4gbnVsbCxcbiAgICBvcGVuRHJhd2VyOiAoKSA9PiBudWxsLFxuICAgIGNsb3NlRHJhd2VyOiAoKSA9PiBudWxsLFxuICB9O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRHJhd2VyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHpJbmRleFZhbHVlOiAwLFxuICAgICAgb3ZlcmxheVZhbHVlOiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBkcmF3ZXJWYWx1ZTogbmV3IEFuaW1hdGVkLlZhbHVlWFkoeyAuLi50aGlzLmdldEluaXRQb3NpdGlvbigpIH0pLFxuICAgIH07XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICB0aGlzLm9wZW5EcmF3ZXIoKTtcbiAgICB9XG4gIH1cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBEcmF3ZXJQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMuaXNPcGVuICE9PSB0aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgdGhpcy5oYW5kbGVEcmF3ZXIoISFuZXh0UHJvcHMuaXNPcGVuKTtcbiAgICB9XG4gIH1cbiAgb25PdmVybGF5Q2xpY2sgPSAoZTogR2VzdHVyZVJlc3BvbmRlckV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBtYXNrQ2xvc2FibGUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFtYXNrQ2xvc2FibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsb3NlRHJhd2VyKCk7XG4gIH07XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGlzT3Blbiwgc3R5bGUsIGRyYXdlcldpZHRoLCBkcmF3ZXJCYWNrZ3JvdW5kQ29sb3IsIG1hc2tQcm9wcywgcGxhY2VtZW50LCBkcmF3ZXJIZWlnaHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBkcmF3ZXJWYWx1ZSwgb3ZlcmxheVZhbHVlLCB6SW5kZXhWYWx1ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpc1RvcE9yQm90dG9tID0gcGxhY2VtZW50ID09PSAndG9wJyB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nO1xuICAgIGNvbnN0IGNoYW5nZVN0eWxlID0gaXNUb3BPckJvdHRvbSA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICBjb25zdCBkeW5hbWljRHJhd2VyU3R5bGVzOiBhbnkgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGRyYXdlckJhY2tncm91bmRDb2xvcixcbiAgICB9O1xuXG4gICAgaWYgKGlzVG9wT3JCb3R0b20pIHtcbiAgICAgIGR5bmFtaWNEcmF3ZXJTdHlsZXMudG9wID0gcGxhY2VtZW50ID09PSAndG9wJyA/IDAgOiBudWxsO1xuICAgICAgZHluYW1pY0RyYXdlclN0eWxlcy5ib3R0b20gPSBwbGFjZW1lbnQgPT09ICdib3R0b20nID8gMCA6IG51bGw7XG4gICAgICBkeW5hbWljRHJhd2VyU3R5bGVzLmhlaWdodCA9IGRyYXdlcldpZHRoO1xuICAgICAgZHluYW1pY0RyYXdlclN0eWxlcy53aWR0aCA9ICcxMDAlJztcbiAgICB9IGVsc2Uge1xuICAgICAgZHluYW1pY0RyYXdlclN0eWxlcy5sZWZ0ID0gcGxhY2VtZW50ID09PSAnbGVmdCcgPyAwIDogbnVsbDtcbiAgICAgIGR5bmFtaWNEcmF3ZXJTdHlsZXMucmlnaHQgPSBwbGFjZW1lbnQgPT09ICdyaWdodCcgPyAwIDogbnVsbDtcbiAgICAgIGR5bmFtaWNEcmF3ZXJTdHlsZXMud2lkdGggPSBkcmF3ZXJXaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5T3BhY2l0eSA9IG92ZXJsYXlWYWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICBvdXRwdXRSYW5nZTogWzAsIDAuM10sXG4gICAgICBleHRyYXBvbGF0ZTogJ2NsYW1wJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICBzdHlsZXMuZHJhd2VyLFxuICAgICAgICAgICAgZHluYW1pY0RyYXdlclN0eWxlcyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LW5hdGl2ZS9uby1pbmxpbmUtc3R5bGVzXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtjaGFuZ2VTdHlsZV06IGlzT3BlbiA/IChpc1RvcE9yQm90dG9tID8gZHJhd2VySGVpZ2h0IDogZHJhd2VyV2lkdGgpIDogMCxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbXG4gICAgICAgICAgICAgICAgeyB0cmFuc2xhdGVYOiBkcmF3ZXJWYWx1ZS54IH0sIC8vIHjovbTnp7vliqhcbiAgICAgICAgICAgICAgICB7IHRyYW5zbGF0ZVk6IGRyYXdlclZhbHVlLnkgfSwgLy8geei9tOenu+WKqFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdfVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBwb2ludGVyRXZlbnRzPXtpc09wZW4gPyAnYXV0bycgOiAnbm9uZSd9XG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgc3R5bGVzLnBvc2l0aW9uRnVsbCxcbiAgICAgICAgICAgIG1hc2tQcm9wcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gb3BhY2l0eTogb3ZlcmxheVZhbHVlLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBvdmVybGF5T3BhY2l0eSxcbiAgICAgICAgICAgICAgekluZGV4OiB6SW5kZXhWYWx1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUb3VjaGFibGVPcGFjaXR5XG4gICAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgICBzdHlsZXMucG9zaXRpb25GdWxsLFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtbmF0aXZlL25vLWlubGluZS1zdHlsZXNcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHpJbmRleDogMzAwMyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLm9uT3ZlcmxheUNsaWNrLmJpbmQodGhpcyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICB9XG4gIGhhbmRsZURyYXdlcihpc09wZW46IGJvb2xlYW4pIHtcbiAgICBpc09wZW4gPyB0aGlzLm9wZW5EcmF3ZXIoKSA6IHRoaXMuY2xvc2VEcmF3ZXIoKTtcbiAgfVxuICBnZXRJbml0UG9zaXRpb24oKSB7XG4gICAgY29uc3QgeyBkcmF3ZXJXaWR0aCwgcGxhY2VtZW50LCBkcmF3ZXJIZWlnaHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeHkgPSB7IHg6IDAsIHk6IDAgfTtcbiAgICBpZiAocGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICAgIHh5LnggPSAtKGRyYXdlcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICBpZiAocGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgICB4eS54ID0gREVWSUNFX1dJRFRIIHx8IDA7XG4gICAgfVxuICAgIGlmIChwbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgICB4eS55ID0gLShkcmF3ZXJIZWlnaHQgfHwgMCk7XG4gICAgfVxuICAgIGlmIChwbGFjZW1lbnQgPT09ICdib3R0b20nKSB7XG4gICAgICB4eS55ID0gREVWSUNFX0hFSUdIVCB8fCAwO1xuICAgIH1cbiAgICByZXR1cm4geHk7XG4gIH1cbiAgb3BlbkRyYXdlcigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgekluZGV4VmFsdWU6IDMwMDIgfSk7XG4gICAgQW5pbWF0ZWQucGFyYWxsZWwoW1xuICAgICAgQW5pbWF0ZWQuc3ByaW5nKHRoaXMuc3RhdGUuZHJhd2VyVmFsdWUsIHtcbiAgICAgICAgdG9WYWx1ZTogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLm92ZXJsYXlWYWx1ZSwge1xuICAgICAgICB0b1ZhbHVlOiAwLjcsXG4gICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWUsXG4gICAgICB9KSxcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9wZW5EcmF3ZXIhKHRydWUpO1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSEodHJ1ZSk7XG4gICAgfSk7XG4gIH1cbiAgY2xvc2VEcmF3ZXIoKSB7XG4gICAgY29uc3QgeyBkcmF3ZXJWYWx1ZSwgb3ZlcmxheVZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnNwcmluZyhkcmF3ZXJWYWx1ZSwge1xuICAgICAgICB0b1ZhbHVlOiB7IC4uLnRoaXMuZ2V0SW5pdFBvc2l0aW9uKCkgfSxcbiAgICAgICAgb3ZlcnNob290Q2xhbXBpbmc6IHRydWUsXG4gICAgICAgIHVzZU5hdGl2ZURyaXZlcjogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgQW5pbWF0ZWQuc3ByaW5nKG92ZXJsYXlWYWx1ZSwge1xuICAgICAgICB0b1ZhbHVlOiAwLFxuICAgICAgICBvdmVyc2hvb3RDbGFtcGluZzogdHJ1ZSxcbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlLFxuICAgICAgfSksXG4gICAgXSkuc3RhcnQoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5jbG9zZURyYXdlciEoZmFsc2UpO1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSEoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHpJbmRleFZhbHVlOiAwIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgZHJhd2VyOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBmbGV4OiAxLFxuICAgIHpJbmRleDogMzAwNCxcbiAgfSxcbiAgcG9zaXRpb25GdWxsOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICB9LFxuICBvdmVybGF5OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMCcsXG4gICAgekluZGV4OiAzMDAyLFxuICB9LFxufSk7XG4iXX0=