UNPKG

rc-slider-captcha

Version:
718 lines (693 loc) 51 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var classnames = require('classnames'); var React = require('react'); var rcHooks = require('rc-hooks'); function styleInject(css, ref) { if ( ref === void 0 ) ref = {}; var insertAt = ref.insertAt; if (typeof document === 'undefined') { return; } var head = document.head || document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; if (insertAt === 'top') { if (head.firstChild) { head.insertBefore(style, head.firstChild); } else { head.appendChild(style); } } else { head.appendChild(style); } if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } } var css_248z = "@-webkit-keyframes slider-icon-animate_spin {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@keyframes slider-icon-animate_spin {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.rc-slider-captcha-icon {\n display: inline-block;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.rc-slider-captcha-icon > svg {\n line-height: 1;\n}\n.rc-slider-captcha-icon-spin {\n -webkit-animation: slider-icon-animate_spin 1s infinite linear;\n animation: slider-icon-animate_spin 1s infinite linear;\n}\n.rc-slider-captcha-button {\n display: inline-block;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 40px;\n height: 100%;\n padding: 5px 0;\n color: #676d73;\n color: var(--rcsc-button-color, #676d73);\n font-size: 22px;\n line-height: 1;\n background-color: #fff;\n background-color: var(--rcsc-button-bg-color, #fff);\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);\n cursor: -webkit-grab;\n cursor: grab;\n transition-timing-function: linear;\n transition-duration: 0.2s;\n transition-property: background-color, color;\n touch-action: none;\n}\n.rc-slider-captcha-button-active {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #1991fa;\n background-color: var(--rcsc-primary, #1991fa);\n}\n.rc-slider-captcha-button-verify {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #1991fa;\n background-color: var(--rcsc-primary, #1991fa);\n}\n.rc-slider-captcha-button-pc:hover {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #1991fa;\n background-color: var(--rcsc-primary, #1991fa);\n}\n.rc-slider-captcha-button:active {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #1991fa;\n background-color: var(--rcsc-primary, #1991fa);\n}\n.rc-slider-captcha-button-active,\n.rc-slider-captcha-button:active {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.rc-slider-captcha-button-verify,\n.rc-slider-captcha-button-verify:active {\n cursor: wait;\n}\n.rc-slider-captcha-button-error {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #f57a7a;\n background-color: var(--rcsc-error, #f57a7a);\n cursor: default;\n}\n.rc-slider-captcha-button-error:hover {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #f57a7a;\n background-color: var(--rcsc-error, #f57a7a);\n cursor: default;\n}\n.rc-slider-captcha-button-error:active {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #f57a7a;\n background-color: var(--rcsc-error, #f57a7a);\n cursor: default;\n}\n.rc-slider-captcha-button-success {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #52ccba;\n background-color: var(--rcsc-success, #52ccba);\n cursor: default;\n}\n.rc-slider-captcha-button-success:hover {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #52ccba;\n background-color: var(--rcsc-success, #52ccba);\n cursor: default;\n}\n.rc-slider-captcha-button-success:active {\n color: #fff;\n color: var(--rcsc-button-hover-color, #fff);\n background-color: #52ccba;\n background-color: var(--rcsc-success, #52ccba);\n cursor: default;\n}\n.rc-slider-captcha-button-disabled {\n color: #676d73;\n color: var(--rcsc-button-color, #676d73);\n background-color: #fff;\n background-color: var(--rcsc-button-bg-color, #fff);\n cursor: no-drop;\n opacity: 0.7;\n}\n.rc-slider-captcha-button-disabled:hover {\n color: #676d73;\n color: var(--rcsc-button-color, #676d73);\n background-color: #fff;\n background-color: var(--rcsc-button-bg-color, #fff);\n cursor: no-drop;\n opacity: 0.7;\n}\n.rc-slider-captcha-button-disabled:active {\n color: #676d73;\n color: var(--rcsc-button-color, #676d73);\n background-color: #fff;\n background-color: var(--rcsc-button-bg-color, #fff);\n cursor: no-drop;\n opacity: 0.7;\n}\n.rc-slider-captcha-control {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n height: 42px;\n height: var(--rcsc-control-height, 42px);\n background-color: #f7f9fa;\n background-color: var(--rcsc-bg-color, #f7f9fa);\n /* stylelint-disable-next-line declaration-property-value-no-unknown */\n border: 1px solid #e4e7eb;\n border: 1px solid var(--rcsc-border-color, #e4e7eb);\n border-radius: 2px;\n border-radius: var(--rcsc-control-border-radius, 2px);\n}\n.rc-slider-captcha-control-button {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n border-radius: 2px;\n border-radius: var(--rcsc-control-border-radius, 2px);\n}\n.rc-slider-captcha-control-indicator {\n position: absolute;\n top: -1px;\n bottom: -1px;\n left: -1px;\n display: none;\n box-sizing: border-box;\n width: 0;\n background-color: #d1e9fe;\n background-color: var(--rcsc-primary-light, #d1e9fe);\n /* stylelint-disable-next-line declaration-property-value-no-unknown */\n border: 1px solid #1991fa;\n border: 1px solid var(--rcsc-primary, #1991fa);\n border-radius: 2px;\n border-radius: var(--rcsc-control-border-radius, 2px);\n}\n.rc-slider-captcha-control-tips {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: #45494c;\n color: var(--rcsc-text-color, #45494c);\n font-size: 14px;\n line-height: 20px;\n text-align: center;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.rc-slider-captcha-control-moving .rc-slider-captcha-control-indicator,\n.rc-slider-captcha-control-verify .rc-slider-captcha-control-indicator,\n.rc-slider-captcha-control-error .rc-slider-captcha-control-indicator,\n.rc-slider-captcha-control-success .rc-slider-captcha-control-indicator {\n display: block;\n}\n.rc-slider-captcha-control-error .rc-slider-captcha-control-indicator {\n background-color: #fce1e1;\n background-color: var(--rcsc-error-light, #fce1e1);\n border-color: #f57a7a;\n border-color: var(--rcsc-error, #f57a7a);\n}\n.rc-slider-captcha-control-success .rc-slider-captcha-control-indicator {\n background-color: #d2f4ef;\n background-color: var(--rcsc-success-light, #d2f4ef);\n border-color: #52ccba;\n border-color: var(--rcsc-success, #52ccba);\n}\n.rc-slider-captcha-control-errors {\n padding-left: 0;\n background-color: #fce1e1;\n background-color: var(--rcsc-error-light, #fce1e1);\n border-color: #f57a7a;\n border-color: var(--rcsc-error, #f57a7a);\n}\n.rc-slider-captcha-control-load-failed {\n padding-left: 0;\n background-color: #fce1e1;\n background-color: var(--rcsc-error-light, #fce1e1);\n border-color: #f57a7a;\n border-color: var(--rcsc-error, #f57a7a);\n}\n.rc-slider-captcha-control-errors .rc-slider-captcha-control-button,\n.rc-slider-captcha-control-errors .rc-slider-captcha-control-indicator,\n.rc-slider-captcha-control-load-failed .rc-slider-captcha-control-button,\n.rc-slider-captcha-control-load-failed .rc-slider-captcha-control-indicator {\n display: none;\n}\n.rc-slider-captcha-control-errors .rc-slider-captcha-control-tips {\n color: #f57a7a;\n color: var(--rcsc-error, #f57a7a);\n cursor: pointer;\n}\n.rc-slider-captcha-control-load-failed .rc-slider-captcha-control-tips {\n color: #f57a7a;\n color: var(--rcsc-error, #f57a7a);\n cursor: pointer;\n}\n.rc-slider-captcha-jigsaw {\n position: relative;\n background-color: #f7f9fa;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.rc-slider-captcha-jigsaw img {\n position: absolute;\n}\n.rc-slider-captcha-jigsaw-bg {\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.rc-slider-captcha-jigsaw-puzzle {\n width: 60px;\n height: 100%;\n touch-action: none;\n}\n.rc-slider-captcha-jigsaw-puzzle:hover {\n cursor: -webkit-grab;\n cursor: grab;\n}\n.rc-slider-captcha-jigsaw-puzzle:active {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.rc-slider-captcha-jigsaw-refresh {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 5px;\n color: #fff;\n font-size: 22px;\n line-height: 0;\n cursor: pointer;\n opacity: 0.75;\n transition: opacity 0.2s linear;\n}\n.rc-slider-captcha-jigsaw-refresh:hover {\n opacity: 1;\n}\n.rc-slider-captcha-jigsaw-refresh-disabled {\n cursor: not-allowed;\n}\n.rc-slider-captcha-jigsaw-refresh-disabled:hover {\n opacity: 0.75;\n}\n.rc-slider-captcha-jigsaw-stop .rc-slider-captcha-jigsaw-puzzle {\n pointer-events: none;\n}\n.rc-slider-captcha-jigsaw-stop .rc-slider-captcha-jigsaw-puzzle:hover,\n.rc-slider-captcha-jigsaw-stop .rc-slider-captcha-jigsaw-puzzle:active {\n cursor: default;\n}\n.rc-slider-captcha-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n padding: 15px;\n color: #45494c;\n color: var(--rcsc-text-color, #45494c);\n font-size: 14px;\n text-align: center;\n background-color: #f7f9fa;\n background-color: var(--rcsc-bg-color, #f7f9fa);\n}\n.rc-slider-captcha-loading-icon {\n font-size: 30px;\n}\n.rc-slider-captcha-loading-text {\n margin-top: 5px;\n}\n.rc-slider-captcha-load-failed {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n color: #ccc;\n font-size: 85px;\n background-color: #f7f9fa;\n background-color: var(--rcsc-bg-color, #f7f9fa);\n}\n.rc-slider-captcha {\n position: relative;\n}\n.rc-slider-captcha > * {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.rc-slider-captcha-panel {\n padding-bottom: 15px;\n}\n.rc-slider-captcha-panel-inner {\n overflow: hidden;\n border-radius: 2px;\n border-radius: var(--rcsc-panel-border-radius, 2px);\n}\n.rc-slider-captcha-float .rc-slider-captcha-panel {\n position: absolute;\n left: 0;\n display: none;\n opacity: 0;\n transition-timing-function: ease-out;\n transition-duration: 0.3s;\n transition-property: top, bottom, opacity;\n}\n.rc-slider-captcha-float-top .rc-slider-captcha-panel {\n bottom: 22px;\n}\n.rc-slider-captcha-float-bottom .rc-slider-captcha-panel {\n top: 22px;\n padding: 15px 0 0;\n}\n"; styleInject(css_248z); // className 前缀 var prefixCls = 'rc-slider-captcha'; // 获取事件触发客户端坐标 function getClient(e) { var x = 0, y = 0; if (typeof e.clientX === 'number' && typeof e.clientY === 'number') { x = e.clientX; y = e.clientY; } else if (e.touches && e.touches[0]) { x = e.touches[0].clientX; y = e.touches[0].clientY; } else if (e.changedTouches && e.changedTouches[0]) { x = e.changedTouches[0].clientX; y = e.changedTouches[0].clientY; } return { clientX: x, clientY: y }; } // 设置样式 function setStyle(el, styleObj) { if (styleObj === void 0) { styleObj = {}; } if (el) { for (var prop in styleObj) { el.style[prop] = styleObj[prop]; } } } // 当前运行环境是否可以使用 dom var isBrowser = typeof window === 'object' && window && typeof document === 'object' && document && window.document === document && !!document.addEventListener; // 是否支持指针事件 var isSupportPointer = isBrowser && 'onpointerdown' in window; // 是否支持Touch事件 // 区分移动端和PC端的事件绑定,移动端也会触发 mouseup mousedown 事件 var isSupportTouch = isBrowser && 'ontouchstart' in window; // 触发重绘 var reflow = function (node) { return node === null || node === void 0 ? void 0 : node.scrollTop; }; // 规整化数字精度 function normalizeNumber(num, precision) { if (typeof num === 'number' && !Number.isNaN(num) && typeof precision === 'number' && precision > 0) { return Number(num.toFixed(precision)); } return num; } var currentPrefixCls$2 = "".concat(prefixCls, "-button"); var SliderButton = function (_a) { var _b; var className = _a.className, disabled = _a.disabled, active = _a.active, success = _a.success, error = _a.error, verify = _a.verify, buttonRef = _a.buttonRef, restProps = tslib.__rest(_a, ["className", "disabled", "active", "success", "error", "verify", "buttonRef"]); return (React.createElement("span", tslib.__assign({ className: classnames(currentPrefixCls$2, className, (_b = {}, _b["".concat(currentPrefixCls$2, "-disabled")] = disabled, _b["".concat(currentPrefixCls$2, "-active")] = active, _b["".concat(currentPrefixCls$2, "-verify")] = verify, _b["".concat(currentPrefixCls$2, "-success")] = success, _b["".concat(currentPrefixCls$2, "-error")] = error, _b["".concat(currentPrefixCls$2, "-pc")] = !isSupportTouch // 如果是移动端,去掉 hover 样式 , _b)), ref: buttonRef }, restProps))); }; SliderButton.displayName = 'SliderButton'; var IconArrowRight = function (props) { return (React.createElement("svg", tslib.__assign({ viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "currentColor" }, props), React.createElement("path", { d: "M116.9408 561.4592m0-40.96l0 0q0-40.96 40.96-40.96l573.44 0q40.96 0 40.96 40.96l0 0q0 40.96-40.96 40.96l-573.44 0q-40.96 0-40.96-40.96Z" }), React.createElement("path", { d: "M769.82272 519.43424l-203.22304-203.22304a40.96 40.96 0 1 1 57.91744-57.91744l231.71072 231.71072a40.96 40.96 0 0 1 0.45056 58.44992L624.9472 780.12416a40.96 40.96 0 0 1-57.93792-57.91744l202.79296-202.79296z" }))); }; var IconCheck = function (props) { return (React.createElement("svg", tslib.__assign({ viewBox: "0 0 1024 1024", xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "currentColor" }, props), React.createElement("path", { d: "M864.554667 268.501333a42.666667 42.666667 0 0 1 0 60.330667L412.032 781.397333a42.453333 42.453333 0 0 1-22.613333 11.818667l-5.034667 0.597333H379.306667a42.496 42.496 0 0 1-27.648-12.416l-211.2-211.2a42.666667 42.666667 0 1 1 60.330666-60.330666l180.992 180.992 422.4-422.4a42.666667 42.666667 0 0 1 60.330667 0z" }))); }; var IconLoading = function (props) { return (React.createElement("svg", tslib.__assign({ viewBox: "0 0 120 120", width: "1em", height: "1em" }, props), React.createElement("defs", null, React.createElement("line", { id: "l", x1: "60", x2: "60", y1: "7", y2: "27", stroke: "currentColor", strokeWidth: "11", strokeLinecap: "round" })), React.createElement("g", null, React.createElement("use", { xlinkHref: "#l", opacity: ".27" }), React.createElement("use", { xlinkHref: "#l", opacity: ".27", transform: "rotate(30 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".27", transform: "rotate(60 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".27", transform: "rotate(90 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".27", transform: "rotate(120 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".27", transform: "rotate(150 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".37", transform: "rotate(180 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".46", transform: "rotate(210 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".56", transform: "rotate(240 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".66", transform: "rotate(270 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".75", transform: "rotate(300 60,60)" }), React.createElement("use", { xlinkHref: "#l", opacity: ".85", transform: "rotate(330 60,60)" })))); }; var IconRefresh = function (props) { return (React.createElement("svg", tslib.__assign({ viewBox: "0 0 1024 1024", xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "currentColor" }, props), React.createElement("path", { d: "M866.133333 573.013333a42.666667 42.666667 0 0 0-53.333333 27.733334A304.64 304.64 0 0 1 519.68 810.666667 302.933333 302.933333 0 0 1 213.333333 512a302.933333 302.933333 0 0 1 306.346667-298.666667 309.76 309.76 0 0 1 198.4 71.253334l-92.586667-15.36a42.666667 42.666667 0 0 0-49.066666 35.413333 42.666667 42.666667 0 0 0 35.413333 49.066667l180.906667 29.866666h7.253333a42.666667 42.666667 0 0 0 14.506667-2.56 14.08 14.08 0 0 0 4.266666-2.56 33.28 33.28 0 0 0 8.533334-4.693333l3.84-4.693333c0-2.133333 3.84-3.84 5.546666-6.4s0-4.266667 2.133334-5.973334a57.173333 57.173333 0 0 0 2.986666-7.68l32-170.666666a42.666667 42.666667 0 0 0-85.333333-16.213334l-11.52 61.866667A392.96 392.96 0 0 0 519.68 128 388.266667 388.266667 0 0 0 128 512a388.266667 388.266667 0 0 0 391.68 384A389.12 389.12 0 0 0 896 626.346667a42.666667 42.666667 0 0 0-29.866667-53.333334z" }))); }; var IconX = function (props) { return (React.createElement("svg", tslib.__assign({ viewBox: "0 0 1024 1024", xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "currentColor" }, props), React.createElement("path", { d: "M572.96896 524.6976l217.23136 217.25184a40.96 40.96 0 1 1-57.93792 57.91744L515.072 582.63552l-212.3776 212.3776a40.96 40.96 0 1 1-57.9584-57.91744l212.39808-212.3776-217.21088-217.23136a40.96 40.96 0 1 1 57.91744-57.91744l217.23136 217.21088L737.0752 244.736a40.96 40.96 0 1 1 57.93792 57.91744L572.96896 524.71808z" }))); }; var IconImageFill = function (props) { return (React.createElement("svg", tslib.__assign({ xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "currentColor", viewBox: "0 0 16 16" }, props), React.createElement("path", { d: "M.002 3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-12a2 2 0 0 1-2-2zm1 9v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V9.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062zm5-6.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0" }))); }; var currentPrefixCls$1 = "".concat(prefixCls, "-icon"); var SliderIconBase = function (_a) { var _b; var className = _a.className, spin = _a.spin, restProps = tslib.__rest(_a, ["className", "spin"]); return (React.createElement("span", tslib.__assign({ className: classnames(currentPrefixCls$1, (_b = {}, _b["".concat(currentPrefixCls$1, "-spin")] = spin, _b), className) }, restProps))); }; var iconMap = { arrowRight: React.createElement(IconArrowRight, null), check: React.createElement(IconCheck, null), loading: React.createElement(IconLoading, null), refresh: React.createElement(IconRefresh, null), x: React.createElement(IconX, null), imageFill: React.createElement(IconImageFill, null) }; var SliderIcon = function (_a) { var type = _a.type, restProps = tslib.__rest(_a, ["type"]); return React.createElement(SliderIconBase, tslib.__assign({}, restProps), iconMap[type]); }; // 内部状态 exports.Status = void 0; (function (Status) { Status[Status["Default"] = 1] = "Default"; Status[Status["Loading"] = 2] = "Loading"; Status[Status["Moving"] = 3] = "Moving"; Status[Status["Verify"] = 4] = "Verify"; Status[Status["Success"] = 5] = "Success"; Status[Status["Error"] = 6] = "Error"; Status[Status["LoadFailed"] = 7] = "LoadFailed"; })(exports.Status || (exports.Status = {})); var controlPrefixCls = "".concat(prefixCls, "-control"); var SliderButtonDefaultWidth = 40; var IndicatorBorderWidth = 2; var ControlBar = function (_a) { var _b; var _c = _a.status, status = _c === void 0 ? exports.Status.Default : _c, isLimitErrors = _a.isLimitErrors, customTipText = _a.tipText, customTipIcon = _a.tipIcon, sliderButtonProps = _a.sliderButtonProps, indicatorProps = _a.indicatorProps, controlRef = _a.controlRef, restProps = tslib.__rest(_a, ["status", "isLimitErrors", "tipText", "tipIcon", "sliderButtonProps", "indicatorProps", "controlRef"]); var wrapperRef = React.useRef(null); var sliderButtonRef = React.useRef(null); var indicatorRef = React.useRef(null); var rectRef = React.useRef({}); var tipText = React.useMemo(function () { return (tslib.__assign({ default: '向右拖动滑块填充拼图', loading: '加载中...', moving: null, verifying: null, success: null, error: null, errors: (React.createElement(React.Fragment, null, React.createElement(SliderIcon, { type: "x", style: { fontSize: 20 } }), " \u5931\u8D25\u8FC7\u591A\uFF0C\u70B9\u51FB\u91CD\u8BD5")), loadFailed: '加载失败,点击重试' }, customTipText)); }, [customTipText]); var tipIcon = React.useMemo(function () { return (tslib.__assign({ default: React.createElement(SliderIcon, { type: "arrowRight" }), loading: React.createElement(SliderIcon, { type: "loading", spin: true }), error: React.createElement(SliderIcon, { type: "x" }), success: React.createElement(SliderIcon, { type: "check" }) }, customTipIcon)); }, [customTipIcon]); var statusViewMap = React.useMemo(function () { var _a; return (_a = {}, _a[exports.Status.Default] = [tipText.default, tipIcon.default], _a[exports.Status.Loading] = [tipText.loading, tipIcon.default], _a[exports.Status.Moving] = [tipText.moving, tipIcon.default], _a[exports.Status.Verify] = [tipText.verifying, tipIcon.loading], _a[exports.Status.Error] = [tipText.error, tipIcon.error], _a[exports.Status.Success] = [tipText.success, tipIcon.success], _a[exports.Status.LoadFailed] = [tipText.loadFailed, tipIcon.default], _a); }, [tipText, tipIcon]); var getSliderButtonWidth = function (force) { var _a; if (force || typeof rectRef.current.sliderButtonWidth !== 'number') { rectRef.current.sliderButtonWidth = ((_a = sliderButtonRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth) || SliderButtonDefaultWidth; } return rectRef.current.sliderButtonWidth; }; var getIndicatorBorderWidth = function (force) { if (force || typeof rectRef.current.indicatorBorderWidth !== 'number') { if (indicatorRef.current) { var indicatorStyles = window.getComputedStyle(indicatorRef.current); rectRef.current.indicatorBorderWidth = parseInt(indicatorStyles.borderLeftWidth) + parseInt(indicatorStyles.borderRightWidth); } else { rectRef.current.indicatorBorderWidth = IndicatorBorderWidth; } } return rectRef.current.indicatorBorderWidth; }; var getRect = function (force) { var _a; if (force || !rectRef.current.rect) { if (wrapperRef.current) { rectRef.current.rect = (_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect(); } } return rectRef.current.rect; }; React.useImperativeHandle(controlRef, function () { return ({ getSliderButtonWidth: getSliderButtonWidth, getIndicatorBorderWidth: getIndicatorBorderWidth, getRect: getRect, updateLeft: function (left) { var sliderButtonWidth = getSliderButtonWidth(); var indicatorBorderWidth = getIndicatorBorderWidth(); setStyle(sliderButtonRef.current, { left: left + 'px' }); setStyle(indicatorRef.current, { width: left + sliderButtonWidth + indicatorBorderWidth + 'px' }); } }); }, []); var isLoading = status === exports.Status.Loading; var isMoving = status === exports.Status.Moving; var isVerify = status === exports.Status.Verify; var isSuccess = status === exports.Status.Success; var isError = status === exports.Status.Error; var isLoadFailed = status === exports.Status.LoadFailed; var currentTipText = isLimitErrors ? tipText.errors : statusViewMap[status][0]; return (React.createElement("div", tslib.__assign({}, restProps, { className: classnames(controlPrefixCls, (_b = {}, _b["".concat(controlPrefixCls, "-loading")] = isLoading, _b["".concat(controlPrefixCls, "-moving")] = isMoving, _b["".concat(controlPrefixCls, "-verify")] = isVerify, _b["".concat(controlPrefixCls, "-success")] = isSuccess, _b["".concat(controlPrefixCls, "-error")] = isError, _b["".concat(controlPrefixCls, "-errors")] = isLimitErrors, _b["".concat(controlPrefixCls, "-load-failed")] = isLoadFailed, _b), restProps.className), ref: wrapperRef }), React.createElement("div", tslib.__assign({}, indicatorProps, { className: classnames("".concat(controlPrefixCls, "-indicator"), indicatorProps === null || indicatorProps === void 0 ? void 0 : indicatorProps.className), ref: indicatorRef })), React.createElement(SliderButton, tslib.__assign({}, sliderButtonProps, { className: classnames("".concat(controlPrefixCls, "-button"), sliderButtonProps === null || sliderButtonProps === void 0 ? void 0 : sliderButtonProps.className), disabled: isLoading, active: isMoving, verify: isVerify, success: isSuccess, error: isError, buttonRef: sliderButtonRef }), statusViewMap[status][1]), React.createElement("div", { className: classnames("".concat(controlPrefixCls, "-tips")), style: currentTipText ? {} : { display: 'none' } }, currentTipText))); }; var currentPrefixCls = "".concat(prefixCls, "-loading"); var LoadingBox = function (_a) { var _b = _a.icon, icon = _b === void 0 ? React.createElement(SliderIcon, { type: "loading", spin: true }) : _b, _c = _a.text, text = _c === void 0 ? '加载中...' : _c, className = _a.className, restProps = tslib.__rest(_a, ["icon", "text", "className"]); return (React.createElement("div", tslib.__assign({ className: classnames(currentPrefixCls, className) }, restProps), React.createElement("div", { className: "".concat(currentPrefixCls, "-icon") }, icon), React.createElement("div", { className: "".concat(currentPrefixCls, "-text") }, text))); }; var jigsawPrefixCls = "".concat(prefixCls, "-jigsaw"); // 默认配置 var defaultConfig = { bgSize: { width: 320, height: 160 }, puzzleSize: { width: 60, left: 0 }, loadFailedIcon: React.createElement(SliderIcon, { type: "imageFill" }), refreshIcon: React.createElement(SliderIcon, { type: "refresh" }) }; var Jigsaw = function (_a) { var _b, _c; var status = _a.status, _d = _a.bgSize, bgSize = _d === void 0 ? defaultConfig.bgSize : _d, _e = _a.puzzleSize, puzzleSize = _e === void 0 ? defaultConfig.puzzleSize : _e, bgUrl = _a.bgUrl, puzzleUrl = _a.puzzleUrl, bgImgProps = _a.bgImgProps, puzzleImgProps = _a.puzzleImgProps, jigsawRef = _a.jigsawRef, loadingBoxProps = _a.loadingBoxProps, _f = _a.loadFailedIcon, loadFailedIcon = _f === void 0 ? defaultConfig.loadFailedIcon : _f, _g = _a.showRefreshIcon, showRefreshIcon = _g === void 0 ? true : _g, _h = _a.refreshIcon, refreshIcon = _h === void 0 ? defaultConfig.refreshIcon : _h, disabledRefresh = _a.disabledRefresh, onRefresh = _a.onRefresh, style = _a.style, className = _a.className, children = _a.children, restProps = tslib.__rest(_a, ["status", "bgSize", "puzzleSize", "bgUrl", "puzzleUrl", "bgImgProps", "puzzleImgProps", "jigsawRef", "loadingBoxProps", "loadFailedIcon", "showRefreshIcon", "refreshIcon", "disabledRefresh", "onRefresh", "style", "className", "children"]); var puzzleRef = React.useRef(null); React.useImperativeHandle(jigsawRef, function () { return ({ updateLeft: function (left) { setStyle(puzzleRef.current, { left: left + 'px' }); } }); }); if (status === exports.Status.Loading) { return (React.createElement(LoadingBox, tslib.__assign({}, loadingBoxProps, { style: tslib.__assign(tslib.__assign({}, loadingBoxProps === null || loadingBoxProps === void 0 ? void 0 : loadingBoxProps.style), bgSize) }))); } if (status === exports.Status.LoadFailed) { return (React.createElement("div", { className: "".concat(prefixCls, "-load-failed"), style: bgSize }, loadFailedIcon)); } var isStop = status === exports.Status.Verify || status === exports.Status.Error || status === exports.Status.Success; // 是否停止移动 return (React.createElement("div", tslib.__assign({ className: classnames(jigsawPrefixCls, (_b = {}, _b["".concat(jigsawPrefixCls, "-stop")] = isStop, _b), className), style: tslib.__assign(tslib.__assign({}, style), bgSize) }, restProps), React.createElement("img", tslib.__assign({ src: bgUrl, alt: "" }, bgImgProps, { className: classnames("".concat(jigsawPrefixCls, "-bg"), bgImgProps === null || bgImgProps === void 0 ? void 0 : bgImgProps.className), style: tslib.__assign(tslib.__assign({}, bgImgProps === null || bgImgProps === void 0 ? void 0 : bgImgProps.style), bgSize) })), React.createElement("img", tslib.__assign({ src: puzzleUrl, alt: "" }, puzzleImgProps, { className: classnames("".concat(jigsawPrefixCls, "-puzzle"), puzzleImgProps === null || puzzleImgProps === void 0 ? void 0 : puzzleImgProps.className), style: tslib.__assign(tslib.__assign({}, puzzleImgProps === null || puzzleImgProps === void 0 ? void 0 : puzzleImgProps.style), puzzleSize), ref: puzzleRef })), showRefreshIcon && status !== exports.Status.Success && refreshIcon && (React.createElement("div", { className: classnames("".concat(jigsawPrefixCls, "-refresh"), (_c = {}, _c["".concat(jigsawPrefixCls, "-refresh-disabled")] = status === exports.Status.Verify || disabledRefresh, _c)), onClick: function () { if (status !== exports.Status.Verify && !disabledRefresh) { onRefresh === null || onRefresh === void 0 ? void 0 : onRefresh(); } } }, refreshIcon)), children)); }; var events = isSupportPointer ? { move: 'pointermove', end: 'pointerup', cancel: 'pointercancel' } : isSupportTouch ? { move: 'touchmove', end: 'touchend', cancel: 'touchcancel' } : { move: 'mousemove', end: 'mouseup', cancel: 'touchcancel' }; var startEventName = isSupportPointer ? 'onPointerDown' : isSupportTouch ? 'onTouchStart' : 'onMouseDown'; exports.CurrentTargetType = void 0; (function (CurrentTargetType) { CurrentTargetType["Puzzle"] = "puzzle"; CurrentTargetType["Button"] = "button"; })(exports.CurrentTargetType || (exports.CurrentTargetType = {})); var SliderCaptcha = function (_a) { var _b, _c, _d; var _e = _a.mode, outMode = _e === void 0 ? 'embed' : _e, _f = _a.limitErrorCount, limitErrorCount = _f === void 0 ? 0 : _f, tipText = _a.tipText, tipIcon = _a.tipIcon, customRefreshIcon = _a.refreshIcon, outBgSize = _a.bgSize, outPuzzleSize = _a.puzzleSize, request = _a.request, _g = _a.autoRequest, autoRequest = _g === void 0 ? true : _g, onVerify = _a.onVerify, _h = _a.autoRefreshOnError, autoRefreshOnError = _h === void 0 ? true : _h, actionRef = _a.actionRef, _j = _a.showRefreshIcon, showRefreshIcon = _j === void 0 ? true : _j, jigsawContent = _a.jigsawContent, _k = _a.errorHoldDuration, errorHoldDuration = _k === void 0 ? 500 : _k, _l = _a.showJigsawOnActive, showJigsawOnActive = _l === void 0 ? false : _l, _m = _a.loadingDelay, loadingDelay = _m === void 0 ? 0 : _m, _o = _a.placement, placement = _o === void 0 ? 'top' : _o, loadingBoxProps = _a.loadingBoxProps, sliderButtonProps = _a.sliderButtonProps, _p = _a.precision, precision = _p === void 0 ? 7 : _p, className = _a.className, style = _a.style, styles = _a.styles; var _q = rcHooks.useSafeState(), jigsawImgs = _q[0], setJigsawImgs = _q[1]; var _r = rcHooks.useSafeState(function () { if (!modeIsSlider && !!request && autoRequest) { return exports.Status.Loading; } return exports.Status.Default; }), status = _r[0], setStatus = _r[1]; var latestStatus = rcHooks.useLatest(status); // 同步status值,提供给事件方法使用 var controlRef = React.useRef(null); var jigsawRef = React.useRef(null); // dom ref var panelRef = React.useRef(null); // config var mode = React.useMemo(function () { return (outMode === 'float' || outMode === 'slider' ? outMode : 'embed'); }, [outMode]); var refreshIcon = React.useMemo(function () { if (customRefreshIcon !== undefined) { return customRefreshIcon; } if ((tipIcon === null || tipIcon === void 0 ? void 0 : tipIcon.refresh) !== undefined) { return tipIcon.refresh; } }, [customRefreshIcon, tipIcon]); var bgSize = React.useMemo(function () { return (tslib.__assign(tslib.__assign({}, defaultConfig.bgSize), outBgSize)); }, [outBgSize]); var puzzleSize = React.useMemo(function () { return (tslib.__assign(tslib.__assign({}, defaultConfig.puzzleSize), outPuzzleSize)); }, [outPuzzleSize]); var placementPos = React.useMemo(function () { return (placement === 'bottom' ? 'top' : 'bottom'); }, [placement]); var internalRef = React.useRef({ isPressed: false, // 标识是否按下 trail: [], // 移动轨迹 errorCount: 0, // 连续错误次数 startInfo: { x: 0, y: 0, timestamp: 0 }, // 鼠标按下或触摸开始信息 currentTargetType: exports.CurrentTargetType.Button, // 当前触发事件的节点,拼图或按钮 isMouseEntered: false, // 鼠标是否移入 floatTransitionTimer: null, // 触发式渐变过渡效果定时器 floatDelayShowTimer: null, // 触发式鼠标移入定时器 floatDelayHideTimer: null, // 触发式鼠标移出定时器 refreshTimer: null, // 自动刷新的定时器 loadingTimer: null, // 延迟加载状态定时器 sliderButtonWidth: 40, // 滑块按钮宽度 indicatorBorderWidth: 2, // 滑轨边框宽度 ratio: 1, // 当滑块或拼图为触发事件的焦点时,两者的变换比例 buttonMaxDistance: 0, // 按钮最大可移动距离 puzzleMaxDistance: 0 // 拼图最大可移动距离 }); var modeIsSlider = mode === 'slider'; // 单滑轨,无图片 var hasLoadingDelay = typeof loadingDelay === 'number' && loadingDelay > 0; // 延迟加载状态 var isLimitErrors = status === exports.Status.Error && limitErrorCount > 0 && internalRef.current.errorCount >= limitErrorCount; // 是否超过限制错误次数 // 更新最大可移动距离 var updateMaxDistance = function () { internalRef.current.buttonMaxDistance = bgSize.width - internalRef.current.sliderButtonWidth - internalRef.current.indicatorBorderWidth; internalRef.current.puzzleMaxDistance = bgSize.width - puzzleSize.width - puzzleSize.left; }; var getControlHeight = function () { var _a; return ((_a = controlRef.current) === null || _a === void 0 ? void 0 : _a.getRect(true).height) || 42; }; // 获取背景图和拼图 var getJigsawImages = function () { return tslib.__awaiter(void 0, void 0, void 0, function () { var result; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (modeIsSlider) return [2 /*return*/]; if (!request) return [3 /*break*/, 4]; if (hasLoadingDelay) { internalRef.current.loadingTimer = setTimeout(function () { setStatus(exports.Status.Loading); }, loadingDelay); } else { setStatus(exports.Status.Loading); } _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, request()]; case 2: result = _a.sent(); if (hasLoadingDelay) { clearTimeout(internalRef.current.loadingTimer); } setJigsawImgs(result); setStatus(exports.Status.Default); return [3 /*break*/, 4]; case 3: _a.sent(); // console.error(err); if (hasLoadingDelay) { clearTimeout(internalRef.current.loadingTimer); } setJigsawImgs(undefined); setStatus(exports.Status.LoadFailed); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); }; // 触发式下,显示面板 var showPanel = function (delay) { if (delay === void 0) { delay = 300; } if (mode !== 'float' || latestStatus.current === exports.Status.Success) { return; } clearTimeout(internalRef.current.floatTransitionTimer); clearTimeout(internalRef.current.floatDelayHideTimer); clearTimeout(internalRef.current.floatDelayShowTimer); internalRef.current.floatDelayShowTimer = setTimeout(function () { var _a; setStyle(panelRef.current, { display: 'block' }); reflow(panelRef.current); var controlBarHeight = getControlHeight() + 'px'; setStyle(panelRef.current, (_a = {}, _a[placementPos] = controlBarHeight, _a.opacity = '1', _a)); }, delay); }; // 触发式下,隐藏面板 var hidePanel = function (delay) { if (delay === void 0) { delay = 300; } if (mode !== 'float') { return; } clearTimeout(internalRef.current.floatTransitionTimer); clearTimeout(internalRef.current.floatDelayHideTimer); clearTimeout(internalRef.current.floatDelayShowTimer); internalRef.current.floatDelayHideTimer = setTimeout(function () { var _a; var controlBarHalfHeight = getControlHeight() / 2 + 'px'; setStyle(panelRef.current, (_a = {}, _a[placementPos] = controlBarHalfHeight, _a.opacity = '0', _a)); internalRef.current.floatTransitionTimer = setTimeout(function () { setStyle(panelRef.current, { display: 'none' }); }, 300); }, delay); }; // 更新拼图位置 var updatePuzzleLeft = function (left) { var _a; if (!modeIsSlider) { (_a = jigsawRef.current) === null || _a === void 0 ? void 0 : _a.updateLeft(left); } }; // 重置状态和元素位置 var reset = function () { var _a; internalRef.current.isPressed = false; setStatus(exports.Status.Default); (_a = controlRef.current) === null || _a === void 0 ? void 0 : _a.updateLeft(0); updatePuzzleLeft(puzzleSize.left); }; // 刷新 var refresh = function (resetErrorCount) { if (resetErrorCount === void 0) { resetErrorCount = false; } // 重置连续错误次数记录 if (resetErrorCount) { internalRef.current.errorCount = 0; } // 清除延迟调用刷新方法的定时器 clearTimeout(internalRef.current.refreshTimer); // 防止连续调用刷新方法,会触发多次请求的问题 if (latestStatus.current === exports.Status.Loading) { return; } reset(); getJigsawImages(); }; // 点击滑块操作条,如果连续超过错误次数或请求失败则刷新 var handleClickControl = function () { if (isLimitErrors || status === exports.Status.LoadFailed) { refresh(isLimitErrors); } }; // 鼠标移入显示面板,如果支持touch事件不处理 var handleMouseEnter = function () { if (isSupportTouch) { return; } internalRef.current.isMouseEntered = true; showPanel(); }; // 鼠标移出隐藏面板,如果支持touch事件不处理 var handleMouseLeave = function () { internalRef.current.isMouseEntered = false; if (isSupportTouch || (showJigsawOnActive && internalRef.current.isPressed)) { return; } hidePanel(); }; var touchstartPuzzle = function (e) { internalRef.current.currentTargetType = exports.CurrentTargetType.Puzzle; touchstart(e); }; var touchstartSliderButton = function (e) { internalRef.current.currentTargetType = exports.CurrentTargetType.Button; touchstart(e); }; // 鼠标按下或触摸开始 var touchstart = function (e) { if (latestStatus.current !== exports.Status.Default) { return; } e.preventDefault(); // 防止移动端按下后会选择文本或图片 var _a = getClient(e), clientX = _a.clientX, clientY = _a.clientY; internalRef.current.startInfo = { x: clientX, y: clientY, timestamp: new Date().getTime() }; internalRef.current.trail = [[clientX, clientY]]; if (controlRef.current) { internalRef.current.sliderButtonWidth = controlRef.current.getSliderButtonWidth(true); internalRef.current.indicatorBorderWidth = controlRef.current.getIndicatorBorderWidth(true); } updateMaxDistance(); // TODO 改动比例,等大版本更新在调整。 // if (modeIsSlider) { // internalRef.current.ratio = 1; // } else { // 最大可移动区间值比例 internalRef.current.ratio = internalRef.current.puzzleMaxDistance / internalRef.current.buttonMaxDistance; if (internalRef.current.currentTargetType === exports.CurrentTargetType.Puzzle) { internalRef.current.ratio = 1 / internalRef.current.ratio; } // } // 处理移动端-触发式兼容 // 可触屏电脑不支持触摸事件,但是 pointerType 可能为 'touch' 或 'pen' if (isSupportTouch || e.pointerType === 'pen' || e.pointerType === 'touch') { showPanel(0); } internalRef.current.isPressed = true; document.addEventListener(events.move, touchmove); document.addEventListener(events.end, touchend); document.addEventListener(events.cancel, touchend); }; // 鼠标移动 或 触摸移动 var touchmove = function (e) { var _a; if (!internalRef.current.isPressed) { return; } e.preventDefault(); var _b = getClient(e), clientX = _b.clientX, clientY = _b.clientY; var diffX = clientX - internalRef.current.startInfo.x; // 移动距离 internalRef.current.trail.push([clientX, clientY]); // 记录移动轨迹 if (latestStatus.current !== exports.Status.Moving && diffX > 0) { setStatus(exports.Status.Moving); } var puzzleLeft = diffX; // 拼图左偏移值 var sliderButtonLeft = diffX; // 滑块按钮左偏移值 if (internalRef.current.currentTargetType === exports.CurrentTargetType.Puzzle) { diffX = Math.max(0, Math.min(diffX, internalRef.current.puzzleMaxDistance)); puzzleLeft = diffX + puzzleSize.left; sliderButtonLeft = diffX * internalRef.current.ratio; } else { diffX = Math.max(0, Math.min(diffX, internalRef.current.buttonMaxDistance)); sliderButtonLeft = diffX; puzzleLeft = diffX * internalRef.current.ratio + puzzleSize.left; } (_a = controlRef.current) === null || _a === void 0 ? void 0 : _a.updateLeft(sliderButtonLeft); updatePuzzleLeft(puzzleLeft); }; // 鼠标弹起 或 停止触摸 var touchend = function (e) { document.removeEventListener(events.move, touchmove); document.removeEventListener(events.end, touchend); document.removeEventListener(events.cancel, touchend); if (!internalRef.current.isPressed) { return; } if (latestStatus.current !== exports.Status.Moving || typeof onVerify !== 'function') { internalRef.current.isPressed = false; // 如果是移动端事件,并且是触发式,隐藏浮层 if (isSupportTouch || e.pointerType === 'pen' || e.pointerType === 'touch' || (showJigsawOnActive && !internalRef.current.isMouseEntered)) { hidePanel(); } reset(); return; } internalRef.current.isPressed = false; setStatus(exports.Status.Verify); var endTimestamp = new Date().getTime(); var _a = getClient(e), clientX = _a.clientX, clientY = _a.clientY; var diffY = clientY - internalRef.current.startInfo.y; var diffX = clientX - internalRef.current.startInfo.x; // 拼图移动距离 var sliderOffsetX = diffX; // 滑块偏移值 if (internalRef.current.currentTargetType === exports.CurrentTargetType.Puzzle) { diffX = Math.max(0, Math.min(diffX, internalRef.current.puzzleMaxDistance)); sliderOffsetX = diffX * internalRef.current.ratio; } else { diffX = Math.max(0, Math.min(diffX, internalRef.current.buttonMaxDistance)); sliderOffsetX = diffX; diffX *= internalRef.current.ratio; } onVerify({ x: normalizeNumber(diffX, precision), y: normalizeNumber(diffY, precision), sliderOffsetX: normalizeNumber(sliderOffsetX, precision), duration: endTimestamp - internalRef.current.startInfo.timestamp, trail: internalRef.current.trail, targetType: internalRef.current.currentTargetType, errorCount: internalRef.current.errorCount }) .then(function () { internalRef.current.errorCount = 0; setStatus(exports.Status.Success); hidePanel(); }) .catch(function () { internalRef.current.errorCount += 1; setStatus(exports.Status.Error); if (isSupportTouch || e.pointerType === 'pen' || e.pointerType === 'touch' || (showJigsawOnActive && !internalRef.current.isMouseEntered)) { hidePanel(); } if ((limitErrorCount <= 0 || internalRef.current.errorCount < limitErrorCount) && autoRefreshOnError) { internalRef.current.refreshTimer = setTimeout(function () { refresh(); }, errorHoldDuration); } }); }; rcHooks.useMount(function () { if (autoRequest) { getJigsawImages(); } }); // 提供给外部 React.useImperativeHandle(actionRef, function () { return ({ refresh: refresh, get status() { return latestStatus.current; } }); }); return (React.createElement("div", { className: classnames(prefixCls, className, "".concat(prefixCls, "-").concat(mode), (_b = {}, _b["".concat(prefixCls, "-").concat(mode, "-").concat(placement)] = mode === 'float', _b)), style: tslib.__assign({ width: bgSize.width }, style), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave }, !modeIsSlider && (React.createElement("div", { className: "".concat(prefixCls, "-panel"), ref: panelRef }, React.createElement("div", { className: "".concat(prefixCls, "-panel-inner"), style: tslib.__assign(tslib.__assign({}, styles === null || styles === void 0 ? void 0 : styles.panel), { height: bgSize.height }) }, React.createElement(Jigsaw, { status: status, bgSize: bgSize, puzzleSize: puzzleSize, bgUrl: jigsawImgs === null || jigsawImgs === void 0 ? void 0 : jigsawImgs.bgUrl, puzzleUrl: jigsawImgs === null || jigsawImgs === void 0 ? void 0 : jigsawImgs.puzzleUrl, jigsawRef: jigsawRef, loadingBoxProps: loadingBoxProps, loadFailedIcon: tipIcon === null || tipIcon === void 0 ? void 0 : tipIcon.loadFailed, showRefreshIcon: showRefreshIcon, refreshIcon: refreshIcon, disabledRefresh: isLimitErrors, onRefresh: refresh, style: styles === null || styles === void 0 ? void 0 : styles.jigsaw, bgImgProps: { style: styles === null || styles === void 0 ? void 0 : styles.bgImg }, puzzleImgProps: (_c = { style: styles === null || styles === void 0 ? void 0 : styles.puzzleImg }, _c[startEventName] = touchstartPuzzle, _c) }, jigsawContent)))), React.createElement(ControlBar, { status: status, isLimitErrors: isLimitErrors, tipText: tipText, tipIcon: tipIcon, style: styles === null || styles === void 0 ? void 0 : styles.control, onClick: handleClickControl, indicatorProps: { style: styles === null || styles === void 0 ? void 0 : styles.indicator }, sliderButtonProps: tslib.__assign(tslib.__assign({}, sliderButtonProps), (_d = {}, _d[startEventName] = touchstartSliderButton, _d)), controlRef: controlRef }))); }; exports.default = SliderCaptcha;