@cloud-ru/uikit-product-fields-predefined 0.13.3 → 0.13.5

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 (224) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/cjs/components/AIDisclaimer/AIDisclaimer.d.ts +4 -0
  3. package/dist/cjs/components/AIDisclaimer/AIDisclaimer.js +13 -0
  4. package/dist/cjs/components/AIDisclaimer/index.d.ts +1 -0
  5. package/dist/cjs/components/AIDisclaimer/index.js +17 -0
  6. package/dist/cjs/components/AIDisclaimer/styles.module.css +21 -0
  7. package/dist/cjs/components/FieldAi/FieldAi.d.ts +20 -0
  8. package/dist/cjs/components/FieldAi/FieldAi.js +66 -0
  9. package/dist/cjs/components/FieldAi/components/CheckItem/CheckItem.d.ts +8 -0
  10. package/dist/cjs/components/FieldAi/components/CheckItem/CheckItem.js +28 -0
  11. package/dist/cjs/components/FieldAi/components/CheckItem/index.d.ts +1 -0
  12. package/dist/cjs/components/FieldAi/components/CheckItem/index.js +17 -0
  13. package/dist/cjs/components/FieldAi/components/CheckItem/styles.module.css +22 -0
  14. package/dist/cjs/components/FieldAi/components/MobileFieldAi/MobileFieldAi.d.ts +5 -0
  15. package/dist/cjs/components/FieldAi/components/MobileFieldAi/MobileFieldAi.js +31 -0
  16. package/dist/cjs/components/FieldAi/components/MobileFieldAi/index.d.ts +1 -0
  17. package/dist/cjs/components/FieldAi/components/MobileFieldAi/index.js +17 -0
  18. package/dist/cjs/components/FieldAi/components/MobileFieldAi/styles.module.css +87 -0
  19. package/dist/cjs/components/FieldAi/components/PasswordValidation/PasswordValidation.d.ts +6 -0
  20. package/dist/cjs/components/FieldAi/components/PasswordValidation/PasswordValidation.js +23 -0
  21. package/dist/cjs/components/FieldAi/components/PasswordValidation/index.d.ts +1 -0
  22. package/dist/cjs/components/FieldAi/components/PasswordValidation/index.js +17 -0
  23. package/dist/cjs/components/FieldAi/components/PasswordValidation/styles.module.css +35 -0
  24. package/dist/cjs/components/FieldAi/components/TextArea/TextArea.d.ts +39 -0
  25. package/dist/cjs/components/FieldAi/components/TextArea/TextArea.js +33 -0
  26. package/dist/cjs/components/FieldAi/components/TextArea/index.d.ts +1 -0
  27. package/dist/cjs/components/FieldAi/components/TextArea/index.js +17 -0
  28. package/dist/cjs/components/FieldAi/components/TextArea/styles.module.css +32 -0
  29. package/dist/cjs/components/FieldAi/components/WithPasswordValidation/WithPasswordValidation.d.ts +9 -0
  30. package/dist/cjs/components/FieldAi/components/WithPasswordValidation/WithPasswordValidation.js +23 -0
  31. package/dist/cjs/components/FieldAi/components/WithPasswordValidation/index.d.ts +1 -0
  32. package/dist/cjs/components/FieldAi/components/WithPasswordValidation/index.js +17 -0
  33. package/dist/cjs/components/FieldAi/components/WithPasswordValidation/styles.module.css +5 -0
  34. package/dist/cjs/components/FieldAi/index.d.ts +1 -0
  35. package/dist/cjs/components/FieldAi/index.js +17 -0
  36. package/dist/cjs/components/FieldAi/styles.module.css +25 -0
  37. package/dist/cjs/components/FieldAi/utils.d.ts +9 -0
  38. package/dist/cjs/components/FieldAi/utils.js +19 -0
  39. package/dist/cjs/components/FieldChat/FieldChat.d.ts +15 -0
  40. package/dist/cjs/components/FieldChat/FieldChat.js +55 -0
  41. package/dist/cjs/components/FieldChat/components/Attachments/Attachments.d.ts +6 -0
  42. package/dist/cjs/components/FieldChat/components/Attachments/Attachments.js +20 -0
  43. package/dist/cjs/components/FieldChat/components/Attachments/index.d.ts +1 -0
  44. package/dist/cjs/components/FieldChat/components/Attachments/index.js +17 -0
  45. package/dist/cjs/components/FieldChat/components/Attachments/styles.module.css +9 -0
  46. package/dist/cjs/components/FieldChat/index.d.ts +1 -0
  47. package/dist/cjs/components/FieldChat/index.js +17 -0
  48. package/dist/cjs/components/FieldChat/styles.module.css +12 -0
  49. package/dist/cjs/components/FieldPhone/FieldPhone.d.ts +25 -0
  50. package/dist/cjs/components/FieldPhone/FieldPhone.js +131 -0
  51. package/dist/cjs/components/FieldPhone/__tests__/constants.d.ts +5 -0
  52. package/dist/cjs/components/FieldPhone/__tests__/constants.js +29 -0
  53. package/dist/cjs/components/FieldPhone/__tests__/formatPhoneNumber.spec.d.ts +1 -0
  54. package/dist/cjs/components/FieldPhone/__tests__/formatPhoneNumber.spec.js +14 -0
  55. package/dist/cjs/components/FieldPhone/__tests__/matchMedia.d.ts +1 -0
  56. package/dist/cjs/components/FieldPhone/__tests__/matchMedia.js +16 -0
  57. package/dist/cjs/components/FieldPhone/constants.d.ts +1 -0
  58. package/dist/cjs/components/FieldPhone/constants.js +4 -0
  59. package/dist/cjs/components/FieldPhone/countries.d.ts +3500 -0
  60. package/dist/cjs/components/FieldPhone/countries.js +1442 -0
  61. package/dist/cjs/components/FieldPhone/hooks/index.d.ts +2 -0
  62. package/dist/cjs/components/FieldPhone/hooks/index.js +18 -0
  63. package/dist/cjs/components/FieldPhone/hooks/useCountries.d.ts +2 -0
  64. package/dist/cjs/components/FieldPhone/hooks/useCountries.js +36 -0
  65. package/dist/cjs/components/FieldPhone/hooks/useMapCountryToOptions.d.ts +2 -0
  66. package/dist/cjs/components/FieldPhone/hooks/useMapCountryToOptions.js +19 -0
  67. package/dist/cjs/components/FieldPhone/index.d.ts +5 -0
  68. package/dist/cjs/components/FieldPhone/index.js +23 -0
  69. package/dist/cjs/components/FieldPhone/styles.module.css +3 -0
  70. package/dist/cjs/components/FieldPhone/types.d.ts +31 -0
  71. package/dist/cjs/components/FieldPhone/types.js +2 -0
  72. package/dist/cjs/components/FieldPhone/utils.d.ts +7 -0
  73. package/dist/cjs/components/FieldPhone/utils.js +57 -0
  74. package/dist/cjs/components/SelectCreate/SelectCreate.d.ts +21 -0
  75. package/dist/cjs/components/SelectCreate/SelectCreate.js +66 -0
  76. package/dist/cjs/components/SelectCreate/SelectFooter/SelectFooter.d.ts +7 -0
  77. package/dist/cjs/components/SelectCreate/SelectFooter/SelectFooter.js +16 -0
  78. package/dist/cjs/components/SelectCreate/SelectFooter/index.d.ts +1 -0
  79. package/dist/cjs/components/SelectCreate/SelectFooter/index.js +17 -0
  80. package/dist/cjs/components/SelectCreate/SelectFooter/styles.module.css +6 -0
  81. package/dist/cjs/components/SelectCreate/index.d.ts +1 -0
  82. package/dist/cjs/components/SelectCreate/index.js +17 -0
  83. package/dist/cjs/components/SelectCreate/types.d.ts +28 -0
  84. package/dist/cjs/components/SelectCreate/types.js +2 -0
  85. package/dist/cjs/components/SelectCreate/useSelectDataStates.d.ts +10 -0
  86. package/dist/cjs/components/SelectCreate/useSelectDataStates.js +26 -0
  87. package/dist/cjs/components/index.d.ts +5 -0
  88. package/dist/cjs/components/index.js +21 -0
  89. package/dist/cjs/helperComponents/FieldSubmitButton/FieldSubmitButton.d.ts +9 -0
  90. package/dist/cjs/helperComponents/FieldSubmitButton/FieldSubmitButton.js +15 -0
  91. package/dist/cjs/helperComponents/FieldSubmitButton/index.d.ts +1 -0
  92. package/dist/cjs/helperComponents/FieldSubmitButton/index.js +17 -0
  93. package/dist/cjs/helperComponents/TextAreaActionsFooter/TextAreaActionsFooter.d.ts +7 -0
  94. package/dist/cjs/helperComponents/TextAreaActionsFooter/TextAreaActionsFooter.js +12 -0
  95. package/dist/cjs/helperComponents/TextAreaActionsFooter/index.d.ts +1 -0
  96. package/dist/cjs/helperComponents/TextAreaActionsFooter/index.js +17 -0
  97. package/dist/cjs/helperComponents/TextAreaActionsFooter/styles.module.css +21 -0
  98. package/dist/cjs/helpers/capitalize.d.ts +1 -0
  99. package/dist/cjs/helpers/capitalize.js +6 -0
  100. package/dist/cjs/helpers/getSymbolsRangeFromMask.d.ts +8 -0
  101. package/dist/cjs/helpers/getSymbolsRangeFromMask.js +17 -0
  102. package/dist/cjs/helpers/index.d.ts +3 -0
  103. package/dist/cjs/helpers/index.js +19 -0
  104. package/dist/cjs/helpers/isTouchDevice.d.ts +2 -0
  105. package/dist/cjs/helpers/isTouchDevice.js +6 -0
  106. package/dist/cjs/hooks/index.d.ts +1 -0
  107. package/dist/cjs/hooks/index.js +17 -0
  108. package/dist/cjs/hooks/useOpen.d.ts +5 -0
  109. package/dist/cjs/hooks/useOpen.js +18 -0
  110. package/dist/cjs/index.d.ts +3 -0
  111. package/dist/cjs/index.js +22 -0
  112. package/dist/esm/components/AIDisclaimer/AIDisclaimer.d.ts +4 -0
  113. package/dist/esm/components/AIDisclaimer/AIDisclaimer.js +7 -0
  114. package/dist/esm/components/AIDisclaimer/index.d.ts +1 -0
  115. package/dist/esm/components/AIDisclaimer/index.js +1 -0
  116. package/dist/esm/components/AIDisclaimer/styles.module.css +21 -0
  117. package/dist/esm/components/FieldAi/FieldAi.d.ts +20 -0
  118. package/dist/esm/components/FieldAi/FieldAi.js +60 -0
  119. package/dist/esm/components/FieldAi/components/CheckItem/CheckItem.d.ts +8 -0
  120. package/dist/esm/components/FieldAi/components/CheckItem/CheckItem.js +22 -0
  121. package/dist/esm/components/FieldAi/components/CheckItem/index.d.ts +1 -0
  122. package/dist/esm/components/FieldAi/components/CheckItem/index.js +1 -0
  123. package/dist/esm/components/FieldAi/components/CheckItem/styles.module.css +22 -0
  124. package/dist/esm/components/FieldAi/components/MobileFieldAi/MobileFieldAi.d.ts +5 -0
  125. package/dist/esm/components/FieldAi/components/MobileFieldAi/MobileFieldAi.js +25 -0
  126. package/dist/esm/components/FieldAi/components/MobileFieldAi/index.d.ts +1 -0
  127. package/dist/esm/components/FieldAi/components/MobileFieldAi/index.js +1 -0
  128. package/dist/esm/components/FieldAi/components/MobileFieldAi/styles.module.css +87 -0
  129. package/dist/esm/components/FieldAi/components/PasswordValidation/PasswordValidation.d.ts +6 -0
  130. package/dist/esm/components/FieldAi/components/PasswordValidation/PasswordValidation.js +17 -0
  131. package/dist/esm/components/FieldAi/components/PasswordValidation/index.d.ts +1 -0
  132. package/dist/esm/components/FieldAi/components/PasswordValidation/index.js +1 -0
  133. package/dist/esm/components/FieldAi/components/PasswordValidation/styles.module.css +35 -0
  134. package/dist/esm/components/FieldAi/components/TextArea/TextArea.d.ts +39 -0
  135. package/dist/esm/components/FieldAi/components/TextArea/TextArea.js +27 -0
  136. package/dist/esm/components/FieldAi/components/TextArea/index.d.ts +1 -0
  137. package/dist/esm/components/FieldAi/components/TextArea/index.js +1 -0
  138. package/dist/esm/components/FieldAi/components/TextArea/styles.module.css +32 -0
  139. package/dist/esm/components/FieldAi/components/WithPasswordValidation/WithPasswordValidation.d.ts +9 -0
  140. package/dist/esm/components/FieldAi/components/WithPasswordValidation/WithPasswordValidation.js +17 -0
  141. package/dist/esm/components/FieldAi/components/WithPasswordValidation/index.d.ts +1 -0
  142. package/dist/esm/components/FieldAi/components/WithPasswordValidation/index.js +1 -0
  143. package/dist/esm/components/FieldAi/components/WithPasswordValidation/styles.module.css +5 -0
  144. package/dist/esm/components/FieldAi/index.d.ts +1 -0
  145. package/dist/esm/components/FieldAi/index.js +1 -0
  146. package/dist/esm/components/FieldAi/styles.module.css +25 -0
  147. package/dist/esm/components/FieldAi/utils.d.ts +9 -0
  148. package/dist/esm/components/FieldAi/utils.js +15 -0
  149. package/dist/esm/components/FieldChat/FieldChat.d.ts +15 -0
  150. package/dist/esm/components/FieldChat/FieldChat.js +49 -0
  151. package/dist/esm/components/FieldChat/components/Attachments/Attachments.d.ts +6 -0
  152. package/dist/esm/components/FieldChat/components/Attachments/Attachments.js +14 -0
  153. package/dist/esm/components/FieldChat/components/Attachments/index.d.ts +1 -0
  154. package/dist/esm/components/FieldChat/components/Attachments/index.js +1 -0
  155. package/dist/esm/components/FieldChat/components/Attachments/styles.module.css +9 -0
  156. package/dist/esm/components/FieldChat/index.d.ts +1 -0
  157. package/dist/esm/components/FieldChat/index.js +1 -0
  158. package/dist/esm/components/FieldChat/styles.module.css +12 -0
  159. package/dist/esm/components/FieldPhone/FieldPhone.d.ts +25 -0
  160. package/dist/esm/components/FieldPhone/FieldPhone.js +125 -0
  161. package/dist/esm/components/FieldPhone/__tests__/constants.d.ts +5 -0
  162. package/dist/esm/components/FieldPhone/__tests__/constants.js +26 -0
  163. package/dist/esm/components/FieldPhone/__tests__/formatPhoneNumber.spec.d.ts +1 -0
  164. package/dist/esm/components/FieldPhone/__tests__/formatPhoneNumber.spec.js +12 -0
  165. package/dist/esm/components/FieldPhone/__tests__/matchMedia.d.ts +1 -0
  166. package/dist/esm/components/FieldPhone/__tests__/matchMedia.js +14 -0
  167. package/dist/esm/components/FieldPhone/constants.d.ts +1 -0
  168. package/dist/esm/components/FieldPhone/constants.js +1 -0
  169. package/dist/esm/components/FieldPhone/countries.d.ts +3500 -0
  170. package/dist/esm/components/FieldPhone/countries.js +1436 -0
  171. package/dist/esm/components/FieldPhone/hooks/index.d.ts +2 -0
  172. package/dist/esm/components/FieldPhone/hooks/index.js +2 -0
  173. package/dist/esm/components/FieldPhone/hooks/useCountries.d.ts +2 -0
  174. package/dist/esm/components/FieldPhone/hooks/useCountries.js +33 -0
  175. package/dist/esm/components/FieldPhone/hooks/useMapCountryToOptions.d.ts +2 -0
  176. package/dist/esm/components/FieldPhone/hooks/useMapCountryToOptions.js +16 -0
  177. package/dist/esm/components/FieldPhone/index.d.ts +5 -0
  178. package/dist/esm/components/FieldPhone/index.js +4 -0
  179. package/dist/esm/components/FieldPhone/styles.module.css +3 -0
  180. package/dist/esm/components/FieldPhone/types.d.ts +31 -0
  181. package/dist/esm/components/FieldPhone/types.js +1 -0
  182. package/dist/esm/components/FieldPhone/utils.d.ts +7 -0
  183. package/dist/esm/components/FieldPhone/utils.js +51 -0
  184. package/dist/esm/components/SelectCreate/SelectCreate.d.ts +21 -0
  185. package/dist/esm/components/SelectCreate/SelectCreate.js +63 -0
  186. package/dist/esm/components/SelectCreate/SelectFooter/SelectFooter.d.ts +7 -0
  187. package/dist/esm/components/SelectCreate/SelectFooter/SelectFooter.js +10 -0
  188. package/dist/esm/components/SelectCreate/SelectFooter/index.d.ts +1 -0
  189. package/dist/esm/components/SelectCreate/SelectFooter/index.js +1 -0
  190. package/dist/esm/components/SelectCreate/SelectFooter/styles.module.css +6 -0
  191. package/dist/esm/components/SelectCreate/index.d.ts +1 -0
  192. package/dist/esm/components/SelectCreate/index.js +1 -0
  193. package/dist/esm/components/SelectCreate/types.d.ts +28 -0
  194. package/dist/esm/components/SelectCreate/types.js +1 -0
  195. package/dist/esm/components/SelectCreate/useSelectDataStates.d.ts +10 -0
  196. package/dist/esm/components/SelectCreate/useSelectDataStates.js +23 -0
  197. package/dist/esm/components/index.d.ts +5 -0
  198. package/dist/esm/components/index.js +5 -0
  199. package/dist/esm/helperComponents/FieldSubmitButton/FieldSubmitButton.d.ts +9 -0
  200. package/dist/esm/helperComponents/FieldSubmitButton/FieldSubmitButton.js +12 -0
  201. package/dist/esm/helperComponents/FieldSubmitButton/index.d.ts +1 -0
  202. package/dist/esm/helperComponents/FieldSubmitButton/index.js +1 -0
  203. package/dist/esm/helperComponents/TextAreaActionsFooter/TextAreaActionsFooter.d.ts +7 -0
  204. package/dist/esm/helperComponents/TextAreaActionsFooter/TextAreaActionsFooter.js +6 -0
  205. package/dist/esm/helperComponents/TextAreaActionsFooter/index.d.ts +1 -0
  206. package/dist/esm/helperComponents/TextAreaActionsFooter/index.js +1 -0
  207. package/dist/esm/helperComponents/TextAreaActionsFooter/styles.module.css +21 -0
  208. package/dist/esm/helpers/capitalize.d.ts +1 -0
  209. package/dist/esm/helpers/capitalize.js +3 -0
  210. package/dist/esm/helpers/getSymbolsRangeFromMask.d.ts +8 -0
  211. package/dist/esm/helpers/getSymbolsRangeFromMask.js +14 -0
  212. package/dist/esm/helpers/index.d.ts +3 -0
  213. package/dist/esm/helpers/index.js +3 -0
  214. package/dist/esm/helpers/isTouchDevice.d.ts +2 -0
  215. package/dist/esm/helpers/isTouchDevice.js +3 -0
  216. package/dist/esm/hooks/index.d.ts +1 -0
  217. package/dist/esm/hooks/index.js +1 -0
  218. package/dist/esm/hooks/useOpen.d.ts +5 -0
  219. package/dist/esm/hooks/useOpen.js +15 -0
  220. package/dist/esm/index.d.ts +3 -0
  221. package/dist/esm/index.js +3 -0
  222. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  223. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  224. package/package.json +9 -8
