@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,137 @@
1
+ @use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
2
+ @use '@cloud-ru/ds-figma-variables/build/scss/components/field.module' as field;
3
+ @use '@cloud-ru/ds-materials' as m;
4
+
5
+ $sizes: 's', 'm', 'l';
6
+
7
+ .chevron {
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: center;
11
+ justify-content: center;
12
+ }
13
+
14
+ .elementWrapper {
15
+ position: relative;
16
+
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+
21
+ color: base.$sn-theme-color-available-version-textSecondary;
22
+ }
23
+
24
+ .backgroundStateLayer {
25
+ pointer-events: none;
26
+
27
+ position: absolute;
28
+ inset: 0;
29
+
30
+ border-radius: inherit;
31
+
32
+ visibility: initial;
33
+ }
34
+
35
+ // Фокус-рамка кнопки-сегмента (Figma focusedFrame/*/inside у buttonField): толщина
36
+ // focusLine-control, inset внутрь кнопки, чтобы не вылезать за границу поля/разделитель.
37
+ // У самого поля рамка другая — focusLine-field снаружи (см. shared/styles.module.scss).
38
+ .focusLayer {
39
+ pointer-events: none;
40
+
41
+ position: absolute;
42
+ inset: 0;
43
+
44
+ display: none;
45
+
46
+ border-radius: inherit;
47
+
48
+ // Непрозрачность не гасится: мягкое свечение (`focusedFrame-opacity`) в макете несёт только
49
+ // внешняя рамка поля, у внутренних кнопок рамка сплошная — как у кнопки очистки из @cloud-ru/ds-button.
50
+ outline: base.$sn-brand-anatomy-focusLine-control-strokeWeight solid base.$sn-theme-color-primary-accent;
51
+ outline-offset: calc(0px - base.$sn-brand-anatomy-focusLine-control-strokeWeight);
52
+ }
53
+
54
+ .buttonContainer {
55
+ cursor: pointer;
56
+
57
+ position: relative;
58
+
59
+ display: flex;
60
+ align-items: center;
61
+ align-self: stretch;
62
+ justify-content: center;
63
+
64
+ margin: 0;
65
+ padding: 0;
66
+ border: none;
67
+
68
+ background: none;
69
+
70
+ @each $size in $sizes {
71
+ &[data-size='#{$size}'] {
72
+ @include base.composite-var(field.$field, 'anatomy', 'size', $size, 'buttonField', 'container');
73
+
74
+ $borderTopLeftRadius: base.simple-var(field.$field, 'anatomy', 'size', $size, 'fieldContainer', 'border-top-left-radius');
75
+ $borderTopRightRadius: base.simple-var(field.$field, 'anatomy', 'size', $size, 'fieldContainer', 'border-top-right-radius');
76
+ $borderBottomRightRadius: base.simple-var(field.$field, 'anatomy', 'size', $size, 'fieldContainer', 'border-bottom-right-radius');
77
+ $borderBottomLeftRadius: base.simple-var(field.$field, 'anatomy', 'size', $size, 'fieldContainer', 'border-bottom-left-radius');
78
+
79
+ &[data-variant='before'] {
80
+ border-radius: $borderTopLeftRadius 0 0 $borderBottomLeftRadius;
81
+ }
82
+
83
+ &[data-variant='after'] {
84
+ border-radius: 0 $borderTopRightRadius $borderBottomRightRadius 0;
85
+ }
86
+
87
+ .elementWrapper {
88
+ @include base.composite-var(field.$field, 'anatomy', 'size', $size, 'buttonField', 'elementWrapper');
89
+ }
90
+
91
+ // Иконки кнопки-слота (action — глаз/иконка; шеврон раскрытия) масштабируются по размеру:
92
+ // s → icon-xs (16), m/l → icon-s (24). max-* (как в @cloud-ru/ds-button): @cloud-ru/ds-icons задают инлайн
93
+ // `style="width:24"`, который перебивает width, но не max-width — поэтому клампится без JS-пропа.
94
+ .elementWrapper svg {
95
+ $iconSize: base.$sn-density-size-icon-s;
96
+
97
+ @if $size == 's' {
98
+ $iconSize: base.$sn-density-size-icon-xs;
99
+ }
100
+
101
+ max-width: $iconSize;
102
+ max-height: $iconSize;
103
+ }
104
+ }
105
+ }
106
+
107
+ &:not([data-loading="true"], [data-disabled="true"]) {
108
+ @include m.has-state-layer-as-child(#{backgroundStateLayer});
109
+ }
110
+
111
+ &[data-disabled='true'] {
112
+ .elementWrapper {
113
+ opacity: base.$sn-theme-effect-opacity-disabled;
114
+ }
115
+ }
116
+
117
+ &[data-loading="true"],
118
+ &[data-disabled='true'] {
119
+ cursor: not-allowed;
120
+
121
+ .backgroundStateLayer {
122
+ visibility: hidden;
123
+ }
124
+ }
125
+
126
+ &:not([data-disabled='true'])[data-loading="true"] {
127
+ background: base.$sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled;
128
+ }
129
+
130
+ &:focus-visible {
131
+ outline: none;
132
+
133
+ .focusLayer {
134
+ display: block;
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,6 @@
1
+ import { ValueOf } from '@cloud-ru/ds-utils';
2
+
3
+ import { BUTTON_SIZE, VARIANT } from './constants';
4
+
5
+ export type ButtonSize = ValueOf<typeof BUTTON_SIZE>;
6
+ export type Variant = ValueOf<typeof VARIANT>;
@@ -0,0 +1,100 @@
1
+ import { SIZE, Size, VALIDATION_STATE, ValidationState } from '@cloud-ru/ds-field-decorator';
2
+ import { extractSupportProps, WithSupportProps } from '@cloud-ru/ds-utils';
3
+ import cn from 'classnames';
4
+ import { CSSProperties, ReactNode } from 'react';
5
+
6
+ import fieldStyles from '../../styles.module.scss';
7
+ import { getAcrylicProps } from '../../utils';
8
+ import styles from './styles.module.scss';
9
+
10
+ export type FieldShellProps = WithSupportProps<{
11
+ /** Контент поля (input / scroll / редактор). Рендерится в fieldContainer между header и footer. */
12
+ children: ReactNode;
13
+ /** Размер поля */
14
+ size?: Size;
15
+ /** Состояние валидации — тонирует acrylic-фон */
16
+ validationState?: ValidationState;
17
+ /** Поле выключено */
18
+ disabled?: boolean;
19
+ /** Только для чтения */
20
+ readonly?: boolean;
21
+ /**
22
+ * Acrylic-фон поля
23
+ * @default true
24
+ */
25
+ background?: boolean;
26
+ /** Виден ли клавиатурный фокус (управляется потребителем по `:focus-visible` контента) */
27
+ focusVisible?: boolean;
28
+ /** Hover поля (управляется потребителем) */
29
+ hover?: boolean;
30
+ /** Ряд элементов над контентом (тулбар, чипы) */
31
+ header?: ReactNode;
32
+ /** Ряд элементов под контентом (действия, счётчик) */
33
+ footer?: ReactNode;
34
+ /** CSS-класс оболочки (fieldWrapper) */
35
+ className?: string;
36
+ /** Inline-стиль оболочки (например, CSS-переменные высоты) */
37
+ style?: CSSProperties;
38
+ /** Колбек входа курсора в поле */
39
+ onMouseEnter?(): void;
40
+ /** Колбек выхода курсора из поля */
41
+ onMouseLeave?(): void;
42
+ }>;
43
+
44
+ /**
45
+ * Визуальная оболочка поля: слои material/border/focus + контейнер со слотами
46
+ * header / content / footer. Единый source-of-truth shell'а для `FieldTextArea` и
47
+ * потребителей с кастомным контентом (например, WYSIWYG-редактор), которым нужен
48
+ * тот же внешний вид, но не подходит нативный `<textarea>`.
49
+ */
50
+ export function FieldShell({
51
+ children,
52
+ size = SIZE.M,
53
+ validationState = VALIDATION_STATE.Default,
54
+ disabled,
55
+ readonly: readOnly,
56
+ background = true,
57
+ focusVisible,
58
+ hover,
59
+ header,
60
+ footer,
61
+ className,
62
+ style,
63
+ onMouseEnter,
64
+ onMouseLeave,
65
+ ...rest
66
+ }: FieldShellProps) {
67
+ return (
68
+ <div
69
+ {...extractSupportProps(rest)}
70
+ className={cn(fieldStyles.fieldWrapper, className)}
71
+ data-size={size}
72
+ data-validation-state={validationState}
73
+ data-disabled={disabled || undefined}
74
+ data-readonly={readOnly || undefined}
75
+ data-withbackground={background || undefined}
76
+ data-focusvisible={focusVisible || undefined}
77
+ data-hover={!readOnly && hover ? true : undefined}
78
+ style={style}
79
+ onMouseEnter={onMouseEnter}
80
+ onMouseLeave={onMouseLeave}
81
+ >
82
+ <div className={fieldStyles.backgroundWrapper}>
83
+ <div
84
+ className={fieldStyles.materialLayer}
85
+ {...getAcrylicProps({ validationState, disabled, readonly: readOnly, hover, focusVisible })}
86
+ >
87
+ <div className={fieldStyles.acrylicBg} aria-hidden />
88
+ </div>
89
+ <div className={fieldStyles.borderStateLayer} data-state='borderOnBackground' />
90
+ <div className={fieldStyles.focusLayer} />
91
+ </div>
92
+
93
+ {header && <div className={styles.header}>{header}</div>}
94
+
95
+ <div className={fieldStyles.fieldContainer}>{children}</div>
96
+
97
+ {footer && <div className={styles.footer}>{footer}</div>}
98
+ </div>
99
+ );
100
+ }
@@ -0,0 +1 @@
1
+ export * from './FieldShell';
@@ -0,0 +1,13 @@
1
+ @use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
2
+
3
+ .header {
4
+ display: flex;
5
+ align-items: center;
6
+ align-self: stretch;
7
+ }
8
+
9
+ .footer {
10
+ display: flex;
11
+ align-items: center;
12
+ align-self: stretch;
13
+ }
@@ -0,0 +1,103 @@
1
+ import { Button } from '@cloud-ru/ds-button';
2
+ import { CheckSVG, CopySVG } from '@cloud-ru/ds-icons/interface/system';
3
+ import { BUTTON_SIZE_MAP, ButtonProps, Size as InputPrivateSize } from '@cloud-ru/ds-input-private';
4
+ import { useEventHandler } from '@cloud-ru/ds-utils';
5
+ import { MouseEvent, MouseEventHandler, Ref, RefObject, useEffect, useMemo, useRef, useState } from 'react';
6
+
7
+ import { TEST_IDS } from '../../../constants';
8
+
9
+ // Длительность визуальной обратной связи «скопировано» (галочка вместо иконки копирования).
10
+ const COPIED_FEEDBACK_MS = 2000;
11
+
12
+ type UseCopyButtonProps = {
13
+ copyButtonRef: RefObject<HTMLButtonElement | null>;
14
+ showCopyButton: boolean;
15
+ /**
16
+ * Колбек копирования. Возвращает `true`, если значение скопировано (для асинхронного
17
+ * источника — `Promise<boolean>`). Галочка показывается только при успехе.
18
+ */
19
+ onCopy(event: MouseEvent<HTMLButtonElement>): boolean | Promise<boolean>;
20
+ size: InputPrivateSize;
21
+ disabled?: boolean;
22
+ /** data-test-id кнопки. Переопределяется полем, когда у него свой публичный id слота. */
23
+ dataTestId?: string;
24
+ };
25
+
26
+ /**
27
+ * Кнопка «Копировать» для postfix (аналогично useClearButton в input-private).
28
+ */
29
+ export function useCopyButton({
30
+ copyButtonRef,
31
+ showCopyButton,
32
+ onCopy,
33
+ size,
34
+ disabled,
35
+ dataTestId = TEST_IDS.fieldTextCopyButton,
36
+ }: UseCopyButtonProps): ButtonProps {
37
+ const copyEventHandler = useEventHandler(onCopy);
38
+ const [copied, setCopied] = useState(false);
39
+ const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);
40
+
41
+ useEffect(
42
+ () => () => {
43
+ if (timerRef.current) {
44
+ clearTimeout(timerRef.current);
45
+ }
46
+ },
47
+ [],
48
+ );
49
+
50
+ return useMemo(
51
+ () => ({
52
+ id: 'copy',
53
+ active: true,
54
+ ref: copyButtonRef,
55
+ show: showCopyButton,
56
+ render: ({ key, tabIndex, ref, onKeyDown, ...props }) => {
57
+ const markCopied = () => {
58
+ setCopied(true);
59
+ if (timerRef.current) {
60
+ clearTimeout(timerRef.current);
61
+ }
62
+ timerRef.current = setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
63
+ };
64
+
65
+ const handleCopy: MouseEventHandler<HTMLButtonElement> = event => {
66
+ event.stopPropagation();
67
+ props.onClick(event);
68
+ // Галочку показываем только при успешном копировании (паритет с легаси ButtonCopyValue).
69
+ const result = copyEventHandler(event);
70
+ if (typeof result === 'boolean') {
71
+ if (result) {
72
+ markCopied();
73
+ }
74
+ return;
75
+ }
76
+ result.then(success => {
77
+ if (success) {
78
+ markCopied();
79
+ }
80
+ });
81
+ };
82
+
83
+ return (
84
+ <Button
85
+ key={key}
86
+ innerRef={ref as Ref<HTMLButtonElement>}
87
+ type='button'
88
+ view='function'
89
+ appearance='neutral'
90
+ disabled={disabled}
91
+ size={BUTTON_SIZE_MAP[size]}
92
+ icon={copied ? <CheckSVG /> : <CopySVG />}
93
+ onClick={handleCopy}
94
+ tabIndex={tabIndex}
95
+ onKeyDown={onKeyDown}
96
+ data-test-id={dataTestId}
97
+ />
98
+ );
99
+ },
100
+ }),
101
+ [copied, copyButtonRef, copyEventHandler, dataTestId, disabled, showCopyButton, size],
102
+ );
103
+ }
@@ -0,0 +1,4 @@
1
+ export * from './helperComponents/FieldElementButton';
2
+ export * from './helperComponents/FieldShell';
3
+ export * from './hooks/useCopyButton';
4
+ export * from './utils';