@cloud-ru/ds-fields 1.0.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 (314) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +888 -0
  4. package/dist/cjs/components/FieldColor/FieldColor.d.ts +48 -0
  5. package/dist/cjs/components/FieldColor/FieldColor.js +147 -0
  6. package/dist/cjs/components/FieldColor/index.d.ts +1 -0
  7. package/dist/cjs/components/FieldColor/index.js +17 -0
  8. package/dist/cjs/components/FieldColor/styles.module.css +79 -0
  9. package/dist/cjs/components/FieldColor/utils.d.ts +7 -0
  10. package/dist/cjs/components/FieldColor/utils.js +19 -0
  11. package/dist/cjs/components/FieldCombo/FieldCombo.d.ts +91 -0
  12. package/dist/cjs/components/FieldCombo/FieldCombo.js +200 -0
  13. package/dist/cjs/components/FieldCombo/index.d.ts +1 -0
  14. package/dist/cjs/components/FieldCombo/index.js +17 -0
  15. package/dist/cjs/components/FieldDate/FieldDate.d.ts +2 -0
  16. package/dist/cjs/components/FieldDate/FieldDate.js +369 -0
  17. package/dist/cjs/components/FieldDate/constants.d.ts +10 -0
  18. package/dist/cjs/components/FieldDate/constants.js +13 -0
  19. package/dist/cjs/components/FieldDate/index.d.ts +3 -0
  20. package/dist/cjs/components/FieldDate/index.js +19 -0
  21. package/dist/cjs/components/FieldDate/mask.d.ts +20 -0
  22. package/dist/cjs/components/FieldDate/mask.js +117 -0
  23. package/dist/cjs/components/FieldDate/styles.module.css +43 -0
  24. package/dist/cjs/components/FieldDate/types.d.ts +100 -0
  25. package/dist/cjs/components/FieldDate/types.js +2 -0
  26. package/dist/cjs/components/FieldDate/utils.d.ts +3 -0
  27. package/dist/cjs/components/FieldDate/utils.js +8 -0
  28. package/dist/cjs/components/FieldSecure/FieldSecure.d.ts +64 -0
  29. package/dist/cjs/components/FieldSecure/FieldSecure.js +158 -0
  30. package/dist/cjs/components/FieldSecure/index.d.ts +1 -0
  31. package/dist/cjs/components/FieldSecure/index.js +17 -0
  32. package/dist/cjs/components/FieldSelect/FieldSelect.d.ts +2 -0
  33. package/dist/cjs/components/FieldSelect/FieldSelect.js +360 -0
  34. package/dist/cjs/components/FieldSelect/constants.d.ts +4 -0
  35. package/dist/cjs/components/FieldSelect/constants.js +7 -0
  36. package/dist/cjs/components/FieldSelect/index.d.ts +3 -0
  37. package/dist/cjs/components/FieldSelect/index.js +19 -0
  38. package/dist/cjs/components/FieldSelect/styles.module.css +92 -0
  39. package/dist/cjs/components/FieldSelect/types.d.ts +197 -0
  40. package/dist/cjs/components/FieldSelect/types.js +2 -0
  41. package/dist/cjs/components/FieldSelect/utils.d.ts +19 -0
  42. package/dist/cjs/components/FieldSelect/utils.js +104 -0
  43. package/dist/cjs/components/FieldSlider/FieldSlider.d.ts +92 -0
  44. package/dist/cjs/components/FieldSlider/FieldSlider.js +196 -0
  45. package/dist/cjs/components/FieldSlider/index.d.ts +2 -0
  46. package/dist/cjs/components/FieldSlider/index.js +18 -0
  47. package/dist/cjs/components/FieldSlider/styles.module.css +44 -0
  48. package/dist/cjs/components/FieldSlider/types.d.ts +4 -0
  49. package/dist/cjs/components/FieldSlider/types.js +2 -0
  50. package/dist/cjs/components/FieldSlider/utils/generateAllowedValues.d.ts +1 -0
  51. package/dist/cjs/components/FieldSlider/utils/generateAllowedValues.js +16 -0
  52. package/dist/cjs/components/FieldSlider/utils/getClosestMark.d.ts +4 -0
  53. package/dist/cjs/components/FieldSlider/utils/getClosestMark.js +16 -0
  54. package/dist/cjs/components/FieldSlider/utils/getMarkLabel.d.ts +2 -0
  55. package/dist/cjs/components/FieldSlider/utils/getMarkLabel.js +7 -0
  56. package/dist/cjs/components/FieldSlider/utils/getTextFieldValue.d.ts +2 -0
  57. package/dist/cjs/components/FieldSlider/utils/getTextFieldValue.js +9 -0
  58. package/dist/cjs/components/FieldSlider/utils/index.d.ts +5 -0
  59. package/dist/cjs/components/FieldSlider/utils/index.js +21 -0
  60. package/dist/cjs/components/FieldSlider/utils/isMarkObject.d.ts +6 -0
  61. package/dist/cjs/components/FieldSlider/utils/isMarkObject.js +6 -0
  62. package/dist/cjs/components/FieldStepper/FieldStepper.d.ts +81 -0
  63. package/dist/cjs/components/FieldStepper/FieldStepper.js +160 -0
  64. package/dist/cjs/components/FieldStepper/index.d.ts +1 -0
  65. package/dist/cjs/components/FieldStepper/index.js +17 -0
  66. package/dist/cjs/components/FieldStepper/styles.module.css +78 -0
  67. package/dist/cjs/components/FieldStepper/utils.d.ts +14 -0
  68. package/dist/cjs/components/FieldStepper/utils.js +45 -0
  69. package/dist/cjs/components/FieldText/FieldText.d.ts +11 -0
  70. package/dist/cjs/components/FieldText/FieldText.js +14 -0
  71. package/dist/cjs/components/FieldText/index.d.ts +1 -0
  72. package/dist/cjs/components/FieldText/index.js +17 -0
  73. package/dist/cjs/components/FieldTextArea/FieldTextArea.d.ts +95 -0
  74. package/dist/cjs/components/FieldTextArea/FieldTextArea.js +114 -0
  75. package/dist/cjs/components/FieldTextArea/index.d.ts +1 -0
  76. package/dist/cjs/components/FieldTextArea/index.js +17 -0
  77. package/dist/cjs/components/FieldTextArea/styles.module.css +123 -0
  78. package/dist/cjs/components/FieldTime/FieldTime.d.ts +74 -0
  79. package/dist/cjs/components/FieldTime/FieldTime.js +167 -0
  80. package/dist/cjs/components/FieldTime/index.d.ts +2 -0
  81. package/dist/cjs/components/FieldTime/index.js +17 -0
  82. package/dist/cjs/components/FieldTime/mask.d.ts +3 -0
  83. package/dist/cjs/components/FieldTime/mask.js +24 -0
  84. package/dist/cjs/components/FieldTime/styles.module.css +3 -0
  85. package/dist/cjs/components/index.d.ts +14 -0
  86. package/dist/cjs/components/index.js +32 -0
  87. package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButton.d.ts +35 -0
  88. package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButton.js +47 -0
  89. package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.d.ts +26 -0
  90. package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.js +24 -0
  91. package/dist/cjs/components/shared/helperComponents/FieldElementButton/constants.d.ts +9 -0
  92. package/dist/cjs/components/shared/helperComponents/FieldElementButton/constants.js +12 -0
  93. package/dist/cjs/components/shared/helperComponents/FieldElementButton/index.d.ts +4 -0
  94. package/dist/cjs/components/shared/helperComponents/FieldElementButton/index.js +20 -0
  95. package/dist/cjs/components/shared/helperComponents/FieldElementButton/styles.module.css +204 -0
  96. package/dist/cjs/components/shared/helperComponents/FieldElementButton/types.d.ts +4 -0
  97. package/dist/cjs/components/shared/helperComponents/FieldElementButton/types.js +2 -0
  98. package/dist/cjs/components/shared/helperComponents/FieldShell/FieldShell.d.ts +43 -0
  99. package/dist/cjs/components/shared/helperComponents/FieldShell/FieldShell.js +22 -0
  100. package/dist/cjs/components/shared/helperComponents/FieldShell/index.d.ts +1 -0
  101. package/dist/cjs/components/shared/helperComponents/FieldShell/index.js +17 -0
  102. package/dist/cjs/components/shared/helperComponents/FieldShell/styles.module.css +11 -0
  103. package/dist/cjs/components/shared/hooks/useCopyButton.d.ts +20 -0
  104. package/dist/cjs/components/shared/hooks/useCopyButton.js +58 -0
  105. package/dist/cjs/components/shared/index.d.ts +4 -0
  106. package/dist/cjs/components/shared/index.js +20 -0
  107. package/dist/cjs/components/shared/styles.module.css +673 -0
  108. package/dist/cjs/components/shared/utils.d.ts +69 -0
  109. package/dist/cjs/components/shared/utils.js +104 -0
  110. package/dist/cjs/constants.d.ts +61 -0
  111. package/dist/cjs/constants.js +76 -0
  112. package/dist/cjs/hooks/index.d.ts +1 -0
  113. package/dist/cjs/hooks/index.js +17 -0
  114. package/dist/cjs/hooks/useAdaptiveAutoFocus.d.ts +7 -0
  115. package/dist/cjs/hooks/useAdaptiveAutoFocus.js +10 -0
  116. package/dist/cjs/index.d.ts +3 -0
  117. package/dist/cjs/index.js +19 -0
  118. package/dist/cjs/package.json +3 -0
  119. package/dist/cjs/segments/index.d.ts +2 -0
  120. package/dist/cjs/segments/index.js +18 -0
  121. package/dist/cjs/segments/segments.d.ts +22 -0
  122. package/dist/cjs/segments/segments.js +46 -0
  123. package/dist/cjs/segments/useSegmentedMask.d.ts +43 -0
  124. package/dist/cjs/segments/useSegmentedMask.js +282 -0
  125. package/dist/cjs/style.css +1350 -0
  126. package/dist/esm/components/FieldColor/FieldColor.d.ts +48 -0
  127. package/dist/esm/components/FieldColor/FieldColor.js +141 -0
  128. package/dist/esm/components/FieldColor/index.d.ts +1 -0
  129. package/dist/esm/components/FieldColor/index.js +1 -0
  130. package/dist/esm/components/FieldColor/styles.module.css +79 -0
  131. package/dist/esm/components/FieldColor/utils.d.ts +7 -0
  132. package/dist/esm/components/FieldColor/utils.js +16 -0
  133. package/dist/esm/components/FieldCombo/FieldCombo.d.ts +91 -0
  134. package/dist/esm/components/FieldCombo/FieldCombo.js +194 -0
  135. package/dist/esm/components/FieldCombo/index.d.ts +1 -0
  136. package/dist/esm/components/FieldCombo/index.js +1 -0
  137. package/dist/esm/components/FieldDate/FieldDate.d.ts +2 -0
  138. package/dist/esm/components/FieldDate/FieldDate.js +363 -0
  139. package/dist/esm/components/FieldDate/constants.d.ts +10 -0
  140. package/dist/esm/components/FieldDate/constants.js +10 -0
  141. package/dist/esm/components/FieldDate/index.d.ts +3 -0
  142. package/dist/esm/components/FieldDate/index.js +3 -0
  143. package/dist/esm/components/FieldDate/mask.d.ts +20 -0
  144. package/dist/esm/components/FieldDate/mask.js +111 -0
  145. package/dist/esm/components/FieldDate/styles.module.css +43 -0
  146. package/dist/esm/components/FieldDate/types.d.ts +100 -0
  147. package/dist/esm/components/FieldDate/types.js +1 -0
  148. package/dist/esm/components/FieldDate/utils.d.ts +3 -0
  149. package/dist/esm/components/FieldDate/utils.js +5 -0
  150. package/dist/esm/components/FieldSecure/FieldSecure.d.ts +64 -0
  151. package/dist/esm/components/FieldSecure/FieldSecure.js +152 -0
  152. package/dist/esm/components/FieldSecure/index.d.ts +1 -0
  153. package/dist/esm/components/FieldSecure/index.js +1 -0
  154. package/dist/esm/components/FieldSelect/FieldSelect.d.ts +2 -0
  155. package/dist/esm/components/FieldSelect/FieldSelect.js +354 -0
  156. package/dist/esm/components/FieldSelect/constants.d.ts +4 -0
  157. package/dist/esm/components/FieldSelect/constants.js +4 -0
  158. package/dist/esm/components/FieldSelect/index.d.ts +3 -0
  159. package/dist/esm/components/FieldSelect/index.js +3 -0
  160. package/dist/esm/components/FieldSelect/styles.module.css +92 -0
  161. package/dist/esm/components/FieldSelect/types.d.ts +197 -0
  162. package/dist/esm/components/FieldSelect/types.js +1 -0
  163. package/dist/esm/components/FieldSelect/utils.d.ts +19 -0
  164. package/dist/esm/components/FieldSelect/utils.js +93 -0
  165. package/dist/esm/components/FieldSlider/FieldSlider.d.ts +92 -0
  166. package/dist/esm/components/FieldSlider/FieldSlider.js +190 -0
  167. package/dist/esm/components/FieldSlider/index.d.ts +2 -0
  168. package/dist/esm/components/FieldSlider/index.js +2 -0
  169. package/dist/esm/components/FieldSlider/styles.module.css +44 -0
  170. package/dist/esm/components/FieldSlider/types.d.ts +4 -0
  171. package/dist/esm/components/FieldSlider/types.js +1 -0
  172. package/dist/esm/components/FieldSlider/utils/generateAllowedValues.d.ts +1 -0
  173. package/dist/esm/components/FieldSlider/utils/generateAllowedValues.js +13 -0
  174. package/dist/esm/components/FieldSlider/utils/getClosestMark.d.ts +4 -0
  175. package/dist/esm/components/FieldSlider/utils/getClosestMark.js +13 -0
  176. package/dist/esm/components/FieldSlider/utils/getMarkLabel.d.ts +2 -0
  177. package/dist/esm/components/FieldSlider/utils/getMarkLabel.js +4 -0
  178. package/dist/esm/components/FieldSlider/utils/getTextFieldValue.d.ts +2 -0
  179. package/dist/esm/components/FieldSlider/utils/getTextFieldValue.js +6 -0
  180. package/dist/esm/components/FieldSlider/utils/index.d.ts +5 -0
  181. package/dist/esm/components/FieldSlider/utils/index.js +5 -0
  182. package/dist/esm/components/FieldSlider/utils/isMarkObject.d.ts +6 -0
  183. package/dist/esm/components/FieldSlider/utils/isMarkObject.js +3 -0
  184. package/dist/esm/components/FieldStepper/FieldStepper.d.ts +81 -0
  185. package/dist/esm/components/FieldStepper/FieldStepper.js +154 -0
  186. package/dist/esm/components/FieldStepper/index.d.ts +1 -0
  187. package/dist/esm/components/FieldStepper/index.js +1 -0
  188. package/dist/esm/components/FieldStepper/styles.module.css +78 -0
  189. package/dist/esm/components/FieldStepper/utils.d.ts +14 -0
  190. package/dist/esm/components/FieldStepper/utils.js +38 -0
  191. package/dist/esm/components/FieldText/FieldText.d.ts +11 -0
  192. package/dist/esm/components/FieldText/FieldText.js +11 -0
  193. package/dist/esm/components/FieldText/index.d.ts +1 -0
  194. package/dist/esm/components/FieldText/index.js +1 -0
  195. package/dist/esm/components/FieldTextArea/FieldTextArea.d.ts +95 -0
  196. package/dist/esm/components/FieldTextArea/FieldTextArea.js +108 -0
  197. package/dist/esm/components/FieldTextArea/index.d.ts +1 -0
  198. package/dist/esm/components/FieldTextArea/index.js +1 -0
  199. package/dist/esm/components/FieldTextArea/styles.module.css +123 -0
  200. package/dist/esm/components/FieldTime/FieldTime.d.ts +74 -0
  201. package/dist/esm/components/FieldTime/FieldTime.js +161 -0
  202. package/dist/esm/components/FieldTime/index.d.ts +2 -0
  203. package/dist/esm/components/FieldTime/index.js +1 -0
  204. package/dist/esm/components/FieldTime/mask.d.ts +3 -0
  205. package/dist/esm/components/FieldTime/mask.js +20 -0
  206. package/dist/esm/components/FieldTime/styles.module.css +3 -0
  207. package/dist/esm/components/index.d.ts +14 -0
  208. package/dist/esm/components/index.js +12 -0
  209. package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButton.d.ts +35 -0
  210. package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButton.js +41 -0
  211. package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.d.ts +26 -0
  212. package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.js +21 -0
  213. package/dist/esm/components/shared/helperComponents/FieldElementButton/constants.d.ts +9 -0
  214. package/dist/esm/components/shared/helperComponents/FieldElementButton/constants.js +9 -0
  215. package/dist/esm/components/shared/helperComponents/FieldElementButton/index.d.ts +4 -0
  216. package/dist/esm/components/shared/helperComponents/FieldElementButton/index.js +4 -0
  217. package/dist/esm/components/shared/helperComponents/FieldElementButton/styles.module.css +204 -0
  218. package/dist/esm/components/shared/helperComponents/FieldElementButton/types.d.ts +4 -0
  219. package/dist/esm/components/shared/helperComponents/FieldElementButton/types.js +1 -0
  220. package/dist/esm/components/shared/helperComponents/FieldShell/FieldShell.d.ts +43 -0
  221. package/dist/esm/components/shared/helperComponents/FieldShell/FieldShell.js +16 -0
  222. package/dist/esm/components/shared/helperComponents/FieldShell/index.d.ts +1 -0
  223. package/dist/esm/components/shared/helperComponents/FieldShell/index.js +1 -0
  224. package/dist/esm/components/shared/helperComponents/FieldShell/styles.module.css +11 -0
  225. package/dist/esm/components/shared/hooks/useCopyButton.d.ts +20 -0
  226. package/dist/esm/components/shared/hooks/useCopyButton.js +55 -0
  227. package/dist/esm/components/shared/index.d.ts +4 -0
  228. package/dist/esm/components/shared/index.js +4 -0
  229. package/dist/esm/components/shared/styles.module.css +673 -0
  230. package/dist/esm/components/shared/utils.d.ts +69 -0
  231. package/dist/esm/components/shared/utils.js +91 -0
  232. package/dist/esm/constants.d.ts +61 -0
  233. package/dist/esm/constants.js +73 -0
  234. package/dist/esm/hooks/index.d.ts +1 -0
  235. package/dist/esm/hooks/index.js +1 -0
  236. package/dist/esm/hooks/useAdaptiveAutoFocus.d.ts +7 -0
  237. package/dist/esm/hooks/useAdaptiveAutoFocus.js +7 -0
  238. package/dist/esm/index.d.ts +3 -0
  239. package/dist/esm/index.js +3 -0
  240. package/dist/esm/segments/index.d.ts +2 -0
  241. package/dist/esm/segments/index.js +2 -0
  242. package/dist/esm/segments/segments.d.ts +22 -0
  243. package/dist/esm/segments/segments.js +43 -0
  244. package/dist/esm/segments/useSegmentedMask.d.ts +43 -0
  245. package/dist/esm/segments/useSegmentedMask.js +279 -0
  246. package/dist/esm/style.css +1350 -0
  247. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  248. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  249. package/package.json +62 -0
  250. package/src/components/FieldColor/FieldColor.tsx +426 -0
  251. package/src/components/FieldColor/index.ts +1 -0
  252. package/src/components/FieldColor/styles.module.scss +120 -0
  253. package/src/components/FieldColor/utils.ts +17 -0
  254. package/src/components/FieldCombo/FieldCombo.tsx +495 -0
  255. package/src/components/FieldCombo/index.ts +1 -0
  256. package/src/components/FieldDate/FieldDate.tsx +658 -0
  257. package/src/components/FieldDate/constants.ts +11 -0
  258. package/src/components/FieldDate/index.ts +3 -0
  259. package/src/components/FieldDate/mask.ts +123 -0
  260. package/src/components/FieldDate/styles.module.scss +56 -0
  261. package/src/components/FieldDate/types.ts +124 -0
  262. package/src/components/FieldDate/utils.ts +7 -0
  263. package/src/components/FieldSecure/FieldSecure.tsx +398 -0
  264. package/src/components/FieldSecure/index.ts +1 -0
  265. package/src/components/FieldSelect/FieldSelect.tsx +689 -0
  266. package/src/components/FieldSelect/constants.ts +4 -0
  267. package/src/components/FieldSelect/index.ts +3 -0
  268. package/src/components/FieldSelect/styles.module.scss +104 -0
  269. package/src/components/FieldSelect/types.ts +212 -0
  270. package/src/components/FieldSelect/utils.ts +134 -0
  271. package/src/components/FieldSlider/FieldSlider.tsx +502 -0
  272. package/src/components/FieldSlider/index.ts +2 -0
  273. package/src/components/FieldSlider/styles.module.scss +47 -0
  274. package/src/components/FieldSlider/types.ts +5 -0
  275. package/src/components/FieldSlider/utils/generateAllowedValues.ts +13 -0
  276. package/src/components/FieldSlider/utils/getClosestMark.ts +21 -0
  277. package/src/components/FieldSlider/utils/getMarkLabel.ts +7 -0
  278. package/src/components/FieldSlider/utils/getTextFieldValue.ts +8 -0
  279. package/src/components/FieldSlider/utils/index.ts +5 -0
  280. package/src/components/FieldSlider/utils/isMarkObject.ts +7 -0
  281. package/src/components/FieldStepper/FieldStepper.tsx +457 -0
  282. package/src/components/FieldStepper/index.ts +1 -0
  283. package/src/components/FieldStepper/styles.module.scss +98 -0
  284. package/src/components/FieldStepper/utils.ts +44 -0
  285. package/src/components/FieldText/FieldText.tsx +27 -0
  286. package/src/components/FieldText/index.ts +1 -0
  287. package/src/components/FieldTextArea/FieldTextArea.tsx +374 -0
  288. package/src/components/FieldTextArea/index.ts +1 -0
  289. package/src/components/FieldTextArea/styles.module.scss +192 -0
  290. package/src/components/FieldTime/FieldTime.tsx +401 -0
  291. package/src/components/FieldTime/index.ts +2 -0
  292. package/src/components/FieldTime/mask.ts +22 -0
  293. package/src/components/FieldTime/styles.module.scss +3 -0
  294. package/src/components/index.ts +14 -0
  295. package/src/components/shared/helperComponents/FieldElementButton/FieldElementButton.tsx +127 -0
  296. package/src/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.tsx +72 -0
  297. package/src/components/shared/helperComponents/FieldElementButton/constants.ts +10 -0
  298. package/src/components/shared/helperComponents/FieldElementButton/index.ts +4 -0
  299. package/src/components/shared/helperComponents/FieldElementButton/styles.module.scss +137 -0
  300. package/src/components/shared/helperComponents/FieldElementButton/types.ts +6 -0
  301. package/src/components/shared/helperComponents/FieldShell/FieldShell.tsx +100 -0
  302. package/src/components/shared/helperComponents/FieldShell/index.ts +1 -0
  303. package/src/components/shared/helperComponents/FieldShell/styles.module.scss +13 -0
  304. package/src/components/shared/hooks/useCopyButton.tsx +103 -0
  305. package/src/components/shared/index.ts +4 -0
  306. package/src/components/shared/styles.module.scss +409 -0
  307. package/src/components/shared/utils.ts +128 -0
  308. package/src/constants.ts +73 -0
  309. package/src/hooks/index.ts +1 -0
  310. package/src/hooks/useAdaptiveAutoFocus.ts +16 -0
  311. package/src/index.ts +3 -0
  312. package/src/segments/index.ts +2 -0
  313. package/src/segments/segments.ts +74 -0
  314. package/src/segments/useSegmentedMask.ts +361 -0
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSegmentedMask = useSegmentedMask;
4
+ const react_1 = require("react");
5
+ /**
6
+ * Сегментный ввод даты/времени (порт `useDateField` из @snack-uikit/fields). Каретка ходит по
7
+ * сегментам (`setSelectionRange` подсвечивает текущий), цифры заполняют сегмент с авто-переходом,
8
+ * стрелки двигают по сегментам, Backspace очищает сегмент до плейсхолдера.
9
+ */
10
+ function useSegmentedMask({ inputRef, mask, slots, readonly, disabled, setValue, onMaskedChange, onArrowDown, onArrowUp, onEscape, onEdit, }) {
11
+ const firstSlot = slots[0];
12
+ const lastSlot = slots[slots.length - 1];
13
+ const indexOf = (0, react_1.useCallback)((slot) => slots.indexOf(slot), [slots]);
14
+ const nextSlot = (0, react_1.useCallback)((slot) => slots[Math.min(indexOf(slot) + 1, slots.length - 1)], [indexOf, slots]);
15
+ const prevSlot = (0, react_1.useCallback)((slot) => slots[Math.max(indexOf(slot) - 1, 0)], [indexOf, slots]);
16
+ const selectSlot = (0, react_1.useCallback)((slot) => {
17
+ inputRef.current?.setSelectionRange(slot.start, slot.end);
18
+ }, [inputRef]);
19
+ const slotFromIndex = (0, react_1.useCallback)((index) => {
20
+ if (index == null)
21
+ return firstSlot;
22
+ const found = slots.find(slot => index >= slot.start && index <= slot.end);
23
+ if (found)
24
+ return found;
25
+ return index < firstSlot.start ? firstSlot : lastSlot;
26
+ }, [firstSlot, lastSlot, slots]);
27
+ const getSlotText = (0, react_1.useCallback)((slot) => inputRef.current?.value.slice(slot.start, slot.end) ?? '', [inputRef]);
28
+ const isSlotFilled = (0, react_1.useCallback)((slot) => /^\d+$/.test(getSlotText(slot)), [getSlotText]);
29
+ const isFilled = (0, react_1.useCallback)(() => slots.every(isSlotFilled), [isSlotFilled, slots]);
30
+ const ensureMask = (0, react_1.useCallback)(() => {
31
+ const input = inputRef.current;
32
+ if (input && !input.value) {
33
+ input.value = mask;
34
+ setValue(mask);
35
+ }
36
+ }, [inputRef, mask, setValue]);
37
+ const updateSlot = (0, react_1.useCallback)((slot, slotValue) => {
38
+ const input = inputRef.current;
39
+ if (!input)
40
+ return;
41
+ const len = slot.end - slot.start;
42
+ const padded = slotValue.toString().padStart(len, '0').slice(-len);
43
+ input.value = input.value.slice(0, slot.start) + padded + input.value.slice(slot.end);
44
+ setValue(input.value);
45
+ selectSlot(slot);
46
+ }, [inputRef, selectSlot, setValue]);
47
+ const clearSlot = (0, react_1.useCallback)((slot) => {
48
+ const input = inputRef.current;
49
+ if (!input)
50
+ return;
51
+ input.value = input.value.slice(0, slot.start) + slot.placeholder + input.value.slice(slot.end);
52
+ setValue(input.value);
53
+ selectSlot(slot);
54
+ }, [inputRef, selectSlot, setValue]);
55
+ // Корректность даты: день должен существовать в выбранном месяце/году. Для time-only — всегда true.
56
+ const isValidDate = (0, react_1.useCallback)(() => {
57
+ const daySlot = slots.find(s => s.key === 'day');
58
+ const monthSlot = slots.find(s => s.key === 'month');
59
+ const yearSlot = slots.find(s => s.key === 'year');
60
+ if (!daySlot || !monthSlot || !yearSlot)
61
+ return true;
62
+ const day = parseInt(getSlotText(daySlot), 10);
63
+ const month = parseInt(getSlotText(monthSlot), 10);
64
+ const year = parseInt(getSlotText(yearSlot), 10);
65
+ if (!month || !day)
66
+ return true;
67
+ // Високосный 2020 как fallback, если год ещё не введён.
68
+ const date = new Date(year || 2020, month - 1, day);
69
+ return date.getDate() === day;
70
+ }, [getSlotText, slots]);
71
+ const tryToComplete = (0, react_1.useCallback)(() => {
72
+ const input = inputRef.current;
73
+ if (input && isFilled() && isValidDate()) {
74
+ const end = input.value.length;
75
+ input.setSelectionRange(end, end);
76
+ return true;
77
+ }
78
+ return false;
79
+ }, [inputRef, isFilled, isValidDate]);
80
+ // Эмитим только при РЕАЛЬНОЙ смене строки: неполный ввод даёт '' один раз, а не на каждый
81
+ // промежуточный keydown — иначе многократный onChange(undefined) каскадит через picker
82
+ // (TimePickerDropdown value↔dateAndTime sync) и упирается в max-update-depth.
83
+ const lastEmittedRef = (0, react_1.useRef)(null);
84
+ const emit = (0, react_1.useCallback)(() => {
85
+ const input = inputRef.current;
86
+ const current = input && isFilled() ? input.value : '';
87
+ if (current === lastEmittedRef.current)
88
+ return;
89
+ lastEmittedRef.current = current;
90
+ onMaskedChange(current);
91
+ }, [inputRef, isFilled, onMaskedChange]);
92
+ const checkInputAndGoNext = (0, react_1.useCallback)((slot) => {
93
+ if (slot === lastSlot && tryToComplete()) {
94
+ return;
95
+ }
96
+ if (isValidDate()) {
97
+ selectSlot(nextSlot(slot));
98
+ return;
99
+ }
100
+ // Дата невалидна — откатываем зависимый сегмент к плейсхолдеру и возвращаем туда фокус.
101
+ const daySlot = slots.find(s => s.key === 'day');
102
+ const monthSlot = slots.find(s => s.key === 'month');
103
+ if (slot.key === 'day' && monthSlot) {
104
+ clearSlot(monthSlot);
105
+ return;
106
+ }
107
+ if ((slot.key === 'month' || slot.key === 'year') && daySlot) {
108
+ clearSlot(daySlot);
109
+ return;
110
+ }
111
+ selectSlot(nextSlot(slot));
112
+ }, [clearSlot, isValidDate, lastSlot, nextSlot, selectSlot, slots, tryToComplete]);
113
+ const typeDigit = (0, react_1.useCallback)((slot, key) => {
114
+ const text = getSlotText(slot);
115
+ const numberValue = Number(text) || 0;
116
+ const digit = Number(key);
117
+ const slotValue = parseInt(numberValue.toString() + key, 10) || 0;
118
+ const valueLength = slotValue.toString().length;
119
+ const maxLength = slot.max.toString().length;
120
+ const isTheLastInput = /^0+$/.test(text) && maxLength === 2 && digit === 0;
121
+ if (valueLength < maxLength) {
122
+ if (slotValue || slotValue >= slot.min) {
123
+ updateSlot(slot, slotValue);
124
+ if (isTheLastInput)
125
+ checkInputAndGoNext(slot);
126
+ }
127
+ if (slotValue * 10 > slot.max) {
128
+ checkInputAndGoNext(slot);
129
+ }
130
+ }
131
+ else if (valueLength > maxLength) {
132
+ if (digit * 10 > slot.max) {
133
+ updateSlot(slot, key);
134
+ checkInputAndGoNext(slot);
135
+ }
136
+ else if (digit || digit >= slot.min) {
137
+ updateSlot(slot, key);
138
+ }
139
+ }
140
+ else if (slotValue <= slot.max) {
141
+ updateSlot(slot, slotValue);
142
+ checkInputAndGoNext(slot);
143
+ }
144
+ else if (digit * 10 > slot.max) {
145
+ updateSlot(slot, key);
146
+ checkInputAndGoNext(slot);
147
+ }
148
+ else if (digit || digit >= slot.min) {
149
+ updateSlot(slot, key);
150
+ }
151
+ }, [checkInputAndGoNext, getSlotText, updateSlot]);
152
+ const handleFocus = (0, react_1.useCallback)(() => {
153
+ if (readonly || disabled)
154
+ return;
155
+ ensureMask();
156
+ // На фокус всегда выбираем ПЕРВЫЙ сегмент (паритет с легаси). При клике мышью `handleClick`
157
+ // отработает следом и перевыберет сегмент под кареткой; при Tab остаётся первый.
158
+ selectSlot(firstSlot);
159
+ }, [disabled, ensureMask, firstSlot, readonly, selectSlot]);
160
+ const handleClick = (0, react_1.useCallback)((event) => {
161
+ if (readonly || disabled)
162
+ return;
163
+ ensureMask();
164
+ selectSlot(slotFromIndex(event.currentTarget.selectionStart));
165
+ }, [disabled, ensureMask, readonly, selectSlot, slotFromIndex]);
166
+ const handleBlur = (0, react_1.useCallback)(() => {
167
+ const input = inputRef.current;
168
+ if (input && input.value === mask) {
169
+ input.value = '';
170
+ setValue('');
171
+ }
172
+ }, [inputRef, mask, setValue]);
173
+ const handleKeyDown = (0, react_1.useCallback)((event) => {
174
+ const input = inputRef.current;
175
+ if (!input || readonly || disabled)
176
+ return;
177
+ // Tab уводит фокус из поля — не перехватываем.
178
+ if (event.key === 'Tab')
179
+ return;
180
+ if (event.key === 'ArrowDown') {
181
+ event.preventDefault();
182
+ onArrowDown?.();
183
+ return;
184
+ }
185
+ // ArrowUp закрывает открытый пикер (фокус остаётся в поле на текущем сегменте).
186
+ if (event.key === 'ArrowUp') {
187
+ event.preventDefault();
188
+ onArrowUp?.();
189
+ return;
190
+ }
191
+ onEdit?.();
192
+ if (event.key === 'Escape') {
193
+ event.preventDefault();
194
+ onEscape?.();
195
+ input.blur();
196
+ return;
197
+ }
198
+ event.preventDefault();
199
+ event.stopPropagation();
200
+ ensureMask();
201
+ const slot = slotFromIndex(input.selectionStart);
202
+ if (event.key === 'ArrowRight') {
203
+ // На последнем сегменте каретка уходит в конец строки (паритет с легаси useDateField):
204
+ // цепной useButtonNavigation в том же keydown видит cursor-at-end и забирает фокус
205
+ // на postfix-кнопку (clear/copy).
206
+ if (slot === lastSlot) {
207
+ const end = input.value.length;
208
+ input.setSelectionRange(end, end);
209
+ return;
210
+ }
211
+ selectSlot(nextSlot(slot));
212
+ return;
213
+ }
214
+ if (event.key === 'ArrowLeft') {
215
+ selectSlot(prevSlot(slot));
216
+ return;
217
+ }
218
+ if (event.key === 'Backspace') {
219
+ clearSlot(slot);
220
+ emit();
221
+ return;
222
+ }
223
+ if (event.key === 'Enter') {
224
+ tryToComplete();
225
+ emit();
226
+ return;
227
+ }
228
+ if (/^\d$/.test(event.key)) {
229
+ typeDigit(slot, event.key);
230
+ emit();
231
+ }
232
+ }, [
233
+ clearSlot,
234
+ disabled,
235
+ emit,
236
+ ensureMask,
237
+ inputRef,
238
+ lastSlot,
239
+ nextSlot,
240
+ onArrowDown,
241
+ onArrowUp,
242
+ onEdit,
243
+ onEscape,
244
+ prevSlot,
245
+ readonly,
246
+ selectSlot,
247
+ slotFromIndex,
248
+ tryToComplete,
249
+ typeDigit,
250
+ ]);
251
+ // Вставка (Ctrl+V) полной строки даты/времени: вытаскиваем цифры и заполняем сегменты
252
+ // слева направо. Нативный onChange у поля игнорируется (движок controlled), поэтому без
253
+ // этого обработчика вставка не работала бы вовсе.
254
+ const handlePaste = (0, react_1.useCallback)((event) => {
255
+ if (readonly || disabled)
256
+ return;
257
+ event.preventDefault();
258
+ const digits = event.clipboardData.getData('text').replace(/\D/g, '');
259
+ if (!digits)
260
+ return;
261
+ ensureMask();
262
+ let cursor = 0;
263
+ let lastFilled;
264
+ for (const slot of slots) {
265
+ const len = slot.end - slot.start;
266
+ const chunk = digits.slice(cursor, cursor + len);
267
+ if (chunk.length < len)
268
+ break;
269
+ updateSlot(slot, chunk);
270
+ lastFilled = slot;
271
+ cursor += len;
272
+ }
273
+ if (lastFilled === lastSlot) {
274
+ tryToComplete();
275
+ }
276
+ else if (lastFilled) {
277
+ selectSlot(nextSlot(lastFilled));
278
+ }
279
+ emit();
280
+ }, [disabled, emit, ensureMask, lastSlot, nextSlot, readonly, selectSlot, slots, tryToComplete, updateSlot]);
281
+ return { handleKeyDown, handleClick, handleFocus, handleBlur, handlePaste, selectSlot, firstSlot, lastSlot };
282
+ }