@skbkontur/react-ui 6.1.4 → 6.1.6-00fed.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/components/Button/Button.classes.d.ts +8 -0
  3. package/components/Button/Button.classes.js +10 -0
  4. package/components/Button/Button.classes.js.map +1 -0
  5. package/components/Button/Button.mixins.js +1 -1
  6. package/components/Button/Button.mixins.js.map +1 -1
  7. package/components/Button/Button.styles.d.ts +2 -8
  8. package/components/Button/Button.styles.js +3 -9
  9. package/components/Button/Button.styles.js.map +1 -1
  10. package/components/Calendar/Calendar.d.ts +2 -8
  11. package/components/Calendar/Calendar.js +2 -7
  12. package/components/Calendar/Calendar.js.map +1 -1
  13. package/components/Calendar/CalendarDay.js +1 -1
  14. package/components/Calendar/CalendarDay.js.map +1 -1
  15. package/components/Calendar/MonthView.js +1 -1
  16. package/components/Calendar/MonthView.js.map +1 -1
  17. package/components/Calendar/MonthViewModel.js +1 -2
  18. package/components/Calendar/MonthViewModel.js.map +1 -1
  19. package/components/Calendar/tids.d.ts +7 -0
  20. package/components/Calendar/tids.js +8 -0
  21. package/components/Calendar/tids.js.map +1 -0
  22. package/components/FileUploader/FileUploaderFile.d.ts +1 -1
  23. package/components/FileUploader/FileUploaderFile.js +1 -1
  24. package/components/FileUploader/FileUploaderFile.js.map +1 -1
  25. package/components/FxInput/FxInput.d.ts +1 -1
  26. package/components/FxInput/FxInput.js.map +1 -1
  27. package/components/MaskedInput/MaskedInput.d.ts +6 -2
  28. package/components/MaskedInput/MaskedInput.js +10 -126
  29. package/components/MaskedInput/MaskedInput.js.map +1 -1
  30. package/components/MaskedInput/MaskedInputLegacy.d.ts +3 -0
  31. package/components/MaskedInput/MaskedInputLegacy.js +142 -0
  32. package/components/MaskedInput/MaskedInputLegacy.js.map +1 -0
  33. package/components/MaskedInput/index.d.ts +1 -0
  34. package/components/MaskedInput/index.js +1 -0
  35. package/components/MaskedInput/index.js.map +1 -1
  36. package/components/MaskedInputV2/MaskedInputV2.d.ts +62 -0
  37. package/components/MaskedInputV2/MaskedInputV2.helpers.d.ts +9 -0
  38. package/components/MaskedInputV2/MaskedInputV2.helpers.js +17 -0
  39. package/components/MaskedInputV2/MaskedInputV2.helpers.js.map +1 -0
  40. package/components/MaskedInputV2/MaskedInputV2.js +307 -0
  41. package/components/MaskedInputV2/MaskedInputV2.js.map +1 -0
  42. package/components/MaskedInputV2/MaskedInputV2.phone.d.ts +28 -0
  43. package/components/MaskedInputV2/MaskedInputV2.phone.js +38 -0
  44. package/components/MaskedInputV2/MaskedInputV2.phone.js.map +1 -0
  45. package/components/MaskedInputV2/MaskedInputV2.styles.d.ts +7 -0
  46. package/components/MaskedInputV2/MaskedInputV2.styles.js +19 -0
  47. package/components/MaskedInputV2/MaskedInputV2.styles.js.map +1 -0
  48. package/components/MaskedInputV2/index.d.ts +2 -0
  49. package/components/MaskedInputV2/index.js +3 -0
  50. package/components/MaskedInputV2/index.js.map +1 -0
  51. package/components/MaskedInputV2/internal/MaskOverlay.d.ts +19 -0
  52. package/components/MaskedInputV2/internal/MaskOverlay.js +54 -0
  53. package/components/MaskedInputV2/internal/MaskOverlay.js.map +1 -0
  54. package/components/MaskedInputV2/internal/MaskedCore.d.ts +8 -0
  55. package/components/MaskedInputV2/internal/MaskedCore.js +186 -0
  56. package/components/MaskedInputV2/internal/MaskedCore.js.map +1 -0
  57. package/components/MaskedInputV2/internal/MaskedCore.types.d.ts +37 -0
  58. package/components/MaskedInputV2/internal/MaskedCore.types.js +2 -0
  59. package/components/MaskedInputV2/internal/MaskedCore.types.js.map +1 -0
  60. package/components/MaskedInputV2/internal/MaskedInternal.styles.d.ts +15 -0
  61. package/components/MaskedInputV2/internal/MaskedInternal.styles.js +34 -0
  62. package/components/MaskedInputV2/internal/MaskedInternal.styles.js.map +1 -0
  63. package/components/MaskedInputV2/internal/buildSlotMap.d.ts +11 -0
  64. package/components/MaskedInputV2/internal/buildSlotMap.js +37 -0
  65. package/components/MaskedInputV2/internal/buildSlotMap.js.map +1 -0
  66. package/components/MaskedInputV2/internal/computeMaskAlignPadding.d.ts +6 -0
  67. package/components/MaskedInputV2/internal/computeMaskAlignPadding.js +47 -0
  68. package/components/MaskedInputV2/internal/computeMaskAlignPadding.js.map +1 -0
  69. package/components/MaskedInputV2/internal/computePasteMaskedCursor.d.ts +3 -0
  70. package/components/MaskedInputV2/internal/computePasteMaskedCursor.js +11 -0
  71. package/components/MaskedInputV2/internal/computePasteMaskedCursor.js.map +1 -0
  72. package/components/MaskedInputV2/internal/extractRaw.d.ts +10 -0
  73. package/components/MaskedInputV2/internal/extractRaw.js +16 -0
  74. package/components/MaskedInputV2/internal/extractRaw.js.map +1 -0
  75. package/components/MaskedInputV2/internal/findNearestRawLeft.d.ts +10 -0
  76. package/components/MaskedInputV2/internal/findNearestRawLeft.js +18 -0
  77. package/components/MaskedInputV2/internal/findNearestRawLeft.js.map +1 -0
  78. package/components/MaskedInputV2/internal/helpers.d.ts +8 -0
  79. package/components/MaskedInputV2/internal/helpers.js +9 -0
  80. package/components/MaskedInputV2/internal/helpers.js.map +1 -0
  81. package/components/MaskedInputV2/internal/maskedCoreClipboard.d.ts +37 -0
  82. package/components/MaskedInputV2/internal/maskedCoreClipboard.js +52 -0
  83. package/components/MaskedInputV2/internal/maskedCoreClipboard.js.map +1 -0
  84. package/components/MaskedInputV2/internal/maskedCoreDeletion.d.ts +28 -0
  85. package/components/MaskedInputV2/internal/maskedCoreDeletion.js +70 -0
  86. package/components/MaskedInputV2/internal/maskedCoreDeletion.js.map +1 -0
  87. package/components/MaskedInputV2/internal/maskedCoreInputChange.d.ts +38 -0
  88. package/components/MaskedInputV2/internal/maskedCoreInputChange.js +49 -0
  89. package/components/MaskedInputV2/internal/maskedCoreInputChange.js.map +1 -0
  90. package/components/MaskedInputV2/internal/maskedCoreNavigation.d.ts +13 -0
  91. package/components/MaskedInputV2/internal/maskedCoreNavigation.js +79 -0
  92. package/components/MaskedInputV2/internal/maskedCoreNavigation.js.map +1 -0
  93. package/components/MaskedInputV2/internal/measureInputTextWidth.d.ts +2 -0
  94. package/components/MaskedInputV2/internal/measureInputTextWidth.js +30 -0
  95. package/components/MaskedInputV2/internal/measureInputTextWidth.js.map +1 -0
  96. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.d.ts +2 -0
  97. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js +25 -0
  98. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js.map +1 -0
  99. package/components/MaskedInputV2/internal/showOverlay.d.ts +3 -0
  100. package/components/MaskedInputV2/internal/showOverlay.js +16 -0
  101. package/components/MaskedInputV2/internal/showOverlay.js.map +1 -0
  102. package/components/MaskedInputV2/internal/stripMaskChars.d.ts +11 -0
  103. package/components/MaskedInputV2/internal/stripMaskChars.js +20 -0
  104. package/components/MaskedInputV2/internal/stripMaskChars.js.map +1 -0
  105. package/components/MaskedInputV2/internal/types.d.ts +74 -0
  106. package/components/MaskedInputV2/internal/types.js +2 -0
  107. package/components/MaskedInputV2/internal/types.js.map +1 -0
  108. package/components/MaskedInputV2/internal/useInputOverflow.d.ts +4 -0
  109. package/components/MaskedInputV2/internal/useInputOverflow.js +34 -0
  110. package/components/MaskedInputV2/internal/useInputOverflow.js.map +1 -0
  111. package/components/MaskedInputV2/internal/useMaskAlignPadding.d.ts +2 -0
  112. package/components/MaskedInputV2/internal/useMaskAlignPadding.js +33 -0
  113. package/components/MaskedInputV2/internal/useMaskAlignPadding.js.map +1 -0
  114. package/components/MaskedInputV2/internal/useMaskEngine.d.ts +42 -0
  115. package/components/MaskedInputV2/internal/useMaskEngine.js +128 -0
  116. package/components/MaskedInputV2/internal/useMaskEngine.js.map +1 -0
  117. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.d.ts +34 -0
  118. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js +335 -0
  119. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js.map +1 -0
  120. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.d.ts +16 -0
  121. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js +59 -0
  122. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js.map +1 -0
  123. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.d.ts +20 -0
  124. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js +106 -0
  125. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js.map +1 -0
  126. package/components/MaskedInputV2/react-imask/imask/controls/input-history.d.ts +17 -0
  127. package/components/MaskedInputV2/react-imask/imask/controls/input-history.js +49 -0
  128. package/components/MaskedInputV2/react-imask/imask/controls/input-history.js.map +1 -0
  129. package/components/MaskedInputV2/react-imask/imask/controls/input.d.ts +95 -0
  130. package/components/MaskedInputV2/react-imask/imask/controls/input.js +420 -0
  131. package/components/MaskedInputV2/react-imask/imask/controls/input.js.map +1 -0
  132. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.d.ts +30 -0
  133. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js +59 -0
  134. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js.map +1 -0
  135. package/components/MaskedInputV2/react-imask/imask/core/action-details.d.ts +30 -0
  136. package/components/MaskedInputV2/react-imask/imask/core/action-details.js +100 -0
  137. package/components/MaskedInputV2/react-imask/imask/core/action-details.js.map +1 -0
  138. package/components/MaskedInputV2/react-imask/imask/core/change-details.d.ts +20 -0
  139. package/components/MaskedInputV2/react-imask/imask/core/change-details.js +46 -0
  140. package/components/MaskedInputV2/react-imask/imask/core/change-details.js.map +1 -0
  141. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.d.ts +21 -0
  142. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js +52 -0
  143. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js.map +1 -0
  144. package/components/MaskedInputV2/react-imask/imask/core/holder.d.ts +34 -0
  145. package/components/MaskedInputV2/react-imask/imask/core/holder.js +38 -0
  146. package/components/MaskedInputV2/react-imask/imask/core/holder.js.map +1 -0
  147. package/components/MaskedInputV2/react-imask/imask/core/tail-details.d.ts +20 -0
  148. package/components/MaskedInputV2/react-imask/imask/core/tail-details.js +2 -0
  149. package/components/MaskedInputV2/react-imask/imask/core/tail-details.js.map +1 -0
  150. package/components/MaskedInputV2/react-imask/imask/core/utils.d.ts +24 -0
  151. package/components/MaskedInputV2/react-imask/imask/core/utils.js +100 -0
  152. package/components/MaskedInputV2/react-imask/imask/core/utils.js.map +1 -0
  153. package/components/MaskedInputV2/react-imask/imask/imask.d.ts +5 -0
  154. package/components/MaskedInputV2/react-imask/imask/imask.js +7 -0
  155. package/components/MaskedInputV2/react-imask/imask/imask.js.map +1 -0
  156. package/components/MaskedInputV2/react-imask/imask/index.d.ts +17 -0
  157. package/components/MaskedInputV2/react-imask/imask/index.js +16 -0
  158. package/components/MaskedInputV2/react-imask/imask/index.js.map +1 -0
  159. package/components/MaskedInputV2/react-imask/imask/masked/base.d.ts +114 -0
  160. package/components/MaskedInputV2/react-imask/imask/masked/base.js +411 -0
  161. package/components/MaskedInputV2/react-imask/imask/masked/base.js.map +1 -0
  162. package/components/MaskedInputV2/react-imask/imask/masked/create.d.ts +14 -0
  163. package/components/MaskedInputV2/react-imask/imask/masked/create.js +11 -0
  164. package/components/MaskedInputV2/react-imask/imask/masked/create.js.map +1 -0
  165. package/components/MaskedInputV2/react-imask/imask/masked/factory.d.ts +62 -0
  166. package/components/MaskedInputV2/react-imask/imask/masked/factory.js +107 -0
  167. package/components/MaskedInputV2/react-imask/imask/masked/factory.js.map +1 -0
  168. package/components/MaskedInputV2/react-imask/imask/masked/pattern.d.ts +101 -0
  169. package/components/MaskedInputV2/react-imask/imask/masked/pattern.js +549 -0
  170. package/components/MaskedInputV2/react-imask/imask/masked/pattern.js.map +1 -0
  171. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.d.ts +30 -0
  172. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js +2 -0
  173. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js.map +1 -0
  174. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.d.ts +20 -0
  175. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js +182 -0
  176. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js.map +1 -0
  177. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.d.ts +31 -0
  178. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js +163 -0
  179. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js.map +1 -0
  180. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.d.ts +42 -0
  181. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js +158 -0
  182. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js.map +1 -0
  183. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.d.ts +56 -0
  184. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js +185 -0
  185. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js.map +1 -0
  186. package/components/MaskedInputV2/react-imask/imask/masked/regexp.d.ts +17 -0
  187. package/components/MaskedInputV2/react-imask/imask/masked/regexp.js +36 -0
  188. package/components/MaskedInputV2/react-imask/imask/masked/regexp.js.map +1 -0
  189. package/components/MaskedInputV2/react-imask/index.d.ts +3 -0
  190. package/components/MaskedInputV2/react-imask/index.js +4 -0
  191. package/components/MaskedInputV2/react-imask/index.js.map +1 -0
  192. package/components/MaskedInputV2/react-imask/input.d.ts +8 -0
  193. package/components/MaskedInputV2/react-imask/input.js +35 -0
  194. package/components/MaskedInputV2/react-imask/input.js.map +1 -0
  195. package/components/MaskedInputV2/react-imask/mixin.d.ts +31 -0
  196. package/components/MaskedInputV2/react-imask/mixin.js +246 -0
  197. package/components/MaskedInputV2/react-imask/mixin.js.map +1 -0
  198. package/components/MenuItem/MenuItem.mixins.d.ts +1 -0
  199. package/components/MenuItem/MenuItem.mixins.js +6 -1
  200. package/components/MenuItem/MenuItem.mixins.js.map +1 -1
  201. package/components/MenuItem/MenuItem.styles.d.ts +2 -1
  202. package/components/MenuItem/MenuItem.styles.js +2 -7
  203. package/components/MenuItem/MenuItem.styles.js.map +1 -1
  204. package/components/MiniModal/MiniModal.d.ts +2 -16
  205. package/components/MiniModal/MiniModal.js +2 -16
  206. package/components/MiniModal/MiniModal.js.map +1 -1
  207. package/components/MiniModal/MiniModalBody.js +1 -1
  208. package/components/MiniModal/MiniModalBody.js.map +1 -1
  209. package/components/MiniModal/MiniModalFooter.js +1 -1
  210. package/components/MiniModal/MiniModalFooter.js.map +1 -1
  211. package/components/MiniModal/MiniModalHeader.js +1 -1
  212. package/components/MiniModal/MiniModalHeader.js.map +1 -1
  213. package/components/MiniModal/MiniModalIndent.js +1 -1
  214. package/components/MiniModal/MiniModalIndent.js.map +1 -1
  215. package/components/MiniModal/tids.d.ts +7 -0
  216. package/components/MiniModal/tids.js +8 -0
  217. package/components/MiniModal/tids.js.map +1 -0
  218. package/components/Modal/Modal.constants.d.ts +9 -0
  219. package/components/Modal/Modal.constants.js +10 -0
  220. package/components/Modal/Modal.constants.js.map +1 -0
  221. package/components/Modal/Modal.d.ts +2 -15
  222. package/components/Modal/Modal.js +2 -14
  223. package/components/Modal/Modal.js.map +1 -1
  224. package/components/Modal/ModalBody.js +1 -1
  225. package/components/Modal/ModalBody.js.map +1 -1
  226. package/components/Modal/ModalClose.js +1 -1
  227. package/components/Modal/ModalClose.js.map +1 -1
  228. package/components/Switcher/Switcher.d.ts +3 -3
  229. package/components/Switcher/Switcher.js +1 -1
  230. package/components/Switcher/Switcher.js.map +1 -1
  231. package/components/Tabs/Tab.d.ts +4 -5
  232. package/components/Tabs/Tab.js +0 -1
  233. package/components/Tabs/Tab.js.map +1 -1
  234. package/components/Tabs/Tabs.d.ts +2 -2
  235. package/components/Tabs/Tabs.js +1 -1
  236. package/components/Tabs/Tabs.js.map +1 -1
  237. package/components/Toggle/Toggle.classes.d.ts +8 -0
  238. package/components/Toggle/Toggle.classes.js +10 -0
  239. package/components/Toggle/Toggle.classes.js.map +1 -0
  240. package/components/Toggle/Toggle.mixins.js +1 -1
  241. package/components/Toggle/Toggle.mixins.js.map +1 -1
  242. package/components/Toggle/Toggle.styles.d.ts +2 -8
  243. package/components/Toggle/Toggle.styles.js +3 -9
  244. package/components/Toggle/Toggle.styles.js.map +1 -1
  245. package/components/Token/Token.d.ts +1 -1
  246. package/components/Token/Token.js +1 -1
  247. package/components/Token/Token.js.map +1 -1
  248. package/components/TokenInput/TokenInput.d.ts +1 -1
  249. package/components/TokenInput/TokenInput.js +1 -1
  250. package/components/TokenInput/TokenInput.js.map +1 -1
  251. package/lib/date/InternalDateValidator.js +1 -2
  252. package/lib/date/InternalDateValidator.js.map +1 -1
  253. package/lib/events/keyboard/KeyboardEventCodes.d.ts +2 -0
  254. package/lib/events/keyboard/KeyboardEventCodes.js +2 -0
  255. package/lib/events/keyboard/KeyboardEventCodes.js.map +1 -1
  256. package/lib/events/keyboard/KeyboardMapKeys.js +2 -0
  257. package/lib/events/keyboard/KeyboardMapKeys.js.map +1 -1
  258. package/lib/events/keyboard/identifiers.d.ts +2 -0
  259. package/lib/events/keyboard/identifiers.js +6 -0
  260. package/lib/events/keyboard/identifiers.js.map +1 -1
  261. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  262. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +1 -0
  263. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  264. package/package.json +4 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMaskEngine.js","sourceRoot":"","sources":["useMaskEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport { getDefinitions, getMaskChar } from '../MaskedInputV2.helpers.js';\nimport type { MaskedPattern, MaskedPatternOptions } from '../react-imask/imask/index.js';\nimport { createMask } from '../react-imask/imask/masked/create.js';\nimport type { IMaskInputProps } from '../react-imask/index.js';\nimport { buildSlotMap, extractRaw } from './helpers.js';\nimport type { MaskState, SlotMap } from './types.js';\n\nexport interface MaskEngine {\n /**\n * Применить raw-ввод, получить MaskState.\n * Чистая функция (без побочных эффектов на внешний стейт).\n */\n compute(raw: string, focused: boolean): MaskState;\n\n /**\n * Применить вставку с учётом текущего курсора.\n * Возвращает новый raw и флаг переполнения.\n */\n applyPaste(currentRaw: string, rawCursorPos: number, pasted: string): PasteResult;\n\n /** Карта слотов. Пересчитывается только при смене маски. */\n slotMap: SlotMap;\n\n /** Доступ к IMask-инстансу для edge cases (imaskProps escape hatch). */\n imask: MaskedPattern;\n}\n\ninterface PasteResult {\n raw: string;\n overflow: boolean;\n}\n\nexport type MaskEager = NonNullable<MaskedPatternOptions['eager']>;\n\nconst IMASK_DEFAULT_PATTERN_TOKENS = new Set(['a', '*']);\n\n/**\n * В IMask `a`, `*` и `0` имеют встроенные определения. В API MaskedInput\n * `formatChars` — полный словарь токенов, поэтому незаданные в нём встроенные\n * токены должны оставаться литералами маски.\n *\n * Кастомные definitions из imaskProps — escape hatch, поэтому они также\n * сохраняют символ токеном.\n *\n * `0` всегда был литералом в MaskedInput и обрабатывается отдельно ниже.\n */\nfunction normalizeMask(\n mask: string,\n formatChars: Record<string, string> | undefined,\n imaskDefinitions: Record<string, unknown> | undefined,\n): string {\n if (!formatChars) {\n return mask.replace(/0/g, '{\\\\0}');\n }\n\n const definitionTokens = new Set([...Object.keys(formatChars), ...Object.keys(imaskDefinitions ?? {})]);\n let normalizedMask = '';\n for (let index = 0; index < mask.length; index++) {\n const char = mask[index];\n\n // Не экранируем символ, уже экранированный пользователем.\n if (char === '\\\\') {\n normalizedMask += char + (mask[index + 1] ?? '');\n index++;\n continue;\n }\n\n if (IMASK_DEFAULT_PATTERN_TOKENS.has(char) && !definitionTokens.has(char)) {\n normalizedMask += `\\\\${char}`;\n continue;\n }\n\n normalizedMask += char;\n }\n\n return normalizedMask.replace(/0/g, '{\\\\0}');\n}\n\n/** Пропсы хука {@link useMaskEngine}. */\ninterface UseMaskEngineProps {\n mask: string;\n maskChar?: string;\n formatChars?: Record<string, string>;\n unmask: boolean;\n alwaysShowMask: boolean;\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\n/**\n * Создаёт headless IMask-движок для MaskedInputV2.\n * IMask используется как калькулятор состояния, без привязки к DOM.\n *\n * @param props — настройки маски и поведения отображения.\n * @returns объект {@link MaskEngine} с методами `compute`, `applyPaste`, `slotMap` и `imask`.\n */\nexport function useMaskEngine(props: UseMaskEngineProps): MaskEngine {\n const mask = props.mask ?? '';\n const { definitions: imaskDefinitions, eager } = props.imaskProps ?? {};\n const normalizedMask = normalizeMask(mask, props.formatChars, imaskDefinitions);\n const imask = useMemo(\n () =>\n createMask({\n mask: normalizedMask as any,\n placeholderChar: getMaskChar(props.maskChar),\n definitions: getDefinitions(props.formatChars),\n eager: eager ?? 'append',\n overwrite: 'shift',\n lazy: true,\n ...(props.imaskProps as object),\n }) as unknown as MaskedPattern,\n [normalizedMask, props.imaskProps, props.maskChar, eager, JSON.stringify(props.formatChars)],\n );\n\n // SlotMap пересчитывается при смене маски\n const slotMap = useMemo(() => buildSlotMap(imask), [imask]);\n\n function compute(raw: string, focused: boolean): MaskState {\n const lazy = !props.alwaysShowMask && !focused;\n const eagerAppend = imask.eager === 'append' || imask.eager === true;\n\n // raw — только пользовательские слоты. resolve({ input: true }) съел бы цифру,\n // совпадающую с литералом маски (`7` в `7 999` / первая `7` после `+7`).\n imask.updateOptions({ lazy: true });\n imask.rawInputValue = raw;\n // raw-флаг не триггерит eager trailing (это делал flags.input) — добираем вручную.\n if (eagerAppend && raw) {\n imask._appendEager();\n }\n if (focused && !raw && eagerAppend) {\n imask._appendEager();\n }\n const lazyValue = imask.value;\n\n let displayValue = lazyValue;\n let typedValue = lazyValue;\n\n if (!lazy) {\n imask.updateOptions({ lazy: false });\n imask.rawInputValue = raw;\n if (eagerAppend && raw) {\n imask._appendEager();\n }\n displayValue = imask.displayValue;\n }\n\n const unmaskedValue = raw === '' ? '' : imask.unmaskedValue;\n const maskedValue = raw === '' ? '' : lazyValue;\n return {\n displayValue,\n typedValue,\n typedLength: typedValue.length,\n outputValue: props.unmask ? unmaskedValue : maskedValue,\n isComplete: imask.isComplete,\n acceptedLength: imask.unmaskedValue.length,\n };\n }\n\n function applyPaste(currentRaw: string, rawCursorPos: number, pasted: string): PasteResult {\n const before = currentRaw.slice(0, rawCursorPos);\n const after = currentRaw.slice(rawCursorPos);\n\n // Уже «сырые» цифры (в т.ч. после normalizeRussianPhonePaste) нельзя прогонять через\n // extractRaw/.value (input:true): ведущая 7 съестся литералом `+7` / `7 …`.\n const pastedRaw = /^\\d+$/.test(pasted) ? pasted : extractRaw(pasted, { imask });\n const candidate = before + pastedRaw + after;\n\n imask.rawInputValue = candidate;\n const accepted = imask.rawInputValue;\n\n return {\n raw: accepted,\n overflow: accepted.length < candidate.length,\n };\n }\n\n return { compute, applyPaste, slotMap, imask };\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import type React from 'react';
2
+ import type { MaskedCoreProps, MaskedSelectionIntent } from './MaskedCore.types.js';
3
+ type MaskedCoreHandlerProps = Pick<MaskedCoreProps, 'maskState' | 'slotMap' | 'engine' | 'currentRaw' | 'onRawChange' | 'onUnexpectedInput' | 'onUndo' | 'onRedo' | 'coreInputRef' | 'onKeyDown' | 'onMouseUp' | 'onInput' | 'onSelect' | 'onFocus' | 'onBlur' | 'onPaste' | 'selectAllOnFocus'> & {
4
+ syncOverlayScroll: () => void;
5
+ requestSelectionIntent: (intent: MaskedSelectionIntent) => void;
6
+ };
7
+ /**
8
+ * Собирает обработчики DOM-событий для {@link MaskedCore}.
9
+ * Инкапсулирует логику ввода, навигации, clipboard и undo/redo.
10
+ *
11
+ * @param props — состояние маски, движок и колбэки от MaskedInputV2.
12
+ * @returns refs и обработчики для прямого `<input>`.
13
+ */
14
+ export declare function useMaskedCoreHandlers(props: MaskedCoreHandlerProps): {
15
+ pendingCursorRef: React.RefObject<number | null>;
16
+ selectionRange: {
17
+ start: number;
18
+ end: number;
19
+ };
20
+ syncSelection: (el: HTMLInputElement) => void;
21
+ handleChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
22
+ handleKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;
23
+ handleSelect: (e?: React.SyntheticEvent<HTMLInputElement>) => void;
24
+ handlePaste: (e: React.ClipboardEvent<HTMLInputElement>) => void;
25
+ handleBeforeInput: (e: React.FormEvent<HTMLInputElement>) => void;
26
+ handleCopy: (e: React.ClipboardEvent<HTMLInputElement>) => void;
27
+ handleCut: (e: React.ClipboardEvent<HTMLInputElement>) => void;
28
+ handleInput: (e: React.ChangeEvent<HTMLInputElement>) => void;
29
+ handleMouseDown: () => void;
30
+ handleMouseUp: (e: React.MouseEvent<HTMLInputElement>) => void;
31
+ handleFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
32
+ handleBlur: (e: React.FocusEvent<HTMLInputElement>) => void;
33
+ };
34
+ export {};
@@ -0,0 +1,335 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { useCallback, useRef, useState } from 'react';
13
+ import { isKeyArrow, isKeyBackspace, isKeyDelete, isKeyEnd, isKeyHome, isShortcutRedo, isShortcutSelectAll, isShortcutUndo, } from '../../../lib/events/keyboard/identifiers.js';
14
+ import { scrollInputCaretIntoView } from '../../../lib/scrollInputCaretIntoView.js';
15
+ import { ActionDetails } from '../react-imask/imask/core/action-details.js';
16
+ import { extractRaw } from './extractRaw.js';
17
+ import { computeMaskedCut, getMaskedCopyText } from './maskedCoreClipboard.js';
18
+ import { computeMaskedDeletion } from './maskedCoreDeletion.js';
19
+ import { applyMaskedInputChange } from './maskedCoreInputChange.js';
20
+ import { calcNavigationSelection } from './maskedCoreNavigation.js';
21
+ import { setMaskInputSelectionRange } from './setMaskInputSelectionRange.js';
22
+ /**
23
+ * Собирает обработчики DOM-событий для {@link MaskedCore}.
24
+ * Инкапсулирует логику ввода, навигации, clipboard и undo/redo.
25
+ *
26
+ * @param props — состояние маски, движок и колбэки от MaskedInputV2.
27
+ * @returns refs и обработчики для прямого `<input>`.
28
+ */
29
+ export function useMaskedCoreHandlers(props) {
30
+ var maskState = props.maskState, slotMap = props.slotMap, engine = props.engine, currentRaw = props.currentRaw, onRawChange = props.onRawChange, onUnexpectedInput = props.onUnexpectedInput, onUndo = props.onUndo, onRedo = props.onRedo, coreInputRef = props.coreInputRef, inputOnKeyDown = props.onKeyDown, inputOnMouseUp = props.onMouseUp, inputOnInput = props.onInput, inputOnSelect = props.onSelect, inputOnFocus = props.onFocus, inputOnBlur = props.onBlur, inputOnPaste = props.onPaste, selectAllOnFocus = props.selectAllOnFocus, syncOverlayScroll = props.syncOverlayScroll, requestSelectionIntent = props.requestSelectionIntent;
31
+ var pendingCursorRef = useRef(null);
32
+ var resetCaretOnMouseUpRef = useRef(false);
33
+ var pointerFocusRef = useRef(false);
34
+ /** Блокирует нативный change/input после нашего paste (beforeinput/input race в браузере). */
35
+ var ignoreChangeFromPasteRef = useRef(false);
36
+ var lastSelectionRef = useRef({ start: 0, end: 0 });
37
+ var _a = useState({ start: 0, end: 0 }), selectionRange = _a[0], setSelectionRange = _a[1];
38
+ var syncSelection = useCallback(function (el) {
39
+ var _a, _b;
40
+ var start = (_a = el.selectionStart) !== null && _a !== void 0 ? _a : 0;
41
+ var end = (_b = el.selectionEnd) !== null && _b !== void 0 ? _b : 0;
42
+ lastSelectionRef.current = { start: start, end: end };
43
+ setSelectionRange(function (prev) { return (prev.start === start && prev.end === end ? prev : { start: start, end: end }); });
44
+ }, []);
45
+ function getFocusedInputCaretPos() {
46
+ return engine.compute(currentRaw, true).typedLength;
47
+ }
48
+ function scrollCaretIntoView(el) {
49
+ scrollInputCaretIntoView(el);
50
+ syncOverlayScroll();
51
+ }
52
+ function resetCaretToInputStart(el) {
53
+ var pos = getFocusedInputCaretPos();
54
+ pendingCursorRef.current = pos;
55
+ setMaskInputSelectionRange(el, pos);
56
+ scrollCaretIntoView(el);
57
+ syncSelection(el);
58
+ }
59
+ function setPendingCursor(pos) {
60
+ requestSelectionIntent(null);
61
+ pendingCursorRef.current = pos;
62
+ setMaskInputSelectionRange(coreInputRef.current, pos);
63
+ }
64
+ function handleChange(e) {
65
+ var _a;
66
+ if (ignoreChangeFromPasteRef.current) {
67
+ return;
68
+ }
69
+ requestSelectionIntent(null);
70
+ resetCaretOnMouseUpRef.current = false;
71
+ var browserDraft = e.target.value;
72
+ var cursorPos = (_a = e.target.selectionStart) !== null && _a !== void 0 ? _a : 0;
73
+ var oldSelection = lastSelectionRef.current;
74
+ var inputType = e.nativeEvent.inputType;
75
+ var details = new ActionDetails({
76
+ value: browserDraft,
77
+ cursorPos: cursorPos,
78
+ oldValue: maskState.typedValue,
79
+ oldSelection: __assign({}, oldSelection),
80
+ });
81
+ // Autofill / insertReplacementText / drop: нет clipboard paste-события,
82
+ // но нужна та же нормализация, что и у onBeforePasteValue.
83
+ // Всегда replace-all: повторный change (Яндекс.Браузер и др.) иначе вставляет
84
+ // в позицию курсора поверх уже нормализованного raw → порча значения.
85
+ var isBulkInsert = details.inserted.length > 1 || inputType === 'insertReplacementText';
86
+ if (isBulkInsert) {
87
+ ignoreChangeFromPasteRef.current = true;
88
+ setTimeout(function () {
89
+ ignoreChangeFromPasteRef.current = false;
90
+ }, 0);
91
+ if (coreInputRef.current) {
92
+ setMaskInputSelectionRange(coreInputRef.current, 0, maskState.typedLength);
93
+ lastSelectionRef.current = { start: 0, end: maskState.typedLength };
94
+ }
95
+ onRawChange(browserDraft, 'paste');
96
+ return;
97
+ }
98
+ var result = applyMaskedInputChange({
99
+ browserDraft: browserDraft,
100
+ cursorPos: cursorPos,
101
+ typedValue: maskState.typedValue,
102
+ currentRaw: currentRaw,
103
+ oldSelection: oldSelection,
104
+ engine: engine,
105
+ });
106
+ setPendingCursor(result.cursorPos);
107
+ if (result.rejected) {
108
+ onUnexpectedInput();
109
+ return;
110
+ }
111
+ onRawChange(result.newRaw, 'input', result.cursorPos);
112
+ }
113
+ function handleKeyDown(e) {
114
+ requestSelectionIntent(null);
115
+ resetCaretOnMouseUpRef.current = false;
116
+ var el = coreInputRef.current;
117
+ if (isShortcutSelectAll(e) || isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e) || isKeyBackspace(e) || isKeyDelete(e)) {
118
+ pendingCursorRef.current = null;
119
+ }
120
+ if (isShortcutSelectAll(e)) {
121
+ e.preventDefault();
122
+ setMaskInputSelectionRange(el, 0, maskState.typedLength);
123
+ if (el) {
124
+ scrollCaretIntoView(el);
125
+ syncSelection(el);
126
+ }
127
+ }
128
+ else if (isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e)) {
129
+ e.preventDefault();
130
+ var _a = calcNavigationSelection(e, maskState.typedLength, el), start = _a[0], end = _a[1], dir = _a[2];
131
+ setMaskInputSelectionRange(el, start, end, dir);
132
+ if (el) {
133
+ scrollCaretIntoView(el);
134
+ syncSelection(el);
135
+ }
136
+ }
137
+ else if (isKeyBackspace(e) || isKeyDelete(e)) {
138
+ e.preventDefault();
139
+ if (el) {
140
+ // Cmd/Ctrl+Backspace — удалить до начала строки; Cmd/Ctrl+Delete — до конца.
141
+ if (e.metaKey || e.ctrlKey) {
142
+ handleLineDeletion(isKeyBackspace(e), el);
143
+ }
144
+ else {
145
+ handleDeletion(isKeyBackspace(e), el);
146
+ }
147
+ }
148
+ }
149
+ else if (isShortcutUndo(e)) {
150
+ e.preventDefault();
151
+ onUndo === null || onUndo === void 0 ? void 0 : onUndo();
152
+ }
153
+ else if (isShortcutRedo(e)) {
154
+ e.preventDefault();
155
+ onRedo === null || onRedo === void 0 ? void 0 : onRedo();
156
+ }
157
+ inputOnKeyDown === null || inputOnKeyDown === void 0 ? void 0 : inputOnKeyDown(e);
158
+ }
159
+ function handleDeletion(isBackspace, el) {
160
+ var _a, _b;
161
+ applyDeletion(isBackspace, (_a = el.selectionStart) !== null && _a !== void 0 ? _a : 0, (_b = el.selectionEnd) !== null && _b !== void 0 ? _b : 0);
162
+ }
163
+ function handleLineDeletion(isBackspace, el) {
164
+ var _a, _b;
165
+ var selStart = (_a = el.selectionStart) !== null && _a !== void 0 ? _a : 0;
166
+ var selEnd = (_b = el.selectionEnd) !== null && _b !== void 0 ? _b : 0;
167
+ if (selStart !== selEnd) {
168
+ applyDeletion(isBackspace, selStart, selEnd);
169
+ return;
170
+ }
171
+ var start = isBackspace ? 0 : selStart;
172
+ var end = isBackspace ? selStart : maskState.typedLength;
173
+ if (start === end) {
174
+ return;
175
+ }
176
+ applyDeletion(isBackspace, start, end);
177
+ }
178
+ function applyDeletion(isBackspace, selStart, selEnd) {
179
+ var result = computeMaskedDeletion({
180
+ isBackspace: isBackspace,
181
+ selStart: selStart,
182
+ selEnd: selEnd,
183
+ currentRaw: currentRaw,
184
+ slotMap: slotMap,
185
+ });
186
+ if (!result) {
187
+ onUnexpectedInput();
188
+ return;
189
+ }
190
+ pendingCursorRef.current = result.cursorPos;
191
+ onRawChange(result.newRaw, 'input', result.cursorPos);
192
+ }
193
+ function handleSelect(e) {
194
+ var _a, _b, _c;
195
+ var el = coreInputRef.current;
196
+ if (!el) {
197
+ return;
198
+ }
199
+ var max = maskState.typedLength;
200
+ var start = (_a = el.selectionStart) !== null && _a !== void 0 ? _a : 0;
201
+ var end = (_b = el.selectionEnd) !== null && _b !== void 0 ? _b : 0;
202
+ lastSelectionRef.current = { start: start, end: end };
203
+ if (end > max) {
204
+ setMaskInputSelectionRange(el, Math.min(start, max), max, (_c = el.selectionDirection) !== null && _c !== void 0 ? _c : 'none');
205
+ }
206
+ syncSelection(el);
207
+ syncOverlayScroll();
208
+ if (e) {
209
+ inputOnSelect === null || inputOnSelect === void 0 ? void 0 : inputOnSelect(e);
210
+ }
211
+ }
212
+ function handlePaste(e) {
213
+ inputOnPaste === null || inputOnPaste === void 0 ? void 0 : inputOnPaste(e);
214
+ e.preventDefault();
215
+ if (!e.clipboardData) {
216
+ return;
217
+ }
218
+ // Игнорируем последующий input/change от браузера (beforeinput insertFromPaste и т.п.),
219
+ // иначе controlled value перетирается ненормализованным черновиком.
220
+ ignoreChangeFromPasteRef.current = true;
221
+ setTimeout(function () {
222
+ ignoreChangeFromPasteRef.current = false;
223
+ }, 0);
224
+ onRawChange(e.clipboardData.getData('text/plain'), 'paste');
225
+ }
226
+ function handleBeforeInput(e) {
227
+ var nativeEvent = e.nativeEvent;
228
+ if (nativeEvent.inputType === 'insertFromPaste') {
229
+ e.preventDefault();
230
+ ignoreChangeFromPasteRef.current = true;
231
+ setTimeout(function () {
232
+ ignoreChangeFromPasteRef.current = false;
233
+ }, 0);
234
+ }
235
+ }
236
+ function handleCopy(e) {
237
+ var _a, _b;
238
+ var el = coreInputRef.current;
239
+ if (!el) {
240
+ return;
241
+ }
242
+ var start = (_a = el.selectionStart) !== null && _a !== void 0 ? _a : 0;
243
+ var end = (_b = el.selectionEnd) !== null && _b !== void 0 ? _b : 0;
244
+ e.clipboardData.setData('text/plain', getMaskedCopyText(maskState.displayValue, start, end));
245
+ e.preventDefault();
246
+ }
247
+ function handleCut(e) {
248
+ var _a, _b;
249
+ handleCopy(e);
250
+ var el = coreInputRef.current;
251
+ if (!el) {
252
+ return;
253
+ }
254
+ var start = (_a = el.selectionStart) !== null && _a !== void 0 ? _a : 0;
255
+ var end = (_b = el.selectionEnd) !== null && _b !== void 0 ? _b : 0;
256
+ var _c = computeMaskedCut(start, end, currentRaw, slotMap), newRaw = _c.newRaw, cursorPos = _c.cursorPos;
257
+ pendingCursorRef.current = cursorPos;
258
+ onRawChange(newRaw, 'input', cursorPos);
259
+ }
260
+ function handleInput(e) {
261
+ inputOnInput === null || inputOnInput === void 0 ? void 0 : inputOnInput(e);
262
+ }
263
+ function handleMouseDown() {
264
+ requestSelectionIntent(null);
265
+ pointerFocusRef.current = true;
266
+ }
267
+ function handleMouseUp(e) {
268
+ var el = e.currentTarget;
269
+ if (resetCaretOnMouseUpRef.current && !selectAllOnFocus) {
270
+ resetCaretOnMouseUpRef.current = false;
271
+ resetCaretToInputStart(el);
272
+ }
273
+ else {
274
+ resetCaretOnMouseUpRef.current = false;
275
+ handleSelect();
276
+ }
277
+ inputOnMouseUp === null || inputOnMouseUp === void 0 ? void 0 : inputOnMouseUp(e);
278
+ }
279
+ function handleFocus(e) {
280
+ var domValue = e.currentTarget.value;
281
+ if (domValue !== maskState.typedValue) {
282
+ var syncedRaw = extractRaw(domValue, engine);
283
+ if (syncedRaw !== currentRaw) {
284
+ onRawChange(syncedRaw, 'input');
285
+ }
286
+ }
287
+ if (selectAllOnFocus) {
288
+ requestSelectionIntent('select-all');
289
+ pointerFocusRef.current = false;
290
+ resetCaretOnMouseUpRef.current = false;
291
+ }
292
+ else if (pointerFocusRef.current) {
293
+ resetCaretOnMouseUpRef.current = currentRaw.length === 0;
294
+ pointerFocusRef.current = false;
295
+ requestSelectionIntent(null);
296
+ }
297
+ else {
298
+ // Tab / programmatic focus() (в т.ч. ref.focus()): после актуализации
299
+ // maskState каретка должна оказаться после typed / leading fixed.
300
+ requestSelectionIntent('caret-end');
301
+ pendingCursorRef.current = null;
302
+ }
303
+ inputOnFocus === null || inputOnFocus === void 0 ? void 0 : inputOnFocus(e);
304
+ syncSelection(e.currentTarget);
305
+ }
306
+ function handleBlur(e) {
307
+ var _a;
308
+ var pos = (_a = e.currentTarget.selectionStart) !== null && _a !== void 0 ? _a : lastSelectionRef.current.start;
309
+ var collapsed = { start: pos, end: pos };
310
+ lastSelectionRef.current = collapsed;
311
+ setSelectionRange(collapsed);
312
+ pointerFocusRef.current = false;
313
+ resetCaretOnMouseUpRef.current = false;
314
+ requestSelectionIntent(null);
315
+ inputOnBlur === null || inputOnBlur === void 0 ? void 0 : inputOnBlur(e);
316
+ }
317
+ return {
318
+ pendingCursorRef: pendingCursorRef,
319
+ selectionRange: selectionRange,
320
+ syncSelection: syncSelection,
321
+ handleChange: handleChange,
322
+ handleKeyDown: handleKeyDown,
323
+ handleSelect: handleSelect,
324
+ handlePaste: handlePaste,
325
+ handleBeforeInput: handleBeforeInput,
326
+ handleCopy: handleCopy,
327
+ handleCut: handleCut,
328
+ handleInput: handleInput,
329
+ handleMouseDown: handleMouseDown,
330
+ handleMouseUp: handleMouseUp,
331
+ handleFocus: handleFocus,
332
+ handleBlur: handleBlur,
333
+ };
334
+ }
335
+ //# sourceMappingURL=useMaskedCoreHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMaskedCoreHandlers.js","sourceRoot":"","sources":["useMaskedCoreHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["import type React from 'react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport {\n isKeyArrow,\n isKeyBackspace,\n isKeyDelete,\n isKeyEnd,\n isKeyHome,\n isShortcutRedo,\n isShortcutSelectAll,\n isShortcutUndo,\n} from '../../../lib/events/keyboard/identifiers.js';\nimport { scrollInputCaretIntoView } from '../../../lib/scrollInputCaretIntoView.js';\nimport { ActionDetails } from '../react-imask/imask/core/action-details.js';\nimport { extractRaw } from './extractRaw.js';\nimport type { MaskedCoreProps, MaskedSelectionIntent } from './MaskedCore.types.js';\nimport { computeMaskedCut, getMaskedCopyText } from './maskedCoreClipboard.js';\nimport { computeMaskedDeletion } from './maskedCoreDeletion.js';\nimport { applyMaskedInputChange } from './maskedCoreInputChange.js';\nimport { calcNavigationSelection } from './maskedCoreNavigation.js';\nimport { setMaskInputSelectionRange } from './setMaskInputSelectionRange.js';\n\ntype MaskedCoreHandlerProps = Pick<\n MaskedCoreProps,\n | 'maskState'\n | 'slotMap'\n | 'engine'\n | 'currentRaw'\n | 'onRawChange'\n | 'onUnexpectedInput'\n | 'onUndo'\n | 'onRedo'\n | 'coreInputRef'\n | 'onKeyDown'\n | 'onMouseUp'\n | 'onInput'\n | 'onSelect'\n | 'onFocus'\n | 'onBlur'\n | 'onPaste'\n | 'selectAllOnFocus'\n> & {\n syncOverlayScroll: () => void;\n requestSelectionIntent: (intent: MaskedSelectionIntent) => void;\n};\n\n/**\n * Собирает обработчики DOM-событий для {@link MaskedCore}.\n * Инкапсулирует логику ввода, навигации, clipboard и undo/redo.\n *\n * @param props — состояние маски, движок и колбэки от MaskedInputV2.\n * @returns refs и обработчики для прямого `<input>`.\n */\nexport function useMaskedCoreHandlers(props: MaskedCoreHandlerProps) {\n const {\n maskState,\n slotMap,\n engine,\n currentRaw,\n onRawChange,\n onUnexpectedInput,\n onUndo,\n onRedo,\n coreInputRef,\n onKeyDown: inputOnKeyDown,\n onMouseUp: inputOnMouseUp,\n onInput: inputOnInput,\n onSelect: inputOnSelect,\n onFocus: inputOnFocus,\n onBlur: inputOnBlur,\n onPaste: inputOnPaste,\n selectAllOnFocus,\n syncOverlayScroll,\n requestSelectionIntent,\n } = props;\n\n const pendingCursorRef = useRef<number | null>(null);\n const resetCaretOnMouseUpRef = useRef(false);\n const pointerFocusRef = useRef(false);\n /** Блокирует нативный change/input после нашего paste (beforeinput/input race в браузере). */\n const ignoreChangeFromPasteRef = useRef(false);\n const lastSelectionRef = useRef<{ start: number; end: number }>({ start: 0, end: 0 });\n const [selectionRange, setSelectionRange] = useState({ start: 0, end: 0 });\n\n const syncSelection = useCallback((el: HTMLInputElement) => {\n const start = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? 0;\n lastSelectionRef.current = { start, end };\n setSelectionRange((prev) => (prev.start === start && prev.end === end ? prev : { start, end }));\n }, []);\n\n function getFocusedInputCaretPos() {\n return engine.compute(currentRaw, true).typedLength;\n }\n\n function scrollCaretIntoView(el: HTMLInputElement) {\n scrollInputCaretIntoView(el);\n syncOverlayScroll();\n }\n\n function resetCaretToInputStart(el: HTMLInputElement) {\n const pos = getFocusedInputCaretPos();\n pendingCursorRef.current = pos;\n setMaskInputSelectionRange(el, pos);\n scrollCaretIntoView(el);\n syncSelection(el);\n }\n\n function setPendingCursor(pos: number) {\n requestSelectionIntent(null);\n pendingCursorRef.current = pos;\n setMaskInputSelectionRange(coreInputRef.current, pos);\n }\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n if (ignoreChangeFromPasteRef.current) {\n return;\n }\n\n requestSelectionIntent(null);\n resetCaretOnMouseUpRef.current = false;\n\n const browserDraft = e.target.value;\n const cursorPos = e.target.selectionStart ?? 0;\n const oldSelection = lastSelectionRef.current;\n const inputType = (e.nativeEvent as InputEvent).inputType;\n const details = new ActionDetails({\n value: browserDraft,\n cursorPos,\n oldValue: maskState.typedValue,\n oldSelection: { ...oldSelection },\n });\n\n // Autofill / insertReplacementText / drop: нет clipboard paste-события,\n // но нужна та же нормализация, что и у onBeforePasteValue.\n // Всегда replace-all: повторный change (Яндекс.Браузер и др.) иначе вставляет\n // в позицию курсора поверх уже нормализованного raw → порча значения.\n const isBulkInsert = details.inserted.length > 1 || inputType === 'insertReplacementText';\n if (isBulkInsert) {\n ignoreChangeFromPasteRef.current = true;\n setTimeout(() => {\n ignoreChangeFromPasteRef.current = false;\n }, 0);\n\n if (coreInputRef.current) {\n setMaskInputSelectionRange(coreInputRef.current, 0, maskState.typedLength);\n lastSelectionRef.current = { start: 0, end: maskState.typedLength };\n }\n onRawChange(browserDraft, 'paste');\n return;\n }\n\n const result = applyMaskedInputChange({\n browserDraft,\n cursorPos,\n typedValue: maskState.typedValue,\n currentRaw,\n oldSelection,\n engine,\n });\n\n setPendingCursor(result.cursorPos);\n\n if (result.rejected) {\n onUnexpectedInput();\n return;\n }\n\n onRawChange(result.newRaw, 'input', result.cursorPos);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n requestSelectionIntent(null);\n resetCaretOnMouseUpRef.current = false;\n\n const el = coreInputRef.current;\n\n if (isShortcutSelectAll(e) || isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e) || isKeyBackspace(e) || isKeyDelete(e)) {\n pendingCursorRef.current = null;\n }\n\n if (isShortcutSelectAll(e)) {\n e.preventDefault();\n setMaskInputSelectionRange(el, 0, maskState.typedLength);\n if (el) {\n scrollCaretIntoView(el);\n syncSelection(el);\n }\n } else if (isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e)) {\n e.preventDefault();\n const [start, end, dir] = calcNavigationSelection(e, maskState.typedLength, el);\n setMaskInputSelectionRange(el, start, end, dir);\n if (el) {\n scrollCaretIntoView(el);\n syncSelection(el);\n }\n } else if (isKeyBackspace(e) || isKeyDelete(e)) {\n e.preventDefault();\n if (el) {\n // Cmd/Ctrl+Backspace — удалить до начала строки; Cmd/Ctrl+Delete — до конца.\n if (e.metaKey || e.ctrlKey) {\n handleLineDeletion(isKeyBackspace(e), el);\n } else {\n handleDeletion(isKeyBackspace(e), el);\n }\n }\n } else if (isShortcutUndo(e)) {\n e.preventDefault();\n onUndo?.();\n } else if (isShortcutRedo(e)) {\n e.preventDefault();\n onRedo?.();\n }\n\n inputOnKeyDown?.(e);\n }\n\n function handleDeletion(isBackspace: boolean, el: HTMLInputElement) {\n applyDeletion(isBackspace, el.selectionStart ?? 0, el.selectionEnd ?? 0);\n }\n\n function handleLineDeletion(isBackspace: boolean, el: HTMLInputElement) {\n const selStart = el.selectionStart ?? 0;\n const selEnd = el.selectionEnd ?? 0;\n\n if (selStart !== selEnd) {\n applyDeletion(isBackspace, selStart, selEnd);\n return;\n }\n\n const start = isBackspace ? 0 : selStart;\n const end = isBackspace ? selStart : maskState.typedLength;\n if (start === end) {\n return;\n }\n\n applyDeletion(isBackspace, start, end);\n }\n\n function applyDeletion(isBackspace: boolean, selStart: number, selEnd: number) {\n const result = computeMaskedDeletion({\n isBackspace,\n selStart,\n selEnd,\n currentRaw,\n slotMap,\n });\n\n if (!result) {\n onUnexpectedInput();\n return;\n }\n\n pendingCursorRef.current = result.cursorPos;\n onRawChange(result.newRaw, 'input', result.cursorPos);\n }\n\n function handleSelect(e?: React.SyntheticEvent<HTMLInputElement>) {\n const el = coreInputRef.current;\n if (!el) {\n return;\n }\n\n const max = maskState.typedLength;\n const start = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? 0;\n lastSelectionRef.current = { start, end };\n\n if (end > max) {\n setMaskInputSelectionRange(el, Math.min(start, max), max, el.selectionDirection ?? 'none');\n }\n\n syncSelection(el);\n syncOverlayScroll();\n\n if (e) {\n inputOnSelect?.(e);\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n inputOnPaste?.(e);\n e.preventDefault();\n\n if (!e.clipboardData) {\n return;\n }\n\n // Игнорируем последующий input/change от браузера (beforeinput insertFromPaste и т.п.),\n // иначе controlled value перетирается ненормализованным черновиком.\n ignoreChangeFromPasteRef.current = true;\n setTimeout(() => {\n ignoreChangeFromPasteRef.current = false;\n }, 0);\n\n onRawChange(e.clipboardData.getData('text/plain'), 'paste');\n }\n\n function handleBeforeInput(e: React.FormEvent<HTMLInputElement>) {\n const nativeEvent = e.nativeEvent as InputEvent;\n if (nativeEvent.inputType === 'insertFromPaste') {\n e.preventDefault();\n ignoreChangeFromPasteRef.current = true;\n setTimeout(() => {\n ignoreChangeFromPasteRef.current = false;\n }, 0);\n }\n }\n\n function handleCopy(e: React.ClipboardEvent<HTMLInputElement>) {\n const el = coreInputRef.current;\n if (!el) {\n return;\n }\n\n const start = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? 0;\n e.clipboardData.setData('text/plain', getMaskedCopyText(maskState.displayValue, start, end));\n e.preventDefault();\n }\n\n function handleCut(e: React.ClipboardEvent<HTMLInputElement>) {\n handleCopy(e);\n\n const el = coreInputRef.current;\n if (!el) {\n return;\n }\n\n const start = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? 0;\n const { newRaw, cursorPos } = computeMaskedCut(start, end, currentRaw, slotMap);\n\n pendingCursorRef.current = cursorPos;\n onRawChange(newRaw, 'input', cursorPos);\n }\n\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n inputOnInput?.(e);\n }\n\n function handleMouseDown() {\n requestSelectionIntent(null);\n pointerFocusRef.current = true;\n }\n\n function handleMouseUp(e: React.MouseEvent<HTMLInputElement>) {\n const el = e.currentTarget;\n\n if (resetCaretOnMouseUpRef.current && !selectAllOnFocus) {\n resetCaretOnMouseUpRef.current = false;\n resetCaretToInputStart(el);\n } else {\n resetCaretOnMouseUpRef.current = false;\n handleSelect();\n }\n\n inputOnMouseUp?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n const domValue = e.currentTarget.value;\n if (domValue !== maskState.typedValue) {\n const syncedRaw = extractRaw(domValue, engine);\n if (syncedRaw !== currentRaw) {\n onRawChange(syncedRaw, 'input');\n }\n }\n\n if (selectAllOnFocus) {\n requestSelectionIntent('select-all');\n pointerFocusRef.current = false;\n resetCaretOnMouseUpRef.current = false;\n } else if (pointerFocusRef.current) {\n resetCaretOnMouseUpRef.current = currentRaw.length === 0;\n pointerFocusRef.current = false;\n requestSelectionIntent(null);\n } else {\n // Tab / programmatic focus() (в т.ч. ref.focus()): после актуализации\n // maskState каретка должна оказаться после typed / leading fixed.\n requestSelectionIntent('caret-end');\n pendingCursorRef.current = null;\n }\n\n inputOnFocus?.(e);\n syncSelection(e.currentTarget);\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n const pos = e.currentTarget.selectionStart ?? lastSelectionRef.current.start;\n const collapsed = { start: pos, end: pos };\n\n lastSelectionRef.current = collapsed;\n setSelectionRange(collapsed);\n pointerFocusRef.current = false;\n resetCaretOnMouseUpRef.current = false;\n requestSelectionIntent(null);\n\n inputOnBlur?.(e);\n }\n\n return {\n pendingCursorRef,\n selectionRange,\n syncSelection,\n handleChange,\n handleKeyDown,\n handleSelect,\n handlePaste,\n handleBeforeInput,\n handleCopy,\n handleCut,\n handleInput,\n handleMouseDown,\n handleMouseUp,\n handleFocus,\n handleBlur,\n };\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { HTMLMaskElement } from './html-mask-element.js';
2
+ export type InputElement = HTMLTextAreaElement | HTMLInputElement;
3
+ /** Bridge between InputElement and {@link Masked} */
4
+ export declare class HTMLInputMaskElement extends HTMLMaskElement {
5
+ /** InputElement to use mask on */
6
+ input: InputElement;
7
+ constructor(input: InputElement);
8
+ /** Returns InputElement selection start */
9
+ get _unsafeSelectionStart(): number | null;
10
+ /** Returns InputElement selection end */
11
+ get _unsafeSelectionEnd(): number | null;
12
+ /** Sets InputElement selection */
13
+ _unsafeSelect(start: number, end: number): void;
14
+ get value(): string;
15
+ set value(value: string);
16
+ }
@@ -0,0 +1,59 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ /* eslint-disable eqeqeq */
17
+ import { HTMLMaskElement } from './html-mask-element.js';
18
+ /** Bridge between InputElement and {@link Masked} */
19
+ var HTMLInputMaskElement = /** @class */ (function (_super) {
20
+ __extends(HTMLInputMaskElement, _super);
21
+ function HTMLInputMaskElement(input) {
22
+ var _this = _super.call(this, input) || this;
23
+ _this.input = input;
24
+ return _this;
25
+ }
26
+ Object.defineProperty(HTMLInputMaskElement.prototype, "_unsafeSelectionStart", {
27
+ /** Returns InputElement selection start */
28
+ get: function () {
29
+ return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;
30
+ },
31
+ enumerable: false,
32
+ configurable: true
33
+ });
34
+ Object.defineProperty(HTMLInputMaskElement.prototype, "_unsafeSelectionEnd", {
35
+ /** Returns InputElement selection end */
36
+ get: function () {
37
+ return this.input.selectionEnd;
38
+ },
39
+ enumerable: false,
40
+ configurable: true
41
+ });
42
+ /** Sets InputElement selection */
43
+ HTMLInputMaskElement.prototype._unsafeSelect = function (start, end) {
44
+ this.input.setSelectionRange(start, end);
45
+ };
46
+ Object.defineProperty(HTMLInputMaskElement.prototype, "value", {
47
+ get: function () {
48
+ return this.input.value;
49
+ },
50
+ set: function (value) {
51
+ this.input.value = value;
52
+ },
53
+ enumerable: false,
54
+ configurable: true
55
+ });
56
+ return HTMLInputMaskElement;
57
+ }(HTMLMaskElement));
58
+ export { HTMLInputMaskElement };
59
+ //# sourceMappingURL=html-input-mask-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-input-mask-element.js","sourceRoot":"","sources":["html-input-mask-element.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,qDAAqD;AACrD;IAA0C,wCAAe;IAIvD,8BAAY,KAAmB;QAC7B,YAAA,MAAK,YAAC,KAAK,CAAC,SAAC;QACb,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;IACrB,CAAC;IAGD,sBAAa,uDAAqB;QADlC,2CAA2C;aAC3C;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3F,CAAC;;;OAAA;IAGD,sBAAa,qDAAmB;QADhC,yCAAyC;aACzC;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACjC,CAAC;;;OAAA;IAED,kCAAkC;IAClC,4CAAa,GAAb,UAAc,KAAa,EAAE,GAAW;QACtC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,sBAAa,uCAAK;aAAlB;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,CAAC;aACD,UAAmB,KAAa;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,CAAC;;;OAHA;IAIH,2BAAC;AAAD,CAAC,AA9BD,CAA0C,eAAe,GA8BxD","sourcesContent":["/* eslint-disable eqeqeq */\nimport { HTMLMaskElement } from './html-mask-element.js';\n\nexport type InputElement = HTMLTextAreaElement | HTMLInputElement;\n\n/** Bridge between InputElement and {@link Masked} */\nexport class HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n input!: InputElement;\n\n constructor(input: InputElement) {\n super(input);\n this.input = input;\n }\n\n /** Returns InputElement selection start */\n override get _unsafeSelectionStart(): number | null {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n override get _unsafeSelectionEnd(): number | null {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start: number, end: number): void {\n this.input.setSelectionRange(start, end);\n }\n\n override get value(): string {\n return this.input.value;\n }\n override set value(value: string) {\n this.input.value = value;\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { MaskElement, type EventHandlers } from './mask-element.js';
2
+ /** Bridge between HTMLElement and {@link Masked} */
3
+ export declare abstract class HTMLMaskElement extends MaskElement {
4
+ /** HTMLElement to use mask on */
5
+ input: HTMLElement;
6
+ _handlers: EventHandlers;
7
+ abstract value: string;
8
+ constructor(input: HTMLElement);
9
+ get rootElement(): HTMLDocument;
10
+ /** Is element in focus */
11
+ get isActive(): boolean;
12
+ /** Binds HTMLElement events to mask internal events */
13
+ bindEvents(handlers: EventHandlers): void;
14
+ _onKeydown(e: KeyboardEvent): void;
15
+ _onBeforeinput(e: InputEvent): void;
16
+ _onCompositionEnd(e: CompositionEvent): void;
17
+ _onInput(e: InputEvent): void;
18
+ /** Unbinds HTMLElement events to mask internal events */
19
+ unbindEvents(): void;
20
+ }