UNPKG

@uiw/react-native

Version:
241 lines (221 loc) 24.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _reactNative = require("react-native"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class Switch extends _react.default.Component { constructor(props) { super(props); this.translateXValue = 2; this.height = 16; this.onPress = () => { const checked = !this.state.checked; this.setState({ checked }, () => { this.animatedStart(checked); this.props.onValueChange(checked); }); }; this.measureContainer = event => { const { checked } = this.state; const { translateXValue } = this.state; const { height: layoutHeight, width: layoutWidth } = event.nativeEvent.layout; const height = layoutHeight - 4; const width = height; const size = { width, height }; this.height = height / 2; const state = { containerSize: size }; this.translateXValue = layoutWidth - 2 - width; translateXValue.setValue(checked ? layoutWidth - 2 - width : 2); this.setState({ ...state }, () => { this.animatedStart(!!this.props.checked); }); }; this.state = { checked: !!this.props.checked, containerSize: { width: 0, height: 0 }, borderValue: new _reactNative.Animated.Value(0), translateXValue: new _reactNative.Animated.Value(2), bgOpacity: new _reactNative.Animated.Value(props.value ? 1 : 0) }; this.animatedStart(!!this.props.checked); } UNSAFE_componentWillReceiveProps(nextProps) { if (this.props.checked !== nextProps.checked) { this.setState({ checked: !!nextProps.checked }, () => { this.animatedStart(!!nextProps.checked); }); } } animatedStart(checked) { if (checked) { _reactNative.Animated.parallel([_reactNative.Animated.sequence([_reactNative.Animated.spring(this.state.borderValue, { toValue: this.height, overshootClamping: true, useNativeDriver: false }), _reactNative.Animated.spring(this.state.bgOpacity, { toValue: 1, overshootClamping: true, useNativeDriver: false })]), _reactNative.Animated.spring(this.state.translateXValue, { toValue: this.translateXValue, overshootClamping: true, useNativeDriver: false })]).start(); } else { _reactNative.Animated.parallel([_reactNative.Animated.sequence([_reactNative.Animated.spring(this.state.bgOpacity, { toValue: 0, overshootClamping: true, useNativeDriver: false }), _reactNative.Animated.spring(this.state.borderValue, { toValue: 2, overshootClamping: true, useNativeDriver: false })]), _reactNative.Animated.spring(this.state.translateXValue, { toValue: 2, overshootClamping: true, useNativeDriver: false })]).start(); } } render() { const { style, size, // eslint-disable-next-line @typescript-eslint/no-unused-vars checked, color, disabled, thumbColor, trackStyle, thumbStyle, ...otherProps } = this.props; const { containerSize } = this.state; const bgBorder = this.state.borderValue.interpolate({ inputRange: [2, this.height], outputRange: [2, this.height] // extrapolate: 'clamp', }); const sizeStyl = {}; switch (size) { case 'small': sizeStyl.height = 20; sizeStyl.width = 30; break; case 'large': sizeStyl.height = 30; sizeStyl.width = 48; break; default: sizeStyl.height = 26; sizeStyl.width = 38; break; } return <_reactNative.View {...otherProps} onLayout={this.measureContainer} style={[styles.warpper, sizeStyl, style]}> {disabled && <_reactNative.View style={[styles.position, styles.disabled]} />} <_reactNative.Animated.View style={[styles.bg, styles.position, trackStyle, { borderWidth: bgBorder }]} /> <_reactNative.TouchableOpacity // eslint-disable-next-line react-native/no-inline-styles style={[styles.position, { zIndex: 1 }]} onPress={this.onPress} /> <_reactNative.Animated.View style={[styles.position, // eslint-disable-next-line react-native/no-inline-styles { backgroundColor: this.state.checked ? color : '', borderRadius: 16, opacity: this.state.bgOpacity }]} /> <_reactNative.Animated.View style={[styles.grip, thumbStyle, disabled ? styles.shadowDisable : styles.shadow, { backgroundColor: thumbColor, width: containerSize.width, height: containerSize.height }, { transform: [{ translateX: this.state.translateXValue }] }]} /> </_reactNative.View>; } } exports.default = Switch; Switch.defaultProps = { checked: false, size: 'default', thumbColor: '#fff', color: '#4DD964', onValueChange: () => {} }; const styles = _reactNative.StyleSheet.create({ warpper: { position: 'relative', borderRadius: 16, backgroundColor: '#E6E6E6' }, disabled: { backgroundColor: 'rgba(255, 255, 255, 0.6)', borderRadius: 16, zIndex: 22 }, bg: { borderRadius: 16, borderWidth: 2, borderColor: '#E6E6E6' }, position: { position: 'absolute', backgroundColor: 'transparent', top: 0, bottom: 0, left: 0, right: 0 }, grip: { top: 2, borderRadius: 16 }, shadowDisable: { shadowColor: '#000', shadowOffset: { width: 10, height: 10 }, shadowOpacity: 0.3, shadowRadius: 2 }, shadow: { shadowColor: '#000', shadowOffset: { width: 4, height: 4 }, shadowOpacity: 0.2, shadowRadius: 3 } }); module.exports = exports.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Td2l0Y2gvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlN3aXRjaCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInRyYW5zbGF0ZVhWYWx1ZSIsImhlaWdodCIsIm9uUHJlc3MiLCJjaGVja2VkIiwic3RhdGUiLCJzZXRTdGF0ZSIsImFuaW1hdGVkU3RhcnQiLCJvblZhbHVlQ2hhbmdlIiwibWVhc3VyZUNvbnRhaW5lciIsImV2ZW50IiwibGF5b3V0SGVpZ2h0Iiwid2lkdGgiLCJsYXlvdXRXaWR0aCIsIm5hdGl2ZUV2ZW50IiwibGF5b3V0Iiwic2l6ZSIsImNvbnRhaW5lclNpemUiLCJzZXRWYWx1ZSIsImJvcmRlclZhbHVlIiwiQW5pbWF0ZWQiLCJWYWx1ZSIsImJnT3BhY2l0eSIsInZhbHVlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXh0UHJvcHMiLCJwYXJhbGxlbCIsInNlcXVlbmNlIiwic3ByaW5nIiwidG9WYWx1ZSIsIm92ZXJzaG9vdENsYW1waW5nIiwidXNlTmF0aXZlRHJpdmVyIiwic3RhcnQiLCJyZW5kZXIiLCJzdHlsZSIsImNvbG9yIiwiZGlzYWJsZWQiLCJ0aHVtYkNvbG9yIiwidHJhY2tTdHlsZSIsInRodW1iU3R5bGUiLCJvdGhlclByb3BzIiwiYmdCb3JkZXIiLCJpbnRlcnBvbGF0ZSIsImlucHV0UmFuZ2UiLCJvdXRwdXRSYW5nZSIsInNpemVTdHlsIiwic3R5bGVzIiwid2FycHBlciIsInBvc2l0aW9uIiwiYmciLCJib3JkZXJXaWR0aCIsInpJbmRleCIsImJhY2tncm91bmRDb2xvciIsImJvcmRlclJhZGl1cyIsIm9wYWNpdHkiLCJncmlwIiwic2hhZG93RGlzYWJsZSIsInNoYWRvdyIsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgiLCJkZWZhdWx0UHJvcHMiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiYm9yZGVyQ29sb3IiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJzaGFkb3dDb2xvciIsInNoYWRvd09mZnNldCIsInNoYWRvd09wYWNpdHkiLCJzaGFkb3dSYWRpdXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQWdDZSxNQUFNQSxNQUFOLFNBQXFCQyxlQUFNQyxTQUEzQixDQUErRDtBQVU1RUMsRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQXFCO0FBQzlCLFVBQU1BLEtBQU47QUFEOEIsU0FUaENDLGVBU2dDLEdBVE4sQ0FTTTtBQUFBLFNBUmhDQyxNQVFnQyxHQVJmLEVBUWU7O0FBQUEsU0E2RGhDQyxPQTdEZ0MsR0E2RHRCLE1BQU07QUFDZCxZQUFNQyxPQUFPLEdBQUcsQ0FBQyxLQUFLQyxLQUFMLENBQVdELE9BQTVCO0FBQ0EsV0FBS0UsUUFBTCxDQUFjO0FBQUVGLFFBQUFBO0FBQUYsT0FBZCxFQUEyQixNQUFNO0FBQy9CLGFBQUtHLGFBQUwsQ0FBbUJILE9BQW5CO0FBQ0EsYUFBS0osS0FBTCxDQUFXUSxhQUFYLENBQTBCSixPQUExQjtBQUNELE9BSEQ7QUFJRCxLQW5FK0I7O0FBQUEsU0FvRWhDSyxnQkFwRWdDLEdBb0VaQyxLQUFELElBQThCO0FBQy9DLFlBQU07QUFBRU4sUUFBQUE7QUFBRixVQUFjLEtBQUtDLEtBQXpCO0FBQ0EsWUFBTTtBQUFFSixRQUFBQTtBQUFGLFVBQXNCLEtBQUtJLEtBQWpDO0FBQ0EsWUFBTTtBQUFFSCxRQUFBQSxNQUFNLEVBQUVTLFlBQVY7QUFBd0JDLFFBQUFBLEtBQUssRUFBRUM7QUFBL0IsVUFBK0NILEtBQUssQ0FBQ0ksV0FBTixDQUFrQkMsTUFBdkU7QUFDQSxZQUFNYixNQUFNLEdBQUdTLFlBQVksR0FBRyxDQUE5QjtBQUNBLFlBQU1DLEtBQUssR0FBR1YsTUFBZDtBQUNBLFlBQU1jLElBQUksR0FBRztBQUFFSixRQUFBQSxLQUFGO0FBQVNWLFFBQUFBO0FBQVQsT0FBYjtBQUNBLFdBQUtBLE1BQUwsR0FBY0EsTUFBTSxHQUFHLENBQXZCO0FBQ0EsWUFBTUcsS0FBSyxHQUFH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UFI7QUFyQ3VCLENBQWxCLENBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgQW5pbWF0ZWQsXG4gIFN3aXRjaFByb3BzIGFzIFN3aXRjaFByb3BzRGVmYXVsdCxcbiAgVmlldyxcbiAgVmlld1N0eWxlLFxuICBMYXlvdXRDaGFuZ2VFdmVudCxcbiAgU3R5bGVTaGVldCxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hQcm9wcyBleHRlbmRzIFN3aXRjaFByb3BzRGVmYXVsdCB7XG4gIHRyYWNrU3R5bGU/OiBWaWV3U3R5bGU7XG4gIHRodW1iU3R5bGU/OiBWaWV3U3R5bGU7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjb2xvcj86IHN0cmluZztcbiAgLyoqXG4gICAqIOiuvue9ruWkp+Wwj1xuICAgKi9cbiAgc2l6ZT86ICdzbWFsbCcgfCAnZGVmYXVsdCcgfCAnbGFyZ2UnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN3aXRjaFN0YXRlIHtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbiAgYm9yZGVyVmFsdWU6IEFuaW1hdGVkLlZhbHVlO1xuICB0cmFuc2xhdGVYVmFsdWU6IEFuaW1hdGVkLlZhbHVlO1xuICBiZ09wYWNpdHk6IEFuaW1hdGVkLlZhbHVlO1xuICBjb250YWluZXJTaXplOiB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFN3aXRjaFByb3BzLCBTd2l0Y2hTdGF0ZT4ge1xuICB0cmFuc2xhdGVYVmFsdWU6IG51bWJlciA9IDI7XG4gIGhlaWdodDogbnVtYmVyID0gMTY7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHM6IFN3aXRjaFByb3BzID0ge1xuICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICB0aHVtYkNvbG9yOiAnI2ZmZicsXG4gICAgY29sb3I6ICcjNEREOTY0JyxcbiAgICBvblZhbHVlQ2hhbmdlOiAoKSA9PiB7fSxcbiAgfTtcbiAgY29uc3RydWN0b3IocHJvcHM6IFN3aXRjaFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjaGVja2VkOiAhIXRoaXMucHJvcHMuY2hlY2tlZCxcbiAgICAgIGNvbnRhaW5lclNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxuICAgICAgYm9yZGVyVmFsdWU6IG5ldyBBbmltYXRlZC5WYWx1ZSgwKSxcbiAgICAgIHRyYW5zbGF0ZVhWYWx1ZTogbmV3IEFuaW1hdGVkLlZhbHVlKDIpLFxuICAgICAgYmdPcGFjaXR5OiBuZXcgQW5pbWF0ZWQuVmFsdWUocHJvcHMudmFsdWUgPyAxIDogMCksXG4gICAgfTtcbiAgICB0aGlzLmFuaW1hdGVkU3RhcnQoISF0aGlzLnByb3BzLmNoZWNrZWQpO1xuICB9XG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogU3dpdGNoUHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jaGVja2VkICE9PSBuZXh0UHJvcHMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNoZWNrZWQ6ICEhbmV4dFByb3BzLmNoZWNrZWQgfSwgKCkgPT4ge1xuICAgICAgICB0aGlzLmFuaW1hdGVkU3RhcnQoISFuZXh0UHJvcHMuY2hlY2tlZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgYW5pbWF0ZWRTdGFydChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJvcmRlclZhbHVlLCB7XG4gICAgICAgICAgICB0b1ZhbHVlOiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS5iZ09wYWNpdHksIHtcbiAgICAgICAgICAgIHRvVmFsdWU6IDEsXG4gICAgICAgICAgICBvdmVyc2hvb3RDbGFtcGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0pLFxuICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS50cmFuc2xhdGVYVmFsdWUsIHtcbiAgICAgICAgICB0b1ZhbHVlOiB0aGlzLnRyYW5zbGF0ZVhWYWx1ZSxcbiAgICAgICAgICBvdmVyc2hvb3RDbGFtcGluZzogdHJ1ZSxcbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgIF0pLnN0YXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJnT3BhY2l0eSwge1xuICAgICAgICAgICAgdG9WYWx1ZTogMCxcbiAgICAgICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS5ib3JkZXJWYWx1ZSwge1xuICAgICAgICAgICAgdG9WYWx1ZTogMixcbiAgICAgICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLnRyYW5zbGF0ZVhWYWx1ZSwge1xuICAgICAgICAgIHRvVmFsdWU6IDIsXG4gICAgICAgICAgb3ZlcnNob290Q2xhbXBpbmc6IHRydWUsXG4gICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgfSksXG4gICAgICBdKS5zdGFydCgpO1xuICAgIH1cbiAgfVxuICBvblByZXNzID0gKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAhdGhpcy5zdGF0ZS5jaGVja2VkO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjaGVja2VkIH0sICgpID0+IHtcbiAgICAgIHRoaXMuYW5pbWF0ZWRTdGFydChjaGVja2VkKTtcbiAgICAgIHRoaXMucHJvcHMub25WYWx1ZUNoYW5nZSEoY2hlY2tlZCk7XG4gICAgfSk7XG4gIH07XG4gIG1lYXN1cmVDb250YWluZXIgPSAoZXZlbnQ6IExheW91dENoYW5nZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBjaGVja2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdHJhbnNsYXRlWFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgaGVpZ2h0OiBsYXlvdXRIZWlnaHQsIHdpZHRoOiBsYXlvdXRXaWR0aCB9ID0gZXZlbnQubmF0aXZlRXZlbnQubGF5b3V0O1xuICAgIGNvbnN0IGhlaWdodCA9IGxheW91dEhlaWdodCAtIDQ7XG4gICAgY29uc3Qgd2lkdGggPSBoZWlnaHQ7XG4gICAgY29uc3Qgc2l6ZSA9IHsgd2lkdGgsIGhlaWdodCB9O1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICBjb25zdCBzdGF0ZSA9IHsgY29udGFpbmVyU2l6ZTogc2l6ZSB9O1xuICAgIHRoaXMudHJhbnNsYXRlWFZhbHVlID0gbGF5b3V0V2lkdGggLSAyIC0gd2lkdGg7XG4gICAgdHJhbnNsYXRlWFZhbHVlLnNldFZhbHVlKGNoZWNrZWQgPyBsYXlvdXRXaWR0aCAtIDIgLSB3aWR0aCA6IDIpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5zdGF0ZSB9LCAoKSA9PiB7XG4gICAgICB0aGlzLmFuaW1hdGVkU3RhcnQoISF0aGlzLnByb3BzLmNoZWNrZWQpO1xuICAgIH0pO1xuICB9O1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3R5bGUsXG4gICAgICBzaXplLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgY2hlY2tlZCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB0aHVtYkNvbG9yLFxuICAgICAgdHJhY2tTdHlsZSxcbiAgICAgIHRodW1iU3R5bGUsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBjb250YWluZXJTaXplIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGJnQm9yZGVyID0gdGhpcy5zdGF0ZS5ib3JkZXJWYWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICBpbnB1dFJhbmdlOiBbMiwgdGhpcy5oZWlnaHRdLFxuICAgICAgb3V0cHV0UmFuZ2U6IFsyLCB0aGlzLmhlaWdodF0sXG4gICAgICAvLyBleHRyYXBvbGF0ZTogJ2NsYW1wJyxcbiAgICB9KTtcbiAgICBjb25zdCBzaXplU3R5bDogVmlld1N0eWxlID0ge307XG4gICAgc3dpdGNoIChzaXplKSB7XG4gICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgIHNpemVTdHlsLmhlaWdodCA9IDIwO1xuICAgICAgICBzaXplU3R5bC53aWR0aCA9IDMwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgc2l6ZVN0eWwuaGVpZ2h0ID0gMzA7XG4gICAgICAgIHNpemVTdHlsLndpZHRoID0gNDg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZVN0eWwuaGVpZ2h0ID0gMjY7XG4gICAgICAgIHNpemVTdHlsLndpZHRoID0gMzg7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgey4uLm90aGVyUHJvcHN9IG9uTGF5b3V0PXt0aGlzLm1lYXN1cmVDb250YWluZXJ9IHN0eWxlPXtbc3R5bGVzLndhcnBwZXIsIHNpemVTdHlsLCBzdHlsZV19PlxuICAgICAgICB7ZGlzYWJsZWQgJiYgPFZpZXcgc3R5bGU9e1tzdHlsZXMucG9zaXRpb24sIHN0eWxlcy5kaXNhYmxlZF19IC8+fVxuICAgICAgICA8QW5pbWF0ZWQuVmlldyBzdHlsZT17W3N0eWxlcy5iZywgc3R5bGVzLnBvc2l0aW9uLCB0cmFja1N0eWxlLCB7IGJvcmRlcldpZHRoOiBiZ0JvcmRlciB9XX0gLz5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtbmF0aXZlL25vLWlubGluZS1zdHlsZXNcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5wb3NpdGlvbiwgeyB6SW5kZXg6IDEgfV19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5vblByZXNzfVxuICAgICAgICAvPlxuICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICBzdHlsZXMucG9zaXRpb24sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtbmF0aXZlL25vLWlubGluZS1zdHlsZXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnN0YXRlLmNoZWNrZWQgPyBjb2xvciA6ICcnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE2LFxuICAgICAgICAgICAgICBvcGFjaXR5OiB0aGlzLnN0YXRlLmJnT3BhY2l0eSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc3R5bGVzLmdyaXAsXG4gICAgICAgICAgICB0aHVtYlN0eWxlLFxuICAgICAgICAgICAgZGlzYWJsZWQgPyBzdHlsZXMuc2hhZG93RGlzYWJsZSA6IHN0eWxlcy5zaGFkb3csXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGh1bWJDb2xvcixcbiAgICAgICAgICAgICAgd2lkdGg6IGNvbnRhaW5lclNpemUud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogY29udGFpbmVyU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm06IFt7IHRyYW5zbGF0ZVg6IHRoaXMuc3RhdGUudHJhbnNsYXRlWFZhbHVlIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB3YXJwcGVyOiB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAxNixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRTZFNkU2JyxcbiAgfSxcbiAgZGlzYWJsZWQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNiknLFxuICAgIGJvcmRlclJhZGl1czogMTYsXG4gICAgekluZGV4OiAyMixcbiAgfSxcbiAgYmc6IHtcbiAgICBib3JkZXJSYWRpdXM6IDE2LFxuICAgIGJvcmRlcldpZHRoOiAyLFxuICAgIGJvcmRlckNvbG9yOiAnI0U2RTZFNicsXG4gIH0sXG4gIHBvc2l0aW9uOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIHRvcDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgfSxcbiAgZ3JpcDoge1xuICAgIHRvcDogMixcbiAgICBib3JkZXJSYWRpdXM6IDE2LFxuICB9LFxuICBzaGFkb3dEaXNhYmxlOiB7XG4gICAgc2hhZG93Q29sb3I6ICcjMDAwJyxcbiAgICBzaGFkb3dPZmZzZXQ6IHtcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgfSxcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjMsXG4gICAgc2hhZG93UmFkaXVzOiAyLFxuICB9LFxuICBzaGFkb3c6IHtcbiAgICBzaGFkb3dDb2xvcjogJyMwMDAnLFxuICAgIHNoYWRvd09mZnNldDoge1xuICAgICAgd2lkdGg6IDQsXG4gICAgICBoZWlnaHQ6IDQsXG4gICAgfSxcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjIsXG4gICAgc2hhZG93UmFkaXVzOiAzLFxuICB9LFxufSk7XG4iXX0=