@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,44 @@
1
+ .fieldSlider{
2
+ display:flex;
3
+ flex-direction:column;
4
+ gap:0;
5
+ align-self:stretch;
6
+ width:100%;
7
+ }
8
+
9
+ .sliderWrapper{
10
+ display:flex;
11
+ align-items:center;
12
+ width:100%;
13
+ }
14
+ [data-size=s] .sliderWrapper{
15
+ padding-right:var(--sn-field-anatomy-size-s-sliderWrapper-lineWrapper-paddingHorizontal, var(--sn-brand-anatomy-radius-field-s, var(--sn-primitive-dimension-2, 2px)));
16
+ padding-left:var(--sn-field-anatomy-size-s-sliderWrapper-lineWrapper-paddingHorizontal, var(--sn-brand-anatomy-radius-field-s, var(--sn-primitive-dimension-2, 2px)));
17
+ }
18
+ [data-size=m] .sliderWrapper{
19
+ padding-right:var(--sn-field-anatomy-size-m-sliderWrapper-lineWrapper-paddingHorizontal, var(--sn-brand-anatomy-radius-field-m, var(--sn-primitive-dimension-2, 2px)));
20
+ padding-left:var(--sn-field-anatomy-size-m-sliderWrapper-lineWrapper-paddingHorizontal, var(--sn-brand-anatomy-radius-field-m, var(--sn-primitive-dimension-2, 2px)));
21
+ }
22
+ [data-size=l] .sliderWrapper{
23
+ padding-right:var(--sn-field-anatomy-size-l-sliderWrapper-lineWrapper-paddingHorizontal, var(--sn-brand-anatomy-radius-field-l, var(--sn-primitive-dimension-2, 2px)));
24
+ padding-left:var(--sn-field-anatomy-size-l-sliderWrapper-lineWrapper-paddingHorizontal, var(--sn-brand-anatomy-radius-field-l, var(--sn-primitive-dimension-2, 2px)));
25
+ }
26
+
27
+ .slider{
28
+ width:100%;
29
+ }
30
+
31
+ .postfixIcon{
32
+ display:flex;
33
+ flex-shrink:0;
34
+ align-items:center;
35
+ justify-content:center;
36
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
37
+ }
38
+
39
+ .copyButton{
40
+ display:flex;
41
+ flex-shrink:0;
42
+ align-items:center;
43
+ justify-content:center;
44
+ }
@@ -0,0 +1,4 @@
1
+ /** Форматирование значения слайдера в строку текстового поля. */
2
+ export type TextInputFormatter = (value: number) => string;
3
+ /** Значение слайдера: число или диапазон `[min, max]` при `range`. */
4
+ export type SliderValue = number | number[];
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare function generateAllowedValues(min: number, max: number, step: number | null): number[];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateAllowedValues = generateAllowedValues;
4
+ function generateAllowedValues(min, max, step) {
5
+ // step <= 0 (или null) дал бы бесконечный цикл — снэп к шкале невозможен, возвращаем только min.
6
+ if (step === null || step <= 0) {
7
+ return [min];
8
+ }
9
+ const values = [];
10
+ let current = min;
11
+ while (current <= max) {
12
+ values.push(parseFloat(current.toFixed(10)));
13
+ current += step;
14
+ }
15
+ return values;
16
+ }
@@ -0,0 +1,4 @@
1
+ export declare function getClosestMark<T>(value: number, marks: T[], getMarkValue: (value: T) => number): {
2
+ lowestDiff: number;
3
+ mark: T;
4
+ } | undefined;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getClosestMark = getClosestMark;
4
+ function getDiff(value, mark) {
5
+ return Math.abs(mark - value);
6
+ }
7
+ function getClosestMark(value, marks, getMarkValue) {
8
+ if (marks.length === 0) {
9
+ return undefined;
10
+ }
11
+ const [first, ...others] = marks;
12
+ return others.reduce((acc, mark) => {
13
+ const diff = getDiff(value, getMarkValue(mark));
14
+ return diff < acc.lowestDiff ? { lowestDiff: diff, mark } : acc;
15
+ }, { lowestDiff: getDiff(value, getMarkValue(first)), mark: first });
16
+ }
@@ -0,0 +1,2 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function getMarkLabel(mark: unknown): ReactNode;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMarkLabel = getMarkLabel;
4
+ const isMarkObject_1 = require("./isMarkObject");
5
+ function getMarkLabel(mark) {
6
+ return (0, isMarkObject_1.isMarkObject)(mark) ? mark.label : mark;
7
+ }
@@ -0,0 +1,2 @@
1
+ import { SliderValue, TextInputFormatter } from '../types';
2
+ export declare function getTextFieldValue(value: SliderValue, textInputFormatter?: TextInputFormatter): string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTextFieldValue = getTextFieldValue;
4
+ function getTextFieldValue(value, textInputFormatter) {
5
+ if (Array.isArray(value)) {
6
+ return value.map(v => (textInputFormatter ? textInputFormatter(v) : String(v))).join(' – ');
7
+ }
8
+ return textInputFormatter ? textInputFormatter(value) : String(value);
9
+ }
@@ -0,0 +1,5 @@
1
+ export * from './generateAllowedValues';
2
+ export * from './getClosestMark';
3
+ export * from './getMarkLabel';
4
+ export * from './getTextFieldValue';
5
+ export * from './isMarkObject';
@@ -0,0 +1,21 @@
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("./generateAllowedValues"), exports);
18
+ __exportStar(require("./getClosestMark"), exports);
19
+ __exportStar(require("./getMarkLabel"), exports);
20
+ __exportStar(require("./getTextFieldValue"), exports);
21
+ __exportStar(require("./isMarkObject"), exports);
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ type MarkObject = {
3
+ label: ReactNode;
4
+ };
5
+ export declare function isMarkObject(mark: unknown): mark is MarkObject;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMarkObject = isMarkObject;
4
+ function isMarkObject(mark) {
5
+ return Boolean(mark && typeof mark === 'object' && 'label' in mark);
6
+ }
@@ -0,0 +1,81 @@
1
+ import { FieldDecoratorProps } from '@cloud-ru/ds-field-decorator';
2
+ import { TooltipProps } from '@cloud-ru/ds-tooltip';
3
+ import { ChangeEvent, FocusEvent, ReactNode } from 'react';
4
+ import { FieldLayoutPresets } from '../../hooks';
5
+ type FieldStepperDecoratorProps = Omit<FieldDecoratorProps, 'children'>;
6
+ type FieldStepperOwnProps = {
7
+ /** CSS-класс корня `FieldDecorator` */
8
+ className?: string;
9
+ /** CSS-класс оболочки поля */
10
+ fieldClassName?: string;
11
+ /** Значение (controlled-режим) */
12
+ value?: number;
13
+ /** Начальное значение (uncontrolled-режим). По умолчанию выводится из `min`/`max`. */
14
+ defaultValue?: number;
15
+ /** Колбек смены значения. Второй аргумент — событие, если изменение пришло из ручного ввода. */
16
+ onChange?(value: number, event?: ChangeEvent<HTMLInputElement>): void;
17
+ /** Минимум */
18
+ min?: number;
19
+ /** Максимум */
20
+ max?: number;
21
+ /**
22
+ * Шаг приращения
23
+ * @default 1
24
+ */
25
+ step?: number;
26
+ /**
27
+ * Разрешить ввод значений вне `min`/`max`. Если `false`, на blur значение клампится.
28
+ * @default true
29
+ */
30
+ allowMoreThanLimits?: boolean;
31
+ /** Поле выключено */
32
+ disabled?: boolean;
33
+ /** Только для чтения */
34
+ readonly?: boolean;
35
+ /** HTML id */
36
+ id?: string;
37
+ /** HTML name */
38
+ name?: string;
39
+ /** Автофокус. На mobile выключается адаптивно (см. `layoutPresets`) */
40
+ autoFocus?: boolean;
41
+ /**
42
+ * Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен
43
+ * (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`.
44
+ */
45
+ layoutPresets?: FieldLayoutPresets;
46
+ /**
47
+ * Фон поля (acrylic)
48
+ * @default true
49
+ */
50
+ background?: boolean;
51
+ /**
52
+ * Показывать кнопку копирования значения (видна в readonly, при `!disabled`).
53
+ * @default true
54
+ */
55
+ showCopyButton?: boolean;
56
+ /** Колбек после успешного копирования значения. */
57
+ onCopyButtonClick?(): void;
58
+ /** Префикс — текст или иконка слева от значения */
59
+ prefix?: ReactNode;
60
+ /** Постфикс — текст или иконка справа от значения (например, единица измерения) */
61
+ postfix?: ReactNode;
62
+ /** Тултип над кнопкой `+` */
63
+ plusButtonTooltip?: TooltipProps;
64
+ /** Тултип над кнопкой `−` */
65
+ minusButtonTooltip?: TooltipProps;
66
+ /**
67
+ * Тексты тултипа клампа (показывается на 2с после blur с выходом за `min`/`max`).
68
+ * @default { min: 'Значение должно быть больше либо равно {value}', max: 'Значение должно быть меньше либо равно {value}' }
69
+ */
70
+ clampTooltipText?: {
71
+ min?: (value: number) => string;
72
+ max?: (value: number) => string;
73
+ };
74
+ /** Колбек фокуса */
75
+ onFocus?(event: FocusEvent<HTMLInputElement>): void;
76
+ /** Колбек блюра */
77
+ onBlur?(event: FocusEvent<HTMLInputElement>): void;
78
+ };
79
+ export type FieldStepperProps = FieldStepperDecoratorProps & FieldStepperOwnProps;
80
+ export declare const FieldStepper: import("react").ForwardRefExoticComponent<FieldStepperDecoratorProps & FieldStepperOwnProps & import("react").RefAttributes<HTMLInputElement>>;
81
+ export {};
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FieldStepper = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const button_1 = require("@cloud-ru/ds-button");
9
+ const divider_1 = require("@cloud-ru/ds-divider");
10
+ const field_decorator_1 = require("@cloud-ru/ds-field-decorator");
11
+ const system_1 = require("@cloud-ru/ds-icons/interface/system");
12
+ const input_private_1 = require("@cloud-ru/ds-input-private");
13
+ const tooltip_1 = require("@cloud-ru/ds-tooltip");
14
+ const utils_1 = require("@cloud-ru/ds-utils");
15
+ const classnames_1 = __importDefault(require("classnames"));
16
+ const merge_refs_1 = __importDefault(require("merge-refs"));
17
+ const react_1 = require("react");
18
+ const constants_1 = require("../../constants");
19
+ const hooks_1 = require("../../hooks");
20
+ const shared_1 = require("../shared");
21
+ const styles_module_scss_1 = __importDefault(require('../shared/styles.module.css'));
22
+ const styles_module_scss_2 = __importDefault(require('./styles.module.css'));
23
+ const utils_2 = require("./utils");
24
+ exports.FieldStepper = (0, react_1.forwardRef)(function FieldStepper({ label = '', labelTooltip, caption, hint, error, validationState = field_decorator_1.VALIDATION_STATE.Default, showHintIcon, length, required, size = field_decorator_1.SIZE.M, className, fieldClassName, background = true, showCopyButton = true, onCopyButtonClick, value: valueProp, defaultValue, onChange, min, max, step = 1, allowMoreThanLimits = true, disabled, readonly: readOnly, id, name, autoFocus, layoutPresets, prefix, postfix, plusButtonTooltip, minusButtonTooltip, clampTooltipText, onFocus, onBlur, 'data-test-id': dataTestId, ...rest }, ref) {
25
+ const localRef = (0, react_1.useRef)(null);
26
+ const copyButtonRef = (0, react_1.useRef)(null);
27
+ const [focusVisible, setFocusVisible] = (0, react_1.useState)(false);
28
+ const [hover, setHover] = (0, react_1.useState)(false);
29
+ const [clampTooltip, setClampTooltip] = (0, react_1.useState)(null);
30
+ const [copied, setCopied] = (0, react_1.useState)(false);
31
+ const clampTimerRef = (0, react_1.useRef)(undefined);
32
+ const copiedTimerRef = (0, react_1.useRef)(undefined);
33
+ const resolvedAutoFocus = (0, hooks_1.useAdaptiveAutoFocus)(autoFocus, layoutPresets);
34
+ (0, react_1.useEffect)(() => () => {
35
+ if (clampTimerRef.current) {
36
+ clearTimeout(clampTimerRef.current);
37
+ }
38
+ if (copiedTimerRef.current) {
39
+ clearTimeout(copiedTimerRef.current);
40
+ }
41
+ }, []);
42
+ // controlled/uncontrolled: внутреннее состояние при отсутствии `value`; событие в `onChange`
43
+ // (ручной ввод) пробрасываем сами, useValueControl передаёт только значение.
44
+ const [value = (0, utils_2.getDefaultValue)(min, max), setValue] = (0, utils_1.useValueControl)({ value: valueProp, defaultValue });
45
+ const effectiveValidationState = (0, react_1.useMemo)(() => (error ? field_decorator_1.VALIDATION_STATE.Error : validationState), [error, validationState]);
46
+ const isMinusDisabled = (typeof min === 'number' && value <= min) || disabled || readOnly;
47
+ const isPlusDisabled = (typeof max === 'number' && value >= max) || disabled || readOnly;
48
+ // Кнопки −/+ и ручной ввод приводятся к единой модели относительно `allowMoreThanLimits`:
49
+ // при `false` значение клампится сразу, при `true` остаётся как есть (кламп откладывается до blur).
50
+ const emitValue = (0, react_1.useCallback)((next, event) => {
51
+ const resolved = allowMoreThanLimits ? next : (0, utils_2.clamp)(next, min, max);
52
+ setValue(resolved);
53
+ onChange?.(resolved, event);
54
+ }, [allowMoreThanLimits, max, min, onChange, setValue]);
55
+ const handleMinus = (0, react_1.useCallback)(() => {
56
+ emitValue((0, utils_2.applyStep)(value, -step));
57
+ }, [emitValue, step, value]);
58
+ const handlePlus = (0, react_1.useCallback)(() => {
59
+ emitValue((0, utils_2.applyStep)(value, step));
60
+ }, [emitValue, step, value]);
61
+ const handleInputChange = (0, react_1.useCallback)((raw, event) => {
62
+ if (raw === '' || raw === '-') {
63
+ return;
64
+ }
65
+ const parsed = Number(raw);
66
+ if (Number.isNaN(parsed)) {
67
+ return;
68
+ }
69
+ // Во время набора значение не клампим даже при allowMoreThanLimits=false —
70
+ // кламп откладывается до blur (паритет с легаси), там же показывается clampTooltip.
71
+ setValue(parsed);
72
+ onChange?.(parsed, event);
73
+ }, [onChange, setValue]);
74
+ const showClampTooltip = (0, react_1.useCallback)((message) => {
75
+ setClampTooltip(message);
76
+ if (clampTimerRef.current) {
77
+ clearTimeout(clampTimerRef.current);
78
+ }
79
+ clampTimerRef.current = setTimeout(() => setClampTooltip(null), 2000);
80
+ }, []);
81
+ const handleBlur = (0, react_1.useCallback)((event) => {
82
+ if (!allowMoreThanLimits) {
83
+ if (typeof max === 'number' && value > max) {
84
+ setValue(max);
85
+ onChange?.(max);
86
+ showClampTooltip((clampTooltipText?.max ?? utils_2.defaultClampMaxText)(max));
87
+ }
88
+ else if (typeof min === 'number' && value < min) {
89
+ setValue(min);
90
+ onChange?.(min);
91
+ showClampTooltip((clampTooltipText?.min ?? utils_2.defaultClampMinText)(min));
92
+ }
93
+ }
94
+ onBlur?.(event);
95
+ }, [allowMoreThanLimits, clampTooltipText, max, min, onBlur, onChange, setValue, showClampTooltip, value]);
96
+ const handleFocus = (0, react_1.useCallback)((event) => {
97
+ setFocusVisible(event.target.matches(':focus-visible'));
98
+ if (clampTimerRef.current) {
99
+ clearTimeout(clampTimerRef.current);
100
+ }
101
+ setClampTooltip(null);
102
+ onFocus?.(event);
103
+ }, [onFocus]);
104
+ // Ширина инпута по числу символов значения (минимум 2ch), задаётся через `ch`-юниты в CSS-переменной —
105
+ // без px-хардкода и подгонки под ширину глифа.
106
+ const inputWidthCh = Math.max(2, String(value).length);
107
+ const handleMouseEnter = (0, react_1.useCallback)(() => {
108
+ if (!readOnly) {
109
+ setHover(true);
110
+ }
111
+ }, [readOnly]);
112
+ const handleMouseLeave = (0, react_1.useCallback)(() => {
113
+ setHover(false);
114
+ }, []);
115
+ const showCopyUi = Boolean(showCopyButton && readOnly && !disabled);
116
+ const handleCopy = (0, react_1.useCallback)((event) => {
117
+ event.preventDefault();
118
+ event.stopPropagation();
119
+ (0, shared_1.copyTextToClipboard)(String(value)).then(copied => {
120
+ if (!copied) {
121
+ return;
122
+ }
123
+ onCopyButtonClick?.();
124
+ setCopied(true);
125
+ if (copiedTimerRef.current) {
126
+ clearTimeout(copiedTimerRef.current);
127
+ }
128
+ copiedTimerRef.current = setTimeout(() => setCopied(false), 2000);
129
+ });
130
+ }, [onCopyButtonClick, value]);
131
+ // Клавиатурный путь к copy в readonly (кнопка с tabIndex −1 недостижима по Tab): ArrowRight из
132
+ // инпута → copy, ArrowLeft с copy → назад. input type=number не даёт selection API — гейт только
133
+ // по readonly. Кнопки −/+ остаются вне пути (tabIndex −1, паритет с легаси ButtonFunction).
134
+ const handleInputKeyDown = (0, react_1.useCallback)((event) => {
135
+ if (event.key === 'ArrowRight' && readOnly && showCopyUi && copyButtonRef.current) {
136
+ event.preventDefault();
137
+ copyButtonRef.current.focus();
138
+ }
139
+ }, [readOnly, showCopyUi]);
140
+ const handleCopyButtonKeyDown = (0, react_1.useCallback)((event) => {
141
+ if (event.key === 'ArrowLeft') {
142
+ event.preventDefault();
143
+ localRef.current?.focus();
144
+ }
145
+ }, []);
146
+ const renderStepButton = (variant) => {
147
+ const isMinus = variant === 'minus';
148
+ const tooltip = isMinus ? minusButtonTooltip : plusButtonTooltip;
149
+ const button = ((0, jsx_runtime_1.jsx)(shared_1.FieldElementButton, { variant: isMinus ? shared_1.VARIANT.Before : shared_1.VARIANT.After, size: size, action: isMinus ? (0, jsx_runtime_1.jsx)(system_1.MinusSVG, {}) : (0, jsx_runtime_1.jsx)(system_1.PlusSVG, {}), onClick: isMinus ? handleMinus : handlePlus, disabled: isMinus ? isMinusDisabled : isPlusDisabled, tabIndex: -1, "data-test-id": isMinus ? constants_1.TEST_IDS.fieldStepperMinus : constants_1.TEST_IDS.fieldStepperPlus }));
150
+ return tooltip ? ((0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { ...tooltip, triggerClassName: styles_module_scss_2.default.stepButtonTrigger, children: button })) : (button);
151
+ };
152
+ const shell = ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.fieldWrapper, fieldClassName), "data-size": size, "data-validation-state": effectiveValidationState, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, "data-withbackground": background || undefined, "data-focusvisible": focusVisible || undefined, "data-hover": !readOnly && hover ? true : undefined, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.backgroundWrapper, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.materialLayer, ...(0, shared_1.getAcrylicProps)({
153
+ validationState: effectiveValidationState,
154
+ disabled,
155
+ readonly: readOnly,
156
+ hover,
157
+ focusVisible,
158
+ }), children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.acrylicBg, "aria-hidden": true }) }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.borderStateLayer, "data-state": 'borderOnBackground' }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.focusLayer })] }), (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.elementWrapperBefore, children: [renderStepButton('minus'), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.lineWrapper, "data-outline": background || undefined, children: (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical', variant: 'regular' }) })] }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.fieldContainer, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.contentWrapper, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_2.default.valueArea, children: [prefix && (0, jsx_runtime_1.jsx)("span", { className: styles_module_scss_2.default.affix, children: prefix }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.inputWrapper, style: { '--field-stepper-input-ch': inputWidthCh }, children: (0, jsx_runtime_1.jsx)(input_private_1.InputPrivate, { ref: (0, merge_refs_1.default)(ref, localRef), className: (0, classnames_1.default)(styles_module_scss_1.default.fieldInput, styles_module_scss_2.default.input), value: String(value), type: input_private_1.TYPE.Number, disabled: disabled, readonly: readOnly, onChange: handleInputChange, onFocus: handleFocus, onBlur: handleBlur, onKeyDown: handleInputKeyDown, id: id, name: name, min: min, max: max, step: step, autoFocus: resolvedAutoFocus, "data-test-id": constants_1.TEST_IDS.fieldStepperInput, ...(0, utils_1.extractSupportProps)(rest) }) }), postfix && (0, jsx_runtime_1.jsx)("span", { className: styles_module_scss_2.default.affix, children: postfix })] }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.elementWrapperAfter, children: [showCopyUi && ((0, jsx_runtime_1.jsx)("span", { className: styles_module_scss_2.default.copyButton, children: (0, jsx_runtime_1.jsx)(button_1.Button, { innerRef: copyButtonRef, type: 'button', view: 'function', appearance: 'neutral', size: input_private_1.BUTTON_SIZE_MAP[size], icon: copied ? (0, jsx_runtime_1.jsx)(system_1.CheckSVG, {}) : (0, jsx_runtime_1.jsx)(system_1.CopySVG, {}), onClick: handleCopy, onKeyDown: handleCopyButtonKeyDown, tabIndex: -1, "data-test-id": constants_1.TEST_IDS.fieldStepperCopyButton }) })), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.lineWrapper, "data-outline": background || undefined, children: (0, jsx_runtime_1.jsx)(divider_1.Divider, { orientation: 'vertical', variant: 'regular' }) }), renderStepButton('plus')] })] }));
159
+ return ((0, jsx_runtime_1.jsx)(field_decorator_1.FieldDecorator, { className: className, label: label, labelTooltip: labelTooltip, caption: caption, hint: hint, error: error, validationState: effectiveValidationState, showHintIcon: showHintIcon, length: length, required: required, labelFor: id, disabled: disabled, readonly: readOnly, size: size, "data-test-id": dataTestId, children: clampTooltip ? ((0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { tip: clampTooltip, open: true, "data-test-id": constants_1.TEST_IDS.fieldStepperLimitTooltip, children: shell })) : (shell) }));
160
+ });
@@ -0,0 +1 @@
1
+ export * from './FieldStepper';
@@ -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("./FieldStepper"), exports);
@@ -0,0 +1,78 @@
1
+ .stepButtonTrigger{
2
+ display:flex;
3
+ align-items:stretch;
4
+ height:100%;
5
+ }
6
+
7
+ .copyButton{
8
+ display:flex;
9
+ align-items:center;
10
+ height:100%;
11
+ }
12
+
13
+ .valueArea{
14
+ display:flex;
15
+ flex:1 1 auto;
16
+ align-items:baseline;
17
+ justify-content:center;
18
+ min-width:0;
19
+ color:var(--sn-theme-color-available-version-textMain, var(--sn-brand-color-text-version-main, #41424e));
20
+ text-align:center;
21
+ }
22
+ [data-size=s] .valueArea{
23
+ gap:var(--sn-field-anatomy-size-s-fieldContainer-contentWrapper-inputLine-gap, var(--sn-density-spacing-control-wrapper-horizontal-s, var(--sn-primitive-dimension-8, 8px)));
24
+ }
25
+ [data-size=m] .valueArea{
26
+ gap:var(--sn-field-anatomy-size-s-fieldContainer-contentWrapper-inputLine-gap, var(--sn-density-spacing-control-wrapper-horizontal-s, var(--sn-primitive-dimension-8, 8px)));
27
+ }
28
+ [data-size=l] .valueArea{
29
+ gap:var(--sn-field-anatomy-size-l-fieldContainer-contentWrapper-inputLine-gap, var(--sn-density-spacing-control-wrapper-horizontal-l, var(--sn-primitive-dimension-12, 12px)));
30
+ }
31
+
32
+ .inputWrapper{
33
+ display:flex;
34
+ flex:0 0 auto;
35
+ width:calc((var(--field-stepper-input-ch, 2) + 1) * 1ch);
36
+ max-width:100%;
37
+ }
38
+
39
+ .input{
40
+ flex:0 0 auto;
41
+ width:100%;
42
+ min-width:1ch;
43
+ text-align:center;
44
+ -moz-appearance:textfield;
45
+ }
46
+ .input::-webkit-outer-spin-button, .input::-webkit-inner-spin-button{
47
+ margin:0;
48
+ -webkit-appearance:none;
49
+ }
50
+
51
+ .affix{
52
+ flex-shrink:0;
53
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
54
+ }
55
+ [data-size=s] .affix{
56
+ font-family:var(--sn-regular-body-s-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
57
+ font-weight:var(--sn-regular-body-s-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-s, var(--sn-brand-font-fontWeight-light-regular-body-s, var(--sn-primitive-font-fontWeightValue-400, 400))));
58
+ line-height:var(--sn-regular-body-s-lineHeight, var(--sn-density-typography-roleBody-lineHeightS, var(--sn-primitive-font-lineHeight-by14, 20px)));
59
+ font-size:var(--sn-regular-body-s-fontSize, var(--sn-density-typography-roleBody-fontSizeS, var(--sn-primitive-font-fontSize-14, 14px)));
60
+ letter-spacing:var(--sn-regular-body-s-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
61
+ paragraph-spacing:var(--sn-regular-body-s-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize12, 6px));
62
+ }
63
+ [data-size=m] .affix{
64
+ font-family:var(--sn-regular-body-m-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
65
+ font-weight:var(--sn-regular-body-m-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-m, var(--sn-brand-font-fontWeight-light-regular-body-m, var(--sn-primitive-font-fontWeightValue-400, 400))));
66
+ line-height:var(--sn-regular-body-m-lineHeight, var(--sn-density-typography-roleBody-lineHeightM, var(--sn-primitive-font-lineHeight-by16, 24px)));
67
+ font-size:var(--sn-regular-body-m-fontSize, var(--sn-density-typography-roleBody-fontSizeM, var(--sn-primitive-font-fontSize-16, 16px)));
68
+ letter-spacing:var(--sn-regular-body-m-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
69
+ paragraph-spacing:var(--sn-regular-body-m-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize14, 7px));
70
+ }
71
+ [data-size=l] .affix{
72
+ font-family:var(--sn-regular-body-l-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
73
+ font-weight:var(--sn-regular-body-l-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-l, var(--sn-brand-font-fontWeight-light-regular-body-l, var(--sn-primitive-font-fontWeightValue-400, 400))));
74
+ line-height:var(--sn-regular-body-l-lineHeight, var(--sn-density-typography-roleBody-lineHeightL, var(--sn-primitive-font-lineHeight-by20, 28px)));
75
+ font-size:var(--sn-regular-body-l-fontSize, var(--sn-density-typography-roleBody-fontSizeL, var(--sn-primitive-font-fontSize-20, 20px)));
76
+ letter-spacing:var(--sn-regular-body-l-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
77
+ paragraph-spacing:var(--sn-regular-body-l-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize16, 8px));
78
+ }
@@ -0,0 +1,14 @@
1
+ /** Начальное значение для uncontrolled-режима: выводится из `min`/`max`, иначе `0`. */
2
+ export declare function getDefaultValue(min?: number, max?: number): number;
3
+ /** Зажимает значение в диапазон `[min, max]` (границы опциональны). */
4
+ export declare function clamp(value: number, min?: number, max?: number): number;
5
+ /** Приращение значения на `step` с компенсацией погрешности float (округление до 10 знаков). */
6
+ export declare function applyStep(value: number, step: number): number;
7
+ /**
8
+ * Дефолтный текст тултипа клампа для нижней границы.
9
+ */
10
+ export declare function defaultClampMinText(value: number): string;
11
+ /**
12
+ * Дефолтный текст тултипа клампа для верхней границы.
13
+ */
14
+ export declare function defaultClampMaxText(value: number): string;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultValue = getDefaultValue;
4
+ exports.clamp = clamp;
5
+ exports.applyStep = applyStep;
6
+ exports.defaultClampMinText = defaultClampMinText;
7
+ exports.defaultClampMaxText = defaultClampMaxText;
8
+ /** Начальное значение для uncontrolled-режима: выводится из `min`/`max`, иначе `0`. */
9
+ function getDefaultValue(min, max) {
10
+ if (typeof min === 'number' && min > 0) {
11
+ return min;
12
+ }
13
+ if (typeof max === 'number' && max < 0) {
14
+ return max;
15
+ }
16
+ return 0;
17
+ }
18
+ /** Зажимает значение в диапазон `[min, max]` (границы опциональны). */
19
+ function clamp(value, min, max) {
20
+ let next = value;
21
+ if (typeof min === 'number') {
22
+ next = Math.max(next, min);
23
+ }
24
+ if (typeof max === 'number') {
25
+ next = Math.min(next, max);
26
+ }
27
+ return next;
28
+ }
29
+ /** Приращение значения на `step` с компенсацией погрешности float (округление до 10 знаков). */
30
+ function applyStep(value, step) {
31
+ const sum = value + step;
32
+ return Number(sum.toFixed(10));
33
+ }
34
+ /**
35
+ * Дефолтный текст тултипа клампа для нижней границы.
36
+ */
37
+ function defaultClampMinText(value) {
38
+ return `Значение должно быть больше либо равно ${value}`;
39
+ }
40
+ /**
41
+ * Дефолтный текст тултипа клампа для верхней границы.
42
+ */
43
+ function defaultClampMaxText(value) {
44
+ return `Значение должно быть меньше либо равно ${value}`;
45
+ }
@@ -0,0 +1,11 @@
1
+ import { FieldComboProps } from '../FieldCombo';
2
+ /**
3
+ * Пропсы простого текстового поля. От `FieldCombo` отличается отсутствием слотов:
4
+ * префикса, постфикса, иконок и кнопок-сегментов. Нужен слот — берите `FieldCombo`.
5
+ */
6
+ export type FieldTextProps = Omit<FieldComboProps, 'prefix' | 'postfix' | 'iconBefore' | 'iconAfter' | 'prefixIcon' | 'elementBefore' | 'elementAfter' | 'innerTestIds'>;
7
+ /**
8
+ * Текстовое поле: заголовок, подсказка, плейсхолдер, значение и кнопки очистки и копирования.
9
+ * Слоты вокруг строки ввода не поддерживает — для них есть `FieldCombo`.
10
+ */
11
+ export declare const FieldText: import("react").ForwardRefExoticComponent<Omit<FieldTextProps, "ref"> & import("react").RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FieldText = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const constants_1 = require("../../constants");
7
+ const FieldCombo_1 = require("../FieldCombo");
8
+ /**
9
+ * Текстовое поле: заголовок, подсказка, плейсхолдер, значение и кнопки очистки и копирования.
10
+ * Слоты вокруг строки ввода не поддерживает — для них есть `FieldCombo`.
11
+ */
12
+ exports.FieldText = (0, react_1.forwardRef)(function FieldText(props, ref) {
13
+ return ((0, jsx_runtime_1.jsx)(FieldCombo_1.FieldCombo, { ...props, ref: ref, innerTestIds: { shell: constants_1.TEST_IDS.fieldTextShell, input: constants_1.TEST_IDS.fieldTextInput } }));
14
+ });
@@ -0,0 +1 @@
1
+ export * from './FieldText';
@@ -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("./FieldText"), exports);