@skbkontur/react-ui 6.1.4 → 6.1.6-00fed.0
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/CHANGELOG.md +11 -0
- package/components/Button/Button.classes.d.ts +8 -0
- package/components/Button/Button.classes.js +10 -0
- package/components/Button/Button.classes.js.map +1 -0
- package/components/Button/Button.mixins.js +1 -1
- package/components/Button/Button.mixins.js.map +1 -1
- package/components/Button/Button.styles.d.ts +2 -8
- package/components/Button/Button.styles.js +3 -9
- package/components/Button/Button.styles.js.map +1 -1
- package/components/Calendar/Calendar.d.ts +2 -8
- package/components/Calendar/Calendar.js +2 -7
- package/components/Calendar/Calendar.js.map +1 -1
- package/components/Calendar/CalendarDay.js +1 -1
- package/components/Calendar/CalendarDay.js.map +1 -1
- package/components/Calendar/MonthView.js +1 -1
- package/components/Calendar/MonthView.js.map +1 -1
- package/components/Calendar/MonthViewModel.js +1 -2
- package/components/Calendar/MonthViewModel.js.map +1 -1
- package/components/Calendar/tids.d.ts +7 -0
- package/components/Calendar/tids.js +8 -0
- package/components/Calendar/tids.js.map +1 -0
- package/components/FileUploader/FileUploaderFile.d.ts +1 -1
- package/components/FileUploader/FileUploaderFile.js +1 -1
- package/components/FileUploader/FileUploaderFile.js.map +1 -1
- package/components/FxInput/FxInput.d.ts +1 -1
- package/components/FxInput/FxInput.js.map +1 -1
- package/components/MaskedInput/MaskedInput.d.ts +6 -2
- package/components/MaskedInput/MaskedInput.js +10 -126
- package/components/MaskedInput/MaskedInput.js.map +1 -1
- package/components/MaskedInput/MaskedInputLegacy.d.ts +3 -0
- package/components/MaskedInput/MaskedInputLegacy.js +142 -0
- package/components/MaskedInput/MaskedInputLegacy.js.map +1 -0
- package/components/MaskedInput/index.d.ts +1 -0
- package/components/MaskedInput/index.js +1 -0
- package/components/MaskedInput/index.js.map +1 -1
- package/components/MaskedInputV2/MaskedInputV2.d.ts +62 -0
- package/components/MaskedInputV2/MaskedInputV2.helpers.d.ts +9 -0
- package/components/MaskedInputV2/MaskedInputV2.helpers.js +17 -0
- package/components/MaskedInputV2/MaskedInputV2.helpers.js.map +1 -0
- package/components/MaskedInputV2/MaskedInputV2.js +307 -0
- package/components/MaskedInputV2/MaskedInputV2.js.map +1 -0
- package/components/MaskedInputV2/MaskedInputV2.phone.d.ts +28 -0
- package/components/MaskedInputV2/MaskedInputV2.phone.js +38 -0
- package/components/MaskedInputV2/MaskedInputV2.phone.js.map +1 -0
- package/components/MaskedInputV2/MaskedInputV2.styles.d.ts +7 -0
- package/components/MaskedInputV2/MaskedInputV2.styles.js +19 -0
- package/components/MaskedInputV2/MaskedInputV2.styles.js.map +1 -0
- package/components/MaskedInputV2/index.d.ts +2 -0
- package/components/MaskedInputV2/index.js +3 -0
- package/components/MaskedInputV2/index.js.map +1 -0
- package/components/MaskedInputV2/internal/MaskOverlay.d.ts +19 -0
- package/components/MaskedInputV2/internal/MaskOverlay.js +54 -0
- package/components/MaskedInputV2/internal/MaskOverlay.js.map +1 -0
- package/components/MaskedInputV2/internal/MaskedCore.d.ts +8 -0
- package/components/MaskedInputV2/internal/MaskedCore.js +186 -0
- package/components/MaskedInputV2/internal/MaskedCore.js.map +1 -0
- package/components/MaskedInputV2/internal/MaskedCore.types.d.ts +37 -0
- package/components/MaskedInputV2/internal/MaskedCore.types.js +2 -0
- package/components/MaskedInputV2/internal/MaskedCore.types.js.map +1 -0
- package/components/MaskedInputV2/internal/MaskedInternal.styles.d.ts +15 -0
- package/components/MaskedInputV2/internal/MaskedInternal.styles.js +34 -0
- package/components/MaskedInputV2/internal/MaskedInternal.styles.js.map +1 -0
- package/components/MaskedInputV2/internal/buildSlotMap.d.ts +11 -0
- package/components/MaskedInputV2/internal/buildSlotMap.js +37 -0
- package/components/MaskedInputV2/internal/buildSlotMap.js.map +1 -0
- package/components/MaskedInputV2/internal/computeMaskAlignPadding.d.ts +6 -0
- package/components/MaskedInputV2/internal/computeMaskAlignPadding.js +47 -0
- package/components/MaskedInputV2/internal/computeMaskAlignPadding.js.map +1 -0
- package/components/MaskedInputV2/internal/computePasteMaskedCursor.d.ts +3 -0
- package/components/MaskedInputV2/internal/computePasteMaskedCursor.js +11 -0
- package/components/MaskedInputV2/internal/computePasteMaskedCursor.js.map +1 -0
- package/components/MaskedInputV2/internal/extractRaw.d.ts +10 -0
- package/components/MaskedInputV2/internal/extractRaw.js +16 -0
- package/components/MaskedInputV2/internal/extractRaw.js.map +1 -0
- package/components/MaskedInputV2/internal/findNearestRawLeft.d.ts +10 -0
- package/components/MaskedInputV2/internal/findNearestRawLeft.js +18 -0
- package/components/MaskedInputV2/internal/findNearestRawLeft.js.map +1 -0
- package/components/MaskedInputV2/internal/helpers.d.ts +8 -0
- package/components/MaskedInputV2/internal/helpers.js +9 -0
- package/components/MaskedInputV2/internal/helpers.js.map +1 -0
- package/components/MaskedInputV2/internal/maskedCoreClipboard.d.ts +37 -0
- package/components/MaskedInputV2/internal/maskedCoreClipboard.js +52 -0
- package/components/MaskedInputV2/internal/maskedCoreClipboard.js.map +1 -0
- package/components/MaskedInputV2/internal/maskedCoreDeletion.d.ts +28 -0
- package/components/MaskedInputV2/internal/maskedCoreDeletion.js +70 -0
- package/components/MaskedInputV2/internal/maskedCoreDeletion.js.map +1 -0
- package/components/MaskedInputV2/internal/maskedCoreInputChange.d.ts +38 -0
- package/components/MaskedInputV2/internal/maskedCoreInputChange.js +49 -0
- package/components/MaskedInputV2/internal/maskedCoreInputChange.js.map +1 -0
- package/components/MaskedInputV2/internal/maskedCoreNavigation.d.ts +13 -0
- package/components/MaskedInputV2/internal/maskedCoreNavigation.js +79 -0
- package/components/MaskedInputV2/internal/maskedCoreNavigation.js.map +1 -0
- package/components/MaskedInputV2/internal/measureInputTextWidth.d.ts +2 -0
- package/components/MaskedInputV2/internal/measureInputTextWidth.js +30 -0
- package/components/MaskedInputV2/internal/measureInputTextWidth.js.map +1 -0
- package/components/MaskedInputV2/internal/setMaskInputSelectionRange.d.ts +2 -0
- package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js +25 -0
- package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js.map +1 -0
- package/components/MaskedInputV2/internal/showOverlay.d.ts +3 -0
- package/components/MaskedInputV2/internal/showOverlay.js +16 -0
- package/components/MaskedInputV2/internal/showOverlay.js.map +1 -0
- package/components/MaskedInputV2/internal/stripMaskChars.d.ts +11 -0
- package/components/MaskedInputV2/internal/stripMaskChars.js +20 -0
- package/components/MaskedInputV2/internal/stripMaskChars.js.map +1 -0
- package/components/MaskedInputV2/internal/types.d.ts +74 -0
- package/components/MaskedInputV2/internal/types.js +2 -0
- package/components/MaskedInputV2/internal/types.js.map +1 -0
- package/components/MaskedInputV2/internal/useInputOverflow.d.ts +4 -0
- package/components/MaskedInputV2/internal/useInputOverflow.js +34 -0
- package/components/MaskedInputV2/internal/useInputOverflow.js.map +1 -0
- package/components/MaskedInputV2/internal/useMaskAlignPadding.d.ts +2 -0
- package/components/MaskedInputV2/internal/useMaskAlignPadding.js +33 -0
- package/components/MaskedInputV2/internal/useMaskAlignPadding.js.map +1 -0
- package/components/MaskedInputV2/internal/useMaskEngine.d.ts +42 -0
- package/components/MaskedInputV2/internal/useMaskEngine.js +128 -0
- package/components/MaskedInputV2/internal/useMaskEngine.js.map +1 -0
- package/components/MaskedInputV2/internal/useMaskedCoreHandlers.d.ts +34 -0
- package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js +335 -0
- package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.d.ts +16 -0
- package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js +59 -0
- package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.d.ts +20 -0
- package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js +106 -0
- package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/controls/input-history.d.ts +17 -0
- package/components/MaskedInputV2/react-imask/imask/controls/input-history.js +49 -0
- package/components/MaskedInputV2/react-imask/imask/controls/input-history.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/controls/input.d.ts +95 -0
- package/components/MaskedInputV2/react-imask/imask/controls/input.js +420 -0
- package/components/MaskedInputV2/react-imask/imask/controls/input.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/controls/mask-element.d.ts +30 -0
- package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js +59 -0
- package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/core/action-details.d.ts +30 -0
- package/components/MaskedInputV2/react-imask/imask/core/action-details.js +100 -0
- package/components/MaskedInputV2/react-imask/imask/core/action-details.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/core/change-details.d.ts +20 -0
- package/components/MaskedInputV2/react-imask/imask/core/change-details.js +46 -0
- package/components/MaskedInputV2/react-imask/imask/core/change-details.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.d.ts +21 -0
- package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js +52 -0
- package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/core/holder.d.ts +34 -0
- package/components/MaskedInputV2/react-imask/imask/core/holder.js +38 -0
- package/components/MaskedInputV2/react-imask/imask/core/holder.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/core/tail-details.d.ts +20 -0
- package/components/MaskedInputV2/react-imask/imask/core/tail-details.js +2 -0
- package/components/MaskedInputV2/react-imask/imask/core/tail-details.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/core/utils.d.ts +24 -0
- package/components/MaskedInputV2/react-imask/imask/core/utils.js +100 -0
- package/components/MaskedInputV2/react-imask/imask/core/utils.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/imask.d.ts +5 -0
- package/components/MaskedInputV2/react-imask/imask/imask.js +7 -0
- package/components/MaskedInputV2/react-imask/imask/imask.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/index.d.ts +17 -0
- package/components/MaskedInputV2/react-imask/imask/index.js +16 -0
- package/components/MaskedInputV2/react-imask/imask/index.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/base.d.ts +114 -0
- package/components/MaskedInputV2/react-imask/imask/masked/base.js +411 -0
- package/components/MaskedInputV2/react-imask/imask/masked/base.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/create.d.ts +14 -0
- package/components/MaskedInputV2/react-imask/imask/masked/create.js +11 -0
- package/components/MaskedInputV2/react-imask/imask/masked/create.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/factory.d.ts +62 -0
- package/components/MaskedInputV2/react-imask/imask/masked/factory.js +107 -0
- package/components/MaskedInputV2/react-imask/imask/masked/factory.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/pattern.d.ts +101 -0
- package/components/MaskedInputV2/react-imask/imask/masked/pattern.js +549 -0
- package/components/MaskedInputV2/react-imask/imask/masked/pattern.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.d.ts +30 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js +2 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.d.ts +20 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js +182 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.d.ts +31 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js +163 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.d.ts +42 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js +158 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.d.ts +56 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js +185 -0
- package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js.map +1 -0
- package/components/MaskedInputV2/react-imask/imask/masked/regexp.d.ts +17 -0
- package/components/MaskedInputV2/react-imask/imask/masked/regexp.js +36 -0
- package/components/MaskedInputV2/react-imask/imask/masked/regexp.js.map +1 -0
- package/components/MaskedInputV2/react-imask/index.d.ts +3 -0
- package/components/MaskedInputV2/react-imask/index.js +4 -0
- package/components/MaskedInputV2/react-imask/index.js.map +1 -0
- package/components/MaskedInputV2/react-imask/input.d.ts +8 -0
- package/components/MaskedInputV2/react-imask/input.js +35 -0
- package/components/MaskedInputV2/react-imask/input.js.map +1 -0
- package/components/MaskedInputV2/react-imask/mixin.d.ts +31 -0
- package/components/MaskedInputV2/react-imask/mixin.js +246 -0
- package/components/MaskedInputV2/react-imask/mixin.js.map +1 -0
- package/components/MenuItem/MenuItem.mixins.d.ts +1 -0
- package/components/MenuItem/MenuItem.mixins.js +6 -1
- package/components/MenuItem/MenuItem.mixins.js.map +1 -1
- package/components/MenuItem/MenuItem.styles.d.ts +2 -1
- package/components/MenuItem/MenuItem.styles.js +2 -7
- package/components/MenuItem/MenuItem.styles.js.map +1 -1
- package/components/MiniModal/MiniModal.d.ts +2 -16
- package/components/MiniModal/MiniModal.js +2 -16
- package/components/MiniModal/MiniModal.js.map +1 -1
- package/components/MiniModal/MiniModalBody.js +1 -1
- package/components/MiniModal/MiniModalBody.js.map +1 -1
- package/components/MiniModal/MiniModalFooter.js +1 -1
- package/components/MiniModal/MiniModalFooter.js.map +1 -1
- package/components/MiniModal/MiniModalHeader.js +1 -1
- package/components/MiniModal/MiniModalHeader.js.map +1 -1
- package/components/MiniModal/MiniModalIndent.js +1 -1
- package/components/MiniModal/MiniModalIndent.js.map +1 -1
- package/components/MiniModal/tids.d.ts +7 -0
- package/components/MiniModal/tids.js +8 -0
- package/components/MiniModal/tids.js.map +1 -0
- package/components/Modal/Modal.constants.d.ts +9 -0
- package/components/Modal/Modal.constants.js +10 -0
- package/components/Modal/Modal.constants.js.map +1 -0
- package/components/Modal/Modal.d.ts +2 -15
- package/components/Modal/Modal.js +2 -14
- package/components/Modal/Modal.js.map +1 -1
- package/components/Modal/ModalBody.js +1 -1
- package/components/Modal/ModalBody.js.map +1 -1
- package/components/Modal/ModalClose.js +1 -1
- package/components/Modal/ModalClose.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +3 -3
- package/components/Switcher/Switcher.js +1 -1
- package/components/Switcher/Switcher.js.map +1 -1
- package/components/Tabs/Tab.d.ts +4 -5
- package/components/Tabs/Tab.js +0 -1
- package/components/Tabs/Tab.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +2 -2
- package/components/Tabs/Tabs.js +1 -1
- package/components/Tabs/Tabs.js.map +1 -1
- package/components/Toggle/Toggle.classes.d.ts +8 -0
- package/components/Toggle/Toggle.classes.js +10 -0
- package/components/Toggle/Toggle.classes.js.map +1 -0
- package/components/Toggle/Toggle.mixins.js +1 -1
- package/components/Toggle/Toggle.mixins.js.map +1 -1
- package/components/Toggle/Toggle.styles.d.ts +2 -8
- package/components/Toggle/Toggle.styles.js +3 -9
- package/components/Toggle/Toggle.styles.js.map +1 -1
- package/components/Token/Token.d.ts +1 -1
- package/components/Token/Token.js +1 -1
- package/components/Token/Token.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +1 -1
- package/components/TokenInput/TokenInput.js +1 -1
- package/components/TokenInput/TokenInput.js.map +1 -1
- package/lib/date/InternalDateValidator.js +1 -2
- package/lib/date/InternalDateValidator.js.map +1 -1
- package/lib/events/keyboard/KeyboardEventCodes.d.ts +2 -0
- package/lib/events/keyboard/KeyboardEventCodes.js +2 -0
- package/lib/events/keyboard/KeyboardEventCodes.js.map +1 -1
- package/lib/events/keyboard/KeyboardMapKeys.js +2 -0
- package/lib/events/keyboard/KeyboardMapKeys.js.map +1 -1
- package/lib/events/keyboard/identifiers.d.ts +2 -0
- package/lib/events/keyboard/identifiers.js +6 -0
- package/lib/events/keyboard/identifiers.js.map +1 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
import { memoizeGetStyles, prefix } from '../../../lib/theming/Emotion.js';
|
|
6
|
+
export var globalClasses = prefix('masked-internal')({
|
|
7
|
+
input: 'input',
|
|
8
|
+
disabled: 'disabled',
|
|
9
|
+
selected: 'selected',
|
|
10
|
+
masked: 'masked',
|
|
11
|
+
colored: 'colored',
|
|
12
|
+
});
|
|
13
|
+
export var getStyles = memoizeGetStyles(function (_a) {
|
|
14
|
+
var css = _a.css;
|
|
15
|
+
return ({
|
|
16
|
+
input: function (t) {
|
|
17
|
+
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color-scheme: ", ";\n\n &:-internal-autofill-selected {\n background-color: ", " !important;\n background-image: none !important;\n color: ", " !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-box-shadow: 0 0 0 1000px ", " inset;\n box-shadow: 0 0 0 1000px ", " inset;\n -webkit-text-fill-color: ", " !important;\n color: ", " !important;\n /* Chrome \u0438\u043D\u0430\u0447\u0435 \u0441\u043A\u0440\u044B\u0432\u0430\u0435\u0442 caret \u043F\u0440\u0438 autofill (color/currentColor). */\n caret-color: ", " !important;\n transition:\n background-color 0s 600000s,\n color 0s 600000s !important;\n }\n\n &:disabled {\n color: ", ";\n\n &:-internal-autofill-selected {\n background-color: ", " !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-box-shadow: 0 0 0 1000px ", " inset;\n box-shadow: 0 0 0 1000px ", " inset;\n }\n }\n\n &.", " {\n color: transparent;\n -webkit-text-fill-color: transparent;\n caret-color: ", ";\n\n &::selection {\n background-color: transparent !important;\n color: transparent !important;\n -webkit-text-fill-color: transparent !important;\n }\n\n /* \u0422\u0435\u043A\u0441\u0442 \u0440\u0438\u0441\u0443\u0435\u0442 MaskOverlay; \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043F\u0440\u0438 autofill \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u043F\u0435\u0440\u0435\u0431\u0438\u0432\u0430\u0442\u044C fill-color. */\n &:-internal-autofill-selected {\n color: transparent !important;\n caret-color: ", " !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-text-fill-color: transparent !important;\n color: transparent !important;\n /* \u0411\u0435\u0437 \u044D\u0442\u043E\u0433\u043E caret \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F transparent \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043A\u0441\u0442\u043E\u043C \u0438 \u043D\u0435 \u043C\u0438\u0433\u0430\u0435\u0442. */\n caret-color: ", " !important;\n }\n }\n "], ["\n color-scheme: ", ";\n\n &:-internal-autofill-selected {\n background-color: ", " !important;\n background-image: none !important;\n color: ", " !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-box-shadow: 0 0 0 1000px ", " inset;\n box-shadow: 0 0 0 1000px ", " inset;\n -webkit-text-fill-color: ", " !important;\n color: ", " !important;\n /* Chrome \u0438\u043D\u0430\u0447\u0435 \u0441\u043A\u0440\u044B\u0432\u0430\u0435\u0442 caret \u043F\u0440\u0438 autofill (color/currentColor). */\n caret-color: ", " !important;\n transition:\n background-color 0s 600000s,\n color 0s 600000s !important;\n }\n\n &:disabled {\n color: ", ";\n\n &:-internal-autofill-selected {\n background-color: ", " !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-box-shadow: 0 0 0 1000px ", " inset;\n box-shadow: 0 0 0 1000px ", " inset;\n }\n }\n\n &.", " {\n color: transparent;\n -webkit-text-fill-color: transparent;\n caret-color: ", ";\n\n &::selection {\n background-color: transparent !important;\n color: transparent !important;\n -webkit-text-fill-color: transparent !important;\n }\n\n /* \u0422\u0435\u043A\u0441\u0442 \u0440\u0438\u0441\u0443\u0435\u0442 MaskOverlay; \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043F\u0440\u0438 autofill \u043D\u0435 \u0434\u043E\u043B\u0436\u0435\u043D \u043F\u0435\u0440\u0435\u0431\u0438\u0432\u0430\u0442\u044C fill-color. */\n &:-internal-autofill-selected {\n color: transparent !important;\n caret-color: ", " !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-text-fill-color: transparent !important;\n color: transparent !important;\n /* \u0411\u0435\u0437 \u044D\u0442\u043E\u0433\u043E caret \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F transparent \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043A\u0441\u0442\u043E\u043C \u0438 \u043D\u0435 \u043C\u0438\u0433\u0430\u0435\u0442. */\n caret-color: ", " !important;\n }\n }\n "])), t.inputColorScheme, t.inputBg, t.inputTextColor, t.inputBg, t.inputBg, t.inputTextColor, t.inputTextColor, t.inputTextColor, t.inputTextColorDisabled, t.inputDisabledBg, t.inputDisabledBg, t.inputDisabledBg, globalClasses.masked, t.inputTextColor, t.inputTextColor, t.inputTextColor);
|
|
18
|
+
},
|
|
19
|
+
overlay: function () {
|
|
20
|
+
return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n position: absolute;\n inset: 0;\n pointer-events: none;\n user-select: none;\n overflow: hidden;\n display: flex;\n align-items: center;\n z-index: 2;\n "], ["\n position: absolute;\n inset: 0;\n pointer-events: none;\n user-select: none;\n overflow: hidden;\n display: flex;\n align-items: center;\n z-index: 2;\n "])));
|
|
21
|
+
},
|
|
22
|
+
typed: function (t) {
|
|
23
|
+
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n white-space: pre;\n color: ", ";\n\n &.", " {\n color: ", ";\n }\n "], ["\n white-space: pre;\n color: ", ";\n\n &.", " {\n color: ", ";\n }\n "])), t.inputTextColor, globalClasses.disabled, t.inputTextColorDisabled);
|
|
24
|
+
},
|
|
25
|
+
mask: function (t) {
|
|
26
|
+
return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n white-space: pre;\n color: ", ";\n\n &.", " {\n color: ", ";\n }\n\n &.", " {\n color: ", ";\n }\n "], ["\n white-space: pre;\n color: ", ";\n\n &.", " {\n color: ", ";\n }\n\n &.", " {\n color: ", ";\n }\n "])), t.inputTextColor, globalClasses.colored, t.inputPlaceholderColor, globalClasses.disabled, t.inputTextColorDisabled);
|
|
27
|
+
},
|
|
28
|
+
selectedSegment: function () {
|
|
29
|
+
return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n background-color: #3390ff;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n "], ["\n background-color: #3390ff;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n "])));
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
|
34
|
+
//# sourceMappingURL=MaskedInternal.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaskedInternal.styles.js","sourceRoot":"","sources":["MaskedInternal.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAG3E,MAAM,CAAC,IAAM,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,EAAgB;QAAd,GAAG,SAAA;IAAgB,OAAA,CAAC;QAC/D,KAAK,YAAC,CAAQ;YACZ,OAAO,GAAG,+9EAAA,wBACQ,EAAkB,wEAGZ,EAAS,2EAEpB,EAAgB,kKAMU,EAAS,4CACjB,EAAS,4CACT,EAAgB,+BAClC,EAAgB,mMAEV,EAAgB,mKAOtB,EAAwB,4EAGX,EAAiB,4KAMF,EAAiB,8CACzB,EAAiB,yCAI5C,EAAoB,uGAGP,EAAgB,mlBAWd,EAAgB,iiBAShB,EAAgB,wCAGpC,KA/DiB,CAAC,CAAC,gBAAgB,EAGZ,CAAC,CAAC,OAAO,EAEpB,CAAC,CAAC,cAAc,EAMU,CAAC,CAAC,OAAO,EACjB,CAAC,CAAC,OAAO,EACT,CAAC,CAAC,cAAc,EAClC,CAAC,CAAC,cAAc,EAEV,CAAC,CAAC,cAAc,EAOtB,CAAC,CAAC,sBAAsB,EAGX,CAAC,CAAC,eAAe,EAMF,CAAC,CAAC,eAAe,EACzB,CAAC,CAAC,eAAe,EAI5C,aAAa,CAAC,MAAM,EAGP,CAAC,CAAC,cAAc,EAWd,CAAC,CAAC,cAAc,EAShB,CAAC,CAAC,cAAc,EAGnC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,GAAG,4QAAA,yMAST,KAAC;QACJ,CAAC;QACD,KAAK,YAAC,CAAQ;YACZ,OAAO,GAAG,yKAAA,0CAEC,EAAgB,eAErB,EAAsB,qBACf,EAAwB,kBAEpC,KALU,CAAC,CAAC,cAAc,EAErB,aAAa,CAAC,QAAQ,EACf,CAAC,CAAC,sBAAsB,EAEnC;QACJ,CAAC;QACD,IAAI,YAAC,CAAQ;YACX,OAAO,GAAG,0NAAA,0CAEC,EAAgB,eAErB,EAAqB,qBACd,EAAuB,wBAG9B,EAAsB,qBACf,EAAwB,kBAEpC,KATU,CAAC,CAAC,cAAc,EAErB,aAAa,CAAC,OAAO,EACd,CAAC,CAAC,qBAAqB,EAG9B,aAAa,CAAC,QAAQ,EACf,CAAC,CAAC,sBAAsB,EAEnC;QACJ,CAAC;QACD,eAAe;YACb,OAAO,GAAG,6LAAA,0HAIT,KAAC;QACJ,CAAC;KACF,CAAC;AA/G8D,CA+G9D,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles, prefix } from '../../../lib/theming/Emotion.js';\nimport type { Theme } from '../../../lib/theming/Theme.js';\n\nexport const globalClasses = prefix('masked-internal')({\n input: 'input',\n disabled: 'disabled',\n selected: 'selected',\n masked: 'masked',\n colored: 'colored',\n});\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n input(t: Theme) {\n return css`\n color-scheme: ${t.inputColorScheme};\n\n &:-internal-autofill-selected {\n background-color: ${t.inputBg} !important;\n background-image: none !important;\n color: ${t.inputTextColor} !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-box-shadow: 0 0 0 1000px ${t.inputBg} inset;\n box-shadow: 0 0 0 1000px ${t.inputBg} inset;\n -webkit-text-fill-color: ${t.inputTextColor} !important;\n color: ${t.inputTextColor} !important;\n /* Chrome иначе скрывает caret при autofill (color/currentColor). */\n caret-color: ${t.inputTextColor} !important;\n transition:\n background-color 0s 600000s,\n color 0s 600000s !important;\n }\n\n &:disabled {\n color: ${t.inputTextColorDisabled};\n\n &:-internal-autofill-selected {\n background-color: ${t.inputDisabledBg} !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-box-shadow: 0 0 0 1000px ${t.inputDisabledBg} inset;\n box-shadow: 0 0 0 1000px ${t.inputDisabledBg} inset;\n }\n }\n\n &.${globalClasses.masked} {\n color: transparent;\n -webkit-text-fill-color: transparent;\n caret-color: ${t.inputTextColor};\n\n &::selection {\n background-color: transparent !important;\n color: transparent !important;\n -webkit-text-fill-color: transparent !important;\n }\n\n /* Текст рисует MaskOverlay; браузер при autofill не должен перебивать fill-color. */\n &:-internal-autofill-selected {\n color: transparent !important;\n caret-color: ${t.inputTextColor} !important;\n }\n\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus {\n -webkit-text-fill-color: transparent !important;\n color: transparent !important;\n /* Без этого caret становится transparent вместе с текстом и не мигает. */\n caret-color: ${t.inputTextColor} !important;\n }\n }\n `;\n },\n overlay() {\n return css`\n position: absolute;\n inset: 0;\n pointer-events: none;\n user-select: none;\n overflow: hidden;\n display: flex;\n align-items: center;\n z-index: 2;\n `;\n },\n typed(t: Theme) {\n return css`\n white-space: pre;\n color: ${t.inputTextColor};\n\n &.${globalClasses.disabled} {\n color: ${t.inputTextColorDisabled};\n }\n `;\n },\n mask(t: Theme) {\n return css`\n white-space: pre;\n color: ${t.inputTextColor};\n\n &.${globalClasses.colored} {\n color: ${t.inputPlaceholderColor};\n }\n\n &.${globalClasses.disabled} {\n color: ${t.inputTextColorDisabled};\n }\n `;\n },\n selectedSegment() {\n return css`\n background-color: #3390ff;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n `;\n },\n}));\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MaskedPattern } from '../react-imask/imask/index.js';
|
|
2
|
+
import type { SlotMap } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Строит карту соответствия позиций displayValue и raw-слотов для текущей маски.
|
|
5
|
+
* Временно сбрасывает IMask в пустое состояние с `lazy: false`, чтобы получить
|
|
6
|
+
* полный шаблон с плейсхолдерами (например, `"__.__"` для `mask="99.99"`).
|
|
7
|
+
*
|
|
8
|
+
* @param imask — IMask-инстанс с настроенной маской.
|
|
9
|
+
* @returns карта пользовательских слотов и отображения masked ↔ raw.
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildSlotMap(imask: MaskedPattern): SlotMap;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Строит карту соответствия позиций displayValue и raw-слотов для текущей маски.
|
|
3
|
+
* Временно сбрасывает IMask в пустое состояние с `lazy: false`, чтобы получить
|
|
4
|
+
* полный шаблон с плейсхолдерами (например, `"__.__"` для `mask="99.99"`).
|
|
5
|
+
*
|
|
6
|
+
* @param imask — IMask-инстанс с настроенной маской.
|
|
7
|
+
* @returns карта пользовательских слотов и отображения masked ↔ raw.
|
|
8
|
+
*/
|
|
9
|
+
export function buildSlotMap(imask) {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
// Сохраняем состояние
|
|
12
|
+
var savedRaw = imask.unmaskedValue;
|
|
13
|
+
var savedLazy = (_c = (_b = (_a = imask._masked) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.lazy) !== null && _c !== void 0 ? _c : true;
|
|
14
|
+
// Получаем пустой шаблон: "_._._" для mask="99.99"
|
|
15
|
+
imask.unmaskedValue = '';
|
|
16
|
+
imask.updateOptions({ lazy: false });
|
|
17
|
+
var emptyDisplay = imask.displayValue;
|
|
18
|
+
// Восстанавливаем состояние
|
|
19
|
+
imask.unmaskedValue = savedRaw;
|
|
20
|
+
imask.updateOptions({ lazy: savedLazy });
|
|
21
|
+
var placeholderChar = imask.placeholderChar;
|
|
22
|
+
var userSlots = [];
|
|
23
|
+
var maskedToRaw = [];
|
|
24
|
+
var rawToMasked = [];
|
|
25
|
+
for (var i = 0; i < emptyDisplay.length; i++) {
|
|
26
|
+
if (emptyDisplay[i] === placeholderChar) {
|
|
27
|
+
rawToMasked.push(i);
|
|
28
|
+
maskedToRaw.push(userSlots.length);
|
|
29
|
+
userSlots.push(i);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
maskedToRaw.push(null);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { userSlots: userSlots, maskedToRaw: maskedToRaw, rawToMasked: rawToMasked };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=buildSlotMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildSlotMap.js","sourceRoot":"","sources":["buildSlotMap.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB;;IAC/C,sBAAsB;IACtB,IAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;IACrC,IAAM,SAAS,GAAG,MAAA,MAAA,MAAC,KAAa,CAAC,OAAO,0CAAE,OAAO,0CAAE,IAAI,mCAAI,IAAI,CAAC;IAEhE,mDAAmD;IACnD,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;IACzB,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,IAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAExC,4BAA4B;IAC5B,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;IAC/B,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzC,IAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAM,WAAW,GAAyB,EAAE,CAAC;IAC7C,IAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YACxC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,WAAW,aAAA,EAAE,CAAC;AACjD,CAAC","sourcesContent":["import type { MaskedPattern } from '../react-imask/imask/index.js';\nimport type { SlotMap } from './types.js';\n\n/**\n * Строит карту соответствия позиций displayValue и raw-слотов для текущей маски.\n * Временно сбрасывает IMask в пустое состояние с `lazy: false`, чтобы получить\n * полный шаблон с плейсхолдерами (например, `\"__.__\"` для `mask=\"99.99\"`).\n *\n * @param imask — IMask-инстанс с настроенной маской.\n * @returns карта пользовательских слотов и отображения masked ↔ raw.\n */\nexport function buildSlotMap(imask: MaskedPattern): SlotMap {\n // Сохраняем состояние\n const savedRaw = imask.unmaskedValue;\n const savedLazy = (imask as any)._masked?.options?.lazy ?? true;\n\n // Получаем пустой шаблон: \"_._._\" для mask=\"99.99\"\n imask.unmaskedValue = '';\n imask.updateOptions({ lazy: false });\n const emptyDisplay = imask.displayValue;\n\n // Восстанавливаем состояние\n imask.unmaskedValue = savedRaw;\n imask.updateOptions({ lazy: savedLazy });\n\n const placeholderChar = imask.placeholderChar;\n const userSlots: number[] = [];\n const maskedToRaw: Array<number | null> = [];\n const rawToMasked: number[] = [];\n\n for (let i = 0; i < emptyDisplay.length; i++) {\n if (emptyDisplay[i] === placeholderChar) {\n rawToMasked.push(i);\n maskedToRaw.push(userSlots.length);\n userSlots.push(i);\n } else {\n maskedToRaw.push(null);\n }\n }\n\n return { userSlots, maskedToRaw, rawToMasked };\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
/** Горизонтальный offset начала текста overlay относительно левого края input. */
|
|
3
|
+
export declare function measureOverlayTextStart(input: HTMLInputElement, overlayContainer: HTMLElement | null): number;
|
|
4
|
+
/** Смещение текста input влево, чтобы каретка совпала с overlay при center/right align. */
|
|
5
|
+
export declare function computeMaskAlignPadding(input: HTMLInputElement, displayValue: string, textAlign?: React.CSSProperties['textAlign'], overlayContainer?: HTMLElement | null): number;
|
|
6
|
+
export declare function needsMaskAlignPadding(textAlign?: React.CSSProperties['textAlign']): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { getOwnerGlobalObject, isBrowser } from '../../../lib/globalObject.js';
|
|
2
|
+
import { measureInputTextWidth } from './measureInputTextWidth.js';
|
|
3
|
+
/** Горизонтальный offset начала текста overlay относительно левого края input. */
|
|
4
|
+
export function measureOverlayTextStart(input, overlayContainer) {
|
|
5
|
+
if (!overlayContainer) {
|
|
6
|
+
return 0;
|
|
7
|
+
}
|
|
8
|
+
var textEl = overlayContainer.querySelector('[data-tid="masked-input-overlay"]');
|
|
9
|
+
if (!(textEl === null || textEl === void 0 ? void 0 : textEl.textContent)) {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
var globalObject = getOwnerGlobalObject(input);
|
|
13
|
+
if (!isBrowser(globalObject) || !('createRange' in globalObject.document)) {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
var range = globalObject.document.createRange();
|
|
17
|
+
range.selectNodeContents(textEl);
|
|
18
|
+
var textRect = range.getBoundingClientRect();
|
|
19
|
+
var inputRect = input.getBoundingClientRect();
|
|
20
|
+
return Math.max(0, textRect.left - inputRect.left);
|
|
21
|
+
}
|
|
22
|
+
function computeMaskAlignPaddingFromTextWidth(input, displayValue, textAlign) {
|
|
23
|
+
var textWidth = measureInputTextWidth(input, displayValue);
|
|
24
|
+
var availableWidth = input.clientWidth;
|
|
25
|
+
if (textAlign === 'center') {
|
|
26
|
+
return Math.max(0, (availableWidth - textWidth) / 2);
|
|
27
|
+
}
|
|
28
|
+
return Math.max(0, availableWidth - textWidth);
|
|
29
|
+
}
|
|
30
|
+
/** Смещение текста input влево, чтобы каретка совпала с overlay при center/right align. */
|
|
31
|
+
export function computeMaskAlignPadding(input, displayValue, textAlign, overlayContainer) {
|
|
32
|
+
if (textAlign !== 'center' && textAlign !== 'right') {
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
if (!displayValue) {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
var measuredStart = measureOverlayTextStart(input, overlayContainer !== null && overlayContainer !== void 0 ? overlayContainer : null);
|
|
39
|
+
if (measuredStart > 0) {
|
|
40
|
+
return measuredStart;
|
|
41
|
+
}
|
|
42
|
+
return computeMaskAlignPaddingFromTextWidth(input, displayValue, textAlign);
|
|
43
|
+
}
|
|
44
|
+
export function needsMaskAlignPadding(textAlign) {
|
|
45
|
+
return textAlign === 'center' || textAlign === 'right';
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=computeMaskAlignPadding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeMaskAlignPadding.js","sourceRoot":"","sources":["computeMaskAlignPadding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,kFAAkF;AAClF,MAAM,UAAU,uBAAuB,CAAC,KAAuB,EAAE,gBAAoC;IACnG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC;IACnF,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAClD,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,IAAM,QAAQ,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;IAC/C,IAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;IAEhD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,oCAAoC,CAC3C,KAAuB,EACvB,YAAoB,EACpB,SAA6B;IAE7B,IAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC;IAEzC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,uBAAuB,CACrC,KAAuB,EACvB,YAAoB,EACpB,SAA4C,EAC5C,gBAAqC;IAErC,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,IAAI,CAAC,CAAC;IAC/E,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,oCAAoC,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAA4C;IAChF,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,CAAC;AACzD,CAAC","sourcesContent":["import type React from 'react';\n\nimport { getOwnerGlobalObject, isBrowser } from '../../../lib/globalObject.js';\nimport { measureInputTextWidth } from './measureInputTextWidth.js';\n\n/** Горизонтальный offset начала текста overlay относительно левого края input. */\nexport function measureOverlayTextStart(input: HTMLInputElement, overlayContainer: HTMLElement | null): number {\n if (!overlayContainer) {\n return 0;\n }\n\n const textEl = overlayContainer.querySelector('[data-tid=\"masked-input-overlay\"]');\n if (!textEl?.textContent) {\n return 0;\n }\n\n const globalObject = getOwnerGlobalObject(input);\n if (!isBrowser(globalObject) || !('createRange' in globalObject.document)) {\n return 0;\n }\n\n const range = globalObject.document.createRange();\n range.selectNodeContents(textEl);\n const textRect = range.getBoundingClientRect();\n const inputRect = input.getBoundingClientRect();\n\n return Math.max(0, textRect.left - inputRect.left);\n}\n\nfunction computeMaskAlignPaddingFromTextWidth(\n input: HTMLInputElement,\n displayValue: string,\n textAlign: 'center' | 'right',\n): number {\n const textWidth = measureInputTextWidth(input, displayValue);\n const availableWidth = input.clientWidth;\n\n if (textAlign === 'center') {\n return Math.max(0, (availableWidth - textWidth) / 2);\n }\n\n return Math.max(0, availableWidth - textWidth);\n}\n\n/** Смещение текста input влево, чтобы каретка совпала с overlay при center/right align. */\nexport function computeMaskAlignPadding(\n input: HTMLInputElement,\n displayValue: string,\n textAlign?: React.CSSProperties['textAlign'],\n overlayContainer?: HTMLElement | null,\n): number {\n if (textAlign !== 'center' && textAlign !== 'right') {\n return 0;\n }\n\n if (!displayValue) {\n return 0;\n }\n\n const measuredStart = measureOverlayTextStart(input, overlayContainer ?? null);\n if (measuredStart > 0) {\n return measuredStart;\n }\n\n return computeMaskAlignPaddingFromTextWidth(input, displayValue, textAlign);\n}\n\nexport function needsMaskAlignPadding(textAlign?: React.CSSProperties['textAlign']): boolean {\n return textAlign === 'center' || textAlign === 'right';\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SlotMap } from './types.js';
|
|
2
|
+
/** Masked-позиция каретки после вставки в rawCursorPos. */
|
|
3
|
+
export declare function computePasteMaskedCursor(rawBefore: string, rawAfter: string, resultRaw: string, rawCursorPos: number, slotMap: SlotMap, typedLength: number): number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Masked-позиция каретки после вставки в rawCursorPos. */
|
|
2
|
+
export function computePasteMaskedCursor(rawBefore, rawAfter, resultRaw, rawCursorPos, slotMap, typedLength) {
|
|
3
|
+
var _a;
|
|
4
|
+
var insertedRawLength = resultRaw.length - rawBefore.length - rawAfter.length;
|
|
5
|
+
var newRawCursorPos = rawCursorPos + Math.max(0, insertedRawLength);
|
|
6
|
+
if (newRawCursorPos >= slotMap.rawToMasked.length) {
|
|
7
|
+
return typedLength;
|
|
8
|
+
}
|
|
9
|
+
return (_a = slotMap.rawToMasked[newRawCursorPos]) !== null && _a !== void 0 ? _a : typedLength;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=computePasteMaskedCursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computePasteMaskedCursor.js","sourceRoot":"","sources":["computePasteMaskedCursor.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAC3D,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,YAAoB,EACpB,OAAgB,EAChB,WAAmB;;IAEnB,IAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChF,IAAM,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEtE,IAAI,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,MAAA,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,mCAAI,WAAW,CAAC;AAC7D,CAAC","sourcesContent":["import type { SlotMap } from './types.js';\n\n/** Masked-позиция каретки после вставки в rawCursorPos. */\nexport function computePasteMaskedCursor(\n rawBefore: string,\n rawAfter: string,\n resultRaw: string,\n rawCursorPos: number,\n slotMap: SlotMap,\n typedLength: number,\n): number {\n const insertedRawLength = resultRaw.length - rawBefore.length - rawAfter.length;\n const newRawCursorPos = rawCursorPos + Math.max(0, insertedRawLength);\n\n if (newRawCursorPos >= slotMap.rawToMasked.length) {\n return typedLength;\n }\n\n return slotMap.rawToMasked[newRawCursorPos] ?? typedLength;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MaskEngine } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Извлекает raw (unmasked) значение из masked или unmasked строки.
|
|
4
|
+
* Принимает любой формат — IMask сам разберёт.
|
|
5
|
+
*
|
|
6
|
+
* @param value — значение из props или буфера обмена (masked/unmasked).
|
|
7
|
+
* @param engine — движок маски с IMask-инстансом.
|
|
8
|
+
* @returns строка только из пользовательских символов без литералов маски.
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractRaw(value: string | number | null | undefined, engine: Pick<MaskEngine, 'imask'>): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Извлекает raw (unmasked) значение из masked или unmasked строки.
|
|
3
|
+
* Принимает любой формат — IMask сам разберёт.
|
|
4
|
+
*
|
|
5
|
+
* @param value — значение из props или буфера обмена (masked/unmasked).
|
|
6
|
+
* @param engine — движок маски с IMask-инстансом.
|
|
7
|
+
* @returns строка только из пользовательских символов без литералов маски.
|
|
8
|
+
*/
|
|
9
|
+
export function extractRaw(value, engine) {
|
|
10
|
+
if (value === null || value === undefined || value === '') {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
engine.imask.value = String(value);
|
|
14
|
+
return engine.imask.rawInputValue;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=extractRaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractRaw.js","sourceRoot":"","sources":["extractRaw.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAyC,EAAE,MAAiC;IACrG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;AACpC,CAAC","sourcesContent":["import type { MaskEngine } from './types.js';\n\n/**\n * Извлекает raw (unmasked) значение из masked или unmasked строки.\n * Принимает любой формат — IMask сам разберёт.\n *\n * @param value — значение из props или буфера обмена (masked/unmasked).\n * @param engine — движок маски с IMask-инстансом.\n * @returns строка только из пользовательских символов без литералов маски.\n */\nexport function extractRaw(value: string | number | null | undefined, engine: Pick<MaskEngine, 'imask'>): string {\n if (value === null || value === undefined || value === '') {\n return '';\n }\n engine.imask.value = String(value);\n return engine.imask.rawInputValue;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SlotMap } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Для позиции курсора на фиксированном символе маски ищет позицию вставки
|
|
4
|
+
* после ближайшего пользовательского слота слева.
|
|
5
|
+
*
|
|
6
|
+
* @param maskedPos — позиция курсора в displayValue.
|
|
7
|
+
* @param slotMap — карта соответствия позиций маски и raw-слотов.
|
|
8
|
+
* @returns индекс в raw для вставки; `0`, если слева нет пользовательских слотов.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findNearestRawLeft(maskedPos: number, slotMap: SlotMap): number;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Для позиции курсора на фиксированном символе маски ищет позицию вставки
|
|
3
|
+
* после ближайшего пользовательского слота слева.
|
|
4
|
+
*
|
|
5
|
+
* @param maskedPos — позиция курсора в displayValue.
|
|
6
|
+
* @param slotMap — карта соответствия позиций маски и raw-слотов.
|
|
7
|
+
* @returns индекс в raw для вставки; `0`, если слева нет пользовательских слотов.
|
|
8
|
+
*/
|
|
9
|
+
export function findNearestRawLeft(maskedPos, slotMap) {
|
|
10
|
+
for (var i = maskedPos - 1; i >= 0; i--) {
|
|
11
|
+
var raw = slotMap.maskedToRaw[i];
|
|
12
|
+
if (raw !== null && raw !== undefined) {
|
|
13
|
+
return raw + 1;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=findNearestRawLeft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findNearestRawLeft.js","sourceRoot":"","sources":["findNearestRawLeft.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,OAAgB;IACpE,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC","sourcesContent":["import type { SlotMap } from './types.js';\n\n/**\n * Для позиции курсора на фиксированном символе маски ищет позицию вставки\n * после ближайшего пользовательского слота слева.\n *\n * @param maskedPos — позиция курсора в displayValue.\n * @param slotMap — карта соответствия позиций маски и raw-слотов.\n * @returns индекс в raw для вставки; `0`, если слева нет пользовательских слотов.\n */\nexport function findNearestRawLeft(maskedPos: number, slotMap: SlotMap): number {\n for (let i = maskedPos - 1; i >= 0; i--) {\n const raw = slotMap.maskedToRaw[i];\n if (raw !== null && raw !== undefined) {\n return raw + 1;\n }\n }\n return 0;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Re-export утилит работы с маской из отдельных модулей. */
|
|
2
|
+
export { buildSlotMap } from './buildSlotMap.js';
|
|
3
|
+
export { computeMaskAlignPadding, needsMaskAlignPadding } from './computeMaskAlignPadding.js';
|
|
4
|
+
export { computePasteMaskedCursor } from './computePasteMaskedCursor.js';
|
|
5
|
+
export { extractRaw } from './extractRaw.js';
|
|
6
|
+
export { findNearestRawLeft } from './findNearestRawLeft.js';
|
|
7
|
+
export { getShowOverlay } from './showOverlay.js';
|
|
8
|
+
export { stripMaskChars } from './stripMaskChars.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Re-export утилит работы с маской из отдельных модулей. */
|
|
2
|
+
export { buildSlotMap } from './buildSlotMap.js';
|
|
3
|
+
export { computeMaskAlignPadding, needsMaskAlignPadding } from './computeMaskAlignPadding.js';
|
|
4
|
+
export { computePasteMaskedCursor } from './computePasteMaskedCursor.js';
|
|
5
|
+
export { extractRaw } from './extractRaw.js';
|
|
6
|
+
export { findNearestRawLeft } from './findNearestRawLeft.js';
|
|
7
|
+
export { getShowOverlay } from './showOverlay.js';
|
|
8
|
+
export { stripMaskChars } from './stripMaskChars.js';
|
|
9
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["helpers.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["/** Re-export утилит работы с маской из отдельных модулей. */\nexport { buildSlotMap } from './buildSlotMap.js';\nexport { computeMaskAlignPadding, needsMaskAlignPadding } from './computeMaskAlignPadding.js';\nexport { computePasteMaskedCursor } from './computePasteMaskedCursor.js';\nexport { extractRaw } from './extractRaw.js';\nexport { findNearestRawLeft } from './findNearestRawLeft.js';\nexport { getShowOverlay } from './showOverlay.js';\nexport { stripMaskChars } from './stripMaskChars.js';\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SlotMap } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Возвращает текст для буфера обмена при copy/cut.
|
|
4
|
+
* В отличие от raw, включает литералы маски из displayValue.
|
|
5
|
+
*
|
|
6
|
+
* @param displayValue — полное отображаемое значение маски.
|
|
7
|
+
* @param start — начало выделения в displayValue.
|
|
8
|
+
* @param end — конец выделения в displayValue.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMaskedCopyText(displayValue: string, start: number, end: number): string;
|
|
11
|
+
/** Диапазон пользовательских слотов, попавших в выделение displayValue. */
|
|
12
|
+
export interface SelectionRawRange {
|
|
13
|
+
rawStart: number;
|
|
14
|
+
rawEnd: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Находит raw-диапазон `[rawStart, rawEnd)` для выделения в displayValue.
|
|
18
|
+
* Сканирует весь `[start, end)` — край на литерале маски не должен обнулять диапазон.
|
|
19
|
+
*
|
|
20
|
+
* @returns `null`, если в выделении нет пользовательских слотов.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getSelectionRawRange(start: number, end: number, slotMap: SlotMap): SelectionRawRange | null;
|
|
23
|
+
/** Результат cut: новое raw и позиция курсора. */
|
|
24
|
+
export interface MaskedCutResult {
|
|
25
|
+
newRaw: string;
|
|
26
|
+
cursorPos: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Удаляет из raw пользовательские символы, попавшие в выделение displayValue.
|
|
30
|
+
*
|
|
31
|
+
* @param start — начало выделения в displayValue.
|
|
32
|
+
* @param end — конец выделения в displayValue.
|
|
33
|
+
* @param currentRaw — текущее raw-значение.
|
|
34
|
+
* @param slotMap — карта слотов маски.
|
|
35
|
+
* @returns новое raw и позицию курсора после cut.
|
|
36
|
+
*/
|
|
37
|
+
export declare function computeMaskedCut(start: number, end: number, currentRaw: string, slotMap: SlotMap): MaskedCutResult;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Возвращает текст для буфера обмена при copy/cut.
|
|
3
|
+
* В отличие от raw, включает литералы маски из displayValue.
|
|
4
|
+
*
|
|
5
|
+
* @param displayValue — полное отображаемое значение маски.
|
|
6
|
+
* @param start — начало выделения в displayValue.
|
|
7
|
+
* @param end — конец выделения в displayValue.
|
|
8
|
+
*/
|
|
9
|
+
export function getMaskedCopyText(displayValue, start, end) {
|
|
10
|
+
return displayValue.slice(start, end);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Находит raw-диапазон `[rawStart, rawEnd)` для выделения в displayValue.
|
|
14
|
+
* Сканирует весь `[start, end)` — край на литерале маски не должен обнулять диапазон.
|
|
15
|
+
*
|
|
16
|
+
* @returns `null`, если в выделении нет пользовательских слотов.
|
|
17
|
+
*/
|
|
18
|
+
export function getSelectionRawRange(start, end, slotMap) {
|
|
19
|
+
var rawStart = Infinity;
|
|
20
|
+
var rawEnd = -1;
|
|
21
|
+
for (var i = start; i < end; i++) {
|
|
22
|
+
var rawPos = slotMap.maskedToRaw[i];
|
|
23
|
+
if (rawPos !== null && rawPos !== undefined) {
|
|
24
|
+
rawStart = Math.min(rawStart, rawPos);
|
|
25
|
+
rawEnd = Math.max(rawEnd, rawPos + 1);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (rawEnd === -1) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return { rawStart: rawStart, rawEnd: rawEnd };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Удаляет из raw пользовательские символы, попавшие в выделение displayValue.
|
|
35
|
+
*
|
|
36
|
+
* @param start — начало выделения в displayValue.
|
|
37
|
+
* @param end — конец выделения в displayValue.
|
|
38
|
+
* @param currentRaw — текущее raw-значение.
|
|
39
|
+
* @param slotMap — карта слотов маски.
|
|
40
|
+
* @returns новое raw и позицию курсора после cut.
|
|
41
|
+
*/
|
|
42
|
+
export function computeMaskedCut(start, end, currentRaw, slotMap) {
|
|
43
|
+
var _a;
|
|
44
|
+
var range = getSelectionRawRange(start, end, slotMap);
|
|
45
|
+
if (!range) {
|
|
46
|
+
return { newRaw: currentRaw, cursorPos: start };
|
|
47
|
+
}
|
|
48
|
+
var newRaw = currentRaw.slice(0, range.rawStart) + currentRaw.slice(range.rawEnd);
|
|
49
|
+
var cursorPos = (_a = slotMap.rawToMasked[range.rawStart]) !== null && _a !== void 0 ? _a : start;
|
|
50
|
+
return { newRaw: newRaw, cursorPos: cursorPos };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=maskedCoreClipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maskedCoreClipboard.js","sourceRoot":"","sources":["maskedCoreClipboard.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,KAAa,EAAE,GAAW;IAChF,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,GAAW,EAAE,OAAgB;IAC/E,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,QAAQ,UAAA,EAAE,MAAM,QAAA,EAAE,CAAC;AAC9B,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,GAAW,EAAE,UAAkB,EAAE,OAAgB;;IAC/F,IAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpF,IAAM,SAAS,GAAG,MAAA,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,mCAAI,KAAK,CAAC;IAE/D,OAAO,EAAE,MAAM,QAAA,EAAE,SAAS,WAAA,EAAE,CAAC;AAC/B,CAAC","sourcesContent":["import type { SlotMap } from './types.js';\n\n/**\n * Возвращает текст для буфера обмена при copy/cut.\n * В отличие от raw, включает литералы маски из displayValue.\n *\n * @param displayValue — полное отображаемое значение маски.\n * @param start — начало выделения в displayValue.\n * @param end — конец выделения в displayValue.\n */\nexport function getMaskedCopyText(displayValue: string, start: number, end: number): string {\n return displayValue.slice(start, end);\n}\n\n/** Диапазон пользовательских слотов, попавших в выделение displayValue. */\nexport interface SelectionRawRange {\n rawStart: number;\n rawEnd: number;\n}\n\n/**\n * Находит raw-диапазон `[rawStart, rawEnd)` для выделения в displayValue.\n * Сканирует весь `[start, end)` — край на литерале маски не должен обнулять диапазон.\n *\n * @returns `null`, если в выделении нет пользовательских слотов.\n */\nexport function getSelectionRawRange(start: number, end: number, slotMap: SlotMap): SelectionRawRange | null {\n let rawStart = Infinity;\n let rawEnd = -1;\n\n for (let i = start; i < end; i++) {\n const rawPos = slotMap.maskedToRaw[i];\n if (rawPos !== null && rawPos !== undefined) {\n rawStart = Math.min(rawStart, rawPos);\n rawEnd = Math.max(rawEnd, rawPos + 1);\n }\n }\n\n if (rawEnd === -1) {\n return null;\n }\n\n return { rawStart, rawEnd };\n}\n\n/** Результат cut: новое raw и позиция курсора. */\nexport interface MaskedCutResult {\n newRaw: string;\n cursorPos: number;\n}\n\n/**\n * Удаляет из raw пользовательские символы, попавшие в выделение displayValue.\n *\n * @param start — начало выделения в displayValue.\n * @param end — конец выделения в displayValue.\n * @param currentRaw — текущее raw-значение.\n * @param slotMap — карта слотов маски.\n * @returns новое raw и позицию курсора после cut.\n */\nexport function computeMaskedCut(start: number, end: number, currentRaw: string, slotMap: SlotMap): MaskedCutResult {\n const range = getSelectionRawRange(start, end, slotMap);\n if (!range) {\n return { newRaw: currentRaw, cursorPos: start };\n }\n\n const newRaw = currentRaw.slice(0, range.rawStart) + currentRaw.slice(range.rawEnd);\n const cursorPos = slotMap.rawToMasked[range.rawStart] ?? start;\n\n return { newRaw, cursorPos };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SlotMap } from './types.js';
|
|
2
|
+
/** Параметры удаления через Backspace/Delete. */
|
|
3
|
+
export interface MaskedDeletionParams {
|
|
4
|
+
/** `true` для Backspace, `false` для Delete. */
|
|
5
|
+
isBackspace: boolean;
|
|
6
|
+
/** Начало выделения в displayValue. */
|
|
7
|
+
selStart: number;
|
|
8
|
+
/** Конец выделения в displayValue. */
|
|
9
|
+
selEnd: number;
|
|
10
|
+
/** Текущее raw-значение. */
|
|
11
|
+
currentRaw: string;
|
|
12
|
+
/** Карта слотов маски. */
|
|
13
|
+
slotMap: SlotMap;
|
|
14
|
+
}
|
|
15
|
+
/** Успешный результат удаления символов маски. */
|
|
16
|
+
export interface MaskedDeletionResult {
|
|
17
|
+
/** Raw после удаления. */
|
|
18
|
+
newRaw: string;
|
|
19
|
+
/** Позиция курсора в displayValue после удаления. */
|
|
20
|
+
cursorPos: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Вычисляет raw и позицию курсора после Backspace/Delete с учётом фиксированных символов маски.
|
|
24
|
+
*
|
|
25
|
+
* @param params — текущее выделение и состояние маски.
|
|
26
|
+
* @returns новое raw и cursorPos или `null`, если удалять нечего.
|
|
27
|
+
*/
|
|
28
|
+
export declare function computeMaskedDeletion(params: MaskedDeletionParams): MaskedDeletionResult | null;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Вычисляет raw и позицию курсора после Backspace/Delete с учётом фиксированных символов маски.
|
|
3
|
+
*
|
|
4
|
+
* @param params — текущее выделение и состояние маски.
|
|
5
|
+
* @returns новое raw и cursorPos или `null`, если удалять нечего.
|
|
6
|
+
*/
|
|
7
|
+
export function computeMaskedDeletion(params) {
|
|
8
|
+
var _a, _b, _c;
|
|
9
|
+
var isBackspace = params.isBackspace, selStart = params.selStart, selEnd = params.selEnd, currentRaw = params.currentRaw, slotMap = params.slotMap;
|
|
10
|
+
var rawStart;
|
|
11
|
+
var rawEnd;
|
|
12
|
+
var cursorPos;
|
|
13
|
+
if (selStart === selEnd) {
|
|
14
|
+
if (isBackspace) {
|
|
15
|
+
var rawPos = -1;
|
|
16
|
+
for (var i = selStart - 1; i >= 0; i--) {
|
|
17
|
+
var r = slotMap.maskedToRaw[i];
|
|
18
|
+
if (r !== null && r !== undefined) {
|
|
19
|
+
rawPos = r;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (rawPos === -1 || rawPos >= currentRaw.length) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
rawStart = rawPos;
|
|
27
|
+
rawEnd = rawPos + 1;
|
|
28
|
+
cursorPos = (_a = slotMap.rawToMasked[rawPos]) !== null && _a !== void 0 ? _a : 0;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
var rawPos = -1;
|
|
32
|
+
for (var i = selStart; i < slotMap.maskedToRaw.length; i++) {
|
|
33
|
+
var r = slotMap.maskedToRaw[i];
|
|
34
|
+
if (r !== null && r !== undefined) {
|
|
35
|
+
rawPos = r;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (rawPos === -1 || rawPos >= currentRaw.length) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
rawStart = rawPos;
|
|
43
|
+
rawEnd = rawPos + 1;
|
|
44
|
+
cursorPos = (_b = slotMap.rawToMasked[rawPos]) !== null && _b !== void 0 ? _b : 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
var rStart = Infinity;
|
|
49
|
+
var rEnd = -1;
|
|
50
|
+
for (var i = selStart; i < selEnd; i++) {
|
|
51
|
+
var r = slotMap.maskedToRaw[i];
|
|
52
|
+
if (r !== null && r !== undefined) {
|
|
53
|
+
rStart = Math.min(rStart, r);
|
|
54
|
+
rEnd = Math.max(rEnd, r + 1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (rEnd === -1) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
rawStart = rStart;
|
|
61
|
+
rawEnd = rEnd;
|
|
62
|
+
cursorPos = (_c = slotMap.rawToMasked[rawStart]) !== null && _c !== void 0 ? _c : selStart;
|
|
63
|
+
}
|
|
64
|
+
var newRaw = currentRaw.slice(0, rawStart) + currentRaw.slice(rawEnd);
|
|
65
|
+
if (newRaw === currentRaw) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return { newRaw: newRaw, cursorPos: cursorPos };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=maskedCoreDeletion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maskedCoreDeletion.js","sourceRoot":"","sources":["maskedCoreDeletion.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA4B;;IACxD,IAAA,WAAW,GAA4C,MAAM,YAAlD,EAAE,QAAQ,GAAkC,MAAM,SAAxC,EAAE,MAAM,GAA0B,MAAM,OAAhC,EAAE,UAAU,GAAc,MAAM,WAApB,EAAE,OAAO,GAAK,MAAM,QAAX,CAAY;IAEtE,IAAI,QAAgB,CAAC;IACrB,IAAI,MAAc,CAAC;IACnB,IAAI,SAAiB,CAAC;IAEtB,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,IAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBAClC,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC;YAClB,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;YACpB,SAAS,GAAG,MAAA,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3D,IAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBAClC,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC;YAClB,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;YACpB,SAAS,GAAG,MAAA,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,MAAM,CAAC;QAClB,MAAM,GAAG,IAAI,CAAC;QACd,SAAS,GAAG,MAAA,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,mCAAI,QAAQ,CAAC;IACxD,CAAC;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,QAAA,EAAE,SAAS,WAAA,EAAE,CAAC;AAC/B,CAAC","sourcesContent":["import type { SlotMap } from './types.js';\n\n/** Параметры удаления через Backspace/Delete. */\nexport interface MaskedDeletionParams {\n /** `true` для Backspace, `false` для Delete. */\n isBackspace: boolean;\n /** Начало выделения в displayValue. */\n selStart: number;\n /** Конец выделения в displayValue. */\n selEnd: number;\n /** Текущее raw-значение. */\n currentRaw: string;\n /** Карта слотов маски. */\n slotMap: SlotMap;\n}\n\n/** Успешный результат удаления символов маски. */\nexport interface MaskedDeletionResult {\n /** Raw после удаления. */\n newRaw: string;\n /** Позиция курсора в displayValue после удаления. */\n cursorPos: number;\n}\n\n/**\n * Вычисляет raw и позицию курсора после Backspace/Delete с учётом фиксированных символов маски.\n *\n * @param params — текущее выделение и состояние маски.\n * @returns новое raw и cursorPos или `null`, если удалять нечего.\n */\nexport function computeMaskedDeletion(params: MaskedDeletionParams): MaskedDeletionResult | null {\n const { isBackspace, selStart, selEnd, currentRaw, slotMap } = params;\n\n let rawStart: number;\n let rawEnd: number;\n let cursorPos: number;\n\n if (selStart === selEnd) {\n if (isBackspace) {\n let rawPos = -1;\n for (let i = selStart - 1; i >= 0; i--) {\n const r = slotMap.maskedToRaw[i];\n if (r !== null && r !== undefined) {\n rawPos = r;\n break;\n }\n }\n if (rawPos === -1 || rawPos >= currentRaw.length) {\n return null;\n }\n rawStart = rawPos;\n rawEnd = rawPos + 1;\n cursorPos = slotMap.rawToMasked[rawPos] ?? 0;\n } else {\n let rawPos = -1;\n for (let i = selStart; i < slotMap.maskedToRaw.length; i++) {\n const r = slotMap.maskedToRaw[i];\n if (r !== null && r !== undefined) {\n rawPos = r;\n break;\n }\n }\n if (rawPos === -1 || rawPos >= currentRaw.length) {\n return null;\n }\n rawStart = rawPos;\n rawEnd = rawPos + 1;\n cursorPos = slotMap.rawToMasked[rawPos] ?? 0;\n }\n } else {\n let rStart = Infinity;\n let rEnd = -1;\n for (let i = selStart; i < selEnd; i++) {\n const r = slotMap.maskedToRaw[i];\n if (r !== null && r !== undefined) {\n rStart = Math.min(rStart, r);\n rEnd = Math.max(rEnd, r + 1);\n }\n }\n if (rEnd === -1) {\n return null;\n }\n rawStart = rStart;\n rawEnd = rEnd;\n cursorPos = slotMap.rawToMasked[rawStart] ?? selStart;\n }\n\n const newRaw = currentRaw.slice(0, rawStart) + currentRaw.slice(rawEnd);\n if (newRaw === currentRaw) {\n return null;\n }\n\n return { newRaw, cursorPos };\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { MaskEngine } from './types.js';
|
|
2
|
+
/** Параметры обработки нативного `change` от `<input>`. */
|
|
3
|
+
export interface MaskedInputChangeParams {
|
|
4
|
+
/** Черновик value, который браузер записал в input. */
|
|
5
|
+
browserDraft: string;
|
|
6
|
+
/** Позиция курсора после изменения. */
|
|
7
|
+
cursorPos: number;
|
|
8
|
+
/** Текущее typedValue из MaskState. */
|
|
9
|
+
typedValue: string;
|
|
10
|
+
/** Текущее raw-значение (источник истины). */
|
|
11
|
+
currentRaw: string;
|
|
12
|
+
/** Предыдущее выделение до изменения. */
|
|
13
|
+
oldSelection: {
|
|
14
|
+
start: number;
|
|
15
|
+
end: number;
|
|
16
|
+
};
|
|
17
|
+
/** IMask-движок. */
|
|
18
|
+
engine: Pick<MaskEngine, 'imask'>;
|
|
19
|
+
}
|
|
20
|
+
/** Результат применения пользовательского ввода через IMask. */
|
|
21
|
+
export interface MaskedInputChangeResult {
|
|
22
|
+
/** Новое raw после splice. */
|
|
23
|
+
newRaw: string;
|
|
24
|
+
/** Позиция курсора, которую нужно установить. */
|
|
25
|
+
cursorPos: number;
|
|
26
|
+
/** `true`, если символ не был принят (raw не изменился). */
|
|
27
|
+
rejected: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Применяет пользовательский ввод к IMask через `splice` и вычисляет новый raw с позицией курсора.
|
|
31
|
+
*
|
|
32
|
+
* Если вставка совпала с литералом маски (`7` в `7 999`) и raw не изменился,
|
|
33
|
+
* повторяет splice в ближайшем input-слоте справа.
|
|
34
|
+
*
|
|
35
|
+
* @param params — состояние input до/после изменения.
|
|
36
|
+
* @returns новое raw, позицию курсора и флаг отклонённого ввода.
|
|
37
|
+
*/
|
|
38
|
+
export declare function applyMaskedInputChange(params: MaskedInputChangeParams): MaskedInputChangeResult;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ActionDetails } from '../react-imask/imask/core/action-details.js';
|
|
2
|
+
import { DIRECTION } from '../react-imask/imask/core/utils.js';
|
|
3
|
+
var SPLICE_FLAGS = { input: true, raw: true };
|
|
4
|
+
/**
|
|
5
|
+
* Применяет пользовательский ввод к IMask через `splice` и вычисляет новый raw с позицией курсора.
|
|
6
|
+
*
|
|
7
|
+
* Если вставка совпала с литералом маски (`7` в `7 999`) и raw не изменился,
|
|
8
|
+
* повторяет splice в ближайшем input-слоте справа.
|
|
9
|
+
*
|
|
10
|
+
* @param params — состояние input до/после изменения.
|
|
11
|
+
* @returns новое raw, позицию курсора и флаг отклонённого ввода.
|
|
12
|
+
*/
|
|
13
|
+
export function applyMaskedInputChange(params) {
|
|
14
|
+
var browserDraft = params.browserDraft, cursorPos = params.cursorPos, typedValue = params.typedValue, currentRaw = params.currentRaw, oldSelection = params.oldSelection, engine = params.engine;
|
|
15
|
+
var imask = engine.imask;
|
|
16
|
+
var details = new ActionDetails({
|
|
17
|
+
value: browserDraft,
|
|
18
|
+
cursorPos: cursorPos,
|
|
19
|
+
oldValue: typedValue,
|
|
20
|
+
oldSelection: oldSelection,
|
|
21
|
+
});
|
|
22
|
+
var savedState = imask.state;
|
|
23
|
+
var oldRawValue = imask.unmaskedValue;
|
|
24
|
+
var spliceStart = details.startChangePos;
|
|
25
|
+
var spliceResult = imask.splice(spliceStart, details.removed.length, details.inserted, details.removeDirection, SPLICE_FLAGS);
|
|
26
|
+
var newRaw = imask.rawInputValue;
|
|
27
|
+
// Литерал вроде ведущей `7` в `7 999` может поглотить кейстрек без изменения raw.
|
|
28
|
+
// Тогда пробуем вставить тот же символ в ближайший input-слот справа.
|
|
29
|
+
if (newRaw === currentRaw && details.inserted.length === 1 && details.removed.length === 0) {
|
|
30
|
+
imask.state = savedState;
|
|
31
|
+
var inputPos = imask.nearestInputPos(details.startChangePos, DIRECTION.RIGHT);
|
|
32
|
+
if (inputPos !== details.startChangePos) {
|
|
33
|
+
spliceStart = inputPos;
|
|
34
|
+
spliceResult = imask.splice(inputPos, 0, details.inserted, details.removeDirection, SPLICE_FLAGS);
|
|
35
|
+
newRaw = imask.rawInputValue;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
var removeDirection = oldRawValue === imask.unmaskedValue ? details.removeDirection : DIRECTION.NONE;
|
|
39
|
+
var newCursorPos = imask.nearestInputPos(spliceStart + spliceResult.offset, removeDirection);
|
|
40
|
+
if (removeDirection !== DIRECTION.NONE) {
|
|
41
|
+
newCursorPos = imask.nearestInputPos(newCursorPos, DIRECTION.NONE);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
newRaw: newRaw,
|
|
45
|
+
cursorPos: newCursorPos,
|
|
46
|
+
rejected: newRaw === currentRaw,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=maskedCoreInputChange.js.map
|