@@ -0,0 +1,2 @@
1
+ export * from './useCountries';
2
+ export * from './useMapCountryToOptions';
@@ -0,0 +1,2 @@
1
+ export * from './useCountries';
2
+ export * from './useMapCountryToOptions';
@@ -0,0 +1,2 @@
1
+ import { CountrySettings, FieldPhoneOptionsProps } from '../types';
2
+ export declare function useCountries(optionsSettings?: CountrySettings): FieldPhoneOptionsProps[];
@@ -0,0 +1,33 @@
1
+ import { useMemo } from 'react';
2
+ import { ALL_COUNTRY_CODES } from '../countries';
3
+ import { uniqueSet } from '../utils';
4
+ import { useMapCountryToOptions } from './useMapCountryToOptions';
5
+ export function useCountries(optionsSettings) {
6
+ const mapCountryToOption = useMapCountryToOptions();
7
+ const filterCountries = useMemo(() => {
8
+ if (!optionsSettings) {
9
+ return () => true;
10
+ }
11
+ const { includedCountries, excludedCountries } = optionsSettings;
12
+ const uniqueKey = 'value';
13
+ if (includedCountries) {
14
+ const includedSet = uniqueSet(includedCountries, uniqueKey);
15
+ return (country) => includedSet.has(country[uniqueKey]);
16
+ }
17
+ if (excludedCountries) {
18
+ const excludedSet = uniqueSet(excludedCountries, uniqueKey);
19
+ return (country) => !excludedSet.has(country[uniqueKey]);
20
+ }
21
+ return () => true;
22
+ }, [optionsSettings]);
23
+ return useMemo(() => {
24
+ if (optionsSettings === null || optionsSettings === void 0 ? void 0 : optionsSettings.overriddenOptions)
25
+ return optionsSettings.overriddenOptions;
26
+ return ALL_COUNTRY_CODES.reduce((result, country) => {
27
+ if (filterCountries(country)) {
28
+ result.push(mapCountryToOption(country));
29
+ }
30
+ return result;
31
+ }, []);
32
+ }, [optionsSettings, filterCountries, mapCountryToOption]);
33
+ }
@@ -0,0 +1,2 @@
1
+ import { Country, FieldPhoneOptionsProps } from '../types';
2
+ export declare function useMapCountryToOptions(): ({ value: id, mask, caption, beforeContent, iso2 }: Country) => FieldPhoneOptionsProps;
@@ -0,0 +1,16 @@
1
+ import { useCallback } from 'react';
2
+ import { useLocale } from '@sbercloud/uikit-product-locale';
3
+ export function useMapCountryToOptions() {
4
+ const { t } = useLocale('FieldsPredefined');
5
+ const mapCountryToOption = useCallback(({ value: id, mask, caption, beforeContent, iso2 }) => ({
6
+ id,
7
+ mask,
8
+ content: {
9
+ option: t(`FieldPhone.${id}`),
10
+ caption: caption,
11
+ },
12
+ beforeContent,
13
+ iso2,
14
+ }), [t]);
15
+ return mapCountryToOption;
16
+ }
@@ -0,0 +1,5 @@
1
+ export * from './FieldPhone';
2
+ export type { FieldPhoneOptionsProps, CountrySettings } from './types';
3
+ export * from './countries';
4
+ export * from './hooks';
5
+ export { formatPhoneNumber, detectCountryByPhone } from './utils';
@@ -0,0 +1,4 @@
1
+ export * from './FieldPhone';
2
+ export * from './countries';
3
+ export * from './hooks';
4
+ export { formatPhoneNumber, detectCountryByPhone } from './utils';
@@ -0,0 +1,3 @@
1
+ .fieldPhone[data-empty] input{
2
+ color:var(--sys-neutral-text-disabled, #aaaebd);
3
+ }
@@ -0,0 +1,31 @@
1
+ import { ReactNode } from 'react';
2
+ import { useIMask } from 'react-imask';
3
+ import { ALL_COUNTRY_CODES } from './countries';
4
+ export type FieldPhoneOptionsProps = {
5
+ id: string;
6
+ beforeContent: ReactNode;
7
+ content: {
8
+ option: string;
9
+ caption: string;
10
+ };
11
+ mask: string;
12
+ iso2: string;
13
+ };
14
+ export type MaskOptions = Parameters<typeof useIMask>[0];
15
+ export type Country = (typeof ALL_COUNTRY_CODES)[number];
16
+ type OneOf<T extends object> = {
17
+ [K in keyof T]: {
18
+ [P in K]: T[P];
19
+ } & {
20
+ [P in Exclude<keyof T, K>]?: never;
21
+ };
22
+ }[keyof T];
23
+ export type CountrySettings = OneOf<{
24
+ /** Список элементов выпадающего списка со странами, который будет передан в селект-компонент и переопределит список объявленных стран внутри пакета */
25
+ overriddenOptions: FieldPhoneOptionsProps[];
26
+ /** Список стран, которые должны отображаться в селекторе (будут выбраны из перечня стран, объявленных внутри пакета) */
27
+ includedCountries: Country[];
28
+ /** Список стран, которые будут исключены из списка объявленных стран внутри пакета */
29
+ excludedCountries: Country[];
30
+ }>;
31
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { FieldPhoneOptionsProps } from './types';
2
+ export declare const uniqueSet: <T, K extends keyof T>(arr: T[], key: K) => Set<T[K]>;
3
+ export declare const formatPhoneNumber: <T extends {
4
+ caption: string;
5
+ mask: string;
6
+ }>(phone: string, countries: readonly T[]) => string;
7
+ export declare function detectCountryByPhone(text: string, options: FieldPhoneOptionsProps[]): FieldPhoneOptionsProps | undefined;
@@ -0,0 +1,51 @@
1
+ import { parsePhoneNumber } from 'awesome-phonenumber';
2
+ import { ABKHAZIA_COUNTRY_CODE, RUSSIA_COUNTRY_CODE } from './countries';
3
+ export const uniqueSet = (arr, key) => new Set(arr.map(obj => obj[key]));
4
+ /* Приходит +79878887879/+7987****875, на основании mask возвращается +7 987-888-78-79/+7 987-***-*8-75 */
5
+ export const formatPhoneNumber = (phone, countries) => {
6
+ const digits = phone.replace(/[^\d*]/g, '');
7
+ const country = countries.find(item => digits.startsWith(item.caption.replace('+', '')));
8
+ if (!country) {
9
+ return phone;
10
+ }
11
+ const countryCode = country.caption.replace('+', '');
12
+ const restNumber = digits.slice(countryCode.length);
13
+ let formatted = '';
14
+ let index = 0;
15
+ for (const char of country.mask) {
16
+ if (char === 'X') {
17
+ formatted += restNumber.charAt(index) || '';
18
+ index++;
19
+ }
20
+ else {
21
+ formatted += char;
22
+ }
23
+ }
24
+ return `${country.caption} ${formatted}`;
25
+ };
26
+ const byId = (id) => (option) => option.id === id;
27
+ export function detectCountryByPhone(text, options) {
28
+ const cleaned = text.replace(/[^\d+]/g, '');
29
+ const withPlus = cleaned.startsWith('+') ? cleaned : `+${cleaned}`;
30
+ const parsedNumber = parsePhoneNumber(withPlus);
31
+ const regionCode = parsedNumber.regionCode;
32
+ /* У Абхазии iso2 совпадает с Россией */
33
+ if (/^\+?7(840|940)/.test(cleaned)) {
34
+ let russia;
35
+ for (const option of options) {
36
+ const id = option.id;
37
+ const iso = option.iso2;
38
+ if (id === ABKHAZIA_COUNTRY_CODE.value) {
39
+ return option;
40
+ }
41
+ if (!russia && (id === RUSSIA_COUNTRY_CODE.value || iso === RUSSIA_COUNTRY_CODE.iso2)) {
42
+ russia = option;
43
+ }
44
+ }
45
+ return russia;
46
+ }
47
+ if (regionCode === RUSSIA_COUNTRY_CODE.iso2) {
48
+ return options.find(byId(RUSSIA_COUNTRY_CODE.value));
49
+ }
50
+ return options.find(opt => opt.iso2 === regionCode);
51
+ }
@@ -0,0 +1,21 @@
1
+ import { WithLayoutType, WithSupportProps } from '@sbercloud/uikit-product-utils';
2
+ import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
3
+ import { EntityName, FieldSelectProps, LayoutProps } from './types';
4
+ export type SelectCreateProps = WithSupportProps<WithLayoutType & LayoutProps & {
5
+ /** Тип объекта для создания новой опции (в единственном числе вин.падеже для кнопки Создать <entityName> и множественном числе) */
6
+ entityName: EntityName;
7
+ /** Коллбек создания новой опции, при успешном выполнении возвращает value новой опции */
8
+ submitHandler: () => Promise<string | void>;
9
+ /** Пропсы прокидываемые в селект */
10
+ selectProps: FieldSelectProps;
11
+ /** Коллбек рефетча запроса на получение списка опций в случае ошибки (при передаче dataError в selectProps). */
12
+ onRefetch?: VoidFunction;
13
+ className?: string;
14
+ /** Коллбек после закрытия модального окна/дровера */
15
+ afterClose?: VoidFunction;
16
+ /** Иконка сервиса */
17
+ entityIcon?: IconPredefinedProps['icon'];
18
+ /** Управление состоянием компонента в зависимости от прав пользователя (по дефолту permission = 'canCreate') */
19
+ permission?: 'none' | 'canRead' | 'canCreate';
20
+ }>;
21
+ export declare const SelectCreate: import("react").NamedExoticComponent<SelectCreateProps>;
@@ -0,0 +1,63 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ import { memo, useCallback, useMemo } from 'react';
23
+ import { PlusSVG } from '@sbercloud/uikit-product-icons';
24
+ import { useLocale } from '@sbercloud/uikit-product-locale';
25
+ import { AdaptiveFieldSelect } from '@sbercloud/uikit-product-mobile-fields';
26
+ import { AdaptiveDrawer, AdaptiveModal } from '@sbercloud/uikit-product-mobile-modal';
27
+ import { extractSupportProps } from '@sbercloud/uikit-product-utils';
28
+ import { ButtonFunction } from '@snack-uikit/button';
29
+ import { WithTooltip } from '@snack-uikit/tooltip';
30
+ import { useOpen } from '../../hooks';
31
+ import { SelectFooter } from './SelectFooter';
32
+ import { useSelectDataStates } from './useSelectDataStates';
33
+ export const SelectCreate = memo(function SelectCreate(_a) {
34
+ var { selectProps, createLayoutProps, createLayoutType = 'drawer', entityName, submitHandler, onRefetch, className, afterClose, entityIcon, permission = 'canCreate', layoutType } = _a, rest = __rest(_a, ["selectProps", "createLayoutProps", "createLayoutType", "entityName", "submitHandler", "onRefetch", "className", "afterClose", "entityIcon", "permission", "layoutType"]);
35
+ const { t } = useLocale('FieldsPredefined');
36
+ const { onClose, onOpen, isOpen } = useOpen();
37
+ const selectDataStates = useSelectDataStates({ entityName, entityIcon, onRefetch });
38
+ const selectSize = selectProps.size || 'm';
39
+ const handleClose = useCallback(() => {
40
+ onClose();
41
+ afterClose === null || afterClose === void 0 ? void 0 : afterClose();
42
+ }, [afterClose, onClose]);
43
+ const handleCreate = useCallback(() => __awaiter(this, void 0, void 0, function* () {
44
+ var _a;
45
+ const newOption = yield submitHandler();
46
+ (_a = selectProps.onChange) === null || _a === void 0 ? void 0 : _a.call(selectProps, newOption);
47
+ handleClose();
48
+ }), [handleClose, selectProps, submitHandler]);
49
+ const buttons = useMemo(() => ({
50
+ approveButton: { label: t('SelectCreate.buttonCreate'), onClick: handleCreate },
51
+ cancelButton: { label: t('SelectCreate.buttonCancel'), onClick: onClose },
52
+ }), [t, handleCreate, onClose]);
53
+ const formLayout = useMemo(() => {
54
+ const layoutProps = Object.assign(Object.assign(Object.assign({}, createLayoutProps), buttons), { open: isOpen, onClose: handleClose, layoutType });
55
+ return createLayoutType === 'modal' ? (_jsx(AdaptiveModal, Object.assign({}, layoutProps))) : (_jsx(AdaptiveDrawer, Object.assign({}, layoutProps)));
56
+ }, [createLayoutProps, buttons, isOpen, handleClose, layoutType, createLayoutType]);
57
+ const createBtnLabel = `${t('SelectCreate.buttonCreate')} ${entityName.single.toLocaleLowerCase()}`;
58
+ const tooltipProps = {
59
+ tip: t('SelectCreate.noPermission'),
60
+ placement: 'top',
61
+ };
62
+ return (_jsxs("div", Object.assign({ className: className }, extractSupportProps(rest), { "data-test-id": 'select-create__wrapper', children: [_jsxs(WithTooltip, { tooltip: permission === 'none' ? tooltipProps : undefined, children: [_jsx(AdaptiveFieldSelect, Object.assign({ layoutType: layoutType, placeholder: t('SelectCreate.selectPlaceholder') }, selectDataStates, selectProps, { size: selectSize, footer: _jsx(SelectFooter, { onClick: onOpen, createButtonLabel: createBtnLabel, canCreate: permission === 'canCreate' }), disabled: permission === 'none' })), _jsx(WithTooltip, { tooltip: permission === 'canRead' ? tooltipProps : undefined, children: _jsx(ButtonFunction, { label: createBtnLabel, icon: _jsx(PlusSVG, {}), iconPosition: 'before', onClick: onOpen, size: selectSize, "data-test-id": 'select-create__create-button', disabled: permission !== 'canCreate' }) })] }), formLayout] })));
63
+ });
@@ -0,0 +1,7 @@
1
+ type SelectFooterProps = {
2
+ onClick: VoidFunction;
3
+ createButtonLabel: string;
4
+ canCreate: boolean;
5
+ };
6
+ export declare function SelectFooter({ onClick, createButtonLabel, canCreate }: SelectFooterProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { PlusSVG } from '@sbercloud/uikit-product-icons';
3
+ import { useLocale } from '@sbercloud/uikit-product-locale';
4
+ import { ButtonFunction } from '@snack-uikit/button';
5
+ import { WithTooltip } from '@snack-uikit/tooltip';
6
+ import styled from './styles.module.css';
7
+ export function SelectFooter({ onClick, createButtonLabel, canCreate }) {
8
+ const { t } = useLocale('FieldsPredefined');
9
+ return (_jsx("div", { className: styled.footerWrapper, children: _jsx(WithTooltip, { tooltip: canCreate ? undefined : { tip: t('SelectCreate.noPermission'), placement: 'top' }, children: _jsx(ButtonFunction, { label: createButtonLabel, onClick: onClick, icon: _jsx(PlusSVG, {}), iconPosition: 'before', "data-test-id": 'select-create__create-button-footer', disabled: !canCreate }) }) }));
10
+ }
@@ -0,0 +1 @@
1
+ export * from './SelectFooter';
@@ -0,0 +1 @@
1
+ export * from './SelectFooter';
@@ -0,0 +1,6 @@
1
+ .footerWrapper{
2
+ display:flex;
3
+ align-items:center;
4
+ padding-top:4px;
5
+ border-top:1px solid var(--sys-neutral-decor-disabled, #e6e8ef);
6
+ }
@@ -0,0 +1 @@
1
+ export * from './SelectCreate';
@@ -0,0 +1 @@
1
+ export * from './SelectCreate';
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+ import { FieldSelectMultipleProps, FieldSelectSingleProps } from '@sbercloud/uikit-product-mobile-fields';
3
+ import { AdaptiveDrawerProps, AdaptiveModalProps } from '@sbercloud/uikit-product-mobile-modal';
4
+ type CommonModalDrawerProps = 'open' | 'onClose' | 'approveButton' | 'cancelButton' | 'layoutType';
5
+ type CreateLayoutModalProps = Omit<AdaptiveModalProps, CommonModalDrawerProps> & {
6
+ content: ReactNode;
7
+ };
8
+ type CreateLayoutDrawerProps = Omit<AdaptiveDrawerProps, CommonModalDrawerProps>;
9
+ export type LayoutProps = {
10
+ /** По клику на кнопку создания открывать модальное окно или дровер */
11
+ createLayoutType: 'modal';
12
+ /** Пропсы передаваемые в модалку или дровер создания новой опции */
13
+ createLayoutProps: CreateLayoutModalProps;
14
+ } | {
15
+ createLayoutType: 'drawer';
16
+ createLayoutProps: CreateLayoutDrawerProps;
17
+ };
18
+ export type EntityName = {
19
+ plural: string;
20
+ single: string;
21
+ };
22
+ export type OmittedSelectProps = 'footer' | 'noResultState' | 'noDataState' | 'errorDataState';
23
+ export type FieldSelectProps = (Omit<FieldSelectSingleProps, OmittedSelectProps> & {
24
+ selection?: 'single';
25
+ }) | (Omit<FieldSelectMultipleProps, OmittedSelectProps> & {
26
+ selection: 'multiple';
27
+ });
28
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { FieldSelectProps } from '@sbercloud/uikit-product-mobile-fields';
2
+ import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
3
+ import { EntityName } from './types';
4
+ type Props = {
5
+ onRefetch?: VoidFunction;
6
+ entityName: EntityName;
7
+ entityIcon?: IconPredefinedProps['icon'];
8
+ };
9
+ export declare function useSelectDataStates({ onRefetch, entityName, entityIcon }: Props): Pick<FieldSelectProps, "noDataState" | "noResultsState" | "errorDataState">;
10
+ export {};
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { SearchSVG, UpdateSVG } from '@sbercloud/uikit-product-icons';
4
+ import { useLocale } from '@sbercloud/uikit-product-locale';
5
+ import { ButtonTonal } from '@snack-uikit/button';
6
+ import { capitalize } from '../../helpers';
7
+ export function useSelectDataStates({ onRefetch, entityName, entityIcon }) {
8
+ const { t } = useLocale('FieldsPredefined');
9
+ return useMemo(() => ({
10
+ noDataState: {
11
+ icon: { icon: entityIcon !== null && entityIcon !== void 0 ? entityIcon : SearchSVG },
12
+ description: `${capitalize(entityName.plural)} ${t('SelectCreate.noData')}`,
13
+ },
14
+ noResultsState: {
15
+ icon: { icon: SearchSVG },
16
+ description: (_jsxs(_Fragment, { children: [capitalize(entityName.plural), " ", t('SelectCreate.noResult'), ".", _jsx("br", {}), t('SelectCreate.changeRequest'), " ", entityName.single.toLocaleLowerCase()] })),
17
+ },
18
+ errorDataState: {
19
+ description: `${t('SelectCreate.loadError')} ${entityName.plural.toLocaleLowerCase()}`,
20
+ footer: onRefetch ? (_jsx(ButtonTonal, { label: t('SelectCreate.buttonRefetch'), icon: _jsx(UpdateSVG, {}), appearance: 'neutral', onClick: onRefetch })) : (_jsx(_Fragment, {})),
21
+ },
22
+ }), [entityIcon, entityName, t, onRefetch]);
23
+ }
@@ -0,0 +1,5 @@
1
+ export * from './FieldPhone';
2
+ export * from './SelectCreate';
3
+ export * from './FieldAi';
4
+ export * from './FieldChat';
5
+ export * from './AIDisclaimer';
@@ -0,0 +1,5 @@
1
+ export * from './FieldPhone';
2
+ export * from './SelectCreate';
3
+ export * from './FieldAi';
4
+ export * from './FieldChat';
5
+ export * from './AIDisclaimer';
@@ -0,0 +1,9 @@
1
+ export type FieldSubmitButtonProps = {
2
+ active: boolean;
3
+ handleClick(): void;
4
+ size?: 'xs' | 's';
5
+ className?: string;
6
+ fullWidth?: boolean;
7
+ showTooltip?: boolean;
8
+ };
9
+ export declare function FieldSubmitButton({ active, handleClick, size, className, fullWidth, showTooltip, }: FieldSubmitButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ArrowUpSVG } from '@sbercloud/uikit-product-icons';
3
+ import { useLocale } from '@sbercloud/uikit-product-locale';
4
+ import { ButtonFilled } from '@snack-uikit/button';
5
+ import { Tooltip } from '@snack-uikit/tooltip';
6
+ export function FieldSubmitButton({ active, handleClick, size = 'xs', className, fullWidth, showTooltip = true, }) {
7
+ const { t } = useLocale('FieldsPredefined');
8
+ if (active) {
9
+ return (_jsx(Tooltip, { tip: t('FieldAi.submit.tooltip'), hoverDelayOpen: 600, open: showTooltip ? undefined : false, children: _jsx(ButtonFilled, { fullWidth: fullWidth, icon: _jsx(ArrowUpSVG, {}), size: size, appearance: 'primary', type: 'submit', onClick: handleClick, className: className }) }));
10
+ }
11
+ return _jsx(ButtonFilled, { icon: _jsx(ArrowUpSVG, {}), size: size, disabled: true, className: className, fullWidth: fullWidth });
12
+ }
@@ -0,0 +1 @@
1
+ export * from './FieldSubmitButton';
@@ -0,0 +1 @@
1
+ export * from './FieldSubmitButton';
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ type TextAreaActionsFooterProps = {
3
+ left?: ReactNode;
4
+ right?: ReactNode;
5
+ };
6
+ export declare function TextAreaActionsFooter({ left, right }: TextAreaActionsFooterProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import cn from 'classnames';
3
+ import styles from './styles.module.css';
4
+ export function TextAreaActionsFooter({ left, right }) {
5
+ return (_jsxs("div", { className: styles.actionsFooter, children: [_jsx("div", { className: styles.actionsWrapper, children: left }), _jsx("div", { className: cn(styles.actionsWrapper, styles.right), children: right })] }));
6
+ }
@@ -0,0 +1 @@
1
+ export * from './TextAreaActionsFooter';
@@ -0,0 +1 @@
1
+ export * from './TextAreaActionsFooter';
@@ -0,0 +1,21 @@
1
+ .actionsFooter{
2
+ display:flex;
3
+ flex-direction:row;
4
+ justify-content:space-between;
5
+ align-items:center;
6
+ width:100%;
7
+ padding-bottom:7px;
8
+ }
9
+
10
+ .actionsWrapper{
11
+ display:flex;
12
+ flex-direction:row;
13
+ align-items:center;
14
+ gap:var(--dimension-050m, 4px);
15
+ }
16
+
17
+ .right{
18
+ justify-content:flex-end;
19
+ width:100%;
20
+ padding-right:8px;
21
+ }
@@ -0,0 +1 @@
1
+ export declare function capitalize(word: string): string;
@@ -0,0 +1,3 @@
1
+ export function capitalize(word) {
2
+ return word.charAt(0).toUpperCase() + word.slice(1);
3
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Возвращает кол-во символов для маски - со скобками и без
3
+ * @function helper
4
+ */
5
+ export declare function getSymbolsRangeFromMask(mask?: string): {
6
+ minNumberLength: number;
7
+ maxNumberLength: number;
8
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Возвращает кол-во символов для маски - со скобками и без
3
+ * @function helper
4
+ */
5
+ export function getSymbolsRangeFromMask(mask = '') {
6
+ // Считаем все 'X' и цифры в строке
7
+ const maxNumberLength = (mask.match(/[X\d]/g) || []).length;
8
+ // Удаляем содержимое внутри скобок, включая сами скобки для подсчёта без учёта их содержимого
9
+ const stringWithoutBrackets = mask.replace(/\[[^\]]*\]/g, '');
10
+ // Считаем 'X' и цифры после удаления содержимого в скобках
11
+ const minNumberLength = (stringWithoutBrackets.match(/[X\d]/g) || []).length;
12
+ // Возвращаем оба значения: без учёта и с учётом содержимого в скобках
13
+ return { minNumberLength, maxNumberLength };
14
+ }
@@ -0,0 +1,3 @@
1
+ export * from './capitalize';
2
+ export * from './isTouchDevice';
3
+ export * from './getSymbolsRangeFromMask';
@@ -0,0 +1,3 @@
1
+ export * from './capitalize';
2
+ export * from './isTouchDevice';
3
+ export * from './getSymbolsRangeFromMask';
@@ -0,0 +1,2 @@
1
+ import { LayoutType } from '@sbercloud/uikit-product-utils';
2
+ export declare function isTouchDevice(layoutType: LayoutType): boolean;
@@ -0,0 +1,3 @@
1
+ export function isTouchDevice(layoutType) {
2
+ return ['mobile', 'tablet'].includes(layoutType);
3
+ }
@@ -0,0 +1 @@
1
+ export * from './useOpen';
@@ -0,0 +1 @@
1
+ export * from './useOpen';
@@ -0,0 +1,5 @@
1
+ export declare function useOpen(defaultState?: boolean): {
2
+ isOpen: boolean;
3
+ onClose: () => void;
4
+ onOpen: () => void;
5
+ };
@@ -0,0 +1,15 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ export function useOpen(defaultState = false) {
3
+ const [isOpen, setIsOpen] = useState(defaultState);
4
+ const onClose = useCallback(() => {
5
+ setIsOpen(false);
6
+ }, []);
7
+ const onOpen = useCallback(() => {
8
+ setIsOpen(true);
9
+ }, []);
10
+ return useMemo(() => ({
11
+ isOpen,
12
+ onClose,
13
+ onOpen,
14
+ }), [isOpen, onClose, onOpen]);
15
+ }
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export { getSymbolsRangeFromMask } from './helpers';
3
+ export { setNonce } from '@sbercloud/uikit-product-mobile-fields';
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export { getSymbolsRangeFromMask } from './helpers';
3
+ export { setNonce } from '@sbercloud/uikit-product-mobile-fields';