@ozen-ui/kit 0.63.1 → 0.65.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 (261) hide show
  1. package/ChipGroup/package.json +5 -0
  2. package/InputOTP/package.json +5 -0
  3. package/Title/package.json +5 -0
  4. package/__inner__/cjs/components/ChipGroup/ChipGroup.css +16 -0
  5. package/__inner__/cjs/components/ChipGroup/ChipGroup.d.ts +4 -0
  6. package/__inner__/cjs/components/ChipGroup/ChipGroup.js +52 -0
  7. package/__inner__/cjs/components/ChipGroup/ChipGroupContext.d.ts +10 -0
  8. package/__inner__/cjs/components/ChipGroup/ChipGroupContext.js +5 -0
  9. package/__inner__/cjs/components/ChipGroup/constants.d.ts +5 -0
  10. package/__inner__/cjs/components/ChipGroup/constants.js +6 -0
  11. package/__inner__/cjs/components/ChipGroup/index.d.ts +2 -0
  12. package/__inner__/cjs/components/ChipGroup/index.js +5 -0
  13. package/__inner__/cjs/components/ChipGroup/types.d.ts +33 -0
  14. package/__inner__/cjs/components/ChipGroup/types.js +2 -0
  15. package/__inner__/cjs/components/ChipNext/Chip.css +50 -17
  16. package/__inner__/cjs/components/ChipNext/Chip.js +32 -5
  17. package/__inner__/cjs/components/ChipNext/types.d.ts +9 -5
  18. package/__inner__/cjs/components/ChipNext/types.js +9 -2
  19. package/__inner__/cjs/components/FormGroup/types.d.ts +2 -0
  20. package/__inner__/cjs/components/FormTitle/FormTitle.d.ts +1 -0
  21. package/__inner__/cjs/components/IconButtonNext/types.d.ts +4 -1
  22. package/__inner__/cjs/components/IconButtonNext/utils.d.ts +2 -2
  23. package/__inner__/cjs/components/InputOTP/InputOTP.css +60 -0
  24. package/__inner__/cjs/components/InputOTP/InputOTP.d.ts +4 -0
  25. package/__inner__/cjs/components/InputOTP/InputOTP.js +179 -0
  26. package/__inner__/cjs/components/InputOTP/constants.d.ts +8 -0
  27. package/__inner__/cjs/components/InputOTP/constants.js +13 -0
  28. package/__inner__/cjs/components/InputOTP/helper.d.ts +13 -0
  29. package/__inner__/cjs/components/InputOTP/helper.js +87 -0
  30. package/__inner__/cjs/components/InputOTP/hooks/index.d.ts +1 -0
  31. package/__inner__/cjs/components/InputOTP/hooks/index.js +4 -0
  32. package/__inner__/cjs/components/InputOTP/hooks/useInputOTPEvents.d.ts +20 -0
  33. package/__inner__/cjs/components/InputOTP/hooks/useInputOTPEvents.js +183 -0
  34. package/__inner__/cjs/components/InputOTP/index.d.ts +3 -0
  35. package/__inner__/cjs/components/InputOTP/index.js +6 -0
  36. package/__inner__/cjs/components/InputOTP/presets.d.ts +12 -0
  37. package/__inner__/cjs/components/InputOTP/presets.js +27 -0
  38. package/__inner__/cjs/components/InputOTP/types.d.ts +101 -0
  39. package/__inner__/cjs/components/InputOTP/types.js +7 -0
  40. package/__inner__/cjs/components/TagNext/types.d.ts +1 -1
  41. package/__inner__/cjs/components/TagNext/types.js +1 -0
  42. package/__inner__/cjs/components/ThemeProvider/types.d.ts +7 -2
  43. package/__inner__/cjs/components/Title/Title.d.ts +4 -0
  44. package/__inner__/cjs/components/Title/Title.js +27 -0
  45. package/__inner__/cjs/components/Title/TitleContext.d.ts +8 -0
  46. package/__inner__/cjs/components/Title/TitleContext.js +17 -0
  47. package/__inner__/cjs/components/Title/components/index.d.ts +1 -0
  48. package/__inner__/cjs/components/Title/components/index.js +4 -0
  49. package/__inner__/cjs/components/Title/components/variant/TitleVariant.d.ts +2 -0
  50. package/__inner__/cjs/components/Title/components/variant/TitleVariant.js +24 -0
  51. package/__inner__/cjs/components/Title/components/variant/index.d.ts +4 -0
  52. package/__inner__/cjs/components/Title/components/variant/index.js +7 -0
  53. package/__inner__/cjs/components/Title/components/variant/main/TitleMain.css +38 -0
  54. package/__inner__/cjs/components/Title/components/variant/main/TitleMain.d.ts +4 -0
  55. package/__inner__/cjs/components/Title/components/variant/main/TitleMain.js +35 -0
  56. package/__inner__/cjs/components/Title/components/variant/main/config.d.ts +3 -0
  57. package/__inner__/cjs/components/Title/components/variant/main/config.js +7 -0
  58. package/__inner__/cjs/components/Title/components/variant/main/index.d.ts +2 -0
  59. package/__inner__/cjs/components/Title/components/variant/main/index.js +5 -0
  60. package/__inner__/cjs/components/Title/components/variant/main/types.d.ts +13 -0
  61. package/__inner__/cjs/components/Title/components/variant/main/types.js +2 -0
  62. package/__inner__/cjs/components/Title/components/variant/secondary/TitleSecondary.css +26 -0
  63. package/__inner__/cjs/components/Title/components/variant/secondary/TitleSecondary.d.ts +4 -0
  64. package/__inner__/cjs/components/Title/components/variant/secondary/TitleSecondary.js +15 -0
  65. package/__inner__/cjs/components/Title/components/variant/secondary/index.d.ts +2 -0
  66. package/__inner__/cjs/components/Title/components/variant/secondary/index.js +5 -0
  67. package/__inner__/cjs/components/Title/components/variant/secondary/types.d.ts +10 -0
  68. package/__inner__/cjs/components/Title/components/variant/secondary/types.js +2 -0
  69. package/__inner__/cjs/components/Title/components/variant/types.d.ts +8 -0
  70. package/__inner__/cjs/components/Title/components/variant/types.js +2 -0
  71. package/__inner__/cjs/components/Title/constants.d.ts +4 -0
  72. package/__inner__/cjs/components/Title/constants.js +6 -0
  73. package/__inner__/cjs/components/Title/entities/icon.d.ts +3 -0
  74. package/__inner__/cjs/components/Title/entities/icon.js +2 -0
  75. package/__inner__/cjs/components/Title/entities/index.d.ts +3 -0
  76. package/__inner__/cjs/components/Title/entities/index.js +6 -0
  77. package/__inner__/cjs/components/Title/entities/size.d.ts +2 -0
  78. package/__inner__/cjs/components/Title/entities/size.js +4 -0
  79. package/__inner__/cjs/components/Title/entities/variant.d.ts +7 -0
  80. package/__inner__/cjs/components/Title/entities/variant.js +4 -0
  81. package/__inner__/cjs/components/Title/index.d.ts +4 -0
  82. package/__inner__/cjs/components/Title/index.js +7 -0
  83. package/__inner__/cjs/components/Title/modules/icon-button/TitleIconButton.d.ts +3 -0
  84. package/__inner__/cjs/components/Title/modules/icon-button/TitleIconButton.js +16 -0
  85. package/__inner__/cjs/components/Title/modules/icon-button/constants.d.ts +1 -0
  86. package/__inner__/cjs/components/Title/modules/icon-button/constants.js +4 -0
  87. package/__inner__/cjs/components/Title/modules/icon-button/index.d.ts +2 -0
  88. package/__inner__/cjs/components/Title/modules/icon-button/index.js +5 -0
  89. package/__inner__/cjs/components/Title/modules/icon-button/types.d.ts +6 -0
  90. package/__inner__/cjs/components/Title/modules/icon-button/types.js +2 -0
  91. package/__inner__/cjs/components/Title/modules/index.d.ts +2 -0
  92. package/__inner__/cjs/components/Title/modules/index.js +5 -0
  93. package/__inner__/cjs/components/Title/modules/tag/TitleTag.css +4 -0
  94. package/__inner__/cjs/components/Title/modules/tag/TitleTag.d.ts +3 -0
  95. package/__inner__/cjs/components/Title/modules/tag/TitleTag.js +11 -0
  96. package/__inner__/cjs/components/Title/modules/tag/constants.d.ts +1 -0
  97. package/__inner__/cjs/components/Title/modules/tag/constants.js +4 -0
  98. package/__inner__/cjs/components/Title/modules/tag/index.d.ts +2 -0
  99. package/__inner__/cjs/components/Title/modules/tag/index.js +5 -0
  100. package/__inner__/cjs/components/Title/modules/tag/types.d.ts +6 -0
  101. package/__inner__/cjs/components/Title/modules/tag/types.js +2 -0
  102. package/__inner__/cjs/components/Title/types.d.ts +10 -0
  103. package/__inner__/cjs/components/Title/types.js +2 -0
  104. package/__inner__/cjs/constants/environment/index.d.ts +2 -0
  105. package/__inner__/cjs/constants/environment/index.js +5 -0
  106. package/__inner__/cjs/constants/environment/isDev.d.ts +1 -0
  107. package/__inner__/cjs/constants/environment/isDev.js +5 -0
  108. package/__inner__/cjs/constants/environment/isProduction.d.ts +1 -0
  109. package/__inner__/cjs/constants/environment/isProduction.js +4 -0
  110. package/__inner__/cjs/hooks/useStoredValue/index.d.ts +3 -0
  111. package/__inner__/cjs/hooks/useStoredValue/index.js +6 -0
  112. package/__inner__/cjs/hooks/useStoredValue/types.d.ts +2 -0
  113. package/__inner__/cjs/hooks/useStoredValue/types.js +2 -0
  114. package/__inner__/cjs/hooks/useStoredValue/useStoredValue.d.ts +4 -0
  115. package/__inner__/cjs/hooks/useStoredValue/useStoredValue.js +16 -0
  116. package/__inner__/cjs/hooks/useStoredValue/utils.d.ts +2 -0
  117. package/__inner__/cjs/hooks/useStoredValue/utils.js +8 -0
  118. package/__inner__/cjs/types/object/withPartial.d.ts +3 -0
  119. package/__inner__/cjs/types/object/withPartial.js +2 -0
  120. package/__inner__/cjs/utils/array/create-empty/createEmptyArray.d.ts +1 -0
  121. package/__inner__/cjs/utils/array/create-empty/createEmptyArray.js +8 -0
  122. package/__inner__/cjs/utils/array/create-empty/index.d.ts +1 -0
  123. package/__inner__/cjs/utils/array/create-empty/index.js +4 -0
  124. package/__inner__/cjs/utils/array/create-filled/createFilledArray.d.ts +1 -0
  125. package/__inner__/cjs/utils/array/create-filled/createFilledArray.js +7 -0
  126. package/__inner__/cjs/utils/array/create-filled/index.d.ts +1 -0
  127. package/__inner__/cjs/utils/array/create-filled/index.js +4 -0
  128. package/__inner__/cjs/utils/array/index.d.ts +2 -0
  129. package/__inner__/cjs/utils/array/index.js +5 -0
  130. package/__inner__/cjs/utils/isFunction.d.ts +1 -0
  131. package/__inner__/cjs/utils/isFunction.js +8 -0
  132. package/__inner__/esm/components/ChipGroup/ChipGroup.css +16 -0
  133. package/__inner__/esm/components/ChipGroup/ChipGroup.d.ts +4 -0
  134. package/__inner__/esm/components/ChipGroup/ChipGroup.js +49 -0
  135. package/__inner__/esm/components/ChipGroup/ChipGroupContext.d.ts +10 -0
  136. package/__inner__/esm/components/ChipGroup/ChipGroupContext.js +2 -0
  137. package/__inner__/esm/components/ChipGroup/constants.d.ts +5 -0
  138. package/__inner__/esm/components/ChipGroup/constants.js +3 -0
  139. package/__inner__/esm/components/ChipGroup/index.d.ts +2 -0
  140. package/__inner__/esm/components/ChipGroup/index.js +2 -0
  141. package/__inner__/esm/components/ChipGroup/types.d.ts +33 -0
  142. package/__inner__/esm/components/ChipGroup/types.js +1 -0
  143. package/__inner__/esm/components/ChipNext/Chip.css +50 -17
  144. package/__inner__/esm/components/ChipNext/Chip.js +32 -5
  145. package/__inner__/esm/components/ChipNext/types.d.ts +9 -5
  146. package/__inner__/esm/components/ChipNext/types.js +8 -1
  147. package/__inner__/esm/components/FormGroup/types.d.ts +2 -0
  148. package/__inner__/esm/components/FormTitle/FormTitle.d.ts +1 -0
  149. package/__inner__/esm/components/IconButtonNext/types.d.ts +4 -1
  150. package/__inner__/esm/components/IconButtonNext/utils.d.ts +2 -2
  151. package/__inner__/esm/components/InputOTP/InputOTP.css +60 -0
  152. package/__inner__/esm/components/InputOTP/InputOTP.d.ts +4 -0
  153. package/__inner__/esm/components/InputOTP/InputOTP.js +176 -0
  154. package/__inner__/esm/components/InputOTP/constants.d.ts +8 -0
  155. package/__inner__/esm/components/InputOTP/constants.js +10 -0
  156. package/__inner__/esm/components/InputOTP/helper.d.ts +13 -0
  157. package/__inner__/esm/components/InputOTP/helper.js +79 -0
  158. package/__inner__/esm/components/InputOTP/hooks/index.d.ts +1 -0
  159. package/__inner__/esm/components/InputOTP/hooks/index.js +1 -0
  160. package/__inner__/esm/components/InputOTP/hooks/useInputOTPEvents.d.ts +20 -0
  161. package/__inner__/esm/components/InputOTP/hooks/useInputOTPEvents.js +179 -0
  162. package/__inner__/esm/components/InputOTP/index.d.ts +3 -0
  163. package/__inner__/esm/components/InputOTP/index.js +3 -0
  164. package/__inner__/esm/components/InputOTP/presets.d.ts +12 -0
  165. package/__inner__/esm/components/InputOTP/presets.js +24 -0
  166. package/__inner__/esm/components/InputOTP/types.d.ts +101 -0
  167. package/__inner__/esm/components/InputOTP/types.js +4 -0
  168. package/__inner__/esm/components/TagNext/types.d.ts +1 -1
  169. package/__inner__/esm/components/TagNext/types.js +1 -0
  170. package/__inner__/esm/components/ThemeProvider/types.d.ts +7 -2
  171. package/__inner__/esm/components/Title/Title.d.ts +4 -0
  172. package/__inner__/esm/components/Title/Title.js +24 -0
  173. package/__inner__/esm/components/Title/TitleContext.d.ts +8 -0
  174. package/__inner__/esm/components/Title/TitleContext.js +12 -0
  175. package/__inner__/esm/components/Title/components/index.d.ts +1 -0
  176. package/__inner__/esm/components/Title/components/index.js +1 -0
  177. package/__inner__/esm/components/Title/components/variant/TitleVariant.d.ts +2 -0
  178. package/__inner__/esm/components/Title/components/variant/TitleVariant.js +21 -0
  179. package/__inner__/esm/components/Title/components/variant/index.d.ts +4 -0
  180. package/__inner__/esm/components/Title/components/variant/index.js +4 -0
  181. package/__inner__/esm/components/Title/components/variant/main/TitleMain.css +38 -0
  182. package/__inner__/esm/components/Title/components/variant/main/TitleMain.d.ts +4 -0
  183. package/__inner__/esm/components/Title/components/variant/main/TitleMain.js +32 -0
  184. package/__inner__/esm/components/Title/components/variant/main/config.d.ts +3 -0
  185. package/__inner__/esm/components/Title/components/variant/main/config.js +4 -0
  186. package/__inner__/esm/components/Title/components/variant/main/index.d.ts +2 -0
  187. package/__inner__/esm/components/Title/components/variant/main/index.js +2 -0
  188. package/__inner__/esm/components/Title/components/variant/main/types.d.ts +13 -0
  189. package/__inner__/esm/components/Title/components/variant/main/types.js +1 -0
  190. package/__inner__/esm/components/Title/components/variant/secondary/TitleSecondary.css +26 -0
  191. package/__inner__/esm/components/Title/components/variant/secondary/TitleSecondary.d.ts +4 -0
  192. package/__inner__/esm/components/Title/components/variant/secondary/TitleSecondary.js +12 -0
  193. package/__inner__/esm/components/Title/components/variant/secondary/index.d.ts +2 -0
  194. package/__inner__/esm/components/Title/components/variant/secondary/index.js +2 -0
  195. package/__inner__/esm/components/Title/components/variant/secondary/types.d.ts +10 -0
  196. package/__inner__/esm/components/Title/components/variant/secondary/types.js +1 -0
  197. package/__inner__/esm/components/Title/components/variant/types.d.ts +8 -0
  198. package/__inner__/esm/components/Title/components/variant/types.js +1 -0
  199. package/__inner__/esm/components/Title/constants.d.ts +4 -0
  200. package/__inner__/esm/components/Title/constants.js +3 -0
  201. package/__inner__/esm/components/Title/entities/icon.d.ts +3 -0
  202. package/__inner__/esm/components/Title/entities/icon.js +1 -0
  203. package/__inner__/esm/components/Title/entities/index.d.ts +3 -0
  204. package/__inner__/esm/components/Title/entities/index.js +3 -0
  205. package/__inner__/esm/components/Title/entities/size.d.ts +2 -0
  206. package/__inner__/esm/components/Title/entities/size.js +1 -0
  207. package/__inner__/esm/components/Title/entities/variant.d.ts +7 -0
  208. package/__inner__/esm/components/Title/entities/variant.js +1 -0
  209. package/__inner__/esm/components/Title/index.d.ts +4 -0
  210. package/__inner__/esm/components/Title/index.js +4 -0
  211. package/__inner__/esm/components/Title/modules/icon-button/TitleIconButton.d.ts +3 -0
  212. package/__inner__/esm/components/Title/modules/icon-button/TitleIconButton.js +13 -0
  213. package/__inner__/esm/components/Title/modules/icon-button/constants.d.ts +1 -0
  214. package/__inner__/esm/components/Title/modules/icon-button/constants.js +1 -0
  215. package/__inner__/esm/components/Title/modules/icon-button/index.d.ts +2 -0
  216. package/__inner__/esm/components/Title/modules/icon-button/index.js +2 -0
  217. package/__inner__/esm/components/Title/modules/icon-button/types.d.ts +6 -0
  218. package/__inner__/esm/components/Title/modules/icon-button/types.js +1 -0
  219. package/__inner__/esm/components/Title/modules/index.d.ts +2 -0
  220. package/__inner__/esm/components/Title/modules/index.js +2 -0
  221. package/__inner__/esm/components/Title/modules/tag/TitleTag.css +4 -0
  222. package/__inner__/esm/components/Title/modules/tag/TitleTag.d.ts +3 -0
  223. package/__inner__/esm/components/Title/modules/tag/TitleTag.js +8 -0
  224. package/__inner__/esm/components/Title/modules/tag/constants.d.ts +1 -0
  225. package/__inner__/esm/components/Title/modules/tag/constants.js +1 -0
  226. package/__inner__/esm/components/Title/modules/tag/index.d.ts +2 -0
  227. package/__inner__/esm/components/Title/modules/tag/index.js +2 -0
  228. package/__inner__/esm/components/Title/modules/tag/types.d.ts +6 -0
  229. package/__inner__/esm/components/Title/modules/tag/types.js +1 -0
  230. package/__inner__/esm/components/Title/types.d.ts +10 -0
  231. package/__inner__/esm/components/Title/types.js +1 -0
  232. package/__inner__/esm/constants/environment/index.d.ts +2 -0
  233. package/__inner__/esm/constants/environment/index.js +2 -0
  234. package/__inner__/esm/constants/environment/isDev.d.ts +1 -0
  235. package/__inner__/esm/constants/environment/isDev.js +2 -0
  236. package/__inner__/esm/constants/environment/isProduction.d.ts +1 -0
  237. package/__inner__/esm/constants/environment/isProduction.js +1 -0
  238. package/__inner__/esm/hooks/useStoredValue/index.d.ts +3 -0
  239. package/__inner__/esm/hooks/useStoredValue/index.js +3 -0
  240. package/__inner__/esm/hooks/useStoredValue/types.d.ts +2 -0
  241. package/__inner__/esm/hooks/useStoredValue/types.js +1 -0
  242. package/__inner__/esm/hooks/useStoredValue/useStoredValue.d.ts +4 -0
  243. package/__inner__/esm/hooks/useStoredValue/useStoredValue.js +13 -0
  244. package/__inner__/esm/hooks/useStoredValue/utils.d.ts +2 -0
  245. package/__inner__/esm/hooks/useStoredValue/utils.js +5 -0
  246. package/__inner__/esm/types/object/withPartial.d.ts +3 -0
  247. package/__inner__/esm/types/object/withPartial.js +1 -0
  248. package/__inner__/esm/utils/array/create-empty/createEmptyArray.d.ts +1 -0
  249. package/__inner__/esm/utils/array/create-empty/createEmptyArray.js +4 -0
  250. package/__inner__/esm/utils/array/create-empty/index.d.ts +1 -0
  251. package/__inner__/esm/utils/array/create-empty/index.js +1 -0
  252. package/__inner__/esm/utils/array/create-filled/createFilledArray.d.ts +1 -0
  253. package/__inner__/esm/utils/array/create-filled/createFilledArray.js +3 -0
  254. package/__inner__/esm/utils/array/create-filled/index.d.ts +1 -0
  255. package/__inner__/esm/utils/array/create-filled/index.js +1 -0
  256. package/__inner__/esm/utils/array/index.d.ts +2 -0
  257. package/__inner__/esm/utils/array/index.js +2 -0
  258. package/__inner__/esm/utils/isFunction.d.ts +1 -0
  259. package/__inner__/esm/utils/isFunction.js +4 -0
  260. package/package.json +4 -4
  261. package/useStoredValue/package.json +5 -0
