@thecb/components 11.3.1 → 11.3.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +152 -54
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +19 -6
- package/dist/index.esm.js +152 -54
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/molecules/turnstile-widget/TurnstileWidget.js +142 -30
- package/src/hooks/use-turnstile-script/index.js +19 -6
- package/src/.DS_Store +0 -0
- package/src/components/.DS_Store +0 -0
- package/src/components/atoms/.DS_Store +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -513,32 +513,45 @@ declare function useConditionallyAddValidator(
|
|
|
513
513
|
* @param {string} verifyURL - The URL of the Turnstile verification script.
|
|
514
514
|
*/
|
|
515
515
|
declare const useTurnstileScript = verifyURL => {
|
|
516
|
-
const [
|
|
516
|
+
const [scriptLoaded, setScriptLoaded] = useState(false);
|
|
517
|
+
const [scriptError, setScriptError] = useState(false);
|
|
518
|
+
|
|
519
|
+
const handleScriptError = () => {
|
|
520
|
+
setScriptError(true);
|
|
521
|
+
setScriptLoaded(false);
|
|
522
|
+
};
|
|
517
523
|
|
|
518
524
|
useEffect(() => {
|
|
519
525
|
if (typeof window === "undefined") {
|
|
520
|
-
|
|
526
|
+
setScriptLoaded(false);
|
|
521
527
|
return;
|
|
522
528
|
}
|
|
523
529
|
if (window.turnstile && window.turnstile.render) {
|
|
524
|
-
|
|
530
|
+
setScriptLoaded(true);
|
|
525
531
|
return;
|
|
526
532
|
}
|
|
527
533
|
|
|
528
534
|
const script = document.createElement("script");
|
|
529
535
|
script.src = `${verifyURL}?render=explicit`;
|
|
530
536
|
script.onload = () => {
|
|
531
|
-
|
|
537
|
+
setScriptLoaded(true);
|
|
538
|
+
};
|
|
539
|
+
script.onerror = () => {
|
|
540
|
+
handleScriptError();
|
|
541
|
+
};
|
|
542
|
+
script.onabort = () => {
|
|
543
|
+
handleScriptError();
|
|
532
544
|
};
|
|
533
545
|
script.defer = true;
|
|
534
546
|
document.getElementsByTagName("head")[0].appendChild(script);
|
|
535
547
|
|
|
536
548
|
return () => {
|
|
537
|
-
|
|
549
|
+
setScriptLoaded(false);
|
|
550
|
+
setScriptError(false);
|
|
538
551
|
};
|
|
539
552
|
}, [verifyURL]);
|
|
540
553
|
|
|
541
|
-
return
|
|
554
|
+
return { scriptLoaded, scriptError };
|
|
542
555
|
};
|
|
543
556
|
|
|
544
557
|
|
package/dist/index.esm.js
CHANGED
|
@@ -24404,29 +24404,47 @@ function useConditionallyAddValidator(condition, validatorFn, addValidator, remo
|
|
|
24404
24404
|
var useTurnstileScript = function useTurnstileScript(verifyURL) {
|
|
24405
24405
|
var _useState = useState(false),
|
|
24406
24406
|
_useState2 = _slicedToArray(_useState, 2),
|
|
24407
|
-
|
|
24408
|
-
|
|
24407
|
+
scriptLoaded = _useState2[0],
|
|
24408
|
+
setScriptLoaded = _useState2[1];
|
|
24409
|
+
var _useState3 = useState(false),
|
|
24410
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
24411
|
+
scriptError = _useState4[0],
|
|
24412
|
+
setScriptError = _useState4[1];
|
|
24413
|
+
var handleScriptError = function handleScriptError() {
|
|
24414
|
+
setScriptError(true);
|
|
24415
|
+
setScriptLoaded(false);
|
|
24416
|
+
};
|
|
24409
24417
|
useEffect$1(function () {
|
|
24410
24418
|
if (typeof window === "undefined") {
|
|
24411
|
-
|
|
24419
|
+
setScriptLoaded(false);
|
|
24412
24420
|
return;
|
|
24413
24421
|
}
|
|
24414
24422
|
if (window.turnstile && window.turnstile.render) {
|
|
24415
|
-
|
|
24423
|
+
setScriptLoaded(true);
|
|
24416
24424
|
return;
|
|
24417
24425
|
}
|
|
24418
24426
|
var script = document.createElement("script");
|
|
24419
24427
|
script.src = "".concat(verifyURL, "?render=explicit");
|
|
24420
24428
|
script.onload = function () {
|
|
24421
|
-
|
|
24429
|
+
setScriptLoaded(true);
|
|
24430
|
+
};
|
|
24431
|
+
script.onerror = function () {
|
|
24432
|
+
handleScriptError();
|
|
24433
|
+
};
|
|
24434
|
+
script.onabort = function () {
|
|
24435
|
+
handleScriptError();
|
|
24422
24436
|
};
|
|
24423
24437
|
script.defer = true;
|
|
24424
24438
|
document.getElementsByTagName("head")[0].appendChild(script);
|
|
24425
24439
|
return function () {
|
|
24426
|
-
|
|
24440
|
+
setScriptLoaded(false);
|
|
24441
|
+
setScriptError(false);
|
|
24427
24442
|
};
|
|
24428
24443
|
}, [verifyURL]);
|
|
24429
|
-
return
|
|
24444
|
+
return {
|
|
24445
|
+
scriptLoaded: scriptLoaded,
|
|
24446
|
+
scriptError: scriptError
|
|
24447
|
+
};
|
|
24430
24448
|
};
|
|
24431
24449
|
|
|
24432
24450
|
|
|
@@ -49980,89 +49998,169 @@ var HeroImage$1 = withWindowSize(themeComponent(HeroImage, "HeroImage", fallback
|
|
|
49980
49998
|
var TurnstileWidgetContainer = styled(Box).withConfig({
|
|
49981
49999
|
displayName: "TurnstileWidget__TurnstileWidgetContainer",
|
|
49982
50000
|
componentId: "sc-btaugr-0"
|
|
49983
|
-
})(["display:flex;padding:", ";justify-content:", ";width:100%;"], function (_ref) {
|
|
50001
|
+
})(["display:flex;flex-direction:column;padding:", ";justify-content:", ";align-items:", ";width:100%;"], function (_ref) {
|
|
49984
50002
|
var padding = _ref.padding;
|
|
49985
50003
|
return padding;
|
|
49986
50004
|
}, function (_ref2) {
|
|
49987
50005
|
var justify = _ref2.justify;
|
|
49988
50006
|
return justify;
|
|
50007
|
+
}, function (_ref3) {
|
|
50008
|
+
var align = _ref3.align;
|
|
50009
|
+
return align;
|
|
49989
50010
|
});
|
|
49990
|
-
var
|
|
49991
|
-
|
|
49992
|
-
|
|
49993
|
-
|
|
49994
|
-
|
|
49995
|
-
|
|
49996
|
-
|
|
49997
|
-
|
|
49998
|
-
|
|
49999
|
-
|
|
50000
|
-
|
|
50001
|
-
|
|
50002
|
-
|
|
50003
|
-
|
|
50004
|
-
|
|
50005
|
-
|
|
50006
|
-
|
|
50007
|
-
|
|
50008
|
-
|
|
50009
|
-
|
|
50010
|
-
|
|
50011
|
-
|
|
50012
|
-
|
|
50011
|
+
var FATAL_ERROR_CODES = [
|
|
50012
|
+
// Configuration errors
|
|
50013
|
+
/^100/, /^105/, /^110100$/, /^110110$/, /^110200$/, /^110420$/, /^110430$/, /^400020$/, /^400030$/, /^400040$/,
|
|
50014
|
+
// Browser/environment errors
|
|
50015
|
+
/^110500$/, /^110510$/, /^200010$/, /^200100$/,
|
|
50016
|
+
// Internal errors
|
|
50017
|
+
/^120/];
|
|
50018
|
+
var TurnstileWidget = /*#__PURE__*/forwardRef(function (_ref4, ref) {
|
|
50019
|
+
var verifyURL = _ref4.verifyURL,
|
|
50020
|
+
siteKey = _ref4.siteKey,
|
|
50021
|
+
_ref4$onSuccess = _ref4.onSuccess,
|
|
50022
|
+
onSuccess = _ref4$onSuccess === void 0 ? noop$1 : _ref4$onSuccess,
|
|
50023
|
+
_ref4$onError = _ref4.onError,
|
|
50024
|
+
onError = _ref4$onError === void 0 ? noop$1 : _ref4$onError,
|
|
50025
|
+
_ref4$onExpired = _ref4.onExpired,
|
|
50026
|
+
onExpired = _ref4$onExpired === void 0 ? noop$1 : _ref4$onExpired,
|
|
50027
|
+
_ref4$padding = _ref4.padding,
|
|
50028
|
+
padding = _ref4$padding === void 0 ? "1rem" : _ref4$padding,
|
|
50029
|
+
_ref4$justify = _ref4.justify,
|
|
50030
|
+
justify = _ref4$justify === void 0 ? "flex-end" : _ref4$justify,
|
|
50031
|
+
_ref4$align = _ref4.align,
|
|
50032
|
+
align = _ref4$align === void 0 ? "flex-end" : _ref4$align,
|
|
50033
|
+
_ref4$size = _ref4.size,
|
|
50034
|
+
size = _ref4$size === void 0 ? "normal" : _ref4$size,
|
|
50035
|
+
_ref4$tabindex = _ref4.tabindex,
|
|
50036
|
+
tabindex = _ref4$tabindex === void 0 ? 0 : _ref4$tabindex,
|
|
50037
|
+
_ref4$retry = _ref4.retry,
|
|
50038
|
+
retry = _ref4$retry === void 0 ? "never" : _ref4$retry,
|
|
50039
|
+
_ref4$theme = _ref4.theme,
|
|
50040
|
+
theme = _ref4$theme === void 0 ? "light" : _ref4$theme,
|
|
50041
|
+
_ref4$extraStyles = _ref4.extraStyles,
|
|
50042
|
+
extraStyles = _ref4$extraStyles === void 0 ? "" : _ref4$extraStyles,
|
|
50043
|
+
_ref4$maxErrorRetries = _ref4.maxErrorRetries,
|
|
50044
|
+
maxErrorRetries = _ref4$maxErrorRetries === void 0 ? 3 : _ref4$maxErrorRetries;
|
|
50013
50045
|
if (!verifyURL || !siteKey) return null;
|
|
50014
50046
|
var widgetRef = useRef(null);
|
|
50047
|
+
var widgetIdRef = useRef(null);
|
|
50048
|
+
var retryCountRef = useRef(0);
|
|
50015
50049
|
var _useState = useState(null),
|
|
50016
50050
|
_useState2 = _slicedToArray(_useState, 2),
|
|
50017
|
-
|
|
50018
|
-
|
|
50019
|
-
var
|
|
50051
|
+
error = _useState2[0],
|
|
50052
|
+
setError = _useState2[1];
|
|
50053
|
+
var _useTurnstileScript = useTurnstileScript(verifyURL),
|
|
50054
|
+
scriptLoaded = _useTurnstileScript.scriptLoaded,
|
|
50055
|
+
scriptError = _useTurnstileScript.scriptError;
|
|
50056
|
+
|
|
50057
|
+
// Clear the error state and reset retry count
|
|
50058
|
+
var clearError = function clearError() {
|
|
50059
|
+
setError(null);
|
|
50060
|
+
retryCountRef.current = 0;
|
|
50061
|
+
};
|
|
50062
|
+
|
|
50063
|
+
// Handle errors based on the retry strategy
|
|
50064
|
+
var handleError = function handleError(errorCode) {
|
|
50065
|
+
retryCountRef.current += 1;
|
|
50066
|
+
var currentRetryCount = retryCountRef.current;
|
|
50067
|
+
|
|
50068
|
+
// If we haven't exceeded max retries, reset and try again
|
|
50069
|
+
if (currentRetryCount <= maxErrorRetries) {
|
|
50070
|
+
window.turnstile.reset(widgetIdRef.current);
|
|
50071
|
+
setError(null);
|
|
50072
|
+
return;
|
|
50073
|
+
}
|
|
50074
|
+
|
|
50075
|
+
// Max retries exceeded - show appropriate error message
|
|
50076
|
+
if (errorCode) {
|
|
50077
|
+
var errorMessage = getErrorMessage(errorCode);
|
|
50078
|
+
setError(errorMessage);
|
|
50079
|
+
}
|
|
50080
|
+
};
|
|
50081
|
+
var getErrorMessage = function getErrorMessage(errorCode) {
|
|
50082
|
+
var isFatalError = FATAL_ERROR_CODES.some(function (pattern) {
|
|
50083
|
+
return pattern.test(errorCode);
|
|
50084
|
+
});
|
|
50085
|
+
if (isFatalError) {
|
|
50086
|
+
return "Browser or system error. Please refresh the page or update your browser.";
|
|
50087
|
+
}
|
|
50088
|
+
return "Something went wrong. Please refresh and try again.";
|
|
50089
|
+
};
|
|
50090
|
+
|
|
50091
|
+
// Reset the Turnstile widget when requested
|
|
50092
|
+
var resetWidget = useCallback(function () {
|
|
50093
|
+
if (widgetIdRef.current && window.turnstile) {
|
|
50094
|
+
window.turnstile.reset(widgetIdRef.current);
|
|
50095
|
+
clearError();
|
|
50096
|
+
}
|
|
50097
|
+
}, [clearError]);
|
|
50020
50098
|
|
|
50021
50099
|
// Allow the parent component to reset the Turnstile widget
|
|
50022
50100
|
useImperativeHandle(ref, function () {
|
|
50023
50101
|
return {
|
|
50024
|
-
reset:
|
|
50025
|
-
if (widgetId && window.turnstile) {
|
|
50026
|
-
window.turnstile.reset(widgetId);
|
|
50027
|
-
}
|
|
50028
|
-
}
|
|
50102
|
+
reset: resetWidget
|
|
50029
50103
|
};
|
|
50030
|
-
}, [
|
|
50104
|
+
}, [resetWidget]);
|
|
50031
50105
|
useEffect$1(function () {
|
|
50032
|
-
if (
|
|
50033
|
-
|
|
50034
|
-
|
|
50106
|
+
if (scriptError) {
|
|
50107
|
+
setError("Unable to load security verification. Please refresh the page.");
|
|
50108
|
+
onError === null || onError === void 0 || onError({
|
|
50109
|
+
type: "script_load_failed",
|
|
50110
|
+
error: scriptError
|
|
50111
|
+
});
|
|
50112
|
+
return;
|
|
50113
|
+
}
|
|
50114
|
+
if (widgetIdRef.current || !window.turnstile || !scriptLoaded) return;
|
|
50115
|
+
try {
|
|
50116
|
+
widgetIdRef.current = window.turnstile.render(widgetRef.current, {
|
|
50035
50117
|
sitekey: siteKey,
|
|
50036
50118
|
size: size,
|
|
50037
50119
|
retry: retry,
|
|
50038
50120
|
tabindex: tabindex,
|
|
50039
50121
|
theme: theme,
|
|
50040
50122
|
callback: function callback(token) {
|
|
50041
|
-
|
|
50123
|
+
clearError();
|
|
50124
|
+
onSuccess(token);
|
|
50042
50125
|
},
|
|
50043
|
-
"error-callback": function errorCallback() {
|
|
50044
|
-
|
|
50126
|
+
"error-callback": function errorCallback(errorCode) {
|
|
50127
|
+
if (retry === "never") {
|
|
50128
|
+
handleError(errorCode);
|
|
50129
|
+
}
|
|
50130
|
+
onError === null || onError === void 0 || onError(errorCode);
|
|
50045
50131
|
},
|
|
50046
50132
|
"expired-callback": function expiredCallback() {
|
|
50047
|
-
|
|
50133
|
+
clearError();
|
|
50134
|
+
onExpired === null || onExpired === void 0 || onExpired();
|
|
50048
50135
|
}
|
|
50049
50136
|
});
|
|
50050
|
-
|
|
50137
|
+
} catch (error) {
|
|
50138
|
+
setError("Unable to load security verification. Please refresh the page.");
|
|
50139
|
+
onError === null || onError === void 0 || onError({
|
|
50140
|
+
type: "render_failed",
|
|
50141
|
+
error: error
|
|
50142
|
+
});
|
|
50051
50143
|
}
|
|
50052
50144
|
return function () {
|
|
50053
|
-
if (
|
|
50054
|
-
window.turnstile.remove(
|
|
50055
|
-
|
|
50145
|
+
if (widgetIdRef.current && window.turnstile) {
|
|
50146
|
+
window.turnstile.remove(widgetIdRef.current);
|
|
50147
|
+
widgetIdRef.current = null;
|
|
50148
|
+
clearError();
|
|
50056
50149
|
}
|
|
50057
50150
|
};
|
|
50058
|
-
}, [
|
|
50059
|
-
return /*#__PURE__*/React__default.createElement(TurnstileWidgetContainer, {
|
|
50151
|
+
}, [scriptLoaded, siteKey]);
|
|
50152
|
+
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TurnstileWidgetContainer, {
|
|
50060
50153
|
padding: padding,
|
|
50061
50154
|
justify: justify,
|
|
50155
|
+
align: align,
|
|
50062
50156
|
extraStyles: extraStyles
|
|
50063
50157
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
50064
50158
|
ref: widgetRef
|
|
50065
|
-
})
|
|
50159
|
+
}), error && /*#__PURE__*/React__default.createElement(Text$1, {
|
|
50160
|
+
color: ERROR_COLOR,
|
|
50161
|
+
variant: "pXS",
|
|
50162
|
+
extraStyles: "\n word-break: break-word;\n text-align: end;\n "
|
|
50163
|
+
}, error)));
|
|
50066
50164
|
});
|
|
50067
50165
|
|
|
50068
50166
|
var pageBackground = "#FBFCFD";
|