@servicetitan/anvil2 1.42.2 → 1.43.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 +13 -0
- package/dist/{Combobox-D2aSaDkz.js → Combobox-C7ANSGIu.js} +2 -2
- package/dist/{Combobox-D2aSaDkz.js.map → Combobox-C7ANSGIu.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DateField-D28_sa7P.js → DateField-_TqCdcYv.js} +4 -3
- package/dist/{DateField-D28_sa7P.js.map → DateField-_TqCdcYv.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange--oSGfjYa.js → DateFieldRange-Dk8WA52F.js} +2 -2
- package/dist/{DateFieldRange--oSGfjYa.js.map → DateFieldRange-Dk8WA52F.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-0a8Bk7Yj.js → DateFieldSingle-D3xD8YZk.js} +2 -2
- package/dist/{DateFieldSingle-0a8Bk7Yj.js.map → DateFieldSingle-D3xD8YZk.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-DCv9WJdu.js → DateFieldYearless-BxkCSNk5.js} +2 -2
- package/dist/{DateFieldYearless-DCv9WJdu.js.map → DateFieldYearless-BxkCSNk5.js.map} +1 -1
- package/dist/DateFieldYearless-CAUHW6Ow-EUWxJ0OY.js +1431 -0
- package/dist/DateFieldYearless-CAUHW6Ow-EUWxJ0OY.js.map +1 -0
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{Page-KN0DLtcf.js → Page-CxB5N9dR.js} +36 -36
- package/dist/{Page-KN0DLtcf.js.map → Page-CxB5N9dR.js.map} +1 -1
- package/dist/Page.css +72 -72
- package/dist/Page.js +1 -1
- package/dist/{Popover-B1HaUjGI.js → Popover-BPiqdyu1.js} +2 -2
- package/dist/{Popover-B1HaUjGI.js.map → Popover-BPiqdyu1.js.map} +1 -1
- package/dist/{Popover-CU2cGVD8-FWJOuFRj.js → Popover-CU2cGVD8-Casl3vM1.js} +2 -2
- package/dist/{Popover-CU2cGVD8-FWJOuFRj.js.map → Popover-CU2cGVD8-Casl3vM1.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/TimeField-DRHLRqN3.js +913 -0
- package/dist/TimeField-DRHLRqN3.js.map +1 -0
- package/dist/TimeField.css +10 -0
- package/dist/TimeField.d.ts +2 -0
- package/dist/TimeField.js +2 -0
- package/dist/TimeField.js.map +1 -0
- package/dist/{Toolbar-BznMJKGJ.js → Toolbar-CSWhVSUM.js} +2 -2
- package/dist/{Toolbar-BznMJKGJ.js.map → Toolbar-CSWhVSUM.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/assets/icons/st/gnav_field_pro_active.svg +1 -1
- package/dist/assets/icons/st/gnav_field_pro_inactive.svg +1 -1
- package/dist/components/TimeField/TimeField.d.ts +53 -0
- package/dist/components/TimeField/index.d.ts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/event-BEJFimi3.js +6 -0
- package/dist/event-BEJFimi3.js.map +1 -0
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT-BZcjPkvT.js +18 -0
- package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT-BZcjPkvT.js.map +1 -0
- package/dist/{DateFieldYearless-C3_oGDr3-5meexzZO.js → usePopoverSupport-B9Lsqryr-DhZHMoNb.js} +470 -1429
- package/dist/usePopoverSupport-B9Lsqryr-DhZHMoNb.js.map +1 -0
- package/package.json +4 -4
- package/dist/DateFieldYearless-C3_oGDr3-5meexzZO.js.map +0 -1
- package/dist/usePopoverCloseDelayWorkaround-BhhG-xEB-hfJZaXHC.js +0 -21
- package/dist/usePopoverCloseDelayWorkaround-BhhG-xEB-hfJZaXHC.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePopoverSupport-B9Lsqryr-DhZHMoNb.js","sources":["../../../node_modules/.pnpm/@maskito+core@3.10.0/node_modules/@maskito/core/index.esm.js","../../../node_modules/.pnpm/@maskito+kit@3.10.0_@maskito+core@3.10.0/node_modules/@maskito/kit/index.esm.js","../../../node_modules/.pnpm/@maskito+react@3.10.0_@maskito+core@3.10.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@maskito/react/index.esm.js","../../hammer-react/dist/usePopoverSupport-B9Lsqryr.js"],"sourcesContent":["function getContentEditableSelection(element) {\n const { anchorOffset = 0, focusOffset = 0 } = element.ownerDocument.getSelection() || {};\n const from = Math.min(anchorOffset, focusOffset);\n const to = Math.max(anchorOffset, focusOffset);\n return [from, to];\n}\n\nfunction setContentEditableSelection(element, [from, to]) {\n var _a, _b, _c, _d;\n const document = element.ownerDocument;\n const range = document.createRange();\n range.setStart(element.firstChild || element, Math.min(from, (_b = (_a = element.textContent) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0));\n range.setEnd(element.lastChild || element, Math.min(to, (_d = (_c = element.textContent) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0));\n const selection = document.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n}\n\nclass ContentEditableAdapter {\n constructor(element) {\n this.element = element;\n this.maxLength = Infinity;\n }\n get value() {\n return this.element.innerText.replace(/\\n\\n$/, '\\n');\n }\n set value(value) {\n // Setting into innerHTML of element with `white-space: pre;` style\n this.element.innerHTML = value.replace(/\\n$/, '\\n\\n');\n }\n get selectionStart() {\n return getContentEditableSelection(this.element)[0];\n }\n get selectionEnd() {\n return getContentEditableSelection(this.element)[1];\n }\n setSelectionRange(from, to) {\n setContentEditableSelection(this.element, [from !== null && from !== void 0 ? from : 0, to !== null && to !== void 0 ? to : 0]);\n }\n select() {\n this.setSelectionRange(0, this.value.length);\n }\n}\nfunction maskitoAdaptContentEditable(element) {\n const adapter = new ContentEditableAdapter(element);\n return new Proxy(element, {\n get(target, prop) {\n if (prop in adapter) {\n return adapter[prop];\n }\n const nativeProperty = target[prop];\n return typeof nativeProperty === 'function'\n ? nativeProperty.bind(target)\n : nativeProperty;\n },\n // eslint-disable-next-line @typescript-eslint/max-params\n set(target, prop, val, receiver) {\n return Reflect.set(prop in adapter ? adapter : target, prop, val, receiver);\n },\n });\n}\n\nconst MASKITO_DEFAULT_ELEMENT_PREDICATE = (e) => e.isContentEditable\n ? maskitoAdaptContentEditable(e)\n : e.querySelector('input,textarea') ||\n e;\n\nconst MASKITO_DEFAULT_OPTIONS = {\n mask: /^.*$/,\n preprocessors: [],\n postprocessors: [],\n plugins: [],\n overwriteMode: 'shift',\n};\n\nclass MaskHistory {\n constructor() {\n this.now = null;\n this.past = [];\n this.future = [];\n }\n undo() {\n const state = this.past.pop();\n if (state && this.now) {\n this.future.push(this.now);\n this.updateElement(state, 'historyUndo');\n }\n }\n redo() {\n const state = this.future.pop();\n if (state && this.now) {\n this.past.push(this.now);\n this.updateElement(state, 'historyRedo');\n }\n }\n updateHistory(state) {\n if (!this.now) {\n this.now = state;\n return;\n }\n const isValueChanged = this.now.value !== state.value;\n const isSelectionChanged = this.now.selection.some((item, index) => item !== state.selection[index]);\n if (!isValueChanged && !isSelectionChanged) {\n return;\n }\n if (isValueChanged) {\n this.past.push(this.now);\n this.future = [];\n }\n this.now = state;\n }\n updateElement(state, inputType) {\n this.now = state;\n this.updateElementState(state, { inputType, data: null });\n }\n}\n\nfunction areElementValuesEqual(sampleState, ...states) {\n return states.every(({ value }) => value === sampleState.value);\n}\nfunction areElementStatesEqual(sampleState, ...states) {\n return states.every(({ value, selection }) => value === sampleState.value &&\n selection[0] === sampleState.selection[0] &&\n selection[1] === sampleState.selection[1]);\n}\n\nfunction applyOverwriteMode({ value, selection }, newCharacters, mode) {\n const [from, to] = selection;\n const computedMode = typeof mode === 'function' ? mode({ value, selection }) : mode;\n return {\n value,\n selection: computedMode === 'replace'\n ? [from, Math.max(from + newCharacters.length, to)]\n : [from, to],\n };\n}\n\nfunction isFixedCharacter(char) {\n return typeof char === 'string';\n}\n\n// eslint-disable-next-line @typescript-eslint/max-params\nfunction getLeadingFixedCharacters(mask, validatedValuePart, newCharacter, initialElementState) {\n let leadingFixedCharacters = '';\n for (let i = validatedValuePart.length; i < mask.length; i++) {\n const charConstraint = mask[i] || '';\n const isInitiallyExisted = (initialElementState === null || initialElementState === void 0 ? void 0 : initialElementState.value[i]) === charConstraint;\n if (!isFixedCharacter(charConstraint) ||\n (charConstraint === newCharacter && !isInitiallyExisted)) {\n return leadingFixedCharacters;\n }\n leadingFixedCharacters += charConstraint;\n }\n return leadingFixedCharacters;\n}\n\nfunction validateValueWithMask(value, maskExpression) {\n if (Array.isArray(maskExpression)) {\n return (value.length === maskExpression.length &&\n Array.from(value).every((char, i) => {\n const charConstraint = maskExpression[i] || '';\n return isFixedCharacter(charConstraint)\n ? char === charConstraint\n : char.match(charConstraint);\n }));\n }\n return maskExpression.test(value);\n}\n\nfunction guessValidValueByPattern(elementState, mask, initialElementState) {\n let maskedFrom = null;\n let maskedTo = null;\n const maskedValue = Array.from(elementState.value).reduce((validatedCharacters, char, charIndex) => {\n const leadingCharacters = getLeadingFixedCharacters(mask, validatedCharacters, char, initialElementState);\n const newValidatedChars = validatedCharacters + leadingCharacters;\n const charConstraint = mask[newValidatedChars.length] || '';\n if (maskedFrom === null && charIndex >= elementState.selection[0]) {\n maskedFrom = newValidatedChars.length;\n }\n if (maskedTo === null && charIndex >= elementState.selection[1]) {\n maskedTo = newValidatedChars.length;\n }\n if (isFixedCharacter(charConstraint)) {\n return newValidatedChars + charConstraint;\n }\n if (char.match(charConstraint)) {\n return newValidatedChars + char;\n }\n return leadingCharacters.startsWith(char)\n ? newValidatedChars\n : validatedCharacters;\n }, '');\n const trailingFixedCharacters = getLeadingFixedCharacters(mask, maskedValue, '', initialElementState);\n return {\n value: validateValueWithMask(maskedValue + trailingFixedCharacters, mask)\n ? maskedValue + trailingFixedCharacters\n : maskedValue,\n selection: [maskedFrom !== null && maskedFrom !== void 0 ? maskedFrom : maskedValue.length, maskedTo !== null && maskedTo !== void 0 ? maskedTo : maskedValue.length],\n };\n}\n\nfunction guessValidValueByRegExp({ value, selection }, maskRegExp) {\n const [from, to] = selection;\n let newFrom = from;\n let newTo = to;\n const validatedValue = Array.from(value).reduce((validatedValuePart, char, i) => {\n const newPossibleValue = validatedValuePart + char;\n if (from === i) {\n newFrom = validatedValuePart.length;\n }\n if (to === i) {\n newTo = validatedValuePart.length;\n }\n return newPossibleValue.match(maskRegExp) ? newPossibleValue : validatedValuePart;\n }, '');\n return {\n value: validatedValue,\n selection: [\n Math.min(newFrom, validatedValue.length),\n Math.min(newTo, validatedValue.length),\n ],\n };\n}\n\nfunction calibrateValueByMask(elementState, mask, initialElementState = null) {\n if (validateValueWithMask(elementState.value, mask)) {\n return elementState;\n }\n const { value, selection } = Array.isArray(mask)\n ? guessValidValueByPattern(elementState, mask, initialElementState)\n : guessValidValueByRegExp(elementState, mask);\n return {\n selection,\n value: Array.isArray(mask) ? value.slice(0, mask.length) : value,\n };\n}\n\nfunction removeFixedMaskCharacters(initialElementState, mask) {\n if (!Array.isArray(mask)) {\n return initialElementState;\n }\n const [from, to] = initialElementState.selection;\n const selection = [];\n const unmaskedValue = Array.from(initialElementState.value).reduce((rawValue, char, i) => {\n const charConstraint = mask[i] || '';\n if (i === from) {\n selection.push(rawValue.length);\n }\n if (i === to) {\n selection.push(rawValue.length);\n }\n return isFixedCharacter(charConstraint) && charConstraint === char\n ? rawValue\n : rawValue + char;\n }, '');\n if (selection.length < 2) {\n selection.push(...new Array(2 - selection.length).fill(unmaskedValue.length));\n }\n return {\n value: unmaskedValue,\n selection: [selection[0], selection[1]],\n };\n}\n\nclass MaskModel {\n constructor(initialElementState, maskOptions) {\n this.maskOptions = maskOptions;\n this.unmaskInitialState = { value: '', selection: [0, 0] };\n this.value = '';\n this.selection = [0, 0];\n const expression = this.getMaskExpression(initialElementState);\n const { value, selection } = calibrateValueByMask(initialElementState, expression);\n this.unmaskInitialState = removeFixedMaskCharacters({ value, selection }, expression);\n this.value = value;\n this.selection = selection;\n }\n addCharacters(newCharacters) {\n const { value, selection, maskOptions } = this;\n const initialElementState = { value, selection };\n const { selection: [from, to], } = applyOverwriteMode(initialElementState, newCharacters, maskOptions.overwriteMode);\n const maskExpression = this.getMaskExpression({\n value: value.slice(0, from) + newCharacters + value.slice(to),\n selection: [from + newCharacters.length, from + newCharacters.length],\n });\n const [unmaskedFrom, unmaskedTo] = applyOverwriteMode(this.unmaskInitialState, newCharacters, maskOptions.overwriteMode).selection;\n const newUnmaskedLeadingValuePart = this.unmaskInitialState.value.slice(0, unmaskedFrom) + newCharacters;\n const newCaretIndex = newUnmaskedLeadingValuePart.length;\n const maskedElementState = calibrateValueByMask({\n value: newUnmaskedLeadingValuePart +\n this.unmaskInitialState.value.slice(unmaskedTo),\n selection: [newCaretIndex, newCaretIndex],\n }, maskExpression, initialElementState);\n const prevLeadingPart = value.slice(0, from);\n const newLeadingValuePart = calibrateValueByMask({\n value: newUnmaskedLeadingValuePart,\n selection: [newCaretIndex, newCaretIndex],\n }, maskExpression, initialElementState).value;\n const isInvalidCharsInsertion = prevLeadingPart === newLeadingValuePart ||\n newLeadingValuePart.length < prevLeadingPart.length;\n if (isInvalidCharsInsertion ||\n areElementStatesEqual(this, maskedElementState) // If typing new characters does not change value\n ) {\n throw new Error('Invalid mask value');\n }\n this.value = maskedElementState.value;\n this.selection = maskedElementState.selection;\n }\n deleteCharacters() {\n const [from, to] = this.selection;\n if (from === to || !to) {\n return;\n }\n const { value } = this;\n const maskExpression = this.getMaskExpression({\n value: value.slice(0, from) + value.slice(to),\n selection: [from, from],\n });\n const initialElementState = { value};\n const [unmaskedFrom, unmaskedTo] = this.unmaskInitialState.selection;\n const newUnmaskedValue = this.unmaskInitialState.value.slice(0, unmaskedFrom) +\n this.unmaskInitialState.value.slice(unmaskedTo);\n const maskedElementState = calibrateValueByMask({ value: newUnmaskedValue, selection: [unmaskedFrom, unmaskedFrom] }, maskExpression, initialElementState);\n this.value = maskedElementState.value;\n this.selection = maskedElementState.selection;\n }\n getMaskExpression(elementState) {\n const { mask } = this.maskOptions;\n return typeof mask === 'function' ? mask(elementState) : mask;\n }\n}\n\nclass EventListener {\n constructor(element) {\n this.element = element;\n this.listeners = [];\n }\n listen(eventType, fn, options) {\n const untypedFn = fn;\n this.element.addEventListener(eventType, untypedFn, options);\n this.listeners.push(() => this.element.removeEventListener(eventType, untypedFn, options));\n }\n destroy() {\n this.listeners.forEach((stopListen) => stopListen());\n }\n}\n\nconst HotkeyModifier = {\n CTRL: 1 << 0,\n ALT: 1 << 1,\n SHIFT: 1 << 2,\n META: 1 << 3,\n};\n// TODO add variants that can be processed correctly\nconst HotkeyCode = {\n Y: 89,\n Z: 90,\n};\n/**\n * Checks if the passed keyboard event match the required hotkey.\n *\n * @example\n * input.addEventListener('keydown', (event) => {\n * if (isHotkey(event, HotkeyModifier.CTRL | HotkeyModifier.SHIFT, HotkeyCode.Z)) {\n * // redo hotkey pressed\n * }\n * })\n *\n * @return will return `true` only if the {@link HotkeyCode} matches and only the necessary\n * {@link HotkeyModifier modifiers} have been pressed\n */\nfunction isHotkey(event, modifiers, hotkeyCode) {\n return (event.ctrlKey === !!(modifiers & HotkeyModifier.CTRL) &&\n event.altKey === !!(modifiers & HotkeyModifier.ALT) &&\n event.shiftKey === !!(modifiers & HotkeyModifier.SHIFT) &&\n event.metaKey === !!(modifiers & HotkeyModifier.META) &&\n /**\n * We intentionally use legacy {@link KeyboardEvent#keyCode `keyCode`} property. It is more\n * \"keyboard-layout\"-independent than {@link KeyboardEvent#key `key`} or {@link KeyboardEvent#code `code`} properties.\n * @see {@link https://github.com/taiga-family/maskito/issues/315 `KeyboardEvent#code` issue}\n */\n event.keyCode === hotkeyCode);\n}\n\nfunction isRedo(event) {\n return (isHotkey(event, HotkeyModifier.CTRL, HotkeyCode.Y) || // Windows\n isHotkey(event, HotkeyModifier.CTRL | HotkeyModifier.SHIFT, HotkeyCode.Z) || // Windows & Android\n isHotkey(event, HotkeyModifier.META | HotkeyModifier.SHIFT, HotkeyCode.Z) // macOS & iOS\n );\n}\nfunction isUndo(event) {\n return (isHotkey(event, HotkeyModifier.CTRL, HotkeyCode.Z) || // Windows & Android\n isHotkey(event, HotkeyModifier.META, HotkeyCode.Z) // macOS & iOS\n );\n}\n\n/**\n * Sets value to element, and dispatches input event\n * if you passed ELementState, it also sets selection range\n *\n * @example\n * maskitoUpdateElement(input, newValue);\n * maskitoUpdateElement(input, elementState);\n *\n * @see {@link https://github.com/taiga-family/maskito/issues/804 issue}\n *\n * @return void\n */\nfunction maskitoUpdateElement(element, valueOrElementState) {\n var _a;\n const initialValue = element.value;\n if (typeof valueOrElementState === 'string') {\n element.value = valueOrElementState;\n }\n else {\n const [from, to] = valueOrElementState.selection;\n element.value = valueOrElementState.value;\n if (element.matches(':focus')) {\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, from, to);\n }\n }\n if (element.value !== initialValue) {\n element.dispatchEvent(new Event('input', \n /**\n * React handles this event only on bubbling phase\n *\n * here is the list of events that are processed in the capture stage, others are processed in the bubbling stage\n * https://github.com/facebook/react/blob/cb2439624f43c510007f65aea5c50a8bb97917e4/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js#L222\n */\n { bubbles: true }));\n }\n}\n\nfunction getLineSelection({ value, selection }, isForward) {\n const [from, to] = selection;\n if (from !== to) {\n return [from, to];\n }\n const nearestBreak = isForward\n ? value.slice(from).indexOf('\\n') + 1 || value.length\n : value.slice(0, to).lastIndexOf('\\n') + 1;\n const selectFrom = isForward ? from : nearestBreak;\n const selectTo = isForward ? nearestBreak : to;\n return [selectFrom, selectTo];\n}\n\nfunction getNotEmptySelection({ value, selection }, isForward) {\n const [from, to] = selection;\n if (from !== to) {\n return [from, to];\n }\n const notEmptySelection = isForward ? [from, to + 1] : [from - 1, to];\n return notEmptySelection.map((x) => Math.min(Math.max(x, 0), value.length));\n}\n\nconst TRAILING_SPACES_REG = /\\s+$/g;\nconst LEADING_SPACES_REG = /^\\s+/g;\nconst SPACE_REG = /\\s/;\nfunction getWordSelection({ value, selection }, isForward) {\n const [from, to] = selection;\n if (from !== to) {\n return [from, to];\n }\n if (isForward) {\n const valueAfterSelectionStart = value.slice(from);\n const [leadingSpaces] = valueAfterSelectionStart.match(LEADING_SPACES_REG) || [\n '',\n ];\n const nearestWordEndIndex = valueAfterSelectionStart\n .trimStart()\n .search(SPACE_REG);\n return [\n from,\n nearestWordEndIndex !== -1\n ? from + leadingSpaces.length + nearestWordEndIndex\n : value.length,\n ];\n }\n const valueBeforeSelectionEnd = value.slice(0, to);\n const [trailingSpaces] = valueBeforeSelectionEnd.match(TRAILING_SPACES_REG) || [''];\n const selectedWordLength = valueBeforeSelectionEnd\n .trimEnd()\n .split('')\n .reverse()\n .findIndex((char) => SPACE_REG.exec(char));\n return [\n selectedWordLength !== -1 ? to - trailingSpaces.length - selectedWordLength : 0,\n to,\n ];\n}\n\n/* eslint-disable @typescript-eslint/no-restricted-types */\n/**\n * @internal\n */\nfunction maskitoPipe(processors = []) {\n return (initialData, ...readonlyArgs) => processors.reduce((data, fn) => (Object.assign(Object.assign({}, data), fn(data, ...readonlyArgs))), initialData);\n}\n\nfunction maskitoTransform(valueOrState, maskitoOptions) {\n const options = Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), maskitoOptions);\n const preprocessor = maskitoPipe(options.preprocessors);\n const postprocessor = maskitoPipe(options.postprocessors);\n const initialElementState = typeof valueOrState === 'string'\n ? { value: valueOrState, selection: [0, 0] }\n : valueOrState;\n const { elementState } = preprocessor({ elementState: initialElementState, data: '' }, 'validation');\n const maskModel = new MaskModel(elementState, options);\n const { value, selection } = postprocessor(maskModel, initialElementState);\n return typeof valueOrState === 'string' ? value : { value, selection };\n}\n\n/**\n * All `input` events with `inputType=deleteContentBackward` always follows `beforeinput` event with the same `inputType`.\n * If `beforeinput[inputType=deleteContentBackward]` is prevented, subsequent `input[inputType=deleteContentBackward]` is prevented too.\n * There is an exception – Android devices with Microsoft SwiftKey Keyboard in Mobile Chrome.\n * These devices ignores `preventDefault` for `beforeinput` event if Backspace is pressed.\n * @see https://github.com/taiga-family/maskito/issues/2135#issuecomment-2980729647\n * ___\n * TODO: track Chromium bug report and delete this plugin after bug fix\n * https://issues.chromium.org/issues/40885402\n */\nfunction createBrokenDefaultPlugin() {\n return (element) => {\n const eventListener = new EventListener(element);\n let isVirtualAndroidKeyboard = false;\n let beforeinputEvent;\n let value = element.value;\n eventListener.listen('keydown', ({ key }) => {\n isVirtualAndroidKeyboard = key === 'Unidentified';\n });\n eventListener.listen('beforeinput', (event) => {\n beforeinputEvent = event;\n value = element.value;\n });\n eventListener.listen('input', (event) => {\n if (isVirtualAndroidKeyboard &&\n beforeinputEvent.defaultPrevented &&\n beforeinputEvent.inputType === 'deleteContentBackward' &&\n event.inputType === 'deleteContentBackward') {\n element.value = value;\n }\n }, { capture: true });\n return () => eventListener.destroy();\n };\n}\n\nfunction maskitoChangeEventPlugin() {\n return (element) => {\n if (element.isContentEditable) {\n return;\n }\n let value = element.value;\n const valueListener = () => {\n value = element.value;\n };\n const blurListener = () => {\n if (element.value !== value) {\n element.dispatchEvent(new Event('change', { bubbles: true }));\n }\n };\n element.addEventListener('focus', valueListener);\n element.addEventListener('change', valueListener);\n element.addEventListener('blur', blurListener);\n return () => {\n element.removeEventListener('focus', valueListener);\n element.removeEventListener('change', valueListener);\n element.removeEventListener('blur', blurListener);\n };\n };\n}\n\nconst SPACE = ' ';\n/**\n * 1. Android user (with G-board keyboard or similar) presses 1st space\n * ```\n * {type: \"beforeinput\", data: \" \", inputType: \"insertText\"}\n * ```\n * 2. User presses 2nd space\n * ```\n * // Android tries to delete previously inserted space\n * {type: \"beforeinput\", inputType: \"deleteContentBackward\"}\n * {type: \"beforeinput\", data: \". \", inputType: \"insertText\"}\n * ```\n * ---------\n * 1. MacOS user presses 1st space\n * ```\n * {type: \"beforeinput\", data: \" \", inputType: \"insertText\"}\n * ```\n * 2. User presses 2nd space\n * ```\n * // MacOS automatically run `element.setSelectionRange(indexBeforeSpace, indexAfterSpace)` and then\n * {type: \"beforeinput\", data: \". \", inputType: \"insertText\"}\n * ```\n * ---------\n * @see https://github.com/taiga-family/maskito/issues/2023\n */\nfunction createDoubleSpacePlugin() {\n let prevValue = '';\n let prevCaretIndex = 0;\n let prevEvent = null;\n let prevRejectedSpace = false;\n return (element) => {\n const eventListener = new EventListener(element);\n eventListener.listen('beforeinput', (event) => {\n var _a, _b;\n const { value, selectionStart, selectionEnd } = element;\n const rejectedSpace = (prevEvent === null || prevEvent === void 0 ? void 0 : prevEvent.inputType) === 'insertText' &&\n (prevEvent === null || prevEvent === void 0 ? void 0 : prevEvent.data) === SPACE &&\n !value.slice(0, Number(selectionEnd)).endsWith(SPACE);\n if (event.inputType === 'insertText' && event.data === `.${SPACE}`) {\n if ((prevEvent === null || prevEvent === void 0 ? void 0 : prevEvent.inputType) === 'deleteContentBackward' &&\n prevRejectedSpace) {\n // Android\n element.value = prevValue;\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, prevCaretIndex, prevCaretIndex);\n }\n else if (rejectedSpace) {\n // Mac OS\n (_b = element.setSelectionRange) === null || _b === void 0 ? void 0 : _b.call(element, selectionStart, selectionStart);\n }\n }\n prevRejectedSpace = rejectedSpace;\n prevEvent = event;\n prevValue = value;\n prevCaretIndex = Number((rejectedSpace ? prevCaretIndex : selectionEnd) === value.length\n ? selectionEnd\n : selectionStart);\n });\n return () => eventListener.destroy();\n };\n}\n\nfunction maskitoInitialCalibrationPlugin(customOptions) {\n return (element, options) => {\n var _a, _b;\n const from = (_a = element.selectionStart) !== null && _a !== void 0 ? _a : 0;\n const to = (_b = element.selectionEnd) !== null && _b !== void 0 ? _b : 0;\n maskitoUpdateElement(element, {\n value: maskitoTransform(element.value, customOptions || options),\n selection: [from, to],\n });\n };\n}\n\nfunction maskitoStrictCompositionPlugin() {\n return (element, maskitoOptions) => {\n const listener = (event) => {\n var _a, _b;\n if (event.inputType !== 'insertCompositionText') {\n return;\n }\n const selection = [\n (_a = element.selectionStart) !== null && _a !== void 0 ? _a : 0,\n (_b = element.selectionEnd) !== null && _b !== void 0 ? _b : 0,\n ];\n const elementState = {\n selection,\n value: element.value,\n };\n const validatedState = maskitoTransform(elementState, maskitoOptions);\n if (!areElementStatesEqual(elementState, validatedState)) {\n event.preventDefault();\n maskitoUpdateElement(element, validatedState);\n }\n };\n element.addEventListener('input', listener);\n return () => element.removeEventListener('input', listener);\n };\n}\n\nconst BUILT_IN_PLUGINS = [createDoubleSpacePlugin(), createBrokenDefaultPlugin()];\nclass Maskito extends MaskHistory {\n constructor(element, maskitoOptions) {\n super();\n this.element = element;\n this.maskitoOptions = maskitoOptions;\n this.isTextArea = this.element.nodeName === 'TEXTAREA';\n this.eventListener = new EventListener(this.element);\n this.options = Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), this.maskitoOptions);\n this.upcomingElementState = null;\n this.preprocessor = maskitoPipe(this.options.preprocessors);\n this.postprocessor = maskitoPipe(this.options.postprocessors);\n this.teardowns = this.options.plugins\n .concat(BUILT_IN_PLUGINS)\n .map((plugin) => plugin(this.element, this.options));\n this.updateHistory(this.elementState);\n this.eventListener.listen('keydown', (event) => {\n if (isRedo(event)) {\n event.preventDefault();\n return this.redo();\n }\n if (isUndo(event)) {\n event.preventDefault();\n return this.undo();\n }\n });\n this.eventListener.listen('beforeinput', (event) => {\n var _a, _b, _c;\n const isForward = event.inputType.includes('Forward');\n this.updateHistory(this.elementState);\n switch (event.inputType) {\n case 'deleteByCut':\n case 'deleteContentBackward':\n case 'deleteContentForward':\n return this.handleDelete({\n event,\n isForward,\n selection: getNotEmptySelection(this.elementState, isForward),\n });\n case 'deleteHardLineBackward':\n case 'deleteHardLineForward':\n case 'deleteSoftLineBackward':\n case 'deleteSoftLineForward':\n return this.handleDelete({\n event,\n isForward,\n selection: getLineSelection(this.elementState, isForward),\n force: true,\n });\n case 'deleteWordBackward':\n case 'deleteWordForward':\n return this.handleDelete({\n event,\n isForward,\n selection: getWordSelection(this.elementState, isForward),\n });\n case 'historyRedo':\n event.preventDefault();\n return this.redo();\n // historyUndo/historyRedo will not be triggered if value was modified programmatically\n case 'historyUndo':\n event.preventDefault();\n return this.undo();\n case 'insertCompositionText':\n return; // will be handled inside `compositionend` event\n case 'insertLineBreak':\n case 'insertParagraph':\n return this.handleEnter(event);\n case 'insertReplacementText':\n /**\n * According {@link https://www.w3.org/TR/input-events-2 W3C specification}:\n * > `insertReplacementText` – insert or replace existing text by means of a spell checker,\n * > auto-correct, writing suggestions or similar.\n * ___\n * Firefox emits `insertReplacementText` event for its suggestion/autofill and for spell checker.\n * However, it is impossible to detect which part of the textfield value is going to be replaced\n * (`selectionStart` and `selectionEnd` just equal to the last caret position).\n * ___\n * Chrome does not fire `beforeinput` event for its suggestion/autofill.\n * It emits only `input` event with `inputType` and `data` set to `undefined`.\n * ___\n * All these browser limitations make us to validate the result value later in `input` event.\n */\n return;\n case 'insertFromDrop':\n case 'insertFromPaste':\n case 'insertText':\n default:\n return this.handleInsert(event, (_c = (_a = event.data) !== null && _a !== void 0 ? _a : \n // `event.data` for `contentEditable` is always `null` for paste/drop events\n (_b = event.dataTransfer) === null || _b === void 0 ? void 0 : _b.getData('text/plain')) !== null && _c !== void 0 ? _c : '');\n }\n });\n this.eventListener.listen('input', () => {\n if (this.upcomingElementState &&\n !areElementStatesEqual(this.upcomingElementState, this.elementState)) {\n this.updateElementState(this.upcomingElementState);\n }\n this.upcomingElementState = null;\n }, { capture: true });\n this.eventListener.listen('input', ({ inputType }) => {\n if (inputType === 'insertCompositionText') {\n return; // will be handled inside `compositionend` event\n }\n this.ensureValueFitsMask();\n this.updateHistory(this.elementState);\n });\n this.eventListener.listen('compositionend', () => {\n this.ensureValueFitsMask();\n this.updateHistory(this.elementState);\n });\n }\n destroy() {\n this.eventListener.destroy();\n this.teardowns.forEach((teardown) => teardown === null || teardown === void 0 ? void 0 : teardown());\n }\n updateElementState({ value, selection }, eventInit) {\n const initialValue = this.elementState.value;\n this.updateValue(value);\n this.updateSelectionRange(selection);\n if (eventInit && initialValue !== value) {\n this.dispatchInputEvent(eventInit);\n }\n }\n get elementState() {\n const { value, selectionStart, selectionEnd } = this.element;\n return {\n value,\n selection: [selectionStart !== null && selectionStart !== void 0 ? selectionStart : 0, selectionEnd !== null && selectionEnd !== void 0 ? selectionEnd : 0],\n };\n }\n get maxLength() {\n const { maxLength } = this.element;\n return maxLength === -1 ? Infinity : maxLength;\n }\n updateSelectionRange([from, to]) {\n var _a;\n const { element } = this;\n if (element.matches(':focus') &&\n (element.selectionStart !== from || element.selectionEnd !== to)) {\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, from, to);\n }\n }\n updateValue(value) {\n /**\n * Don't \"disturb\" unnecessarily `value`-setter\n * (i.e. it breaks React controlled input behavior)\n */\n if (this.element.value !== value || this.element.isContentEditable) {\n this.element.value = value;\n }\n }\n ensureValueFitsMask() {\n this.updateElementState(maskitoTransform(this.elementState, this.options), {\n inputType: 'insertText',\n data: null,\n });\n }\n dispatchInputEvent(eventInit = {\n inputType: 'insertText',\n data: null,\n }) {\n if (globalThis.InputEvent) {\n this.element.dispatchEvent(new InputEvent('input', Object.assign(Object.assign({}, eventInit), { bubbles: true, cancelable: false })));\n }\n }\n handleDelete({ event, selection, isForward, }) {\n const initialState = {\n value: this.elementState.value,\n selection,\n };\n const { elementState } = this.preprocessor({\n elementState: initialState,\n data: '',\n }, isForward ? 'deleteForward' : 'deleteBackward');\n const maskModel = new MaskModel(elementState, this.options);\n maskModel.deleteCharacters();\n const newElementState = this.postprocessor(maskModel, initialState);\n if (areElementValuesEqual(initialState, elementState, maskModel, newElementState)) {\n const [from, to] = elementState.selection;\n event.preventDefault();\n // User presses Backspace/Delete for the fixed value\n return this.updateSelectionRange(isForward ? [to, to] : [from, from]);\n }\n this.upcomingElementState = newElementState;\n }\n handleInsert(event, data) {\n const { options, maxLength, elementState: initialElementState } = this;\n const { elementState, data: insertedText = data } = this.preprocessor({\n data,\n elementState: initialElementState,\n }, 'insert');\n const maskModel = new MaskModel(elementState, options);\n try {\n maskModel.addCharacters(insertedText);\n }\n catch (_a) {\n return event.preventDefault();\n }\n const [from, to] = initialElementState.selection;\n const newPossibleState = {\n value: initialElementState.value.slice(0, from) +\n data +\n initialElementState.value.slice(to),\n selection: [from + data.length, from + data.length],\n };\n this.upcomingElementState = this.clampState(this.postprocessor(maskModel, initialElementState));\n if (!areElementStatesEqual(this.clampState(newPossibleState), this.upcomingElementState) &&\n options.overwriteMode === 'replace' &&\n newPossibleState.value.length > maxLength) {\n /**\n * Browsers know nothing about Maskito and its `overwriteMode`.\n * When textfield value length is already equal to attribute `maxlength`,\n * pressing any key (even with valid value) does not emit `input` event.\n */\n this.dispatchInputEvent({ inputType: 'insertText', data });\n }\n }\n handleEnter(event) {\n if (this.isTextArea || this.element.isContentEditable) {\n this.handleInsert(event, '\\n');\n }\n }\n clampState({ value, selection }) {\n const [from, to] = selection;\n const max = this.maxLength;\n return {\n value: value.slice(0, max),\n selection: [Math.min(from, max), Math.min(to, max)],\n };\n }\n}\n\nexport { MASKITO_DEFAULT_ELEMENT_PREDICATE, MASKITO_DEFAULT_OPTIONS, Maskito, maskitoAdaptContentEditable, maskitoChangeEventPlugin, maskitoInitialCalibrationPlugin, maskitoPipe, maskitoStrictCompositionPlugin, maskitoTransform, maskitoUpdateElement };\n","import { maskitoUpdateElement, MASKITO_DEFAULT_OPTIONS, maskitoTransform } from '@maskito/core';\n\n/**\n * Clamps a value between two inclusive limits\n *\n * @param value\n * @param min lower limit\n * @param max upper limit\n */\nfunction clamp(value, min, max) {\n const clampedValue = Math.min(Number(max), Math.max(Number(min), Number(value)));\n return (value instanceof Date ? new Date(clampedValue) : clampedValue);\n}\n\nfunction countDigits(str) {\n return str.replaceAll(/\\W/g, '').length;\n}\n\nfunction appendDate(initialDate, { day, month, year } = {}) {\n const date = new Date(initialDate);\n if (day) {\n date.setDate(date.getDate() + day);\n }\n if (month) {\n date.setMonth(date.getMonth() + month);\n }\n if (year) {\n date.setFullYear(date.getFullYear() + year);\n }\n return date;\n}\n\nconst getDateSegmentValueLength = (dateString) => {\n var _a, _b, _c, _d, _e, _f;\n return ({\n day: (_b = (_a = dateString.match(/d/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,\n month: (_d = (_c = dateString.match(/m/g)) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0,\n year: (_f = (_e = dateString.match(/y/g)) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0,\n });\n};\n\nfunction dateToSegments(date) {\n return {\n day: String(date.getDate()).padStart(2, '0'),\n month: String(date.getMonth() + 1).padStart(2, '0'),\n year: String(date.getFullYear()).padStart(4, '0'),\n hours: String(date.getHours()).padStart(2, '0'),\n minutes: String(date.getMinutes()).padStart(2, '0'),\n seconds: String(date.getSeconds()).padStart(2, '0'),\n milliseconds: String(date.getMilliseconds()).padStart(3, '0'),\n };\n}\n\nconst ALL_POSSIBLE_SEGMENTS = [\n 'day',\n 'month',\n 'year',\n];\nfunction getDateSegmentsOrder(template) {\n return [...ALL_POSSIBLE_SEGMENTS].sort((a, b) => template.indexOf(a[0]) > template.indexOf(b[0]) ? 1 : -1);\n}\n\nfunction getFirstCompleteDate(dateString, dateModeTemplate) {\n const digitsInDate = countDigits(dateModeTemplate);\n const [completeDate = ''] = new RegExp(`(\\\\D*\\\\d){${digitsInDate}}`).exec(dateString) || [];\n return completeDate;\n}\n\nfunction isDateStringComplete(dateString, dateModeTemplate) {\n if (dateString.length < dateModeTemplate.length) {\n return false;\n }\n return dateString.split(/\\D/).every((segment) => !/^0+$/.exec(segment));\n}\n\nfunction parseDateRangeString(dateRange, dateModeTemplate, rangeSeparator) {\n const digitsInDate = countDigits(dateModeTemplate);\n return (dateRange\n .replace(rangeSeparator, '')\n .match(new RegExp(`(\\\\D*\\\\d[^\\\\d\\\\s]*){1,${digitsInDate}}`, 'g')) || []);\n}\n\nfunction parseDateString(dateString, fullMode) {\n const cleanMode = fullMode.replaceAll(/[^dmy]/g, '');\n const onlyDigitsDate = dateString.replaceAll(/\\D+/g, '');\n const dateSegments = {\n day: onlyDigitsDate.slice(cleanMode.indexOf('d'), cleanMode.lastIndexOf('d') + 1),\n month: onlyDigitsDate.slice(cleanMode.indexOf('m'), cleanMode.lastIndexOf('m') + 1),\n year: onlyDigitsDate.slice(cleanMode.indexOf('y'), cleanMode.lastIndexOf('y') + 1),\n };\n return Object.fromEntries(Object.entries(dateSegments)\n .filter(([_, value]) => Boolean(value))\n .sort(([a], [b]) => fullMode.toLowerCase().indexOf(a.slice(0, 1)) >\n fullMode.toLowerCase().indexOf(b.slice(0, 1))\n ? 1\n : -1));\n}\n\nfunction segmentsToDate(parsedDate, parsedTime) {\n var _a, _b, _c, _d, _e, _f, _g;\n const year = ((_a = parsedDate.year) === null || _a === void 0 ? void 0 : _a.length) === 2 ? `20${parsedDate.year}` : parsedDate.year;\n const date = new Date(Number(year !== null && year !== void 0 ? year : '0'), Number((_b = parsedDate.month) !== null && _b !== void 0 ? _b : '1') - 1, Number((_c = parsedDate.day) !== null && _c !== void 0 ? _c : '1'), Number((_d = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.hours) !== null && _d !== void 0 ? _d : '0'), Number((_e = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.minutes) !== null && _e !== void 0 ? _e : '0'), Number((_f = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.seconds) !== null && _f !== void 0 ? _f : '0'), Number((_g = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.milliseconds) !== null && _g !== void 0 ? _g : '0'));\n // needed for years less than 1900\n date.setFullYear(Number(year !== null && year !== void 0 ? year : '0'));\n return date;\n}\n\nconst DATE_TIME_SEPARATOR = ', ';\n\nfunction toDateString({ day, month, year, hours, minutes, seconds, milliseconds, }, { dateMode, dateTimeSeparator = DATE_TIME_SEPARATOR, timeMode, }) {\n var _a;\n const safeYear = ((_a = dateMode.match(/y/g)) === null || _a === void 0 ? void 0 : _a.length) === 2 ? year === null || year === void 0 ? void 0 : year.slice(-2) : year;\n const fullMode = dateMode + (timeMode ? dateTimeSeparator + timeMode : '');\n return fullMode\n .replaceAll(/d+/g, day !== null && day !== void 0 ? day : '')\n .replaceAll(/m+/g, month !== null && month !== void 0 ? month : '')\n .replaceAll(/y+/g, safeYear !== null && safeYear !== void 0 ? safeYear : '')\n .replaceAll(/H+/g, hours !== null && hours !== void 0 ? hours : '')\n .replaceAll('MSS', milliseconds !== null && milliseconds !== void 0 ? milliseconds : '')\n .replaceAll(/M+/g, minutes !== null && minutes !== void 0 ? minutes : '')\n .replaceAll(/S+/g, seconds !== null && seconds !== void 0 ? seconds : '')\n .replaceAll(/^\\D+/g, '')\n .replaceAll(/\\D+$/g, '');\n}\n\nconst DATE_SEGMENTS_MAX_VALUES = {\n day: 31,\n month: 12,\n year: 9999,\n};\n\n// eslint-disable-next-line i18n/no-russian-character\nconst DEFAULT_DECIMAL_PSEUDO_SEPARATORS = ['.', ',', 'б', 'ю'];\n\nconst DEFAULT_MIN_DATE = new Date('0001-01-01T00:00');\nconst DEFAULT_MAX_DATE = new Date('9999-12-31T23:59:59.999');\n\nconst DEFAULT_TIME_SEGMENT_MAX_VALUES = {\n hours: 23,\n minutes: 59,\n seconds: 59,\n milliseconds: 999,\n};\nconst DEFAULT_TIME_SEGMENT_MIN_VALUES = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n};\n\n/**\n * {@link https://unicode-table.com/en/00A0/ Non-breaking space}.\n */\nconst CHAR_NO_BREAK_SPACE = '\\u00A0';\n/**\n * {@link https://symbl.cc/en/200B/ Zero width space}.\n */\nconst CHAR_ZERO_WIDTH_SPACE = '\\u200B';\n/**\n * {@link https://unicode-table.com/en/2013/ EN dash}\n * is used to indicate a range of numbers or a span of time.\n * @example 2006–2022\n */\nconst CHAR_EN_DASH = '\\u2013';\n/**\n * {@link https://unicode-table.com/en/2014/ EM dash}\n * is used to mark a break in a sentence.\n * @example Taiga UI — powerful set of open source components for Angular\n * ___\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_HYPHEN}!\n */\nconst CHAR_EM_DASH = '\\u2014';\n/**\n * {@link https://unicode-table.com/en/002D/ Hyphen (minus sign)}\n * is used to combine words.\n * @example well-behaved\n * ___\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_EM_DASH}!\n */\nconst CHAR_HYPHEN = '\\u002D';\n/**\n * {@link https://unicode-table.com/en/2212/ Minus}\n * is used as math operator symbol or before negative digits.\n * ---\n * Can be used as `−`. Don't confuse with {@link CHAR_HYPHEN}\n */\nconst CHAR_MINUS = '\\u2212';\n/**\n * {@link https://symbl.cc/en/30FC/ Katakana-Hiragana Prolonged Sound Mark}\n * is used as prolonged sounds in Japanese.\n */\nconst CHAR_JP_HYPHEN = '\\u30FC';\n/**\n * {@link https://symbl.cc/en/003A/ Colon}\n * is a punctuation mark that connects parts of a text logically.\n * ---\n * is also used as separator in time.\n */\nconst CHAR_COLON = '\\u003A';\n/**\n * {@link https://symbl.cc/en/FF1A/ Full-width colon}\n * is a full-width punctuation mark used to separate parts of a text commonly in Japanese.\n */\nconst CHAR_JP_COLON = '\\uFF1A';\n\nconst ANY_MERIDIEM_CHARACTER_RE = new RegExp(`[${CHAR_NO_BREAK_SPACE}APM]+$`, 'g');\nconst ALL_MERIDIEM_CHARACTERS_RE = new RegExp(`${CHAR_NO_BREAK_SPACE}[AP]M$`, 'g');\n\nconst TIME_FIXED_CHARACTERS = [':', '.'];\n\nconst TIME_SEGMENT_VALUE_LENGTHS = {\n hours: 2,\n minutes: 2,\n seconds: 2,\n milliseconds: 3,\n};\n\nfunction validateDateString({ dateString, dateModeTemplate, dateSegmentsSeparator, offset, selection: [from, to], }) {\n var _a, _b;\n const parsedDate = parseDateString(dateString, dateModeTemplate);\n const dateSegments = Object.entries(parsedDate);\n const segmentsOrder = getDateSegmentsOrder(dateModeTemplate);\n const validatedDateSegments = {};\n for (let i = 0; i < dateSegments.length; i++) {\n const [segmentName, segmentValue] = dateSegments[i];\n const validatedDate = toDateString(validatedDateSegments, {\n dateMode: dateModeTemplate,\n });\n const maxSegmentValue = DATE_SEGMENTS_MAX_VALUES[segmentName];\n const fantomSeparator = validatedDate.length && dateSegmentsSeparator.length;\n const lastSegmentDigitIndex = offset +\n validatedDate.length +\n fantomSeparator +\n getDateSegmentValueLength(dateModeTemplate)[segmentName];\n const isLastSegmentDigitAdded = lastSegmentDigitIndex >= from && lastSegmentDigitIndex === to;\n if (isLastSegmentDigitAdded && Number(segmentValue) > Number(maxSegmentValue)) {\n const nextSegment = segmentsOrder[segmentsOrder.indexOf(segmentName) + 1];\n if (!nextSegment || nextSegment === 'year') {\n // 31.1|0.2010 => Type 9 => 31.1|0.2010\n return { validatedDateString: '', updatedSelection: [from, to] }; // prevent changes\n }\n validatedDateSegments[segmentName] = `0${segmentValue.slice(0, -1)}`;\n dateSegments[i + 1] = [\n nextSegment,\n segmentValue.slice(-1) + ((_b = (_a = dateSegments[i + 1]) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : '').slice(1),\n ];\n continue;\n }\n if (isLastSegmentDigitAdded && Number(segmentValue) < 1) {\n // 31.0|1.2010 => Type 0 => 31.0|1.2010\n return { validatedDateString: '', updatedSelection: [from, to] }; // prevent changes\n }\n validatedDateSegments[segmentName] = segmentValue;\n }\n const validatedDateString = toDateString(validatedDateSegments, {\n dateMode: dateModeTemplate,\n });\n const addedDateSegmentSeparators = validatedDateString.length - dateString.length;\n return {\n validatedDateString,\n updatedSelection: [\n from + addedDateSegmentSeparators,\n to + addedDateSegmentSeparators,\n ],\n };\n}\n\nfunction identity(x) {\n return x;\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() { }\n\n/**\n * Copy-pasted solution from lodash\n * @see https://lodash.com/docs/4.17.15#escapeRegExp\n */\nconst reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nconst reHasRegExpChar = new RegExp(reRegExpChar.source);\nfunction escapeRegExp(str) {\n return str && reHasRegExpChar.test(str)\n ? str.replaceAll(reRegExpChar, String.raw `\\$&`)\n : str;\n}\n\nfunction extractAffixes(value, { prefix, postfix }) {\n var _a, _b;\n const prefixRegExp = new RegExp(`^${escapeRegExp(prefix)}`);\n const postfixRegExp = new RegExp(`${escapeRegExp(postfix)}$`);\n const [extractedPrefix = ''] = (_a = value.match(prefixRegExp)) !== null && _a !== void 0 ? _a : [];\n const [extractedPostfix = ''] = (_b = value.match(postfixRegExp)) !== null && _b !== void 0 ? _b : [];\n return {\n extractedPrefix,\n extractedPostfix,\n cleanValue: extractedPrefix || extractedPostfix\n ? value.slice(extractedPrefix.length, extractedPostfix.length ? -extractedPostfix.length : Infinity)\n : value,\n };\n}\n\nfunction findCommonBeginningSubstr(a, b) {\n let res = '';\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return res;\n }\n res += a[i];\n }\n return res;\n}\n\nfunction isEmpty(entity) {\n return !entity || (typeof entity === 'object' && Object.keys(entity).length === 0);\n}\n\nconst ALL_ZEROES_RE = /^0+$/;\nfunction padWithZeroesUntilValid(segmentValue, paddedMaxValue, prefixedZeroesCount = 0) {\n const paddedSegmentValue = segmentValue.padEnd(paddedMaxValue.length, '0');\n if (Number(paddedSegmentValue) <= Number(paddedMaxValue)) {\n return { validatedSegmentValue: segmentValue, prefixedZeroesCount };\n }\n if (paddedSegmentValue.endsWith('0')) {\n // 00:|00 => Type 9 => 00:09|\n return padWithZeroesUntilValid(`0${segmentValue.slice(0, paddedMaxValue.length - 1)}`, paddedMaxValue, prefixedZeroesCount + 1);\n }\n const valueWithoutLastChar = segmentValue.slice(0, paddedMaxValue.length - 1);\n if (ALL_ZEROES_RE.exec(valueWithoutLastChar)) {\n return { validatedSegmentValue: '', prefixedZeroesCount };\n }\n // |19:00 => Type 2 => 2|0:00\n return padWithZeroesUntilValid(`${valueWithoutLastChar}0`, paddedMaxValue, prefixedZeroesCount);\n}\n\n/**\n * Replace fullwidth colon with half width colon\n * @param fullWidthColon full width colon\n * @returns processed half width colon\n */\nfunction toHalfWidthColon(fullWidthColon) {\n return fullWidthColon.replaceAll(new RegExp(CHAR_JP_COLON, 'g'), CHAR_COLON);\n}\n\n/**\n * Replace fullwidth numbers with half width number\n * @param fullWidthNumber full width number\n * @returns processed half width number\n */\nfunction toHalfWidthNumber(fullWidthNumber) {\n return fullWidthNumber.replaceAll(/[0-9]/g, (s) => String.fromCharCode(s.charCodeAt(0) - 0xfee0));\n}\n\n/**\n * Convert full width colon (:) to half width one (:)\n */\nfunction createColonConvertPreprocessor() {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n return {\n elementState: {\n selection,\n value: toHalfWidthColon(value),\n },\n data: toHalfWidthColon(data),\n };\n };\n}\n\nfunction createDateSegmentsZeroPaddingPostprocessor({ dateModeTemplate, dateSegmentSeparator, splitFn, uniteFn, }) {\n return ({ value, selection }) => {\n var _a;\n const [from, to] = selection;\n const { dateStrings, restPart = '' } = splitFn(value);\n const validatedDateStrings = [];\n let caretShift = 0;\n dateStrings.forEach((dateString) => {\n const parsedDate = parseDateString(dateString, dateModeTemplate);\n const dateSegments = Object.entries(parsedDate);\n const validatedDateSegments = dateSegments.reduce((acc, [segmentName, segmentValue]) => {\n const { validatedSegmentValue, prefixedZeroesCount } = padWithZeroesUntilValid(segmentValue, `${DATE_SEGMENTS_MAX_VALUES[segmentName]}`);\n caretShift += prefixedZeroesCount;\n return Object.assign(Object.assign({}, acc), { [segmentName]: validatedSegmentValue });\n }, {});\n validatedDateStrings.push(toDateString(validatedDateSegments, { dateMode: dateModeTemplate }));\n });\n const validatedValue = uniteFn(validatedDateStrings, value) +\n (((_a = dateStrings[dateStrings.length - 1]) === null || _a === void 0 ? void 0 : _a.endsWith(dateSegmentSeparator))\n ? dateSegmentSeparator\n : '') +\n restPart;\n if (caretShift &&\n validatedValue.slice(to + caretShift, to + caretShift + dateSegmentSeparator.length) === dateSegmentSeparator) {\n /**\n * If `caretShift` > 0, it means that time segment was padded with zero.\n * It is only possible if any character insertion happens.\n * If caret is before `dateSegmentSeparator` => it should be moved after `dateSegmentSeparator`.\n */\n caretShift += dateSegmentSeparator.length;\n }\n return {\n selection: [from + caretShift, to + caretShift],\n value: validatedValue,\n };\n };\n}\n\n/**\n * It replaces pseudo range separators with valid one.\n * @example '01.01.2000_11.11.2000' -> '01.01.2000 - 01.01.2000'\n * @example '01.01.2000_23:59' -> '01.01.2000, 23:59'\n */\nfunction createFirstDateEndSeparatorPreprocessor({ dateModeTemplate, firstDateEndSeparator, dateSegmentSeparator, pseudoFirstDateEndSeparators, }) {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n const firstCompleteDate = getFirstCompleteDate(value, dateModeTemplate);\n const pseudoSeparators = pseudoFirstDateEndSeparators.filter((x) => !firstDateEndSeparator.includes(x) && x !== dateSegmentSeparator);\n const pseudoSeparatorsRE = new RegExp(`[${pseudoSeparators.join('')}]`, 'gi');\n const newValue = firstCompleteDate && value.length > firstCompleteDate.length\n ? firstCompleteDate +\n value\n .slice(firstCompleteDate.length)\n .replace(/^[\\D\\s]*/, firstDateEndSeparator)\n : value;\n const caretShift = newValue.length - value.length;\n return {\n elementState: {\n selection: [from + caretShift, to + caretShift],\n value: newValue,\n },\n data: data.replace(pseudoSeparatorsRE, firstDateEndSeparator),\n };\n };\n}\n\n/**\n * Convert full width numbers like 1, 2 to half width numbers 1, 2\n */\nfunction createFullWidthToHalfWidthPreprocessor() {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n return {\n elementState: {\n selection,\n value: toHalfWidthNumber(value),\n },\n data: toHalfWidthNumber(data),\n };\n };\n}\n\nfunction createTimeMaskExpression(mode) {\n return Array.from(mode.replace(' AA', ''))\n .map((char) => (TIME_FIXED_CHARACTERS.includes(char) ? char : /\\d/))\n .concat(mode.includes('AA') ? [CHAR_NO_BREAK_SPACE, /[AP]/i, /M/i] : []);\n}\n\nfunction padTimeSegments(timeSegments, pad) {\n return Object.fromEntries(Object.entries(timeSegments).map(([segmentName, segmentValue]) => [\n segmentName,\n pad(String(segmentValue), TIME_SEGMENT_VALUE_LENGTHS[segmentName]),\n ]));\n}\n\nfunction padStartTimeSegments(timeSegments) {\n return padTimeSegments(timeSegments, (value, length) => value.padStart(length, '0'));\n}\n\nconst SEGMENT_FULL_NAME = {\n HH: 'hours',\n MM: 'minutes',\n SS: 'seconds',\n MSS: 'milliseconds',\n};\n/**\n * @param timeString can be with/without fixed characters\n */\nfunction parseTimeString(timeString, timeMode) {\n const onlyDigits = timeString.replaceAll(/\\D+/g, '');\n let offset = 0;\n return Object.fromEntries(timeMode\n .split(/\\W/)\n .filter((segmentAbbr) => SEGMENT_FULL_NAME[segmentAbbr])\n .map((segmentAbbr) => {\n const segmentValue = onlyDigits.slice(offset, offset + segmentAbbr.length);\n offset += segmentAbbr.length;\n return [SEGMENT_FULL_NAME[segmentAbbr], segmentValue];\n }));\n}\n\nconst LEADING_NON_DIGITS = /^\\D*/;\nconst TRAILING_NON_DIGITS = /\\D*$/;\nfunction toTimeString({ hours = '', minutes = '', seconds = '', milliseconds = '', }) {\n return `${hours}:${minutes}:${seconds}.${milliseconds}`\n .replace(LEADING_NON_DIGITS, '')\n .replace(TRAILING_NON_DIGITS, '');\n}\n\nconst TRAILING_TIME_SEGMENT_SEPARATOR_REG = new RegExp(`[${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}]$`);\n/**\n * Pads invalid time segment with zero to make it valid.\n * @example 00:|00 => Type 9 (too much for the first digit of minutes) => 00:09|\n * @example |19:00 => Type 2 (29 - invalid value for hours) => 2|0:00\n */\nfunction enrichTimeSegmentsWithZeroes({ value, selection }, { mode, timeSegmentMaxValues = DEFAULT_TIME_SEGMENT_MAX_VALUES, }) {\n const [from, to] = selection;\n const parsedTime = parseTimeString(value, mode);\n const possibleTimeSegments = Object.entries(parsedTime);\n const paddedMaxValues = padStartTimeSegments(timeSegmentMaxValues);\n const validatedTimeSegments = {};\n let paddedZeroes = 0;\n for (const [segmentName, segmentValue] of possibleTimeSegments) {\n const maxSegmentValue = paddedMaxValues[segmentName];\n const { validatedSegmentValue, prefixedZeroesCount } = padWithZeroesUntilValid(segmentValue, String(maxSegmentValue));\n paddedZeroes += prefixedZeroesCount;\n validatedTimeSegments[segmentName] = validatedSegmentValue;\n }\n const [leadingNonDigitCharacters = ''] = value.match(/^\\D+(?=\\d)/g) || []; // prefix\n const [trailingNonDigitCharacters = ''] = value.match(/\\D+$/g) || []; // trailing segment separators / meridiem characters / postfix\n const validatedTimeString = leadingNonDigitCharacters +\n toTimeString(validatedTimeSegments) +\n trailingNonDigitCharacters;\n const addedDateSegmentSeparators = Math.max(validatedTimeString.length - value.length - paddedZeroes, 0);\n let newFrom = from + paddedZeroes + addedDateSegmentSeparators;\n let newTo = to + paddedZeroes + addedDateSegmentSeparators;\n if (newFrom === newTo &&\n paddedZeroes &&\n // if next character after cursor is time segment separator\n validatedTimeString.slice(0, newTo + 1).match(TRAILING_TIME_SEGMENT_SEPARATOR_REG)) {\n newFrom++;\n newTo++;\n }\n return {\n value: validatedTimeString,\n selection: [newFrom, newTo],\n };\n}\n\nfunction padEndTimeSegments(timeSegments) {\n return padTimeSegments(timeSegments, (value, length) => value.padEnd(length, '0'));\n}\n\n/**\n * Prevent insertion if any time segment will become invalid\n * (and even zero padding won't help with it).\n * @example 2|0:00 => Type 9 => 2|0:00\n */\nfunction createInvalidTimeSegmentInsertionPreprocessor({ timeMode, timeSegmentMinValues = DEFAULT_TIME_SEGMENT_MIN_VALUES, timeSegmentMaxValues = DEFAULT_TIME_SEGMENT_MAX_VALUES, parseValue = (x) => ({ timeString: x }), }) {\n const invalidCharsRegExp = new RegExp(`[^\\\\d${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}]+`);\n return ({ elementState, data }, actionType) => {\n if (actionType !== 'insert') {\n return { elementState, data };\n }\n const { value, selection } = elementState;\n const [from, rawTo] = selection;\n const newCharacters = data.replace(invalidCharsRegExp, '');\n const to = rawTo + newCharacters.length; // to be conformed with `overwriteMode: replace`\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\n const { timeString, restValue = '' } = parseValue(newPossibleValue);\n const timeSegments = Object.entries(parseTimeString(timeString, timeMode));\n let offset = restValue.length;\n for (const [segmentName, stringifiedSegmentValue] of timeSegments) {\n const minSegmentValue = timeSegmentMinValues[segmentName];\n const maxSegmentValue = timeSegmentMaxValues[segmentName];\n const segmentValue = Number(stringifiedSegmentValue);\n const lastSegmentDigitIndex = offset + TIME_SEGMENT_VALUE_LENGTHS[segmentName];\n if (lastSegmentDigitIndex >= from &&\n lastSegmentDigitIndex <= to &&\n segmentValue !== clamp(segmentValue, minSegmentValue, maxSegmentValue)) {\n return { elementState, data: '' }; // prevent insertion\n }\n offset +=\n stringifiedSegmentValue.length +\n // any time segment separator\n 1;\n }\n return { elementState, data };\n };\n}\n\nfunction createMeridiemPreprocessor(timeMode) {\n if (!timeMode.includes('AA')) {\n return identity;\n }\n const mainMeridiemCharRE = /^[AP]$/gi;\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const newValue = value.toUpperCase();\n const newData = data.toUpperCase();\n if (newValue.match(ALL_MERIDIEM_CHARACTERS_RE) &&\n newData.match(mainMeridiemCharRE)) {\n return {\n elementState: {\n value: newValue.replaceAll(ALL_MERIDIEM_CHARACTERS_RE, ''),\n selection,\n },\n data: `${newData}M`,\n };\n }\n return { elementState: { selection, value: newValue }, data: newData };\n };\n}\nfunction createMeridiemPostprocessor(timeMode) {\n if (!timeMode.includes('AA')) {\n return identity;\n }\n return ({ value, selection }, initialElementState) => {\n if (!value.match(ANY_MERIDIEM_CHARACTER_RE) ||\n value.match(ALL_MERIDIEM_CHARACTERS_RE)) {\n return { value, selection };\n }\n const [from, to] = selection;\n // any meridiem character was deleted\n if (initialElementState.value.match(ALL_MERIDIEM_CHARACTERS_RE)) {\n const newValue = value.replace(ANY_MERIDIEM_CHARACTER_RE, '');\n return {\n value: newValue,\n selection: [\n Math.min(from, newValue.length),\n Math.min(to, newValue.length),\n ],\n };\n }\n const fullMeridiem = `${CHAR_NO_BREAK_SPACE}${value.includes('P') ? 'P' : 'A'}M`;\n const newValue = value.replace(ANY_MERIDIEM_CHARACTER_RE, (x) => x !== CHAR_NO_BREAK_SPACE ? fullMeridiem : x);\n return {\n value: newValue,\n selection: to >= newValue.indexOf(fullMeridiem)\n ? [newValue.length, newValue.length]\n : selection,\n };\n };\n}\n\nfunction raiseSegmentValueToMin(segments, fullMode) {\n const segmentsLength = getDateSegmentValueLength(fullMode);\n return Object.fromEntries(Object.entries(segments).map(([key, value]) => {\n const segmentLength = segmentsLength[key];\n return [\n key,\n value.length === segmentLength && /^0+$/.exec(value)\n ? '1'.padStart(segmentLength, '0')\n : value,\n ];\n }));\n}\n\nconst LEAP_YEAR = '1972';\nfunction createMinMaxDatePostprocessor({ dateModeTemplate, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, rangeSeparator = '', dateSegmentSeparator = '.', }) {\n return ({ value, selection }) => {\n const endsWithRangeSeparator = rangeSeparator && value.endsWith(rangeSeparator);\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\n let validatedValue = '';\n for (const dateString of dateStrings) {\n validatedValue += validatedValue ? rangeSeparator : '';\n const parsedDate = parseDateString(dateString, dateModeTemplate);\n if (!isDateStringComplete(dateString, dateModeTemplate)) {\n const fixedDate = raiseSegmentValueToMin(parsedDate, dateModeTemplate);\n const fixedValue = toDateString(fixedDate, { dateMode: dateModeTemplate });\n const tail = dateString.endsWith(dateSegmentSeparator)\n ? dateSegmentSeparator\n : '';\n validatedValue += fixedValue + tail;\n continue;\n }\n const date = segmentsToDate(Object.assign({ year: LEAP_YEAR }, parsedDate));\n const clampedDate = clamp(date, min, max);\n validatedValue += toDateString(dateToSegments(clampedDate), {\n dateMode: dateModeTemplate,\n });\n }\n return {\n selection,\n value: validatedValue + (endsWithRangeSeparator ? rangeSeparator : ''),\n };\n };\n}\n\nfunction normalizeDatePreprocessor({ dateModeTemplate, dateSegmentsSeparator, rangeSeparator = '', dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\n return ({ elementState, data }) => {\n const templateSegments = dateModeTemplate.split(dateSegmentsSeparator);\n const includesTime = data.includes(dateTimeSeparator);\n const dateSegments = data\n .slice(0, includesTime ? data.indexOf(dateTimeSeparator) : Infinity)\n .split(/\\D/)\n .filter(Boolean);\n if (!dateSegments.length || dateSegments.length % templateSegments.length !== 0) {\n return { elementState, data };\n }\n const dates = dateSegments.reduce((dates, segment, index) => {\n var _a;\n const template = (_a = templateSegments[index % templateSegments.length]) !== null && _a !== void 0 ? _a : '';\n const dateIndex = Math.trunc(index / templateSegments.length);\n const isLastDateSegment = index % templateSegments.length === templateSegments.length - 1;\n if (!dates[dateIndex]) {\n dates[dateIndex] = '';\n }\n dates[dateIndex] += isLastDateSegment\n ? segment\n : `${segment.padStart(template.length, '0')}${dateSegmentsSeparator}`;\n return dates;\n }, []);\n return {\n elementState,\n data: includesTime\n ? `${dates[0]}${data.slice(data.indexOf(dateTimeSeparator))}`\n : dates.join(rangeSeparator),\n };\n };\n}\n\nfunction maskitoPostfixPostprocessorGenerator(postfix) {\n const postfixRE = new RegExp(`${escapeRegExp(postfix)}$`);\n return postfix\n ? ({ value, selection }, initialElementState) => {\n if (!value && !initialElementState.value.endsWith(postfix)) {\n // cases when developer wants input to be empty (programmatically)\n return { value, selection };\n }\n if (!value.endsWith(postfix) &&\n !initialElementState.value.endsWith(postfix)) {\n return { selection, value: value + postfix };\n }\n const initialValueBeforePostfix = initialElementState.value.replace(postfixRE, '');\n const postfixWasModified = initialElementState.selection[1] > initialValueBeforePostfix.length;\n const alreadyExistedValueBeforePostfix = findCommonBeginningSubstr(initialValueBeforePostfix, value);\n return {\n selection,\n value: Array.from(postfix)\n .reverse()\n .reduce((newValue, char, index) => {\n const i = newValue.length - 1 - index;\n const isInitiallyMirroredChar = alreadyExistedValueBeforePostfix[i] === char &&\n postfixWasModified;\n return newValue[i] !== char || isInitiallyMirroredChar\n ? newValue.slice(0, i + 1) + char + newValue.slice(i + 1)\n : newValue;\n }, value),\n };\n }\n : identity;\n}\n\nfunction maskitoPrefixPostprocessorGenerator(prefix) {\n return prefix\n ? ({ value, selection }, initialElementState) => {\n if (value.startsWith(prefix) || // already valid\n (!value && !initialElementState.value.startsWith(prefix)) // cases when developer wants input to be empty\n ) {\n return { value, selection };\n }\n const [from, to] = selection;\n const prefixedValue = Array.from(prefix).reduce((modifiedValue, char, i) => modifiedValue[i] === char\n ? modifiedValue\n : modifiedValue.slice(0, i) + char + modifiedValue.slice(i), value);\n const addedCharsCount = prefixedValue.length - value.length;\n return {\n selection: [from + addedCharsCount, to + addedCharsCount],\n value: prefixedValue,\n };\n }\n : identity;\n}\n\nfunction createValidDatePreprocessor({ dateModeTemplate, dateSegmentsSeparator, rangeSeparator = '', }) {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n if (data === dateSegmentsSeparator) {\n return {\n elementState,\n data: selection[0] === value.length ? data : '',\n };\n }\n if (!data.replaceAll(/\\D/g, '')) {\n return { elementState, data };\n }\n const newCharacters = data.replaceAll(new RegExp(`[^\\\\d${escapeRegExp(dateSegmentsSeparator)}${rangeSeparator}]`, 'g'), '');\n const [from, rawTo] = selection;\n let to = rawTo + data.length;\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\n const dateStrings = parseDateRangeString(newPossibleValue, dateModeTemplate, rangeSeparator);\n let validatedValue = '';\n const hasRangeSeparator = Boolean(rangeSeparator) && newPossibleValue.includes(rangeSeparator);\n for (const dateString of dateStrings) {\n const { validatedDateString, updatedSelection } = validateDateString({\n dateString,\n dateModeTemplate,\n dateSegmentsSeparator,\n offset: validatedValue.length,\n selection: [from, to],\n });\n if (dateString && !validatedDateString) {\n return { elementState, data: '' }; // prevent changes\n }\n to = updatedSelection[1];\n validatedValue +=\n hasRangeSeparator && !validatedValue\n ? validatedDateString + rangeSeparator\n : validatedDateString;\n }\n const newData = validatedValue.slice(from, to);\n return {\n elementState: {\n selection,\n value: validatedValue.slice(0, from) +\n newData\n .split(dateSegmentsSeparator)\n .map((segment) => '0'.repeat(segment.length))\n .join(dateSegmentsSeparator) +\n validatedValue.slice(to),\n },\n data: newData,\n };\n };\n}\n\nfunction maskitoEventHandler(name, handler, eventListenerOptions) {\n return (element, maskitoOptions) => {\n const listener = () => handler(element, maskitoOptions);\n element.addEventListener(name, listener, eventListenerOptions);\n return () => element.removeEventListener(name, listener, eventListenerOptions);\n };\n}\n\nfunction maskitoAddOnFocusPlugin(value) {\n return maskitoEventHandler('focus', (element) => {\n if (!element.value) {\n maskitoUpdateElement(element, value);\n }\n });\n}\n\nfunction maskitoSelectionChangeHandler(handler) {\n return (element, options) => {\n const document = element.ownerDocument;\n let isPointerDown = 0;\n const onPointerDown = () => isPointerDown++;\n const onPointerUp = () => {\n isPointerDown = Math.max(--isPointerDown, 0);\n };\n const listener = () => {\n if (!element.matches(':focus')) {\n return;\n }\n if (isPointerDown) {\n return document.addEventListener('mouseup', listener, {\n once: true,\n passive: true,\n });\n }\n handler(element, options);\n };\n document.addEventListener('selectionchange', listener, { passive: true });\n // Safari does not fire `selectionchange` on focus after programmatic update of textfield value\n element.addEventListener('focus', listener, { passive: true });\n element.addEventListener('mousedown', onPointerDown, { passive: true });\n document.addEventListener('mouseup', onPointerUp, { passive: true });\n return () => {\n document.removeEventListener('selectionchange', listener);\n element.removeEventListener('focus', listener);\n element.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('mouseup', onPointerUp);\n };\n };\n}\n\nfunction maskitoCaretGuard(guard) {\n return maskitoSelectionChangeHandler((element) => {\n var _a, _b;\n const start = (_a = element.selectionStart) !== null && _a !== void 0 ? _a : 0;\n const end = (_b = element.selectionEnd) !== null && _b !== void 0 ? _b : 0;\n const [fromLimit, toLimit] = guard(element.value, [start, end]);\n if (fromLimit > start || toLimit < end) {\n element.setSelectionRange(clamp(start, fromLimit, toLimit), clamp(end, fromLimit, toLimit));\n }\n });\n}\n\nconst maskitoRejectEvent = (element) => {\n const listener = () => {\n const value = element.value;\n element.addEventListener('beforeinput', (event) => {\n if (event.defaultPrevented && value === element.value) {\n element.dispatchEvent(new CustomEvent('maskitoReject', { bubbles: true }));\n }\n }, { once: true });\n };\n element.addEventListener('beforeinput', listener, true);\n return () => element.removeEventListener('beforeinput', listener, true);\n};\n\nfunction maskitoRemoveOnBlurPlugin(value) {\n return maskitoEventHandler('blur', (element) => {\n if (element.value === value) {\n maskitoUpdateElement(element, '');\n }\n });\n}\n\nfunction createMeridiemSteppingPlugin(meridiemStartIndex) {\n if (meridiemStartIndex < 0) {\n return noop;\n }\n return (element) => {\n const listener = (event) => {\n const caretIndex = Number(element.selectionStart);\n const value = element.value.toUpperCase();\n if ((event.key !== 'ArrowUp' && event.key !== 'ArrowDown') ||\n caretIndex < meridiemStartIndex) {\n return;\n }\n event.preventDefault();\n // eslint-disable-next-line no-nested-ternary\n const meridiemMainCharacter = value.includes('A')\n ? 'P'\n : value.includes('P') || event.key === 'ArrowUp'\n ? 'A'\n : 'P';\n const newMeridiem = `${CHAR_NO_BREAK_SPACE}${meridiemMainCharacter}M`;\n maskitoUpdateElement(element, {\n value: value.length === meridiemStartIndex\n ? value + newMeridiem\n : value.replace(ANY_MERIDIEM_CHARACTER_RE, newMeridiem),\n selection: [caretIndex, caretIndex],\n });\n };\n element.addEventListener('keydown', listener);\n return () => element.removeEventListener('keydown', listener);\n };\n}\n\nfunction createTimeSegmentsSteppingPlugin({ step, fullMode, timeSegmentMaxValues, }) {\n const segmentsIndexes = createTimeSegmentsIndexes(fullMode);\n return step <= 0\n ? noop\n : (element) => {\n const listener = (event) => {\n var _a;\n if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown') {\n return;\n }\n event.preventDefault();\n const selectionStart = (_a = element.selectionStart) !== null && _a !== void 0 ? _a : 0;\n const activeSegment = getActiveSegment({\n segmentsIndexes,\n selectionStart,\n });\n if (!activeSegment) {\n return;\n }\n const updatedValue = updateSegmentValue({\n selection: segmentsIndexes.get(activeSegment),\n value: element.value,\n toAdd: event.key === 'ArrowUp' ? step : -step,\n max: timeSegmentMaxValues[activeSegment],\n });\n maskitoUpdateElement(element, {\n value: updatedValue,\n selection: [selectionStart, selectionStart],\n });\n };\n element.addEventListener('keydown', listener);\n return () => element.removeEventListener('keydown', listener);\n };\n}\nfunction createTimeSegmentsIndexes(fullMode) {\n return new Map([\n ['hours', getSegmentRange(fullMode, 'HH')],\n ['milliseconds', getSegmentRange(fullMode, 'MSS')],\n ['minutes', getSegmentRange(fullMode, 'MM')],\n ['seconds', getSegmentRange(fullMode, 'SS')],\n ]);\n}\nfunction getSegmentRange(mode, segment) {\n const index = mode.indexOf(segment);\n return index === -1 ? [-1, -1] : [index, index + segment.length];\n}\nfunction getActiveSegment({ segmentsIndexes, selectionStart, }) {\n for (const [segmentName, segmentRange] of segmentsIndexes.entries()) {\n const [from, to] = segmentRange;\n if (from <= selectionStart && selectionStart <= to) {\n return segmentName;\n }\n }\n return null;\n}\nfunction updateSegmentValue({ selection, value, toAdd, max, }) {\n const [from, to] = selection;\n const segmentValue = Number(value.slice(from, to).padEnd(to - from, '0'));\n const newSegmentValue = mod(segmentValue + toAdd, max + 1);\n return (value.slice(0, from) +\n String(newSegmentValue).padStart(to - from, '0') +\n value.slice(to, value.length));\n}\nfunction mod(value, max) {\n if (value < 0) {\n value += Math.floor(Math.abs(value) / max + 1) * max;\n }\n return value % max;\n}\n\nfunction maskitoWithPlaceholder(placeholder, focusedOnly = false) {\n let lastClearValue = '';\n let action = 'validation';\n const removePlaceholder = (value) => {\n for (let i = value.length - 1; i >= lastClearValue.length; i--) {\n if (value[i] !== placeholder[i]) {\n return value.slice(0, i + 1);\n }\n }\n return value.slice(0, lastClearValue.length);\n };\n const plugins = [maskitoCaretGuard((value) => [0, removePlaceholder(value).length])];\n let focused = false;\n if (focusedOnly) {\n const focus = maskitoEventHandler('focus', (element) => {\n focused = true;\n maskitoUpdateElement(element, element.value + placeholder.slice(element.value.length));\n }, { capture: true });\n const blur = maskitoEventHandler('blur', (element) => {\n focused = false;\n maskitoUpdateElement(element, removePlaceholder(element.value));\n }, { capture: true });\n plugins.push(focus, blur);\n }\n return {\n plugins,\n removePlaceholder,\n preprocessors: [\n ({ elementState, data }, actionType) => {\n action = actionType;\n const { value, selection } = elementState;\n return {\n elementState: {\n selection,\n value: removePlaceholder(value),\n },\n data,\n };\n },\n ],\n postprocessors: [\n ({ value, selection }, initialElementState) => {\n lastClearValue = value;\n const justPlaceholderRemoval = value +\n placeholder.slice(value.length, initialElementState.value.length) ===\n initialElementState.value;\n if (action === 'validation' && justPlaceholderRemoval) {\n /**\n * If `value` still equals to `initialElementState.value`,\n * then it means that value is patched programmatically (from Maskito's plugin or externally).\n * In this case, we don't want to mutate value and automatically add/remove placeholder.\n * ___\n * For example, developer wants to remove manually placeholder (+ do something else with value) on blur.\n * Without this condition, placeholder will be unexpectedly added again.\n */\n return { selection, value: initialElementState.value };\n }\n const newValue = focused || !focusedOnly\n ? value + placeholder.slice(value.length)\n : value;\n if (newValue === initialElementState.value &&\n action === 'deleteBackward') {\n const [caretIndex] = initialElementState.selection;\n return {\n value: newValue,\n selection: [caretIndex, caretIndex],\n };\n }\n return { value: newValue, selection };\n },\n ],\n };\n}\n\nfunction createZeroPlaceholdersPreprocessor(postfix = '') {\n const isLastChar = (value, [_, to]) => to >= value.length - postfix.length;\n return ({ elementState }, actionType) => {\n const { value, selection } = elementState;\n if (!value || isLastChar(value, selection)) {\n return { elementState };\n }\n const [from, to] = selection;\n const zeroes = value.slice(from, to).replaceAll(/\\d/g, '0');\n const newValue = value.slice(0, from) + zeroes + value.slice(to);\n if (!zeroes.replaceAll(/\\D/g, '')) {\n return { elementState };\n }\n if (actionType === 'validation' || (actionType === 'insert' && from === to)) {\n return {\n elementState: { selection, value: newValue },\n };\n }\n return {\n elementState: {\n selection: actionType === 'deleteBackward' || actionType === 'insert'\n ? [from, from]\n : [to, to],\n value: newValue,\n },\n };\n };\n}\n\nfunction maskitoDateOptionsGenerator({ mode, separator = '.', max, min, }) {\n const dateModeTemplate = mode.split('/').join(separator);\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: Array.from(dateModeTemplate).map((char) => separator.includes(char) ? char : /\\d/), overwriteMode: 'replace', preprocessors: [\n createFullWidthToHalfWidthPreprocessor(),\n createZeroPlaceholdersPreprocessor(),\n normalizeDatePreprocessor({\n dateModeTemplate,\n dateSegmentsSeparator: separator,\n }),\n createValidDatePreprocessor({\n dateModeTemplate,\n dateSegmentsSeparator: separator,\n }),\n ], postprocessors: [\n createDateSegmentsZeroPaddingPostprocessor({\n dateModeTemplate,\n dateSegmentSeparator: separator,\n splitFn: (value) => ({ dateStrings: [value] }),\n uniteFn: ([dateString = '']) => dateString,\n }),\n createMinMaxDatePostprocessor({\n min,\n max,\n dateModeTemplate,\n dateSegmentSeparator: separator,\n }),\n ] });\n}\n\nfunction maskitoParseDate(value, { mode, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE }) {\n if (value.length < mode.length) {\n return null;\n }\n const dateSegments = parseDateString(value, mode);\n const parsedDate = segmentsToDate(dateSegments);\n return clamp(parsedDate, min, max);\n}\n\nconst formatter = Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n});\nfunction toDateSegments(date) {\n return formatter\n .formatToParts(date)\n .reduce((acc, part) => (Object.assign(Object.assign({}, acc), { [part.type]: part.value })), {});\n}\n\nfunction maskitoStringifyDate(date, { mode, separator = '.', min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, }) {\n const validatedDate = clamp(date, min, max);\n const segments = toDateSegments(validatedDate);\n return toDateString(segments, {\n dateMode: mode.replaceAll('/', separator),\n });\n}\n\nconst POSSIBLE_DATE_RANGE_SEPARATOR = [\n CHAR_HYPHEN,\n CHAR_EN_DASH,\n CHAR_EM_DASH,\n CHAR_MINUS,\n CHAR_JP_HYPHEN,\n];\n\nfunction createMinMaxRangeLengthPostprocessor({ dateModeTemplate, rangeSeparator, minLength, maxLength, max = DEFAULT_MAX_DATE, }) {\n if (isEmpty(minLength) && isEmpty(maxLength)) {\n return identity;\n }\n return ({ value, selection }) => {\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\n if (dateStrings.length !== 2 ||\n dateStrings.some((date) => !isDateStringComplete(date, dateModeTemplate))) {\n return { value, selection };\n }\n const [fromDate, toDate] = dateStrings.map((dateString) => segmentsToDate(parseDateString(dateString, dateModeTemplate)));\n if (!fromDate || !toDate) {\n return { value, selection };\n }\n const minDistantToDate = appendDate(fromDate, Object.assign(Object.assign({}, minLength), { \n // 06.02.2023 - 07.02.2023 => {minLength: {day: 3}} => 06.02.2023 - 08.02.2023\n // \"from\"-day is included in the range\n day: (minLength === null || minLength === void 0 ? void 0 : minLength.day) && minLength.day - 1 }));\n const maxDistantToDate = !isEmpty(maxLength)\n ? appendDate(fromDate, Object.assign(Object.assign({}, maxLength), { day: (maxLength === null || maxLength === void 0 ? void 0 : maxLength.day) && maxLength.day - 1 }))\n : max;\n const minLengthClampedToDate = clamp(toDate, minDistantToDate, max);\n const minMaxLengthClampedToDate = minLengthClampedToDate > maxDistantToDate\n ? maxDistantToDate\n : minLengthClampedToDate;\n return {\n selection,\n value: dateStrings[0] +\n rangeSeparator +\n toDateString(dateToSegments(minMaxLengthClampedToDate), {\n dateMode: dateModeTemplate,\n }),\n };\n };\n}\n\nfunction createSwapDatesPostprocessor({ dateModeTemplate, rangeSeparator, }) {\n return ({ value, selection }) => {\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\n const isDateRangeComplete = dateStrings.length === 2 &&\n dateStrings.every((date) => isDateStringComplete(date, dateModeTemplate));\n const [from, to] = selection;\n const caretAtTheEnd = from >= value.length;\n const allValueSelected = from === 0 && to >= value.length; // dropping text inside with a pointer\n if (!(caretAtTheEnd || allValueSelected) || !isDateRangeComplete) {\n return { value, selection };\n }\n const [fromDate, toDate] = dateStrings.map((dateString) => segmentsToDate(parseDateString(dateString, dateModeTemplate)));\n return {\n selection,\n value: fromDate && toDate && fromDate > toDate\n ? dateStrings.reverse().join(rangeSeparator)\n : value,\n };\n };\n}\n\nfunction maskitoDateRangeOptionsGenerator({ mode, min, max, minLength, maxLength, dateSeparator = '.', rangeSeparator = `${CHAR_NO_BREAK_SPACE}${CHAR_EN_DASH}${CHAR_NO_BREAK_SPACE}`, }) {\n const dateModeTemplate = mode.split('/').join(dateSeparator);\n const dateMask = Array.from(dateModeTemplate).map((char) => dateSeparator.includes(char) ? char : /\\d/);\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: [...dateMask, ...Array.from(rangeSeparator), ...dateMask], overwriteMode: 'replace', preprocessors: [\n createFullWidthToHalfWidthPreprocessor(),\n createFirstDateEndSeparatorPreprocessor({\n dateModeTemplate,\n dateSegmentSeparator: dateSeparator,\n firstDateEndSeparator: rangeSeparator,\n pseudoFirstDateEndSeparators: POSSIBLE_DATE_RANGE_SEPARATOR,\n }),\n createZeroPlaceholdersPreprocessor(),\n normalizeDatePreprocessor({\n dateModeTemplate,\n rangeSeparator,\n dateSegmentsSeparator: dateSeparator,\n }),\n createValidDatePreprocessor({\n dateModeTemplate,\n rangeSeparator,\n dateSegmentsSeparator: dateSeparator,\n }),\n ], postprocessors: [\n createDateSegmentsZeroPaddingPostprocessor({\n dateModeTemplate,\n dateSegmentSeparator: dateSeparator,\n splitFn: (value) => ({\n dateStrings: parseDateRangeString(value, dateModeTemplate, rangeSeparator),\n }),\n uniteFn: (validatedDateStrings, initialValue) => validatedDateStrings.reduce((acc, dateString, dateIndex) => acc +\n dateString +\n (!dateIndex && initialValue.includes(rangeSeparator)\n ? rangeSeparator\n : ''), ''),\n }),\n createMinMaxDatePostprocessor({\n min,\n max,\n dateModeTemplate,\n rangeSeparator,\n dateSegmentSeparator: dateSeparator,\n }),\n createMinMaxRangeLengthPostprocessor({\n dateModeTemplate,\n minLength,\n maxLength,\n max,\n rangeSeparator,\n }),\n createSwapDatesPostprocessor({\n dateModeTemplate,\n rangeSeparator,\n }),\n ] });\n}\n\nfunction isDateTimeStringComplete(dateTimeString, { dateMode, timeMode, dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\n var _a;\n return (dateTimeString.length >=\n dateMode.length + timeMode.length + dateTimeSeparator.length &&\n ((_a = dateTimeString.split(dateTimeSeparator)[0]) !== null && _a !== void 0 ? _a : '')\n .split(/\\D/)\n .every((segment) => !/^0+$/.exec(segment)));\n}\n\nfunction maskitoTimeOptionsGenerator({ mode, timeSegmentMaxValues = {}, timeSegmentMinValues = {}, step = 0, prefix = '', postfix = '', }) {\n const hasMeridiem = mode.includes('AA');\n const enrichedTimeSegmentMaxValues = Object.assign(Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MAX_VALUES), (hasMeridiem ? { hours: 12 } : {})), timeSegmentMaxValues);\n const enrichedTimeSegmentMinValues = Object.assign(Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MIN_VALUES), (hasMeridiem ? { hours: 1 } : {})), timeSegmentMinValues);\n const maskExpression = [...prefix, ...createTimeMaskExpression(mode)];\n return {\n mask: postfix\n ? ({ value }) => cutExpression(maskExpression, value).concat(...postfix)\n : maskExpression,\n preprocessors: [\n createFullWidthToHalfWidthPreprocessor(),\n createColonConvertPreprocessor(),\n createZeroPlaceholdersPreprocessor(postfix),\n createMeridiemPreprocessor(mode),\n createInvalidTimeSegmentInsertionPreprocessor({\n timeMode: mode,\n timeSegmentMinValues: enrichedTimeSegmentMinValues,\n timeSegmentMaxValues: enrichedTimeSegmentMaxValues,\n }),\n ],\n postprocessors: [\n createMeridiemPostprocessor(mode),\n (elementState) => enrichTimeSegmentsWithZeroes(elementState, {\n mode,\n timeSegmentMaxValues: enrichedTimeSegmentMaxValues,\n }),\n maskitoPrefixPostprocessorGenerator(prefix),\n maskitoPostfixPostprocessorGenerator(postfix),\n ],\n plugins: [\n createTimeSegmentsSteppingPlugin({\n fullMode: mode,\n step,\n timeSegmentMaxValues: enrichedTimeSegmentMaxValues,\n }),\n createMeridiemSteppingPlugin(mode.indexOf('AA')),\n ],\n overwriteMode: 'replace',\n };\n}\n/**\n * Without cutting, the mask expression removes postfix on the last digit deletion\n * ___\n * Case 1 (static pattern mask expression)\n * Mask expression is [/\\d/, /\\d/, ':', /\\d/, /\\d/, ' left']\n * 12:34| left => Press Backspace => 12:3|\n * Mask correctly removes postfix because it's fixed characters after not yet inserted 4th digit.\n * ___\n * Case 2 (dynamic pattern mask expression)\n * Mask expression is [/\\d/, /\\d/, ':', /\\d/, /\\d/, ' left'] & textfield contains `12:34 left`\n * 12:34| left => Press Backspace => Mask expression becomes [/\\d/, /\\d/, ':', /\\d/, ' left'] => 12:3| left\n * Mask correctly does not remove postfix because it's trailing fixed characters\n * and all non-fixed characters were already inserted.\n */\nfunction cutExpression(expression, value) {\n let digitsCount = Math.min(value.replaceAll(/\\D/g, '').length, expression.filter((x) => typeof x !== 'string').length) || 1;\n const afterLastDigit = expression.findIndex((x) => typeof x !== 'string' && !--digitsCount) + 1;\n return expression.slice(0, afterLastDigit);\n}\n\n/**\n * Converts a formatted time string to milliseconds based on the given `options.mode`.\n *\n * @param maskedTime a formatted time string by {@link maskitoTimeOptionsGenerator} or {@link maskitoStringifyTime}\n * @param params\n */\nfunction maskitoParseTime(maskedTime, { mode, timeSegmentMaxValues = {} }) {\n var _a, _b, _c, _d;\n const maxValues = Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MAX_VALUES), timeSegmentMaxValues);\n const msInSecond = maxValues.milliseconds + 1;\n const msInMinute = (maxValues.seconds + 1) * msInSecond;\n const msInHour = (maxValues.minutes + 1) * msInMinute;\n const parsedTime = padEndTimeSegments(parseTimeString(maskedTime, mode));\n return (Number((_a = parsedTime.hours) !== null && _a !== void 0 ? _a : '') * msInHour +\n Number((_b = parsedTime.minutes) !== null && _b !== void 0 ? _b : '') * msInMinute +\n Number((_c = parsedTime.seconds) !== null && _c !== void 0 ? _c : '') * msInSecond +\n Number((_d = parsedTime.milliseconds) !== null && _d !== void 0 ? _d : ''));\n}\n\n/**\n * Converts milliseconds to a formatted time string based on the given `options.mode`.\n *\n * @param milliseconds unsigned integer milliseconds\n * @param params\n */\nfunction maskitoStringifyTime(milliseconds, { mode, timeSegmentMaxValues = {} }) {\n const maxValues = Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MAX_VALUES), timeSegmentMaxValues);\n const msInSecond = maxValues.milliseconds + 1;\n const msInMinute = (maxValues.seconds + 1) * msInSecond;\n const msInHour = (maxValues.minutes + 1) * msInMinute;\n const hours = Math.trunc(milliseconds / msInHour);\n milliseconds -= hours * msInHour;\n const minutes = Math.trunc(milliseconds / msInMinute);\n milliseconds -= minutes * msInMinute;\n const seconds = Math.trunc(milliseconds / msInSecond);\n milliseconds -= seconds * msInSecond;\n const result = padStartTimeSegments({ hours, minutes, seconds, milliseconds });\n return mode\n .replaceAll(/H+/g, result.hours)\n .replaceAll('MSS', result.milliseconds)\n .replaceAll(/M+/g, result.minutes)\n .replaceAll(/S+/g, result.seconds);\n}\n\nfunction maskitoParseDateTime(value, { dateMode, timeMode, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\n const [dateSegment = '', timeSegment = ''] = value.split(dateTimeSeparator);\n if (timeSegment.length !== timeMode.length) {\n return null;\n }\n const date = maskitoParseDate(dateSegment, { mode: dateMode });\n const time = maskitoParseTime(timeSegment, { mode: timeMode });\n if (!date) {\n return null;\n }\n const dateTime = new Date(Number(date) + time);\n return clamp(dateTime, min, max);\n}\n\nconst NON_DIGIT_PLACEHOLDER_RE = /[^dmy]/g;\nconst LEADING_NON_DIGIT_RE = /^\\D*/;\nfunction splitDateTimeString(dateTime, dateModeTemplate) {\n const dateDigitsCount = dateModeTemplate.replaceAll(NON_DIGIT_PLACEHOLDER_RE, '').length;\n const [date = ''] = new RegExp(`(\\\\d[^\\\\d]*){0,${dateDigitsCount - 1}}\\\\d?`).exec(dateTime) || [];\n const [dateTimeSeparator = ''] = LEADING_NON_DIGIT_RE.exec(dateTime.slice(date.length)) || [];\n return [date, dateTime.slice(date.length + dateTimeSeparator.length)];\n}\n\nfunction maskitoStringifyDateTime(date, { dateMode, timeMode, dateTimeSeparator = DATE_TIME_SEPARATOR, dateSeparator = '.', min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, }) {\n const validatedDate = clamp(date, min, max);\n const dateString = maskitoStringifyDate(validatedDate, {\n mode: dateMode,\n separator: dateSeparator,\n min,\n max,\n });\n const extractedTime = Number(validatedDate) -\n Number(new Date(validatedDate.getFullYear(), validatedDate.getMonth(), validatedDate.getDate()));\n const timeString = maskitoStringifyTime(extractedTime, { mode: timeMode });\n return dateString + dateTimeSeparator + timeString;\n}\n\nfunction createMinMaxDateTimePostprocessor({ dateModeTemplate, timeMode, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, dateTimeSeparator, }) {\n return ({ value, selection }) => {\n const [dateString, timeString] = splitDateTimeString(value, dateModeTemplate);\n const parsedDate = parseDateString(dateString, dateModeTemplate);\n const parsedTime = parseTimeString(timeString, timeMode);\n if (!isDateTimeStringComplete(value, {\n dateMode: dateModeTemplate,\n timeMode,\n dateTimeSeparator,\n })) {\n const fixedDate = raiseSegmentValueToMin(parsedDate, dateModeTemplate);\n const { year, month, day } = isDateStringComplete(dateString, dateModeTemplate)\n ? dateToSegments(clamp(segmentsToDate(fixedDate), min, max))\n : fixedDate;\n const fixedValue = toDateString(Object.assign({ year,\n month,\n day }, parsedTime), { dateMode: dateModeTemplate, dateTimeSeparator, timeMode });\n const tail = value.slice(fixedValue.length);\n return {\n selection,\n value: fixedValue + tail,\n };\n }\n const date = segmentsToDate(parsedDate, parsedTime);\n const clampedDate = clamp(date, min, max);\n // trailing segment separators or meridiem characters\n const [trailingNonDigitCharacters = ''] = value.match(/\\D+$/g) || [];\n const validatedValue = toDateString(dateToSegments(clampedDate), {\n dateMode: dateModeTemplate,\n dateTimeSeparator,\n timeMode,\n }) + trailingNonDigitCharacters;\n return {\n selection,\n value: validatedValue,\n };\n };\n}\n\nfunction createValidDateTimePreprocessor({ dateModeTemplate, dateSegmentsSeparator, dateTimeSeparator, timeMode, timeSegmentMaxValues, }) {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n if (data === dateSegmentsSeparator) {\n return {\n elementState,\n data: selection[0] === value.length ? data : '',\n };\n }\n const newCharacters = data.replaceAll(/\\D/g, '');\n if (!newCharacters) {\n return { elementState, data };\n }\n const [from, rawTo] = selection;\n let to = rawTo + data.length;\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\n const [dateString, timeString] = splitDateTimeString(newPossibleValue, dateModeTemplate);\n let validatedValue = '';\n const hasDateTimeSeparator = newPossibleValue.includes(dateTimeSeparator);\n const { validatedDateString, updatedSelection } = validateDateString({\n dateString,\n dateSegmentsSeparator,\n dateModeTemplate,\n offset: 0,\n selection: [from, to],\n });\n if (dateString && !validatedDateString) {\n return { elementState, data: '' }; // prevent changes\n }\n to = updatedSelection[1];\n validatedValue += validatedDateString;\n const updatedTimeState = enrichTimeSegmentsWithZeroes({ value: timeString, selection: [from, to] }, { mode: timeMode, timeSegmentMaxValues });\n to = updatedTimeState.selection[1];\n validatedValue += hasDateTimeSeparator\n ? dateTimeSeparator + updatedTimeState.value\n : updatedTimeState.value;\n const newData = validatedValue.slice(from, to);\n return {\n elementState: {\n selection,\n value: validatedValue.slice(0, from) +\n newData\n .split(dateSegmentsSeparator)\n .map((segment) => '0'.repeat(segment.length))\n .join(dateSegmentsSeparator) +\n validatedValue.slice(to),\n },\n data: newData,\n };\n };\n}\n\nfunction maskitoDateTimeOptionsGenerator({ dateMode, timeMode, dateSeparator = '.', min, max, dateTimeSeparator = DATE_TIME_SEPARATOR, timeStep = 0, }) {\n const hasMeridiem = timeMode.includes('AA');\n const dateModeTemplate = dateMode.split('/').join(dateSeparator);\n const timeSegmentMaxValues = Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MAX_VALUES), (hasMeridiem ? { hours: 12 } : {}));\n const timeSegmentMinValues = Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MIN_VALUES), (hasMeridiem ? { hours: 1 } : {}));\n const fullMode = `${dateModeTemplate}${dateTimeSeparator}${timeMode}`;\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: [\n ...Array.from(dateModeTemplate).map((char) => dateSeparator.includes(char) ? char : /\\d/),\n ...dateTimeSeparator.split(''),\n ...createTimeMaskExpression(timeMode),\n ], overwriteMode: 'replace', preprocessors: [\n createFullWidthToHalfWidthPreprocessor(),\n createColonConvertPreprocessor(),\n createFirstDateEndSeparatorPreprocessor({\n dateModeTemplate,\n dateSegmentSeparator: dateSeparator,\n firstDateEndSeparator: dateTimeSeparator,\n pseudoFirstDateEndSeparators: dateTimeSeparator.split(''),\n }),\n createZeroPlaceholdersPreprocessor(),\n createMeridiemPreprocessor(timeMode),\n normalizeDatePreprocessor({\n dateModeTemplate,\n dateSegmentsSeparator: dateSeparator,\n dateTimeSeparator,\n }),\n createInvalidTimeSegmentInsertionPreprocessor({\n timeMode,\n timeSegmentMinValues,\n timeSegmentMaxValues,\n parseValue: (x) => {\n const [dateString, timeString] = splitDateTimeString(x, dateModeTemplate);\n return { timeString, restValue: dateString + dateTimeSeparator };\n },\n }),\n createValidDateTimePreprocessor({\n dateModeTemplate,\n dateSegmentsSeparator: dateSeparator,\n dateTimeSeparator,\n timeMode,\n timeSegmentMaxValues,\n }),\n ], postprocessors: [\n createMeridiemPostprocessor(timeMode),\n createDateSegmentsZeroPaddingPostprocessor({\n dateModeTemplate,\n dateSegmentSeparator: dateSeparator,\n splitFn: (value) => {\n const [dateString, timeString] = splitDateTimeString(value, dateModeTemplate);\n return { dateStrings: [dateString], restPart: timeString };\n },\n uniteFn: ([validatedDateString], initialValue) => validatedDateString +\n (initialValue.includes(dateTimeSeparator) ? dateTimeSeparator : ''),\n }),\n createMinMaxDateTimePostprocessor({\n min,\n max,\n dateModeTemplate,\n timeMode,\n dateTimeSeparator,\n }),\n ], plugins: [\n createTimeSegmentsSteppingPlugin({\n step: timeStep,\n fullMode,\n timeSegmentMaxValues: DEFAULT_TIME_SEGMENT_MAX_VALUES,\n }),\n createMeridiemSteppingPlugin(fullMode.indexOf('AA')),\n ] });\n}\n\n/**\n * It drops prefix and postfix from data\n * Needed for case, when prefix or postfix contain decimalSeparator, to ignore it in resulting number\n * @example User pastes '{prefix}123.45{postfix}' => 123.45\n */\nfunction createAffixesFilterPreprocessor({ prefix, postfix, }) {\n return ({ elementState, data }) => {\n const { cleanValue: cleanData } = extractAffixes(data, {\n prefix,\n postfix,\n });\n return {\n elementState,\n data: cleanData,\n };\n };\n}\n\nfunction generateMaskExpression({ decimalPseudoSeparators, decimalSeparator, maximumFractionDigits, min, minusSign, postfix, prefix, pseudoMinuses, thousandSeparator, }) {\n const computedPrefix = min < 0 && [minusSign, ...pseudoMinuses].includes(prefix)\n ? ''\n : computeAllOptionalCharsRegExp(prefix);\n const digit = String.raw `\\d`;\n const optionalMinus = min < 0 ? `[${minusSign}${pseudoMinuses.map((x) => `\\\\${x}`).join('')}]?` : '';\n const integerPart = thousandSeparator\n ? `[${digit}${escapeRegExp(thousandSeparator).replaceAll(/\\s/g, String.raw `\\s`)}]*`\n : `[${digit}]*`;\n const precisionPart = Number.isFinite(maximumFractionDigits)\n ? maximumFractionDigits\n : '';\n const decimalPart = maximumFractionDigits > 0\n ? `([${escapeRegExp(decimalSeparator)}${decimalPseudoSeparators\n .map(escapeRegExp)\n .join('')}]${digit}{0,${precisionPart}})?`\n : '';\n const computedPostfix = computeAllOptionalCharsRegExp(postfix);\n return new RegExp(`^${computedPrefix}${optionalMinus}${integerPart}${decimalPart}${computedPostfix}$`);\n}\nfunction computeAllOptionalCharsRegExp(str) {\n return str\n ? `${str\n .split('')\n .map((char) => `${escapeRegExp(char)}?`)\n .join('')}`\n : '';\n}\n\nfunction maskitoParseNumber(maskedNumber, \n// TODO(v4): decimalSeparatorOrParams: MaskitoNumberParams | string => params: MaskitoNumberParams = {}\ndecimalSeparatorOrParams = {}) {\n const { decimalSeparator = '.', minusSign = '' } = typeof decimalSeparatorOrParams === 'string'\n ? { decimalSeparator: decimalSeparatorOrParams }\n : decimalSeparatorOrParams;\n const hasNegativeSign = !!new RegExp(`^\\\\D*[${escapeRegExp(minusSign)}\\\\${DEFAULT_PSEUDO_MINUSES.join('\\\\')}]`).exec(maskedNumber);\n const escapedDecimalSeparator = escapeRegExp(decimalSeparator);\n const unmaskedNumber = maskedNumber\n // drop all decimal separators not followed by a digit\n .replaceAll(new RegExp(`${escapedDecimalSeparator}(?!\\\\d)`, 'g'), '')\n // drop all non-digit characters except decimal separator\n .replaceAll(new RegExp(`[^\\\\d${escapedDecimalSeparator}]`, 'g'), '')\n .replace(decimalSeparator, decimalSeparator && '.');\n if (unmaskedNumber) {\n const sign = hasNegativeSign ? CHAR_HYPHEN : '';\n return Number(`${sign}${unmaskedNumber}`);\n }\n return NaN;\n}\n\nfunction maskitoStringifyNumber(number, params) {\n if (Number.isNaN(number) || number === null) {\n return '';\n }\n const { min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER, decimalSeparator = '.', } = params;\n const value = clamp(number, min, max).toString().replace('.', decimalSeparator);\n return maskitoTransform(value, maskitoNumberOptionsGenerator(params));\n}\n\n/**\n * Convert number to string with replacing exponent part on decimals\n *\n * @param value the number\n * @return string representation of a number\n */\nfunction stringifyNumberWithoutExp(value) {\n var _a;\n const valueAsString = String(value);\n const [numberPart = '', expPart] = valueAsString.split('e-');\n let valueWithoutExp = valueAsString;\n if (expPart) {\n const [, fractionalPart] = numberPart.split('.');\n const decimalDigits = Number(expPart) + ((_a = fractionalPart === null || fractionalPart === void 0 ? void 0 : fractionalPart.length) !== null && _a !== void 0 ? _a : 0);\n valueWithoutExp = value.toFixed(decimalDigits);\n }\n return valueWithoutExp;\n}\n\nfunction toNumberParts(value, { decimalSeparator, minusSign }) {\n const [integerWithMinus = '', decimalPart = ''] = decimalSeparator\n ? value.split(decimalSeparator)\n : [value];\n const escapedMinus = escapeRegExp(minusSign);\n const [, minus = '', integerPart = ''] = new RegExp(`^(?:[^\\\\d${escapedMinus}])?(${escapedMinus})?(.*)`).exec(integerWithMinus) || [];\n return { minus, integerPart, decimalPart };\n}\n\nfunction validateDecimalPseudoSeparators({ decimalSeparator, thousandSeparator, decimalPseudoSeparators = DEFAULT_DECIMAL_PSEUDO_SEPARATORS, }) {\n return decimalPseudoSeparators.filter((char) => char !== thousandSeparator && char !== decimalSeparator);\n}\n\n/**\n * If `minimumFractionDigits` is `>0`, it pads decimal part with zeroes\n * (until number of digits after decimalSeparator is equal to the `minimumFractionDigits`).\n * @example 1,42 => (`minimumFractionDigits` is equal to 4) => 1,4200.\n */\nfunction createDecimalZeroPaddingPostprocessor({ decimalSeparator, minimumFractionDigits, prefix, postfix, minusSign, }) {\n if (!minimumFractionDigits) {\n return identity;\n }\n return ({ value, selection }) => {\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n if (Number.isNaN(maskitoParseNumber(cleanValue, { decimalSeparator, minusSign }))) {\n return { value, selection };\n }\n const [integerPart, decimalPart = ''] = cleanValue.split(decimalSeparator);\n return {\n value: extractedPrefix +\n integerPart +\n decimalSeparator +\n decimalPart.padEnd(minimumFractionDigits, '0') +\n extractedPostfix,\n selection,\n };\n };\n}\n\n/**\n * Make textfield empty if there is no integer part and all decimal digits are zeroes.\n * @example 0|,00 => Backspace => Empty.\n * @example -0|,00 => Backspace => -.\n * @example ,42| => Backspace x2 => ,|00 => Backspace => Empty\n */\nfunction emptyPostprocessor({ prefix, postfix, decimalSeparator, minusSign, }) {\n return ({ value, selection }) => {\n const [caretIndex] = selection;\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n const { minus, integerPart, decimalPart } = toNumberParts(cleanValue, {\n decimalSeparator,\n minusSign,\n });\n const aloneDecimalSeparator = !integerPart &&\n !decimalPart &&\n Boolean(decimalSeparator) &&\n cleanValue.includes(decimalSeparator);\n if ((!integerPart &&\n !Number(decimalPart) &&\n caretIndex === (minus + extractedPrefix).length) ||\n aloneDecimalSeparator) {\n return {\n selection,\n value: extractedPrefix + minus + extractedPostfix,\n };\n }\n return { value, selection };\n };\n}\n\n/**\n * This preprocessor works only once at initialization phase (when `new Maskito(...)` is executed).\n * This preprocessor helps to avoid conflicts during transition from one mask to another (for the same input).\n * For example, the developer changes postfix (or other mask's props) during run-time.\n * ```\n * let maskitoOptions = maskitoNumberOptionsGenerator({postfix: ' year'});\n * // [3 seconds later]\n * maskitoOptions = maskitoNumberOptionsGenerator({postfix: ' years'});\n * ```\n */\nfunction createInitializationOnlyPreprocessor({ decimalPseudoSeparators, decimalSeparator, minusSign, postfix, prefix, pseudoMinuses, }) {\n let isInitializationPhase = true;\n const cleanNumberMask = generateMaskExpression({\n decimalSeparator,\n decimalPseudoSeparators,\n pseudoMinuses,\n prefix: '',\n postfix: '',\n thousandSeparator: '',\n maximumFractionDigits: Infinity,\n min: Number.MIN_SAFE_INTEGER,\n minusSign,\n });\n return ({ elementState, data }) => {\n if (!isInitializationPhase) {\n return { elementState, data };\n }\n isInitializationPhase = false;\n const { value, selection } = elementState;\n const [from, to] = selection;\n const { extractedPrefix, cleanValue, extractedPostfix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n const cleanState = maskitoTransform({\n selection: [\n Math.max(from - extractedPrefix.length, 0),\n clamp(to - extractedPrefix.length, 0, cleanValue.length),\n ],\n value: cleanValue,\n }, {\n mask: cleanNumberMask,\n });\n const [cleanFrom, cleanTo] = cleanState.selection;\n return {\n elementState: {\n selection: [\n cleanFrom + extractedPrefix.length,\n cleanTo + extractedPrefix.length,\n ],\n value: extractedPrefix + cleanState.value + extractedPostfix,\n },\n data,\n };\n };\n}\n\n/**\n * It removes repeated leading zeroes for integer part.\n * @example 0,|00005 => Backspace => |5\n * @example -0,|00005 => Backspace => -|5\n * @example User types \"000000\" => 0|\n * @example 0| => User types \"5\" => 5|\n */\nfunction createLeadingZeroesValidationPostprocessor({ decimalSeparator, thousandSeparator, prefix, postfix, }) {\n const trimLeadingZeroes = (value) => {\n const escapedThousandSeparator = escapeRegExp(thousandSeparator);\n return value\n .replace(\n // all leading zeroes followed by another zero\n new RegExp(`^(\\\\D+)?[0${escapedThousandSeparator}]+(?=0)`), '$1')\n .replace(\n // zero followed by not-zero digit\n new RegExp(`^(\\\\D+)?[0${escapedThousandSeparator}]+(?=[1-9])`), '$1');\n };\n const countTrimmedZeroesBefore = (value, index) => {\n const valueBefore = value.slice(0, index);\n const followedByZero = value.slice(index).startsWith('0');\n return (valueBefore.length -\n trimLeadingZeroes(valueBefore).length +\n (followedByZero ? 1 : 0));\n };\n return ({ value, selection }) => {\n const [from, to] = selection;\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n const hasDecimalSeparator = Boolean(decimalSeparator) && cleanValue.includes(decimalSeparator);\n const [integerPart = '', decimalPart = ''] = decimalSeparator\n ? cleanValue.split(decimalSeparator)\n : [cleanValue];\n const zeroTrimmedIntegerPart = trimLeadingZeroes(integerPart);\n if (integerPart === zeroTrimmedIntegerPart) {\n return { value, selection };\n }\n const newFrom = from - countTrimmedZeroesBefore(value, from);\n const newTo = to - countTrimmedZeroesBefore(value, to);\n return {\n value: extractedPrefix +\n zeroTrimmedIntegerPart +\n (hasDecimalSeparator ? decimalSeparator : '') +\n decimalPart +\n extractedPostfix,\n selection: [Math.max(newFrom, 0), Math.max(newTo, 0)],\n };\n };\n}\n\n/**\n * This postprocessor is connected with {@link createMinMaxPlugin}:\n * both validate `min`/`max` bounds of entered value (but at the different point of time).\n */\nfunction createMinMaxPostprocessor({ min, max, decimalSeparator, minusSign, }) {\n return ({ value, selection }) => {\n const parsedNumber = maskitoParseNumber(value, { decimalSeparator, minusSign });\n const limitedValue = \n /**\n * We cannot limit lower bound if user enters positive number.\n * The same for upper bound and negative number.\n * ___\n * @example (min = 5)\n * Empty input => Without this condition user cannot type 42 (the first digit will be rejected)\n * ___\n * @example (max = -10)\n * Value is -10 => Without this condition user cannot delete 0 to enter another digit\n */\n parsedNumber > 0 ? Math.min(parsedNumber, max) : Math.max(parsedNumber, min);\n if (parsedNumber && limitedValue !== parsedNumber) {\n const newValue = `${limitedValue}`\n .replace('.', decimalSeparator)\n .replace(CHAR_HYPHEN, minusSign);\n return {\n value: newValue,\n selection: [newValue.length, newValue.length],\n };\n }\n return {\n value,\n selection,\n };\n };\n}\n\n/**\n * Manage caret-navigation when user \"deletes\" non-removable digits or separators\n * @example 1,|42 => Backspace => 1|,42 (only if `minimumFractionDigits` is `>0`)\n * @example 1|,42 => Delete => 1,|42 (only if `minimumFractionDigits` is `>0`)\n * @example 0,|00 => Delete => 0,0|0 (only if `minimumFractionDigits` is `>0`)\n * @example 1 |000 => Backspace => 1| 000 (always)\n */\nfunction createNonRemovableCharsDeletionPreprocessor({ decimalSeparator, thousandSeparator, minimumFractionDigits, }) {\n return ({ elementState, data }, actionType) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n const selectedCharacters = value.slice(from, to);\n const nonRemovableSeparators = minimumFractionDigits\n ? [decimalSeparator, thousandSeparator]\n : [thousandSeparator];\n const areNonRemovableZeroesSelected = Boolean(minimumFractionDigits) &&\n from > value.indexOf(decimalSeparator) &&\n Boolean(selectedCharacters.match(/^0+$/gi));\n if ((actionType !== 'deleteBackward' && actionType !== 'deleteForward') ||\n (!nonRemovableSeparators.includes(selectedCharacters) &&\n !areNonRemovableZeroesSelected)) {\n return {\n elementState,\n data,\n };\n }\n return {\n elementState: {\n value,\n selection: actionType === 'deleteForward' ? [to, to] : [from, from],\n },\n data,\n };\n };\n}\n\n/**\n * It pads integer part with zero if user types decimal separator (for empty input).\n * @example Empty input => User types \",\" (decimal separator) => 0,|\n */\nfunction createNotEmptyIntegerPartPreprocessor({ decimalSeparator, maximumFractionDigits, prefix, postfix, }) {\n const startWithDecimalSepRegExp = new RegExp(`^\\\\D*${escapeRegExp(decimalSeparator)}`);\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const { cleanValue, extractedPrefix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n const [from, to] = selection;\n const cleanFrom = clamp(from - extractedPrefix.length, 0, cleanValue.length);\n const cleanTo = clamp(to - extractedPrefix.length, 0, cleanValue.length);\n if (maximumFractionDigits <= 0 ||\n cleanValue.slice(0, cleanFrom).includes(decimalSeparator) ||\n cleanValue.slice(cleanTo).includes(decimalSeparator) ||\n !data.match(startWithDecimalSepRegExp)) {\n return { elementState, data };\n }\n const digitsBeforeCursor = /\\d+/.exec(cleanValue.slice(0, cleanFrom));\n return {\n elementState,\n data: digitsBeforeCursor ? data : `0${data}`,\n };\n };\n}\n\n/**\n * It replaces pseudo characters with valid one.\n * @example User types '.' (but separator is equal to comma) => dot is replaced with comma.\n * @example User types hyphen / en-dash / em-dash => it is replaced with minus.\n */\nfunction createPseudoCharactersPreprocessor({ validCharacter, pseudoCharacters, prefix, postfix, }) {\n const pseudoCharactersRegExp = new RegExp(`[${pseudoCharacters.join('')}]`, 'gi');\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n return {\n elementState: {\n selection,\n value: extractedPrefix +\n cleanValue.replace(pseudoCharactersRegExp, validCharacter) +\n extractedPostfix,\n },\n data: data.replace(pseudoCharactersRegExp, validCharacter),\n };\n };\n}\n\n/**\n * It rejects new typed decimal separator if it already exists in text field.\n * Behaviour is similar to native <input type=\"number\"> (Chrome).\n * @example 1|23,45 => Press comma (decimal separator) => 1|23,45 (do nothing).\n */\nfunction createRepeatedDecimalSeparatorPreprocessor({ decimalSeparator, prefix, postfix, }) {\n if (!decimalSeparator) {\n return identity;\n }\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n const { cleanValue } = extractAffixes(value, { prefix, postfix });\n return {\n elementState,\n data: !cleanValue.includes(decimalSeparator) ||\n value.slice(from, to + 1).includes(decimalSeparator)\n ? data\n : data.replaceAll(new RegExp(escapeRegExp(decimalSeparator), 'gi'), ''),\n };\n };\n}\n\n/**\n * It adds symbol for separating thousands.\n * @example 1000000 => (thousandSeparator is equal to space) => 1 000 000.\n */\nfunction createThousandSeparatorPostprocessor({ thousandSeparator, decimalSeparator, prefix, postfix, minusSign, }) {\n if (!thousandSeparator) {\n return identity;\n }\n const isAllSpaces = (...chars) => chars.every((x) => /\\s/.test(x));\n return ({ value, selection }) => {\n const [initialFrom, initialTo] = selection;\n let [from, to] = selection;\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n const { minus, integerPart, decimalPart } = toNumberParts(cleanValue, {\n decimalSeparator,\n minusSign,\n });\n const hasDecimalSeparator = decimalSeparator && cleanValue.includes(decimalSeparator);\n const deletedChars = cleanValue.length -\n (minus +\n integerPart +\n (hasDecimalSeparator ? decimalSeparator + decimalPart : '')).length;\n if (deletedChars > 0 && initialFrom && initialFrom <= deletedChars) {\n from -= deletedChars;\n }\n if (deletedChars > 0 && initialTo && initialTo <= deletedChars) {\n to -= deletedChars;\n }\n const processedIntegerPart = Array.from(integerPart).reduceRight((formattedValuePart, char, i) => {\n const isLeadingThousandSeparator = !i && char === thousandSeparator;\n const isPositionForSeparator = !isLeadingThousandSeparator &&\n Boolean(formattedValuePart.length) &&\n (formattedValuePart.length + 1) % 4 === 0;\n const isSeparator = char === thousandSeparator || isAllSpaces(char, thousandSeparator);\n if (isPositionForSeparator && isSeparator) {\n return thousandSeparator + formattedValuePart;\n }\n if (!isPositionForSeparator && isSeparator) {\n if (i && i <= initialFrom) {\n from--;\n }\n if (i && i <= initialTo) {\n to--;\n }\n return formattedValuePart;\n }\n if (!isPositionForSeparator) {\n return char + formattedValuePart;\n }\n if (i < initialFrom) {\n from++;\n }\n if (i < initialTo) {\n to++;\n }\n return char + thousandSeparator + formattedValuePart;\n }, '');\n return {\n value: extractedPrefix +\n minus +\n processedIntegerPart +\n (hasDecimalSeparator ? decimalSeparator : '') +\n decimalPart +\n extractedPostfix,\n selection: [from, to],\n };\n };\n}\n\n/**\n * It drops decimal part if `maximumFractionDigits` is zero.\n * @example User pastes '123.45' (but `maximumFractionDigits` is zero) => 123\n */\nfunction createZeroPrecisionPreprocessor({ maximumFractionDigits, decimalSeparator, prefix, postfix, }) {\n if (maximumFractionDigits > 0 ||\n !decimalSeparator // all separators should be treated only as thousand separators\n ) {\n return identity;\n }\n const decimalPartRegExp = new RegExp(`${escapeRegExp(decimalSeparator)}.*$`, 'g');\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\n prefix,\n postfix,\n });\n const [from, to] = selection;\n const newValue = extractedPrefix +\n cleanValue.replace(decimalPartRegExp, '') +\n extractedPostfix;\n return {\n elementState: {\n selection: [\n Math.min(from, newValue.length),\n Math.min(to, newValue.length),\n ],\n value: newValue,\n },\n data: data.replace(decimalPartRegExp, ''),\n };\n };\n}\n\nconst DUMMY_SELECTION = [0, 0];\n/**\n * It removes repeated leading zeroes for integer part on blur-event.\n * @example 000000 => blur => 0\n * @example 00005 => blur => 5\n */\nfunction createLeadingZeroesValidationPlugin({ decimalSeparator, thousandSeparator, prefix, postfix, }) {\n const dropRepeatedLeadingZeroes = createLeadingZeroesValidationPostprocessor({\n decimalSeparator,\n thousandSeparator,\n prefix,\n postfix,\n });\n return maskitoEventHandler('blur', (element) => {\n const newValue = dropRepeatedLeadingZeroes({\n value: element.value,\n selection: DUMMY_SELECTION,\n }, { value: '', selection: DUMMY_SELECTION }).value;\n maskitoUpdateElement(element, newValue);\n }, { capture: true });\n}\n\n/**\n * This plugin is connected with {@link createMinMaxPostprocessor}:\n * both validate `min`/`max` bounds of entered value (but at the different point of time).\n */\nfunction createMinMaxPlugin({ min, max, decimalSeparator, minusSign, }) {\n return maskitoEventHandler('blur', (element, options) => {\n const parsedNumber = maskitoParseNumber(element.value, {\n decimalSeparator,\n minusSign,\n });\n const clampedNumber = clamp(parsedNumber, min, max);\n if (!Number.isNaN(parsedNumber) && parsedNumber !== clampedNumber) {\n maskitoUpdateElement(element, maskitoTransform(stringifyNumberWithoutExp(clampedNumber), options));\n }\n }, { capture: true });\n}\n\n/**\n * It pads EMPTY integer part with zero if decimal parts exists.\n * It works on blur event only!\n * @example 1|,23 => Backspace => Blur => 0,23\n */\nfunction createNotEmptyIntegerPlugin({ decimalSeparator, prefix, postfix, }) {\n if (!decimalSeparator) {\n return noop;\n }\n return maskitoEventHandler('blur', (element) => {\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(element.value, { prefix, postfix });\n const newValue = extractedPrefix +\n cleanValue.replace(new RegExp(`^(\\\\D+)?${escapeRegExp(decimalSeparator)}`), `$10${decimalSeparator}`) +\n extractedPostfix;\n maskitoUpdateElement(element, newValue);\n }, { capture: true });\n}\n\nconst DEFAULT_PSEUDO_MINUSES = [\n CHAR_HYPHEN,\n CHAR_EN_DASH,\n CHAR_EM_DASH,\n CHAR_JP_HYPHEN,\n CHAR_MINUS,\n];\nfunction maskitoNumberOptionsGenerator({ max = Number.MAX_SAFE_INTEGER, min = Number.MIN_SAFE_INTEGER, precision = 0, thousandSeparator = CHAR_NO_BREAK_SPACE, decimalSeparator = '.', decimalPseudoSeparators, decimalZeroPadding = false, prefix: unsafePrefix = '', postfix = '', minusSign = CHAR_MINUS, maximumFractionDigits = precision, minimumFractionDigits = decimalZeroPadding ? maximumFractionDigits : 0, } = {}) {\n const pseudoMinuses = DEFAULT_PSEUDO_MINUSES.filter((char) => char !== thousandSeparator && char !== decimalSeparator && char !== minusSign);\n const validatedDecimalPseudoSeparators = validateDecimalPseudoSeparators({\n decimalSeparator,\n thousandSeparator,\n decimalPseudoSeparators,\n });\n const prefix = unsafePrefix.endsWith(decimalSeparator) && maximumFractionDigits > 0\n ? `${unsafePrefix}${CHAR_ZERO_WIDTH_SPACE}`\n : unsafePrefix;\n const initializationOnlyPreprocessor = createInitializationOnlyPreprocessor({\n decimalSeparator,\n decimalPseudoSeparators: validatedDecimalPseudoSeparators,\n pseudoMinuses,\n prefix,\n postfix,\n minusSign,\n });\n decimalSeparator =\n maximumFractionDigits <= 0 && decimalSeparator === thousandSeparator\n ? ''\n : decimalSeparator;\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: generateMaskExpression({\n decimalSeparator,\n maximumFractionDigits,\n min,\n minusSign,\n postfix,\n prefix,\n pseudoMinuses,\n thousandSeparator,\n decimalPseudoSeparators: validatedDecimalPseudoSeparators,\n }), preprocessors: [\n createFullWidthToHalfWidthPreprocessor(),\n initializationOnlyPreprocessor,\n createAffixesFilterPreprocessor({ prefix, postfix }),\n createPseudoCharactersPreprocessor({\n validCharacter: minusSign,\n pseudoCharacters: pseudoMinuses,\n prefix,\n postfix,\n }),\n createPseudoCharactersPreprocessor({\n validCharacter: decimalSeparator,\n pseudoCharacters: validatedDecimalPseudoSeparators,\n prefix,\n postfix,\n }),\n createNotEmptyIntegerPartPreprocessor({\n decimalSeparator,\n maximumFractionDigits,\n prefix,\n postfix,\n }),\n createNonRemovableCharsDeletionPreprocessor({\n decimalSeparator,\n minimumFractionDigits,\n thousandSeparator,\n }),\n createZeroPrecisionPreprocessor({\n maximumFractionDigits,\n decimalSeparator,\n prefix,\n postfix,\n }),\n createRepeatedDecimalSeparatorPreprocessor({\n decimalSeparator,\n prefix,\n postfix,\n }),\n ], postprocessors: [\n createMinMaxPostprocessor({ decimalSeparator, min, max, minusSign }),\n maskitoPrefixPostprocessorGenerator(prefix),\n maskitoPostfixPostprocessorGenerator(postfix),\n createThousandSeparatorPostprocessor({\n decimalSeparator,\n thousandSeparator,\n prefix,\n postfix,\n minusSign,\n }),\n createDecimalZeroPaddingPostprocessor({\n decimalSeparator,\n prefix,\n postfix,\n minusSign,\n minimumFractionDigits: Math.min(minimumFractionDigits, maximumFractionDigits),\n }),\n emptyPostprocessor({\n prefix,\n postfix,\n decimalSeparator,\n minusSign,\n }),\n ], plugins: [\n createLeadingZeroesValidationPlugin({\n decimalSeparator,\n thousandSeparator,\n prefix,\n postfix,\n }),\n createNotEmptyIntegerPlugin({\n decimalSeparator,\n prefix,\n postfix,\n }),\n createMinMaxPlugin({ min, max, decimalSeparator, minusSign }),\n ], overwriteMode: minimumFractionDigits > 0\n ? ({ value, selection: [from] }) => from <= value.indexOf(decimalSeparator) ? 'shift' : 'replace'\n : 'shift' });\n}\n\nexport { maskitoAddOnFocusPlugin, maskitoCaretGuard, maskitoDateOptionsGenerator, maskitoDateRangeOptionsGenerator, maskitoDateTimeOptionsGenerator, maskitoEventHandler, maskitoNumberOptionsGenerator, maskitoParseDate, maskitoParseDateTime, maskitoParseNumber, maskitoParseTime, maskitoPostfixPostprocessorGenerator, maskitoPrefixPostprocessorGenerator, maskitoRejectEvent, maskitoRemoveOnBlurPlugin, maskitoSelectionChangeHandler, maskitoStringifyDate, maskitoStringifyDateTime, maskitoStringifyNumber, maskitoStringifyTime, maskitoTimeOptionsGenerator, maskitoWithPlaceholder };\n","import { MASKITO_DEFAULT_ELEMENT_PREDICATE, Maskito } from '@maskito/core';\nimport { useLayoutEffect, useEffect, useState, useCallback, useRef } from 'react';\n\n/**\n * React adds `_valueTracker` property to every textfield elements for its internal logic with controlled inputs.\n * Also, React monkey-patches `value`-setter of the native textfield elements to update state inside its `_valueTracker`.\n * @see https://github.com/facebook/react/blob/ee76351917106c6146745432a52e9a54a41ee181/packages/react-dom-bindings/src/client/inputValueTracking.js#L12-L19\n *\n * React depends on `_valueTracker` to know if the value was changed to decide:\n * - should it revert state for controlled input (if its state handler does not update value)\n * - should it dispatch its synthetic (not native!) `change` event\n *\n * When Maskito patches textfield with a valid value (using setter of `value` property),\n * it also updates `_valueTracker` state and React mistakenly decides that nothing has happened.\n * React should update `_valueTracker` state by itself!\n * ___\n * @see https://github.com/facebook/react/blob/ee76351917106c6146745432a52e9a54a41ee181/packages/react-dom-bindings/src/client/inputValueTracking.js#L173-L177\n */\nfunction adaptReactControlledElement(element) {\n var _a;\n const valueSetter = (_a = Object.getOwnPropertyDescriptor(getPrototype(element), 'value')) === null || _a === void 0 ? void 0 : _a.set;\n if (!valueSetter) {\n return element;\n }\n const adapter = {\n set value(value) {\n /**\n * Mimics exactly what happens when a browser silently changes the value property.\n * Bypass the React monkey-patching.\n */\n valueSetter.call(element, value);\n }\n };\n return new Proxy(element, {\n get(target, prop) {\n const nativeProperty = target[prop];\n return typeof nativeProperty === 'function' ? nativeProperty.bind(target) : nativeProperty;\n },\n // eslint-disable-next-line @typescript-eslint/max-params\n set(target, prop, val, receiver) {\n return Reflect.set(prop in adapter ? adapter : target, prop, val, receiver);\n }\n });\n}\nfunction getPrototype(element) {\n var _a, _b;\n switch (element.nodeName) {\n case 'INPUT':\n return (_a = globalThis.HTMLInputElement) === null || _a === void 0 ? void 0 : _a.prototype;\n case 'TEXTAREA':\n return (_b = globalThis.HTMLTextAreaElement) === null || _b === void 0 ? void 0 : _b.prototype;\n default:\n return null;\n }\n}\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nfunction isThenable(x) {\n return x && typeof x === 'object' && 'then' in x;\n}\n/**\n * Hook for convenient use of Maskito in React\n * @description For controlled inputs use `onInput` event\n * @param options options used for creating Maskito\n * @param elementPredicate function that can help find nested Input or TextArea\n * @returns ref callback to pass it in React Element\n * @example\n * // To avoid unnecessary hook runs with Maskito recreation pass named variables\n * // good example ✅\n * useMaskito({ options: maskitoOptions, elementPredicate: maskitoPredicate })\n *\n * // bad example ❌\n * useMaskito({ options: { mask: /^.*$/ }, elementPredicate: () => e.querySelector('input') })\n */\nconst useMaskito = ({\n options = null,\n elementPredicate = MASKITO_DEFAULT_ELEMENT_PREDICATE\n} = {}) => {\n const [hostElement, setHostElement] = useState(null);\n const [element, setElement] = useState(null);\n const onRefChange = useCallback(node => {\n setHostElement(node);\n }, []);\n const latestPredicateRef = useRef(elementPredicate);\n const latestOptionsRef = useRef(options);\n latestPredicateRef.current = elementPredicate;\n latestOptionsRef.current = options;\n useIsomorphicLayoutEffect(() => {\n if (!hostElement) {\n return;\n }\n const elementOrPromise = elementPredicate(hostElement);\n if (isThenable(elementOrPromise)) {\n void elementOrPromise.then(el => {\n if (latestPredicateRef.current === elementPredicate && latestOptionsRef.current === options) {\n setElement(el);\n }\n });\n } else {\n setElement(elementOrPromise);\n }\n }, [hostElement, elementPredicate, latestPredicateRef, options, latestOptionsRef]);\n useIsomorphicLayoutEffect(() => {\n if (!element || !options) {\n return;\n }\n const maskedElement = new Maskito(adaptReactControlledElement(element), options);\n return () => {\n maskedElement.destroy();\n setElement(null);\n };\n }, [options, element]);\n return onRefChange;\n};\n\nexport { useMaskito };\n","import { useState, useEffect } from 'react';\nimport { s as supportsPopover } from './ProgressBar-BRvB-bD4.js';\n\nfunction usePopoverSupport() {\n const [popoverSupported, setPopoverSupported] = useState(\n void 0\n );\n useEffect(() => {\n setPopoverSupported(supportsPopover());\n }, []);\n return popoverSupported;\n}\n\nexport { usePopoverSupport as u };\n//# sourceMappingURL=usePopoverSupport-B9Lsqryr.js.map\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/anvil2",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.43.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"@react-hook/resize-observer": "^2.0.1",
|
|
26
26
|
"@servicetitan/anvil-fonts": ">=14",
|
|
27
27
|
"classnames": "^2.5.1",
|
|
28
|
-
"@servicetitan/hammer-react": "1.
|
|
29
|
-
"@servicetitan/hammer-
|
|
30
|
-
"@servicetitan/hammer-
|
|
28
|
+
"@servicetitan/hammer-react": "1.41.0",
|
|
29
|
+
"@servicetitan/hammer-icon": "1.2.0",
|
|
30
|
+
"@servicetitan/hammer-token": "2.5.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@types/react": "^18",
|