intelicoreact 1.6.20 → 1.6.21
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/Atomic/FormElements/ActionAlert/ActionAlert.js +1 -102
- package/dist/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js +1 -89
- package/dist/Atomic/FormElements/Calendar/Calendar.js +1 -232
- package/dist/Atomic/FormElements/Calendar/Calendar.props.js +1 -3
- package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.js +1 -101
- package/dist/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js +1 -70
- package/dist/Atomic/FormElements/Datepicker/Datepicker.js +1 -350
- package/dist/Atomic/FormElements/Datepicker/Datepicker.props.js +1 -3
- package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +1 -177
- package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.props.js +1 -3
- package/dist/Atomic/FormElements/Dropdown/Dropdown.js +1 -561
- package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +1 -20
- package/dist/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +1 -405
- package/dist/Atomic/FormElements/FileLoader/FileLoader.js +1 -94
- package/dist/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -105
- package/dist/Atomic/FormElements/FileLoader/partial/LoadedContent.js +1 -67
- package/dist/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -247
- package/dist/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +1 -160
- package/dist/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -193
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +1 -135
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +1 -116
- package/dist/Atomic/FormElements/Input/Input.js +1 -467
- package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +1 -161
- package/dist/Atomic/FormElements/InputColor/InputColor.js +1 -64
- package/dist/Atomic/FormElements/InputCurrency/InputCurrency.js +1 -166
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +1 -354
- package/dist/Atomic/FormElements/InputDateRange/components/DateInput.js +1 -71
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +1 -693
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +1 -254
- package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +1 -32
- package/dist/Atomic/FormElements/InputDateRange/dependencies.js +1 -200
- package/dist/Atomic/FormElements/InputLink/InputLink.js +1 -99
- package/dist/Atomic/FormElements/InputMask/InputCarretPosition.js +1 -37
- package/dist/Atomic/FormElements/InputMask/InputMask.js +1 -1214
- package/dist/Atomic/FormElements/InputMask/config.js +1 -15
- package/dist/Atomic/FormElements/InputMask/functions.js +1 -58
- package/dist/Atomic/FormElements/InputMask2/InputMask2.js +1 -674
- package/dist/Atomic/FormElements/InputMask2/config.js +1 -15
- package/dist/Atomic/FormElements/InputMask2/functions.js +1 -58
- package/dist/Atomic/FormElements/InputMask3/InputMask3.js +1 -766
- package/dist/Atomic/FormElements/InputMask3/config.js +1 -15
- package/dist/Atomic/FormElements/InputMask3/functions.js +1 -58
- package/dist/Atomic/FormElements/InputWithAction/InputWithAction.js +1 -114
- package/dist/Atomic/FormElements/InputsRow/InputsRow.js +1 -140
- package/dist/Atomic/FormElements/Label/Label.js +1 -82
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +1 -506
- package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +1 -45
- package/dist/Atomic/FormElements/NumericInput/NumericInput.js +1 -331
- package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +1 -66
- package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +1 -80
- package/dist/Atomic/FormElements/RadioInput/RadioInput.js +1 -64
- package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +1 -54
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +1 -183
- package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +1 -209
- package/dist/Atomic/FormElements/RangeList/RangeList.js +1 -175
- package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +1 -43
- package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +1 -443
- package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +1 -858
- package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +1 -39
- package/dist/Atomic/FormElements/Switcher/Switcher.js +1 -59
- package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +1 -50
- package/dist/Atomic/FormElements/SwitcherHide/SwitcherHide.js +1 -47
- package/dist/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js +1 -96
- package/dist/Atomic/FormElements/SwitcherRange/SwitcherRange.js +1 -40
- package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -64
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +1 -170
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/partial/States.js +1 -202
- package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +1 -67
- package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +1 -115
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +1 -826
- package/dist/Atomic/FormElements/Text/Text.js +1 -125
- package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.js +1 -45
- package/dist/Atomic/FormElements/Textarea/Textarea.js +1 -80
- package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +1 -176
- package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +1 -62
- package/dist/Atomic/FormElements/TimeRange/TimeRange.js +1 -127
- package/dist/Atomic/FormElements/UserContacts/UserContacts.js +1 -220
- package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +1 -83
- package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +1 -82
- package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +1 -101
- package/dist/Atomic/FormElements/WidgetPseudoTable/partial/constructor.js +1 -29
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +1 -113
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/partial/constructor.js +1 -30
- package/dist/Atomic/Layout/Header/Header.js +1 -85
- package/dist/Atomic/Layout/Spinner/Spinner.js +1 -39
- package/dist/Atomic/UI/Accordion/Accordion.js +1 -118
- package/dist/Atomic/UI/Accordion/AccordionItem.js +1 -181
- package/dist/Atomic/UI/AccordionTable/AccordionTable.js +1 -238
- package/dist/Atomic/UI/AccordionText/AccordionText.js +1 -69
- package/dist/Atomic/UI/AdvancedTag/AdvTag.js +1 -207
- package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +1 -56
- package/dist/Atomic/UI/Alert/Alert.js +1 -72
- package/dist/Atomic/UI/Arrow/Arrow.js +1 -132
- package/dist/Atomic/UI/Box/Box.js +1 -52
- package/dist/Atomic/UI/Button/Button.js +1 -89
- package/dist/Atomic/UI/ButtonsBar/ButtonsBar.js +1 -72
- package/dist/Atomic/UI/Chart/Chart.js +1 -172
- package/dist/Atomic/UI/Chart/partial/Chart.constants.js +1 -95
- package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +1 -80
- package/dist/Atomic/UI/Chart/partial/datasetSetters.js +1 -188
- package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +1 -335
- package/dist/Atomic/UI/Chart/partial/optionsSetters.js +1 -43
- package/dist/Atomic/UI/Chart/partial/utils.js +1 -60
- package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +1 -109
- package/dist/Atomic/UI/DateTime/DateTime.js +1 -57
- package/dist/Atomic/UI/DebugContainer/DebugContainer.js +1 -44
- package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +1 -15
- package/dist/Atomic/UI/DoubleString/DoubleString.js +1 -102
- package/dist/Atomic/UI/DynamicIcon/DynamicIcon.js +1 -226
- package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +1 -221
- package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +1 -106
- package/dist/Atomic/UI/Hint/Hint.js +1 -193
- package/dist/Atomic/UI/Hint/partials/_utils.js +1 -51
- package/dist/Atomic/UI/Modal/Modal.js +1 -188
- package/dist/Atomic/UI/Modal/ModalHOC.js +1 -72
- package/dist/Atomic/UI/Modal/partials/ModalFooter.js +1 -46
- package/dist/Atomic/UI/Modal/partials/ModalTitle.js +1 -83
- package/dist/Atomic/UI/Modal/partials/useMobileModal.js +1 -200
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +1 -75
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +1 -80
- package/dist/Atomic/UI/NavLine/NavLine.js +1 -293
- package/dist/Atomic/UI/PageTitle/PageTitle.js +1 -75
- package/dist/Atomic/UI/PieChart/PieChart.js +1 -42
- package/dist/Atomic/UI/Price/Price.js +1 -22
- package/dist/Atomic/UI/PriceRange/PriceRange.js +1 -36
- package/dist/Atomic/UI/ProgressLine/ProgressLine.js +1 -71
- package/dist/Atomic/UI/Status/Status.js +1 -59
- package/dist/Atomic/UI/Table/Partials/TdCell.js +1 -87
- package/dist/Atomic/UI/Table/Partials/TdHeader.js +1 -38
- package/dist/Atomic/UI/Table/Partials/TdRow.js +1 -99
- package/dist/Atomic/UI/Table/Partials/TdTitle.js +1 -52
- package/dist/Atomic/UI/Table/Table.js +1 -63
- package/dist/Atomic/UI/Table/TdTypes/TdActions.js +1 -80
- package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +1 -28
- package/dist/Atomic/UI/Table/TdTypes/TdRange.js +1 -13
- package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +1 -53
- package/dist/Atomic/UI/Tag/Tag.js +1 -160
- package/dist/Atomic/UI/TagList/TagList.js +1 -251
- package/dist/Atomic/UI/UserBox/UserBox.js +1 -73
- package/dist/Atomic/UI/WizardStepper/constructor.js +1 -84
- package/dist/Atomic/UI/WizardStepper/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +1 -37
- package/dist/Atomic/UI/WizardStepper/ui/StateIcon/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +1 -61
- package/dist/Atomic/UI/WizardStepper/ui/StepRow/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +1 -39
- package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/icons.js +1 -49
- package/dist/Atomic/UI/WizardStepper/ui/index.js +1 -3
- package/dist/Classes/AbortableFetch.js +1 -454
- package/dist/Classes/AnimatedHandler.js +1 -47
- package/dist/Classes/RESTAPI/index.js +1 -228
- package/dist/Classes/RESTAPI/partials/AbortableFetch.js +1 -457
- package/dist/Classes/RESTAPI/partials/ApiBase.js +1 -48
- package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +1 -112
- package/dist/Classes/RESTAPI/partials/ApiUtils.js +1 -189
- package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +1 -252
- package/dist/Classes/RESTAPI/partials/Utils.js +1 -92
- package/dist/Classes/RESTAPI/partials/_outerDependencies.js +1 -3
- package/dist/Classes/RESTAPI/partials/_utils.js +1 -197
- package/dist/Constants/index.constants.js +1 -78
- package/dist/Functions/Portal.js +1 -22
- package/dist/Functions/customEventListener.js +1 -96
- package/dist/Functions/dateTime.js +1 -149
- package/dist/Functions/fieldValueFormatters.js +1 -405
- package/dist/Functions/guards/assertions.js +1 -66
- package/dist/Functions/guards/safeValue.js +1 -30
- package/dist/Functions/guards/typeGuards.js +1 -116
- package/dist/Functions/hooks/useFormFieldsChangesManager.js +1 -95
- package/dist/Functions/locale/createTranslator.js +1 -32
- package/dist/Functions/operations.js +1 -130
- package/dist/Functions/presets/inputMaskPresets.js +1 -170
- package/dist/Functions/presets/inputPresets.js +1 -60
- package/dist/Functions/presets/mobileKeyboardTypesPresets.js +1 -45
- package/dist/Functions/schemas.js +1 -31
- package/dist/Functions/useBodyScrollLock.js +1 -17
- package/dist/Functions/useClickOutside.js +1 -15
- package/dist/Functions/useDebounce.js +1 -17
- package/dist/Functions/useFieldFocus.js +1 -84
- package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +1 -39
- package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +1 -159
- package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +1 -78
- package/dist/Functions/useFormTools/functions/General.js +1 -134
- package/dist/Functions/useFormTools/functions/RenderFields.js +1 -111
- package/dist/Functions/useFormTools/functions/usePrevious.js +1 -12
- package/dist/Functions/useFormTools/index.js +1 -778
- package/dist/Functions/useInputHighlightError.js +1 -67
- package/dist/Functions/useIsMobile/useIsMobile.js +1 -53
- package/dist/Functions/useKeyPress/useHandleKeyPress.js +1 -21
- package/dist/Functions/useKeyPress/useKeyPress.js +1 -75
- package/dist/Functions/useLocalStorage.js +1 -34
- package/dist/Functions/useLocationParams.js +1 -27
- package/dist/Functions/useMediaQuery.js +1 -17
- package/dist/Functions/useMetaInfo.js +1 -43
- package/dist/Functions/useMouseUpOutside.js +1 -16
- package/dist/Functions/useOnlineStatus.js +1 -29
- package/dist/Functions/usePasswordChecker.js +1 -110
- package/dist/Functions/usePrevious.js +1 -12
- package/dist/Functions/useResize.js +1 -31
- package/dist/Functions/useScrollTo.js +1 -17
- package/dist/Functions/useToggle.js +1 -17
- package/dist/Functions/utils.js +1 -522
- package/dist/Langs.js +1 -168
- package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +1 -21
- package/dist/Molecular/CustomIcons/components/AlertCircle.js +1 -23
- package/dist/Molecular/CustomIcons/components/AppStore.js +1 -29
- package/dist/Molecular/CustomIcons/components/Arrow.js +1 -32
- package/dist/Molecular/CustomIcons/components/ArrowDown.js +1 -17
- package/dist/Molecular/CustomIcons/components/ArrowLeft.js +1 -22
- package/dist/Molecular/CustomIcons/components/ArrowRight.js +1 -22
- package/dist/Molecular/CustomIcons/components/ArrowUp.js +1 -17
- package/dist/Molecular/CustomIcons/components/Bell.js +1 -15
- package/dist/Molecular/CustomIcons/components/Button.js +1 -12
- package/dist/Molecular/CustomIcons/components/Campaigns.js +1 -16
- package/dist/Molecular/CustomIcons/components/Check.js +1 -14
- package/dist/Molecular/CustomIcons/components/Check2.js +1 -12
- package/dist/Molecular/CustomIcons/components/ChevronDown.js +1 -12
- package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronLeft.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronRight.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronUp.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +1 -27
- package/dist/Molecular/CustomIcons/components/Close.js +1 -14
- package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +1 -17
- package/dist/Molecular/CustomIcons/components/Delete.js +1 -16
- package/dist/Molecular/CustomIcons/components/Edit.js +1 -15
- package/dist/Molecular/CustomIcons/components/Email.js +1 -31
- package/dist/Molecular/CustomIcons/components/FinturfLogo.js +1 -18
- package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +1 -35
- package/dist/Molecular/CustomIcons/components/Flows.js +1 -15
- package/dist/Molecular/CustomIcons/components/Gift.js +1 -25
- package/dist/Molecular/CustomIcons/components/GoogleAuth.js +1 -29
- package/dist/Molecular/CustomIcons/components/GooglePlay.js +1 -29
- package/dist/Molecular/CustomIcons/components/HelpCircle.js +1 -19
- package/dist/Molecular/CustomIcons/components/HelpCircle2.js +1 -20
- package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +1 -19
- package/dist/Molecular/CustomIcons/components/Home.js +1 -16
- package/dist/Molecular/CustomIcons/components/Home2.js +1 -22
- package/dist/Molecular/CustomIcons/components/Key.js +1 -23
- package/dist/Molecular/CustomIcons/components/Landers.js +1 -20
- package/dist/Molecular/CustomIcons/components/Lock.js +1 -15
- package/dist/Molecular/CustomIcons/components/Mail.js +1 -26
- package/dist/Molecular/CustomIcons/components/Mastercard.js +1 -73
- package/dist/Molecular/CustomIcons/components/Minus.js +1 -25
- package/dist/Molecular/CustomIcons/components/Offers.js +1 -16
- package/dist/Molecular/CustomIcons/components/Pause.js +1 -28
- package/dist/Molecular/CustomIcons/components/PayPal.js +1 -41
- package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +1 -28
- package/dist/Molecular/CustomIcons/components/Phone.js +1 -30
- package/dist/Molecular/CustomIcons/components/Play.js +1 -25
- package/dist/Molecular/CustomIcons/components/Plus.js +1 -25
- package/dist/Molecular/CustomIcons/components/Profile.js +1 -16
- package/dist/Molecular/CustomIcons/components/QRCode.js +1 -29
- package/dist/Molecular/CustomIcons/components/Rectangle.js +1 -12
- package/dist/Molecular/CustomIcons/components/Revert.js +1 -13
- package/dist/Molecular/CustomIcons/components/Star.js +1 -14
- package/dist/Molecular/CustomIcons/components/Star2.js +1 -16
- package/dist/Molecular/CustomIcons/components/TrafficSources.js +1 -14
- package/dist/Molecular/CustomIcons/components/Trash.js +1 -15
- package/dist/Molecular/CustomIcons/components/TrashRed.js +1 -15
- package/dist/Molecular/CustomIcons/components/Triggers.js +1 -15
- package/dist/Molecular/CustomIcons/components/User.js +1 -25
- package/dist/Molecular/CustomIcons/components/Visa.js +1 -31
- package/dist/Molecular/CustomIcons/components/X.js +1 -12
- package/dist/Molecular/CustomIcons/index.js +1 -61
- package/dist/Molecular/FormElement/FormElement.js +1 -54
- package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +1 -184
- package/dist/Molecular/FormWithDependOn/partials/_utils.js +1 -53
- package/dist/Molecular/InputAddress/InputAddress.js +1 -620
- package/dist/Molecular/InputPassword/InputPassword.js +1 -48
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,1214 +1 @@
|
|
|
1
|
-
/* eslint-disable no-return-await */
|
|
2
|
-
/* eslint-disable no-extra-boolean-cast */
|
|
3
|
-
/* eslint-disable no-unsafe-optional-chaining */
|
|
4
|
-
/* eslint-disable comma-dangle */
|
|
5
|
-
/* eslint-disable array-callback-return */
|
|
6
|
-
/* eslint-disable no-continue */
|
|
7
|
-
/* eslint-disable no-unused-expressions */
|
|
8
|
-
/* eslint-disable no-empty */
|
|
9
|
-
/* eslint-disable no-unreachable */
|
|
10
|
-
/* eslint-disable default-case */
|
|
11
|
-
/* eslint-disable no-use-before-define */
|
|
12
|
-
/* eslint-disable no-unused-vars */
|
|
13
|
-
/* eslint-disable default-param-last */
|
|
14
|
-
import React, { createRef, useEffect, useRef, useState } from "react";
|
|
15
|
-
|
|
16
|
-
import cn from "classnames";
|
|
17
|
-
import { X } from "react-feather";
|
|
18
|
-
|
|
19
|
-
import Hint from "../../UI/Hint/Hint";
|
|
20
|
-
|
|
21
|
-
import { KEYBOARD_SERVICE_KEYS } from "./../../../Constants/index.constants.js";
|
|
22
|
-
// import { KEYBOARD_SERVICE_KEYS } from './index.constants.js';
|
|
23
|
-
import { setCaretPosition } from "./InputCarretPosition";
|
|
24
|
-
import {
|
|
25
|
-
ANDROID_CHROME_TEXT_CODE,
|
|
26
|
-
DEFAULT_ERRORS,
|
|
27
|
-
DIGIT_MASK_CHAR,
|
|
28
|
-
EXCLUDED_KEYS,
|
|
29
|
-
LOWERCASE_LETTER_MASK_CHAR,
|
|
30
|
-
SPACE_CHAR,
|
|
31
|
-
UPPERCASE_LETTER_MASK_CHAR,
|
|
32
|
-
} from "./config";
|
|
33
|
-
import {
|
|
34
|
-
copyToClipboard,
|
|
35
|
-
getSelectionText,
|
|
36
|
-
isDigit,
|
|
37
|
-
isDigitMaskChar,
|
|
38
|
-
isLetter,
|
|
39
|
-
isLetterMaskChar,
|
|
40
|
-
isLowerCaseLetter,
|
|
41
|
-
isUpperCaseLetter,
|
|
42
|
-
resetSelectionText,
|
|
43
|
-
selectElementContents,
|
|
44
|
-
voidFn,
|
|
45
|
-
} from "./functions";
|
|
46
|
-
|
|
47
|
-
import "./InputMask.scss";
|
|
48
|
-
|
|
49
|
-
export default function InputMask({
|
|
50
|
-
maskPattern,
|
|
51
|
-
maskPatternPlaceholder,
|
|
52
|
-
maskPlaceholder,
|
|
53
|
-
maskDigitPlaceholder,
|
|
54
|
-
maskLetterPlaceholder,
|
|
55
|
-
usePatternPlaceholder,
|
|
56
|
-
disabled,
|
|
57
|
-
maskAsPlaceholder = true,
|
|
58
|
-
|
|
59
|
-
maxEditableLen = -1,
|
|
60
|
-
|
|
61
|
-
isFocusedDefault = false,
|
|
62
|
-
isClearable,
|
|
63
|
-
isCaseSensitive,
|
|
64
|
-
adaptTextCase,
|
|
65
|
-
isUseAutoSelect = true,
|
|
66
|
-
|
|
67
|
-
icon,
|
|
68
|
-
showIcon,
|
|
69
|
-
isIconLeft,
|
|
70
|
-
isIconRight,
|
|
71
|
-
value,
|
|
72
|
-
blinkErrors = true,
|
|
73
|
-
blinkDuration = 100,
|
|
74
|
-
showErrors = false,
|
|
75
|
-
|
|
76
|
-
className = "",
|
|
77
|
-
errors: customErrors = DEFAULT_ERRORS,
|
|
78
|
-
error: customError = "",
|
|
79
|
-
ref,
|
|
80
|
-
|
|
81
|
-
onChange: onChangeProp = () => {},
|
|
82
|
-
onFocus: onFocusProp = () => {},
|
|
83
|
-
onBlur: onBlurProp = () => {},
|
|
84
|
-
onKeyDown: onKeyDownProp = () => {},
|
|
85
|
-
|
|
86
|
-
imitateTypingOnPaste = false,
|
|
87
|
-
imitateTypingOnPasteDelay = 100,
|
|
88
|
-
|
|
89
|
-
showHint = false,
|
|
90
|
-
hintText = "",
|
|
91
|
-
hintClassName = "",
|
|
92
|
-
isHintRight = true,
|
|
93
|
-
isHintLeft = false,
|
|
94
|
-
hintPosition = "right",
|
|
95
|
-
|
|
96
|
-
hideMaskOnBlur = true,
|
|
97
|
-
returnMaskedValue = false,
|
|
98
|
-
|
|
99
|
-
name,
|
|
100
|
-
testId = "input-mask",
|
|
101
|
-
} = {}) {
|
|
102
|
-
const errors = {
|
|
103
|
-
...DEFAULT_ERRORS,
|
|
104
|
-
...customErrors,
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
const [isMaskRendered, setMaskRendered] = useState(false);
|
|
108
|
-
|
|
109
|
-
const inputRef = useRef(null);
|
|
110
|
-
|
|
111
|
-
const [isMouseDown, setIsMouseDown] = useState(false);
|
|
112
|
-
const [isFocused, setFocused] = useState(false);
|
|
113
|
-
|
|
114
|
-
const [isInitValue, setIsInitValue] = useState(false);
|
|
115
|
-
|
|
116
|
-
const inputThrottlingTimeout = 20;
|
|
117
|
-
const [isInputThrottled, setIsInputThrottled] = useState(false);
|
|
118
|
-
|
|
119
|
-
// ERRORS MANAGEMENT FUNCTIONS | START //
|
|
120
|
-
const [isError, setError] = useState(false);
|
|
121
|
-
const [blinkError, setBlinkError] = useState(false);
|
|
122
|
-
const [errorMessage, setErrorMessage] = useState(errors.default);
|
|
123
|
-
const clearErrorMessage = () => setErrorMessage(errors.default);
|
|
124
|
-
// ERRORS MANAGEMENT FUNCTIONS | END //
|
|
125
|
-
|
|
126
|
-
// SELECTION MANAGEMENT FUNCTIONS | START //
|
|
127
|
-
const [isSelecting, setIsSelecting] = useState(false);
|
|
128
|
-
const [selectedText, setSelectedText] = useState("");
|
|
129
|
-
|
|
130
|
-
const [selectionStartX, setSelectionStartX] = useState(null);
|
|
131
|
-
const [selectionEndX, setSelectionEndX] = useState(null);
|
|
132
|
-
// SELECTION MANAGEMENT FUNCTIONS | END //
|
|
133
|
-
|
|
134
|
-
// SERVICE WATCHERS MANAGEMENT FUNCTIONS | START //
|
|
135
|
-
const [serviceWatchers, setServiceWatchers] = useState([]);
|
|
136
|
-
const pushServiceWatcher = (fn) =>
|
|
137
|
-
setServiceWatchers((state) => [...state, { fn, dt: Date.now() }]);
|
|
138
|
-
const popServiceWatcher = () => {
|
|
139
|
-
const [poped, ...rest] = serviceWatchers;
|
|
140
|
-
setServiceWatchers(rest);
|
|
141
|
-
return poped.fn || voidFn;
|
|
142
|
-
};
|
|
143
|
-
const serviceWatchersWorker = () => {
|
|
144
|
-
popServiceWatcher()();
|
|
145
|
-
};
|
|
146
|
-
useEffect(() => {
|
|
147
|
-
if (serviceWatchers.length) serviceWatchersWorker();
|
|
148
|
-
}, [serviceWatchers]);
|
|
149
|
-
// SERVICE WATCHERS MANAGEMENT FUNCTIONS | END //
|
|
150
|
-
|
|
151
|
-
// INNER VALUE MANAGEMENT FUNCTIONS | START //
|
|
152
|
-
const [innerValue, setInnerValue] = useState([]);
|
|
153
|
-
const [undoValue, setUndoValue] = useState("");
|
|
154
|
-
const [redoValue, setRedoValue] = useState(null);
|
|
155
|
-
const [isUndoValueBlocked, setIsUndoValueBlocked] = useState(false);
|
|
156
|
-
|
|
157
|
-
const addInnerValueChar = ({ char, i = null, data = {} }) => {
|
|
158
|
-
setInnerValue((state) => {
|
|
159
|
-
const stateCopy = [...state];
|
|
160
|
-
const charObj = getCharObj(char, data);
|
|
161
|
-
|
|
162
|
-
stateCopy.push(charObj);
|
|
163
|
-
|
|
164
|
-
return stateCopy;
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
|
-
const updateInnerValueChar = ({ char = null } = {}, i) => {
|
|
168
|
-
setInnerValue((state) => {
|
|
169
|
-
if (!state[i]) return state;
|
|
170
|
-
|
|
171
|
-
const stateCopy = [...state];
|
|
172
|
-
|
|
173
|
-
if (!stateCopy[i].isSpecialSymbol && char !== null)
|
|
174
|
-
stateCopy[i].char = char;
|
|
175
|
-
|
|
176
|
-
return stateCopy;
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
const resetInnerValue = () => {
|
|
180
|
-
innerValue.map((v, i) => updateInnerValueChar({ char: "" }, i));
|
|
181
|
-
};
|
|
182
|
-
// INNER VALUE MANAGEMENT FUNCTIONS | END //
|
|
183
|
-
|
|
184
|
-
// CHECKERS | START //
|
|
185
|
-
const isValidChar = ({ char: key, i, disableErrors = false }) => {
|
|
186
|
-
const maskChar = getMaskCharByIndex(i);
|
|
187
|
-
|
|
188
|
-
switch (maskChar) {
|
|
189
|
-
case DIGIT_MASK_CHAR:
|
|
190
|
-
if (!isDigit(key)) {
|
|
191
|
-
if (!disableErrors) {
|
|
192
|
-
setErrorMessage(errors.onlyDigit);
|
|
193
|
-
}
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
break;
|
|
197
|
-
|
|
198
|
-
case UPPERCASE_LETTER_MASK_CHAR:
|
|
199
|
-
if (adaptTextCase) key = key.toUpperCase();
|
|
200
|
-
|
|
201
|
-
if (!isLetter(key) && !isCaseSensitive) {
|
|
202
|
-
if (!disableErrors) setErrorMessage(errors.onlyLetter);
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (isCaseSensitive && !isUpperCaseLetter(key)) {
|
|
207
|
-
if (!disableErrors) setErrorMessage(errors.onlyUpperCase);
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
break;
|
|
211
|
-
case LOWERCASE_LETTER_MASK_CHAR:
|
|
212
|
-
if (adaptTextCase) key = key.toLowerCase();
|
|
213
|
-
|
|
214
|
-
if (!isLetter(key) && !isCaseSensitive) {
|
|
215
|
-
if (!disableErrors) setErrorMessage(errors.onlyLetter);
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if (isCaseSensitive && !isLowerCaseLetter(key)) {
|
|
220
|
-
if (!disableErrors) setErrorMessage(errors.onlyLowerCase);
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
break;
|
|
224
|
-
|
|
225
|
-
default:
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
return true;
|
|
230
|
-
};
|
|
231
|
-
const isSpecialSymbolMaskChar = ({ char }) => {
|
|
232
|
-
return !isDigitMaskChar(char) && !isLetterMaskChar(char);
|
|
233
|
-
};
|
|
234
|
-
const isSpecialSymbolChar = ({ char }) => {
|
|
235
|
-
return !isDigit(char) && !isLetter(char);
|
|
236
|
-
};
|
|
237
|
-
// CHECKERS | END //
|
|
238
|
-
|
|
239
|
-
// GETTERS | START //
|
|
240
|
-
const getCharObj = (char, data = {}) => {
|
|
241
|
-
const isSpecialSymbol = isSpecialSymbolChar({ char });
|
|
242
|
-
const isSpecialSymbolMask = isSpecialSymbolMaskChar({ char });
|
|
243
|
-
|
|
244
|
-
if (char === " ") char = SPACE_CHAR;
|
|
245
|
-
|
|
246
|
-
return {
|
|
247
|
-
char: isSpecialSymbolMask ? char : "",
|
|
248
|
-
maskChar: char,
|
|
249
|
-
isSpecialSymbol: isSpecialSymbolMask,
|
|
250
|
-
isCharSymbol: !isSpecialSymbol && char !== "" && isSpecialSymbolMask,
|
|
251
|
-
ref: createRef(),
|
|
252
|
-
...data,
|
|
253
|
-
};
|
|
254
|
-
};
|
|
255
|
-
const getCharByIndex = (i) => {
|
|
256
|
-
return innerValue[i] ? { ...innerValue[i] } : undefined;
|
|
257
|
-
};
|
|
258
|
-
const getMaskCharByIndex = (i) => {
|
|
259
|
-
return innerValue[i]?.maskChar || undefined;
|
|
260
|
-
};
|
|
261
|
-
const getSelectStartIndex = () => {
|
|
262
|
-
if (selectionStartX === selectionEndX) return 0;
|
|
263
|
-
|
|
264
|
-
const minX =
|
|
265
|
-
selectionStartX < selectionEndX ? selectionStartX : selectionEndX;
|
|
266
|
-
const maxX =
|
|
267
|
-
selectionStartX > selectionEndX ? selectionStartX : selectionEndX;
|
|
268
|
-
|
|
269
|
-
const { index } = innerValue.reduce(
|
|
270
|
-
(resObj, { char, ref }, index) => {
|
|
271
|
-
if (ref?.current === null) return resObj;
|
|
272
|
-
|
|
273
|
-
const { left: charX, width: charWidth } =
|
|
274
|
-
ref?.current?.getBoundingClientRect();
|
|
275
|
-
const charCenterX = charX + charWidth / 2;
|
|
276
|
-
|
|
277
|
-
// If Char X-Coord Out Of Range
|
|
278
|
-
if (!charX || minX > charCenterX || maxX < charCenterX) return resObj;
|
|
279
|
-
|
|
280
|
-
if (
|
|
281
|
-
resObj.index === null ||
|
|
282
|
-
(minX <= charCenterX &&
|
|
283
|
-
charCenterX >= maxX &&
|
|
284
|
-
charCenterX < resObj.charX)
|
|
285
|
-
)
|
|
286
|
-
return { index, charX: charCenterX };
|
|
287
|
-
|
|
288
|
-
return resObj;
|
|
289
|
-
},
|
|
290
|
-
{ index: null, charX: null },
|
|
291
|
-
);
|
|
292
|
-
|
|
293
|
-
return index;
|
|
294
|
-
};
|
|
295
|
-
const getPlaceholderCharByIndex = (i) => {
|
|
296
|
-
const { maskChar } = getCharByIndex(i);
|
|
297
|
-
|
|
298
|
-
if (usePatternPlaceholder) {
|
|
299
|
-
return maskPatternPlaceholder[i] || maskPlaceholder;
|
|
300
|
-
} else {
|
|
301
|
-
if (isDigitMaskChar(maskChar) && maskDigitPlaceholder)
|
|
302
|
-
return maskDigitPlaceholder;
|
|
303
|
-
if (isLetterMaskChar(maskChar) && maskLetterPlaceholder)
|
|
304
|
-
return maskLetterPlaceholder;
|
|
305
|
-
return maskPlaceholder;
|
|
306
|
-
}
|
|
307
|
-
};
|
|
308
|
-
const getInnerValueAsString = ({ replaceSpace = false } = {}) => {
|
|
309
|
-
const result = innerValue
|
|
310
|
-
.slice(0, innerValue.length - 1)
|
|
311
|
-
.map(({ char, maskChar }, i) => {
|
|
312
|
-
return char === "" ? getPlaceholderCharByIndex(i) || maskChar : char;
|
|
313
|
-
})
|
|
314
|
-
.join("");
|
|
315
|
-
|
|
316
|
-
return replaceSpace ? result?.replace(/\u00A0/g, " ") : result;
|
|
317
|
-
};
|
|
318
|
-
const getClearInnerValueAsString = (start = 0) => {
|
|
319
|
-
return innerValue
|
|
320
|
-
.filter((charObj, i) => i >= start)
|
|
321
|
-
.reduce(
|
|
322
|
-
(result, { char, maskChar, isSpecialSymbol, isCharSymbol }, i, arr) => {
|
|
323
|
-
if (
|
|
324
|
-
(char !== maskChar && char !== "") ||
|
|
325
|
-
!isSpecialSymbol ||
|
|
326
|
-
isCharSymbol
|
|
327
|
-
)
|
|
328
|
-
result += char; // || isCharSymbol
|
|
329
|
-
return result;
|
|
330
|
-
},
|
|
331
|
-
"",
|
|
332
|
-
);
|
|
333
|
-
};
|
|
334
|
-
const getLastTypedIndex = () => {
|
|
335
|
-
return (
|
|
336
|
-
innerValue.reduce((lastIndex, { char, isSpecialSymbol }, i) => {
|
|
337
|
-
if (
|
|
338
|
-
(!isSpecialSymbol && char !== SPACE_CHAR && char !== "") ||
|
|
339
|
-
lastIndex === null
|
|
340
|
-
)
|
|
341
|
-
lastIndex = i;
|
|
342
|
-
return lastIndex;
|
|
343
|
-
}, -1) + 1
|
|
344
|
-
);
|
|
345
|
-
};
|
|
346
|
-
// GETTERS | END //
|
|
347
|
-
|
|
348
|
-
// SETTERS | START //
|
|
349
|
-
const setFocusOnChar = (i, prevIndex) => {
|
|
350
|
-
const charObj = getCharByIndex(i);
|
|
351
|
-
|
|
352
|
-
if (!charObj) return false;
|
|
353
|
-
|
|
354
|
-
const { ref, isSpecialSymbol } = charObj;
|
|
355
|
-
|
|
356
|
-
if (!ref) return false;
|
|
357
|
-
|
|
358
|
-
if (
|
|
359
|
-
(maxEditableLen !== -1 ? i < maxEditableLen : true) &&
|
|
360
|
-
isSpecialSymbol &&
|
|
361
|
-
i < innerValue.length - 1
|
|
362
|
-
) {
|
|
363
|
-
return prevIndex > i
|
|
364
|
-
? onArrowLeftDown(null, i)
|
|
365
|
-
: onArrowRightDown(null, i);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
if (maxEditableLen !== -1 && i > maxEditableLen) {
|
|
369
|
-
setFocusOnChar(maxEditableLen, i);
|
|
370
|
-
return false;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
ref.current?.focus();
|
|
374
|
-
|
|
375
|
-
setTimeout(() => setCaretPosition(ref.current, 0), 10);
|
|
376
|
-
|
|
377
|
-
return true;
|
|
378
|
-
};
|
|
379
|
-
// SETTERS | END //
|
|
380
|
-
|
|
381
|
-
///--- Event Handlers ---///
|
|
382
|
-
|
|
383
|
-
// SERVICE KEYS HANDLERS | START //
|
|
384
|
-
const onArrowLeftDown = (e, i) => setFocusOnChar(i - 1, i);
|
|
385
|
-
const onArrowRightDown = (e, i) => {
|
|
386
|
-
const key = e?.key || null;
|
|
387
|
-
|
|
388
|
-
if (maskAsPlaceholder && i > getLastTypedIndex()) {
|
|
389
|
-
return setFocusOnChar(getLastTypedIndex() + 1, i);
|
|
390
|
-
}
|
|
391
|
-
// If Current Index Equals LastTyped Index in MaskAsPlaceholder Mode
|
|
392
|
-
if (maskAsPlaceholder && i === getLastTypedIndex() && key === "ArrowRight")
|
|
393
|
-
return false;
|
|
394
|
-
|
|
395
|
-
return setFocusOnChar(i + 1, i);
|
|
396
|
-
};
|
|
397
|
-
const onBackspaceDown = (e, i) => {
|
|
398
|
-
if (!isUndoValueBlocked) {
|
|
399
|
-
setUndoValue(getClearInnerValueAsString());
|
|
400
|
-
setIsUndoValueBlocked(true);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (getSelectionText().length) return deleteSelectedText();
|
|
404
|
-
|
|
405
|
-
const prevIndex = i - 1;
|
|
406
|
-
const charObj = getCharByIndex(prevIndex);
|
|
407
|
-
|
|
408
|
-
if (!charObj) return false;
|
|
409
|
-
|
|
410
|
-
const { isSpecialSymbol } = charObj;
|
|
411
|
-
|
|
412
|
-
if (isSpecialSymbol) return onBackspaceDown(e, prevIndex);
|
|
413
|
-
|
|
414
|
-
if (maskAsPlaceholder) {
|
|
415
|
-
const newText = innerValue
|
|
416
|
-
.slice(0, prevIndex)
|
|
417
|
-
.concat(
|
|
418
|
-
innerValue.slice(
|
|
419
|
-
i,
|
|
420
|
-
maxEditableLen !== -1 ? maxEditableLen : innerValue.length,
|
|
421
|
-
),
|
|
422
|
-
)
|
|
423
|
-
.reduce((text, { char }) => {
|
|
424
|
-
return text.concat(char);
|
|
425
|
-
}, "");
|
|
426
|
-
|
|
427
|
-
resetInnerValue();
|
|
428
|
-
onPaste({ text: newText }, 0);
|
|
429
|
-
} else {
|
|
430
|
-
updateInnerValueChar({ char: "" }, prevIndex);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
setFocusOnChar(prevIndex, i);
|
|
434
|
-
|
|
435
|
-
return true;
|
|
436
|
-
};
|
|
437
|
-
const onDeleteDown = (e, i) => {
|
|
438
|
-
if (!isUndoValueBlocked) {
|
|
439
|
-
setUndoValue(getClearInnerValueAsString());
|
|
440
|
-
setIsUndoValueBlocked(true);
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
if (getSelectionText().length) return deleteSelectedText();
|
|
444
|
-
|
|
445
|
-
const nextIndex = i + 1;
|
|
446
|
-
const charObj = getCharByIndex(i);
|
|
447
|
-
|
|
448
|
-
if (!charObj) return false;
|
|
449
|
-
|
|
450
|
-
const { char, isSpecialSymbol } = charObj;
|
|
451
|
-
|
|
452
|
-
if (isSpecialSymbol) return onDeleteDown(e, i + 1);
|
|
453
|
-
|
|
454
|
-
if (char === "") return false;
|
|
455
|
-
|
|
456
|
-
if (maskAsPlaceholder) {
|
|
457
|
-
const newText = innerValue
|
|
458
|
-
.slice(0, i)
|
|
459
|
-
.concat(
|
|
460
|
-
innerValue.slice(
|
|
461
|
-
nextIndex,
|
|
462
|
-
maxEditableLen !== -1 ? maxEditableLen : innerValue.length,
|
|
463
|
-
),
|
|
464
|
-
)
|
|
465
|
-
.reduce((text, { char }) => {
|
|
466
|
-
return text.concat(char);
|
|
467
|
-
}, "");
|
|
468
|
-
|
|
469
|
-
resetInnerValue();
|
|
470
|
-
onPaste({ text: newText }, 0);
|
|
471
|
-
setFocusOnChar(i, i);
|
|
472
|
-
} else {
|
|
473
|
-
updateInnerValueChar({ char: "" }, i);
|
|
474
|
-
setFocusOnChar(nextIndex, i);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
return true;
|
|
478
|
-
};
|
|
479
|
-
const onHomeDown = (e, i) => setFocusOnChar(0, -1);
|
|
480
|
-
const onEndDown = (e, i) =>
|
|
481
|
-
setTimeout(
|
|
482
|
-
() => setFocusOnChar(maskAsPlaceholder ? getLastTypedIndex() : 0, 0),
|
|
483
|
-
10,
|
|
484
|
-
);
|
|
485
|
-
// SERVICE KEYS HANDLERS | END //
|
|
486
|
-
|
|
487
|
-
// GENERAL EVENT HANDLERS | START //
|
|
488
|
-
const handleServiceKeyDown = (e, i) => {
|
|
489
|
-
const { key } = e;
|
|
490
|
-
|
|
491
|
-
switch (key) {
|
|
492
|
-
case "ArrowLeft":
|
|
493
|
-
return onArrowLeftDown(e, i);
|
|
494
|
-
break;
|
|
495
|
-
|
|
496
|
-
case "ArrowRight":
|
|
497
|
-
return onArrowRightDown(e, i);
|
|
498
|
-
break;
|
|
499
|
-
|
|
500
|
-
case "Backspace":
|
|
501
|
-
return onBackspaceDown(e, i);
|
|
502
|
-
break;
|
|
503
|
-
|
|
504
|
-
case "Delete":
|
|
505
|
-
return onDeleteDown(e, i);
|
|
506
|
-
break;
|
|
507
|
-
|
|
508
|
-
case "Home":
|
|
509
|
-
return onHomeDown(e, i);
|
|
510
|
-
break;
|
|
511
|
-
|
|
512
|
-
case "End":
|
|
513
|
-
return onEndDown(e, i);
|
|
514
|
-
break;
|
|
515
|
-
|
|
516
|
-
default:
|
|
517
|
-
return true;
|
|
518
|
-
break;
|
|
519
|
-
}
|
|
520
|
-
};
|
|
521
|
-
const handleKeyDown = async (
|
|
522
|
-
e,
|
|
523
|
-
i,
|
|
524
|
-
{ disableErrors = false, disableIsSelectingCheck = false } = {},
|
|
525
|
-
) => {
|
|
526
|
-
if (isSelecting && !disableIsSelectingCheck) {
|
|
527
|
-
deleteSelectedText();
|
|
528
|
-
resetSelectionText();
|
|
529
|
-
setIsSelecting(false);
|
|
530
|
-
setTimeout(
|
|
531
|
-
() =>
|
|
532
|
-
handleKeyDown(e, getSelectStartIndex(), {
|
|
533
|
-
disableErrors,
|
|
534
|
-
disableIsSelectingCheck: true,
|
|
535
|
-
}),
|
|
536
|
-
10,
|
|
537
|
-
);
|
|
538
|
-
return null;
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
try {
|
|
542
|
-
e.stopPropagation();
|
|
543
|
-
e.preventDefault();
|
|
544
|
-
} catch (e) {}
|
|
545
|
-
|
|
546
|
-
if (isInputThrottled) return false;
|
|
547
|
-
|
|
548
|
-
setIsInputThrottled(true);
|
|
549
|
-
|
|
550
|
-
let { key, keyCode } = e;
|
|
551
|
-
|
|
552
|
-
const charObj = getCharByIndex(i);
|
|
553
|
-
|
|
554
|
-
// Android Text Typing FIX
|
|
555
|
-
// eslint-disable-next-line eqeqeq
|
|
556
|
-
if (keyCode == ANDROID_CHROME_TEXT_CODE) {
|
|
557
|
-
const { ref: charRef } = charObj;
|
|
558
|
-
key = await new Promise((resolve) => {
|
|
559
|
-
setTimeout(() => {
|
|
560
|
-
//Typed Text
|
|
561
|
-
if (charRef?.current?.innerText?.length >= 2) {
|
|
562
|
-
const [key, prevChar] = charRef?.current?.innerText;
|
|
563
|
-
charRef.current.innerText = prevChar;
|
|
564
|
-
resolve(key);
|
|
565
|
-
} else {
|
|
566
|
-
resolve(null);
|
|
567
|
-
}
|
|
568
|
-
}, 1);
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
if (!charObj || i === innerValue.length - 1) return false;
|
|
573
|
-
|
|
574
|
-
if (maskAsPlaceholder && i > getLastTypedIndex() + 1)
|
|
575
|
-
return await handleKeyDown(
|
|
576
|
-
e,
|
|
577
|
-
getLastTypedIndex() === 0 ? 0 : getLastTypedIndex() + 1,
|
|
578
|
-
{ disableErrors },
|
|
579
|
-
);
|
|
580
|
-
|
|
581
|
-
const { isSpecialSymbol, maskChar, isReadOnly } = charObj;
|
|
582
|
-
|
|
583
|
-
if (isReadOnly) return false;
|
|
584
|
-
|
|
585
|
-
//IF DEFAULT CHAR IS SPACE, SWITCH TO NEXT INPUT
|
|
586
|
-
if (maskChar === SPACE_CHAR) return await handleKeyDown(e, i + 1);
|
|
587
|
-
|
|
588
|
-
if (isSpecialSymbol && maskChar !== key) return false;
|
|
589
|
-
|
|
590
|
-
if (!isValidChar({ char: key, i, disableErrors })) return false;
|
|
591
|
-
|
|
592
|
-
if (maskAsPlaceholder && getClearInnerValueAsString(i)?.length !== 0) {
|
|
593
|
-
const fromIndex = i + 1;
|
|
594
|
-
const text = innerValue
|
|
595
|
-
.slice()
|
|
596
|
-
.filter(({ isCharSymbol }, index) => index >= i && !isCharSymbol)
|
|
597
|
-
.map(({ char }, index) => char)
|
|
598
|
-
.join("");
|
|
599
|
-
onPaste({ text }, fromIndex, false);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
setIsUndoValueBlocked(false);
|
|
603
|
-
updateInnerValueChar({ char: key }, i);
|
|
604
|
-
setTimeout(() => onArrowRightDown(e, i), 1);
|
|
605
|
-
|
|
606
|
-
return true;
|
|
607
|
-
};
|
|
608
|
-
const handleKeyCombinations = (e, i) => {
|
|
609
|
-
const { key, keyCode } = e;
|
|
610
|
-
|
|
611
|
-
switch (keyCode) {
|
|
612
|
-
//Ctrl + A
|
|
613
|
-
case 65:
|
|
614
|
-
selectAllText(e);
|
|
615
|
-
break;
|
|
616
|
-
//Ctrl + Y
|
|
617
|
-
case 89:
|
|
618
|
-
if (redoValue) {
|
|
619
|
-
resetInnerValue();
|
|
620
|
-
onPaste({ text: redoValue }, 0, true);
|
|
621
|
-
}
|
|
622
|
-
break;
|
|
623
|
-
//Ctrl + Z
|
|
624
|
-
case 90:
|
|
625
|
-
setRedoValue(getClearInnerValueAsString());
|
|
626
|
-
resetInnerValue();
|
|
627
|
-
onPaste({ text: undoValue }, 0, true);
|
|
628
|
-
break;
|
|
629
|
-
}
|
|
630
|
-
};
|
|
631
|
-
const onKeyDown = async (e, i = null) => {
|
|
632
|
-
if (!isFocused && !isSelecting) return false;
|
|
633
|
-
|
|
634
|
-
const { key, ctrlKey, altKey } = e;
|
|
635
|
-
|
|
636
|
-
const target = innerValue[0].ref?.current || e.target;
|
|
637
|
-
|
|
638
|
-
onKeyDownProp({ ...e, target }, i);
|
|
639
|
-
|
|
640
|
-
if (KEYBOARD_SERVICE_KEYS.includes(key) && EXCLUDED_KEYS.includes(key))
|
|
641
|
-
return true;
|
|
642
|
-
|
|
643
|
-
setError(false);
|
|
644
|
-
clearErrorMessage();
|
|
645
|
-
|
|
646
|
-
if (ctrlKey || altKey) {
|
|
647
|
-
if (!KEYBOARD_SERVICE_KEYS.includes(key)) handleKeyCombinations(e, i);
|
|
648
|
-
return true;
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
e.preventDefault();
|
|
652
|
-
e.stopPropagation();
|
|
653
|
-
|
|
654
|
-
const handleResult = KEYBOARD_SERVICE_KEYS.includes(key)
|
|
655
|
-
? handleServiceKeyDown(e, i)
|
|
656
|
-
: await handleKeyDown(e, i);
|
|
657
|
-
|
|
658
|
-
if (blinkErrors && !handleResult && i !== null) {
|
|
659
|
-
setBlinkError(true);
|
|
660
|
-
}
|
|
661
|
-
};
|
|
662
|
-
const onClick = (e, cb, { ignoreIsSelecting = false } = {}) => {
|
|
663
|
-
try {
|
|
664
|
-
e.stopPropagation();
|
|
665
|
-
e.preventDefault();
|
|
666
|
-
} catch (error) {}
|
|
667
|
-
|
|
668
|
-
if (
|
|
669
|
-
isSelecting &&
|
|
670
|
-
(selectedText.length || getSelectionText().length) &&
|
|
671
|
-
!ignoreIsSelecting
|
|
672
|
-
)
|
|
673
|
-
return false;
|
|
674
|
-
|
|
675
|
-
setFocused(true);
|
|
676
|
-
|
|
677
|
-
if (e.detail === 2) selectAllText(e);
|
|
678
|
-
|
|
679
|
-
if (typeof cb === "function") cb(e);
|
|
680
|
-
};
|
|
681
|
-
const onCharClick = (e, i) => {
|
|
682
|
-
if (e.detail == 2) {
|
|
683
|
-
selectAllText(e);
|
|
684
|
-
return true;
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
const { char, maskChar } = getCharByIndex(i);
|
|
688
|
-
|
|
689
|
-
if (maskAsPlaceholder && !isValidChar({ char, i, disableErrors: true }))
|
|
690
|
-
i = getLastTypedIndex();
|
|
691
|
-
|
|
692
|
-
setIsSelecting(false);
|
|
693
|
-
resetSelectionText();
|
|
694
|
-
setTimeout(
|
|
695
|
-
() => onClick(e, () => setFocusOnChar(i, 0), { ignoreIsSelecting: true }),
|
|
696
|
-
50,
|
|
697
|
-
);
|
|
698
|
-
};
|
|
699
|
-
const onWrapperClick = (e) => {
|
|
700
|
-
e.stopPropagation();
|
|
701
|
-
e.preventDefault();
|
|
702
|
-
|
|
703
|
-
if (!isMouseDown && !isSelecting) {
|
|
704
|
-
onClick(e);
|
|
705
|
-
setFocusOnChar(getLastTypedIndex(), 0);
|
|
706
|
-
}
|
|
707
|
-
};
|
|
708
|
-
const onClearClick = (e) => {
|
|
709
|
-
e.stopPropagation();
|
|
710
|
-
e.preventDefault();
|
|
711
|
-
|
|
712
|
-
resetInnerValue();
|
|
713
|
-
onHomeDown(null, 0);
|
|
714
|
-
};
|
|
715
|
-
const onMouseDownMove = (e) => {
|
|
716
|
-
if (!isMouseDown) return false;
|
|
717
|
-
|
|
718
|
-
setIsSelecting(true);
|
|
719
|
-
|
|
720
|
-
const { clientX } = e;
|
|
721
|
-
|
|
722
|
-
if (selectionStartX === null) setSelectionStartX(clientX);
|
|
723
|
-
|
|
724
|
-
setSelectionEndX(clientX);
|
|
725
|
-
};
|
|
726
|
-
const onBlur = (e) => {
|
|
727
|
-
if (isFocused) onBlurProp();
|
|
728
|
-
setFocused(false);
|
|
729
|
-
};
|
|
730
|
-
const onFocus = (e, i) => {
|
|
731
|
-
const charObj = getCharByIndex(i);
|
|
732
|
-
|
|
733
|
-
if (!charObj) return false;
|
|
734
|
-
|
|
735
|
-
const { isSpecialSymbol, ref } = charObj;
|
|
736
|
-
|
|
737
|
-
setCaretPosition(ref.current, 0);
|
|
738
|
-
|
|
739
|
-
if (
|
|
740
|
-
(maxEditableLen !== -1 ? i < maxEditableLen : true) &&
|
|
741
|
-
isSpecialSymbol &&
|
|
742
|
-
i < innerValue.length - 1
|
|
743
|
-
) {
|
|
744
|
-
onFocus(e, i + 1);
|
|
745
|
-
return false;
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
if (!isFocused) onFocusProp(e);
|
|
749
|
-
|
|
750
|
-
setFocused(true);
|
|
751
|
-
};
|
|
752
|
-
const onPaste = (e, i, setFocusToEnd = true) => {
|
|
753
|
-
try {
|
|
754
|
-
e.stopPropagation();
|
|
755
|
-
e.preventDefault();
|
|
756
|
-
} catch (error) {}
|
|
757
|
-
|
|
758
|
-
setIsSelecting(false);
|
|
759
|
-
resetSelectionText();
|
|
760
|
-
|
|
761
|
-
const pastedText =
|
|
762
|
-
(e?.clipboardData || window?.clipboardData)?.getData("text/plain") ||
|
|
763
|
-
e?.clipboardData?.getData("Text") ||
|
|
764
|
-
e.text;
|
|
765
|
-
|
|
766
|
-
if (!pastedText) return false;
|
|
767
|
-
|
|
768
|
-
const replacedIndexes = [];
|
|
769
|
-
|
|
770
|
-
if (maskAsPlaceholder && e?.type === "paste") {
|
|
771
|
-
const fromIndex = i + parseInt(pastedText?.length, 10);
|
|
772
|
-
const text = innerValue
|
|
773
|
-
.slice()
|
|
774
|
-
.filter(({ isCharSymbol }, index) => index >= i && !isCharSymbol)
|
|
775
|
-
.map(({ char }, index) => char)
|
|
776
|
-
.join("");
|
|
777
|
-
onPaste({ text }, fromIndex, false);
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
pastedText
|
|
781
|
-
.split("")
|
|
782
|
-
.filter((char) => isDigit(char) || isLetter(char))
|
|
783
|
-
.map((pastedChar, offset) => {
|
|
784
|
-
const charIndex = i + offset;
|
|
785
|
-
|
|
786
|
-
let isReplaced = false;
|
|
787
|
-
let isValid = false;
|
|
788
|
-
|
|
789
|
-
for (
|
|
790
|
-
let index = charIndex;
|
|
791
|
-
index < innerValue.length && !isReplaced;
|
|
792
|
-
++index
|
|
793
|
-
) {
|
|
794
|
-
const charObj = getCharByIndex(index);
|
|
795
|
-
|
|
796
|
-
if (!charObj) continue;
|
|
797
|
-
|
|
798
|
-
const { char, maskChar, isSpecialSymbol } = charObj;
|
|
799
|
-
|
|
800
|
-
// If Char Is Valid
|
|
801
|
-
if (!isValidChar({ char: pastedChar, i: index, disableErrors: true }))
|
|
802
|
-
continue;
|
|
803
|
-
|
|
804
|
-
// If Char Already Replaced
|
|
805
|
-
if (replacedIndexes.includes(index)) continue;
|
|
806
|
-
|
|
807
|
-
isReplaced = true;
|
|
808
|
-
isValid = true;
|
|
809
|
-
replacedIndexes.push(index);
|
|
810
|
-
|
|
811
|
-
if (imitateTypingOnPaste) {
|
|
812
|
-
setTimeout(() => {
|
|
813
|
-
updateInnerValueChar({ char: pastedChar }, index);
|
|
814
|
-
}, offset * imitateTypingOnPasteDelay);
|
|
815
|
-
} else {
|
|
816
|
-
updateInnerValueChar({ char: pastedChar }, index);
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
return { char: pastedChar, isValid };
|
|
821
|
-
});
|
|
822
|
-
|
|
823
|
-
const [lastCharIndex] = replacedIndexes.reverse();
|
|
824
|
-
|
|
825
|
-
if (setFocusToEnd) setFocusOnChar(lastCharIndex + 1, i);
|
|
826
|
-
|
|
827
|
-
return lastCharIndex;
|
|
828
|
-
};
|
|
829
|
-
const onCopy = (e, i) => {
|
|
830
|
-
try {
|
|
831
|
-
e.stopPropagation();
|
|
832
|
-
e.preventDefault();
|
|
833
|
-
} catch (error) {}
|
|
834
|
-
|
|
835
|
-
copyToClipboard(getSelectionText());
|
|
836
|
-
};
|
|
837
|
-
const onCut = (e, i) => {
|
|
838
|
-
if (!isUndoValueBlocked) {
|
|
839
|
-
setUndoValue(getClearInnerValueAsString());
|
|
840
|
-
setIsUndoValueBlocked(true);
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
try {
|
|
844
|
-
e.stopPropagation();
|
|
845
|
-
e.preventDefault();
|
|
846
|
-
} catch (error) {}
|
|
847
|
-
|
|
848
|
-
copyToClipboard(getSelectionText());
|
|
849
|
-
deleteSelectedText();
|
|
850
|
-
|
|
851
|
-
setIsSelecting(false);
|
|
852
|
-
setFocusOnChar(i, 0);
|
|
853
|
-
};
|
|
854
|
-
// GENERAL EVENT HANDLERS | END //
|
|
855
|
-
|
|
856
|
-
// FUNCTIONS | START //
|
|
857
|
-
const cancelDefaultAction = (e, cb) => {
|
|
858
|
-
const { key } = e;
|
|
859
|
-
|
|
860
|
-
if (!EXCLUDED_KEYS.includes(key) && KEYBOARD_SERVICE_KEYS.includes(key)) {
|
|
861
|
-
e.preventDefault();
|
|
862
|
-
e.stopPropagation();
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
if (typeof cb === "function") cb(e);
|
|
866
|
-
|
|
867
|
-
return false;
|
|
868
|
-
};
|
|
869
|
-
const selectAllText = (e) => {
|
|
870
|
-
e.preventDefault();
|
|
871
|
-
e.stopPropagation();
|
|
872
|
-
|
|
873
|
-
setIsSelecting(true);
|
|
874
|
-
|
|
875
|
-
setSelectionStartX(-1);
|
|
876
|
-
setSelectionEndX(-1);
|
|
877
|
-
|
|
878
|
-
selectElementContents(inputRef.current);
|
|
879
|
-
setSelectedText(getSelectionText());
|
|
880
|
-
};
|
|
881
|
-
const deleteSelectedText = () => {
|
|
882
|
-
const selStartInd = getSelectStartIndex();
|
|
883
|
-
|
|
884
|
-
if (selStartInd === null || selStartInd === undefined) return false;
|
|
885
|
-
|
|
886
|
-
const selEndInd = getSelectionText().length + selStartInd;
|
|
887
|
-
|
|
888
|
-
resetSelectionText();
|
|
889
|
-
|
|
890
|
-
if (
|
|
891
|
-
maskAsPlaceholder &&
|
|
892
|
-
getClearInnerValueAsString(selEndInd + 1)?.length !== 0
|
|
893
|
-
) {
|
|
894
|
-
const text = innerValue
|
|
895
|
-
.slice()
|
|
896
|
-
.filter(({ isSpecialSymbol, isCharSymbol }, index) => {
|
|
897
|
-
if (maxEditableLen !== -1 && index > maxEditableLen - 1) return false;
|
|
898
|
-
return (
|
|
899
|
-
(index < selStartInd || index >= selEndInd) &&
|
|
900
|
-
!isSpecialSymbol &&
|
|
901
|
-
!isCharSymbol
|
|
902
|
-
);
|
|
903
|
-
})
|
|
904
|
-
.map(({ char }, index) => char)
|
|
905
|
-
.join("");
|
|
906
|
-
|
|
907
|
-
resetInnerValue();
|
|
908
|
-
onPaste({ text }, 0, false);
|
|
909
|
-
setFocusOnChar(selStartInd);
|
|
910
|
-
} else {
|
|
911
|
-
for (let index = selStartInd; index < selEndInd; ++index)
|
|
912
|
-
updateInnerValueChar({ char: "" }, index);
|
|
913
|
-
}
|
|
914
|
-
|
|
915
|
-
setFocusOnChar(selStartInd, -1);
|
|
916
|
-
|
|
917
|
-
return true;
|
|
918
|
-
};
|
|
919
|
-
// FUNCTIONS | END //
|
|
920
|
-
|
|
921
|
-
///--- OBSERVERS ---///
|
|
922
|
-
// Input Throttling
|
|
923
|
-
useEffect(() => {
|
|
924
|
-
if (isInputThrottled)
|
|
925
|
-
setTimeout(() => setIsInputThrottled(false), inputThrottlingTimeout);
|
|
926
|
-
}, [isInputThrottled]);
|
|
927
|
-
//Render Mask
|
|
928
|
-
useEffect(() => {
|
|
929
|
-
setInnerValue([]);
|
|
930
|
-
setMaskRendered(false);
|
|
931
|
-
|
|
932
|
-
if (!maskPattern) maskPattern = "";
|
|
933
|
-
|
|
934
|
-
maskPattern
|
|
935
|
-
.concat(" ")
|
|
936
|
-
.split("")
|
|
937
|
-
.map((char, id, i) => {
|
|
938
|
-
addInnerValueChar({
|
|
939
|
-
char,
|
|
940
|
-
i,
|
|
941
|
-
data: { id, isReadOnly: id === maskPattern.length },
|
|
942
|
-
});
|
|
943
|
-
if (value?.[id]) updateInnerValueChar({ char: value[id] }, id);
|
|
944
|
-
});
|
|
945
|
-
setMaskRendered(true);
|
|
946
|
-
}, [maskPattern]);
|
|
947
|
-
|
|
948
|
-
useEffect(() => {
|
|
949
|
-
if (value !== getClearInnerValueAsString()) setIsInitValue(false);
|
|
950
|
-
}, [value]);
|
|
951
|
-
|
|
952
|
-
useEffect(() => {
|
|
953
|
-
if (
|
|
954
|
-
isMaskRendered &&
|
|
955
|
-
!isInitValue &&
|
|
956
|
-
value !== getClearInnerValueAsString()
|
|
957
|
-
) {
|
|
958
|
-
if (value && value !== "") {
|
|
959
|
-
let valueCharIndex = 0;
|
|
960
|
-
innerValue.map(({ isSpecialSymbol }, i) => {
|
|
961
|
-
if (isSpecialSymbol) return false;
|
|
962
|
-
let char = value[valueCharIndex];
|
|
963
|
-
let whileLimit = maskPattern?.length || 0;
|
|
964
|
-
while (
|
|
965
|
-
whileLimit &&
|
|
966
|
-
isSpecialSymbolChar({ char: value[valueCharIndex] })
|
|
967
|
-
) {
|
|
968
|
-
whileLimit--;
|
|
969
|
-
char = value[++valueCharIndex];
|
|
970
|
-
}
|
|
971
|
-
|
|
972
|
-
//If Valid
|
|
973
|
-
if (isValidChar({ char, i, disableErrors: true })) {
|
|
974
|
-
updateInnerValueChar({ char }, i);
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
++valueCharIndex;
|
|
978
|
-
});
|
|
979
|
-
}
|
|
980
|
-
|
|
981
|
-
setIsInitValue(true);
|
|
982
|
-
}
|
|
983
|
-
}, [isMaskRendered, value, isInitValue]);
|
|
984
|
-
|
|
985
|
-
useEffect(() => {
|
|
986
|
-
if (isInitValue) setUndoValue(getClearInnerValueAsString());
|
|
987
|
-
}, [isInitValue]);
|
|
988
|
-
|
|
989
|
-
// Focus Observer
|
|
990
|
-
useEffect(() => {
|
|
991
|
-
if (!isFocused) setSelectedText("");
|
|
992
|
-
}, [isFocused]);
|
|
993
|
-
|
|
994
|
-
// Default Focused
|
|
995
|
-
useEffect(() => {
|
|
996
|
-
if (isFocusedDefault && isMaskRendered) setFocusOnChar(0, -1);
|
|
997
|
-
}, [isFocusedDefault, isMaskRendered]);
|
|
998
|
-
|
|
999
|
-
// OnChange Observer
|
|
1000
|
-
useEffect(() => {
|
|
1001
|
-
if (isMaskRendered && isFocused) {
|
|
1002
|
-
setError(false);
|
|
1003
|
-
clearErrorMessage();
|
|
1004
|
-
const values = [
|
|
1005
|
-
getClearInnerValueAsString(),
|
|
1006
|
-
getInnerValueAsString({ replaceSpace: true }),
|
|
1007
|
-
];
|
|
1008
|
-
if (returnMaskedValue) values.reverse();
|
|
1009
|
-
|
|
1010
|
-
onChangeProp(...values);
|
|
1011
|
-
}
|
|
1012
|
-
}, [innerValue, isMaskRendered]);
|
|
1013
|
-
|
|
1014
|
-
// Blink Error
|
|
1015
|
-
useEffect(() => {
|
|
1016
|
-
if (blinkError) setTimeout(() => setBlinkError(false), blinkDuration);
|
|
1017
|
-
}, [blinkError]);
|
|
1018
|
-
|
|
1019
|
-
useEffect(() => {
|
|
1020
|
-
if (!isSelecting) {
|
|
1021
|
-
setSelectedText("");
|
|
1022
|
-
resetSelectionText();
|
|
1023
|
-
setSelectionStartX(null);
|
|
1024
|
-
setSelectionEndX(null);
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
|
-
if (!isMouseDown && isSelecting) {
|
|
1028
|
-
document.addEventListener(
|
|
1029
|
-
"keydown",
|
|
1030
|
-
(e) => pushServiceWatcher(() => onKeyDown(e)),
|
|
1031
|
-
{ once: true },
|
|
1032
|
-
);
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
if (!isMouseDown && isSelecting && !getSelectionText().length)
|
|
1036
|
-
setIsSelecting(false);
|
|
1037
|
-
}, [isSelecting, isMouseDown]);
|
|
1038
|
-
|
|
1039
|
-
useEffect(() => {
|
|
1040
|
-
document.addEventListener("mouseup", () => {
|
|
1041
|
-
setIsMouseDown((isMouseDown) => {
|
|
1042
|
-
if (isMouseDown) setSelectedText(getSelectionText());
|
|
1043
|
-
return false;
|
|
1044
|
-
});
|
|
1045
|
-
});
|
|
1046
|
-
}, []);
|
|
1047
|
-
|
|
1048
|
-
useEffect(() => {
|
|
1049
|
-
setError(customError !== "");
|
|
1050
|
-
setErrorMessage(customError === "" ? errors.default : customError);
|
|
1051
|
-
}, [customError, isError]);
|
|
1052
|
-
|
|
1053
|
-
///--- RENDER ---///
|
|
1054
|
-
|
|
1055
|
-
const renderChar = (obj, i, className = "") => {
|
|
1056
|
-
const { char, ref, maskChar, isSpecialSymbol } = obj;
|
|
1057
|
-
const prevChar = getCharByIndex(i - 1);
|
|
1058
|
-
|
|
1059
|
-
if (i === innerValue.length - 1 && isSelecting)
|
|
1060
|
-
return <span style={{ width: "1px" }} />;
|
|
1061
|
-
|
|
1062
|
-
return (
|
|
1063
|
-
<span
|
|
1064
|
-
tabIndex={i === 0 ? 0 : -1}
|
|
1065
|
-
key={i}
|
|
1066
|
-
attr-char-id={i}
|
|
1067
|
-
className={`
|
|
1068
|
-
input-mask_value_item
|
|
1069
|
-
${className}
|
|
1070
|
-
${isDigitMaskChar(obj.maskChar) ? "input-mask_value_item--digit" : ""}
|
|
1071
|
-
${isLetterMaskChar(obj.maskChar) ? "input-mask_value_item--letter" : ""}
|
|
1072
|
-
${obj.isSpecialSymbol ? "input-mask_value_item--spec" : ""}
|
|
1073
|
-
`}
|
|
1074
|
-
onClick={(e) => onCharClick(e, i)}
|
|
1075
|
-
onFocus={(...params) => {
|
|
1076
|
-
// if (isUseAutoSelect) inputRef?.current?.select();
|
|
1077
|
-
if (onFocus) onFocus(...params);
|
|
1078
|
-
}}
|
|
1079
|
-
onBlur={onBlur}
|
|
1080
|
-
onKeyPress={cancelDefaultAction}
|
|
1081
|
-
onKeyDown={(e) => onKeyDown(e, i)}
|
|
1082
|
-
onChange={cancelDefaultAction}
|
|
1083
|
-
contentEditable={!isSelecting}
|
|
1084
|
-
inputMode={
|
|
1085
|
-
isDigitMaskChar(
|
|
1086
|
-
i !== innerValue.length - 1 ? maskChar : prevChar?.maskChar,
|
|
1087
|
-
)
|
|
1088
|
-
? "numeric"
|
|
1089
|
-
: "text"
|
|
1090
|
-
}
|
|
1091
|
-
suppressContentEditableWarning={true}
|
|
1092
|
-
onPaste={(e) => onPaste(e, i)}
|
|
1093
|
-
onCopy={(e) => onCopy(e, i)}
|
|
1094
|
-
onCut={(e) => onCut(e, i)}
|
|
1095
|
-
ref={ref}
|
|
1096
|
-
onDoubleClick={(e) => {
|
|
1097
|
-
e.stopPropagation();
|
|
1098
|
-
e.preventDefault();
|
|
1099
|
-
setIsSelecting(true);
|
|
1100
|
-
setTimeout(() => selectAllText(e, i), 50);
|
|
1101
|
-
}}
|
|
1102
|
-
onMouseDown={(e) => cancelDefaultAction(e, () => setIsMouseDown(true))}
|
|
1103
|
-
onMouseMove={(e) => cancelDefaultAction(e, onMouseDownMove)}
|
|
1104
|
-
>
|
|
1105
|
-
{!isFocused &&
|
|
1106
|
-
hideMaskOnBlur &&
|
|
1107
|
-
getClearInnerValueAsString().length === 0
|
|
1108
|
-
? SPACE_CHAR
|
|
1109
|
-
: isSpecialSymbol
|
|
1110
|
-
? maskChar
|
|
1111
|
-
: char === ""
|
|
1112
|
-
? getPlaceholderCharByIndex(i)
|
|
1113
|
-
: char}
|
|
1114
|
-
</span>
|
|
1115
|
-
);
|
|
1116
|
-
};
|
|
1117
|
-
const renderMaskChar = (obj, i) =>
|
|
1118
|
-
renderChar(obj, i, "input-mask_value_item_mask-char");
|
|
1119
|
-
const renderValueChar = (obj, i) =>
|
|
1120
|
-
renderChar(obj, i, "input-mask_value_item_value-char");
|
|
1121
|
-
const renderSpecialChar = (obj, i) =>
|
|
1122
|
-
renderChar(obj, i, "input-mask_value_item_spec-char");
|
|
1123
|
-
const renderInputValue = () => {
|
|
1124
|
-
return innerValue.map((obj, i) => {
|
|
1125
|
-
const { char, isSpecialSymbol } = obj;
|
|
1126
|
-
|
|
1127
|
-
if (isSpecialSymbol) {
|
|
1128
|
-
return renderSpecialChar(obj, i);
|
|
1129
|
-
}
|
|
1130
|
-
|
|
1131
|
-
const isMaskItem = (() => char === "")();
|
|
1132
|
-
return isMaskItem ? renderMaskChar(obj, i) : renderValueChar(obj, i);
|
|
1133
|
-
});
|
|
1134
|
-
};
|
|
1135
|
-
const render = () => {
|
|
1136
|
-
return (
|
|
1137
|
-
<div
|
|
1138
|
-
data-testid={testId}
|
|
1139
|
-
className={cn(
|
|
1140
|
-
"input-mask_wrapper",
|
|
1141
|
-
className,
|
|
1142
|
-
{ disabled },
|
|
1143
|
-
{ "input-mask_error": isError },
|
|
1144
|
-
{ "input-mask_focus": isFocused },
|
|
1145
|
-
{ "input-mask_blink-error": blinkError },
|
|
1146
|
-
)}
|
|
1147
|
-
onClick={onWrapperClick}
|
|
1148
|
-
onBlur={onBlur}
|
|
1149
|
-
>
|
|
1150
|
-
<div
|
|
1151
|
-
className={`
|
|
1152
|
-
input-mask
|
|
1153
|
-
${isError ? "input-mask_error" : ""}
|
|
1154
|
-
${isFocused ? "input-mask_focus" : ""}
|
|
1155
|
-
${blinkError ? "input-mask_blink-error" : ""}
|
|
1156
|
-
`}
|
|
1157
|
-
onMouseDown={(e) =>
|
|
1158
|
-
cancelDefaultAction(e, () => setIsMouseDown(true))
|
|
1159
|
-
}
|
|
1160
|
-
onMouseMove={(e) => cancelDefaultAction(e, onMouseDownMove)}
|
|
1161
|
-
// onMouseUp={cancelDefaultAction}
|
|
1162
|
-
onClick={onWrapperClick}
|
|
1163
|
-
onBlur={onBlur}
|
|
1164
|
-
>
|
|
1165
|
-
{showHint && isHintLeft && (
|
|
1166
|
-
<div className="input-mask_hint input-mask_hint--left">
|
|
1167
|
-
<Hint
|
|
1168
|
-
hint={hintText}
|
|
1169
|
-
className={hintClassName}
|
|
1170
|
-
side={hintPosition}
|
|
1171
|
-
/>
|
|
1172
|
-
</div>
|
|
1173
|
-
)}
|
|
1174
|
-
{isIconLeft && showIcon && (
|
|
1175
|
-
<div className="input-mask_icon input-mask_icon--left">{icon}</div>
|
|
1176
|
-
)}
|
|
1177
|
-
<div
|
|
1178
|
-
className="input-mask_value"
|
|
1179
|
-
ref={inputRef}
|
|
1180
|
-
onKeyUp={cancelDefaultAction}
|
|
1181
|
-
onKeyDown={(e) => cancelDefaultAction(e, onKeyDown)}
|
|
1182
|
-
onKeyPress={cancelDefaultAction}
|
|
1183
|
-
onBlur={onBlur}
|
|
1184
|
-
onClick={onWrapperClick}
|
|
1185
|
-
>
|
|
1186
|
-
{renderInputValue()}
|
|
1187
|
-
</div>
|
|
1188
|
-
{isClearable && (
|
|
1189
|
-
<div className="input-mask_clear">
|
|
1190
|
-
<X onClick={onClearClick} />
|
|
1191
|
-
</div>
|
|
1192
|
-
)}
|
|
1193
|
-
{isIconRight && showIcon && (
|
|
1194
|
-
<div className="input-mask_icon input-mask_icon--right">{icon}</div>
|
|
1195
|
-
)}
|
|
1196
|
-
{showHint && isHintRight && (
|
|
1197
|
-
<div className="input-mask_hint input-mask_hint--right">
|
|
1198
|
-
<Hint
|
|
1199
|
-
hint={hintText}
|
|
1200
|
-
className={hintClassName}
|
|
1201
|
-
side={hintPosition}
|
|
1202
|
-
/>
|
|
1203
|
-
</div>
|
|
1204
|
-
)}
|
|
1205
|
-
</div>
|
|
1206
|
-
{showErrors && errorMessage && (
|
|
1207
|
-
<div className="input-mask_error-text">{errorMessage}</div>
|
|
1208
|
-
)}
|
|
1209
|
-
</div>
|
|
1210
|
-
);
|
|
1211
|
-
};
|
|
1212
|
-
|
|
1213
|
-
return render();
|
|
1214
|
-
}
|
|
1
|
+
function n(n,r){(null==r||r>n.length)&&(r=n.length);for(var t=0,e=Array(r);t<r;t++)e[t]=n[t];return e}function r(n){if(Array.isArray(n))return n}function t(n,r,t,e,i,o,a){try{var u=n[o](a),c=u.value}catch(n){t(n);return}u.done?r(c):Promise.resolve(c).then(e,i)}function e(n){return function(){var r=this,e=arguments;return new Promise(function(i,o){var a=n.apply(r,e);function u(n){t(a,i,o,u,c,"next",n)}function c(n){t(a,i,o,u,c,"throw",n)}u(void 0)})}}function i(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}function o(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(n){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},e=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(t).filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.forEach(function(r){var e;e=t[r],r in n?Object.defineProperty(n,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[r]=e})}return n}function u(n,t){return r(n)||function(n,r){var t,e,i=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=i){var o=[],a=!0,u=!1;try{for(i=i.call(n);!(a=(t=i.next()).done)&&(o.push(t.value),!r||o.length!==r);a=!0);}catch(n){u=!0,e=n}finally{try{a||null==i.return||i.return()}finally{if(u)throw e}}return o}}(n,t)||l(n,t)||o()}function c(r){return function(r){if(Array.isArray(r))return n(r)}(r)||i(r)||l(r)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(r,t){if(r){if("string"==typeof r)return n(r,t);var e=Object.prototype.toString.call(r).slice(8,-1);if("Object"===e&&r.constructor&&(e=r.constructor.name),"Map"===e||"Set"===e)return Array.from(e);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return n(r,t)}}function s(n,r){var t,e,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){var l=[u,c];if(t)throw TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(o=0)),o;)try{if(t=1,e&&(i=2&l[0]?e.return:l[0]?e.throw||((i=e.return)&&i.call(e),0):e.next)&&!(i=i.call(e,l[1])).done)return i;switch(e=0,i&&(l=[2&l[0],i.value]),l[0]){case 0:case 1:i=l;break;case 4:return o.label++,{value:l[1],done:!1};case 5:o.label++,e=l[1],l=[0];continue;case 7:l=o.ops.pop(),o.trys.pop();continue;default:if(!(i=(i=o.trys).length>0&&i[i.length-1])&&(6===l[0]||2===l[0])){o=0;continue}if(3===l[0]&&(!i||l[1]>i[0]&&l[1]<i[3])){o.label=l[1];break}if(6===l[0]&&o.label<i[1]){o.label=i[1],i=l;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(l);break}i[2]&&o.ops.pop(),o.trys.pop();continue}l=r.call(n,o)}catch(n){l=[6,n],e=0}finally{t=i=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}import{jsx as f,jsxs as p}from"react/jsx-runtime";import{createRef as d,useEffect as v,useRef as h,useState as m}from"react";import y from"classnames";import{X as b}from"react-feather";import g from"../../UI/Hint/Hint";import{KEYBOARD_SERVICE_KEYS as k}from"./../../../Constants/index.constants.js";import{setCaretPosition as S}from"./InputCarretPosition";import{ANDROID_CHROME_TEXT_CODE as w,DEFAULT_ERRORS as C,DIGIT_MASK_CHAR as P,EXCLUDED_KEYS as _,LOWERCASE_LETTER_MASK_CHAR as x,SPACE_CHAR as D,UPPERCASE_LETTER_MASK_CHAR as O}from"./config";import{copyToClipboard as j,getSelectionText as E,isDigit as T,isDigitMaskChar as I,isLetter as A,isLetterMaskChar as N,isLowerCaseLetter as L,isUpperCaseLetter as M,resetSelectionText as B,selectElementContents as K,voidFn as R}from"./functions";import"./InputMask.scss";export default function H(){var n,t,H=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},U=H.maskPattern,X=H.maskPatternPlaceholder,F=H.maskPlaceholder,V=H.maskDigitPlaceholder,G=H.maskLetterPlaceholder,W=H.usePatternPlaceholder,$=H.disabled,q=H.maskAsPlaceholder,z=void 0===q||q,J=H.maxEditableLen,Q=void 0===J?-1:J,Y=H.isFocusedDefault,Z=void 0!==Y&&Y,nn=H.isClearable,nr=H.isCaseSensitive,nt=H.adaptTextCase,ne=(H.isUseAutoSelect,H.icon),ni=H.showIcon,no=H.isIconLeft,na=H.isIconRight,nu=H.value,nc=H.blinkErrors,nl=void 0===nc||nc,ns=H.blinkDuration,nf=void 0===ns?100:ns,np=H.showErrors,nd=H.className,nv=H.errors,nh=H.error,nm=void 0===nh?"":nh,ny=(H.ref,H.onChange),nb=void 0===ny?function(){}:ny,ng=H.onFocus,nk=void 0===ng?function(){}:ng,nS=H.onBlur,nw=void 0===nS?function(){}:nS,nC=H.onKeyDown,nP=void 0===nC?function(){}:nC,n_=H.imitateTypingOnPaste,nx=void 0!==n_&&n_,nD=H.imitateTypingOnPasteDelay,nO=void 0===nD?100:nD,nj=H.showHint,nE=void 0!==nj&&nj,nT=H.hintText,nI=void 0===nT?"":nT,nA=H.hintClassName,nN=void 0===nA?"":nA,nL=H.isHintRight,nM=H.isHintLeft,nB=H.hintPosition,nK=void 0===nB?"right":nB,nR=H.hideMaskOnBlur,nH=void 0===nR||nR,nU=H.returnMaskedValue,nX=void 0!==nU&&nU,nF=(H.name,H.testId),nV=a({},C,void 0===nv?C:nv),nG=u(m(!1),2),nW=nG[0],n$=nG[1],nq=h(null),nz=u(m(!1),2),nJ=nz[0],nQ=nz[1],nY=u(m(!1),2),nZ=nY[0],n0=nY[1],n1=u(m(!1),2),n2=n1[0],n3=n1[1],n4=u(m(!1),2),n6=n4[0],n5=n4[1],n8=u(m(!1),2),n9=n8[0],n7=n8[1],rn=u(m(!1),2),rr=rn[0],rt=rn[1],re=u(m(nV.default),2),ri=re[0],ro=re[1],ra=function(){return ro(nV.default)},ru=u(m(!1),2),rc=ru[0],rl=ru[1],rs=u(m(""),2),rf=rs[0],rp=rs[1],rd=u(m(null),2),rv=rd[0],rh=rd[1],rm=u(m(null),2),ry=rm[0],rb=rm[1],rg=u(m([]),2),rk=rg[0],rS=rg[1],rw=function(){var n=r(rk)||i(rk)||l(rk)||o(),t=n[0];return rS(n.slice(1)),t.fn||R},rC=function(){rw()()};v(function(){rk.length&&rC()},[rk]);var rP=u(m([]),2),r_=rP[0],rx=rP[1],rD=u(m(""),2),rO=rD[0],rj=rD[1],rE=u(m(null),2),rT=rE[0],rI=rE[1],rA=u(m(!1),2),rN=rA[0],rL=rA[1],rM=function(n){var r=n.char,t=(n.i,n.data),e=void 0===t?{}:t;rx(function(n){var t=c(n),i=rX(r,e);return t.push(i),t})},rB=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.char,t=void 0===r?null:r,e=arguments.length>1?arguments[1]:void 0;rx(function(n){if(!n[e])return n;var r=c(n);return r[e].isSpecialSymbol||null===t||(r[e].char=t),r})},rK=function(){r_.map(function(n,r){return rB({char:""},r)})},rR=function(n){var r=n.char,t=n.i,e=n.disableErrors,i=void 0!==e&&e;switch(rV(t)){case P:if(!T(r))return i||ro(nV.onlyDigit),!1;break;case O:if(nt&&(r=r.toUpperCase()),!A(r)&&!nr)return i||ro(nV.onlyLetter),!1;if(nr&&!M(r))return i||ro(nV.onlyUpperCase),!1;break;case x:if(nt&&(r=r.toLowerCase()),!A(r)&&!nr)return i||ro(nV.onlyLetter),!1;if(nr&&!L(r))return i||ro(nV.onlyLowerCase),!1;break;default:return!1}return!0},rH=function(n){var r=n.char;return!I(r)&&!N(r)},rU=function(n){var r=n.char;return!T(r)&&!A(r)},rX=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=rU({char:n}),e=rH({char:n});return" "===n&&(n=D),a({char:e?n:"",maskChar:n,isSpecialSymbol:e,isCharSymbol:!t&&""!==n&&e,ref:d()},r)},rF=function(n){return r_[n]?a({},r_[n]):void 0},rV=function(n){var r;return(null==(r=r_[n])?void 0:r.maskChar)||void 0},rG=function(){if(rv===ry)return 0;var n=rv<ry?rv:ry,r=rv>ry?rv:ry;return r_.reduce(function(t,e,i){e.char;var o,a=e.ref;if((null==a?void 0:a.current)===null)return t;var u=null==a||null==(o=a.current)?void 0:o.getBoundingClientRect(),c=u.left,l=c+u.width/2;return!c||n>l||r<l?t:null===t.index||n<=l&&l>=r&&l<t.charX?{index:i,charX:l}:t},{index:null,charX:null}).index},rW=function(n){var r=rF(n).maskChar;return W?X[n]||F:I(r)&&V?V:N(r)&&G?G:F},r$=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.replaceSpace,t=r_.slice(0,r_.length-1).map(function(n,r){var t=n.char,e=n.maskChar;return""===t?rW(r)||e:t}).join("");return void 0!==r&&r?null==t?void 0:t.replace(/\u00A0/g," "):t},rq=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return r_.filter(function(r,t){return t>=n}).reduce(function(n,r,t,e){var i=r.char,o=r.maskChar,a=r.isSpecialSymbol,u=r.isCharSymbol;return(i!==o&&""!==i||!a||u)&&(n+=i),n},"")},rz=function(){return r_.reduce(function(n,r,t){var e=r.char;return(r.isSpecialSymbol||e===D||""===e)&&null!==n||(n=t),n},-1)+1},rJ=function(n,r){var t,e=rF(n);if(!e)return!1;var i=e.ref,o=e.isSpecialSymbol;return!!i&&((-1===Q||n<Q)&&o&&n<r_.length-1?r>n?rQ(null,n):rY(null,n):-1!==Q&&n>Q?(rJ(Q,n),!1):(null==(t=i.current)||t.focus(),setTimeout(function(){return S(i.current,0)},10),!0))},rQ=function(n,r){return rJ(r-1,r)},rY=function(n,r){var t=(null==n?void 0:n.key)||null;return z&&r>rz()?rJ(rz()+1,r):(!z||r!==rz()||"ArrowRight"!==t)&&rJ(r+1,r)},rZ=function(n,r){if(rN||(rj(rq()),rL(!0)),E().length)return tu();var t=r-1,e=rF(t);if(!e)return!1;if(e.isSpecialSymbol)return rZ(n,t);if(z){var i=r_.slice(0,t).concat(r_.slice(r,-1!==Q?Q:r_.length)).reduce(function(n,r){var t=r.char;return n.concat(t)},"");rK(),tt({text:i},0)}else rB({char:""},t);return rJ(t,r),!0},r0=function(n,r){if(rN||(rj(rq()),rL(!0)),E().length)return tu();var t=r+1,e=rF(r);if(!e)return!1;var i=e.char;if(e.isSpecialSymbol)return r0(n,r+1);if(""===i)return!1;if(z){var o=r_.slice(0,r).concat(r_.slice(t,-1!==Q?Q:r_.length)).reduce(function(n,r){var t=r.char;return n.concat(t)},"");rK(),tt({text:o},0),rJ(r,r)}else rB({char:""},r),rJ(t,r);return!0},r1=function(n,r){return rJ(0,-1)},r2=function(n,r){switch(n.key){case"ArrowLeft":return rQ(n,r);case"ArrowRight":return rY(n,r);case"Backspace":return rZ(n,r);case"Delete":return r0(n,r);case"Home":return r1(n,r);case"End":return setTimeout(function(){return rJ(z?rz():0,0)},10);default:return!0}},r3=(n=e(function(n,r){var t,e,i,o,a,c,l,f,p,d,v,h,m,y=arguments;return s(this,function(s){switch(s.label){case 0:if(i=void 0!==(e=(t=y.length>2&&void 0!==y[2]?y[2]:{}).disableErrors)&&e,a=void 0!==(o=t.disableIsSelectingCheck)&&o,rc&&!a)return tu(),B(),rl(!1),setTimeout(function(){return r3(n,rG(),{disableErrors:i,disableIsSelectingCheck:!0})},10),[2,null];try{n.stopPropagation(),n.preventDefault()}catch(n){}if(n6)return[2,!1];if(n5(!0),l=n.key,f=n.keyCode,p=rF(r),f!=w)return[3,2];return d=p.ref,[4,new Promise(function(n){setTimeout(function(){var r,t;if((null==d||null==(t=d.current)||null==(r=t.innerText)?void 0:r.length)>=2){var e,i=u(null==d||null==(e=d.current)?void 0:e.innerText,2),o=i[0],a=i[1];d.current.innerText=a,n(o)}else n(null)},1)})];case 1:l=s.sent(),s.label=2;case 2:if(!p||r===r_.length-1)return[2,!1];if(!(z&&r>rz()+1))return[3,4];return[4,r3(n,0===rz()?0:rz()+1,{disableErrors:i})];case 3:case 5:return[2,s.sent()];case 4:if(v=p.isSpecialSymbol,h=p.maskChar,p.isReadOnly)return[2,!1];if(h!==D)return[3,6];return[4,r3(n,r+1)];case 6:if(v&&h!==l||!rR({char:l,i:r,disableErrors:i}))return[2,!1];return z&&(null==(c=rq(r))?void 0:c.length)!==0&&(m=r+1,tt({text:r_.slice().filter(function(n,t){var e=n.isCharSymbol;return t>=r&&!e}).map(function(n,r){return n.char}).join("")},m,!1)),rL(!1),rB({char:l},r),setTimeout(function(){return rY(n,r)},1),[2,!0]}})}),function(r,t){return n.apply(this,arguments)}),r4=function(n,r){switch(n.key,n.keyCode){case 65:ta(n);break;case 89:rT&&(rK(),tt({text:rT},0,!0));break;case 90:rI(rq()),rK(),tt({text:rO},0,!0)}},r6=(t=e(function(n){var r,t,e,i,o,u,c,l,f=arguments;return s(this,function(s){switch(s.label){case 0:var p,d;if(r=f.length>1&&void 0!==f[1]?f[1]:null,!nZ&&!rc)return[2,!1];if(e=n.key,i=n.ctrlKey,o=n.altKey,u=(null==(t=r_[0].ref)?void 0:t.current)||n.target,nP((p=a({},n),d=d={target:u},Object.getOwnPropertyDescriptors?Object.defineProperties(p,Object.getOwnPropertyDescriptors(d)):(function(n,r){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(n);t.push.apply(t,e)}return t})(Object(d)).forEach(function(n){Object.defineProperty(p,n,Object.getOwnPropertyDescriptor(d,n))}),p),r),k.includes(e)&&_.includes(e))return[2,!0];if(n7(!1),ra(),i||o)return k.includes(e)||r4(n,r),[2,!0];if(n.preventDefault(),n.stopPropagation(),!k.includes(e))return[3,1];return l=r2(n,r),[3,3];case 1:return[4,r3(n,r)];case 2:l=s.sent(),s.label=3;case 3:return c=l,nl&&!c&&null!==r&&rt(!0),[2]}})}),function(n){return t.apply(this,arguments)}),r5=function(n,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},e=t.ignoreIsSelecting;try{n.stopPropagation(),n.preventDefault()}catch(n){}if(rc&&(rf.length||E().length)&&!(void 0!==e&&e))return!1;n0(!0),2===n.detail&&ta(n),"function"==typeof r&&r(n)},r8=function(n,r){if(2==n.detail)return ta(n),!0;var t=rF(r),e=t.char;t.maskChar,z&&!rR({char:e,i:r,disableErrors:!0})&&(r=rz()),rl(!1),B(),setTimeout(function(){return r5(n,function(){return rJ(r,0)},{ignoreIsSelecting:!0})},50)},r9=function(n){n.stopPropagation(),n.preventDefault(),nJ||rc||(r5(n),rJ(rz(),0))},r7=function(n){if(!nJ)return!1;rl(!0);var r=n.clientX;null===rv&&rh(r),rb(r)},tn=function(n){nZ&&nw(),n0(!1)},tr=function(n,r){var t=rF(r);if(!t)return!1;var e=t.isSpecialSymbol;if(S(t.ref.current,0),(-1===Q||r<Q)&&e&&r<r_.length-1)return tr(n,r+1),!1;nZ||nk(n),n0(!0)},tt=function(n,r){var t,e,i,o=!(arguments.length>2)||void 0===arguments[2]||arguments[2];try{n.stopPropagation(),n.preventDefault()}catch(n){}rl(!1),B();var a=(null==(t=(null==n?void 0:n.clipboardData)||(null==(e=window)?void 0:e.clipboardData))?void 0:t.getData("text/plain"))||(null==n||null==(i=n.clipboardData)?void 0:i.getData("Text"))||n.text;if(!a)return!1;var c=[];if(z&&(null==n?void 0:n.type)==="paste"){var l=r+parseInt(null==a?void 0:a.length,10);tt({text:r_.slice().filter(function(n,t){var e=n.isCharSymbol;return t>=r&&!e}).map(function(n,r){return n.char}).join("")},l,!1)}a.split("").filter(function(n){return T(n)||A(n)}).map(function(n,t){for(var e=function(r){var e=rF(r);return e?(e.char,e.maskChar,e.isSpecialSymbol,!rR({char:n,i:r,disableErrors:!0})||c.includes(r))?"continue":void(o=!0,a=!0,c.push(r),nx?setTimeout(function(){rB({char:n},r)},t*nO):rB({char:n},r)):"continue"},i=r+t,o=!1,a=!1,u=i;u<r_.length&&!o;++u)e(u);return{char:n,isValid:a}});var s=u(c.reverse(),1)[0];return o&&rJ(s+1,r),s},te=function(n,r){try{n.stopPropagation(),n.preventDefault()}catch(n){}j(E())},ti=function(n,r){rN||(rj(rq()),rL(!0));try{n.stopPropagation(),n.preventDefault()}catch(n){}j(E()),tu(),rl(!1),rJ(r,0)},to=function(n,r){var t=n.key;return!_.includes(t)&&k.includes(t)&&(n.preventDefault(),n.stopPropagation()),"function"==typeof r&&r(n),!1},ta=function(n){n.preventDefault(),n.stopPropagation(),rl(!0),rh(-1),rb(-1),K(nq.current),rp(E())},tu=function(){var n,r=rG();if(null==r)return!1;var t=E().length+r;if(B(),z&&(null==(n=rq(t+1))?void 0:n.length)!==0){var e=r_.slice().filter(function(n,e){var i=n.isSpecialSymbol,o=n.isCharSymbol;return(-1===Q||!(e>Q-1))&&(e<r||e>=t)&&!i&&!o}).map(function(n,r){return n.char}).join("");rK(),tt({text:e},0,!1),rJ(r)}else for(var i=r;i<t;++i)rB({char:""},i);return rJ(r,-1),!0};v(function(){n6&&setTimeout(function(){return n5(!1)},20)},[n6]),v(function(){rx([]),n$(!1),U||(U=""),U.concat(" ").split("").map(function(n,r,t){rM({char:n,i:t,data:{id:r,isReadOnly:r===U.length}}),(null==nu?void 0:nu[r])&&rB({char:nu[r]},r)}),n$(!0)},[U]),v(function(){nu!==rq()&&n3(!1)},[nu]),v(function(){if(nW&&!n2&&nu!==rq()){if(nu&&""!==nu){var n=0;r_.map(function(r,t){if(r.isSpecialSymbol)return!1;for(var e=nu[n],i=(null==U?void 0:U.length)||0;i&&rU({char:nu[n]});)i--,e=nu[++n];rR({char:e,i:t,disableErrors:!0})&&rB({char:e},t),++n})}n3(!0)}},[nW,nu,n2]),v(function(){n2&&rj(rq())},[n2]),v(function(){nZ||rp("")},[nZ]),v(function(){Z&&nW&&rJ(0,-1)},[Z,nW]),v(function(){if(nW&&nZ){n7(!1),ra();var n=[rq(),r$({replaceSpace:!0})];nX&&n.reverse(),nb.apply(void 0,c(n))}},[r_,nW]),v(function(){rr&&setTimeout(function(){return rt(!1)},nf)},[rr]),v(function(){rc||(rp(""),B(),rh(null),rb(null)),!nJ&&rc&&document.addEventListener("keydown",function(n){var r;return r=function(){return r6(n)},rS(function(n){return c(n).concat([{fn:r,dt:Date.now()}])})},{once:!0}),nJ||!rc||E().length||rl(!1)},[rc,nJ]),v(function(){document.addEventListener("mouseup",function(){nQ(function(n){return n&&rp(E()),!1})})},[]),v(function(){n7(""!==nm),ro(""===nm?nV.default:nm)},[nm,n9]);var tc=function(n,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",e=n.char,i=n.ref,o=n.maskChar,a=n.isSpecialSymbol,u=rF(r-1);return r===r_.length-1&&rc?f("span",{style:{width:"1px"}}):f("span",{tabIndex:0===r?0:-1,"attr-char-id":r,className:"\n input-mask_value_item\n ".concat(t,"\n ").concat(I(n.maskChar)?"input-mask_value_item--digit":"","\n ").concat(N(n.maskChar)?"input-mask_value_item--letter":"","\n ").concat(n.isSpecialSymbol?"input-mask_value_item--spec":"","\n "),onClick:function(n){return r8(n,r)},onFocus:function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];tr&&tr.apply(void 0,c(r))},onBlur:tn,onKeyPress:to,onKeyDown:function(n){return r6(n,r)},onChange:to,contentEditable:!rc,inputMode:I(r!==r_.length-1?o:null==u?void 0:u.maskChar)?"numeric":"text",suppressContentEditableWarning:!0,onPaste:function(n){return tt(n,r)},onCopy:function(n){return te(n,r)},onCut:function(n){return ti(n,r)},ref:i,onDoubleClick:function(n){n.stopPropagation(),n.preventDefault(),rl(!0),setTimeout(function(){return ta(n,r)},50)},onMouseDown:function(n){return to(n,function(){return nQ(!0)})},onMouseMove:function(n){return to(n,r7)},children:!nZ&&nH&&0===rq().length?D:a?o:""===e?rW(r):e},r)};return p("div",{"data-testid":void 0===nF?"input-mask":nF,className:y("input-mask_wrapper",void 0===nd?"":nd,{disabled:$},{"input-mask_error":n9},{"input-mask_focus":nZ},{"input-mask_blink-error":rr}),onClick:r9,onBlur:tn,children:[p("div",{className:"\n input-mask\n ".concat(n9?"input-mask_error":"","\n ").concat(nZ?"input-mask_focus":"","\n ").concat(rr?"input-mask_blink-error":"","\n "),onMouseDown:function(n){return to(n,function(){return nQ(!0)})},onMouseMove:function(n){return to(n,r7)},onClick:r9,onBlur:tn,children:[nE&&void 0!==nM&&nM&&f("div",{className:"input-mask_hint input-mask_hint--left",children:f(g,{hint:nI,className:nN,side:nK})}),no&&ni&&f("div",{className:"input-mask_icon input-mask_icon--left",children:ne}),f("div",{className:"input-mask_value",ref:nq,onKeyUp:to,onKeyDown:function(n){return to(n,r6)},onKeyPress:to,onBlur:tn,onClick:r9,children:r_.map(function(n,r){var t=n.char;return n.isSpecialSymbol?tc(n,r,"input-mask_value_item_spec-char"):""===t?tc(n,r,"input-mask_value_item_mask-char"):tc(n,r,"input-mask_value_item_value-char")})}),nn&&f("div",{className:"input-mask_clear",children:f(b,{onClick:function(n){n.stopPropagation(),n.preventDefault(),rK(),r1(null,0)}})}),na&&ni&&f("div",{className:"input-mask_icon input-mask_icon--right",children:ne}),nE&&(void 0===nL||nL)&&f("div",{className:"input-mask_hint input-mask_hint--right",children:f(g,{hint:nI,className:nN,side:nK})})]}),void 0!==np&&np&&ri&&f("div",{className:"input-mask_error-text",children:ri})]})}
|