@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,69 @@
1
+ import { Size, ValidationState } from '@cloud-ru/ds-field-decorator';
2
+ import { ButtonSize, Size as InputPrivateSize } from '@cloud-ru/ds-input-private';
3
+ import { MouseEvent } from 'react';
4
+ /**
5
+ * Копирует текст в буфер обмена (через `copyToClipboard` из `@cloud-ru/ds-utils`). Резолвится в `true`
6
+ * при успехе — поля используют это, чтобы показать индикатор «скопировано».
7
+ */
8
+ export declare function copyTextToClipboard(text: string): Promise<boolean>;
9
+ /**
10
+ * Курсор в начале строки ввода (нет выделения, обе границы на позиции 0). Используется
11
+ * полями (`FieldCombo`, `FieldSecure`) для перевода ArrowLeft в левый слот, когда дальше
12
+ * влево по тексту двигаться некуда.
13
+ */
14
+ export declare const isCursorAtStart: (el: HTMLInputElement | null) => boolean;
15
+ /**
16
+ * Курсор в конце строки ввода (нет выделения, обе границы на длине значения). Используется
17
+ * полями для перевода ArrowRight в правый слот, когда дальше вправо по тексту двигаться некуда.
18
+ */
19
+ export declare const isCursorAtEnd: (el: HTMLInputElement | null) => boolean;
20
+ type AcrylicLevel = 'default' | '1Level' | '2Level';
21
+ type AcrylicAppearance = 'neutral' | 'red' | 'yellow' | 'green';
22
+ type AcrylicParams = {
23
+ validationState?: ValidationState;
24
+ disabled?: boolean;
25
+ readonly?: boolean;
26
+ hover?: boolean;
27
+ focusVisible?: boolean;
28
+ };
29
+ /**
30
+ * Appearance acrylic-фона поля. Тонируется по состоянию валидации (Figma: error→red,
31
+ * warning→yellow, success→green; valid/default — нейтральный фон). На неактивном поле
32
+ * (disabled/readonly) тонировка снимается — фон нейтральный.
33
+ */
34
+ export declare function getAcrylicAppearance({ validationState, disabled, readonly }: AcrylicParams): AcrylicAppearance;
35
+ /**
36
+ * Уровень acrylic-фона поля. `default` для disabled/readonly и для покоя тонированных
37
+ * (error/warning/success) состояний (red/green/yellow background по Figma); `2Level` на
38
+ * hover/focus; `1Level` для нейтрального поля в покое.
39
+ */
40
+ export declare function getAcrylicLevel({ validationState, disabled, readonly, hover, focusVisible, }: AcrylicParams): AcrylicLevel;
41
+ /**
42
+ * data-* атрибуты acrylic-материала поля (appearance + level) одним объектом для spread
43
+ * на materialLayer — единый источник тонировки фона по валидации для всех полей shell.
44
+ */
45
+ export declare function getAcrylicProps(params: AcrylicParams): {
46
+ 'data-acrylic-appearance': AcrylicAppearance;
47
+ 'data-acrylic-level': AcrylicLevel;
48
+ };
49
+ /**
50
+ * Гасит mousedown на слот-обёртке функциональной кнопки (clear/copy): фокус остаётся в input.
51
+ * Статический обработчик, общий для полей со слотами (`FieldDate`, `FieldSelect`).
52
+ */
53
+ export declare const preventSlotMouseDown: (event: MouseEvent<HTMLSpanElement>) => void;
54
+ /**
55
+ * Гасит click на слот-обёртке: не доходит до триггера, чтобы клик по кнопке не
56
+ * тогглил dropdown/calendar. Общий статический обработчик для полей со слотами.
57
+ */
58
+ export declare const stopSlotClickPropagation: (event: MouseEvent<HTMLSpanElement>) => void;
59
+ /**
60
+ * Размер поля → размер `InputPrivate`. Оси `'s' | 'm' | 'l'` совпадают, маппинг тождественный —
61
+ * хелпер убирает инлайн-касты `size as InputPrivateSize` из реализаций полей.
62
+ */
63
+ export declare function toInputSize(size?: Size): InputPrivateSize;
64
+ /**
65
+ * Размер поля → размер кнопки-слота. У кнопок нет `l`, поэтому `l` сводится к `m`
66
+ * через `BUTTON_SIZE_MAP` (паритет с input-private), а не приводится небезопасным кастом.
67
+ */
68
+ export declare function toButtonSize(size?: Size): ButtonSize;
69
+ export {};
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stopSlotClickPropagation = exports.preventSlotMouseDown = exports.isCursorAtEnd = exports.isCursorAtStart = void 0;
4
+ exports.copyTextToClipboard = copyTextToClipboard;
5
+ exports.getAcrylicAppearance = getAcrylicAppearance;
6
+ exports.getAcrylicLevel = getAcrylicLevel;
7
+ exports.getAcrylicProps = getAcrylicProps;
8
+ exports.toInputSize = toInputSize;
9
+ exports.toButtonSize = toButtonSize;
10
+ const field_decorator_1 = require("@cloud-ru/ds-field-decorator");
11
+ const input_private_1 = require("@cloud-ru/ds-input-private");
12
+ const utils_1 = require("@cloud-ru/ds-utils");
13
+ /**
14
+ * Копирует текст в буфер обмена (через `copyToClipboard` из `@cloud-ru/ds-utils`). Резолвится в `true`
15
+ * при успехе — поля используют это, чтобы показать индикатор «скопировано».
16
+ */
17
+ function copyTextToClipboard(text) {
18
+ if (!(0, utils_1.isBrowser)() || text.length === 0) {
19
+ return Promise.resolve(false);
20
+ }
21
+ return (0, utils_1.copyToClipboard)(text);
22
+ }
23
+ /**
24
+ * Курсор в начале строки ввода (нет выделения, обе границы на позиции 0). Используется
25
+ * полями (`FieldCombo`, `FieldSecure`) для перевода ArrowLeft в левый слот, когда дальше
26
+ * влево по тексту двигаться некуда.
27
+ */
28
+ const isCursorAtStart = (el) => Boolean(el && el.selectionStart === 0 && el.selectionEnd === 0);
29
+ exports.isCursorAtStart = isCursorAtStart;
30
+ /**
31
+ * Курсор в конце строки ввода (нет выделения, обе границы на длине значения). Используется
32
+ * полями для перевода ArrowRight в правый слот, когда дальше вправо по тексту двигаться некуда.
33
+ */
34
+ const isCursorAtEnd = (el) => Boolean(el && el.selectionStart === el.value.length && el.selectionEnd === el.value.length);
35
+ exports.isCursorAtEnd = isCursorAtEnd;
36
+ const VALIDATION_ACRYLIC_APPEARANCE = {
37
+ [field_decorator_1.VALIDATION_STATE.Error]: 'red',
38
+ [field_decorator_1.VALIDATION_STATE.Warning]: 'yellow',
39
+ [field_decorator_1.VALIDATION_STATE.Success]: 'green',
40
+ };
41
+ function isColoredValidation(validationState) {
42
+ return Boolean(validationState && VALIDATION_ACRYLIC_APPEARANCE[validationState]);
43
+ }
44
+ /**
45
+ * Appearance acrylic-фона поля. Тонируется по состоянию валидации (Figma: error→red,
46
+ * warning→yellow, success→green; valid/default — нейтральный фон). На неактивном поле
47
+ * (disabled/readonly) тонировка снимается — фон нейтральный.
48
+ */
49
+ function getAcrylicAppearance({ validationState, disabled, readonly }) {
50
+ if (disabled || readonly) {
51
+ return 'neutral';
52
+ }
53
+ return (validationState && VALIDATION_ACRYLIC_APPEARANCE[validationState]) || 'neutral';
54
+ }
55
+ /**
56
+ * Уровень acrylic-фона поля. `default` для disabled/readonly и для покоя тонированных
57
+ * (error/warning/success) состояний (red/green/yellow background по Figma); `2Level` на
58
+ * hover/focus; `1Level` для нейтрального поля в покое.
59
+ */
60
+ function getAcrylicLevel({ validationState, disabled, readonly, hover, focusVisible, }) {
61
+ if (disabled || readonly) {
62
+ return 'default';
63
+ }
64
+ if (hover || focusVisible) {
65
+ return '2Level';
66
+ }
67
+ return isColoredValidation(validationState) ? 'default' : '1Level';
68
+ }
69
+ /**
70
+ * data-* атрибуты acrylic-материала поля (appearance + level) одним объектом для spread
71
+ * на materialLayer — единый источник тонировки фона по валидации для всех полей shell.
72
+ */
73
+ function getAcrylicProps(params) {
74
+ return {
75
+ 'data-acrylic-appearance': getAcrylicAppearance(params),
76
+ 'data-acrylic-level': getAcrylicLevel(params),
77
+ };
78
+ }
79
+ /**
80
+ * Гасит mousedown на слот-обёртке функциональной кнопки (clear/copy): фокус остаётся в input.
81
+ * Статический обработчик, общий для полей со слотами (`FieldDate`, `FieldSelect`).
82
+ */
83
+ const preventSlotMouseDown = (event) => event.preventDefault();
84
+ exports.preventSlotMouseDown = preventSlotMouseDown;
85
+ /**
86
+ * Гасит click на слот-обёртке: не доходит до триггера, чтобы клик по кнопке не
87
+ * тогглил dropdown/calendar. Общий статический обработчик для полей со слотами.
88
+ */
89
+ const stopSlotClickPropagation = (event) => event.stopPropagation();
90
+ exports.stopSlotClickPropagation = stopSlotClickPropagation;
91
+ /**
92
+ * Размер поля → размер `InputPrivate`. Оси `'s' | 'm' | 'l'` совпадают, маппинг тождественный —
93
+ * хелпер убирает инлайн-касты `size as InputPrivateSize` из реализаций полей.
94
+ */
95
+ function toInputSize(size = field_decorator_1.SIZE.M) {
96
+ return size;
97
+ }
98
+ /**
99
+ * Размер поля → размер кнопки-слота. У кнопок нет `l`, поэтому `l` сводится к `m`
100
+ * через `BUTTON_SIZE_MAP` (паритет с input-private), а не приводится небезопасным кастом.
101
+ */
102
+ function toButtonSize(size = field_decorator_1.SIZE.M) {
103
+ return input_private_1.BUTTON_SIZE_MAP[size];
104
+ }
@@ -0,0 +1,61 @@
1
+ export declare const TEST_IDS: {
2
+ readonly fieldDecorator: "field-decorator";
3
+ readonly fieldDecoratorLabel: "field-decorator__label";
4
+ readonly fieldDecoratorRequired: "field-decorator__required-sign";
5
+ readonly fieldDecoratorLabelTooltip: "field-decorator__label-tooltip";
6
+ readonly fieldDecoratorCaption: "field-decorator__caption";
7
+ readonly fieldDecoratorHint: "field-decorator__hint";
8
+ readonly fieldDecoratorCounter: "field-decorator__counter";
9
+ readonly fieldCombo: "field-combo";
10
+ readonly fieldComboInput: "field-combo__input";
11
+ readonly fieldComboElementButton: "field-combo__element-button";
12
+ readonly fieldComboShell: "field-combo__shell";
13
+ readonly fieldText: "field-text";
14
+ readonly fieldTextInput: "field-text__input";
15
+ readonly fieldTextShell: "field-text__shell";
16
+ readonly fieldTextCopyButton: "button-copy-value";
17
+ readonly fieldSecure: "field-secure";
18
+ readonly fieldSecureInput: "field-secure__input";
19
+ readonly fieldSecureHideButton: "button-toggle-hidden";
20
+ readonly fieldSecureShell: "field-secure__shell";
21
+ readonly fieldSecureSkeleton: "field-secure__skeleton";
22
+ readonly fieldTextArea: "field-textarea";
23
+ readonly fieldTextAreaInput: "field-textarea__input";
24
+ readonly fieldTextAreaScrollArea: "field-textarea__scroll-area";
25
+ readonly fieldTextAreaShell: "field-textarea__shell";
26
+ readonly fieldStepper: "field-stepper";
27
+ readonly fieldStepperInput: "field-stepper__input";
28
+ readonly fieldStepperMinus: "field-stepper__minus-button";
29
+ readonly fieldStepperPlus: "field-stepper__plus-button";
30
+ readonly fieldStepperCopyButton: "field-stepper__copy-button";
31
+ readonly fieldStepperLimitTooltip: "field-stepper__limit-tooltip";
32
+ readonly fieldSlider: "field-slider";
33
+ readonly fieldSliderInput: "field-slider__input";
34
+ readonly fieldSliderCopyButton: "field-slider__copy-button";
35
+ readonly fieldSliderHandle: "field-slider__slider";
36
+ readonly fieldSliderField: "field-slider__field";
37
+ readonly fieldSelect: "field-select";
38
+ readonly fieldSelectChips: "field-select__chips";
39
+ readonly fieldSelectInput: "field-select__input";
40
+ readonly fieldSelectClear: "field-select__clear";
41
+ readonly fieldSelectCopy: "field-select__copy";
42
+ readonly fieldDate: "field-date";
43
+ readonly fieldDateInput: "field-date__input";
44
+ readonly fieldDateInputFrom: "field-date__input-from";
45
+ readonly fieldDateInputTo: "field-date__input-to";
46
+ readonly fieldDateClear: "field-date__clear";
47
+ readonly fieldDateCopy: "field-date__copy";
48
+ readonly fieldDateCalendar: "field-date__calendar";
49
+ readonly fieldDateCalendarDropdown: "field-date__calendar-dropdown";
50
+ readonly fieldColor: "field-color";
51
+ readonly fieldColorInput: "field-color__input";
52
+ readonly fieldColorSwatch: "field-color__swatch";
53
+ readonly fieldColorChevron: "field-color__chevron";
54
+ readonly fieldColorPicker: "field-color__picker";
55
+ readonly fieldColorSheetTitle: "field-color__sheet-title";
56
+ readonly fieldColorCancel: "field-color__cancel";
57
+ readonly fieldColorApply: "field-color__apply";
58
+ readonly fieldTime: "field-time";
59
+ readonly fieldTimeInput: "field-time__input";
60
+ readonly fieldTimeIcon: "field-time__icon";
61
+ };
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEST_IDS = void 0;
4
+ exports.TEST_IDS = {
5
+ fieldDecorator: 'field-decorator',
6
+ fieldDecoratorLabel: 'field-decorator__label',
7
+ fieldDecoratorRequired: 'field-decorator__required-sign',
8
+ fieldDecoratorLabelTooltip: 'field-decorator__label-tooltip',
9
+ fieldDecoratorCaption: 'field-decorator__caption',
10
+ fieldDecoratorHint: 'field-decorator__hint',
11
+ fieldDecoratorCounter: 'field-decorator__counter',
12
+ fieldCombo: 'field-combo',
13
+ fieldComboInput: 'field-combo__input',
14
+ fieldComboElementButton: 'field-combo__element-button',
15
+ // Внутренняя оболочка (`fieldWrapper`): несёт effectiveValidationState (error форсит 'error'),
16
+ // тогда как корень с публичным data-test-id хранит RAW `validationState`.
17
+ fieldComboShell: 'field-combo__shell',
18
+ fieldText: 'field-text',
19
+ fieldTextInput: 'field-text__input',
20
+ fieldTextShell: 'field-text__shell',
21
+ // Кнопка копирования общая для всех полей (дефолт `useCopyButton`).
22
+ fieldTextCopyButton: 'button-copy-value',
23
+ fieldSecure: 'field-secure',
24
+ fieldSecureInput: 'field-secure__input',
25
+ fieldSecureHideButton: 'button-toggle-hidden',
26
+ fieldSecureShell: 'field-secure__shell',
27
+ // Skeleton, заменяющий input во время async-загрузки значения (asyncValueGetter).
28
+ fieldSecureSkeleton: 'field-secure__skeleton',
29
+ fieldTextArea: 'field-textarea',
30
+ fieldTextAreaInput: 'field-textarea__input',
31
+ fieldTextAreaScrollArea: 'field-textarea__scroll-area',
32
+ fieldTextAreaShell: 'field-textarea__shell',
33
+ fieldStepper: 'field-stepper',
34
+ fieldStepperInput: 'field-stepper__input',
35
+ fieldStepperMinus: 'field-stepper__minus-button',
36
+ fieldStepperPlus: 'field-stepper__plus-button',
37
+ fieldStepperCopyButton: 'field-stepper__copy-button',
38
+ fieldStepperLimitTooltip: 'field-stepper__limit-tooltip',
39
+ fieldSlider: 'field-slider',
40
+ fieldSliderInput: 'field-slider__input',
41
+ fieldSliderCopyButton: 'field-slider__copy-button',
42
+ fieldSliderHandle: 'field-slider__slider',
43
+ // Внутренняя оболочка слайдера: на ней живут data-validation-state / disabled / readonly /
44
+ // withbackground / focusvisible (корень с data-test-id их не несёт).
45
+ fieldSliderField: 'field-slider__field',
46
+ fieldSelect: 'field-select',
47
+ fieldSelectChips: 'field-select__chips',
48
+ fieldSelectInput: 'field-select__input',
49
+ fieldSelectClear: 'field-select__clear',
50
+ fieldSelectCopy: 'field-select__copy',
51
+ fieldDate: 'field-date',
52
+ fieldDateInput: 'field-date__input',
53
+ fieldDateInputFrom: 'field-date__input-from',
54
+ fieldDateInputTo: 'field-date__input-to',
55
+ fieldDateClear: 'field-date__clear',
56
+ fieldDateCopy: 'field-date__copy',
57
+ fieldDateCalendar: 'field-date__calendar',
58
+ // CalendarDropdown (@cloud-ru/ds-calendar) тегирует контент открытого календаря только когда ему передан
59
+ // `data-test-id` (его билдер строит контент-узел как `content-<id>`). FieldDate проставляет этот id,
60
+ // чтобы портальный календарь был адресуем в e2e/visual; реальный узел контента — `content-field-date__calendar-dropdown`.
61
+ fieldDateCalendarDropdown: 'field-date__calendar-dropdown',
62
+ fieldColor: 'field-color',
63
+ fieldColorInput: 'field-color__input',
64
+ fieldColorSwatch: 'field-color__swatch',
65
+ fieldColorChevron: 'field-color__chevron',
66
+ // ColorPicker (@cloud-ru/ds-color-picker) тегирует свой корень только переданным data-test-id
67
+ // (root рендерит `{...extractSupportProps(rest)}`). FieldColor проставляет этот id, чтобы
68
+ // открытая палитра была адресуема в play/e2e.
69
+ fieldColorPicker: 'field-color__picker',
70
+ fieldColorSheetTitle: 'field-color__sheet-title',
71
+ fieldColorCancel: 'field-color__cancel',
72
+ fieldColorApply: 'field-color__apply',
73
+ fieldTime: 'field-time',
74
+ fieldTimeInput: 'field-time__input',
75
+ fieldTimeIcon: 'field-time__icon',
76
+ };
@@ -0,0 +1 @@
1
+ export * from './useAdaptiveAutoFocus';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./useAdaptiveAutoFocus"), exports);
@@ -0,0 +1,7 @@
1
+ import { LayoutPresets } from '@cloud-ru/ds-adaptive';
2
+ /** Пресеты адаптивных дефолтов поля по раскладке (сейчас — только `autoFocus`). */
3
+ export type FieldLayoutPresets = LayoutPresets<{
4
+ autoFocus: boolean;
5
+ }>;
6
+ /** Резолвит `autoFocus` по раскладке: desktop — проп, mobile — выключен; переопределяемо через `layoutPresets`. */
7
+ export declare function useAdaptiveAutoFocus(autoFocus?: boolean, layoutPresets?: FieldLayoutPresets): boolean;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAdaptiveAutoFocus = useAdaptiveAutoFocus;
4
+ const adaptive_1 = require("@cloud-ru/ds-adaptive");
5
+ // На mobile autoFocus выключен — иначе открывает экранную клавиатуру без действия пользователя.
6
+ const DS_AUTOFOCUS_PRESET = { mobile: { autoFocus: false } };
7
+ /** Резолвит `autoFocus` по раскладке: desktop — проп, mobile — выключен; переопределяемо через `layoutPresets`. */
8
+ function useAdaptiveAutoFocus(autoFocus = false, layoutPresets) {
9
+ return (0, adaptive_1.useLayoutDefaults)({ autoFocus: false }, (0, adaptive_1.mergePresets)(DS_AUTOFOCUS_PRESET, layoutPresets), { autoFocus }).autoFocus;
10
+ }
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export * from './constants';
3
+ export * from './hooks';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./components"), exports);
18
+ __exportStar(require("./constants"), exports);
19
+ __exportStar(require("./hooks"), exports);
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,2 @@
1
+ export * from './segments';
2
+ export * from './useSegmentedMask';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./segments"), exports);
18
+ __exportStar(require("./useSegmentedMask"), exports);
@@ -0,0 +1,22 @@
1
+ export type SegmentKey = 'day' | 'month' | 'year' | 'hours' | 'minutes' | 'seconds';
2
+ /** Описание одного сегмента маски: его границы в строке + допустимые значения + плейсхолдер. */
3
+ export type SlotMeta = {
4
+ key: SegmentKey;
5
+ /** Индекс начала сегмента в строке маски (включительно). */
6
+ start: number;
7
+ /** Индекс конца сегмента в строке маски (исключительно). */
8
+ end: number;
9
+ min: number;
10
+ max: number;
11
+ /** Текст-плейсхолдер сегмента (`ДД`, `чч`, …), длина = `end - start`. */
12
+ placeholder: string;
13
+ };
14
+ export type SegmentsMode = 'date' | 'date-time' | 'time';
15
+ /**
16
+ * Строит строку-маску и список сегментов с их границами/границами значений для заданного режима.
17
+ * Границы (`start`/`end`) считаются по позиции плейсхолдера сегмента в собранной маске.
18
+ */
19
+ export declare function buildSegments(mode: SegmentsMode, showSeconds?: boolean): {
20
+ mask: string;
21
+ slots: SlotMeta[];
22
+ };
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSegments = buildSegments;
4
+ const DATE_DEFS = [
5
+ { key: 'day', len: 2, min: 1, max: 31, placeholder: 'ДД', separator: '' },
6
+ { key: 'month', len: 2, min: 1, max: 12, placeholder: 'ММ', separator: '.' },
7
+ { key: 'year', len: 4, min: 1, max: 9999, placeholder: 'ГГГГ', separator: '.' },
8
+ ];
9
+ // Дату и время разделяет запятой (легаси `ДД.ММ.ГГГГ, чч:мм:сс`).
10
+ const DATE_TIME_SEPARATOR = ', ';
11
+ function timeDefs(showSeconds, firstSeparator) {
12
+ const defs = [
13
+ { key: 'hours', len: 2, min: 0, max: 23, placeholder: 'чч', separator: firstSeparator },
14
+ { key: 'minutes', len: 2, min: 0, max: 59, placeholder: 'мм', separator: ':' },
15
+ ];
16
+ if (showSeconds) {
17
+ defs.push({ key: 'seconds', len: 2, min: 0, max: 59, placeholder: 'сс', separator: ':' });
18
+ }
19
+ return defs;
20
+ }
21
+ function defsForMode(mode, showSeconds) {
22
+ if (mode === 'date') {
23
+ return DATE_DEFS;
24
+ }
25
+ if (mode === 'time') {
26
+ return timeDefs(showSeconds, '');
27
+ }
28
+ return [...DATE_DEFS, ...timeDefs(showSeconds, DATE_TIME_SEPARATOR)];
29
+ }
30
+ /**
31
+ * Строит строку-маску и список сегментов с их границами/границами значений для заданного режима.
32
+ * Границы (`start`/`end`) считаются по позиции плейсхолдера сегмента в собранной маске.
33
+ */
34
+ function buildSegments(mode, showSeconds = true) {
35
+ const defs = defsForMode(mode, showSeconds);
36
+ let mask = '';
37
+ const slots = [];
38
+ for (const def of defs) {
39
+ mask += def.separator;
40
+ const start = mask.length;
41
+ mask += def.placeholder;
42
+ const end = mask.length;
43
+ slots.push({ key: def.key, start, end, min: def.min, max: def.max, placeholder: def.placeholder });
44
+ }
45
+ return { mask, slots };
46
+ }
@@ -0,0 +1,43 @@
1
+ import { ClipboardEvent, KeyboardEvent, MouseEvent, RefObject } from 'react';
2
+ import { SlotMeta } from './segments';
3
+ type UseSegmentedMaskParams = {
4
+ inputRef: RefObject<HTMLInputElement | null>;
5
+ /** Полная строка-маска (плейсхолдеры всех сегментов + разделители). */
6
+ mask: string;
7
+ /** Сегменты в порядке следования. */
8
+ slots: SlotMeta[];
9
+ readonly?: boolean;
10
+ disabled?: boolean;
11
+ /**
12
+ * Записать новое значение в контролируемый input. InputPrivate — controlled, поэтому после
13
+ * императивной правки DOM (`input.value = …`) синхронизируем React-state тем же значением:
14
+ * `value === DOM` → React не перезаписывает input и сохраняет `setSelectionRange` (подсветку сегмента).
15
+ */
16
+ setValue(masked: string): void;
17
+ /** Текущее значение маски после правки — для парсинга в `Date`/`TimeValue` (пустая строка, если не заполнено). */
18
+ onMaskedChange(masked: string): void;
19
+ /** ArrowDown — открыть пикер / передать фокус в него. */
20
+ onArrowDown?(): void;
21
+ /** ArrowUp — закрыть пикер, если он открыт. */
22
+ onArrowUp?(): void;
23
+ /** Escape — закрыть пикер. */
24
+ onEscape?(): void;
25
+ /** Любая правка ввода (паритет с легаси — закрывает пикер). */
26
+ onEdit?(): void;
27
+ };
28
+ /**
29
+ * Сегментный ввод даты/времени (порт `useDateField` из @snack-uikit/fields). Каретка ходит по
30
+ * сегментам (`setSelectionRange` подсвечивает текущий), цифры заполняют сегмент с авто-переходом,
31
+ * стрелки двигают по сегментам, Backspace очищает сегмент до плейсхолдера.
32
+ */
33
+ export declare function useSegmentedMask({ inputRef, mask, slots, readonly, disabled, setValue, onMaskedChange, onArrowDown, onArrowUp, onEscape, onEdit, }: UseSegmentedMaskParams): {
34
+ handleKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;
35
+ handleClick: (event: MouseEvent<HTMLInputElement>) => void;
36
+ handleFocus: () => void;
37
+ handleBlur: () => void;
38
+ handlePaste: (event: ClipboardEvent<HTMLInputElement>) => void;
39
+ selectSlot: (slot: SlotMeta) => void;
40
+ firstSlot: SlotMeta;
41
+ lastSlot: SlotMeta;
42
+ };
43
+ export {};