@@ -13,5 +13,7 @@ export type FormGroupBaseProps = {
13
13
  children?: ReactNode;
14
14
  /** Направление */
15
15
  direction?: FormGroupDirectionVariant;
16
+ /** data-атрибут для тестирования */
17
+ 'data-testid'?: string;
16
18
  };
17
19
  export type FormGroupProps<As extends ElementType = 'div'> = PolymorphicComponentPropsWithoutRef<FormGroupBaseProps, As>;
@@ -5,6 +5,7 @@ import { type PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphi
5
5
  export type FormTitleBaseProps = {
6
6
  /** Размер — влияет на размер шрифта и отступы заголовка */
7
7
  size?: FormElementSizeVariant;
8
+ 'data-testid'?: string;
8
9
  };
9
10
  export type FormTitleProps<As extends ElementType = 'div'> = PolymorphicComponentPropsWithoutRef<FormTitleBaseProps, As>;
10
11
  export declare const cnFormTitle: import("@bem-react/classname").ClassNameFormatter;
@@ -8,6 +8,7 @@ export declare const iconButtonColorVariant: readonly ["primary", "secondary", "
8
8
  export declare const iconButtonVariant: readonly ["contained", "contained-additional", "ghost", "function", "floating"];
9
9
  export type IconButtonVariant = (typeof iconButtonVariant)[number];
10
10
  export type IconButtonColorVariant = (typeof iconButtonColorVariant)[number];
11
+ export type IconButtonSize = FormElementSizeVariant;
11
12
  export type IconButtonIcon = RenderContentType<IconProps>['content'];
12
13
  export type IconButtonBaseProps = {
13
14
  /** Иконка */
@@ -15,7 +16,7 @@ export type IconButtonBaseProps = {
15
16
  /** Вариант представления компонента */
16
17
  variant?: IconButtonVariant;
17
18
  /** Размер */
18
- size?: FormElementSizeVariant;
19
+ size?: IconButtonSize;
19
20
  /** Основной цвет компонента */
20
21
  color?: IconButtonColorVariant;
21
22
  /** Цвет иконки кнопки */
@@ -30,6 +31,8 @@ export type IconButtonBaseProps = {
30
31
  className?: string;
31
32
  /** Если `true` делает компонент круглым */
32
33
  rounded?: boolean;
34
+ /** Идентификатор компонента для тестов */
35
+ 'data-testid'?: string;
33
36
  children?: never;
34
37
  };
35
38
  export type IconButtonProps<As extends ElementType = typeof ICON_BUTTON_DEFAULT_TAG> = PolymorphicComponentPropsWithoutRef<IconButtonBaseProps, As>;
@@ -1,5 +1,5 @@
1
- import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
2
1
  import type { LoaderSizeVariant } from '../Loader';
2
+ import type { IconButtonSize } from './types';
3
3
  export declare const loaderSizeMapper: {
4
- [key in FormElementSizeVariant]: LoaderSizeVariant;
4
+ [key in IconButtonSize]: LoaderSizeVariant;
5
5
  };
@@ -0,0 +1,60 @@
1
+ /* stylelint-disable */
2
+ .InputOTP-Field {
3
+ position: relative;
4
+ }
5
+ .InputOTP-Field_notAvailable {
6
+ pointer-events: none;
7
+ }
8
+ .InputOTP .FieldControl_error:not(.FieldControl_disabled) {
9
+ --textfield-color: var(--color-content-error);
10
+ --textfield-background-color: var(--color-background-primary);
11
+ }
12
+ .InputOTP:not(.InputOTP_disabled) .InputOTP-InputContainer {
13
+ cursor: pointer;
14
+ }
15
+ .InputOTP_size_s {
16
+ --otp-input-inline-size: 40px;
17
+ }
18
+ .InputOTP_size_s .InputOTP-Input {
19
+ font: var(--typography-text-s-font);
20
+ letter-spacing: var(--typography-text-s-letter_spacing, 0);
21
+ text-transform: var(--typography-text-s-text_transform, none);
22
+ }
23
+ .InputOTP_size_m {
24
+ --otp-input-inline-size: 44px;
25
+ }
26
+ .InputOTP_size_m .InputOTP-Input {
27
+ font: var(--typography-text-l-font);
28
+ letter-spacing: var(--typography-text-l-letter_spacing, 0);
29
+ text-transform: var(--typography-text-l-text_transform, none);
30
+ }
31
+ .InputOTP-Input {
32
+ box-sizing: border-box;
33
+ padding: var(--textfield-input-padding);
34
+ background-color: var(--textfield-background-color);
35
+ transition: background-color box-shadow var(--transition-slow);
36
+ color: var(--textfield-color);
37
+ border-radius: var(--textfield-border-radius);
38
+ block-size: var(--textfield-input-height);
39
+ text-align: center;
40
+ border: none;
41
+ outline: none;
42
+ display: block;
43
+ inline-size: var(--otp-input-inline-size);
44
+ }
45
+ .InputOTP-Input:-webkit-autofill,
46
+ .InputOTP-Input:-webkit-autofill:hover,
47
+ .InputOTP-Input:-webkit-autofill:focus {
48
+ box-shadow: 0 0 0 1000px var(--textfield-background-color) inset !important;
49
+ background-color: transparent !important;
50
+ -webkit-text-fill-color: var(--textfield-color);
51
+ }
52
+ .InputOTP-Input::-webkit-outer-spin-button,
53
+ .InputOTP-Input::-webkit-inner-spin-button {
54
+ -webkit-appearance: none;
55
+ appearance: none;
56
+ margin: 0;
57
+ }
58
+ .InputOTP-Input:disabled {
59
+ opacity: 1;
60
+ }
@@ -0,0 +1,4 @@
1
+ import './InputOTP.css';
2
+ import type { InputOTPBaseProps } from './types';
3
+ export declare const cnInputOTP: import("@bem-react/classname").ClassNameFormatter;
4
+ export declare const InputOTP: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<InputOTPBaseProps, "div">;
@@ -0,0 +1,176 @@
1
+ import { __assign, __read, __rest } from "tslib";
2
+ import './InputOTP.css';
3
+ import React, { useImperativeHandle, useEffect, useMemo, useState, } from 'react';
4
+ import { useControlled } from '../../hooks/useControlled';
5
+ import { useStoredValue } from '../../hooks/useStoredValue';
6
+ import { useThemeProps } from '../../hooks/useThemeProps';
7
+ import { createEmptyArray } from '../../utils/array';
8
+ import { cn } from '../../utils/classname';
9
+ import { isFunction } from '../../utils/isFunction';
10
+ import { isString } from '../../utils/isString';
11
+ import { polymorphicComponentWithRef } from '../../utils/polymorphicComponentWithRef';
12
+ import { setRef } from '../../utils/setRef';
13
+ import { FieldControl } from '../FieldControl';
14
+ import { FieldInput } from '../FieldInput';
15
+ import { Fieldset } from '../Fieldset';
16
+ import { Stack } from '../Stack';
17
+ import { INPUT_OTP_DEFAULT_AUTO_COMPLETE_MODE, INPUT_OTP_DEFAULT_DISABLE_STROKE, INPUT_OTP_DEFAULT_FINISH_BEHAVIOR, INPUT_OTP_DEFAULT_SIZE, INPUT_OTP_DEFAULT_TAG, INPUT_OTP_SPACING_BY_SIZE, } from './constants';
18
+ import { maskValue, calculateInput as externalCalculateInput, valueToString, valueToArray, } from './helper';
19
+ import { useInputOTPEvents } from './hooks';
20
+ export var cnInputOTP = cn('InputOTP');
21
+ export var InputOTP = polymorphicComponentWithRef(function (inProps, ref) {
22
+ var props = useThemeProps({
23
+ props: inProps,
24
+ name: 'InputOTP',
25
+ });
26
+ var _a = props.as, as = _a === void 0 ? INPUT_OTP_DEFAULT_TAG : _a, className = props.className, length = props.length, autoComplete = props.autoComplete, _b = props.autoCompleteMode, autoCompleteMode = _b === void 0 ? INPUT_OTP_DEFAULT_AUTO_COMPLETE_MODE : _b, placeholder = props.placeholder, disabled = props.disabled, error = props.error, onChangeFromProps = props.onChange, ariaLabel = props.ariaLabel, value = props.value, defaultValue = props.defaultValue, mask = props.mask, autoFocus = props.autoFocus, onFinish = props.onFinish, onPasteFromProps = props.onPaste, onKeyDownFromProps = props.onKeyDown, _c = props.disableStroke, disableStroke = _c === void 0 ? INPUT_OTP_DEFAULT_DISABLE_STROKE : _c, validate = props.validate, _d = props.size, size = _d === void 0 ? INPUT_OTP_DEFAULT_SIZE : _d, inputProps = props.inputProps, fieldProps = props.fieldProps, _e = props.finishBehavior, finishBehavior = _e === void 0 ? INPUT_OTP_DEFAULT_FINISH_BEHAVIOR : _e, inputContainerProps = props.inputContainerProps, other = __rest(props, ["as", "className", "length", "autoComplete", "autoCompleteMode", "placeholder", "disabled", "error", "onChange", "ariaLabel", "value", "defaultValue", "mask", "autoFocus", "onFinish", "onPaste", "onKeyDown", "disableStroke", "validate", "size", "inputProps", "fieldProps", "finishBehavior", "inputContainerProps"]);
27
+ var _f = __read(useState(null), 2), focusedInputIndex = _f[0], setFocusedInputIndex = _f[1];
28
+ var _g = __read(useControlled({
29
+ value: isString(value) ? valueToArray(value) : value,
30
+ defaultValue: useMemo(function () {
31
+ if (isString(defaultValue)) {
32
+ return valueToArray(defaultValue);
33
+ }
34
+ return defaultValue !== null && defaultValue !== void 0 ? defaultValue : [];
35
+ }, []),
36
+ name: 'InputOtp',
37
+ }), 2), valueByIndex = _g[0], setValueByIndexState = _g[1];
38
+ var inputs = useStoredValue([]);
39
+ var setValueByIndex = function (valueByIndex) {
40
+ setValueByIndexState(valueByIndex);
41
+ if (onChangeFromProps) {
42
+ var maskedValueByIndex = maskValue(mask, valueByIndex);
43
+ onChangeFromProps(valueToString(valueByIndex), valueByIndex, valueToString(maskedValueByIndex), maskedValueByIndex);
44
+ }
45
+ };
46
+ var calculateInput = function (valueByIndex, index) {
47
+ return externalCalculateInput({
48
+ valueByIndex: valueByIndex,
49
+ mask: mask,
50
+ disabled: disabled,
51
+ index: index,
52
+ length: length,
53
+ focusedInputIndex: focusedInputIndex,
54
+ });
55
+ };
56
+ var _h = useInputOTPEvents({
57
+ inputs: inputs,
58
+ valueByIndex: valueByIndex,
59
+ setValueByIndex: setValueByIndex,
60
+ validate: validate,
61
+ onFinish: onFinish,
62
+ onPaste: onPasteFromProps,
63
+ onKeyDown: onKeyDownFromProps,
64
+ length: length,
65
+ mask: mask,
66
+ finishBehavior: finishBehavior,
67
+ }), onInputSelect = _h.onInputSelect, onInputChange = _h.onInputChange, onKeyDown = _h.onKeyDown, onPaste = _h.onPaste;
68
+ var getFirstNonFilledInput = function () {
69
+ var firstNonFilledInputIndex = inputs.current.findIndex(function (_, index) {
70
+ var _a;
71
+ var inputValue = (_a = valueByIndex === null || valueByIndex === void 0 ? void 0 : valueByIndex[index]) !== null && _a !== void 0 ? _a : '';
72
+ return inputValue === '';
73
+ });
74
+ return inputs.current[firstNonFilledInputIndex];
75
+ };
76
+ var focusFirstNonFilledInput = function () {
77
+ var _a;
78
+ (_a = getFirstNonFilledInput()) === null || _a === void 0 ? void 0 : _a.focus();
79
+ };
80
+ useEffect(function () {
81
+ if (!autoFocus) {
82
+ return;
83
+ }
84
+ focusFirstNonFilledInput();
85
+ }, []);
86
+ useImperativeHandle(ref, function () { return ({
87
+ focus: function () {
88
+ var _a;
89
+ if (getFirstNonFilledInput()) {
90
+ focusFirstNonFilledInput();
91
+ }
92
+ else {
93
+ (_a = inputs.current[length - 1]) === null || _a === void 0 ? void 0 : _a.focus();
94
+ }
95
+ },
96
+ }); });
97
+ return (React.createElement(Stack, __assign({ as: as, className: cnInputOTP({
98
+ size: size,
99
+ disabled: disabled,
100
+ }, [className]), gap: INPUT_OTP_SPACING_BY_SIZE[size] }, other, { ref: ref }), createEmptyArray(length).map(function (_, index) {
101
+ var _a, _b;
102
+ var calculatedInput = calculateInput(valueByIndex, index);
103
+ var isInputDisabled = calculatedInput.isDisabled, value = calculatedInput.value;
104
+ var processedAutocomplete = (function () {
105
+ if (autoCompleteMode === 'firstOnly') {
106
+ return !!autoComplete && index === 0 ? autoComplete : 'off';
107
+ }
108
+ return autoComplete;
109
+ })();
110
+ var processedContainerProps = isFunction(inputContainerProps)
111
+ ? inputContainerProps(calculatedInput, index)
112
+ : inputContainerProps;
113
+ var processedFieldProps = isFunction(fieldProps)
114
+ ? fieldProps(calculatedInput, index)
115
+ : fieldProps;
116
+ var processedInputProps = isFunction(inputProps)
117
+ ? inputProps(calculatedInput, index)
118
+ : inputProps;
119
+ var processedPlaceholder = isFunction(placeholder)
120
+ ? placeholder(calculatedInput, index)
121
+ : placeholder;
122
+ return (
123
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
124
+ React.createElement("div", __assign({ key: index }, processedContainerProps, { className: cnInputOTP('InputContainer', [
125
+ processedContainerProps === null || processedContainerProps === void 0 ? void 0 : processedContainerProps.className,
126
+ ]), onClick: function () {
127
+ if (isInputDisabled) {
128
+ focusFirstNonFilledInput();
129
+ }
130
+ } }),
131
+ React.createElement(FieldControl, __assign({ size: size, disabled: disabled, error: error, disableStroke: disableStroke }, processedFieldProps, { className: cnInputOTP('Field', {
132
+ notAvailable: isInputDisabled,
133
+ }, [processedFieldProps === null || processedFieldProps === void 0 ? void 0 : processedFieldProps.className]) }),
134
+ React.createElement(FieldInput, __assign({ inputMode: (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.inputMode) !== null && _a !== void 0 ? _a : 'numeric', type: (_b = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.type) !== null && _b !== void 0 ? _b : 'text', value: value, autoComplete: processedAutocomplete, "aria-label": ariaLabel && "".concat(ariaLabel, ": ").concat(index + 1, "."), placeholder: processedPlaceholder, disabled: isInputDisabled }, processedInputProps, { onMouseDown: function (event) {
135
+ var _a;
136
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onMouseDown) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
137
+ onInputSelect(index);
138
+ }, onTouchStart: function (event) {
139
+ var _a;
140
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onTouchStart) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
141
+ onInputSelect(index);
142
+ }, onPointerDown: function (event) {
143
+ var _a;
144
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onPointerDown) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
145
+ onInputSelect(index);
146
+ }, onChange: function (event) {
147
+ var _a;
148
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onChange) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
149
+ onInputChange(event, index);
150
+ }, onKeyDown: function (event) {
151
+ var _a;
152
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
153
+ onKeyDown(event, index);
154
+ }, onPaste: function (event) {
155
+ var _a;
156
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onPaste) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
157
+ onPaste(event, index);
158
+ }, onFocus: function (event) {
159
+ var _a;
160
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onFocus) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
161
+ setFocusedInputIndex(index);
162
+ }, onBlur: function (event) {
163
+ var _a;
164
+ (_a = processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(processedInputProps, event);
165
+ setFocusedInputIndex(null);
166
+ }, className: cnInputOTP('Input', [
167
+ processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.className,
168
+ ]), ref: function (instance) {
169
+ if (instance) {
170
+ inputs.current[index] = instance;
171
+ }
172
+ setRef(processedInputProps === null || processedInputProps === void 0 ? void 0 : processedInputProps.ref, instance);
173
+ } })),
174
+ React.createElement(Fieldset, null))));
175
+ })));
176
+ });
@@ -0,0 +1,8 @@
1
+ import type { StackGapVariant } from '../Stack';
2
+ import type { InputOTPAutoCompleteMode, InputOTPSizeVariant } from './types';
3
+ export declare const INPUT_OTP_DEFAULT_TAG = "div";
4
+ export declare const INPUT_OTP_DEFAULT_AUTO_COMPLETE_MODE: InputOTPAutoCompleteMode;
5
+ export declare const INPUT_OTP_DEFAULT_DISABLE_STROKE: boolean;
6
+ export declare const INPUT_OTP_DEFAULT_SIZE: InputOTPSizeVariant;
7
+ export declare const INPUT_OTP_SPACING_BY_SIZE: Readonly<Record<InputOTPSizeVariant, StackGapVariant>>;
8
+ export declare const INPUT_OTP_DEFAULT_FINISH_BEHAVIOR: ({ isFullFilled }: import("./types").InputOTPFinishBehaviorContext) => boolean;
@@ -0,0 +1,10 @@
1
+ import { INPUT_OTP_FINISH_BEHAVIOR_PRESET } from './presets';
2
+ export var INPUT_OTP_DEFAULT_TAG = 'div';
3
+ export var INPUT_OTP_DEFAULT_AUTO_COMPLETE_MODE = 'firstOnly';
4
+ export var INPUT_OTP_DEFAULT_DISABLE_STROKE = false;
5
+ export var INPUT_OTP_DEFAULT_SIZE = 's';
6
+ export var INPUT_OTP_SPACING_BY_SIZE = {
7
+ s: 's',
8
+ m: 's',
9
+ };
10
+ export var INPUT_OTP_DEFAULT_FINISH_BEHAVIOR = INPUT_OTP_FINISH_BEHAVIOR_PRESET.FULL_FILLED_NON_LAST_INPUT;
@@ -0,0 +1,13 @@
1
+ import type { InputOTPMask, InputOTPRawValue, InputOTPCalculatedInput } from './types';
2
+ export declare const maskSymbol: (mask: InputOTPMask | undefined, value: string, index: number) => string;
3
+ export declare const maskValue: (mask: InputOTPMask | undefined, value: InputOTPRawValue | undefined) => string[];
4
+ export declare const calculateInput: ({ valueByIndex, index, mask, length, disabled: isDisabledGlobal, focusedInputIndex, }: {
5
+ valueByIndex: string[] | undefined;
6
+ index: number;
7
+ mask: InputOTPMask | undefined;
8
+ length: number;
9
+ disabled: boolean | undefined;
10
+ focusedInputIndex: number | null;
11
+ }) => InputOTPCalculatedInput;
12
+ export declare const valueToString: (value: InputOTPRawValue | undefined) => string;
13
+ export declare const valueToArray: (value: string) => string[];
@@ -0,0 +1,79 @@
1
+ import { isFunction } from '../../utils/isFunction';
2
+ import { isNumber } from '../../utils/isNumber';
3
+ import { isString } from '../../utils/isString';
4
+ export var maskSymbol = function (mask, value, index) {
5
+ if (value === '') {
6
+ return '';
7
+ }
8
+ if (isString(mask)) {
9
+ return mask;
10
+ }
11
+ if (isFunction(mask)) {
12
+ return mask(value, index);
13
+ }
14
+ return value;
15
+ };
16
+ export var maskValue = function (mask, value) { var _a; return (_a = value === null || value === void 0 ? void 0 : value.map(function (value, index) { return maskSymbol(mask, value, index); })) !== null && _a !== void 0 ? _a : []; };
17
+ export var calculateInput = function (_a) {
18
+ var _b;
19
+ var valueByIndex = _a.valueByIndex, index = _a.index, mask = _a.mask, length = _a.length, isDisabledGlobal = _a.disabled, focusedInputIndex = _a.focusedInputIndex;
20
+ var requiredValueByIndex = valueByIndex !== null && valueByIndex !== void 0 ? valueByIndex : [];
21
+ var value = (_b = requiredValueByIndex[index]) !== null && _b !== void 0 ? _b : '';
22
+ var maskedValue = maskSymbol(mask, value, index);
23
+ var lastFilledInputIndex = requiredValueByIndex.findLastIndex(function (value) { return value !== '' && value !== undefined; });
24
+ var isBackward = index <= lastFilledInputIndex;
25
+ var isPrevious = index === lastFilledInputIndex;
26
+ var isNext = index === lastFilledInputIndex + 2;
27
+ var isCurrentInput = index === lastFilledInputIndex + 1;
28
+ var isLast = index === length - 1;
29
+ var isPreviousByFocusedInput = isNumber(focusedInputIndex) && index < focusedInputIndex;
30
+ var isFocusedInput = index === focusedInputIndex;
31
+ var isDisabled = (function () {
32
+ if (isDisabledGlobal) {
33
+ return true;
34
+ }
35
+ if (isFocusedInput) {
36
+ return false;
37
+ }
38
+ if (isPreviousByFocusedInput) {
39
+ return false;
40
+ }
41
+ if (isBackward) {
42
+ return false;
43
+ }
44
+ if (value !== '') {
45
+ return false;
46
+ }
47
+ return !isCurrentInput;
48
+ })();
49
+ return {
50
+ value: maskedValue,
51
+ rawValue: value,
52
+ isPrevious: isPrevious,
53
+ isNext: isNext,
54
+ isCurrentInput: isCurrentInput,
55
+ isLast: isLast,
56
+ isDisabled: isDisabled,
57
+ };
58
+ };
59
+ export var valueToString = function (value) {
60
+ if (!value) {
61
+ return '';
62
+ }
63
+ return value
64
+ .map(function (value) {
65
+ if (value === '') {
66
+ return ' ';
67
+ }
68
+ return value;
69
+ })
70
+ .join('');
71
+ };
72
+ export var valueToArray = function (value) {
73
+ return value.split('').map(function (value) {
74
+ if (value === ' ') {
75
+ return '';
76
+ }
77
+ return value;
78
+ });
79
+ };
@@ -0,0 +1 @@
1
+ export * from './useInputOTPEvents';
@@ -0,0 +1 @@
1
+ export * from './useInputOTPEvents';
@@ -0,0 +1,20 @@
1
+ import type { ChangeEvent, ClipboardEvent, ClipboardEventHandler, KeyboardEvent, KeyboardEventHandler } from 'react';
2
+ import type { StoredValue } from '../../../hooks/useStoredValue';
3
+ import type { InputOTPRawValue, InputOTPInputs, InputOTPOnFinish, InputOTPValidate, InputOTPMask, InputOTPFinishBehavior } from '../types';
4
+ export declare const useInputOTPEvents: ({ inputs, valueByIndex, setValueByIndex, validate: validateFromProps, length, onPaste: onPasteFromProps, onKeyDown: onKeyDownFromProps, onFinish, mask, finishBehavior, }: {
5
+ inputs: StoredValue<InputOTPInputs>;
6
+ valueByIndex: InputOTPRawValue | undefined;
7
+ setValueByIndex: (valueByIndex: InputOTPRawValue) => void;
8
+ validate: InputOTPValidate | undefined;
9
+ length: number;
10
+ onKeyDown: KeyboardEventHandler<HTMLElement> | undefined;
11
+ onPaste: ClipboardEventHandler<HTMLElement> | undefined;
12
+ onFinish: InputOTPOnFinish | undefined;
13
+ mask: InputOTPMask | undefined;
14
+ finishBehavior: InputOTPFinishBehavior;
15
+ }) => {
16
+ onInputChange: (event: ChangeEvent<HTMLInputElement>, index: number) => void;
17
+ onKeyDown: (event: KeyboardEvent<HTMLInputElement>, index: number) => void;
18
+ onPaste: (event: ClipboardEvent<HTMLInputElement>, inputIndex: number) => void;
19
+ onInputSelect: (index: number) => void;
20
+ };
@@ -0,0 +1,179 @@
1
+ import { __read, __spreadArray } from "tslib";
2
+ import { isFunction } from '../../../utils/isFunction';
3
+ import { isKey } from '../../../utils/isKey';
4
+ import { isKeys } from '../../../utils/isKeys';
5
+ import { isNumber } from '../../../utils/isNumber';
6
+ import { maskSymbol, maskValue, valueToString } from '../helper';
7
+ export var useInputOTPEvents = function (_a) {
8
+ var inputs = _a.inputs, valueByIndex = _a.valueByIndex, setValueByIndex = _a.setValueByIndex, validateFromProps = _a.validate, length = _a.length, onPasteFromProps = _a.onPaste, onKeyDownFromProps = _a.onKeyDown, onFinish = _a.onFinish, mask = _a.mask, finishBehavior = _a.finishBehavior;
9
+ var validate = function (value) {
10
+ if (isFunction(validateFromProps)) {
11
+ return validateFromProps(value);
12
+ }
13
+ return true;
14
+ };
15
+ var tryToFinish = function (valueByIndex, index, options) {
16
+ var _a;
17
+ var _b = (options !== null && options !== void 0 ? options : {}).isEnter, isEnter = _b === void 0 ? false : _b;
18
+ var requiredValueByIndex = valueByIndex !== null && valueByIndex !== void 0 ? valueByIndex : [];
19
+ var stringValue = valueToString(requiredValueByIndex);
20
+ var isFullFilledValue = requiredValueByIndex.filter(function (value) { return value !== ''; }).length === length;
21
+ var isChangeOnLastInput = index + 1 === length;
22
+ var maskedRawValue = maskValue(mask, valueByIndex);
23
+ var finishContext = {
24
+ isChangeOnLastInput: isChangeOnLastInput,
25
+ inputIndex: index,
26
+ value: valueToString(valueByIndex),
27
+ rawValue: valueByIndex !== null && valueByIndex !== void 0 ? valueByIndex : [],
28
+ maskedValue: valueToString(maskedRawValue),
29
+ maskedRawValue: maskedRawValue,
30
+ isFullFilled: isFullFilledValue,
31
+ isEnter: isEnter,
32
+ };
33
+ var isFinish = finishBehavior(finishContext);
34
+ if (isFinish) {
35
+ var activeElement = document.activeElement;
36
+ if (activeElement instanceof HTMLElement) {
37
+ activeElement.blur();
38
+ }
39
+ if (onFinish) {
40
+ var maskedValueByIndex = (_a = valueByIndex === null || valueByIndex === void 0 ? void 0 : valueByIndex.map(function (value, index) { return maskSymbol(mask, value, index); })) !== null && _a !== void 0 ? _a : [];
41
+ onFinish(stringValue, valueByIndex !== null && valueByIndex !== void 0 ? valueByIndex : [], valueToString(maskedValueByIndex), maskedValueByIndex);
42
+ }
43
+ }
44
+ };
45
+ var onInputChange = function (event, index) {
46
+ event.preventDefault();
47
+ var target = event.target;
48
+ var value = (function () {
49
+ var _a;
50
+ var previousValue = (_a = valueByIndex === null || valueByIndex === void 0 ? void 0 : valueByIndex[index]) !== null && _a !== void 0 ? _a : '';
51
+ var previousMaskedValue = maskSymbol(mask, previousValue, index);
52
+ var rawValue = target.value;
53
+ var changedValuePart = rawValue.replace(previousMaskedValue, '');
54
+ if (changedValuePart.length > 1) {
55
+ return changedValuePart.slice(0, 1);
56
+ }
57
+ return changedValuePart;
58
+ })();
59
+ var isValidValue = validate(value);
60
+ var newValueByIndex = valueByIndex ? __spreadArray([], __read(valueByIndex), false) : [];
61
+ if (isValidValue) {
62
+ newValueByIndex[index] = value;
63
+ var isLastInput = index === length - 1;
64
+ var firstEmptyInputIndex = newValueByIndex.findIndex(function (value) { return !value; });
65
+ if (isLastInput && firstEmptyInputIndex !== -1) {
66
+ var firstEmptyInput = inputs.current[firstEmptyInputIndex];
67
+ if (firstEmptyInput) {
68
+ firstEmptyInput.focus();
69
+ }
70
+ }
71
+ else {
72
+ var nextInput = inputs.current[index + 1];
73
+ if (nextInput) {
74
+ nextInput.disabled = false;
75
+ nextInput.focus();
76
+ }
77
+ }
78
+ setValueByIndex(newValueByIndex);
79
+ }
80
+ tryToFinish(newValueByIndex, index);
81
+ };
82
+ var onKeyDown = function (event, index) {
83
+ if (onKeyDownFromProps) {
84
+ onKeyDownFromProps(event);
85
+ }
86
+ var target = event.target;
87
+ if (isKey(event, 'Backspace')) {
88
+ var newValueByIndex = valueByIndex ? __spreadArray([], __read(valueByIndex), false) : [];
89
+ if (target.value === '') {
90
+ var previousInput = inputs.current[index - 1];
91
+ var previousInputIndex = index - 1;
92
+ if (previousInput) {
93
+ newValueByIndex[previousInputIndex] = '';
94
+ previousInput.focus();
95
+ event.preventDefault();
96
+ }
97
+ }
98
+ else {
99
+ newValueByIndex[index] = '';
100
+ }
101
+ setValueByIndex(newValueByIndex);
102
+ }
103
+ else if (isKeys(event, ['ArrowLeft', 'ArrowDown'])) {
104
+ event.preventDefault();
105
+ var previousInput = inputs.current[index - 1];
106
+ if (previousInput) {
107
+ previousInput.focus();
108
+ }
109
+ }
110
+ else if (isKeys(event, ['ArrowRight', 'ArrowUp'])) {
111
+ event.preventDefault();
112
+ var nextInput = inputs.current[index + 1];
113
+ if (nextInput) {
114
+ nextInput.focus();
115
+ }
116
+ }
117
+ else if (isKey(event, 'Enter')) {
118
+ tryToFinish(valueByIndex, index, {
119
+ isEnter: true,
120
+ });
121
+ }
122
+ };
123
+ var onPaste = function (event, inputIndex) {
124
+ event.preventDefault();
125
+ if (onPasteFromProps) {
126
+ onPasteFromProps(event);
127
+ }
128
+ var currentInputs = inputs.current;
129
+ var pastedValue = event.clipboardData.getData('Text');
130
+ var newValueByIndex = valueByIndex ? __spreadArray([], __read(valueByIndex), false) : [];
131
+ var lastChangedInputIndex = {
132
+ current: null,
133
+ };
134
+ var focusedInputIndex = {
135
+ current: null,
136
+ };
137
+ __spreadArray([], __read(pastedValue), false).forEach(function (symbol, symbolIndex) {
138
+ var currentInputIndex = symbolIndex + inputIndex;
139
+ var isIndexExistInArray = currentInputIndex >= 0 && currentInputIndex < currentInputs.length;
140
+ if (isIndexExistInArray && validate(symbol)) {
141
+ lastChangedInputIndex.current = currentInputIndex;
142
+ newValueByIndex[currentInputIndex] = symbol;
143
+ var nextInput = currentInputs[currentInputIndex + 1];
144
+ if (nextInput) {
145
+ focusedInputIndex.current = currentInputIndex + 1;
146
+ }
147
+ }
148
+ });
149
+ if (isNumber(focusedInputIndex.current)) {
150
+ var input = currentInputs[focusedInputIndex.current];
151
+ if (input) {
152
+ input.disabled = false;
153
+ input.focus();
154
+ }
155
+ }
156
+ setValueByIndex(newValueByIndex);
157
+ if (lastChangedInputIndex.current !== null) {
158
+ tryToFinish(newValueByIndex, lastChangedInputIndex.current);
159
+ }
160
+ };
161
+ var onInputSelect = function (index) {
162
+ setTimeout(function () {
163
+ var currentInput = inputs.current[index];
164
+ if (!currentInput) {
165
+ return;
166
+ }
167
+ var originalType = currentInput.type;
168
+ currentInput.type = 'text';
169
+ currentInput.setSelectionRange(1, 1);
170
+ currentInput.type = originalType;
171
+ });
172
+ };
173
+ return {
174
+ onInputChange: onInputChange,
175
+ onKeyDown: onKeyDown,
176
+ onPaste: onPaste,
177
+ onInputSelect: onInputSelect,
178
+ };
179
+ };
@@ -0,0 +1,3 @@
1
+ export * from './presets';
2
+ export * from './InputOTP';
3
+ export * from './types';
@@ -0,0 +1,3 @@
1
+ export * from './presets';
2
+ export * from './InputOTP';
3
+ export * from './types';
@@ -0,0 +1,12 @@
1
+ export declare const INPUT_OTP_VALIDATE_PRESET: {
2
+ TEXT: (value: string) => boolean;
3
+ NUMERIC: (value: string) => boolean;
4
+ TEXT_NUMERIC: (value: string) => boolean;
5
+ };
6
+ export declare const INPUT_OTP_MASK_PRESET: {
7
+ PASSWORD: string;
8
+ };
9
+ export declare const INPUT_OTP_FINISH_BEHAVIOR_PRESET: {
10
+ FULL_FILLED_NON_LAST_INPUT: ({ isFullFilled }: import("./types").InputOTPFinishBehaviorContext) => boolean;
11
+ FULL_FILLED_ON_LAST_INPUT: ({ isFullFilled, isChangeOnLastInput, isEnter, }: import("./types").InputOTPFinishBehaviorContext) => boolean;
12
+ };