@adyen/kyc-components
Version:
This guide assumes that you have already an account with Adyen. A legalEntity needs to be created, and you need to have a `legalEntityId` to instatiate a Component.
715 lines (714 loc) • 25.5 kB
JavaScript
try {
let e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "5578987d-4bf0-4f8e-93a0-3f0fe10e66a1", e._sentryDebugIdIdentifier = "sentry-dbid-5578987d-4bf0-4f8e-93a0-3f0fe10e66a1");
} catch (e) {}
import { a as Icon, r as useTranslation } from "./translation-BFxyJ1c5.js";
import { r as cloneObject } from "./useAnalyticsContext-BVFDMrVE.js";
import { y as isEmpty } from "./validatorUtils-DRapRJ6z.js";
import { t as KEYBOARD_KEYS } from "./keys-fzUbt2xF.js";
import { t as Field } from "./Field-pcJkjIG_.js";
import { n as useForwardedRef, r as InputBase, t as InputText } from "./InputText-C30dZxS4.js";
import { forwardRef } from "preact/compat";
import { useCallback as useCallback$1, useEffect as useEffect$1, useLayoutEffect, useMemo as useMemo$1, useRef as useRef$1, useState as useState$1 } from "preact/hooks";
import { Fragment as Fragment$1, jsx, jsxs } from "preact/jsx-runtime";
//#region src/utils/makeArrayOfRepeatedObjects.ts
var makeArrayOfRepeatedObjects = (length, obj) => {
const array = [];
for (let i = 0; i < length; i += 1) array.push(cloneObject(obj));
return array;
};
//#endregion
//#region src/utils/masking/shiftRight.ts
var shiftRight = (possibleShifts, matchedTokens, remainingTokens) => {
let shiftsToTry = [...possibleShifts];
let current = {
matchedTokens,
remainingTokens
};
while (current.remainingTokens.length > 0 && shiftsToTry.length > 0) {
const possibleShift = shiftsToTry[0];
const shifted = tryShift(current.matchedTokens, current.remainingTokens, possibleShift.fromIndex, possibleShift.shiftDistance);
if (shifted === "notPossible") shiftsToTry = shiftsToTry.slice(1);
else {
current = shifted;
shiftsToTry = [...possibleShifts];
}
}
return current;
};
/**
* Returns all possible shifts of optional inputs, sorted by best to worst
* @param mask
*/
var findPossibleShifts = (mask) => {
const inputOnlyMask = mask.filter((t) => t.type === "input");
const optionals = inputOnlyMask.filter((t) => t.optional);
const possibleShifts = [];
for (const optional of optionals) {
const index = inputOnlyMask.indexOf(optional);
for (let i = index + 1; i < inputOnlyMask.length; i += 1) if (inputOnlyMask[i].type === "input") possibleShifts.push({
fromIndex: index,
shiftDistance: i - index
});
}
return possibleShifts.sort((s1, s2) => {
if (s1.fromIndex === s2.fromIndex) return s2.shiftDistance - s1.shiftDistance;
return s1.fromIndex - s2.fromIndex;
});
};
var tryShift = (matchedTokens, remainingTokens, fromIndex, shiftDistance) => {
const normalizedTokens = [...matchedTokens.map((token, i) => ({
...token,
currentValue: token.char,
originalIndex: i
})), ...remainingTokens.map((token, i) => ({
...token,
currentValue: null,
originalIndex: i + matchedTokens.length
}))];
const normalizedInputTokens = normalizedTokens.filter((token) => token.type === "input");
if (normalizedTokens[fromIndex].currentValue === null) return "notPossible";
if (shiftDistance > normalizedInputTokens.slice(fromIndex + 1).filter((t) => !t.currentValue).length) return "notPossible";
for (let i = 0; i < normalizedInputTokens.length; i += 1) {
const token = normalizedInputTokens[i];
if (i < fromIndex) token.potentialValue = token.currentValue;
else if (i < fromIndex + shiftDistance) token.potentialValue = null;
else token.potentialValue = normalizedInputTokens[i - shiftDistance].currentValue;
}
if (!normalizedInputTokens.every((token) => {
if (!token.potentialValue) return token.optional;
return token.allow?.test(token.potentialValue) ?? true;
})) return "notPossible";
let matchedUpTo = 0;
for (let i = 0; i < normalizedTokens.length; i += 1) {
const token = normalizedInputTokens.find((t) => t.originalIndex === i) ?? normalizedTokens[i];
if (token.type === "input" && !token.potentialValue && !token.optional) break;
matchedUpTo = i + 1;
}
return {
matchedTokens: normalizedTokens.slice(0, matchedUpTo).map((token) => ({
...token,
char: token.type === "nonInput" ? token.char : token.potentialValue
})),
remainingTokens: normalizedTokens.slice(matchedUpTo)
};
};
//#endregion
//#region src/utils/masking/maskHelpers.ts
var nonInputs = (str, options) => Array.from(str).map((char) => ({
type: "nonInput",
char,
includeInValue: options?.includeInValue ?? false,
displayEagerly: options?.displayEagerly ?? true
}));
var spacer = nonInputs(" ")[0];
var alphaInputs = (length, optional = false) => makeArrayOfRepeatedObjects(length, {
type: "input",
allow: /[A-Za-z]/,
optional
});
var numericInputs = (length, optional = false) => makeArrayOfRepeatedObjects(length, {
type: "input",
allow: /\d/,
optional
});
var alphanumericInputs = (length, optional = false) => makeArrayOfRepeatedObjects(length, {
type: "input",
allow: /[\dA-Za-z]/,
optional
});
var customInputs = (length, regex, optional = false) => makeArrayOfRepeatedObjects(length, {
type: "input",
allow: regex,
optional
});
var makeMask = (...tokens) => ({
tokens,
possibleShifts: findPossibleShifts(tokens)
});
//#endregion
//#region src/utils/isValueObscured.ts
var isValueObscured = (value) => typeof value === "string" && !!value.match(/[*]{1,}/)?.length;
//#endregion
//#region src/utils/masking/displayValueToPureValue.ts
var cachedStripPatterns = /* @__PURE__ */ new Map();
var makeStripPattern = (mask) => {
const inputPatterns = mask.tokens.filter((token) => token.type === "input" && !!token.allow).map((token) => token.allow);
const nonInputChars = mask.tokens.filter((token) => token.type === "nonInput" && !token.includeInValue).map((token) => token.char);
const strippedChars = [...new Set(nonInputChars.filter((char) => !inputPatterns.some((pattern) => pattern.test(char))))];
const stripPattern = new RegExp(`[${strippedChars.join("")}]`, "g");
cachedStripPatterns.set(mask, stripPattern);
return stripPattern;
};
/**
* Takes a formatted value and converts it back into a pure value by stripping the non-input /
* non-included characters in a given {@link Mask}.
*
* This is the inverse of {@link matchAgainstMask}.
*
* @see matchAgainstMask
*/
var displayValueToPureValue = (displayValue, mask) => {
const stripPattern = cachedStripPatterns.get(mask) ?? makeStripPattern(mask);
return displayValue.replaceAll(stripPattern, "");
};
//#endregion
//#region src/utils/masking/stripNonAllowedValues.ts
var cachedAllowedPatterns = /* @__PURE__ */ new Map();
/**
* Creates a regular expression that matches any of the provided patterns.
*
* @param regexArray - An array of regular expressions.
* @returns A combined regular expression.
*/
var combineRegexArray = (regexArray) => {
const combinedPattern = regexArray.map((pattern) => {
const match = String(pattern).match(/\/?(.*)\//);
return match ? match[1] : pattern;
}).join("|");
return new RegExp(`(?:${combinedPattern})`, "g");
};
/**
* Creates a regular expression that matches the allowed input patterns for the given mask.
*
* @param mask - The mask definition.
* @returns The compiled regular expression.
*/
var createAllowedPattern = (mask) => {
const inputPatterns = mask.tokens.filter((token) => token.type === "input" && !!token.allow).map((token) => token.allow);
const allowedRegex = combineRegexArray([...new Set(inputPatterns.map((r) => r.toString()))].map((str) => {
const [_, pattern] = str.match(/\/(.*)\/([gimsuy]*)/) || [];
return new RegExp(pattern);
}));
cachedAllowedPatterns.set(mask, allowedRegex);
return allowedRegex;
};
var replaceNonMatchingChars = (value, allowedInputPatterns) => {
const matches = value.match(allowedInputPatterns);
return matches ? matches.join("") : "";
};
var stripNonAllowedValues = (pureValue, mask) => {
return replaceNonMatchingChars(pureValue, cachedAllowedPatterns.get(mask) ?? createAllowedPattern(mask));
};
//#endregion
//#region src/utils/masking/matchAgainstMask.ts
var getAvailableInputTokens = (tokens) => {
const availableTokens = [];
for (const token of tokens) {
if (token.type === "nonInput") {
if (token.includeInValue) availableTokens.push({
...token,
offset: tokens.indexOf(token)
});
continue;
}
availableTokens.push({
...token,
offset: tokens.indexOf(token)
});
if (token.type !== "input" || !token.optional) break;
}
return availableTokens;
};
var findMatchingToken = (tokensWithOffset, char) => tokensWithOffset.find((token) => token.type === "nonInput" || !token.allow || token.allow.test(char)) ?? null;
var getEagerSuffix = (tokens) => {
let suffix = "";
for (const token of tokens) {
if (token.type === "input") if (token.optional) continue;
else break;
if (!token.displayEagerly) break;
suffix += token.char;
}
return suffix;
};
var getPotentialForMoreOptionalInput = (tokens) => tokens.some((token) => token.type === "input" && token.optional);
/**
* Takes some pure value e.g. `NL123456` and a {@link Mask}, and returns a `partialCorrect`,
* `correct` or `mismatch` {@link MaskResult} accordingly.
*
* This is the inverse of {@link displayValueToPureValue}.
*
* @returns the result of matching the given value against the mask
* @param pureValue the pure, unformatted input value
* @param mask the mask to match against
* @param acceptObscuredValue whether to accept
*
* @see displayValueToPureValue
*/
var matchAgainstMask = (pureValue, mask, acceptObscuredValue = false, stripNonAllowedInputs = false) => {
let tokensToProcess = [...mask.tokens];
let charsToProcess = pureValue;
let charIndex = 0;
let matchedTokens = [];
if (acceptObscuredValue && isValueObscured(pureValue)) return {
outcome: "obscureCorrect",
displayValue: pureValue
};
const shiftChars = (increment) => {
charIndex += increment;
charsToProcess = charsToProcess.slice(increment);
};
const shiftTokens = (increment) => {
tokensToProcess = tokensToProcess.slice(increment);
};
const displayValue = () => matchedTokens.map((token) => token.char).join("");
const getNonInputCharacters = () => matchedTokens.filter((token) => token.type === "nonInput" && token.includeInValue === false).map((token) => token.char).join("");
while (true) {
let partialDisplayValue = displayValue();
if (stripNonAllowedInputs) {
partialDisplayValue = partialDisplayValue.replaceAll(getNonInputCharacters(), "");
if (!partialDisplayValue.length) partialDisplayValue = stripNonAllowedValues(charsToProcess, mask);
}
const char = charsToProcess[0];
const token = tokensToProcess[0];
if (!char && !tokensToProcess.some((t) => t.type === "input" && !t.optional)) return {
outcome: "correct",
displayValue: displayValue() + getEagerSuffix(tokensToProcess),
potentialForMoreOptionalInput: getPotentialForMoreOptionalInput(tokensToProcess)
};
if (!char) {
const output = shiftRight(mask.possibleShifts, matchedTokens, tokensToProcess);
matchedTokens = output.matchedTokens;
tokensToProcess = output.remainingTokens;
return {
outcome: "partialCorrect",
displayValue: displayValue() + getEagerSuffix(tokensToProcess)
};
}
if (!token) return {
outcome: "mismatch",
badChar: char,
mismatchAtChar: charIndex,
mismatchedToken: "inputTooLong",
partialDisplayValue
};
if (token.type === "nonInput") {
if (token.includeInValue) {
if (char !== token.char) return {
outcome: "mismatch",
badChar: char,
mismatchAtChar: charIndex,
mismatchedToken: token,
partialDisplayValue
};
shiftChars(1);
}
matchedTokens.push(token);
shiftTokens(1);
}
if (token.type === "input") {
const matchingToken = findMatchingToken(getAvailableInputTokens(tokensToProcess), char);
if (!matchingToken) return {
outcome: "mismatch",
badChar: char,
mismatchAtChar: charIndex,
mismatchedToken: token,
partialDisplayValue
};
matchedTokens.push({
...matchingToken,
char
});
shiftTokens(matchingToken.offset + 1);
shiftChars(1);
}
}
};
//#endregion
//#region src/components/ui/molecules/InputEmail/InputEmail.tsx
var InputEmail = forwardRef(({ onInput, transformInput, ...props }, ref) => {
const [cursorPosition, setCursorPosition] = useState$1(null);
const localRef = useForwardedRef(ref);
const inputHandler = useCallback$1((event) => {
const inputEl = event.currentTarget;
if (transformInput) {
setCursorPosition(inputEl.selectionStart);
const transformedInput = transformInput(inputEl.value);
onInput({
...event,
target: {
...event.target,
value: transformedInput
}
});
} else onInput(event);
}, [transformInput, onInput]);
useLayoutEffect(() => {
if (cursorPosition && localRef.current?.selectionStart !== cursorPosition) localRef?.current?.setSelectionRange(cursorPosition, cursorPosition, "none");
}, [cursorPosition, localRef]);
return /* @__PURE__ */ jsx(InputBase, {
...props,
onInput: inputHandler,
ref: localRef,
type: "email",
autoCapitalize: "off"
});
});
//#endregion
//#region src/components/ui/molecules/InputTelephone/InputTelephone.tsx
var InputTelephone = forwardRef(({ onInput, transformInput, ...props }, ref) => {
const [cursorPosition, setCursorPosition] = useState$1(null);
const localRef = useForwardedRef(ref);
const inputHandler = useCallback$1((event) => {
const inputEl = event.currentTarget;
if (transformInput) {
setCursorPosition(inputEl.selectionStart);
const transformedInput = transformInput(inputEl.value);
onInput({
...event,
target: {
...event.target,
value: transformedInput
}
});
} else onInput(event);
}, [transformInput, onInput]);
useLayoutEffect(() => {
if (cursorPosition && localRef.current?.selectionStart !== cursorPosition) localRef?.current?.setSelectionRange(cursorPosition, cursorPosition, "none");
}, [cursorPosition, localRef]);
return /* @__PURE__ */ jsx(InputBase, {
...props,
onInput: inputHandler,
ref: localRef,
type: "tel"
});
});
var MaskedInput_module_default = {
mismatch: "adyen-kyc-mismatch",
mismatchShake: "adyen-kyc-mismatchShake"
};
//#endregion
//#region src/components/ui/molecules/MaskedInput/MaskedInput.tsx
var deriveInputState = (isValid, isFocused, isDisabled, isOptional, hasNullishValue, hasBlurred, errorMessage, shouldValidate, potentiallyMoreOptionalCharacters, formatGuidance, t) => {
if (isDisabled) return { isError: false };
if (isOptional && hasNullishValue) return { isError: false };
if (isValid && (!potentiallyMoreOptionalCharacters || !isFocused)) return {
isError: false,
text: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Icon, {
name: "checkmark-small",
className: "adyen-kyc-helper-text__valid-format-check"
}), t(($) => $["formatIsCorrect"])] })
};
if (isFocused && formatGuidance) return {
isError: false,
text: formatGuidance
};
if (!isValid && (shouldValidate || hasBlurred)) return {
isError: true,
errorMessage,
text: formatGuidance
};
return { isError: false };
};
var MISMATCH_ANIMATION_NAME = "mismatchShake";
var Inner = ({ name, inputState, optional, disabled, readonly, placeholder, displayValue, inputRef, type, id, showingMismatch, onInput, onBlur, onFocus, onPaste, onKeyDown, ...props }) => {
switch (type) {
case "text": return /* @__PURE__ */ jsx(InputText, {
id,
"aria-describedby": props["aria-describedby"],
"aria-label": props["aria-label"],
"aria-labelledby": props["aria-labelledby"],
"aria-invalid": inputState.isError,
"aria-placeholder": placeholder,
ref: inputRef,
name,
isValid: !inputState.isError,
isInvalid: inputState.isError,
required: !optional,
disabled,
readonly,
placeholder,
value: displayValue,
className: showingMismatch ? MaskedInput_module_default.mismatch : void 0,
onInput,
onPaste,
onKeyDown,
onFocusHandler: onFocus,
onBlurHandler: onBlur
});
case "email": return /* @__PURE__ */ jsx(InputEmail, {
id,
"aria-describedby": props["aria-describedby"],
"aria-label": props["aria-label"],
"aria-labelledby": props["aria-labelledby"],
"aria-invalid": inputState.isError,
"aria-placeholder": placeholder,
ref: inputRef,
name,
isValid: !inputState.isError,
isInvalid: inputState.isError,
required: !optional,
disabled,
readonly,
placeholder,
value: displayValue,
onInput,
onPaste,
onKeyDown,
onFocusHandler: onFocus,
onBlurHandler: onBlur
});
case "tel": return /* @__PURE__ */ jsx(InputTelephone, {
id,
"aria-describedby": props["aria-describedby"],
"aria-label": props["aria-label"],
"aria-labelledby": props["aria-labelledby"],
"aria-invalid": inputState.isError,
"aria-placeholder": placeholder,
ref: inputRef,
name,
isValid: !inputState.isError,
isInvalid: inputState.isError,
required: !optional,
disabled,
readonly,
placeholder,
value: displayValue,
onInput,
onPaste,
onKeyDown,
onFocusHandler: onFocus,
onBlurHandler: onBlur
});
}
};
var MaskedInput = ({ value, onInput, onBlur, onFocus, onMismatch: onMismatchExternal, isValid: validationIsValid, errorMessage, shouldValidate, mask, name, label, placeholder, transformOnType, type = "text", readonly = false, disabled = false, optional = false, formatGuidance = "", acceptObscuredValue = false, helper, helperPosition = "below", useFieldComponent = true, stripNonAllowedInputs = false }) => {
const hasExistingData = !isEmpty(value);
const [preservingMismatchedValue, setPreservingMismatchedValue] = useState$1(false);
const [isFocused, setIsFocused] = useState$1(false);
const [hasBlurred, setHasBlurred] = useState$1(hasExistingData);
const [caretReturnPosition, setCaretReturnPosition] = useState$1(null);
const inputRef = useRef$1(null);
const [showingMismatch, setShowingMismatch] = useState$1(false);
const { t } = useTranslation("ui");
const onAnimationEnd = (event) => {
if (!event.animationName.includes(MISMATCH_ANIMATION_NAME)) return;
setShowingMismatch(false);
};
const onMismatch = useCallback$1((mismatch) => {
if (!inputRef.current) return;
setShowingMismatch(true);
inputRef.current.addEventListener("animationend", onAnimationEnd);
onMismatchExternal?.(mismatch);
}, [onMismatchExternal]);
useEffect$1(() => {
const inputEl = inputRef.current;
if (inputEl) return () => {
inputEl.removeEventListener("animationend", onAnimationEnd);
};
}, []);
const getMaskResult = useCallback$1((pureValue) => {
if (!mask) return {
outcome: "partialCorrect",
displayValue: pureValue
};
return matchAgainstMask(transformOnType ? transformOnType(pureValue) : pureValue, mask, acceptObscuredValue, stripNonAllowedInputs);
}, [
mask,
transformOnType,
acceptObscuredValue,
stripNonAllowedInputs
]);
const displayValueToPure = useCallback$1((displayValue) => {
if (!mask) return displayValue;
return displayValueToPureValue(displayValue, mask);
}, [mask]);
const maskResult = useMemo$1(() => getMaskResult(value), [getMaskResult, value]);
const displayValue = preservingMismatchedValue ? value : maskResult.outcome === "mismatch" ? maskResult.partialDisplayValue : maskResult.displayValue;
const inputState = deriveInputState(validationIsValid && maskResult.outcome !== "mismatch", isFocused, disabled, optional, !displayValue, hasBlurred, errorMessage, shouldValidate, maskResult.outcome === "correct" && !!maskResult.potentialForMoreOptionalInput, formatGuidance, t);
useEffect$1(() => {
if (mask && maskResult.outcome === "mismatch") {
const strippedValue = displayValueToPure(value);
if (getMaskResult(strippedValue).outcome !== "mismatch") {
onInput(strippedValue);
return;
}
setPreservingMismatchedValue(true);
if (stripNonAllowedInputs) onInput(maskResult.partialDisplayValue);
}
}, [
mask,
maskResult,
value,
onInput,
displayValueToPure,
getMaskResult,
stripNonAllowedInputs
]);
useLayoutEffect(() => {
if (caretReturnPosition && inputRef.current && caretReturnPosition !== inputRef.current.selectionStart) {
inputRef.current.setSelectionRange(caretReturnPosition, caretReturnPosition, "none");
setCaretReturnPosition(null);
}
}, [caretReturnPosition]);
const handleInput = useCallback$1((event) => {
const inputEl = event.currentTarget;
const newPureValue = displayValueToPure(inputEl.value);
const newMaskResult = getMaskResult(newPureValue);
const returnCaretLater = (offset = 0) => {
if (!inputEl.selectionStart) return;
setCaretReturnPosition(inputEl.selectionStart + offset);
};
const cancelInput = () => {
returnCaretLater(-1);
inputEl.value = displayValue;
if (typeof event.preventDefault === "function") {
event.preventDefault();
event.stopPropagation();
}
};
if (newMaskResult.outcome === "mismatch") {
if (newMaskResult.partialDisplayValue) {
if (newMaskResult.mismatchedToken === "inputTooLong" && displayValue) {
cancelInput();
onMismatch(newMaskResult);
return;
}
cancelInput();
onMismatch(newMaskResult);
setPreservingMismatchedValue(false);
onInput(newMaskResult.partialDisplayValue);
return;
}
cancelInput();
onMismatch(newMaskResult);
return;
}
if (inputEl.selectionStart && inputEl.selectionStart < inputEl.value.length) returnCaretLater();
setPreservingMismatchedValue(false);
inputEl.value = newMaskResult.displayValue;
onInput(newPureValue);
}, [
displayValue,
displayValueToPure,
getMaskResult,
onInput,
onMismatch
]);
const handleBlur = useCallback$1((event, fieldOnBlur) => {
fieldOnBlur?.(event);
const eventWithProcessedValue = {
...event,
currentTarget: {
...event.currentTarget,
value: displayValueToPure(event.currentTarget.value)
},
target: {
...event.target,
value: displayValueToPure(event.currentTarget.value)
}
};
onBlur?.(eventWithProcessedValue);
setIsFocused(false);
setHasBlurred(true);
}, [displayValueToPure, onBlur]);
const handlePaste = useCallback$1((event) => {
const pasteValue = event.clipboardData?.getData("text/plain");
const inputEl = event.currentTarget;
const { selectionStart, selectionEnd } = inputEl;
if (!pasteValue || !selectionStart || selectionStart !== selectionEnd) return;
const pureDisplayValue = displayValueToPure(displayValue);
const purePasteValue = displayValueToPure(pasteValue);
const newPureValue = pureDisplayValue.slice(0, selectionStart) + purePasteValue + pureDisplayValue.slice(selectionStart);
if (newPureValue.startsWith(pureDisplayValue + pureDisplayValue)) {
const withPrefixRemoved = newPureValue.replace(pureDisplayValue, "");
event.preventDefault();
inputEl.value = withPrefixRemoved;
handleInput({
...event,
currentTarget: inputEl,
target: inputEl
});
}
}, [
displayValue,
displayValueToPure,
handleInput
]);
const handleFocus = useCallback$1((event, fieldOnFocus) => {
onFocus?.();
fieldOnFocus?.(event);
setIsFocused(true);
}, [onFocus]);
const handleKeyDown = useCallback$1((event) => {
const inputEl = event.currentTarget;
const isCaretAtEndWithNoSelection = inputEl.selectionStart === inputEl.value.length && inputEl.selectionStart === inputEl.selectionEnd;
if (event.key !== KEYBOARD_KEYS.backspace || !isCaretAtEndWithNoSelection) return;
event.preventDefault();
const withLastCharRemoved = value.slice(0, value.length - 1);
const newMaskResult = getMaskResult(withLastCharRemoved);
if (newMaskResult.outcome === "mismatch") {
inputEl.value = newMaskResult.partialDisplayValue;
onMismatch(newMaskResult);
} else {
inputEl.value = newMaskResult.displayValue;
onInput(withLastCharRemoved);
}
}, [
getMaskResult,
onInput,
onMismatch,
value
]);
const getHelper = () => {
if (inputState.isError) return inputState.text;
if (helper) return /* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsx("div", { children: helper }), /* @__PURE__ */ jsx("div", { children: inputState.text })] });
return inputState.text;
};
return useFieldComponent ? /* @__PURE__ */ jsx(Field, {
name,
label,
isValid: !inputState.isError,
errorMessage: inputState.errorMessage || inputState.isError,
helper: getHelper(),
helperPosition,
disabled,
optional,
children: ({ onBlurHandler: fieldOnBlur, onFocusHandler: fieldOnFocus, id, ...childProps }) => /* @__PURE__ */ jsx(Inner, {
...childProps,
id,
name,
optional,
disabled,
readonly,
placeholder,
displayValue,
inputRef,
inputState,
type,
showingMismatch,
onInput: handleInput,
onBlur: (event) => {
handleBlur(event, fieldOnBlur);
},
onPaste: handlePaste,
onFocus: (event) => {
handleFocus(event, fieldOnFocus);
},
onKeyDown: handleKeyDown
})
}) : /* @__PURE__ */ jsx(Inner, {
name,
"aria-label": label,
optional,
disabled,
readonly,
placeholder,
displayValue,
inputRef,
inputState,
type,
showingMismatch,
onInput: handleInput,
onBlur: (event) => {
handleBlur(event);
},
onPaste: handlePaste,
onFocus: (event) => {
handleFocus(event);
},
onKeyDown: handleKeyDown
});
};
//#endregion
export { alphanumericInputs as a, nonInputs as c, alphaInputs as i, numericInputs as l, InputEmail as n, customInputs as o, isValueObscured as r, makeMask as s, MaskedInput as t, spacer as u };