@true-engineering/true-react-common-ui-kit 4.0.0-alpha63 → 4.0.0-alpha64

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.
@@ -1 +1 @@
1
- {"version":3,"file":"true-react-common-ui-kit.umd.cjs","sources":["../src/theme/common.ts","../src/theme/Provider.tsx","../src/hooks/use-mixed-styles.ts","../src/theme/helpers.ts","../src/hooks/use-did-mount-effect.ts","../src/helpers/popper-helpers.ts","../src/constants/phone-info.ts","../src/constants/mime-types.ts","../src/helpers/phone.ts","../src/helpers/misc.ts","../src/hooks/use-dropdown.ts","../src/hooks/use-latest-ref.ts","../src/hooks/use-intersection-ref.ts","../src/hooks/use-is-mounted.ts","../src/hooks/use-merged-refs.ts","../src/hooks/use-on-click-outside.ts","../src/hooks/use-tweak-styles.ts","../src/components/Icon/icons/index.ts","../src/components/Icon/icons/avatar.svg?raw","../src/components/Icon/icons/calendar.svg?raw","../src/components/Icon/icons/check.svg?raw","../src/components/Icon/icons/chevron-down-small.svg?raw","../src/components/Icon/icons/chevron-down.svg?raw","../src/components/Icon/icons/chevron-left.svg?raw","../src/components/Icon/icons/chevron-right.svg?raw","../src/components/Icon/icons/close-large.svg?raw","../src/components/Icon/icons/close-window.svg?raw","../src/components/Icon/icons/close.svg?raw","../src/components/Icon/icons/file-excel.svg?raw","../src/components/Icon/icons/file-image.svg?raw","../src/components/Icon/icons/file-other.svg?raw","../src/components/Icon/icons/file-pdf.svg?raw","../src/components/Icon/icons/file-word.svg?raw","../src/components/Icon/icons/file-xml.svg?raw","../src/components/Icon/icons/file-zip.svg?raw","../src/components/Icon/icons/filter.svg?raw","../src/components/Icon/icons/information.svg?raw","../src/components/Icon/icons/menu.svg?raw","../src/components/Icon/icons/minus.svg?raw","../src/components/Icon/icons/plus.svg?raw","../src/components/Icon/icons/search.svg?raw","../src/components/Icon/icons/status-error.svg?raw","../src/components/Icon/icons/status-info.svg?raw","../src/components/Icon/icons/status-not-ok.svg?raw","../src/components/Icon/icons/status-ok.svg?raw","../src/components/Icon/icons/status-warning.svg?raw","../src/components/Icon/icons/trash-can.svg?raw","../src/components/Icon/Icon.styles.ts","../src/components/Icon/Icon.tsx","../src/components/Icon/snippet.tsx","../src/components/WithPopup/helpers.ts","../src/components/WithPopup/WithPopup.styles.ts","../src/components/WithPopup/WithPopup.tsx","../src/components/WithPopup/constants.ts","../src/components/List/components/ListItem/ListItem.styles.ts","../src/components/List/components/ListItem/ListItem.tsx","../src/components/List/List.styles.ts","../src/components/List/List.tsx","../src/components/AccountInfo/AccountInfo.styles.ts","../src/components/AddButton/AddButton.styles.ts","../src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts","../src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx","../src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx","../src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts","../src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx","../src/components/ThemedPreloader/ThemedPreloader.styles.ts","../src/components/ThemedPreloader/ThemedPreloader.tsx","../src/components/Button/Button.styles.ts","../src/components/Button/Button.tsx","../src/components/Checkbox/Checkbox.styles.ts","../src/components/Checkbox/Checkbox.tsx","../src/components/CloseButton/CloseButton.styles.ts","../src/components/CssBaseline/CssBaseline.styles.ts","../src/components/WithMessages/WithMessages.styles.ts","../src/components/WithMessages/WithMessages.tsx","../src/components/ControlWrapper/helpers.ts","../src/components/ControlWrapper/ControlWrapper.styles.ts","../src/components/ControlWrapper/ControlWrapper.tsx","../src/components/Input/Input.styles.ts","../src/components/Input/InputBase.tsx","../src/components/Input/Input.tsx","../src/components/DateInput/constants.ts","../src/components/DateInput/DateInput.styles.ts","../src/components/DateInput/DateInput.tsx","../src/components/DatePicker/components/DatePickerBase/DatePickerBase.tsx","../src/components/SearchInput/SearchInput.styles.ts","../src/components/SearchInput/SearchInput.tsx","../src/components/ScrollIntoViewIfNeeded/constants.ts","../src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts","../src/components/Select/constants.ts","../src/components/Select/components/SelectList/SelectList.styles.ts","../src/components/Select/components/SelectListItem/SelectListItem.styles.ts","../src/components/Select/components/SelectListItem/SelectListItem.tsx","../src/components/Select/components/SelectList/SelectList.tsx","../src/components/Select/helpers.ts","../src/components/Select/Select.styles.ts","../src/components/Select/Select.tsx","../src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.ts","../src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.tsx","../src/components/DatePicker/components/PopperContainer/PopperContainer.tsx","../src/components/DatePicker/constants.ts","../src/components/DatePicker/helpers.ts","../src/components/DatePicker/DatePicker.styles.ts","../src/components/DatePicker/DatePicker.tsx","../src/components/Description/constants.ts","../src/components/Description/Description.styles.ts","../src/components/FileInput/helpers.ts","../src/components/FileInput/FileInput.styles.ts","../src/components/FileInput/FileInput.tsx","../src/components/IconButton/IconButton.styles.ts","../src/components/IconButton/IconButton.tsx","../src/components/Tooltip/Tooltip.styles.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/TextWithTooltip/TextWithTooltip.styles.ts","../src/components/TextWithTooltip/TextWithTooltip.tsx","../src/components/FileItem/constants.ts","../src/components/FileItem/helpers.ts","../src/components/FileItem/FileItem.styles.ts","../src/components/FiltersPane/constants.ts","../src/components/FiltersPane/helpers.ts","../src/components/NumberInput/helpers.ts","../src/components/NumberInput/NumberInput.tsx","../src/components/FiltersPane/FiltersPane.styles.ts","../src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts","../src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx","../src/components/MultiSelectList/constants.ts","../src/components/MultiSelectList/helpers.ts","../src/components/MultiSelectList/MultiSelectList.styles.ts","../src/components/MultiSelectList/MultiSelectList.tsx","../src/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.tsx","../src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts","../src/components/FiltersPane/components/FilterSelect/FilterSelect.tsx","../src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts","../src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx","../src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.ts","../src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx","../src/components/FiltersPane/components/Filter/helpers.ts","../src/components/FiltersPane/components/Filter/Filter.tsx","../src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts","../src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.tsx","../src/components/FiltersPane/components/FilterValueView/FilterValueView.styles.tsx","../src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx","../src/components/FiltersPane/components/FilterWrapper/helpers.ts","../src/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.ts","../src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx","../src/components/Flag/customFlags/AB.svg?raw","../src/components/Flag/customFlags/customFlags.ts","../src/components/Flag/customFlags/OS.svg?raw","../src/components/Flag/Flag.styles.ts","../src/components/Flag/Flag.tsx","../src/components/FlexibleTable/constants.ts","../src/components/Skeleton/Skeleton.styles.ts","../src/components/Skeleton/Skeleton.tsx","../src/components/FlexibleTable/helpers.ts","../src/components/FlexibleTable/FlexibleTable.styles.ts","../src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts","../src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx","../src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts","../src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx","../src/components/FloatDocActions/components/DocActions/DocActions.styles.ts","../src/components/FloatDocActions/components/DocActions/DocActions.tsx","../src/components/FloatDocActions/FloatDocActions.styles.ts","../src/components/IncrementInput/IncrementInput.styles.ts","../src/components/Modal/Modal.styles.ts","../src/components/MoreMenu/MoreMenu.styles.ts","../src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.ts","../src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx","../src/components/MultiSelect/MultiSelect.styles.ts","../src/components/Notification/Notification.styles.ts","../src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.ts","../src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx","../src/components/PhoneInput/constants.ts","../src/components/PhoneInput/PhoneInput.styles.ts","../src/components/RadioButton/RadioButton.styles.ts","../src/components/Selector/Selector.styles.ts","../src/components/SmartInput/constants.ts","../src/components/SmartInput/helpers.ts","../src/components/SmartInput/SmartInput.tsx","../src/components/Status/Status.styles.ts","../src/components/Switch/Switch.styles.ts","../src/components/TextArea/TextArea.styles.ts","../src/components/TextArea/TextArea.tsx","../src/components/TextButton/TextButton.styles.ts","../src/components/TextButton/TextButton.tsx","../src/components/TextWithInfo/TextWithInfo.styles.ts","../src/components/Toaster/Toaster.styles.ts","../src/components/NewMoreMenu/NewMoreMenu.styles.ts","../src/components/WithTooltip/WithTooltip.styles.ts","../src/components/AccountInfo/AccountInfo.tsx","../src/components/AccountInfo/constants.ts","../src/components/AddButton/AddButton.tsx","../src/components/CloseButton/CloseButton.tsx","../src/components/CssBaseline/CssBaseline.tsx","../src/components/FloatDocActions/components/DocActions/constants.ts","../src/components/Description/Description.tsx","../src/components/FileItem/FileItem.tsx","../src/components/FiltersPane/FiltersPane.tsx","../src/components/FlexibleTable/FlexibleTable.tsx","../src/components/FloatDocActions/FloatDocActions.tsx","../src/components/FloatDocActions/constants.ts","../src/components/ControlWrapper/constants.ts","../src/components/IncrementInput/IncrementInput.tsx","../src/components/Modal/Modal.tsx","../src/components/MoreMenu/MoreMenu.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/NewMoreMenu/NewMoreMenu.tsx","../src/components/Notification/Notification.tsx","../src/components/PhoneInput/PhoneInput.tsx","../src/components/RadioButton/RadioButton.tsx","../src/components/Selector/Selector.tsx","../src/components/Status/Status.tsx","../src/components/Switch/Switch.tsx","../src/components/TextWithInfo/TextWithInfo.tsx","../src/components/Toaster/Toaster.tsx","../src/components/Toaster/constants.ts","../src/components/WithTooltip/WithTooltip.tsx","../src/hooks/use-merge.ts","../src/hooks/use-resize-ref.ts"],"sourcesContent":["import { IUiKitHelpers, IUiKitTheme } from './types';\n\nexport const colors = {\n FONT_MAIN: '#222a37',\n FONT_MEDIUM: '#505f79',\n FONT_LABEL: '#7a869a',\n FONT_DISABLED: '#95a0b3',\n GREY_ACTIVE: '#95a0b3',\n BORDER_MAIN: '#d0d6e1',\n BORDER_LIGHT: '#dde3ed',\n GREY_HOVER: '#dde3ed',\n GREY_FOCUS: '#eceff5',\n GREY_DISABLED: '#eceff5',\n GREY_BACKGROUND: '#f6f8fc',\n CLASSIC_WHITE: '#ffffff',\n RED_ACTIVE: '#912e34',\n RED_HOVER: '#c13e45',\n RED_WARNING: '#f14d56',\n RED_WARNING_LIGHT: '#ff6261',\n RED_BACKGROUND: '#feedee',\n ORANGE_BACKGROUND: '#fff4e9',\n GREEN_BACKGROUND: '#f4f9e6',\n BLUE_BACKGROUND: '#ebf1ff',\n // временные константы пока не будет полной темизации\n GREEN_FOCUS: '#97ba1e',\n ORANGE_FOCUS: '#ff991f',\n} as const;\n\nexport const dimensions = {\n BORDER_RADIUS_LARGE: 16,\n BORDER_RADIUS_MEDIUM: 12,\n BORDER_RADIUS_STD: 8,\n BORDER_RADIUS_SMALL: 6,\n BORDER_RADIUS_EXTRA_SMALL: 4,\n\n CONTROL: {\n HEIGHT: 48,\n PADDING: 16,\n ICON_SIZE: 24,\n ICON_INNER_SIZE: 24,\n ICON_GAP: 8,\n },\n\n Z_INDEX: {\n CONTROL_INVALID: 1,\n CONTROL_FOCUS: 2,\n },\n} as const;\n\nexport const helpers = {\n withAngle: (angleSize = 6, position: 'left' | 'right' = 'left', distance = 100) => ({\n display: 'inline-block',\n position: 'relative',\n marginTop: angleSize * 2 - 1,\n boxShadow: '0 8px 20px 0 rgba(0, 0, 0, 0.04)',\n border: ['solid', 1, colors.BORDER_MAIN],\n borderRadius: dimensions.BORDER_RADIUS_EXTRA_SMALL,\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n top: -angleSize,\n left: position === 'left' && distance,\n right: position === 'right' && distance,\n width: 0,\n height: 0,\n borderLeft: [angleSize, 'solid', 'transparent'],\n borderRight: [angleSize, 'solid', 'transparent'],\n borderBottom: [angleSize, 'solid', colors.BORDER_MAIN],\n },\n\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n top: -angleSize + 1,\n left: position === 'left' && distance + 1,\n right: position === 'right' && distance + 1,\n width: 0,\n height: 0,\n borderLeft: [angleSize - 1, 'solid', 'transparent'],\n borderRight: [angleSize - 1, 'solid', 'transparent'],\n borderBottom: [angleSize - 1, 'solid', colors.CLASSIC_WHITE],\n },\n }),\n\n withScrollBar: {\n boxSizing: 'border-box',\n overflow: 'auto',\n\n // Chromium\n '@supports selector(::-webkit-scrollbar)': {\n '--webkit-scrollbar-width': '10px',\n '--webkit-scrollbar-height': '10px',\n\n '&::-webkit-scrollbar': {\n width: 'var(--webkit-scrollbar-width)',\n height: 'var(--webkit-scrollbar-height)',\n\n '&-thumb': {\n width: 6,\n minHeight: 30,\n border: [2, 'solid', 'transparent'],\n borderRadius: 5,\n backgroundColor: colors.BORDER_MAIN,\n backgroundClip: 'padding-box',\n\n '&:hover': {\n backgroundColor: colors.GREY_ACTIVE,\n },\n },\n\n '&-track-piece': {\n backgroundColor: 'transparent',\n },\n\n '&-corner': {\n backgroundColor: 'transparent',\n },\n },\n },\n\n // Firefox\n '@supports not selector(::-webkit-scrollbar)': {\n scrollbarWidth: 'thin',\n scrollbarColor: `${colors.BORDER_MAIN} transparent`,\n },\n },\n} satisfies IUiKitHelpers;\n\nexport const SLIDE_UP_ANIMATION_DURATION = 150;\nconst SLIDE_UP_POSITION_START = 15;\nconst SLIDE_UP_POSITION_END = 0;\n\nexport const animations = {\n defaultTransition: '0.25s ease-in-out',\n slideUp: {\n 'slide-up-enter': {\n opacity: 0,\n transform: `translateY(${SLIDE_UP_POSITION_START}px)`,\n },\n\n 'slide-up-enter-active': {\n opacity: 1,\n transform: `translateY(${SLIDE_UP_POSITION_END}px)`,\n transition: `${SLIDE_UP_ANIMATION_DURATION}ms ease-in-out`,\n transitionProperty: 'opacity, transform',\n },\n\n 'slide-up-exit-active': {\n opacity: 1,\n transform: `translateY(${SLIDE_UP_POSITION_END}px)`,\n },\n\n 'slide-up-exit': {\n opacity: 0,\n transform: `translateY(${SLIDE_UP_POSITION_START}px)`,\n transition: `${SLIDE_UP_ANIMATION_DURATION}ms ease-in-out`,\n transitionProperty: 'opacity, transform',\n },\n },\n};\n\nexport interface ICommonUiKitTheme extends IUiKitTheme {\n colors: typeof colors;\n dimensions: typeof dimensions;\n helpers: typeof helpers;\n animations: typeof animations;\n}\n\nexport const common: ICommonUiKitTheme = {\n animations,\n colors,\n dimensions,\n helpers,\n};\n","import { createContext, useContext } from 'react';\nimport { common } from './common';\nimport type { IUiKitTheme } from './types';\n\nexport const ThemeContext = createContext<IUiKitTheme>(common);\n\nexport const ThemeProvider = ThemeContext.Provider;\n\nexport const useTheme = (): IUiKitTheme => useContext(ThemeContext);\n","import { useMemo } from 'react';\nimport { isObject } from '@true-engineering/true-react-platform-helpers';\nimport type { IMixedStyles } from '../theme';\n\nexport const mixStyles = <T>(...tweakStyles: Array<IMixedStyles<T>>): Array<NonNullable<T>> =>\n tweakStyles.flat().filter(isObject) as Array<NonNullable<T>>;\n\nexport const useMixedStyles = <StyleSheet>(\n baseStyles?: IMixedStyles<StyleSheet>,\n tweakStyles?: IMixedStyles<StyleSheet>,\n): Array<NonNullable<StyleSheet>> =>\n useMemo(() => mixStyles(baseStyles, tweakStyles), [baseStyles, tweakStyles]);\n","import { useMemo } from 'react';\nimport { createUseStyles } from 'react-jss';\nimport {\n isArrayNotEmpty,\n isNotEmpty,\n isString,\n mergeStyles,\n} from '@true-engineering/true-react-platform-helpers';\nimport { mixStyles } from '../hooks/use-mixed-styles';\nimport { useTheme } from './Provider';\nimport { IComponentName, IStyles, IUseStyles } from './types';\n\nexport const useThemeComponentStyles = <T>(\n componentName?: IComponentName,\n): Partial<T> | undefined => {\n const { components } = useTheme();\n return isNotEmpty(componentName) ? (components?.[componentName] as never) : undefined;\n};\n\nconst isTweakStyle = (key: string): boolean => key.startsWith('tweak');\n\nconst areStylesNotEmpty = <T>(tweakStyles?: T): tweakStyles is NonNullable<T> =>\n isNotEmpty(tweakStyles) && !Object.keys(tweakStyles).every(isTweakStyle);\n\nconst checkStyles = (styles: IStyles<string>, componentName = 'LocalComponent'): void => {\n const invalidClasses = Object.keys(styles).filter(isTweakStyle);\n\n if (isArrayNotEmpty(invalidClasses)) {\n console.error(\n `${componentName}: Названия классов не должны начинаться со слова \"tweak\": ${invalidClasses}`,\n );\n }\n};\n\ntype TweakStylesCache = (styles: object[], idx?: number) => object | undefined;\nconst getTweakStylesCache = (): TweakStylesCache => {\n let mergedStyles: object | undefined;\n const cache = new WeakMap<object, TweakStylesCache>();\n\n const getNext = (next: object) => {\n if (!cache.has(next)) {\n cache.set(next, getTweakStylesCache());\n }\n\n return cache.get(next)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n };\n\n return (styles, idx = 0) => {\n const next = styles.at(idx);\n if (isNotEmpty(next)) {\n return getNext(next)(styles, idx + 1);\n }\n\n if (!isNotEmpty(mergedStyles)) {\n const [first, ...rest] = styles;\n mergedStyles = isArrayNotEmpty(rest) ? mergeStyles(first, ...rest) : first;\n }\n\n return mergedStyles;\n };\n};\n\nconst tweakStylesCache = getTweakStylesCache();\nconst useStyles = createUseStyles<string>((tweakStyles) => tweakStyles as never);\n\nexport const createThemedStyles: <C extends string>(\n ...args: [IStyles<C>] | [IComponentName, IStyles<C>]\n) => IUseStyles<C> = (first, second?) => {\n const componentName = isString(first) ? first : undefined;\n const styles = second! ?? first; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n if (process.env.NODE_ENV !== 'production') {\n checkStyles(styles, componentName);\n }\n\n return ({ theme, tweakStyles = theme }) => {\n const themeStyles = useThemeComponentStyles<typeof styles>(componentName);\n\n const data = useMemo(() => {\n const resultStyles = mixStyles(styles, themeStyles, tweakStyles).filter(areStylesNotEmpty);\n return { theme: tweakStylesCache(resultStyles) };\n }, [themeStyles, tweakStyles]);\n\n return useStyles(data);\n };\n};\n","import { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nexport const useDidMountEffect = (effect: EffectCallback, dependencies: DependencyList): void => {\n const isMountedRef = useRef(false);\n useEffect(() => {\n let unmount: ReturnType<EffectCallback>;\n if (isMountedRef.current) {\n unmount = effect();\n } else {\n isMountedRef.current = true;\n }\n return () => {\n if (unmount !== undefined) {\n unmount();\n }\n };\n }, dependencies);\n};\n","import { Modifier } from 'react-overlays/usePopper';\n\nexport const minWidthModifier: Partial<Modifier<any, any>> = {\n name: 'minWidth',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn: ({ state }) => {\n state.styles.popper.minWidth = `${state.rects.reference.width}px`;\n },\n effect: ({ state }) => {\n state.elements.popper.style.minWidth = `${\n (state.elements.reference as HTMLElement).offsetWidth\n }px`;\n },\n};\n","import type { IPhoneInfo } from '../components';\n\nexport const phoneInfo: IPhoneInfo[] = [\n {\n countryEn: 'Abkhazia',\n countryRu: 'Абхазия',\n countryCode: 'AB',\n phoneMask: '(999) 999-99-99',\n dialCode: '7',\n dialCodePriority: 1,\n fullCodes: ['7'],\n },\n {\n countryEn: 'Afghanistan',\n countryRu: 'Афганистан',\n countryCode: 'AF',\n dialCode: '93',\n fullCodes: ['93'],\n },\n {\n countryEn: 'Albania',\n countryRu: 'Албания',\n countryCode: 'AL',\n dialCode: '355',\n fullCodes: ['355'],\n },\n {\n countryEn: 'Algeria',\n countryRu: 'Алжир',\n countryCode: 'DZ',\n dialCode: '213',\n fullCodes: ['213'],\n },\n {\n countryEn: 'Andorra',\n countryRu: 'Андорра',\n countryCode: 'AD',\n dialCode: '376',\n fullCodes: ['376'],\n },\n {\n countryEn: 'Angola',\n countryRu: 'Ангола',\n countryCode: 'AO',\n dialCode: '244',\n fullCodes: ['244'],\n },\n {\n countryEn: 'Antigua and Barbuda',\n countryRu: 'Антигуа и Барбуда',\n countryCode: 'AG',\n dialCode: '1268',\n fullCodes: ['1268'],\n },\n {\n countryEn: 'Argentina',\n countryRu: 'Аргентина',\n countryCode: 'AR',\n dialCode: '54',\n phoneMask: '(99) 99999999',\n fullCodes: ['54'],\n },\n {\n countryEn: 'Armenia',\n countryRu: 'Армения',\n countryCode: 'AM',\n dialCode: '374',\n fullCodes: ['374'],\n },\n {\n countryEn: 'Aruba',\n countryRu: 'Аруба',\n countryCode: 'AW',\n dialCode: '297',\n fullCodes: ['297'],\n },\n {\n countryEn: 'Australia',\n countryRu: 'Австралия',\n countryCode: 'AU',\n dialCode: '61',\n phoneMask: '(99) 9999 9999',\n dialCodePriority: 0,\n areaCodes: ['2', '3', '4', '7', '8', '02', '03', '04', '07', '08'],\n fullCodes: ['612', '613', '614', '617', '618', '6102', '6103', '6104', '6107', '6108'],\n },\n {\n countryEn: 'Austria',\n countryRu: 'Австрия',\n countryCode: 'AT',\n dialCode: '43',\n fullCodes: ['43'],\n },\n {\n countryEn: 'Azerbaijan',\n countryRu: 'Азербайджан',\n countryCode: 'AZ',\n dialCode: '994',\n fullCodes: ['994'],\n },\n {\n countryEn: 'Bahamas',\n countryRu: 'Багамы',\n countryCode: 'BS',\n dialCode: '1242',\n fullCodes: ['1242'],\n },\n {\n countryEn: 'Bahrain',\n countryRu: 'Бахрейн',\n countryCode: 'BH',\n dialCode: '973',\n fullCodes: ['973'],\n },\n {\n countryEn: 'Bangladesh',\n countryRu: 'Бангладеш',\n countryCode: 'BD',\n dialCode: '880',\n fullCodes: ['880'],\n },\n {\n countryEn: 'Barbados',\n countryRu: 'Барбадос',\n countryCode: 'BB',\n dialCode: '1246',\n fullCodes: ['1246'],\n },\n {\n countryEn: 'Belarus',\n countryRu: 'Беларусь',\n countryCode: 'BY',\n dialCode: '375',\n phoneMask: '(99) 999 99 99',\n fullCodes: ['375'],\n },\n {\n countryEn: 'Belgium',\n countryRu: 'Бельгия',\n countryCode: 'BE',\n dialCode: '32',\n phoneMask: '999 99 99 99',\n fullCodes: ['32'],\n },\n {\n countryEn: 'Belize',\n countryRu: 'Белиз',\n countryCode: 'BZ',\n dialCode: '501',\n fullCodes: ['501'],\n },\n {\n countryEn: 'Benin',\n countryRu: 'Бенин',\n countryCode: 'BJ',\n dialCode: '229',\n fullCodes: ['229'],\n },\n {\n countryEn: 'Bhutan',\n countryRu: 'Бутан',\n countryCode: 'BT',\n dialCode: '975',\n fullCodes: ['975'],\n },\n {\n countryEn: 'Bolivia',\n countryRu: 'Боливия',\n countryCode: 'BO',\n dialCode: '591',\n fullCodes: ['591'],\n },\n {\n countryEn: 'Bosnia and Herzegovina',\n countryRu: 'Босния и Герцеговина',\n countryCode: 'BA',\n dialCode: '387',\n fullCodes: ['387'],\n },\n {\n countryEn: 'Botswana',\n countryRu: 'Ботсвана',\n countryCode: 'BW',\n dialCode: '267',\n fullCodes: ['267'],\n },\n {\n countryEn: 'Brazil',\n countryRu: 'Бразилия',\n countryCode: 'BR',\n dialCode: '55',\n phoneMask: '(99) 999999999',\n fullCodes: ['55'],\n },\n {\n countryEn: 'British Indian Ocean Territory',\n countryRu: 'Британская территория в Индийском океане',\n countryCode: 'IO',\n dialCode: '246',\n fullCodes: ['246'],\n },\n {\n countryEn: 'Brunei',\n countryRu: 'Бруней-Даруссалам',\n countryCode: 'BN',\n dialCode: '673',\n fullCodes: ['673'],\n },\n {\n countryEn: 'Bulgaria',\n countryRu: 'Болгария',\n countryCode: 'BG',\n dialCode: '359',\n fullCodes: ['359'],\n },\n {\n countryEn: 'Burkina Faso',\n countryRu: 'Буркина-Фасо',\n countryCode: 'BF',\n dialCode: '226',\n fullCodes: ['226'],\n },\n {\n countryEn: 'Burundi',\n countryRu: 'Бурунди',\n countryCode: 'BI',\n dialCode: '257',\n fullCodes: ['257'],\n },\n {\n countryEn: 'Cambodia',\n countryRu: 'Камбоджа',\n countryCode: 'KH',\n dialCode: '855',\n fullCodes: ['855'],\n },\n {\n countryEn: 'Cameroon',\n countryRu: 'Камерун',\n countryCode: 'CM',\n dialCode: '237',\n fullCodes: ['237'],\n },\n {\n countryEn: 'Canada',\n countryRu: 'Канада',\n countryCode: 'CA',\n dialCode: '1',\n phoneMask: '(999) 999-9999',\n dialCodePriority: 1,\n areaCodes: [\n '204',\n '226',\n '236',\n '249',\n '250',\n '289',\n '306',\n '343',\n '365',\n '387',\n '403',\n '416',\n '418',\n '431',\n '437',\n '438',\n '450',\n '506',\n '514',\n '519',\n '548',\n '579',\n '581',\n '587',\n '604',\n '613',\n '639',\n '647',\n '672',\n '705',\n '709',\n '742',\n '778',\n '780',\n '782',\n '807',\n '819',\n '825',\n '867',\n '873',\n '902',\n '905',\n ],\n fullCodes: [\n '1204',\n '1226',\n '1236',\n '1249',\n '1250',\n '1289',\n '1306',\n '1343',\n '1365',\n '1387',\n '1403',\n '1416',\n '1418',\n '1431',\n '1437',\n '1438',\n '1450',\n '1506',\n '1514',\n '1519',\n '1548',\n '1579',\n '1581',\n '1587',\n '1604',\n '1613',\n '1639',\n '1647',\n '1672',\n '1705',\n '1709',\n '1742',\n '1778',\n '1780',\n '1782',\n '1807',\n '1819',\n '1825',\n '1867',\n '1873',\n '1902',\n '1905',\n ],\n },\n {\n countryEn: 'Cape Verde',\n countryRu: 'Кабо-Верде',\n countryCode: 'CV',\n dialCode: '238',\n fullCodes: ['238'],\n },\n {\n countryEn: 'Caribbean Netherlands',\n countryRu: 'Бонайре, Саба и Синт-Эстатиус',\n countryCode: 'BQ',\n dialCode: '599',\n dialCodePriority: 1,\n fullCodes: ['599'],\n },\n {\n countryEn: 'Central African Republic',\n countryRu: 'Центрально-Африканская Республика',\n countryCode: 'CF',\n dialCode: '236',\n fullCodes: ['236'],\n },\n {\n countryEn: 'Chad',\n countryRu: 'Чад',\n countryCode: 'TD',\n dialCode: '235',\n fullCodes: ['235'],\n },\n {\n countryEn: 'Chile',\n countryRu: 'Чили',\n countryCode: 'CL',\n dialCode: '56',\n fullCodes: ['56'],\n },\n {\n countryEn: 'China',\n countryRu: 'Китай',\n countryCode: 'CN',\n dialCode: '86',\n phoneMask: '99-999999999',\n fullCodes: ['86'],\n },\n {\n countryEn: 'Colombia',\n countryRu: 'Колумбия',\n countryCode: 'CO',\n dialCode: '57',\n fullCodes: ['57'],\n },\n {\n countryEn: 'Comoros',\n countryRu: 'Коморы',\n countryCode: 'KM',\n dialCode: '269',\n fullCodes: ['269'],\n },\n {\n countryEn: 'DR Congo',\n countryRu: 'ДР Конго',\n countryCode: 'CD',\n dialCode: '243',\n fullCodes: ['243'],\n },\n {\n countryEn: 'Republic of the Congo',\n countryRu: 'Республика Конго',\n countryCode: 'CG',\n dialCode: '242',\n fullCodes: ['242'],\n },\n {\n countryEn: 'Costa Rica',\n countryRu: 'Коста-Рика',\n countryCode: 'CR',\n dialCode: '506',\n phoneMask: '9999-9999',\n fullCodes: ['506'],\n },\n {\n countryEn: 'Côte d’Ivoire',\n countryRu: 'Кот д’Ивуар',\n countryCode: 'CI',\n dialCode: '225',\n phoneMask: '99 99 99 99',\n fullCodes: ['225'],\n },\n {\n countryEn: 'Croatia',\n countryRu: 'Хорватия',\n countryCode: 'HR',\n dialCode: '385',\n fullCodes: ['385'],\n },\n {\n countryEn: 'Cuba',\n countryRu: 'Куба',\n countryCode: 'CU',\n dialCode: '53',\n fullCodes: ['53'],\n },\n {\n countryEn: 'Curaçao',\n countryRu: 'Кюрасао',\n countryCode: 'CW',\n dialCode: '599',\n dialCodePriority: 0,\n fullCodes: ['599'],\n },\n {\n countryEn: 'Cyprus',\n countryRu: 'Кипр',\n countryCode: 'CY',\n dialCode: '357',\n phoneMask: '99 999999',\n fullCodes: ['357'],\n },\n {\n countryEn: 'Czech Republic',\n countryRu: 'Чешская Республика',\n countryCode: 'CZ',\n dialCode: '420',\n fullCodes: ['420'],\n },\n {\n countryEn: 'Denmark',\n countryRu: 'Дания',\n countryCode: 'DK',\n dialCode: '45',\n phoneMask: '99 99 99 99',\n fullCodes: ['45'],\n },\n {\n countryEn: 'Djibouti',\n countryRu: 'Джибути',\n countryCode: 'DJ',\n dialCode: '253',\n fullCodes: ['253'],\n },\n {\n countryEn: 'Dominica',\n countryRu: 'Доминика',\n countryCode: 'DM',\n dialCode: '1767',\n fullCodes: ['1767'],\n },\n {\n countryEn: 'Dominican Republic',\n countryRu: 'Доминиканская Республика',\n countryCode: 'DO',\n dialCode: '1',\n dialCodePriority: 2,\n areaCodes: ['809', '829', '849'],\n fullCodes: ['1809', '1829', '1849'],\n },\n {\n countryEn: 'Ecuador',\n countryRu: 'Эквадор',\n countryCode: 'EC',\n dialCode: '593',\n fullCodes: ['593'],\n },\n {\n countryEn: 'Egypt',\n countryRu: 'Египет',\n countryCode: 'EG',\n dialCode: '20',\n fullCodes: ['20'],\n },\n {\n countryEn: 'El Salvador',\n countryRu: 'Эль-Сальвадор',\n countryCode: 'SV',\n dialCode: '503',\n phoneMask: '9999-9999',\n fullCodes: ['503'],\n },\n {\n countryEn: 'Equatorial Guinea',\n countryRu: 'Экваториальная Гвинея',\n countryCode: 'GQ',\n dialCode: '240',\n fullCodes: ['240'],\n },\n {\n countryEn: 'Eritrea',\n countryRu: 'Эритрея',\n countryCode: 'ER',\n dialCode: '291',\n fullCodes: ['291'],\n },\n {\n countryEn: 'Estonia',\n countryRu: 'Эстония',\n countryCode: 'EE',\n dialCode: '372',\n phoneMask: '9999 999999',\n fullCodes: ['372'],\n },\n {\n countryEn: 'Ethiopia',\n countryRu: 'Эфиопия',\n countryCode: 'ET',\n dialCode: '251',\n fullCodes: ['251'],\n },\n {\n countryEn: 'Fiji',\n countryRu: 'Фиджи',\n countryCode: 'FJ',\n dialCode: '679',\n fullCodes: ['679'],\n },\n {\n countryEn: 'Finland',\n countryRu: 'Финляндия',\n countryCode: 'FI',\n dialCode: '358',\n phoneMask: '99 999 99 99',\n fullCodes: ['358'],\n },\n {\n countryEn: 'France',\n countryRu: 'Франция',\n countryCode: 'FR',\n dialCode: '33',\n phoneMask: '9 99 99 99 99',\n fullCodes: ['33'],\n },\n {\n countryEn: 'French Guiana',\n countryRu: 'Французская Гвиана',\n countryCode: 'GF',\n dialCode: '594',\n fullCodes: ['594'],\n },\n {\n countryEn: 'French Polynesia',\n countryRu: 'Французская Полинезия',\n countryCode: 'PF',\n dialCode: '689',\n fullCodes: ['689'],\n },\n {\n countryEn: 'Gabon',\n countryRu: 'Габон',\n countryCode: 'GA',\n dialCode: '241',\n fullCodes: ['241'],\n },\n {\n countryEn: 'Gambia',\n countryRu: 'Гамбия',\n countryCode: 'GM',\n dialCode: '220',\n fullCodes: ['220'],\n },\n {\n countryEn: 'Georgia',\n countryRu: 'Грузия',\n countryCode: 'GE',\n dialCode: '995',\n fullCodes: ['995'],\n },\n {\n countryEn: 'Germany',\n countryRu: 'Германия',\n countryCode: 'DE',\n dialCode: '49',\n phoneMask: '9999 99999999',\n fullCodes: ['49'],\n },\n {\n countryEn: 'Ghana',\n countryRu: 'Гана',\n countryCode: 'GH',\n dialCode: '233',\n fullCodes: ['233'],\n },\n {\n countryEn: 'Greece',\n countryRu: 'Греция',\n countryCode: 'GR',\n dialCode: '30',\n fullCodes: ['30'],\n },\n {\n countryEn: 'Grenada',\n countryRu: 'Гренада',\n countryCode: 'GD',\n dialCode: '1473',\n fullCodes: ['1473'],\n },\n {\n countryEn: 'Guadeloupe',\n countryRu: 'Гваделупа',\n countryCode: 'GP',\n dialCode: '590',\n dialCodePriority: 0,\n fullCodes: ['590'],\n },\n {\n countryEn: 'Guam',\n countryRu: 'Гуам',\n countryCode: 'GU',\n dialCode: '1671',\n fullCodes: ['1671'],\n },\n {\n countryEn: 'Guatemala',\n countryRu: 'Гватемала',\n countryCode: 'GT',\n dialCode: '502',\n phoneMask: '9999-9999',\n fullCodes: ['502'],\n },\n {\n countryEn: 'Guinea',\n countryRu: 'Гвинея',\n countryCode: 'GN',\n dialCode: '224',\n fullCodes: ['224'],\n },\n {\n countryEn: 'Guinea-Bissau',\n countryRu: 'Гвинея-Бисау',\n countryCode: 'GW',\n dialCode: '245',\n fullCodes: ['245'],\n },\n {\n countryEn: 'Guyana',\n countryRu: 'Гайана',\n countryCode: 'GY',\n dialCode: '592',\n fullCodes: ['592'],\n },\n {\n countryEn: 'Haiti',\n countryRu: 'Гаити',\n countryCode: 'HT',\n dialCode: '509',\n phoneMask: '9999-9999',\n fullCodes: ['509'],\n },\n {\n countryEn: 'Honduras',\n countryRu: 'Гондурас',\n countryCode: 'HN',\n dialCode: '504',\n fullCodes: ['504'],\n },\n {\n countryEn: 'Hong Kong',\n countryRu: 'Гонконг',\n countryCode: 'HK',\n dialCode: '852',\n phoneMask: '9999 9999',\n fullCodes: ['852'],\n },\n {\n countryEn: 'Hungary',\n countryRu: 'Венгрия',\n countryCode: 'HU',\n dialCode: '36',\n fullCodes: ['36'],\n },\n {\n countryEn: 'Iceland',\n countryRu: 'Исландия',\n countryCode: 'IS',\n dialCode: '354',\n phoneMask: '999 9999',\n fullCodes: ['354'],\n },\n {\n countryEn: 'India',\n countryRu: 'Индия',\n countryCode: 'IN',\n dialCode: '91',\n phoneMask: '99999-99999',\n fullCodes: ['91'],\n },\n {\n countryEn: 'Indonesia',\n countryRu: 'Индонезия',\n countryCode: 'ID',\n dialCode: '62',\n fullCodes: ['62'],\n },\n {\n countryEn: 'Iran',\n countryRu: 'Иран',\n countryCode: 'IR',\n dialCode: '98',\n fullCodes: ['98'],\n },\n {\n countryEn: 'Iraq',\n countryRu: 'Ирак',\n countryCode: 'IQ',\n dialCode: '964',\n fullCodes: ['964'],\n },\n {\n countryEn: 'Ireland',\n countryRu: 'Ирландия',\n countryCode: 'IE',\n dialCode: '353',\n phoneMask: '99 9999999',\n fullCodes: ['353'],\n },\n {\n countryEn: 'Israel',\n countryRu: 'Израиль',\n countryCode: 'IL',\n dialCode: '972',\n phoneMask: '999 999 9999',\n fullCodes: ['972'],\n },\n {\n countryEn: 'Italy',\n countryRu: 'Италия',\n countryCode: 'IT',\n dialCode: '39',\n phoneMask: '999 9999999',\n dialCodePriority: 0,\n fullCodes: ['39'],\n },\n {\n countryEn: 'Jamaica',\n countryRu: 'Ямайка',\n countryCode: 'JM',\n dialCode: '1876',\n fullCodes: ['1876'],\n },\n {\n countryEn: 'Japan',\n countryRu: 'Япония',\n countryCode: 'JP',\n dialCode: '81',\n phoneMask: '99 9999 9999',\n fullCodes: ['81'],\n },\n {\n countryEn: 'Jordan',\n countryRu: 'Иордания',\n countryCode: 'JO',\n dialCode: '962',\n fullCodes: ['962'],\n },\n {\n countryEn: 'Kazakhstan',\n countryRu: 'Казахстан',\n countryCode: 'KZ',\n dialCode: '7',\n phoneMask: '(999) 999-99-99',\n dialCodePriority: 1,\n fullCodes: ['7'],\n },\n {\n countryEn: 'Kenya',\n countryRu: 'Кения',\n countryCode: 'KE',\n dialCode: '254',\n fullCodes: ['254'],\n },\n {\n countryEn: 'Kiribati',\n countryRu: 'Кирибати',\n countryCode: 'KI',\n dialCode: '686',\n fullCodes: ['686'],\n },\n {\n countryEn: 'Kosovo',\n countryRu: 'Косово',\n countryCode: 'XK',\n dialCode: '383',\n fullCodes: ['383'],\n },\n {\n countryEn: 'Kuwait',\n countryRu: 'Кувейт',\n countryCode: 'KW',\n dialCode: '965',\n fullCodes: ['965'],\n },\n {\n countryEn: 'Kyrgyzstan',\n countryRu: 'Киргизия',\n countryCode: 'KG',\n dialCode: '996',\n fullCodes: ['996'],\n },\n {\n countryEn: 'Laos',\n countryRu: 'Лаос',\n countryCode: 'LA',\n dialCode: '856',\n fullCodes: ['856'],\n },\n {\n countryEn: 'Latvia',\n countryRu: 'Латвия',\n countryCode: 'LV',\n dialCode: '371',\n fullCodes: ['371'],\n },\n {\n countryEn: 'Lebanon',\n countryRu: 'Ливан',\n countryCode: 'LB',\n dialCode: '961',\n fullCodes: ['961'],\n },\n {\n countryEn: 'Lesotho',\n countryRu: 'Лесото',\n countryCode: 'LS',\n dialCode: '266',\n fullCodes: ['266'],\n },\n {\n countryEn: 'Liberia',\n countryRu: 'Либерия',\n countryCode: 'LR',\n dialCode: '231',\n fullCodes: ['231'],\n },\n {\n countryEn: 'Libya',\n countryRu: 'Ливийская Арабская Джамахирия',\n countryCode: 'LY',\n dialCode: '218',\n fullCodes: ['218'],\n },\n {\n countryEn: 'Liechtenstein',\n countryRu: 'Лихтенштейн',\n countryCode: 'LI',\n dialCode: '423',\n fullCodes: ['423'],\n },\n {\n countryEn: 'Lithuania',\n countryRu: 'Литва',\n countryCode: 'LT',\n dialCode: '370',\n fullCodes: ['370'],\n },\n {\n countryEn: 'Luxembourg',\n countryRu: 'Люксембург',\n countryCode: 'LU',\n dialCode: '352',\n fullCodes: ['352'],\n },\n {\n countryEn: 'Macau',\n countryRu: 'Макао',\n countryCode: 'MO',\n dialCode: '853',\n fullCodes: ['853'],\n },\n {\n countryEn: 'Macedonia',\n countryRu: 'Республика Македония',\n countryCode: 'MK',\n dialCode: '389',\n fullCodes: ['389'],\n },\n {\n countryEn: 'Madagascar',\n countryRu: 'Мадагаскар',\n countryCode: 'MG',\n dialCode: '261',\n fullCodes: ['261'],\n },\n {\n countryEn: 'Malawi',\n countryRu: 'Малави',\n countryCode: 'MW',\n dialCode: '265',\n fullCodes: ['265'],\n },\n {\n countryEn: 'Malaysia',\n countryRu: 'Малайзия',\n countryCode: 'MY',\n dialCode: '60',\n phoneMask: '99-9999-9999',\n fullCodes: ['60'],\n },\n {\n countryEn: 'Maldives',\n countryRu: 'Мальдивы',\n countryCode: 'MV',\n dialCode: '960',\n fullCodes: ['960'],\n },\n {\n countryEn: 'Mali',\n countryRu: 'Мали',\n countryCode: 'ML',\n dialCode: '223',\n fullCodes: ['223'],\n },\n {\n countryEn: 'Malta',\n countryRu: 'Мальта',\n countryCode: 'MT',\n dialCode: '356',\n fullCodes: ['356'],\n },\n {\n countryEn: 'Marshall Islands',\n countryRu: 'Маршалловы острова',\n countryCode: 'MH',\n dialCode: '692',\n fullCodes: ['692'],\n },\n {\n countryEn: 'Martinique',\n countryRu: 'Мартиника',\n countryCode: 'MQ',\n dialCode: '596',\n fullCodes: ['596'],\n },\n {\n countryEn: 'Mauritania',\n countryRu: 'Мавритания',\n countryCode: 'MR',\n dialCode: '222',\n fullCodes: ['222'],\n },\n {\n countryEn: 'Mauritius',\n countryRu: 'Маврикий',\n countryCode: 'MU',\n dialCode: '230',\n fullCodes: ['230'],\n },\n {\n countryEn: 'Mexico',\n countryRu: 'Мексика',\n countryCode: 'MX',\n dialCode: '52',\n phoneMask: '999 999 9999',\n dialCodePriority: 0,\n areaCodes: ['55', '81', '33', '656', '664', '998', '774', '229'],\n fullCodes: ['5255', '5281', '5233', '52656', '52664', '52998', '52774', '52229'],\n },\n {\n countryEn: 'Micronesia',\n countryRu: 'Микронезия, Федеративные Штаты',\n countryCode: 'FM',\n dialCode: '691',\n fullCodes: ['691'],\n },\n {\n countryEn: 'Moldova',\n countryRu: 'Молдова, Республика',\n countryCode: 'MD',\n dialCode: '373',\n phoneMask: '(99) 99-99-99',\n fullCodes: ['373'],\n },\n {\n countryEn: 'Monaco',\n countryRu: 'Монако',\n countryCode: 'MC',\n dialCode: '377',\n fullCodes: ['377'],\n },\n {\n countryEn: 'Mongolia',\n countryRu: 'Монголия',\n countryCode: 'MN',\n dialCode: '976',\n fullCodes: ['976'],\n },\n {\n countryEn: 'Montenegro',\n countryRu: 'Черногория',\n countryCode: 'ME',\n dialCode: '382',\n fullCodes: ['382'],\n },\n {\n countryEn: 'Morocco',\n countryRu: 'Марокко',\n countryCode: 'MA',\n dialCode: '212',\n fullCodes: ['212'],\n },\n {\n countryEn: 'Mozambique',\n countryRu: 'Мозамбик',\n countryCode: 'MZ',\n dialCode: '258',\n fullCodes: ['258'],\n },\n {\n countryEn: 'Myanmar',\n countryRu: 'Мьянма',\n countryCode: 'MM',\n dialCode: '95',\n fullCodes: ['95'],\n },\n {\n countryEn: 'Namibia',\n countryRu: 'Намибия',\n countryCode: 'NA',\n dialCode: '264',\n fullCodes: ['264'],\n },\n {\n countryEn: 'Nauru',\n countryRu: 'Науру',\n countryCode: 'NR',\n dialCode: '674',\n fullCodes: ['674'],\n },\n {\n countryEn: 'Nepal',\n countryRu: 'Непал',\n countryCode: 'NP',\n dialCode: '977',\n fullCodes: ['977'],\n },\n {\n countryEn: 'Netherlands',\n countryRu: 'Нидерланды',\n countryCode: 'NL',\n dialCode: '31',\n phoneMask: '99 99999999',\n fullCodes: ['31'],\n },\n {\n countryEn: 'New Caledonia',\n countryRu: 'Новая Каледония',\n countryCode: 'NC',\n dialCode: '687',\n fullCodes: ['687'],\n },\n {\n countryEn: 'New Zealand',\n countryRu: 'Новая Зеландия',\n countryCode: 'NZ',\n dialCode: '64',\n phoneMask: '999-999-9999',\n fullCodes: ['64'],\n },\n {\n countryEn: 'Nicaragua',\n countryRu: 'Никарагуа',\n countryCode: 'NI',\n dialCode: '505',\n fullCodes: ['505'],\n },\n {\n countryEn: 'Niger',\n countryRu: 'Нигер',\n countryCode: 'NE',\n dialCode: '227',\n fullCodes: ['227'],\n },\n {\n countryEn: 'Nigeria',\n countryRu: 'Нигерия',\n countryCode: 'NG',\n dialCode: '234',\n fullCodes: ['234'],\n },\n {\n countryEn: 'North Korea',\n countryRu: 'Северная Корея',\n countryCode: 'KP',\n dialCode: '850',\n fullCodes: ['850'],\n },\n {\n countryEn: 'Norway',\n countryRu: 'Норвегия',\n countryCode: 'NO',\n dialCode: '47',\n phoneMask: '999 99 999',\n fullCodes: ['47'],\n },\n {\n countryEn: 'Oman',\n countryRu: 'Оман',\n countryCode: 'OM',\n dialCode: '968',\n fullCodes: ['968'],\n },\n {\n countryEn: 'Pakistan',\n countryRu: 'Пакистан',\n countryCode: 'PK',\n dialCode: '92',\n phoneMask: '999-9999999',\n fullCodes: ['92'],\n },\n {\n countryEn: 'Palau',\n countryRu: 'Палау',\n countryCode: 'PW',\n dialCode: '680',\n fullCodes: ['680'],\n },\n {\n countryEn: 'Palestine',\n countryRu: 'Палестинская территория',\n countryCode: 'PS',\n dialCode: '970',\n fullCodes: ['970'],\n },\n {\n countryEn: 'Panama',\n countryRu: 'Панама',\n countryCode: 'PA',\n dialCode: '507',\n fullCodes: ['507'],\n },\n {\n countryEn: 'Papua New Guinea',\n countryRu: 'Папуа-Новая Гвинея',\n countryCode: 'PG',\n dialCode: '675',\n fullCodes: ['675'],\n },\n {\n countryEn: 'Paraguay',\n countryRu: 'Парагвай',\n countryCode: 'PY',\n dialCode: '595',\n fullCodes: ['595'],\n },\n {\n countryEn: 'Peru',\n countryRu: 'Перу',\n countryCode: 'PE',\n dialCode: '51',\n fullCodes: ['51'],\n },\n {\n countryEn: 'Philippines',\n countryRu: 'Филиппины',\n countryCode: 'PH',\n dialCode: '63',\n phoneMask: '9999 9999999',\n fullCodes: ['63'],\n },\n {\n countryEn: 'Poland',\n countryRu: 'Польша',\n countryCode: 'PL',\n dialCode: '48',\n phoneMask: '999-999-999',\n fullCodes: ['48'],\n },\n {\n countryEn: 'Portugal',\n countryRu: 'Португалия',\n countryCode: 'PT',\n dialCode: '351',\n fullCodes: ['351'],\n },\n {\n countryEn: 'Puerto Rico',\n countryRu: 'Пуэрто-Рико',\n countryCode: 'PR',\n dialCode: '1',\n dialCodePriority: 3,\n areaCodes: ['787', '939'],\n fullCodes: ['1787', '1939'],\n },\n {\n countryEn: 'Qatar',\n countryRu: 'Катар',\n countryCode: 'QA',\n dialCode: '974',\n fullCodes: ['974'],\n },\n {\n countryEn: 'Réunion',\n countryRu: 'Реюньон',\n countryCode: 'RE',\n dialCode: '262',\n fullCodes: ['262'],\n },\n {\n countryEn: 'Romania',\n countryRu: 'Румыния',\n countryCode: 'RO',\n dialCode: '40',\n fullCodes: ['40'],\n },\n {\n countryEn: 'Russia',\n countryRu: 'Россия',\n countryCode: 'RU',\n dialCode: '7',\n phoneMask: '(999) 999-99-99',\n dialCodePriority: 0,\n fullCodes: ['7'],\n },\n {\n countryEn: 'Rwanda',\n countryRu: 'Руанда',\n countryCode: 'RW',\n dialCode: '250',\n fullCodes: ['250'],\n },\n {\n countryEn: 'Saint Kitts and Nevis',\n countryRu: 'Сент-Китс и Невис',\n countryCode: 'KN',\n dialCode: '1869',\n fullCodes: ['1869'],\n },\n {\n countryEn: 'Saint Lucia',\n countryRu: 'Сент-Люсия',\n countryCode: 'LC',\n dialCode: '1758',\n fullCodes: ['1758'],\n },\n {\n countryEn: 'Saint Vincent and the Grenadines',\n countryRu: 'Сент-Винсент и Гренадины',\n countryCode: 'VC',\n dialCode: '1784',\n fullCodes: ['1784'],\n },\n {\n countryEn: 'Samoa',\n countryRu: 'Самоа',\n countryCode: 'WS',\n dialCode: '685',\n fullCodes: ['685'],\n },\n {\n countryEn: 'San Marino',\n countryRu: 'Сан-Марино',\n countryCode: 'SM',\n dialCode: '378',\n fullCodes: ['378'],\n },\n {\n countryEn: 'São Tomé and Príncipe',\n countryRu: 'Сан-Томе и Принсипи',\n countryCode: 'ST',\n dialCode: '239',\n fullCodes: ['239'],\n },\n {\n countryEn: 'Saudi Arabia',\n countryRu: 'Саудовская Аравия',\n countryCode: 'SA',\n dialCode: '966',\n fullCodes: ['966'],\n },\n {\n countryEn: 'Senegal',\n countryRu: 'Сенегал',\n countryCode: 'SN',\n dialCode: '221',\n fullCodes: ['221'],\n },\n {\n countryEn: 'Serbia',\n countryRu: 'Сербия',\n countryCode: 'RS',\n dialCode: '381',\n fullCodes: ['381'],\n },\n {\n countryEn: 'Seychelles',\n countryRu: 'Сейшелы',\n countryCode: 'SC',\n dialCode: '248',\n fullCodes: ['248'],\n },\n {\n countryEn: 'Sierra Leone',\n countryRu: 'Сьерра-Леоне',\n countryCode: 'SL',\n dialCode: '232',\n fullCodes: ['232'],\n },\n {\n countryEn: 'Singapore',\n countryRu: 'Сингапур',\n countryCode: 'SG',\n dialCode: '65',\n phoneMask: '9999-9999',\n fullCodes: ['65'],\n },\n {\n countryEn: 'Slovakia',\n countryRu: 'Словакия',\n countryCode: 'SK',\n dialCode: '421',\n fullCodes: ['421'],\n },\n {\n countryEn: 'Slovenia',\n countryRu: 'Словения',\n countryCode: 'SI',\n dialCode: '386',\n fullCodes: ['386'],\n },\n {\n countryEn: 'Solomon Islands',\n countryRu: 'Соломоновы острова',\n countryCode: 'SB',\n dialCode: '677',\n fullCodes: ['677'],\n },\n {\n countryEn: 'Somalia',\n countryRu: 'Сомали',\n countryCode: 'SO',\n dialCode: '252',\n fullCodes: ['252'],\n },\n {\n countryEn: 'South Africa',\n countryRu: 'Южная Африка',\n countryCode: 'ZA',\n dialCode: '27',\n fullCodes: ['27'],\n },\n {\n countryEn: 'South Korea',\n countryRu: 'Южная Корея',\n countryCode: 'KR',\n dialCode: '82',\n phoneMask: '999 9999 9999',\n fullCodes: ['82'],\n },\n {\n countryCode: 'OS',\n countryEn: 'South Ossetia',\n countryRu: 'Южная Осетия',\n phoneMask: '(999) 999-99-99',\n dialCode: '7',\n dialCodePriority: 1,\n fullCodes: ['7'],\n },\n {\n countryEn: 'South Sudan',\n countryRu: 'Южный Судан',\n countryCode: 'SS',\n dialCode: '211',\n fullCodes: ['211'],\n },\n {\n countryEn: 'Spain',\n countryRu: 'Испания',\n countryCode: 'ES',\n dialCode: '34',\n phoneMask: '999 999 999',\n fullCodes: ['34'],\n },\n {\n countryEn: 'Sri Lanka',\n countryRu: 'Шри-Ланка',\n countryCode: 'LK',\n dialCode: '94',\n fullCodes: ['94'],\n },\n {\n countryEn: 'Sudan',\n countryRu: 'Судан',\n countryCode: 'SD',\n dialCode: '249',\n fullCodes: ['249'],\n },\n {\n countryEn: 'Suriname',\n countryRu: 'Суринам',\n countryCode: 'SR',\n dialCode: '597',\n fullCodes: ['597'],\n },\n {\n countryEn: 'Swaziland',\n countryRu: 'Свазиленд',\n countryCode: 'SZ',\n dialCode: '268',\n fullCodes: ['268'],\n },\n {\n countryEn: 'Sweden',\n countryRu: 'Швеция',\n countryCode: 'SE',\n dialCode: '46',\n phoneMask: '(999) 999-999',\n fullCodes: ['46'],\n },\n {\n countryEn: 'Switzerland',\n countryRu: 'Швейцария',\n countryCode: 'CH',\n dialCode: '41',\n phoneMask: '99 999 99 99',\n fullCodes: ['41'],\n },\n {\n countryEn: 'Syria',\n countryRu: 'Сирийская Арабская Республика',\n countryCode: 'SY',\n dialCode: '963',\n fullCodes: ['963'],\n },\n {\n countryEn: 'Taiwan',\n countryRu: 'Тайвань',\n countryCode: 'TW',\n dialCode: '886',\n fullCodes: ['886'],\n },\n {\n countryEn: 'Tajikistan',\n countryRu: 'Таджикистан',\n countryCode: 'TJ',\n dialCode: '992',\n fullCodes: ['992'],\n },\n {\n countryEn: 'Tanzania',\n countryRu: 'Танзания',\n countryCode: 'TZ',\n dialCode: '255',\n fullCodes: ['255'],\n },\n {\n countryEn: 'Thailand',\n countryRu: 'Таиланд',\n countryCode: 'TH',\n dialCode: '66',\n fullCodes: ['66'],\n },\n {\n countryEn: 'Timor-Leste',\n countryRu: 'Тимор-Лесте',\n countryCode: 'TL',\n dialCode: '670',\n fullCodes: ['670'],\n },\n {\n countryEn: 'Togo',\n countryRu: 'Того',\n countryCode: 'TG',\n dialCode: '228',\n fullCodes: ['228'],\n },\n {\n countryEn: 'Tonga',\n countryRu: 'Тонга',\n countryCode: 'TO',\n dialCode: '676',\n fullCodes: ['676'],\n },\n {\n countryEn: 'Trinidad and Tobago',\n countryRu: 'Тринидад и Тобаго',\n countryCode: 'TT',\n dialCode: '1868',\n fullCodes: ['1868'],\n },\n {\n countryEn: 'Tunisia',\n countryRu: 'Тунис',\n countryCode: 'TN',\n dialCode: '216',\n fullCodes: ['216'],\n },\n {\n countryEn: 'Turkey',\n countryRu: 'Турция',\n countryCode: 'TR',\n dialCode: '90',\n phoneMask: '999 999 99 99',\n fullCodes: ['90'],\n },\n {\n countryEn: 'Turkmenistan',\n countryRu: 'Туркмения',\n countryCode: 'TM',\n dialCode: '993',\n fullCodes: ['993'],\n },\n {\n countryEn: 'Tuvalu',\n countryRu: 'Тувалу',\n countryCode: 'TV',\n dialCode: '688',\n fullCodes: ['688'],\n },\n {\n countryEn: 'Uganda',\n countryRu: 'Уганда',\n countryCode: 'UG',\n dialCode: '256',\n fullCodes: ['256'],\n },\n {\n countryEn: 'Ukraine',\n countryRu: 'Украина',\n countryCode: 'UA',\n dialCode: '380',\n phoneMask: '(99) 999 99 99',\n fullCodes: ['380'],\n },\n {\n countryEn: 'United Arab Emirates',\n countryRu: 'Объединенные Арабские Эмираты',\n countryCode: 'AE',\n dialCode: '971',\n fullCodes: ['971'],\n },\n {\n countryEn: 'United Kingdom',\n countryRu: 'Соединенное Королевство',\n countryCode: 'GB',\n dialCode: '44',\n phoneMask: '9999 999999',\n fullCodes: ['44'],\n },\n {\n countryEn: 'United States',\n countryRu: 'Соединенные Штаты',\n countryCode: 'US',\n dialCode: '1',\n phoneMask: '(999) 999-9999',\n dialCodePriority: 0,\n areaCodes: [\n '907',\n '205',\n '251',\n '256',\n '334',\n '479',\n '501',\n '870',\n '480',\n '520',\n '602',\n '623',\n '928',\n '209',\n '213',\n '310',\n '323',\n '408',\n '415',\n '510',\n '530',\n '559',\n '562',\n '619',\n '626',\n '650',\n '661',\n '707',\n '714',\n '760',\n '805',\n '818',\n '831',\n '858',\n '909',\n '916',\n '925',\n '949',\n '951',\n '303',\n '719',\n '970',\n '203',\n '860',\n '202',\n '302',\n '239',\n '305',\n '321',\n '352',\n '386',\n '407',\n '561',\n '727',\n '772',\n '813',\n '850',\n '863',\n '904',\n '941',\n '954',\n '229',\n '404',\n '478',\n '706',\n '770',\n '912',\n '808',\n '319',\n '515',\n '563',\n '641',\n '712',\n '208',\n '217',\n '309',\n '312',\n '618',\n '630',\n '708',\n '773',\n '815',\n '847',\n '219',\n '260',\n '317',\n '574',\n '765',\n '812',\n '316',\n '620',\n '785',\n '913',\n '270',\n '502',\n '606',\n '859',\n '225',\n '318',\n '337',\n '504',\n '985',\n '413',\n '508',\n '617',\n '781',\n '978',\n '301',\n '410',\n '207',\n '231',\n '248',\n '269',\n '313',\n '517',\n '586',\n '616',\n '734',\n '810',\n '906',\n '989',\n '218',\n '320',\n '507',\n '612',\n '651',\n '763',\n '952',\n '314',\n '417',\n '573',\n '636',\n '660',\n '816',\n '228',\n '601',\n '662',\n '406',\n '252',\n '336',\n '704',\n '828',\n '910',\n '919',\n '701',\n '308',\n '402',\n '603',\n '201',\n '609',\n '732',\n '856',\n '908',\n '973',\n '505',\n '575',\n '702',\n '775',\n '212',\n '315',\n '516',\n '518',\n '585',\n '607',\n '631',\n '716',\n '718',\n '845',\n '914',\n '216',\n '330',\n '419',\n '440',\n '513',\n '614',\n '740',\n '937',\n '405',\n '580',\n '918',\n '503',\n '541',\n '215',\n '412',\n '570',\n '610',\n '717',\n '724',\n '814',\n '401',\n '803',\n '843',\n '864',\n '605',\n '423',\n '615',\n '731',\n '865',\n '901',\n '931',\n '210',\n '214',\n '254',\n '281',\n '325',\n '361',\n '409',\n '432',\n '512',\n '713',\n '806',\n '817',\n '830',\n '903',\n '915',\n '936',\n '940',\n '956',\n '972',\n '979',\n '435',\n '801',\n '276',\n '434',\n '540',\n '703',\n '757',\n '804',\n '802',\n '206',\n '253',\n '360',\n '425',\n '509',\n '262',\n '414',\n '608',\n '715',\n '920',\n '304',\n '307',\n ],\n fullCodes: [\n '1907',\n '1205',\n '1251',\n '1256',\n '1334',\n '1479',\n '1501',\n '1870',\n '1480',\n '1520',\n '1602',\n '1623',\n '1928',\n '1209',\n '1213',\n '1310',\n '1323',\n '1408',\n '1415',\n '1510',\n '1530',\n '1559',\n '1562',\n '1619',\n '1626',\n '1650',\n '1661',\n '1707',\n '1714',\n '1760',\n '1805',\n '1818',\n '1831',\n '1858',\n '1909',\n '1916',\n '1925',\n '1949',\n '1951',\n '1303',\n '1719',\n '1970',\n '1203',\n '1860',\n '1202',\n '1302',\n '1239',\n '1305',\n '1321',\n '1352',\n '1386',\n '1407',\n '1561',\n '1727',\n '1772',\n '1813',\n '1850',\n '1863',\n '1904',\n '1941',\n '1954',\n '1229',\n '1404',\n '1478',\n '1706',\n '1770',\n '1912',\n '1808',\n '1319',\n '1515',\n '1563',\n '1641',\n '1712',\n '1208',\n '1217',\n '1309',\n '1312',\n '1618',\n '1630',\n '1708',\n '1773',\n '1815',\n '1847',\n '1219',\n '1260',\n '1317',\n '1574',\n '1765',\n '1812',\n '1316',\n '1620',\n '1785',\n '1913',\n '1270',\n '1502',\n '1606',\n '1859',\n '1225',\n '1318',\n '1337',\n '1504',\n '1985',\n '1413',\n '1508',\n '1617',\n '1781',\n '1978',\n '1301',\n '1410',\n '1207',\n '1231',\n '1248',\n '1269',\n '1313',\n '1517',\n '1586',\n '1616',\n '1734',\n '1810',\n '1906',\n '1989',\n '1218',\n '1320',\n '1507',\n '1612',\n '1651',\n '1763',\n '1952',\n '1314',\n '1417',\n '1573',\n '1636',\n '1660',\n '1816',\n '1228',\n '1601',\n '1662',\n '1406',\n '1252',\n '1336',\n '1704',\n '1828',\n '1910',\n '1919',\n '1701',\n '1308',\n '1402',\n '1603',\n '1201',\n '1609',\n '1732',\n '1856',\n '1908',\n '1973',\n '1505',\n '1575',\n '1702',\n '1775',\n '1212',\n '1315',\n '1516',\n '1518',\n '1585',\n '1607',\n '1631',\n '1716',\n '1718',\n '1845',\n '1914',\n '1216',\n '1330',\n '1419',\n '1440',\n '1513',\n '1614',\n '1740',\n '1937',\n '1405',\n '1580',\n '1918',\n '1503',\n '1541',\n '1215',\n '1412',\n '1570',\n '1610',\n '1717',\n '1724',\n '1814',\n '1401',\n '1803',\n '1843',\n '1864',\n '1605',\n '1423',\n '1615',\n '1731',\n '1865',\n '1901',\n '1931',\n '1210',\n '1214',\n '1254',\n '1281',\n '1325',\n '1361',\n '1409',\n '1432',\n '1512',\n '1713',\n '1806',\n '1817',\n '1830',\n '1903',\n '1915',\n '1936',\n '1940',\n '1956',\n '1972',\n '1979',\n '1435',\n '1801',\n '1276',\n '1434',\n '1540',\n '1703',\n '1757',\n '1804',\n '1802',\n '1206',\n '1253',\n '1360',\n '1425',\n '1509',\n '1262',\n '1414',\n '1608',\n '1715',\n '1920',\n '1304',\n '1307',\n ],\n },\n {\n countryEn: 'Uruguay',\n countryRu: 'Уругвай',\n countryCode: 'UY',\n dialCode: '598',\n fullCodes: ['598'],\n },\n {\n countryEn: 'Uzbekistan',\n countryRu: 'Узбекистан',\n countryCode: 'UZ',\n dialCode: '998',\n fullCodes: ['998'],\n },\n {\n countryEn: 'Vanuatu',\n countryRu: 'Вануату',\n countryCode: 'VU',\n dialCode: '678',\n fullCodes: ['678'],\n },\n {\n countryEn: 'Vatican City',\n countryRu: 'Ватикан',\n countryCode: 'VA',\n dialCode: '39',\n phoneMask: '99 9999 9999',\n dialCodePriority: 1,\n fullCodes: ['39'],\n },\n {\n countryEn: 'Venezuela',\n countryRu: 'Венесуэла',\n countryCode: 'VE',\n dialCode: '58',\n fullCodes: ['58'],\n },\n {\n countryEn: 'Vietnam',\n countryRu: 'Вьетнам',\n countryCode: 'VN',\n dialCode: '84',\n fullCodes: ['84'],\n },\n {\n countryEn: 'Yemen',\n countryRu: 'Йемен',\n countryCode: 'YE',\n dialCode: '967',\n fullCodes: ['967'],\n },\n {\n countryEn: 'Zambia',\n countryRu: 'Замбия',\n countryCode: 'ZM',\n dialCode: '260',\n fullCodes: ['260'],\n },\n {\n countryEn: 'Zimbabwe',\n countryRu: 'Зимбабве',\n countryCode: 'ZW',\n dialCode: '263',\n fullCodes: ['263'],\n },\n];\n","export const mimeTypes = {\n aac: 'audio/aac',\n abw: 'application/x-abiword',\n arc: 'application/x-freearc',\n avi: 'video/x-msvideo',\n azw: 'application/vnd.amazon.ebook',\n bin: 'application/octet-stream',\n bmp: 'image/bmp',\n bz: 'application/x-bzip',\n bz2: 'application/x-bzip2',\n csh: 'application/x-csh',\n css: 'text/css',\n csv: 'text/csv',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n eot: 'application/vnd.ms-fontobject',\n epub: 'application/epub+zip',\n gz: 'application/gzip',\n gif: 'image/gif',\n htm: 'text/html',\n html: 'text/html',\n ico: 'image/vnd.microsoft.icon',\n ics: 'text/calendar',\n jar: 'application/java-archive',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'text/javascript',\n json: 'application/json',\n jsonld: 'application/ld+json',\n mid: '.midi',\n mjs: 'text/javascript',\n mp3: 'audio/mpeg',\n mpeg: 'video/mpeg',\n mpkg: 'application/vnd.apple.installer+xml',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n oga: 'audio/ogg',\n ogv: 'video/ogg',\n ogx: 'application/ogg',\n opus: 'audio/opus',\n otf: 'font/otf',\n png: 'image/png',\n pdf: 'application/pdf',\n php: 'application/php',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n rar: 'application/vnd.rar',\n rtf: 'application/rtf',\n sh: 'application/x-sh',\n svg: 'image/svg+xml',\n swf: 'application/x-shockwave-flash',\n tar: 'application/x-tar',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n ts: 'video/mp2t',\n ttf: 'font/ttf',\n txt: 'text/plain',\n vsd: 'application/vnd.visio',\n wav: 'audio/wav',\n weba: 'audio/webm',\n webm: 'video/webm',\n webp: 'image/webp',\n woff: 'font/woff',\n woff2: 'font/woff2',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n xml: 'XML',\n xul: 'application/vnd.mozilla.xul+xml',\n zip: 'application/zip',\n '3gp': 'video/3gpp',\n '3g2': 'video/3gpp2',\n '7z': 'application/x-7z-compressed',\n} as const;\n\nexport type IMimeType = keyof typeof mimeTypes;\n","import { isNotEmpty, isStringEmpty } from '@true-engineering/true-react-platform-helpers';\nimport type { IPhoneInfo, IPhoneValue } from '../components';\nimport { phoneInfo } from '../constants';\n\nexport const findCountryByCode = (\n countryCode?: string,\n countriesList = phoneInfo,\n): IPhoneInfo | undefined =>\n isNotEmpty(countryCode)\n ? countriesList.find((info) => info.countryCode === countryCode)\n : undefined;\n\nexport const findCountryIndexByCode = (countryCode?: string, countriesList = phoneInfo): number =>\n isNotEmpty(countryCode)\n ? countriesList.findIndex((info) => info.countryCode === countryCode)\n : -1;\n\nexport const getCountryTextByLocale = (country: IPhoneInfo, locale: string): string =>\n locale.toLowerCase() === 'ru' ? country.countryRu : country.countryEn;\n\n/**\n * Мутирует countriesList!\n */\nexport const sortCountriesByLocale = (countriesList: IPhoneInfo[], locale: string): IPhoneInfo[] =>\n countriesList.sort((countryA, countryB) =>\n getCountryTextByLocale(countryA, locale).localeCompare(\n getCountryTextByLocale(countryB, locale),\n ),\n );\n\nexport const checkSearchStringInCountry = (country: IPhoneInfo, searchString: string): boolean => {\n const checkValue = searchString.toLowerCase().trim().replace('+', '');\n\n const possibleValues = [\n country.countryRu,\n country.countryEn,\n ...country.countryRu.split(' '),\n ...country.countryEn.split(' '),\n country.dialCode,\n ].map((part) => part.toLowerCase());\n\n return possibleValues.some((v) => v.startsWith(checkValue));\n};\n\nexport const getFullPhone = (phone?: IPhoneValue): string =>\n (phone?.dialCode ?? '') + (phone?.phoneNumber ?? '');\n\nexport const getCountryCodeFromPhone = (phoneWithCode: string): string | undefined => {\n if (isStringEmpty(phoneWithCode)) {\n return;\n }\n\n // ищем страны, для которых phoneWithCode начинается с fullCode (dialCode + areaCode)\n const matchedCountries = phoneInfo.filter((info) =>\n info.fullCodes.some((fullCode) => phoneWithCode.startsWith(fullCode)),\n );\n\n // если нашлась всего одна — ок, выдаём её\n if (matchedCountries.length === 1) {\n return matchedCountries[0].countryCode;\n }\n\n // если нашлось несколько, выбираем страну с наименьшим dialCodePriority (0 — самая приоритетная)\n const highestPriorityCountries = phoneInfo\n .filter((info) => phoneWithCode.startsWith(info.dialCode))\n .sort((a, b) => (a.dialCodePriority ?? 1000) - (b.dialCodePriority ?? 1000));\n\n return highestPriorityCountries.at(0)?.countryCode;\n};\n\nexport const getPhoneObjFromString = (fullPhone: string, countryCode?: string): IPhoneValue => {\n const newCountryCode = countryCode ?? getCountryCodeFromPhone(fullPhone);\n const dialCode = findCountryByCode(newCountryCode)?.dialCode;\n const phoneNumber = fullPhone.slice(dialCode?.length);\n\n return { dialCode, phoneNumber, countryCode: newCountryCode };\n};\n\nexport const DEFAULT_PHONE_MASK = '+ 9 999 999 999 999 99';\n\nexport const getPhoneMask = (countryCode?: string): string => {\n let mask = DEFAULT_PHONE_MASK;\n if (isNotEmpty(countryCode)) {\n const countrySettings = findCountryByCode(countryCode);\n\n if (countrySettings !== undefined) {\n const dialCodeLength = countrySettings.dialCode.length;\n const areaAndPhoneMask =\n countrySettings.phoneMask ?? mask.substring(2, mask.length - dialCodeLength);\n mask = `+ ${'9'.repeat(dialCodeLength)} ${areaAndPhoneMask}`;\n }\n }\n\n return mask;\n};\n","import { ComponentType, memo } from 'react';\nimport {\n isNotEmpty,\n isString,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { IDataAttributes } from '../types';\n\nexport { default as rgba } from 'hex-to-rgba';\n\n/** @deprecated Используйте `toKebabCase` из `true-react-platform-helpers` */\nexport const transformToKebab = (string: string): string => {\n let result = '';\n string.split('').forEach((char) => {\n if (char.toLowerCase() === char) {\n result += char;\n } else {\n result += `-${char.toLowerCase()}`;\n }\n });\n\n return result;\n};\n\nexport const getParentNode = (element: Element | ShadowRoot | Document): Element =>\n element.nodeName === 'HTML' || element === document\n ? (element as Element)\n : (element.parentNode as Element) ?? (element as ShadowRoot).host;\n\nexport const hasExactParent = (element: Element, parent: Element): boolean => {\n if (element === parent) {\n return true; // Found the exact parent\n }\n\n const parentNode = getParentNode(element);\n\n if (parentNode === element) {\n return false; // Reached the top-level HTML element or Shadow DOM host\n }\n\n return hasExactParent(parentNode, parent);\n};\n\nexport const getStyleComputedProperty = (element: Element): Partial<CSSStyleDeclaration> =>\n element.nodeType !== 1 ? {} : getComputedStyle(element, null);\n\nexport const getScrollParent = (element: Element | Document): Element => {\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return (element as Element).ownerDocument.body;\n case '#document':\n return (element as Document).body;\n }\n\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element as Element) ?? {};\n if (/(auto|scroll|overlay)/.test((overflow ?? '') + (overflowY ?? '') + (overflowX ?? ''))) {\n return element as Element;\n }\n return getScrollParent(getParentNode(element as Element));\n};\n\nexport const isElementOffScreen = (element: HTMLElement, input?: HTMLElement): boolean => {\n const el = element;\n const scrollParent = getScrollParent(element);\n\n const { scrollHeight: scrollHeightWithElement } = scrollParent;\n el.hidden = true;\n const { scrollHeight: scrollHeightWithoutElement } = scrollParent;\n el.hidden = false;\n\n const isOffscreen = scrollHeightWithElement !== scrollHeightWithoutElement;\n\n if (isOffscreen && input !== undefined) {\n const elRect = el.getBoundingClientRect();\n const scrollParentRect = scrollParent.getBoundingClientRect();\n const topOffset = elRect.top - scrollParentRect.top;\n if (input.clientHeight + el.clientHeight > topOffset) {\n return false;\n }\n }\n\n return isOffscreen;\n};\n\nexport const getNumberInRange = (value: number, min = -Infinity, max = Infinity): number =>\n Math.min(max, Math.max(min, value));\n\nconst DEFAULT_THOUSANDS_SEPARATOR = '\\u2009';\n\nexport const formatStringNumber = (\n val?: string,\n separator = DEFAULT_THOUSANDS_SEPARATOR,\n): string => {\n if (val === undefined) {\n return '';\n }\n const parts = val.split('.');\n\n parts[0] = parts[0]\n // убрать лидирующие нули\n .replace(/^0+(?=\\d)/, '')\n // проставить сепараторы тысяч\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n return (parts[1] ?? '').length > 0 ? parts.join('.') : parts[0];\n};\n\nexport const formatNumber = (val?: number, separator = DEFAULT_THOUSANDS_SEPARATOR): string => {\n if (val === undefined || isNaN(val)) {\n return '';\n }\n return formatStringNumber(String(val), separator);\n};\n\nexport const removeStringFormat = (val?: string): string =>\n (val ?? '').replace(',', '.').replace(/\\s/g, '');\n\nexport const stringToNumber = (val?: string): number | undefined => {\n const trimmed = removeStringFormat(val);\n if (trimmed === '') {\n return undefined;\n }\n const num = Number(trimmed);\n return isNaN(num) ? undefined : num;\n};\n\nexport const setCaretPosition = (elem: HTMLInputElement, caretPos: number | null): void => {\n if (caretPos === null || elem === null) {\n return;\n }\n if (elem.selectionStart) {\n elem.focus();\n elem.setSelectionRange(caretPos, caretPos);\n } else {\n elem.focus();\n }\n};\n\nexport const isSpaceChar = (char?: string): boolean =>\n char !== undefined && char.match(/\\s/) !== null;\n\nexport const getNumberLength = (n?: number): number =>\n n === undefined || isNaN(n) ? 0 : n.toString().length;\n\nexport const trimStringToMaxLength = (val: string, maxLength: number): string =>\n val.length > maxLength ? val.slice(0, maxLength) : val;\n\n/** @deprecated Используйте `addDataAttributes` из `true-react-platform-helpers` */\nexport const addDataAttributes = (data: IDataAttributes = {}): IDataAttributes =>\n Object.fromEntries(\n Object.entries(data).map(([key, value]) =>\n (isString(value) && isStringNotEmpty(value)) || isNotEmpty(value)\n ? [`data-${transformToKebab(key)}`, value]\n : [],\n ),\n );\n\nexport const excludeStorybookParams = (params: string[]): RegExp =>\n new RegExp(`^(on.*|${['tweakStyles', 'data', ...params].join('|')})$`);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const genericMemo = memo as <T extends ComponentType<any>>(\n ...args: Parameters<typeof memo<T>>\n) => T;\n","import { DependencyList, useEffect } from 'react';\nimport usePopper, { VirtualElement } from 'react-overlays/usePopper';\nimport { getScrollParent, minWidthModifier } from '../helpers';\nimport { IDropdownWithPopperOptions } from '../types';\n\nexport const useDropdown = ({\n isOpen,\n onDropdownClose,\n referenceElement,\n dropdownElement,\n options,\n dependenciesForPositionUpdating = [],\n}: {\n isOpen: boolean;\n referenceElement: VirtualElement | null | undefined;\n dropdownElement: HTMLElement | null | undefined;\n options?: IDropdownWithPopperOptions;\n dependenciesForPositionUpdating?: DependencyList;\n onDropdownClose: (event: Event) => void;\n}): ReturnType<typeof usePopper> | undefined => {\n const {\n shouldUsePopper = false,\n shouldRenderInBody = false,\n shouldHideOnScroll = false,\n scrollParent = 'document',\n canBeFlipped = false,\n modifiers = [],\n placement = 'bottom-start',\n flipOptions,\n } = options ?? {};\n\n useEffect(() => {\n if (!shouldHideOnScroll || !isOpen) {\n return;\n }\n\n const scrollParentEl =\n scrollParent === 'auto'\n ? getScrollParent(referenceElement as Element)\n : scrollParent === 'document'\n ? document\n : scrollParent;\n scrollParentEl.addEventListener('scroll', onDropdownClose);\n\n return () => {\n scrollParentEl.removeEventListener('scroll', onDropdownClose);\n };\n }, [shouldHideOnScroll, isOpen]);\n\n let popperData: ReturnType<typeof usePopper> | undefined;\n if (shouldUsePopper) {\n // TODO: Вытащить хук из под условия???\n // eslint-disable-next-line react-hooks/rules-of-hooks\n popperData = usePopper(referenceElement, dropdownElement, {\n enabled: isOpen,\n placement,\n modifiers: [\n ...(shouldRenderInBody ? [minWidthModifier] : []),\n {\n name: 'offset',\n options: {\n offset: [0, 6],\n },\n },\n {\n name: 'flip',\n options: {\n fallbackPlacements: canBeFlipped ? ['bottom-start', 'top-start'] : ['bottom-start'],\n ...flipOptions,\n },\n },\n ...modifiers,\n ],\n });\n }\n\n useEffect(() => {\n if (dependenciesForPositionUpdating.length !== 0) {\n popperData?.update();\n }\n }, dependenciesForPositionUpdating);\n\n return popperData;\n};\n","import { MutableRefObject, useLayoutEffect, useRef } from 'react';\n\nexport const useLatestRef = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef(value);\n\n useLayoutEffect(() => {\n ref.current = value;\n });\n\n return ref;\n};\n","import { RefCallback, useEffect, useMemo } from 'react';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useLatestRef } from './use-latest-ref';\n\nexport interface IInsertionRefOptions {\n /** @default false */\n isDisabled?: boolean;\n onIntersection?: VoidFunction;\n onIntersectionEnd?: VoidFunction;\n observerOptions?: IntersectionObserverInit;\n}\n\nexport const useIntersectionRef = ({\n observerOptions,\n ...options\n}: IInsertionRefOptions): RefCallback<Element> => {\n const optionsRef = useLatestRef(options);\n\n const { ref, disconnect } = useMemo(() => {\n const observer = new IntersectionObserver(([{ isIntersecting }]) => {\n const { current } = optionsRef;\n if (current?.isDisabled) {\n return;\n }\n if (isIntersecting) {\n current?.onIntersection?.();\n } else {\n current?.onIntersectionEnd?.();\n }\n }, observerOptions);\n\n const observerRef: RefCallback<Element> = (node) => {\n observer.disconnect();\n if (isNotEmpty(node)) {\n observer.observe(node);\n }\n };\n\n return {\n ref: observerRef,\n disconnect: () => observer.disconnect(),\n };\n }, [optionsRef, observerOptions]);\n\n useEffect(() => disconnect, [disconnect]);\n\n return ref;\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\nexport const useIsMounted = (): (() => boolean) => {\n const isMounted = useRef(false);\n\n useEffect(() => {\n isMounted.current = true;\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return useCallback(() => isMounted.current, []);\n};\n","import { useMemo } from 'react';\nimport { mergeRefs } from '@true-engineering/true-react-platform-helpers';\n\nexport const useMergedRefs: typeof mergeRefs = (refs) => useMemo(() => mergeRefs(refs), refs);\n","import { RefObject, useEffect } from 'react';\nimport { isEmpty, isFunction, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useLatestRef } from './use-latest-ref';\n\nexport const checkElementParentsClassNames = (element: HTMLElement, className: string): boolean => {\n if (element.classList.contains(className)) {\n return true;\n }\n\n if (element === document.body) {\n return false;\n }\n\n if (element.parentElement) {\n return checkElementParentsClassNames(element.parentElement, className);\n }\n\n return false;\n};\n\nexport const isElementOneOfParents = (element: HTMLElement, elToSearch: HTMLElement): boolean => {\n if (element === elToSearch) {\n return true;\n }\n\n if (element === document.body) {\n return false;\n }\n\n if (element.parentElement) {\n return isElementOneOfParents(element.parentElement, elToSearch);\n }\n\n return false;\n};\n\nexport function useOnClickOutsideWithRef<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(\n refOrGetter: RefObject<Elem | null> | (() => Elem | null | undefined) | undefined,\n handler: (event: MouseEvent | TouchEvent) => void,\n ignoreRef?: RefObject<IgnoreElem>,\n): void {\n useOnClickOutside(refOrGetter, handler, undefined, ignoreRef);\n}\n\nexport function useOnClickOutside<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(\n refOrGetter: RefObject<Elem | null> | (() => Elem | null | undefined) | undefined,\n handler: (event: MouseEvent | TouchEvent) => void,\n ignoreClassName?: string,\n ignoreRef?: RefObject<IgnoreElem>,\n): void {\n const optionsRef = useLatestRef({ refOrGetter, ignoreRef, ignoreClassName, handler });\n\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const options = optionsRef.current;\n\n const elem = isFunction(options.refOrGetter)\n ? options.refOrGetter()\n : options.refOrGetter?.current;\n const ignoreElem = options.ignoreRef?.current;\n const target = event.target as HTMLElement;\n\n if (\n isEmpty(elem) ||\n // Do nothing if clicking ref's element or descendent elements\n elem.contains(target) ||\n (isNotEmpty(options.ignoreClassName) &&\n checkElementParentsClassNames(target, options.ignoreClassName)) ||\n (isNotEmpty(ignoreElem) && isElementOneOfParents(target, ignoreElem))\n ) {\n return;\n }\n\n options.handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [optionsRef]);\n}\n","import { useMemo } from 'react';\nimport { IMaybeArray } from '@true-engineering/true-react-platform-helpers';\nimport { IComponentName, IMixedStyles, useThemeComponentStyles } from '../theme';\nimport { mixStyles } from './use-mixed-styles';\n\n// TODO: Можно усилить типы\nexport const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet & `tweak${string}`>({\n innerStyles,\n tweakStyles,\n className,\n currentComponentName,\n}: {\n /**\n * Это tweakStyles, определенные в родительском компоненте\n * (например, стили для Input, определенные в стилях компонента Select)\n */\n innerStyles?: IMixedStyles<StyleSheet[ClassName]>;\n /**\n * Пропса tweakStyles из родительского компонента\n * (это уже непосредственно ISelectProps.tweakStyles)\n */\n tweakStyles?: IMaybeArray<StyleSheet>;\n /**\n * Класс для переопределения tweakStyles из-вне. (Например, 'tweakInput')\n */\n className: ClassName;\n /**\n * Название компонента который вызывает useTweakStyles\n */\n currentComponentName?: IComponentName;\n}): Array<NonNullable<StyleSheet[ClassName]>> => {\n const themeStyles = useThemeComponentStyles<StyleSheet>(currentComponentName);\n\n return useMemo(\n () =>\n mixStyles(\n innerStyles,\n mixStyles(themeStyles, tweakStyles).map((style) => style[className]),\n ),\n [innerStyles, className, themeStyles, tweakStyles],\n );\n};\n","import type { ISvgIcon } from '../types';\nimport avatar from './avatar.svg?raw';\nimport calendar from './calendar.svg?raw';\nimport check from './check.svg?raw';\nimport chevronDownSmall from './chevron-down-small.svg?raw';\nimport chevronDown from './chevron-down.svg?raw';\nimport chevronLeft from './chevron-left.svg?raw';\nimport chevronRight from './chevron-right.svg?raw';\nimport closeLarge from './close-large.svg?raw';\nimport closeWindow from './close-window.svg?raw';\nimport close from './close.svg?raw';\nimport fileExcel from './file-excel.svg?raw';\nimport fileImage from './file-image.svg?raw';\nimport fileOther from './file-other.svg?raw';\nimport filePdf from './file-pdf.svg?raw';\nimport fileWord from './file-word.svg?raw';\nimport fileXml from './file-xml.svg?raw';\nimport fileZip from './file-zip.svg?raw';\nimport filter from './filter.svg?raw';\nimport information from './information.svg?raw';\nimport menu from './menu.svg?raw';\nimport minus from './minus.svg?raw';\nimport plus from './plus.svg?raw';\nimport search from './search.svg?raw';\nimport statusError from './status-error.svg?raw';\nimport statusInfo from './status-info.svg?raw';\nimport statusNotOk from './status-not-ok.svg?raw';\nimport statusOk from './status-ok.svg?raw';\nimport statusWarning from './status-warning.svg?raw';\nimport trashCan from './trash-can.svg?raw';\n\nexport const iconsMap = {\n avatar,\n calendar,\n check,\n 'chevron-down-small': chevronDownSmall,\n 'chevron-down': chevronDown,\n 'chevron-left': chevronLeft,\n 'chevron-right': chevronRight,\n 'close-large': closeLarge,\n 'close-window': closeWindow,\n close,\n 'file-excel': fileExcel,\n 'file-image': fileImage,\n 'file-other': fileOther,\n 'file-pdf': filePdf,\n 'file-word': fileWord,\n 'file-xml': fileXml,\n 'file-zip': fileZip,\n filter,\n information,\n menu,\n minus,\n plus,\n search,\n 'status-error': statusError,\n 'status-info': statusInfo,\n 'status-not-ok': statusNotOk,\n 'status-ok': statusOk,\n 'status-warning': statusWarning,\n 'trash-can': trashCan,\n} satisfies Record<string, ISvgIcon>;\n","export default \" <svg\\n width=\\\"100%\\\"\\n height=\\\"100%\\\"\\n viewBox=\\\"0 0 32 32\\\"\\n fill=\\\"none\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n >\\n <circle opacity=\\\"0.5\\\" cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"16\\\" fill=\\\"#DDE3ED\\\" />\\n <mask\\n id=\\\"mask0_0_12744\\\"\\n style=\\\"mask-type: 'alpha';\\\"\\n maskUnits=\\\"userSpaceOnUse\\\"\\n x=\\\"0\\\"\\n y=\\\"0\\\"\\n width=\\\"32\\\"\\n height=\\\"32\\\"\\n >\\n <circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"16\\\" fill=\\\"white\\\" />\\n </mask>\\n <g mask=\\\"url(#mask0_0_12744)\\\">\\n <circle cx=\\\"16\\\" cy=\\\"29\\\" r=\\\"13\\\" fill=\\\"url(#paint0_linear_0_12744)\\\" />\\n <mask\\n id=\\\"mask1_0_12744\\\"\\n style=\\\"mask-type: 'alpha';\\\"\\n maskUnits=\\\"userSpaceOnUse\\\"\\n x=\\\"3\\\"\\n y=\\\"16\\\"\\n width=\\\"26\\\"\\n height=\\\"26\\\"\\n >\\n <circle cx=\\\"16\\\" cy=\\\"29\\\" r=\\\"13\\\" fill=\\\"white\\\" />\\n </mask>\\n <g mask=\\\"url(#mask1_0_12744)\\\">\\n <ellipse\\n cx=\\\"16\\\"\\n cy=\\\"17.5\\\"\\n rx=\\\"6\\\"\\n ry=\\\"7.5\\\"\\n fill=\\\"#505F79\\\"\\n fill-opacity=\\\"0.204983\\\"\\n />\\n </g>\\n </g>\\n <ellipse cx=\\\"16\\\" cy=\\\"13\\\" rx=\\\"6\\\" ry=\\\"7\\\" fill=\\\"white\\\" />\\n <defs>\\n <linearGradient\\n id=\\\"paint0_linear_0_12744\\\"\\n x1=\\\"13.347\\\"\\n y1=\\\"46.279\\\"\\n x2=\\\"33.5318\\\"\\n y2=\\\"30.8088\\\"\\n gradientUnits=\\\"userSpaceOnUse\\\"\\n >\\n <stop stop-color=\\\"#ABD229\\\" />\\n <stop offset=\\\"1\\\" stop-color=\\\"#9CD03F\\\" />\\n </linearGradient>\\n </defs>\\n </svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M6 12h3V9H6v3zm-2 4V7h12l.002 9H4zM16 4h-1V3c0-.552-.448-1-1-1s-1 .448-1 1v1H7V3c0-.552-.448-1-1-1s-1 .448-1 1v1H4c-1.103 0-2 .897-2 2v10c0 1.103.897 2 2 2h12c1.103 0 2-.897 2-2V6c0-1.103-.897-2-2-2z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"m7.5 13.086 7.793-7.793a1 1 0 1 1 1.414 1.414l-8.5 8.5a1 1 0 0 1-1.414 0l-3.5-3.5a1 1 0 1 1 1.414-1.414L7.5 13.086Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M8.24512 8.84751L11.038 6.05461C11.4285 5.66409 12.0617 5.66409 12.4522 6.05461C12.8427 6.44514 12.8427 7.0783 12.4522 7.46883L8.95222 10.9688C8.5617 11.3593 7.92853 11.3593 7.53801 10.9688L4.03801 7.46883C3.64749 7.0783 3.64749 6.44514 4.03801 6.05461C4.42853 5.66409 5.0617 5.66409 5.45222 6.05461L8.24512 8.84751Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10.0029 11.6053L5.71004 7.31242C5.31951 6.9219 4.68635 6.9219 4.29582 7.31242C3.9053 7.70295 3.9053 8.33611 4.29582 8.72664L9.29582 13.7266C9.68635 14.1172 10.3195 14.1172 10.71 13.7266L15.71 8.72664C16.1006 8.33611 16.1006 7.70295 15.71 7.31242C15.3195 6.9219 14.6863 6.9219 14.2958 7.31242L10.0029 11.6053Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M8.41421 10L12.7071 5.70711C13.0976 5.31658 13.0976 4.68342 12.7071 4.29289C12.3166 3.90237 11.6834 3.90237 11.2929 4.29289L6.29289 9.29289C5.90237 9.68342 5.90237 10.3166 6.29289 10.7071L11.2929 15.7071C11.6834 16.0976 12.3166 16.0976 12.7071 15.7071C13.0976 15.3166 13.0976 14.6834 12.7071 14.2929L8.41421 10Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M11.5858 10L7.29289 5.70711C6.90237 5.31658 6.90237 4.68342 7.29289 4.29289C7.68342 3.90237 8.31658 3.90237 8.70711 4.29289L13.7071 9.29289C14.0976 9.68342 14.0976 10.3166 13.7071 10.7071L8.70711 15.7071C8.31658 16.0976 7.68342 16.0976 7.29289 15.7071C6.90237 15.3166 6.90237 14.6834 7.29289 14.2929L11.5858 10Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M6.102 4.709c-.446-.36-1.055-.373-1.415-.012-.39.39-.342 1.072.108 1.523l3.783 3.782-3.783 3.782-.096.108c-.36.446-.373 1.055-.012 1.415.39.391 1.072.342 1.523-.108l3.782-3.783 3.782 3.783.108.097c.446.358 1.055.372 1.415.011.39-.39.342-1.072-.108-1.523l-3.783-3.782L15.19 6.22l.097-.108c.358-.446.372-1.055.011-1.415-.39-.39-1.072-.342-1.523.108L9.992 8.588 6.21 4.805l-.108-.096Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"currentColor\\\" d=\\\"M4.5 4.5l11 11m0-11l-11 11\\\" stroke-width=\\\"2\\\" stroke-linejoin=\\\"round\\\" stroke-linecap=\\\"round\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M11.985 10l2.407-2.293c.41-.39.41-1.023 0-1.414-.41-.39-1.074-.39-1.485 0L10.5 8.586 8.093 6.293c-.411-.39-1.075-.39-1.485 0-.41.391-.41 1.023 0 1.414L9.015 10l-2.407 2.293c-.41.391-.41 1.023 0 1.414.205.195.473.293.742.293s.538-.098.743-.293l2.407-2.293 2.407 2.293c.205.195.474.293.743.293s.537-.098.742-.293c.41-.391.41-1.023 0-1.414L11.985 10z\\\"></path></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#21A366\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16081)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M8.00342 14.5244L10.0728 11.3062L12.1357 14.5244H14.4019L11.2217 9.73828L14.1162 5.21875H11.939L10.1108 8.2085L8.24463 5.21875H6.04834L8.93018 9.66846L5.75 14.5244H8.00342Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16081\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#FF991F\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16103)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M3.90113 15C3.09595 15 2.62093 14.097 3.07709 13.4335L6.67606 8.19861C7.07341 7.62064 7.9268 7.62065 8.32414 8.19861L13.0001 15H3.90113Z\\\" fill=\\\"white\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M9.53962 15L12.7076 10.2481C13.1034 9.65434 13.9758 9.65434 14.3717 10.2481L16.5031 13.4453C16.9462 14.1099 16.4698 15 15.6711 15H9.53962Z\\\" fill=\\\"white\\\"/>\\n <path d=\\\"M16.0001 5.5C16.0001 6.32843 15.3285 7 14.5001 7C13.6717 7 13.0001 6.32843 13.0001 5.5C13.0001 4.67157 13.6717 4 14.5001 4C15.3285 4 16.0001 4.67157 16.0001 5.5Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16103\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M18 6.60751L11.392 -0.000488281L5 0.000113437C3.34315 0.000113437 2 1.34326 2 3.00011V17.0001C2 18.657 3.34315 20.0001 5 20.0001H15C16.6569 20.0001 18 18.657 18 17.0001V6.60751ZM17 8.00011L10 1.00011V6.00011C10 7.10468 10.8954 8.00011 12 8.00011H17Z\\\" fill=\\\"#AABFFC\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M18 6.60751L11.392 -0.000488281L5 0.000113437C3.34315 0.000113437 2 1.34326 2 3.00011V17.0001C2 18.657 3.34315 20.0001 5 20.0001H15C16.6569 20.0001 18 18.657 18 17.0001V6.60751ZM17 8.00011L10 1.00011V6.00011C10 7.10468 10.8954 8.00011 12 8.00011H17Z\\\" fill=\\\"url(#paint0_linear_0_16113)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16113\\\" x1=\\\"-5.9615\\\" y1=\\\"9.95168\\\" x2=\\\"13.4572\\\" y2=\\\"25.4862\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#FF5630\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16087)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M4.55535 13.6488V11.0388H4.92535C5.65535 11.0388 5.93535 10.9988 6.27535 10.8688C6.97535 10.5988 7.36535 9.92876 7.36535 8.99876C7.36535 8.21876 7.07535 7.57876 6.57535 7.25876C6.27535 7.06876 5.82535 6.97876 5.09535 6.97876H2.98535V13.6488H4.55535ZM4.84535 9.90876H4.54535V8.10876H4.84535C5.51535 8.10876 5.75535 8.34876 5.75535 9.02876C5.75535 9.66876 5.51535 9.90876 4.84535 9.90876ZM11.6393 13.4388C11.2793 13.5988 10.9993 13.6488 10.4393 13.6488H8.21935V6.97876H10.2593C11.2393 6.97876 11.7193 7.11876 12.1093 7.52876C12.5993 8.02876 12.7693 8.71876 12.7693 10.1388C12.7693 10.9388 12.7093 11.6788 12.6093 12.1588C12.4893 12.7388 12.1193 13.2188 11.6393 13.4388ZM10.0793 12.5188H9.79935V8.10876H10.0193C10.9713 8.10876 11.1466 8.35839 11.1586 9.95112L11.1593 10.1488C11.1593 12.2088 11.0193 12.5188 10.0793 12.5188ZM15.3333 10.8188V13.6488H13.7533V6.97876H17.6033V8.23876H15.3333V9.58876H17.4433V10.8188H15.3333Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16087\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#2C7CD3\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16075)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M8.0542 14.9946L9.90137 8.0376L11.7549 14.9946H13.748L16.0078 5.68896H14.1162L12.688 12.189L11.0566 5.68896H8.82227L7.12109 12.0811L5.71826 5.68896H3.79492L6.0166 14.9946H8.0542Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16075\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#FF991F\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_2163_24057)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M1.97561 5.99658L3.56111 9.43008L1.84961 13.0001H3.66611L4.21211 11.6771C4.40111 11.0996 4.45361 10.8791 4.49561 10.6166H4.52711C4.54811 10.8686 4.61111 11.1101 4.77911 11.5826L5.34611 13.0001H7.20461L5.49311 9.44058L7.07861 5.99658H5.28311L4.86311 7.06758C4.85261 7.08858 4.83161 7.16208 4.80011 7.25658C4.75811 7.44558 4.70561 7.63458 4.65311 7.82358C4.60061 8.02308 4.57961 8.10708 4.56911 8.23308H4.52711C4.49561 8.02308 4.43261 7.78158 4.27511 7.23558L3.82361 5.99658H1.97561Z\\\" fill=\\\"white\\\"/>\\n <path d=\\\"M7.53437 5.99658V13.0001H9.05687V9.78708L9.02537 9.34608L8.98337 8.41158C8.98337 8.33808 8.96237 8.00208 8.92037 7.47708H8.98337C9.05687 7.90758 9.10937 8.21208 9.18287 8.53758C9.24587 8.87358 9.34037 9.28308 9.44537 9.77658L10.1804 13.0001H11.3984L12.1544 9.59808C12.2909 8.98908 12.5324 7.79208 12.5744 7.47708H12.6374C12.6059 7.80258 12.5849 8.01258 12.5744 8.22258L12.5534 8.98908C12.5429 9.25158 12.5324 9.52458 12.5219 9.80808V13.0001H14.0444V5.99658H11.6714L11.2409 8.10708C11.0834 8.74758 10.8419 10.3751 10.8419 10.8161L10.7999 10.8266C10.7894 10.2911 10.5269 8.61108 10.3274 7.85508L9.92837 5.99658H7.53437Z\\\" fill=\\\"white\\\"/>\\n <path d=\\\"M14.8685 5.99658V13.0001H18.89V11.6666H16.5275V5.99658H14.8685Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_2163_24057\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <g clip-path=\\\"url(#clip0_922_22603)\\\">\\n <path d=\\\"M16 0H4C1.79086 0 0 1.79086 0 4V16C0 18.2091 1.79086 20 4 20H16C18.2091 20 20 18.2091 20 16V4C20 1.79086 18.2091 0 16 0Z\\\" fill=\\\"#A1D237\\\"/>\\n <path d=\\\"M16 0H4C1.79086 0 0 1.79086 0 4V16C0 18.2091 1.79086 20 4 20H16C18.2091 20 20 18.2091 20 16V4C20 1.79086 18.2091 0 16 0Z\\\" fill=\\\"url(#paint0_linear_922_22603)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M8.32086 14V12.6807H6.32086C5.92513 12.6807 5.72193 12.6927 5.58289 12.7166C5.64706 12.6207 5.68984 12.5367 5.73262 12.4528C5.7861 12.3568 5.83957 12.2609 5.89305 12.1529L8.28877 7.22339V6H4.17112V7.31934H6.20321C6.39572 7.31934 6.59893 7.30735 6.69519 7.29535C6.58824 7.47526 6.49198 7.65517 6.41711 7.81109L4 12.8246V14H8.32086ZM10.4813 14V6H9.03743V14H10.4813ZM12.9519 14V10.8096H13.4439C14.2139 10.8096 14.5241 10.7616 14.877 10.6057C15.5936 10.2699 16 9.47826 16 8.38681C16 7.45127 15.6898 6.69565 15.1444 6.32384C14.8342 6.09595 14.3743 6 13.6364 6H11.508V14H12.9519ZM13.4118 9.6102H12.9519V7.1994H13.3797C13.7219 7.1994 13.9679 7.24738 14.107 7.34333C14.385 7.53523 14.5241 7.87106 14.5241 8.38681C14.5241 8.91454 14.4064 9.25037 14.1497 9.44228C13.9893 9.57421 13.8075 9.6102 13.4118 9.6102Z\\\" fill=\\\"white\\\"/>\\n </g>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_922_22603\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n <clipPath id=\\\"clip0_922_22603\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" fill=\\\"white\\\"/>\\n </clipPath>\\n </defs>\\n</svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M12 11c1.306 0 2.417.834 2.829 2H17c.552 0 1 .448 1 1s-.448 1-1 1h-2.17c-.412 1.165-1.524 2-2.83 2s-2.418-.835-2.83-2H3c-.552 0-1-.448-1-1s.448-1 1-1h6.171c.412-1.166 1.523-2 2.829-2zM5 3c1.306 0 2.417.834 2.829 2H17c.552 0 1 .448 1 1s-.448 1-1 1H7.83C7.417 8.165 6.305 9 5 9 3.343 9 2 7.657 2 6s1.343-3 3-3z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 8c-.552 0-1-.448-1-1s.448-1 1-1 1 .448 1 1-.448 1-1 1zm0 8c3.307 0 6-2.693 6-6 0-3.308-2.693-6-6-6-3.308 0-6 2.692-6 6 0 3.307 2.692 6 6 6zm0-14c2.122 0 4.157.843 5.657 2.343S18 7.878 18 10s-.843 4.157-2.343 5.657S12.122 18 10 18s-4.157-.843-5.657-2.343S2 12.122 2 10c0-4.418 3.582-8 8-8zm0 12c-.552 0-1-.448-1-1v-3c0-.552.448-1 1-1s1 .448 1 1v3c0 .552-.448 1-1 1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"1 1 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M5.08154 9.02148C5.08154 8.77083 5.16211 8.55778 5.32324 8.38232C5.48438 8.20687 5.70817 8.11914 5.99463 8.11914C6.28109 8.11914 6.50667 8.20687 6.67139 8.38232C6.8361 8.55778 6.91846 8.77083 6.91846 9.02148C6.91846 9.27214 6.8361 9.47803 6.67139 9.63916C6.50667 9.80029 6.28109 9.88086 5.99463 9.88086C5.70817 9.88086 5.48438 9.80029 5.32324 9.63916C5.16211 9.47803 5.08154 9.27214 5.08154 9.02148ZM8.08154 9.02148C8.08154 8.77083 8.16211 8.55778 8.32324 8.38232C8.48438 8.20687 8.70817 8.11914 8.99463 8.11914C9.28109 8.11914 9.50667 8.20687 9.67139 8.38232C9.8361 8.55778 9.91846 8.77083 9.91846 9.02148C9.91846 9.27214 9.8361 9.47803 9.67139 9.63916C9.50667 9.80029 9.28109 9.88086 8.99463 9.88086C8.70817 9.88086 8.48438 9.80029 8.32324 9.63916C8.16211 9.47803 8.08154 9.27214 8.08154 9.02148ZM11.0815 9.02148C11.0815 8.77083 11.1621 8.55778 11.3232 8.38232C11.4844 8.20687 11.7082 8.11914 11.9946 8.11914C12.2811 8.11914 12.5067 8.20687 12.6714 8.38232C12.8361 8.55778 12.9185 8.77083 12.9185 9.02148C12.9185 9.27214 12.8361 9.47803 12.6714 9.63916C12.5067 9.80029 12.2811 9.88086 11.9946 9.88086C11.7082 9.88086 11.4844 9.80029 11.3232 9.63916C11.1621 9.47803 11.0815 9.27214 11.0815 9.02148Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M16 11H4a1 1 0 1 1 0-2h12a1 1 0 1 1 0 2Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M16 11h-5v5a1 1 0 1 1-2 0v-5H4a1 1 0 1 1 0-2h5V4a1 1 0 0 1 2 0v5h5a1 1 0 1 1 0 2Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M9 2c3.866 0 7 3.134 7 7 0 1.7-.606 3.259-1.614 4.472l2.589 2.59c.39.39.39 1.023 0 1.414-.39.39-1.024.39-1.414 0l-2.662-2.661C11.785 15.563 10.443 16 9 16c-3.866 0-7-3.134-7-7s3.134-7 7-7zm0 2C6.239 4 4 6.239 4 9s2.239 5 5 5 5-2.239 5-5-2.239-5-5-5z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M14 11H6c-.552 0-1-.448-1-1s.448-1 1-1h8c.552 0 1 .448 1 1s-.448 1-1 1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M10 15c-.552 0-1-.448-1-1v-4c0-.552.448-1 1-1s1 .448 1 1v4c0 .552-.448 1-1 1zM10 7c-.552 0-1-.448-1-1s.448-1 1-1 1 .448 1 1-.448 1-1 1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M11.414 10l2.293-2.293c.391-.391.391-1.023 0-1.414-.39-.391-1.023-.391-1.414 0L10 8.586 7.707 6.293c-.39-.391-1.023-.391-1.414 0-.39.391-.39 1.023 0 1.414L8.586 10l-2.293 2.293c-.39.391-.39 1.023 0 1.414.195.195.451.293.707.293.256 0 .512-.098.707-.293L10 11.414l2.293 2.293c.195.195.451.293.707.293.256 0 .512-.098.707-.293.391-.391.391-1.023 0-1.414L11.414 10z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M8.333 11.252l4.96-4.96c.39-.39 1.024-.39 1.414 0 .39.391.39 1.025 0 1.415L9.04 13.374c-.39.39-1.023.39-1.414 0L5.293 11.04c-.39-.39-.39-1.023 0-1.414.39-.39 1.024-.39 1.414 0l1.626 1.626z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M10 5c-.552 0-1 .448-1 1v4c0 .552.448 1 1 1s1-.448 1-1V6c0-.552-.448-1-1-1zM10 13c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M16 6v10c0 1.105-.895 2-2 2H6c-1.105 0-2-.895-2-2V6h12zM8 8c-.552 0-1 .448-1 1v6c0 .552.448 1 1 1s1-.448 1-1V9c0-.552-.448-1-1-1zm4 0c-.552 0-1 .448-1 1v6c0 .552.448 1 1 1s1-.448 1-1V9c0-.552-.448-1-1-1zm0-6l1 1h3c.552 0 1 .448 1 1s-.448 1-1 1H4c-.552 0-1-.448-1-1s.448-1 1-1h3l1-1h4z\\\"></path></svg>\"","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Icon', {\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport type IIconStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { addDataAttributes, isEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTheme } from '../../theme';\nimport { ICommonProps } from '../../types';\nimport { iconsMap } from './icons';\nimport { IIconType } from './types';\nimport { IIconStyles, useStyles } from './Icon.styles';\n\nexport interface IIconProps extends ICommonProps<IIconStyles> {\n type: IIconType;\n}\n\nexport const Icon: FC<IIconProps> = ({ type, data, testId, tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n const theme = useTheme();\n\n const icon = theme.icons?.[type] ?? iconsMap[type];\n\n if (isEmpty(icon)) {\n console.error(`Иконки ${type} не существует`);\n return null;\n }\n\n return (\n <div\n className={classes.root}\n {...addDataAttributes(data, testId)}\n dangerouslySetInnerHTML={{ __html: icon }}\n />\n );\n};\n","import { ReactNode } from 'react';\nimport { Icon } from './Icon';\nimport { IIcon } from './types';\n\nexport const renderIcon = (icon: IIcon): ReactNode =>\n typeof icon === 'string' ? <Icon type={icon} /> : icon;\n","import { Middleware, size } from '@floating-ui/react';\n\nexport const minWidthRelativeToTrigger: Middleware = size({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n minWidth: `${rects.reference.width}px`,\n });\n },\n});\n","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('WithPopup', {\n trigger: {\n width: 'fit-content',\n },\n\n clickable: {\n cursor: 'pointer',\n },\n\n active: {},\n\n disabled: {\n cursor: 'auto',\n },\n\n popup: {\n zIndex: 5,\n outline: 'none',\n },\n\n arrow: {},\n\n animationEnd: {},\n\n animationStart: {},\n\n 'dropdown-initial': {\n extend: 'animationEnd',\n },\n\n 'dropdown-open': {\n extend: 'animationStart',\n },\n\n 'dropdown-close': {\n visibility: 'hidden',\n extend: 'animationEnd',\n },\n\n 'dropdown-unmounted': {\n extend: 'animationEnd',\n },\n});\n\nexport type IWithPopupStyles = ITweakStyles<typeof useStyles>;\n","import { FC, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n applyAction,\n stopPropagation,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport {\n autoUpdate,\n useFloating,\n useClick,\n useDismiss,\n useHover,\n useInteractions,\n Placement,\n Middleware,\n FloatingPortal,\n offset,\n flip,\n useTransitionStatus,\n OffsetOptions,\n UseHoverProps,\n safePolygon,\n useFocus,\n FloatingArrow,\n arrow,\n UseClickProps,\n UseFocusProps,\n UseDismissProps,\n UseTransitionStatusProps,\n} from '@floating-ui/react';\nimport { ICommonProps, IDataAttributes, IRenderNode } from '../../types';\nimport { DEFAULT_OFFSET } from './constants';\nimport { minWidthRelativeToTrigger } from './helpers';\nimport {\n IPopupArrowProps,\n IPopupEventType,\n IReferenceProps,\n IWithPopupChildrenProps,\n IWithPopupToggleEvent,\n IWithPopupTriggerProps,\n} from './types';\nimport { useStyles, IWithPopupStyles } from './WithPopup.styles';\n\nexport interface IWithPopupProps extends ICommonProps<IWithPopupStyles> {\n trigger: IRenderNode<IWithPopupTriggerProps>;\n children: IRenderNode<IWithPopupChildrenProps>;\n middlewares?: Middleware[];\n /** @default eventType === 'click' ? 'bottom-end' : 'top' */\n placement?: Placement;\n /** @default 'click' */\n eventType?: IPopupEventType;\n /**\n * @deprecated Используйте hoverOptions\n * @default 0\n */\n hoverDelay?: number;\n /** @default 6 */\n popupOffset?: OffsetOptions;\n arrowProps?: IPopupArrowProps;\n popupData?: IDataAttributes;\n /** @default true, if eventType === click */\n shouldStopPropagation?: boolean;\n /** @default false */\n shouldHideOnScroll?: boolean;\n /** @default true */\n shouldRenderInBody?: boolean;\n /** Должен ли WithPopup рендерить свой div-wrapper в качестве триггера\n * @default true, if eventType === hover */\n isTriggerWrapped?: boolean;\n /** @default true */\n canBeFlipped?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n shouldShowArrow?: boolean;\n /** Должна ли минимальная ширина попапа быть равна ширине триггера\n * @default false */\n isMinWidthSameAsTrigger?: boolean;\n hoverOptions?: UseHoverProps;\n clickOptions?: UseClickProps;\n focusOptions?: UseFocusProps;\n dismissOptions?: UseDismissProps;\n transitionOptions?: UseTransitionStatusProps;\n onToggle?: (isActive: boolean, event?: IWithPopupToggleEvent) => void;\n}\n\nexport const WithPopup: FC<IWithPopupProps> = ({\n trigger,\n children,\n middlewares = [],\n eventType = 'click',\n placement = eventType === 'click' ? 'bottom-end' : 'top',\n hoverDelay = 0,\n popupOffset = DEFAULT_OFFSET,\n arrowProps,\n popupData,\n shouldStopPropagation = eventType === 'click',\n shouldHideOnScroll = false,\n shouldRenderInBody = true,\n canBeFlipped = true,\n isTriggerWrapped = eventType === 'hover',\n isDisabled = false,\n shouldShowArrow = false,\n isMinWidthSameAsTrigger = false,\n hoverOptions,\n clickOptions,\n focusOptions,\n dismissOptions,\n transitionOptions,\n tweakStyles,\n data,\n testId,\n onToggle,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const [isOpen, setIsOpen] = useState(false);\n const isActive = isOpen && !isDisabled;\n\n const arrowRef = useRef<SVGSVGElement>(null);\n\n const handleToggle = (next: boolean, event?: IWithPopupToggleEvent) => {\n event?.stopPropagation();\n onToggle?.(next, event);\n setIsOpen(next);\n };\n\n const handleClose = (event?: IWithPopupToggleEvent) => {\n handleToggle(false, event);\n };\n\n const { refs, floatingStyles, context } = useFloating({\n open: isActive,\n middleware: [\n offset(popupOffset),\n canBeFlipped && flip({ fallbackAxisSideDirection: 'start' }),\n isMinWidthSameAsTrigger && minWidthRelativeToTrigger,\n ...middlewares,\n shouldShowArrow && arrow({ element: arrowRef }),\n ],\n whileElementsMounted: autoUpdate,\n placement,\n onOpenChange: handleToggle,\n });\n\n const hover = useHover(context, {\n enabled: eventType === 'hover',\n delay: { open: hoverDelay, close: 0 },\n handleClose: safePolygon(),\n ...hoverOptions,\n });\n\n const focus = useFocus(context, { enabled: eventType === 'hover', ...focusOptions });\n\n const click = useClick(context, { enabled: eventType === 'click', ...clickOptions });\n\n const dismiss = useDismiss(context, {\n enabled: eventType === 'click',\n ancestorScroll: shouldHideOnScroll,\n ...dismissOptions,\n });\n\n const { getFloatingProps, getReferenceProps } = useInteractions([hover, click, focus, dismiss]);\n\n const { isMounted, status } = useTransitionStatus(context, {\n duration: { close: 500 },\n ...transitionOptions,\n });\n\n const referenceProps: IReferenceProps = getReferenceProps({\n ref: refs.setReference,\n ...(shouldStopPropagation && {\n onClick: stopPropagation,\n }),\n });\n\n const triggerElement = applyAction(trigger, {\n referenceProps: !isTriggerWrapped ? referenceProps : undefined,\n triggerProps: {\n isActive,\n isDisabled,\n ...(!isTriggerWrapped && { data, testId, ...referenceProps }),\n },\n });\n\n return (\n <>\n {isTriggerWrapped ? (\n <div\n className={clsx(classes.trigger, {\n [classes.clickable]: eventType === 'click',\n [classes.disabled]: isDisabled,\n [classes.active]: isActive,\n })}\n {...referenceProps}\n {...addDataAttributes(data, testId)}\n >\n {triggerElement}\n </div>\n ) : (\n triggerElement\n )}\n {isMounted && (\n <FloatingPortal\n root={shouldRenderInBody ? document.body : (refs.reference.current as HTMLElement)}\n >\n <div\n ref={refs.setFloating}\n style={floatingStyles}\n className={classes.popup}\n {...getFloatingProps()}\n {...addDataAttributes(popupData, testId, 'popup')}\n >\n <div className={classes[`dropdown-${status}`]}>\n {shouldShowArrow && (\n <FloatingArrow\n {...arrowProps}\n ref={arrowRef}\n context={context}\n className={classes.arrow}\n />\n )}\n {applyAction(children, { floatingContext: context, onClose: handleClose })}\n </div>\n </div>\n </FloatingPortal>\n )}\n </>\n );\n};\n","export const DEFAULT_OFFSET = 6;\n\nexport const POPUP_EVENT_TYPES = ['hover', 'click'] as const;\n","import { animations, colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport type { IListSizes as IListItemSizes } from '../../types';\n\nconst ITEM_HORIZONTAL_PADDING = 16;\nconst ICON_SIZE = 20;\nconst ICON_GAP = 12;\n\nexport const useStyles = createThemedStyles('ListItem', {\n root: {\n display: 'flex',\n alignItems: 'center',\n gap: ICON_GAP,\n boxSizing: 'border-box',\n fontSize: 16,\n whiteSpace: 'nowrap',\n minHeight: 40,\n padding: [0, ITEM_HORIZONTAL_PADDING],\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n cursor: 'pointer',\n },\n\n default: {},\n\n destructive: {},\n\n focused: {},\n\n disabledItem: {\n cursor: 'default',\n },\n\n spacer: {\n height: 1,\n backgroundColor: colors.BORDER_LIGHT,\n },\n\n withIconGap: {\n paddingLeft: ITEM_HORIZONTAL_PADDING + ICON_SIZE + ICON_GAP,\n },\n\n icon: {\n width: ICON_SIZE,\n height: ICON_SIZE,\n flexShrink: 0,\n },\n\n content: {\n flexGrow: 1,\n },\n\n chevron: {},\n});\n\nexport type IListItemStyles = ITweakStyles<typeof useStyles, IListItemSizes>;\n","import { FC, MouseEvent, KeyboardEvent, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addClickHandler,\n addDataAttributes,\n isArrayNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../../../types';\nimport { renderIcon, IIcon, Icon } from '../../../Icon';\nimport type { IListSize as IListItemSize } from '../../types';\nimport { useStyles, IListItemStyles } from './ListItem.styles';\n\nexport interface IListItemProps extends ICommonProps<IListItemStyles> {\n item: ReactNode;\n view?: 'default' | 'destructive';\n icon?: IIcon;\n nestedItems?: IListItemProps[];\n size?: IListItemSize;\n isFocused?: boolean;\n disabled?: boolean;\n shouldDrawSpacerAbove?: boolean;\n shouldDrawSpacerBelow?: boolean;\n withIconGap?: boolean;\n onClick?: (event: MouseEvent | KeyboardEvent) => void;\n}\n\nexport const ListItem: FC<IListItemProps> = ({\n icon,\n item,\n nestedItems,\n size,\n disabled: isDisabled,\n isFocused,\n shouldDrawSpacerAbove,\n shouldDrawSpacerBelow,\n testId,\n tweakStyles,\n view = 'default',\n withIconGap,\n data,\n onClick,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <>\n {shouldDrawSpacerAbove && <div className={classes.spacer} />}\n <div\n className={clsx(classes.root, classes[view], isNotEmpty(size) && classes[size], {\n [classes.disabledItem]: isDisabled,\n [classes.withIconGap]: withIconGap,\n [classes.focused]: isFocused,\n })}\n {...addClickHandler(onClick, !isDisabled)}\n {...addDataAttributes({ ...data, disabled: isDisabled ? true : undefined }, testId)}\n >\n {isReactNodeNotEmpty(icon) && <span className={classes.icon}>{renderIcon(icon)}</span>}\n <span className={classes.content}>{item}</span>\n {isArrayNotEmpty(nestedItems) && (\n <span className={clsx(classes.icon, classes.chevron)}>\n <Icon type=\"chevron-right\" />\n </span>\n )}\n </div>\n {shouldDrawSpacerBelow && <div className={classes.spacer} />}\n </>\n );\n};\n","import { colors, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IWithPopupStyles } from '../WithPopup';\nimport { IListSizes } from './types';\n\nexport const useStyles = createThemedStyles('List', {\n root: {\n minWidth: 180,\n backgroundColor: colors.CLASSIC_WHITE,\n padding: [8, 0],\n listStyle: 'none',\n margin: 0,\n textAlign: 'left',\n },\n\n nestedItems: {\n marginTop: -8,\n paddingLeft: 4,\n },\n});\n\nexport const withPopupStyles: IWithPopupStyles = {\n trigger: {\n width: '100%',\n },\n};\n\nexport type IListStyles = ITweakStyles<typeof useStyles, IListSizes>;\n","import { FC, Fragment, KeyboardEvent, MouseEvent } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { WithPopup } from '../WithPopup';\nimport { IListItemProps, ListItem } from './components';\nimport { IListItem, IListSize } from './types';\nimport { useStyles, IListStyles, withPopupStyles } from './List.styles';\n\nexport interface IListProps extends ICommonProps<IListStyles> {\n items: IListItem[];\n size?: IListSize;\n onClick?: (event: MouseEvent | KeyboardEvent) => void;\n}\n\nexport const List: FC<IListProps> = ({ items, size, testId, data, tweakStyles, onClick }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const handleItemClick = (\n event: MouseEvent | KeyboardEvent,\n { onClick: itemOnClick }: IListItem,\n ) => {\n if (isNotEmpty(itemOnClick)) {\n itemOnClick(event);\n onClick?.(event);\n }\n };\n\n const filteredItems = items.filter(({ isHidden }) => !isHidden);\n\n return (\n <div\n className={clsx(classes.root, isNotEmpty(size) && classes[size])}\n {...addDataAttributes(data, testId)}\n >\n {filteredItems.map((item, i) => {\n const itemProps: IListItemProps = {\n testId: getTestId(testId, `item-${i}`),\n size,\n ...item,\n shouldDrawSpacerAbove: item.shouldDrawSpacerAbove && i !== 0,\n shouldDrawSpacerBelow: item.shouldDrawSpacerBelow && i !== items.length - 1,\n onClick: (event) => handleItemClick(event, item),\n };\n\n return (\n <Fragment key={i}>\n {isArrayNotEmpty(item.nestedItems) ? (\n <WithPopup\n eventType=\"hover\"\n tweakStyles={withPopupStyles}\n placement=\"right-start\"\n popupOffset={0}\n shouldRenderInBody={false}\n trigger={({ triggerProps }) => (\n <ListItem {...itemProps} isFocused={triggerProps.isActive} />\n )}\n >\n <div className={classes.nestedItems}>\n <List items={item.nestedItems} size={size} onClick={onClick} />\n </div>\n </WithPopup>\n ) : (\n <ListItem {...itemProps} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n};\n","import { animations, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IListStyles } from '../List';\n\nexport const useStyles = createThemedStyles('AccountInfo', {\n root: {\n display: 'flex',\n },\n\n account: {\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n cursor: 'pointer',\n },\n\n accountName: {\n margin: [0, 2, 0, 10],\n fontSize: 14,\n transition: animations.defaultTransition,\n transitionProperty: 'color',\n },\n\n accountNameOpened: {},\n\n accountChevron: {\n width: 16,\n height: 16,\n transition: animations.defaultTransition,\n transitionProperty: 'transform, color',\n },\n\n accountChevronOpened: {\n transform: 'rotate(180deg)',\n },\n\n accountMenu: {\n position: 'absolute',\n zIndex: 90,\n top: '100%',\n right: 0,\n marginTop: 8,\n },\n\n avatarIcon: {\n width: 32,\n height: 32,\n },\n\n ...animations.slideUp,\n});\n\nexport type IAccountInfoStyles = ITweakStyles<typeof useStyles, { tweakList: IListStyles }>;\n","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('AddButton', {\n root: {\n display: 'flex',\n alignItems: 'center',\n padding: '0px 16px',\n height: 52,\n cursor: 'pointer',\n outline: 'none',\n transition: 'border-color 0.1s ease-in, background-color 0.1s ease-in',\n fontSize: 14,\n\n '&:hover': {\n transition: 'border-color 0.1s ease-in, background-color 0.1s ease-in',\n },\n },\n\n disabled: {\n cursor: 'default',\n },\n\n icon: {\n width: 20,\n display: 'inline-block',\n marginRight: 8,\n },\n\n fullWidth: {\n width: '100%',\n },\n});\n\nexport type IAddButtonStyles = ITweakStyles<typeof useStyles>;\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('DotsPreloader', {\n root: {\n display: 'flex',\n gap: 4,\n '--dot-size': '8px',\n\n '&::before, &::after': {\n content: '\"\"',\n extend: 'fadedDot',\n },\n\n '&::before': {\n animationDelay: '0',\n },\n\n '&::after': {\n animationDelay: '360ms',\n },\n },\n\n /* ----------- 3 DOTS ---------- */\n\n '@keyframes FadedDots': {\n '0%': {\n opacity: 0.2,\n },\n '30%': {\n opacity: 1,\n },\n '100%': {\n opacity: 0.2,\n },\n },\n\n // используется в .dot и в before и after элементах root\n fadedDot: {\n display: 'block',\n animationDuration: 750,\n animationIterationCount: 'infinite',\n animationName: '$FadedDots',\n borderRadius: '50%',\n width: 'var(--dot-size)',\n height: 'var(--dot-size)',\n backgroundColor: 'currentColor',\n },\n\n dot: {\n extend: 'fadedDot',\n animationDelay: '180ms',\n },\n});\n\nexport type IDotsPreloaderStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { ICommonProps } from '../../../../types';\nimport { useStyles, IDotsPreloaderStyles } from './DotsPreloader.styles';\n\nexport type IDotsPreloaderProps = Pick<ICommonProps<IDotsPreloaderStyles>, 'tweakStyles'>;\n\nexport const DotsPreloader: FC<IDotsPreloaderProps> = ({ tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <div className={classes.root}>\n <span className={classes.dot} />\n </div>\n );\n};\n","import { FC } from 'react';\n\nexport const DefaultPreloader: FC = () => (\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient x1=\"8.042%\" y1=\"0%\" x2=\"65.682%\" y2=\"23.865%\" id=\"a\">\n <stop stopColor=\"currentColor\" stopOpacity=\"0\" offset=\"0%\" />\n <stop stopColor=\"currentColor\" stopOpacity=\".631\" offset=\"63.146%\" />\n <stop stopColor=\"currentColor\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <g transform=\"translate(2,2)\" fill=\"none\">\n <path d=\"M36 18c0-9.94-8.06-18-18-18\" stroke=\"url(#a)\" strokeWidth=\"3\">\n <animateTransform\n xmlns=\"http://www.w3.org/2000/svg\"\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n begin=\"0s\"\n repeatCount=\"indefinite\"\n fill=\"freeze\"\n />\n </path>\n </g>\n </svg>\n);\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('SvgPreloader', {\n root: {\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n});\n\nexport type ISvgPreloaderStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { useTheme } from '../../../../theme';\nimport { ICommonProps } from '../../../../types';\nimport { IPreloaderSvgType } from '../../types';\nimport { DefaultPreloader } from '../DefaultPreloader';\nimport { ISvgPreloaderStyles, useStyles } from './SvgPreloader.styles';\n\nexport interface ISvgPreloaderProps extends Pick<ICommonProps<ISvgPreloaderStyles>, 'tweakStyles'> {\n type: IPreloaderSvgType;\n}\n\nexport const SvgPreloader: FC<ISvgPreloaderProps> = ({ type = 'default', tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const theme = useTheme();\n const PreloaderIcon = theme.preloaders?.[type] ?? DefaultPreloader;\n const isInlineSvg = typeof PreloaderIcon === 'string';\n\n return isInlineSvg ? (\n <div className={classes.root} dangerouslySetInnerHTML={{ __html: PreloaderIcon }} />\n ) : (\n <PreloaderIcon />\n );\n};\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { IDotsPreloaderStyles, ISvgPreloaderStyles } from './components';\n\nexport const useStyles = createThemedStyles('ThemedPreloader', {\n root: {\n display: 'flex',\n },\n\n dots: {},\n\n default: {},\n\n logo: {},\n\n currentColor: {\n color: 'currentColor',\n },\n});\n\nexport type IThemedPreloaderStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakDotsPreloader: IDotsPreloaderStyles;\n tweakSvgPreloader: ISvgPreloaderStyles;\n }\n>;\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { SvgPreloader, DotsPreloader } from './components';\nimport { IPreloaderSvgType } from './types';\nimport { useStyles, IThemedPreloaderStyles } from './ThemedPreloader.styles';\n\nexport interface IThemedPreloaderProps extends ICommonProps<IThemedPreloaderStyles> {\n /** @default 'default' */\n type?: 'dots' | IPreloaderSvgType;\n /** @default false */\n useCurrentColor?: boolean;\n}\n\nexport const ThemedPreloader: FC<IThemedPreloaderProps> = ({\n type = 'default',\n useCurrentColor = false,\n data,\n testId,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakDotsPreloaderStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakDotsPreloader',\n currentComponentName: 'ThemedPreloader',\n });\n\n const tweakSvgPreloaderStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakSvgPreloader',\n currentComponentName: 'ThemedPreloader',\n });\n\n return (\n <div\n className={clsx(classes.root, classes[type], {\n [classes.currentColor]: useCurrentColor,\n })}\n {...addDataAttributes(data, testId)}\n >\n {type === 'dots' ? (\n <DotsPreloader tweakStyles={tweakDotsPreloaderStyles} />\n ) : (\n <SvgPreloader type={type} tweakStyles={tweakSvgPreloaderStyles} />\n )}\n </div>\n );\n};\n","import { animations, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\nimport { IButtonSize } from './types';\n\nexport const useStyles = createThemedStyles('Button', {\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n outline: 'none',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color, box-shadow, border-color',\n maxWidth: '100%',\n border: [1, 'solid', 'transparent'],\n position: 'relative',\n boxShadow: 'none',\n\n '&[disabled]': {\n cursor: 'default',\n pointerEvents: 'none',\n },\n },\n\n primary: {},\n secondary: {},\n outline: {},\n warning: {},\n destructive: {},\n text: {},\n custom: {},\n\n children: {},\n\n icon: {\n width: 20,\n height: 20,\n flexShrink: 0,\n },\n\n iconFromLeft: {\n flexDirection: 'row',\n gap: 6,\n\n '& $icon': {\n marginLeft: -4,\n },\n },\n\n iconFromRight: {\n flexDirection: 'row-reverse',\n gap: 6,\n\n '& $icon': {\n marginRight: -4,\n },\n },\n\n onlyIcon: {},\n\n withIcon: {},\n\n s: {\n padding: [0, 12],\n height: 32,\n fontSize: 14,\n letterSpacing: 0.15,\n\n '&$onlyIcon': {\n padding: 0,\n width: 32,\n },\n\n '& $icon': {\n width: 16,\n height: 16,\n },\n\n '& $iconFromLeft': {\n gap: 4,\n },\n\n '& $iconFromRight': {\n gap: 4,\n },\n },\n\n m: {\n padding: [0, 12],\n height: 42,\n fontSize: 16,\n\n '& $iconFromLeft': {\n gap: 6,\n },\n\n '& $iconFromRight': {\n gap: 6,\n },\n\n '&$onlyIcon': {\n padding: 0,\n width: 42,\n },\n },\n\n l: {\n padding: [0, 16],\n height: 48,\n fontSize: 16,\n\n '& $iconFromLeft': {\n gap: 6,\n },\n\n '& $iconFromRight': {\n gap: 6,\n },\n\n '&$onlyIcon': {\n padding: 0,\n width: 48,\n },\n },\n\n xl: {\n padding: [0, 20],\n height: 56,\n fontSize: 16,\n\n '&$onlyIcon': {\n padding: 0,\n width: 56,\n },\n\n '& $iconFromLeft': {\n gap: 8,\n },\n\n '& $iconFromRight': {\n gap: 8,\n },\n },\n\n fullWidth: {\n minWidth: 'auto',\n width: '100%',\n },\n\n inline: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n active: {},\n\n content: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n },\n\n loader: {\n display: 'none',\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n\n loading: {\n '& $content': {\n visibility: 'hidden',\n },\n\n '& $loader': {\n display: 'block',\n },\n },\n\n disabled: {},\n});\n\nconst dotsPreloaderStyles: IThemedPreloaderStyles = {\n tweakDotsPreloader: {\n fadedDot: {\n width: 6,\n height: 6,\n },\n },\n};\n\nexport const getPreloaderStyles = (size: IButtonSize): IThemedPreloaderStyles | undefined =>\n size === 's' || size === 'm' ? dotsPreloaderStyles : undefined;\n\nexport type IButtonStyles = ITweakStyles<\n typeof useStyles,\n { tweakPreloader: IThemedPreloaderStyles }\n>;\n","import { ReactNode, ButtonHTMLAttributes, MouseEvent, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps, IDomElementInteractions } from '../../types';\nimport { renderIcon, IIcon } from '../Icon';\nimport { ThemedPreloader, IThemedPreloaderProps } from '../ThemedPreloader';\nimport { IButtonSize, IButtonView } from './types';\nimport { useStyles, IButtonStyles, getPreloaderStyles } from './Button.styles';\n\nexport interface IButtonProps\n extends ICommonProps<IButtonStyles>,\n IDomElementInteractions<HTMLButtonElement> {\n children?: ReactNode;\n /** @default 'button' */\n type?: ButtonHTMLAttributes<unknown>['type'];\n /** @default 'l' */\n size?: IButtonSize;\n /** @default 'primary' */\n view?: IButtonView;\n /** @default false */\n shouldSkipTabNavigation?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isFullWidth?: boolean;\n /**\n * Нужно ли убирать скругление у кнопки слева\n * @default false\n */\n isInline?: boolean;\n /**\n * Нужно ли показать лоадер и заблокировать кнопку\n * @default false\n */\n isLoading?: boolean;\n /** @default false */\n isActive?: boolean;\n icon?: IIcon;\n /** @default 'left' */\n iconPosition?: 'left' | 'right';\n /** @default 'dots' */\n preloaderType?: IThemedPreloaderProps['type'];\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n onMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, IButtonProps>(function Button(\n {\n type = 'button',\n children,\n size = 'l',\n view = 'primary',\n isFullWidth = false,\n isInline = false,\n isDisabled = false,\n isActive = false,\n isLoading = false,\n shouldSkipTabNavigation = false,\n data,\n testId,\n tweakStyles,\n icon,\n iconPosition = 'left',\n preloaderType = 'dots',\n ...interactions\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakPreloaderStyles = useTweakStyles({\n innerStyles: getPreloaderStyles(size),\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'Button',\n });\n\n const hasIcon = isReactNodeNotEmpty(icon);\n const hasChildren = isReactNodeNotEmpty(children);\n const hasNoAction = isDisabled || isLoading;\n\n return (\n <button\n ref={ref}\n type={type}\n className={clsx(classes.root, classes[size], classes[view], {\n [classes.disabled]: isDisabled,\n [classes.fullWidth]: isFullWidth,\n [classes.inline]: isInline,\n [classes.active]: isActive,\n [classes.loading]: isLoading,\n [classes.onlyIcon]: hasIcon && !hasChildren,\n })}\n tabIndex={shouldSkipTabNavigation ? -1 : undefined}\n disabled={hasNoAction}\n {...interactions}\n {...addDataAttributes(data, testId)}\n >\n <span\n className={clsx(classes.content, {\n [classes.iconFromRight]: hasChildren && hasIcon && iconPosition === 'right',\n [classes.iconFromLeft]: hasChildren && hasIcon && iconPosition === 'left',\n })}\n >\n {hasIcon && (\n <span className={classes.icon}>{isReactNodeNotEmpty(icon) && renderIcon(icon)}</span>\n )}\n {hasChildren && (\n <span className={clsx(classes.children, hasIcon && classes.withIcon)}>{children}</span>\n )}\n </span>\n\n {isLoading && (\n <span className={classes.loader}>\n <ThemedPreloader\n type={preloaderType}\n useCurrentColor\n tweakStyles={tweakPreloaderStyles}\n />\n </span>\n )}\n </button>\n );\n});\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { ICheckboxSizes } from './types';\n\nexport const useStyles = createThemedStyles('Checkbox', {\n root: {\n position: 'relative',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: 14,\n width: 'fit-content',\n },\n\n checked: {},\n\n invalid: {},\n\n disabled: {\n cursor: 'default',\n pointerEvents: 'none',\n },\n\n input: {\n width: 1,\n height: 1,\n position: 'absolute',\n opacity: 0,\n },\n\n children: {\n display: 'flex',\n alignItems: 'center',\n },\n\n check: {\n width: 18,\n height: 18,\n borderRadius: 2,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n },\n\n labelPositionLeft: {\n flexDirection: 'row-reverse',\n },\n});\n\nexport type ICheckboxStyles = ITweakStyles<typeof useStyles, ICheckboxSizes>;\n","import { ReactNode, ChangeEvent, KeyboardEvent } from 'react';\nimport clsx from 'clsx';\nimport {\n getSelectKeyHandler,\n isNotEmpty,\n isReactNodeNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { ICheckboxSize } from './types';\nimport { useStyles, ICheckboxStyles } from './Checkbox.styles';\n\nexport interface ICheckboxProps<V> extends ICommonProps<ICheckboxStyles> {\n value?: V;\n children?: ReactNode;\n size?: ICheckboxSize;\n /** @default false */\n isChecked?: boolean;\n /** @default false */\n isSemiChecked?: boolean;\n /** @default false */\n isInvalid?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isReadonly?: boolean;\n /** @default 'right' */\n labelPosition?: 'right' | 'left';\n onSelect?: (\n value: { value?: V; isSelected: boolean },\n event: ChangeEvent<HTMLInputElement> | KeyboardEvent,\n ) => void;\n}\n\nexport function Checkbox<V>({\n value,\n children,\n size,\n isChecked = false,\n isSemiChecked = false,\n isInvalid = false,\n isDisabled = false,\n isReadonly = false,\n labelPosition = 'right',\n data,\n testId,\n tweakStyles,\n onSelect,\n}: ICheckboxProps<V>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const hasAction = !isDisabled && !isReadonly;\n const isSelected = isChecked || isSemiChecked;\n\n const onToggle = (event: ChangeEvent<HTMLInputElement> | KeyboardEvent) =>\n onSelect?.({ value, isSelected: !isSelected }, event);\n\n return (\n <label\n className={clsx(classes.root, isNotEmpty(size) && classes[size], {\n [classes.checked]: isSelected,\n [classes.invalid]: isInvalid,\n [classes.disabled]: isDisabled,\n [classes.labelPositionLeft]: labelPosition === 'left',\n })}\n {...addDataAttributes(data, testId)}\n >\n <input\n className={classes.input}\n type=\"checkbox\"\n checked={isSelected}\n disabled={isDisabled}\n readOnly={isReadonly}\n {...(hasAction && {\n onChange: onToggle,\n onKeyDown: getSelectKeyHandler(onToggle),\n })}\n />\n <div className={classes.check}>\n {isSelected && <Icon type={isSemiChecked ? 'minus' : 'check'} />}\n </div>\n {isReactNodeNotEmpty(children) && <div className={classes.children}>{children}</div>}\n </label>\n );\n}\n","import { rgba } from '../../helpers';\nimport { animations, colors, createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('CloseButton', {\n root: {\n width: 40,\n height: 40,\n maxWidth: '100%',\n maxHeight: '100%',\n padding: 5,\n color: colors.FONT_MEDIUM,\n border: 0,\n borderRadius: '50%',\n appearance: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n\n '&:hover': {\n backgroundColor: rgba(colors.BORDER_MAIN, 0.5),\n },\n\n '&:focus': {\n backgroundColor: colors.GREY_FOCUS,\n },\n\n '&:active': {\n backgroundColor: rgba(colors.FONT_DISABLED, 0.5),\n },\n },\n});\n\nexport type ICloseButtonStyles = ITweakStyles<typeof useStyles>;\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('CssBaseline', {\n '@global html, body': {\n fontFamily: 'Arial, sans-serif',\n color: colors.FONT_MAIN,\n padding: 0,\n margin: 0,\n },\n\n '@global': {},\n\n root: {},\n});\n\nexport type ICssBaselineStyles = ITweakStyles<typeof useStyles>;\n","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('WithMessages', {\n withMessages: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n position: 'relative',\n },\n\n error: {\n color: 'red',\n },\n\n info: {\n color: 'gray',\n },\n\n horizontal: {\n display: 'flex',\n\n '& > *': {\n flexGrow: 1,\n\n '&:not(:first-child)': {\n marginLeft: -1,\n },\n },\n },\n\n vertical: {\n display: 'flex',\n flexDirection: 'column',\n\n '& > *:not(:first-child)': {\n marginTop: -1,\n },\n },\n\n message: {\n fontSize: 12,\n },\n\n children: {},\n});\n\nexport type IWithMessagesStyles = ITweakStyles<typeof useStyles>;\n","import { forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { IWithMessagesStyles, useStyles } from './WithMessages.styles';\n\nexport interface IWithMessagesProps extends ICommonProps<IWithMessagesStyles> {\n children: ReactNode;\n infoMessage?: ReactNode;\n errorMessage?: ReactNode;\n controlsDirection?: 'horizontal' | 'vertical';\n}\n\nexport const WithMessages = forwardRef<HTMLDivElement, IWithMessagesProps>(function WithMessages(\n { children, infoMessage, errorMessage, controlsDirection, tweakStyles, testId, data },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const shouldShowError = isReactNodeNotEmpty(errorMessage);\n const shouldShowInfo = isReactNodeNotEmpty(infoMessage) && !shouldShowError;\n\n return (\n <div\n ref={ref}\n className={classes.withMessages}\n data-invalid={shouldShowError ? true : undefined}\n {...addDataAttributes(data, testId)}\n >\n {isReactNodeNotEmpty(children) && (\n <div\n className={clsx(classes.children, {\n [classes.horizontal]: controlsDirection === 'horizontal',\n [classes.vertical]: controlsDirection === 'vertical',\n })}\n >\n {children}\n </div>\n )}\n {(shouldShowError || shouldShowInfo) && (\n <div className={classes.message}>\n {shouldShowError && (\n <div className={classes.error} {...addDataTestId(testId, 'error')}>\n {errorMessage}\n </div>\n )}\n {shouldShowInfo && (\n <div className={classes.info} {...addDataTestId(testId, 'info')}>\n {infoMessage}\n </div>\n )}\n </div>\n )}\n </div>\n );\n});\n","import { isObject } from '@true-engineering/true-react-platform-helpers';\nimport { IIcon } from '../Icon';\nimport { IControlWrapperIcon } from './types';\n\nexport const isControlWrapperIcon = (\n iconItem: IIcon | IControlWrapperIcon,\n): iconItem is IControlWrapperIcon => isObject(iconItem) && 'iconComponent' in iconItem;\n\nexport const convertToControlWrapperIcon = (\n iconItem: IIcon | IControlWrapperIcon,\n): IControlWrapperIcon => (isControlWrapperIcon(iconItem) ? iconItem : { iconComponent: iconItem });\n","import { animations, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\nimport { IControlWrapperSizes } from './types';\n\nconst { CONTROL, Z_INDEX } = dimensions;\n\nexport const useStyles = createThemedStyles('ControlWrapper', {\n controlWrapper: {\n '--control-height': `${CONTROL.HEIGHT - 2}px`, // borders\n '--control-padding': `${CONTROL.PADDING}px`,\n '--icon-size': `${CONTROL.ICON_SIZE}px`,\n '--icon-inner-size': `${CONTROL.ICON_INNER_SIZE}px`,\n '--icon-gap': `${CONTROL.ICON_GAP}px`,\n display: 'flex',\n width: '100%',\n backgroundColor: 'white',\n position: 'relative',\n border: ['solid', 1, 'gray'],\n borderRadius: 8,\n boxSizing: 'border-box',\n zIndex: 0,\n },\n\n disabled: {},\n\n focused: {\n position: 'relative',\n zIndex: Z_INDEX.CONTROL_FOCUS,\n },\n\n invalid: {\n zIndex: Z_INDEX.CONTROL_INVALID,\n },\n\n withValue: {},\n\n loading: {},\n\n minContent: {\n width: 'min-content',\n },\n\n label: {\n position: 'absolute',\n pointerEvents: 'none',\n left: 'var(--control-padding)',\n top: 'calc(var(--control-height) / 2)',\n transformOrigin: 'top left',\n transform: 'translateY(-50%)',\n transition: animations.defaultTransition,\n transitionProperty: 'transform, color',\n fontSize: 16,\n zIndex: 1,\n },\n\n activeLabel: {},\n\n requiredLabel: {\n '&:after': {\n content: '\"\"',\n display: 'block',\n position: 'absolute',\n top: 0,\n right: -8,\n width: 6,\n height: 6,\n borderRadius: '50%',\n backgroundColor: 'orange',\n },\n },\n\n disabledLabel: {},\n\n wrapper: {\n display: 'flex',\n flexGrow: 1,\n minWidth: 0, // Нужно для селекта\n textAlign: 'left',\n },\n\n controls: {\n display: 'flex',\n marginLeft: 'auto',\n flexShrink: 0,\n },\n\n startControls: {\n paddingLeft: 'var(--control-padding)',\n },\n\n icon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 'var(--icon-size)',\n width: 'var(--icon-size)',\n height: '100%',\n flexShrink: 0,\n cursor: 'default',\n\n '&:last-child': {\n paddingRight: 6,\n },\n },\n\n iconInner: {\n width: 'var(--icon-inner-size)',\n },\n\n customIcon: {\n width: 'unset',\n\n '& $iconInner': {\n width: 'unset',\n },\n },\n\n startIcon: {},\n\n endIcon: {},\n\n activeIcon: {\n cursor: 'pointer',\n outline: 'none',\n },\n\n clearIcon: {\n '& $iconInner': {\n width: 'var(--icon-inner-size)',\n },\n },\n\n loader: {\n '& $iconInner': {\n width: 'var(--icon-inner-size)',\n },\n },\n\n withStartControls: {},\n\n /* groupPositions */\n 'placement-top': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-bottom': {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n\n 'placement-top-left': {\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-top-right': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-bottom-left': {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-bottom-right': {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n 'placement-left': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-right': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n 'placement-middle': {\n borderRadius: 0,\n },\n});\n\nexport type IControlWrapperStyles = ITweakStyles<\n typeof useStyles,\n { tweakPreloader: IThemedPreloaderStyles } & IControlWrapperSizes\n>;\n","import { CSSProperties, FC, ReactNode, useCallback, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n addClickHandler,\n addDataAttributes,\n addDataTestId,\n getArray,\n IMaybeArray,\n isArrayNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { IClickHandlerEvent, ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { convertToControlWrapperIcon } from './helpers';\nimport { IControlWrapperIcon, IControlWrapperSize, IGroupPlacement } from './types';\nimport { IControlWrapperStyles, useStyles } from './ControlWrapper.styles';\n\nexport interface IControlWrapperProps extends ICommonProps<IControlWrapperStyles> {\n children: ReactNode;\n label?: ReactNode;\n /** @deprecated */\n icon?: IMaybeArray<IIcon | IControlWrapperIcon>;\n startIcon?: IMaybeArray<IIcon | IControlWrapperIcon>;\n endIcon?: IMaybeArray<IIcon | IControlWrapperIcon>;\n size?: IControlWrapperSize;\n groupPlacement?: IGroupPlacement;\n /** @default false */\n isInvalid?: boolean;\n /** @default false */\n isFocused?: boolean;\n /** @default false */\n hasValue?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isFullWidth?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isActive?: boolean;\n onClear?: (event: IClickHandlerEvent) => void;\n}\n\nexport const ControlWrapper: FC<IControlWrapperProps> = ({\n label,\n icon,\n startIcon,\n endIcon = icon,\n groupPlacement,\n isInvalid,\n isFocused,\n isRequired,\n isLoading,\n isFullWidth,\n isActive,\n isDisabled,\n hasValue,\n size,\n testId,\n children,\n tweakStyles,\n data,\n onClear,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const [startControlsWidth, setStartControlsWidth] = useState<number>();\n\n const startIcons = getArray(startIcon).map(convertToControlWrapperIcon);\n const endIcons = getArray(endIcon).map(convertToControlWrapperIcon);\n\n const hasStartIcons = isArrayNotEmpty(startIcons);\n const hasEndIcons = !isLoading && isArrayNotEmpty(endIcons);\n const hasClearButton = !isDisabled && !isLoading && hasValue && isNotEmpty(onClear);\n const hasEndControls = hasEndIcons || hasClearButton || isLoading;\n\n const tweakPreloaderStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'ControlWrapper',\n });\n\n const startControlsRef = useCallback(\n (node: HTMLDivElement | null) => {\n setStartControlsWidth(node?.clientWidth);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [startIcon, size],\n );\n\n const renderIconControl = (\n { key, iconComponent, onClick, shouldResetSize = false }: IControlWrapperIcon,\n iconType: 'start' | 'end' | 'clear',\n index?: number,\n ) => (\n <div\n key={key ?? index}\n className={clsx(classes.icon, classes[`${iconType}Icon`], {\n [classes.activeIcon]: !isDisabled && isNotEmpty(onClick),\n [classes.customIcon]: shouldResetSize,\n })}\n {...addClickHandler(onClick, !isDisabled)}\n {...addDataTestId(testId, `${iconType}-icon`)}\n >\n <div className={classes.iconInner}>{renderIcon(iconComponent)}</div>\n </div>\n );\n\n return (\n <div\n className={clsx(\n classes.controlWrapper,\n isNotEmpty(groupPlacement) && classes[`placement-${groupPlacement}`],\n isNotEmpty(size) && classes[size],\n {\n [classes.invalid]: isInvalid,\n [classes.focused]: isFocused,\n [classes.withValue]: hasValue,\n [classes.disabled]: isDisabled,\n [classes.loading]: isLoading,\n [classes.minContent]: !isFullWidth,\n [classes.withStartControls]: hasStartIcons,\n },\n )}\n style={\n hasStartIcons\n ? ({ '--start-controls-width': `${startControlsWidth}px` } as CSSProperties)\n : undefined\n }\n {...addDataAttributes(data, testId)}\n >\n {isReactNodeNotEmpty(label) && (\n <div\n className={clsx(classes.label, {\n [classes.requiredLabel]: isRequired,\n [classes.disabledLabel]: isDisabled,\n [classes.activeLabel]: isFocused || hasValue || isActive,\n })}\n >\n {label}\n </div>\n )}\n <div className={classes.wrapper}>\n {hasStartIcons && (\n <div className={clsx(classes.controls, classes.startControls)} ref={startControlsRef}>\n {startIcons.map((iconProps, index) => renderIconControl(iconProps, 'start', index))}\n </div>\n )}\n\n {children}\n\n {hasEndControls && (\n <div className={classes.controls}>\n {hasClearButton &&\n renderIconControl({ iconComponent: 'close', onClick: onClear }, 'clear')}\n\n {hasEndIcons &&\n endIcons.map((iconProps, index) => renderIconControl(iconProps, 'end', index))}\n\n {isLoading && (\n <div\n className={clsx(classes.icon, classes.loader)}\n {...addDataTestId(testId, 'loading')}\n >\n <div className={classes.iconInner}>\n <ThemedPreloader tweakStyles={tweakPreloaderStyles} />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { IControlWrapperStyles } from '../ControlWrapper';\nimport { IWithMessagesStyles } from '../WithMessages';\n\nconst PADDING_WITH_UNITS = 8;\n\nexport const useStyles = createThemedStyles('Input', {\n inputContent: {\n height: 'var(--control-height)',\n padding: [0, 'var(--control-padding)'],\n fontSize: 16,\n fontFamily: 'inherit',\n },\n\n input: {\n extend: 'inputContent',\n width: '100%',\n outline: 'none',\n outlineStyle: 'none',\n boxSizing: 'border-box',\n border: 'none',\n background: 'none',\n color: 'black',\n\n '&[readonly]': {\n cursor: 'default',\n },\n\n '&::placeholder': {\n opacity: 1,\n },\n\n '&::-webkit-date-and-time-value': {\n textAlign: 'left',\n },\n\n MozAppearance: 'textfield',\n '&::-webkit-inner-spin-button,&::-webkit-outer-spin-button,&::-webkit-calendar-picker-indicator':\n {\n display: 'none',\n WebkitAppearance: 'none',\n margin: 0,\n },\n },\n\n defaultWrapper: {\n display: 'flex',\n flexGrow: 1,\n },\n\n autoSizeWrapper: {\n position: 'relative',\n minWidth: 0,\n zIndex: 0,\n },\n\n autoSized: {\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n },\n\n withUnits: {\n extend: 'autoSized',\n paddingRight: `calc(${PADDING_WITH_UNITS}px + var(--units-width) - 1px)`,\n\n '& + $fakeValue': {\n paddingRight: PADDING_WITH_UNITS,\n },\n },\n\n withLabel: {},\n\n withValue: {},\n\n fakeValue: {\n extend: 'inputContent',\n visibility: 'hidden',\n maxWidth: '100%',\n overflow: 'hidden',\n minWidth: 8,\n whiteSpace: 'nowrap',\n },\n\n units: {\n alignSelf: 'center',\n paddingRight: 'var(--control-padding)',\n },\n\n focusedInput: {},\n\n disabledInput: {},\n\n invalidInput: {},\n});\n\nexport type IInputStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakControlWrapper: IControlWrapperStyles;\n tweakWithMessages: IWithMessagesStyles;\n }\n>;\n","import {\n ChangeEvent,\n CSSProperties,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport InputMask, { Props as ReactInputMaskBaseProps } from 'react-input-mask';\nimport clsx from 'clsx';\nimport {\n addDataTestId,\n isArrayLikeNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useMergedRefs, useTweakStyles } from '../../hooks';\nimport { IClickHandlerEvent, ICommonProps } from '../../types';\nimport { ControlWrapper, IControlWrapperProps } from '../ControlWrapper';\nimport { IChangeInputEvent } from './types';\nimport { IInputStyles, useStyles } from './Input.styles';\n\nexport interface IInputBaseProps\n extends ICommonProps<IInputStyles>,\n Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'size' | 'className'>,\n Pick<\n IControlWrapperProps,\n | 'label'\n | 'icon'\n | 'endIcon'\n | 'startIcon'\n | 'size'\n | 'groupPlacement'\n | 'isInvalid'\n | 'isRequired'\n | 'isLoading'\n | 'isDisabled'\n >,\n Pick<\n Partial<ReactInputMaskBaseProps>,\n 'mask' | 'maskPlaceholder' | 'alwaysShowMask' | 'beforeMaskedStateChange'\n > {\n value?: string;\n units?: ReactNode;\n /** @default false */\n isReadonly?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default false */\n isClearable?: boolean;\n /** @default false */\n shouldFocusOnMount?: boolean;\n /** @default false */\n isAutoSized?: boolean;\n /** @default false */\n shouldAlwaysShowPlaceholder?: boolean;\n onChange: (value: string, event: IChangeInputEvent, eventType: 'change' | 'clear') => void;\n}\n\nexport const InputBase = forwardRef<HTMLInputElement, IInputBaseProps>(function InputBase(\n {\n value = '',\n placeholder,\n label,\n type = 'text',\n isDisabled,\n autoComplete,\n inputMode: initialInputMode,\n isReadonly,\n isInvalid,\n isActive,\n isClearable,\n isAutoSized,\n name,\n tweakStyles,\n maxLength,\n shouldFocusOnMount,\n units,\n testId,\n tabIndex,\n shouldAlwaysShowPlaceholder,\n onChange,\n onPaste,\n onFocus,\n onBlur,\n onKeyDown,\n // Пропсы react-input-mask\n mask,\n maskPlaceholder,\n alwaysShowMask,\n beforeMaskedStateChange,\n // Пропсы ControlWrapper\n data,\n groupPlacement,\n startIcon,\n icon,\n endIcon = icon,\n isLoading,\n isRequired,\n size,\n children,\n ...inputProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakControlWrapperStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakControlWrapper',\n currentComponentName: 'Input',\n });\n\n const [isFocused, setFocused] = useState(false);\n const [unitsWidth, setUnitsWidth] = useState<number>();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMergedRefs([ref, inputRef]);\n\n // Try to guess input-mode if possible\n const inputMode: IInputBaseProps['inputMode'] =\n initialInputMode ??\n (['email', 'tel', 'url'].includes(type) ? (type as 'email' | 'tel' | 'url') : undefined);\n\n const hasFocus = isFocused || isActive;\n const hasValue = isArrayLikeNotEmpty(value);\n const hasUnits = isReactNodeNotEmpty(units);\n const hasPlaceholder =\n (!isReactNodeNotEmpty(label) || hasFocus || shouldAlwaysShowPlaceholder) &&\n isStringNotEmpty(placeholder);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange(event.currentTarget.value, event, 'change');\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n // для SmartInput нужен event, иначе onChange не вызовется\n const handleInputClear = async (event: IClickHandlerEvent) => {\n // await не убирать (важно для порядка выполнения (сначала onChange, затем focus)\n await onChange('', event, 'clear');\n inputRef.current?.focus();\n };\n\n const unitsRef = useCallback(\n (node: HTMLDivElement | null) => {\n setUnitsWidth(node?.clientWidth);\n },\n [units],\n );\n\n const props: InputHTMLAttributes<HTMLInputElement> = {\n className: clsx(classes.input, {\n [classes.withUnits]: hasUnits,\n [classes.withValue]: hasValue,\n [classes.withLabel]: isReactNodeNotEmpty(label),\n [classes.autoSized]: isAutoSized,\n [classes.focusedInput]: isFocused,\n [classes.disabledInput]: isDisabled,\n [classes.invalidInput]: isInvalid,\n }),\n style:\n hasUnits && hasValue ? ({ '--units-width': `${unitsWidth}px` } as CSSProperties) : undefined,\n value,\n type,\n autoComplete,\n inputMode,\n disabled: isDisabled,\n placeholder: hasPlaceholder ? placeholder : undefined,\n name,\n maxLength,\n readOnly: isReadonly,\n tabIndex,\n onKeyDown,\n onPaste,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n ...addDataTestId(testId),\n ...inputProps,\n };\n\n useEffect(() => {\n // It works much better than autoFocus for mobile devices\n if (shouldFocusOnMount) {\n inputRef.current?.focus();\n }\n }, [shouldFocusOnMount]);\n\n return (\n <ControlWrapper\n label={label}\n isDisabled={isDisabled}\n isFocused={hasFocus}\n isActive={hasPlaceholder}\n isInvalid={isInvalid}\n hasValue={hasValue}\n isFullWidth={!isAutoSized}\n tweakStyles={tweakControlWrapperStyles}\n onClear={isClearable && hasValue ? handleInputClear : undefined}\n data={data}\n groupPlacement={groupPlacement}\n startIcon={startIcon}\n endIcon={endIcon}\n isLoading={isLoading}\n isRequired={isRequired}\n size={size}\n >\n <div\n className={clsx(classes.defaultWrapper, {\n [classes.autoSizeWrapper]: hasUnits || isAutoSized,\n })}\n >\n {isNotEmpty(mask) ? (\n <InputMask\n ref={mergedRef as unknown as MutableRefObject<InputMask>}\n mask={mask}\n maskPlaceholder={maskPlaceholder}\n alwaysShowMask={alwaysShowMask}\n beforeMaskedStateChange={beforeMaskedStateChange}\n {...props}\n />\n ) : (\n <input ref={mergedRef} {...props} />\n )}\n\n {(hasUnits || isAutoSized) && <div className={classes.fakeValue}>{value}</div>}\n {hasUnits && hasValue && (\n <div className={classes.units} ref={unitsRef}>\n {units}\n </div>\n )}\n </div>\n {children}\n </ControlWrapper>\n );\n});\n","import { forwardRef } from 'react';\nimport { getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { IWithMessagesProps, WithMessages } from '../WithMessages';\nimport { IInputBaseProps, InputBase } from './InputBase';\n\nexport interface IInputProps\n extends IInputBaseProps,\n Pick<IWithMessagesProps, 'infoMessage' | 'errorMessage'> {}\n\nexport const Input = forwardRef<HTMLInputElement, IInputProps>(function Input(\n { infoMessage, errorMessage, isInvalid, testId, tweakStyles, ...inputProps },\n ref,\n) {\n const tweakWithMessagesStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithMessages',\n currentComponentName: 'Input',\n });\n\n return (\n <WithMessages\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n testId={getTestId(testId, 'wrapper')}\n tweakStyles={tweakWithMessagesStyles}\n >\n <InputBase\n {...inputProps}\n ref={ref}\n testId={testId}\n tweakStyles={tweakStyles}\n isInvalid={isInvalid}\n />\n </WithMessages>\n );\n});\n","export const EMPTY_DATE_INPUT_VALUE = '__.__.____';\nexport const EMPTY_DATE_RANGE_INPUT_VALUE = `${EMPTY_DATE_INPUT_VALUE} - ${EMPTY_DATE_INPUT_VALUE}`;\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { IInputStyles } from '../Input';\n\nexport const useStyles = createThemedStyles('DateInput', {\n root: {\n width: '100%',\n height: '100%',\n cursor: 'pointer',\n position: 'relative',\n },\n});\n\nexport type IDateInputStyles = ITweakStyles<typeof useStyles, { tweakInput: IInputStyles }>;\n","import { ChangeEvent, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport { EMPTY_DATE_INPUT_VALUE, EMPTY_DATE_RANGE_INPUT_VALUE } from './constants';\nimport { IDateInputStyles, useStyles } from './DateInput.styles';\n\nexport interface IDateInputProps\n extends Omit<IInputProps, 'value' | 'beforeMaskedStateChange' | 'onChange' | 'tweakStyles'>,\n ICommonProps<IDateInputStyles> {\n date?: string;\n /** @default '' */\n startDate?: string;\n /** @default '' */\n endDate?: string;\n className?: string;\n /** @default false */\n isRange?: boolean;\n // react-datepicker ожидает event первым аргументом\n onChange?: (event: IChangeInputEvent, value: string) => void;\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, IDateInputProps>(function DateInput(\n {\n date,\n startDate = '',\n endDate = '',\n mask,\n className,\n placeholder,\n data,\n isRange = false,\n tweakStyles,\n onClick,\n onChange,\n ...inputProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakInputStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'DateInput',\n });\n\n const beforeMaskedStateChange: IInputProps['beforeMaskedStateChange'] = ({ nextState }) => {\n // Если в инпуте отсутствует введенное значение, то выставляем\n // пустую строку для корректной работы react-datepicker\n if (\n nextState.value === EMPTY_DATE_INPUT_VALUE ||\n nextState.value === EMPTY_DATE_RANGE_INPUT_VALUE\n ) {\n return { value: '', selection: { start: 0, end: 0 } };\n }\n return nextState;\n };\n\n const handleChange: IInputProps['onChange'] = (value, event) => {\n // Событие click срабатывает только при нажатии на кнопку очистки\n if (event.type === 'click') {\n // react-datepicker ожидает пустую строку в event.target.value\n (event as ChangeEvent<HTMLInputElement>).target.value = '';\n }\n onChange?.(event, value);\n };\n\n return (\n <div className={clsx(classes.root, className)} {...addDataAttributes(data)} onClick={onClick}>\n <Input\n {...inputProps}\n ref={ref}\n value={isRange ? `${startDate}${endDate}` : date}\n mask={mask ?? (isRange ? '99.99.9999 - 99.99.9999' : '99.99.9999')}\n placeholder={\n placeholder ?? (isRange ? EMPTY_DATE_RANGE_INPUT_VALUE : EMPTY_DATE_INPUT_VALUE)\n }\n tweakStyles={tweakInputStyles}\n onChange={handleChange}\n beforeMaskedStateChange={beforeMaskedStateChange}\n />\n </div>\n );\n});\n","import ReactDatePicker, { DatePickerProps } from 'react-datepicker';\nimport { doNothing } from '@true-engineering/true-react-platform-helpers';\n\nexport class DatePickerBase extends ReactDatePicker {\n public handleClickOutside;\n\n constructor(props: DatePickerProps) {\n super(props);\n this.handleClickOutside = this.handleCalendarClickOutside;\n // Затираем дефолтный обработчик клика снаружи, чтобы обрабатывать его самим\n // (см. использование useOnClickOutside в DatePicker)\n this.handleCalendarClickOutside = doNothing;\n }\n}\n","import { IInputStyles } from '../Input';\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n startControls: {\n position: 'absolute',\n left: 0,\n top: 0,\n height: '100%',\n pointerEvents: 'none',\n },\n\n controlWrapper: {\n borderColor: 'transparent',\n },\n },\n\n inputContent: {\n paddingLeft: 'calc(var(--start-controls-width) + var(--control-padding))',\n },\n};\n\nexport interface ISearchInputStyles {\n tweakInput?: IInputStyles;\n}\n","import { forwardRef } from 'react';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IInputProps, Input } from '../Input';\nimport { inputStyles, ISearchInputStyles } from './SearchInput.styles';\n\nexport type ISearchInputProps = Omit<\n IInputProps,\n 'type' | 'label' | 'isInvalid' | 'errorMessage' | 'isActive' | 'tweakStyles' | 'startIcon'\n> &\n ICommonProps<ISearchInputStyles>;\n\nexport const SearchInput = forwardRef<HTMLInputElement, ISearchInputProps>(function SearchInput(\n { isClearable = true, tweakStyles, ...props },\n ref,\n) {\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'SearchInput',\n });\n\n return (\n <Input\n ref={ref}\n startIcon=\"search\"\n isClearable={isClearable}\n tweakStyles={tweakInputStyles}\n {...props}\n />\n );\n});\n","import type { IScrollIntoViewIfNeededProps } from './ScrollIntoViewIfNeeded';\n\nexport const ScrollIntoViewIfNeededDefaultElementType = 'div';\n\nexport const ScrollIntoViewIfNeededDefaultProps: IScrollIntoViewIfNeededProps = {\n active: true,\n elementType: ScrollIntoViewIfNeededDefaultElementType,\n options: {\n behavior: 'smooth',\n scrollMode: 'if-needed',\n },\n};\n","import {\n createElement,\n createRef,\n DOMElement,\n HTMLProps,\n PureComponent,\n ReactNode,\n RefObject,\n} from 'react';\nimport scrollIntoViewIfNeeded, { StandardBehaviorOptions } from 'scroll-into-view-if-needed';\nimport {\n ScrollIntoViewIfNeededDefaultElementType,\n ScrollIntoViewIfNeededDefaultProps,\n} from './constants';\n\nexport interface IScrollIntoViewIfNeededProps extends HTMLProps<HTMLElement> {\n active?: boolean;\n children?: ReactNode;\n elementType?: string;\n options?: StandardBehaviorOptions;\n}\n\nexport class ScrollIntoViewIfNeeded extends PureComponent<IScrollIntoViewIfNeededProps> {\n public static defaultProps: IScrollIntoViewIfNeededProps = ScrollIntoViewIfNeededDefaultProps;\n\n node: RefObject<HTMLElement> = createRef();\n\n componentDidMount(): void {\n const { active } = this.props;\n if (active) {\n this.handleScrollIntoViewIfNeeded();\n }\n }\n\n componentDidUpdate({ active }: IScrollIntoViewIfNeededProps): void {\n const { active: isNowActive } = this.props;\n if (!active && isNowActive) {\n this.handleScrollIntoViewIfNeeded();\n }\n }\n\n handleScrollIntoViewIfNeeded = (): void => {\n const { options } = this.props;\n const { current: node } = this.node;\n\n if (node) {\n scrollIntoViewIfNeeded(node, options);\n }\n };\n\n render(): DOMElement<any, any> {\n const { active, elementType, children, options, ...wrapperProps } = this.props;\n\n return createElement(\n elementType ?? ScrollIntoViewIfNeededDefaultElementType,\n { ref: this.node, ...wrapperProps },\n children,\n );\n }\n}\n","export const DEFAULT_OPTION_INDEX = -2;\nexport const ALL_OPTION_INDEX = -1;\n","import { colors, createThemedStyles, dimensions, helpers, ITweakStyles } from '../../../../theme';\nimport { IControlWrapperSizes } from '../../../ControlWrapper';\n\nexport const ROW_HEIGHT = 40;\nexport const CONTAINER_PADDING = 10;\nexport const CELL_PADDING = [10, 20];\n\nexport const useStyles = createThemedStyles('SelectList', {\n root: {\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n boxShadow: '0 13px 74px -27px rgba(0, 0, 0, 0.11)',\n boxSizing: 'border-box',\n padding: [CONTAINER_PADDING, 0],\n fontSize: 16,\n overflow: 'hidden',\n },\n\n withListHeader: {\n paddingTop: 0,\n },\n\n withListFooter: {\n paddingBottom: 0,\n },\n\n listHeader: {},\n\n listFooter: {},\n\n list: {\n height: '100%',\n maxHeight: ROW_HEIGHT * 6,\n cursor: 'pointer',\n backgroundColor: colors.CLASSIC_WHITE,\n\n ...helpers.withScrollBar,\n },\n\n cell: {\n display: 'flex',\n cursor: 'pointer',\n minHeight: ROW_HEIGHT,\n width: 'auto',\n padding: CELL_PADDING,\n alignItems: 'center',\n boxSizing: 'border-box',\n fontSize: 14,\n },\n\n cellWithCheckbox: {\n padding: 0,\n },\n\n noMatchesLabel: {\n pointerEvents: 'none',\n },\n\n focused: {},\n\n active: {},\n\n disabled: {\n cursor: 'default',\n },\n\n loading: {\n cursor: 'default',\n pointerEvents: 'none',\n },\n\n defaultCell: {},\n});\n\nexport type ISelectListStyles = ITweakStyles<typeof useStyles, IControlWrapperSizes>;\n","import { ICheckboxStyles } from '../../../Checkbox';\nimport { CELL_PADDING } from '../SelectList/SelectList.styles';\n\nexport const checkboxStyles: ICheckboxStyles = {\n root: {\n padding: CELL_PADDING,\n width: '100%',\n },\n\n input: {\n // иначе будет фокуситься и энтер будет вызывать изменение нескольких опций\n display: 'none',\n },\n};\n","import {\n type ChangeEvent,\n type FC,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport clsx from 'clsx';\nimport { type Classes } from 'jss';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { IDataAttributesProps } from '../../../../types';\nimport { Checkbox } from '../../../Checkbox';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport { checkboxStyles } from './SelectListItem.styles';\n\nexport interface ISelectListItemProps extends IDataAttributesProps {\n index: number;\n isSemiChecked?: boolean;\n isDisabled?: boolean;\n isActive?: boolean;\n isFocused?: boolean;\n children: ReactNode;\n classes: Classes<'cellWithCheckbox' | 'cell' | 'focused' | 'active' | 'disabled'>; // TODO: !!!\n isMultiSelect?: boolean;\n onOptionSelect: (index: number, event: MouseEvent<HTMLElement>) => void;\n onToggleCheckbox: (\n index: number,\n isSelected: boolean,\n event: ChangeEvent<HTMLElement> | KeyboardEvent,\n ) => void;\n}\n\nexport const SelectListItem: FC<ISelectListItemProps> = ({\n classes,\n index,\n isSemiChecked,\n isDisabled,\n isActive,\n children,\n isFocused,\n isMultiSelect,\n data,\n onOptionSelect,\n onToggleCheckbox,\n}) => {\n const multiSelectContent = isMultiSelect && (\n <Checkbox\n isChecked={isActive || isSemiChecked}\n isSemiChecked={isSemiChecked}\n isDisabled={isDisabled}\n tweakStyles={checkboxStyles}\n onSelect={({ isSelected }, event) => onToggleCheckbox(index, isSelected, event)}\n >\n {children}\n </Checkbox>\n );\n\n return (\n <ScrollIntoViewIfNeeded\n active={isFocused}\n options={{ block: 'nearest' }}\n className={clsx(classes.cell, {\n [classes.cellWithCheckbox]: isMultiSelect,\n [classes.focused]: isFocused,\n [classes.active]: isActive && !isMultiSelect,\n [classes.disabled]: isDisabled,\n })}\n {...addDataAttributes({\n disabled: isDisabled,\n active: isActive,\n focused: isFocused,\n ...data,\n })}\n onClick={!isDisabled && !isMultiSelect ? (event) => onOptionSelect(index, event) : undefined}\n >\n {isMultiSelect ? multiSelectContent : children}\n </ScrollIntoViewIfNeeded>\n );\n};\n","import { type ReactNode, useMemo } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataTestId,\n getArray,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { type ICommonProps } from '../../../../types';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport type { ISelectProps } from '../../Select';\nimport { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from '../../constants';\nimport { type ISelectListItemProps, SelectListItem } from '../SelectListItem';\nimport { type ISelectListStyles, useStyles } from './SelectList.styles';\n\nexport interface ISelectListProps<Value>\n extends ICommonProps<ISelectListStyles>,\n Pick<ISelectListItemProps, 'onToggleCheckbox' | 'onOptionSelect' | 'isMultiSelect'> {\n options: Value[] | readonly Value[];\n size?: ISelectProps<Value>['size'];\n focusedIndex?: number;\n activeValue?: Value | Value[];\n noMatchesLabel?: string;\n isLoading?: boolean;\n loadingLabel?: ReactNode;\n defaultOptionLabel?: ReactNode;\n allOptionsLabel?: ReactNode;\n areAllOptionsSelected?: boolean;\n shouldScrollToList?: boolean;\n customListHeader?: ReactNode;\n customListFooter?: ReactNode;\n isOptionDisabled: (value: Value) => boolean;\n convertValueToString: (value: Value) => string | undefined;\n convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;\n convertValueToId: (value: Value) => string | undefined;\n}\n\nexport function SelectList<Value>({\n options,\n focusedIndex,\n size,\n activeValue,\n defaultOptionLabel,\n noMatchesLabel = 'Совпадений не найдено',\n isLoading,\n loadingLabel = 'Загрузка...',\n tweakStyles,\n testId,\n shouldScrollToList = true,\n areAllOptionsSelected,\n customListHeader,\n customListFooter,\n isMultiSelect,\n isOptionDisabled,\n allOptionsLabel,\n onOptionSelect,\n onToggleCheckbox,\n convertValueToString,\n convertValueToReactNode = convertValueToString,\n convertValueToId,\n}: ISelectListProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const isHeaderNotEmpty = isReactNodeNotEmpty(customListHeader);\n const isFooterNotEmpty = isReactNodeNotEmpty(customListFooter);\n\n const optionsDisableMap = useMemo(\n () => options.map(isOptionDisabled),\n [options, isOptionDisabled],\n );\n\n const listOptions = useMemo(\n () => options.map((option, index) => convertValueToReactNode(option, optionsDisableMap[index])),\n [options, convertValueToReactNode, optionsDisableMap],\n );\n\n const activeOptionsIds = useMemo(\n () => new Set((getArray(activeValue) as Value[]).map(convertValueToId)),\n [activeValue, convertValueToId],\n );\n\n return (\n <ScrollIntoViewIfNeeded\n active={shouldScrollToList && !isMultiSelect}\n className={clsx(classes.root, isNotEmpty(size) && classes[size], {\n [classes.withListHeader]: isHeaderNotEmpty,\n [classes.withListFooter]: isFooterNotEmpty,\n })}\n >\n {isHeaderNotEmpty && <div className={classes.listHeader}>{customListHeader}</div>}\n <div className={classes.list} {...addDataTestId(testId)} tabIndex={-1}>\n {isLoading ? (\n <div className={clsx(classes.cell, classes.loading)}>{loadingLabel}</div>\n ) : (\n <>\n {isReactNodeNotEmpty(defaultOptionLabel) && (\n <ScrollIntoViewIfNeeded\n active={focusedIndex === DEFAULT_OPTION_INDEX}\n options={{ block: 'nearest' }}\n className={clsx(\n classes.cell,\n classes.defaultCell,\n focusedIndex === DEFAULT_OPTION_INDEX && classes.focused,\n )}\n onClick={(event) => onOptionSelect(DEFAULT_OPTION_INDEX, event)}\n >\n {defaultOptionLabel}\n </ScrollIntoViewIfNeeded>\n )}\n {isReactNodeNotEmpty(allOptionsLabel) && (\n <SelectListItem\n classes={classes}\n index={ALL_OPTION_INDEX}\n isSemiChecked={activeOptionsIds.size > 0 && !areAllOptionsSelected}\n isActive={areAllOptionsSelected}\n isFocused={focusedIndex === ALL_OPTION_INDEX}\n isMultiSelect={isMultiSelect}\n onOptionSelect={onOptionSelect}\n onToggleCheckbox={onToggleCheckbox}\n >\n {allOptionsLabel}\n </SelectListItem>\n )}\n {listOptions.map((opt, i) => {\n const optionValue = options[i];\n const id = convertValueToId(optionValue);\n const isFocused = focusedIndex === i;\n const isActive = activeOptionsIds.has(id);\n // проверяем, что опция задизейблена\n const isDisabled = optionsDisableMap[i];\n\n return (\n <SelectListItem\n key={i}\n classes={classes}\n index={i}\n isDisabled={isDisabled}\n isActive={isActive}\n isFocused={isFocused}\n isMultiSelect={isMultiSelect}\n onOptionSelect={onOptionSelect}\n onToggleCheckbox={onToggleCheckbox}\n data={{ id }}\n >\n {opt}\n </SelectListItem>\n );\n })}\n {listOptions.length === 0 && (\n <div className={clsx(classes.cell, classes.noMatchesLabel)}>{noMatchesLabel}</div>\n )}\n </>\n )}\n </div>\n {isFooterNotEmpty && <div className={classes.listFooter}>{customListFooter}</div>}\n </ScrollIntoViewIfNeeded>\n );\n}\n","import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\n\nexport const defaultIsOptionDisabled = <Value>(option: Value): boolean =>\n typeof option === 'object' &&\n option !== null &&\n ((option as { isDisabled?: boolean })?.isDisabled ?? false);\n\nexport const defaultConvertFunction = (v: unknown): string | undefined =>\n v === undefined ? undefined : String(v);\n\nexport const defaultCompareFunction = <Value>(v1: Value, v2: Value): boolean => v1 === v2;\n\nexport const getDefaultConvertToIdFunction =\n <Value>(\n convertValueToString: (value: Value) => string | undefined,\n ): ((value: Value) => string | undefined) =>\n (value) =>\n isNotEmpty((value as { id: unknown })?.id)\n ? String((value as { id: unknown }).id)\n : convertValueToString(value);\n","import { mergeStyles } from '@true-engineering/true-react-platform-helpers';\nimport { animations, createThemedStyles, dimensions, type ITweakStyles } from '../../theme';\nimport { type IInputStyles } from '../Input';\nimport { type ISearchInputStyles } from '../SearchInput';\nimport { IWithMessagesStyles } from '../WithMessages';\nimport { type ISelectListStyles } from './components';\n\nconst { Z_INDEX } = dimensions;\n\nexport const useStyles = createThemedStyles('Select', {\n root: {\n width: '100%',\n position: 'relative',\n boxSizing: 'border-box',\n },\n\n inputWrapper: {\n width: '100%',\n cursor: 'text',\n },\n\n listWrapper: {\n left: -1,\n zIndex: 3,\n width: 'fit-content',\n minWidth: 'calc(100% + 1px)',\n },\n\n withoutPopper: {\n position: 'absolute',\n top: '100%',\n paddingTop: 4,\n },\n\n listWrapperInBody: {\n minWidth: 'auto',\n width: 'auto',\n maxWidth: 'min-content',\n },\n\n arrow: {\n width: 'var(--icon-inner-size, 20px)',\n height: 'var(--icon-inner-size, 20px)',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'transform',\n zIndex: Z_INDEX.CONTROL_FOCUS + 1,\n },\n\n activeArrow: {\n transform: 'rotate(180deg)',\n },\n\n disabled: {\n '& $arrow': {\n cursor: 'default',\n },\n },\n\n counter: {},\n});\n\nconst baseInputStyles: IInputStyles = {\n input: {\n '&[readonly]': {\n cursor: 'pointer',\n },\n },\n};\n\nconst readonlyInputBaseStyles: IInputStyles = {\n input: {\n cursor: 'pointer',\n },\n};\n\nexport const readonlyInputStyles = mergeStyles(baseInputStyles, readonlyInputBaseStyles);\nexport const readonlyMultiSelectStyles = mergeStyles(baseInputStyles, readonlyInputBaseStyles);\n\nexport const getInputStyles = ({\n hasReadonlyInput,\n isMultiSelect,\n}: {\n hasReadonlyInput: boolean;\n isMultiSelect?: boolean;\n}): IInputStyles => {\n if (hasReadonlyInput && isMultiSelect) {\n return readonlyMultiSelectStyles;\n }\n if (hasReadonlyInput && !isMultiSelect) {\n return readonlyInputStyles;\n }\n return baseInputStyles;\n};\n\nexport type ISelectStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakWithMessages: IWithMessagesStyles;\n tweakInput: IInputStyles;\n tweakSelectList: ISelectListStyles;\n tweakSearchInput: ISearchInputStyles;\n }\n>;\n","import {\n ChangeEvent,\n CSSProperties,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n Ref,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from 'react-overlays';\nimport clsx from 'clsx';\nimport { debounce } from 'ts-debounce';\nimport {\n applyAction,\n createFilter,\n getArray,\n getTestId,\n isNotEmpty,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { hasExactParent } from '../../helpers';\nimport { useDropdown, useIsMounted, useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps, IDropdownWithPopperOptions } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IChangeInputEvent, IInputProps, InputBase } from '../Input';\nimport { ISearchInputProps, SearchInput } from '../SearchInput';\nimport { WithMessages } from '../WithMessages';\nimport { SelectList } from './components';\nimport { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from './constants';\nimport {\n defaultCompareFunction,\n defaultConvertFunction,\n defaultIsOptionDisabled,\n getDefaultConvertToIdFunction,\n} from './helpers';\nimport { IChangeSelectEvent, IMultipleSelectValue, ISelectFooter } from './types';\nimport { getInputStyles, ISelectStyles, useStyles } from './Select.styles';\n\nexport interface ISelectProps<Value>\n extends Omit<IInputProps, 'value' | 'onChange' | 'onBlur' | 'type' | 'tweakStyles'>,\n ICommonProps<ISelectStyles> {\n header?: ReactNode;\n footer?: ISelectFooter<Value>;\n defaultOptionLabel?: ReactNode;\n allOptionsLabel?: string;\n noMatchesLabel?: string;\n loadingLabel?: ReactNode;\n /** @default 'normal' */\n optionsMode?: 'search' | 'dynamic' | 'normal';\n /** @default 400 */\n debounceTime?: number;\n /** @default 0 */\n minSymbolsCountToOpenList?: number;\n dropdownOptions?: IDropdownWithPopperOptions;\n /** @default 'chevron-down' */\n dropdownIcon?: IIcon;\n options: Value[] | readonly Value[];\n value: Value | undefined;\n /** @default true */\n shouldScrollToList?: boolean;\n isMultiSelect?: false;\n searchInput?: {\n /** @default false */\n shouldRenderInList?: boolean;\n ref?: Ref<HTMLInputElement>;\n } & Pick<ISearchInputProps, 'placeholder' | 'shouldFocusOnMount'>;\n isOptionDisabled?: (option: Value) => boolean;\n onChange: (value: Value | undefined, event: IChangeSelectEvent) => void; // подумать как возвращать индекс\n onBlur?: (event: Event | SyntheticEvent) => void;\n onType?: (value: string) => Promise<void>;\n optionsFilter?: (options: Value[], query: string) => Value[];\n onOpen?: () => void;\n compareValuesOnChange?: (v1?: Value, v2?: Value) => boolean;\n /** @description Функция должна быть мемоизирована с целью избежания ререндера */\n convertValueToString?: (value: Value) => string | undefined;\n /** @description Функция должна быть мемоизирована с целью избежания ререндера */\n convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;\n /** @description Функция должна быть мемоизирована с целью избежания ререндера */\n convertValueToId?: (value: Value) => string | undefined;\n}\n\nexport interface IMultipleSelectProps<Value>\n extends Omit<\n ISelectProps<Value>,\n 'value' | 'onChange' | 'compareValuesOnChange' | 'isMultiSelect'\n > {\n isMultiSelect: true;\n value: IMultipleSelectValue<Value> | undefined;\n onChange: (value: IMultipleSelectValue<Value> | undefined, event: IChangeSelectEvent) => void;\n compareValuesOnChange?: (\n v1?: IMultipleSelectValue<Value>,\n v2?: IMultipleSelectValue<Value>,\n ) => boolean;\n}\n\nexport function Select<Value>(\n props: ISelectProps<Value> | IMultipleSelectProps<Value>,\n): JSX.Element {\n const {\n options,\n isMultiSelect,\n value,\n header,\n footer,\n defaultOptionLabel,\n allOptionsLabel,\n debounceTime = 400,\n optionsMode = 'normal',\n noMatchesLabel,\n loadingLabel,\n tweakStyles,\n testId,\n isActive,\n isReadonly,\n isDisabled,\n dropdownOptions,\n minSymbolsCountToOpenList = 0,\n dropdownIcon = 'chevron-down',\n shouldScrollToList = true,\n searchInput,\n icon,\n endIcon = icon,\n onChange,\n onFocus,\n onBlur,\n onType,\n onOpen,\n isOptionDisabled = defaultIsOptionDisabled,\n compareValuesOnChange = defaultCompareFunction,\n convertValueToString = defaultConvertFunction,\n convertValueToId,\n convertValueToReactNode,\n optionsFilter,\n infoMessage,\n errorMessage,\n size,\n ...inputProps\n } = props;\n const classes = useStyles({ theme: tweakStyles });\n\n const { shouldRenderInList: shouldRenderSearchInputInList = false, ...searchInputProps } =\n searchInput ?? {};\n const hasSearchInputInList = optionsMode !== 'normal' && shouldRenderSearchInputInList;\n const hasReadonlyInput = isReadonly || optionsMode === 'normal' || shouldRenderSearchInputInList;\n\n const tweakWithMessagesStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithMessages',\n currentComponentName: 'Select',\n });\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: getInputStyles({ hasReadonlyInput, isMultiSelect }),\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'Select',\n });\n\n const tweakSearchInputStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'Select',\n });\n\n const tweakSelectListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakSelectList',\n currentComponentName: 'Select',\n });\n\n const isMounted = useIsMounted();\n const [isListOpen, setIsListOpen] = useState(false);\n const [areOptionsLoading, setAreOptionsLoading] = useState(false);\n const hasDefaultOption = isReactNodeNotEmpty(defaultOptionLabel);\n\n const [focusedListCellIndex, setFocusedListCellIndex] = useState(DEFAULT_OPTION_INDEX);\n const [searchValue, setSearchValue] = useState('');\n // если мы ввели что то в строку поиска - то этот булеан будет отключаться\n // вынесен отдельно, из-за проблем с дебаунсом при динамич. опциях\n const [shouldShowDefaultOption, setShouldShowDefaultOption] = useState(true);\n\n const root = useRef<HTMLDivElement>(null);\n const inputWrapper = useRef<HTMLDivElement>(null);\n const list = useRef<HTMLDivElement>(null);\n const input = useRef<HTMLInputElement>(null); // TODO ref снаружи?\n\n const strValue = isMultiSelect ? value?.[0] : value;\n const shouldShowAllOption =\n isMultiSelect && isStringNotEmpty(allOptionsLabel) && searchValue === '';\n\n const filteredOptions = useMemo(() => {\n if (optionsMode !== 'search') {\n return options as Value[];\n }\n\n const filter =\n optionsFilter ?? createFilter<Value>((option) => [convertValueToString(option) ?? '']);\n\n return filter(options as Value[], searchValue);\n }, [optionsFilter, options, convertValueToString, searchValue, optionsMode]);\n\n const availableOptions = useMemo(\n () => options.filter((option) => !isOptionDisabled(option)),\n [options, isOptionDisabled],\n );\n\n const areAllOptionsSelected = isMultiSelect && value?.length === availableOptions.length;\n const shouldShowMultiSelectCounter =\n isMultiSelect && isNotEmpty(value) && value.length > 1 && !areAllOptionsSelected;\n\n const optionsIndexesForNavigation = useMemo(() => {\n const result: number[] = [];\n if (shouldShowDefaultOption && hasDefaultOption) {\n result.push(DEFAULT_OPTION_INDEX);\n }\n if (shouldShowAllOption) {\n result.push(ALL_OPTION_INDEX);\n }\n return result.concat(\n filteredOptions.reduce((acc, cur, i) => {\n if (!isOptionDisabled(cur)) {\n acc.push(i);\n }\n return acc;\n }, [] as number[]),\n );\n }, [\n filteredOptions,\n hasDefaultOption,\n isOptionDisabled,\n shouldShowAllOption,\n shouldShowDefaultOption,\n ]);\n\n const stringValue = isNotEmpty(strValue) ? convertValueToString(strValue) : undefined;\n // Для мультиселекта пытаемся показать \"Все опции\" если выбраны все опции\n const showedStringValue =\n areAllOptionsSelected && isNotEmpty(allOptionsLabel) ? allOptionsLabel : stringValue;\n\n const convertToId = useCallback(\n (v: Value) => (convertValueToId ?? getDefaultConvertToIdFunction(convertValueToString))(v),\n [convertValueToId, convertValueToString],\n );\n\n const closeList = useCallback(() => {\n setIsListOpen(false);\n setSearchValue('');\n setShouldShowDefaultOption(true);\n }, [dropdownOptions?.shouldUsePopper]);\n\n const handleListClose = useCallback(\n (event: Event | SyntheticEvent) => {\n if (!isListOpen) {\n return;\n }\n\n closeList();\n onBlur?.(event);\n },\n [isListOpen, closeList, onBlur],\n );\n\n const handleListOpen = () => {\n if (!isReadonly && !isListOpen) {\n setIsListOpen(true);\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n handleListOpen();\n };\n\n const handleOnClick = () => {\n handleListOpen();\n };\n\n const handleChange = useCallback(\n (newValue: Value | IMultipleSelectValue<Value> | undefined, event: IChangeSelectEvent) => {\n // Тут беда с типами, сорри\n if (!compareValuesOnChange(value as never, newValue as never)) {\n onChange(newValue as (Value & IMultipleSelectValue<Value>) | undefined, event);\n }\n },\n [value, compareValuesOnChange, onChange],\n );\n\n const handleOptionSelect = useCallback(\n (index: number, event: MouseEvent<HTMLElement> | KeyboardEvent) => {\n handleChange(index === DEFAULT_OPTION_INDEX ? undefined : filteredOptions[index], event);\n handleListClose(event);\n input.current?.blur();\n },\n [handleChange, handleListClose, filteredOptions],\n );\n\n // MultiSelect\n const handleToggleOptionCheckbox = useCallback(\n (index: number, isSelected: boolean, event: ChangeEvent<HTMLElement> | KeyboardEvent) => {\n if (!isMultiSelect) {\n return;\n }\n\n // Если выбрана не дефолтная опция, которая сетит андеф\n if (index === DEFAULT_OPTION_INDEX || (index === ALL_OPTION_INDEX && !isSelected)) {\n handleChange(undefined, event);\n return;\n }\n if (index === ALL_OPTION_INDEX && isSelected) {\n handleChange(availableOptions as IMultipleSelectValue<Value>, event);\n return;\n }\n const option = filteredOptions[index];\n handleChange(\n isSelected\n ? // Добавляем\n ([...(value ?? []), option] as IMultipleSelectValue<Value>)\n : // Убираем\n value?.filter((o) => convertToId(o) !== convertToId(option)),\n event,\n );\n },\n [isMultiSelect, filteredOptions, handleChange, value, availableOptions, convertToId],\n );\n\n const handleOnType = useCallback(\n async (v: string) => {\n if (onType === undefined) {\n return;\n }\n if (isMounted()) {\n setAreOptionsLoading(true);\n }\n await onType(v);\n if (isMounted()) {\n setAreOptionsLoading(false);\n }\n if (optionsMode === 'dynamic') {\n setShouldShowDefaultOption(v === '');\n }\n },\n [isMounted, onType, optionsMode],\n );\n\n const debounceHandleOnType = useMemo(\n () => debounce(handleOnType, debounceTime, { isImmediate: debounceTime === 0 }),\n [handleOnType, debounceTime],\n );\n\n const handleInputChange = (v: string, event: IChangeInputEvent) => {\n if (onType !== undefined) {\n debounceHandleOnType(v);\n }\n\n if (optionsMode !== 'dynamic') {\n setShouldShowDefaultOption(v === '');\n }\n\n if (v === '' && !hasSearchInputInList) {\n handleChange(undefined, event);\n }\n\n setSearchValue(v);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isListOpen) {\n return;\n }\n\n event.stopPropagation();\n const curIndexInNavigation = optionsIndexesForNavigation.findIndex(\n (index) => index === focusedListCellIndex,\n );\n\n switch (event.code) {\n case 'Enter':\n case 'NumpadEnter': {\n let indexToSelect = focusedListCellIndex;\n\n // если осталась одна опция в списке,\n // то выбираем ее нажатием на enter\n if (indexToSelect === DEFAULT_OPTION_INDEX && filteredOptions.length === 1) {\n indexToSelect = 0;\n }\n\n if (isMultiSelect) {\n let isThisValueAlreadySelected: boolean | undefined;\n if (indexToSelect === ALL_OPTION_INDEX) {\n isThisValueAlreadySelected = areAllOptionsSelected;\n } else {\n // подумать над концептом реального фокуса на опциях, а не вот эти вот focusedCell\n const option = filteredOptions[indexToSelect];\n const valueIdToSelect = convertToId(option);\n isThisValueAlreadySelected =\n value?.some((opt) => convertToId(opt) === valueIdToSelect) ?? false;\n }\n handleToggleOptionCheckbox(indexToSelect, !isThisValueAlreadySelected, event);\n } else {\n handleOptionSelect(indexToSelect, event);\n }\n break;\n }\n\n case 'ArrowDown': {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n const targetIndexInNavigation =\n (curIndexInNavigation + 1) % optionsIndexesForNavigation.length;\n setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);\n break;\n }\n\n case 'ArrowUp': {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n const targetIndexInNavigation =\n (curIndexInNavigation - 1 + optionsIndexesForNavigation.length) %\n optionsIndexesForNavigation.length;\n setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);\n break;\n }\n }\n };\n\n const onArrowClick = () => {\n if (isListOpen) {\n input.current?.blur();\n closeList();\n } else {\n input.current?.focus();\n }\n };\n\n useOnClickOutsideWithRef(list, handleListClose, inputWrapper);\n\n const hasEnoughSymbolsToSearch = searchValue.trim().length >= minSymbolsCountToOpenList;\n\n const isOpen =\n // Пользователь пытается открыть лист\n isListOpen &&\n // Нам есть что показать:\n // Есть опции\n (filteredOptions.length > 0 ||\n // Дефолтная опция\n (defaultOptionLabel !== undefined && !hasEnoughSymbolsToSearch) ||\n // Текст \"Загрузка...\"\n inputProps.isLoading ||\n // Текст \"Совпадений не найдено\"\n noMatchesLabel !== undefined ||\n // У нас есть инпут с поиском внутри листа\n hasSearchInputInList) &&\n // Последняя проверка на случай, если мы че то ищем в опциях\n (optionsMode === 'normal' || hasEnoughSymbolsToSearch);\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n // Когда что-то блокирует открытие листа, но блур все равно должен сработать\n // например minSymbolsCount\n if (isListOpen && !isOpen) {\n handleListClose(event);\n return;\n }\n\n if (\n !isNotEmpty(event.relatedTarget) ||\n !isNotEmpty(list.current) ||\n !isNotEmpty(inputWrapper.current)\n ) {\n return;\n }\n\n const isActionInsideSelect =\n hasExactParent(event.relatedTarget, list.current) ||\n hasExactParent(event.relatedTarget, inputWrapper.current);\n\n // Ничего не делаем, если клик был внутри селекта\n if (!isActionInsideSelect) {\n handleListClose(event);\n }\n };\n\n // Эти значения ставятся в false по дефолту также в useDropdown\n const {\n shouldUsePopper = false,\n shouldRenderInBody = false,\n shouldHideOnScroll = false,\n } = dropdownOptions ?? {};\n\n const popperData = useDropdown({\n isOpen,\n onDropdownClose: handleListClose,\n referenceElement: inputWrapper.current,\n dropdownElement: list.current,\n options: dropdownOptions,\n dependenciesForPositionUpdating: [inputProps.isLoading, filteredOptions.length],\n });\n\n useEffect(() => {\n const focusedCellIndex = isNotEmpty(strValue)\n ? optionsIndexesForNavigation.find((index) => {\n const option = filteredOptions[index];\n return isNotEmpty(option) && convertToId(option) === convertToId(strValue);\n })\n : undefined;\n\n setFocusedListCellIndex(focusedCellIndex ?? optionsIndexesForNavigation[0]);\n }, [strValue, filteredOptions, optionsIndexesForNavigation, convertToId]);\n\n useEffect(() => {\n if (isOpen) {\n onOpen?.();\n }\n }, [isOpen]);\n\n const searchInputEl = hasSearchInputInList && (\n <SearchInput\n size={size}\n value={searchValue}\n onChange={handleInputChange}\n tweakStyles={tweakSearchInputStyles}\n placeholder=\"Поиск\"\n {...searchInputProps}\n />\n );\n\n // Т.к. используется для проверки на пустой элемент `isReactNodeNotEmpty` внутри `SelectList`, то\n // он пропускает React.Fragment\n const customHeader = (isReactNodeNotEmpty(searchInputEl) || isReactNodeNotEmpty(header)) && (\n <>\n {searchInputEl}\n {header}\n </>\n );\n\n const listEl = (\n <div\n className={clsx(classes.listWrapper, {\n [classes.withoutPopper]: !shouldUsePopper,\n [classes.listWrapperInBody]: shouldRenderInBody,\n })}\n ref={list}\n style={popperData?.styles.popper as CSSProperties}\n tabIndex={0}\n onBlur={handleBlur} // обработка для Tab из списка\n {...popperData?.attributes.popper}\n >\n {isOpen && (\n <SelectList\n options={filteredOptions}\n size={size}\n defaultOptionLabel={hasDefaultOption && shouldShowDefaultOption && defaultOptionLabel}\n allOptionsLabel={shouldShowAllOption && allOptionsLabel}\n areAllOptionsSelected={areAllOptionsSelected}\n customListHeader={customHeader}\n customListFooter={applyAction(footer, { filteredOptions })}\n noMatchesLabel={noMatchesLabel}\n focusedIndex={focusedListCellIndex}\n activeValue={value}\n isLoading={inputProps.isLoading}\n loadingLabel={loadingLabel}\n tweakStyles={tweakSelectListStyles}\n testId={getTestId(testId, 'list')}\n isMultiSelect={isMultiSelect}\n // скролл не работает с включеным поппером\n shouldScrollToList={shouldScrollToList && !shouldUsePopper && !shouldHideOnScroll}\n isOptionDisabled={isOptionDisabled}\n convertValueToString={convertValueToString}\n convertValueToReactNode={convertValueToReactNode}\n convertValueToId={convertToId}\n onOptionSelect={handleOptionSelect}\n onToggleCheckbox={handleToggleOptionCheckbox}\n />\n )}\n </div>\n );\n\n return (\n <WithMessages\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n tweakStyles={tweakWithMessagesStyles}\n testId={getTestId(testId, 'wrapper')}\n >\n <div className={classes.root} onKeyDown={handleKeyDown} ref={root}>\n <div\n className={clsx(classes.inputWrapper, isDisabled && classes.disabled)}\n onClick={isDisabled || isReadonly ? undefined : handleOnClick}\n ref={inputWrapper}\n >\n <InputBase\n value={\n searchValue !== '' && !shouldRenderSearchInputInList ? searchValue : showedStringValue\n }\n size={size}\n onChange={handleInputChange}\n isActive={isListOpen || isActive}\n isReadonly={hasReadonlyInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n isDisabled={isDisabled}\n ref={input}\n isLoading={areOptionsLoading}\n tweakStyles={tweakInputStyles}\n testId={testId}\n icon={[\n isMultiSelect && shouldShowMultiSelectCounter\n ? {\n key: 'counter',\n iconComponent: (\n <div key=\"counter\" className={classes.counter}>\n (+{value.length - 1})\n </div>\n ),\n shouldResetSize: true,\n }\n : undefined,\n\n ...getArray(endIcon),\n\n <div\n key=\"arrow\"\n className={clsx(classes.arrow, isOpen && classes.activeArrow)}\n onClick={onArrowClick} // клик тут, потому что onClick в ControlWrapper добавляет tabIndex={0}\n >\n {renderIcon(dropdownIcon)}\n </div>,\n ].filter(isNotEmpty)}\n {...inputProps}\n />\n </div>\n {shouldUsePopper ? (\n <Portal container={shouldRenderInBody ? document.body : inputWrapper.current}>\n <>{listEl}</>\n </Portal>\n ) : (\n <>{isOpen && listEl}</>\n )}\n </div>\n </WithMessages>\n );\n}\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { ISelectStyles } from '../../../Select';\n\nexport const useStyles = createThemedStyles('DatePickerHeader', {\n btn: {\n width: 36,\n height: 36,\n padding: 8,\n boxSizing: 'border-box',\n border: 'none',\n outline: 'none',\n cursor: 'pointer',\n marginLeft: 8,\n },\n\n header: {\n margin: 6,\n display: 'flex',\n alignItems: 'center',\n },\n\n buttons: {\n flexShrink: 0,\n marginLeft: 'auto',\n },\n});\n\nexport const selectStyles: ISelectStyles = {\n tweakSelectList: {\n cell: {\n fontSize: 14,\n minHeight: 35,\n },\n },\n\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': '35px',\n border: 'none',\n },\n },\n\n inputContent: {\n fontSize: 16,\n fontWeight: 'bold',\n },\n },\n};\n\nexport type IDatePickerHeaderStyles = ITweakStyles<\n typeof useStyles,\n { tweakSelect: ISelectStyles }\n>;\n","import { FC, useMemo } from 'react';\nimport { ReactDatePickerCustomHeaderProps as BaseProps } from 'react-datepicker';\nimport { getMonth, getYear } from 'date-fns';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { Select } from '../../../Select';\nimport { IDatePickerHeaderStyles, selectStyles, useStyles } from './DatePickerHeader.styles';\n\nexport interface IDatePickerHeaderProps\n extends BaseProps,\n Pick<ICommonProps<IDatePickerHeaderStyles>, 'tweakStyles'> {\n months?: string[];\n}\n\nexport const DatePickerHeader: FC<IDatePickerHeaderProps> = ({\n date,\n months = [],\n tweakStyles,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n changeYear,\n changeMonth,\n decreaseMonth,\n increaseMonth,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: selectStyles,\n tweakStyles,\n className: 'tweakSelect',\n currentComponentName: 'DatePickerHeader',\n });\n\n const years = useMemo(\n () => Array.from(Array(41)).map((_, i) => getYear(new Date()) - 30 + i),\n [],\n );\n\n return (\n <div className={classes.header}>\n <Select\n value={months[getMonth(date)]}\n options={months}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => changeMonth(months.indexOf(value as string))}\n />\n <Select\n value={getYear(date)}\n options={years}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => changeYear(value as number)}\n />\n\n <div className={classes.buttons}>\n <button\n type=\"button\"\n className={classes.btn}\n disabled={prevMonthButtonDisabled}\n onClick={decreaseMonth}\n >\n <Icon type=\"chevron-left\" />\n </button>\n\n <button\n type=\"button\"\n className={classes.btn}\n disabled={nextMonthButtonDisabled}\n onClick={increaseMonth}\n >\n <Icon type=\"chevron-right\" />\n </button>\n </div>\n </div>\n );\n};\n","import { FC, PropsWithChildren } from 'react';\nimport { FloatingPortal } from '@floating-ui/react';\n\nexport const PopperContainer: FC<PropsWithChildren> = (props) => (\n <FloatingPortal root={document.body} {...props} />\n);\n","import { enUS as enLocale, ru as ruLocale, type Locale } from 'date-fns/locale';\n\nexport const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\n\nexport const OUTSIDE_CLICK_IGNORE_CLASS = 'react-datepicker-ignore-onclickoutside';\n\nexport const LocalesMap = {\n ru: ruLocale,\n en: enLocale,\n} satisfies Record<string, Locale>;\n\nexport type IDatePickerLocale = keyof typeof LocalesMap | Locale;\n","import { format, isSameDay, parse } from 'date-fns';\nimport {\n isEmpty,\n isNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { EMPTY_DATE_INPUT_VALUE } from '../DateInput';\n\nexport const getDateFormatter =\n (dateFormat: string) =>\n (date?: Date | null): string =>\n isNotEmpty(date) ? format(date, dateFormat) : '';\n\nexport const getDateValueParser =\n (dateFormat: string) =>\n (value: string): Date | null => {\n const inputValue = value === EMPTY_DATE_INPUT_VALUE ? '' : value;\n return isStringNotEmpty(inputValue) ? parse(value, dateFormat, new Date()) : null;\n };\n\nexport const areDatesEquals = (date1?: Date | null, date2?: Date | null): boolean =>\n (isEmpty(date1) && isEmpty(date2)) ||\n (isNotEmpty(date1) && isNotEmpty(date2) && isSameDay(date1, date2));\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { IDateInputStyles } from '../DateInput';\n\nexport const useStyles = createThemedStyles('DatePicker', {\n root: {\n width: '100%',\n height: '100%',\n },\n\n day: {},\n\n dayInner: {},\n\n datepicker: {},\n\n popper: {\n zIndex: 10,\n\n '&[data-placement^=\"bottom\"]': {\n paddingTop: 6,\n },\n\n '&[data-placement^=\"top\"]': {\n paddingBottom: 6,\n },\n\n '&[data-placement^=\"left\"]': {\n paddingRight: 6,\n },\n\n '&[data-placement^=\"right\"]': {\n paddingLeft: 6,\n },\n },\n});\n\nexport type IDatePickerStyles = ITweakStyles<\n typeof useStyles,\n { tweakDateInput: IDateInputStyles }\n>;\n","import {\n FC,\n FocusEvent,\n SyntheticEvent,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type ReactDatePicker from 'react-datepicker';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport clsx from 'clsx';\nimport { isAfter, isBefore, isValid } from 'date-fns';\nimport {\n addDataAttributes,\n isEmpty,\n isNotEmpty,\n isString,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { offset } from '@floating-ui/react';\nimport { useMergedRefs, useOnClickOutside, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { DateInput, EMPTY_DATE_INPUT_VALUE, IDateInputProps } from '../DateInput';\nimport { DatePickerBase, DatePickerHeader, PopperContainer } from './components';\nimport {\n DEFAULT_DATE_FORMAT,\n IDatePickerLocale,\n LocalesMap,\n OUTSIDE_CLICK_IGNORE_CLASS,\n} from './constants';\nimport { areDatesEquals, getDateFormatter, getDateValueParser } from './helpers';\nimport { IDatePickerBaseProps, IRange } from './types';\nimport { IDatePickerStyles, useStyles } from './DatePicker.styles';\n\nexport interface IDatePickerProps extends IDatePickerBaseProps, ICommonProps<IDatePickerStyles> {\n selectedDate?: Date | null;\n locale: IDatePickerLocale;\n months?: string[];\n /** @default 'dd.MM.yyyy' */\n dateFormat?: string;\n /** @default 1 */\n calendarStartDay?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** @default false */\n isRange?: boolean;\n /** @default false */\n isInline?: boolean;\n /** @default false */\n shouldRenderPopperInBody?: boolean;\n customInput?: FC<IDateInputProps>;\n onChangeDate?: (date: Date | null, event?: SyntheticEvent) => void;\n onChangeRange?: (date: IRange, event?: SyntheticEvent) => void;\n}\n\nexport const DatePicker = forwardRef<ReactDatePicker, IDatePickerProps>(function DatePicker(\n {\n data,\n selectedDate = null,\n minDate,\n maxDate,\n endDate = null,\n startDate = null,\n locale,\n months,\n calendarStartDay = 1,\n dateFormat = DEFAULT_DATE_FORMAT,\n monthsShown,\n placeholder,\n isRange = false,\n isInline = false,\n isDisabled,\n isClearable,\n strictParsing,\n fixedHeight,\n focusSelectedMonth,\n disabledKeyboardNavigation,\n shouldRenderPopperInBody = false,\n allowSameDay = false,\n shouldCloseOnSelect,\n showPreviousMonths,\n preventOpenOnFocus,\n popperModifiers = [],\n popperPlacement = 'bottom-start',\n todayButton,\n highlightDates,\n calendarContainer,\n dayClassName,\n customInput: CustomInput = DateInput,\n customInputRef,\n renderCustomHeader,\n filterDate,\n onYearChange,\n onMonthChange,\n onCalendarOpen,\n onCalendarClose,\n onChangeDate,\n onChangeRange,\n onBlur,\n onFocus,\n onKeyDown,\n tweakStyles,\n ...inputProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakDateInputStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakDateInput',\n currentComponentName: 'DatePicker',\n });\n\n const { formatDate, parseDateValue } = useMemo(\n () => ({\n formatDate: getDateFormatter(dateFormat),\n parseDateValue: getDateValueParser(dateFormat),\n }),\n [dateFormat],\n );\n\n const datePickerRef = useRef<DatePickerBase>();\n\n const componentRef = useMergedRefs([ref, datePickerRef]);\n\n const [isOpen, setIsOpen] = useState(false);\n\n const [dateValue, setDateValue] = useState(formatDate(selectedDate));\n\n const [start, setStart] = useState(startDate);\n const [startDateValue, setStartDateValue] = useState(formatDate(startDate));\n const [end, setEnd] = useState(endDate);\n const [endDateValue, setEndDateValue] = useState(formatDate(endDate));\n\n const hasDateInputValue = isRange\n ? isStringNotEmpty(startDateValue) || isStringNotEmpty(endDateValue)\n : isStringNotEmpty(dateValue);\n\n const dateInputProps: IDateInputProps = {\n ...inputProps,\n isRange,\n isDisabled,\n isClearable,\n isActive: isOpen,\n icon: isClearable && hasDateInputValue ? undefined : 'calendar',\n tweakStyles: tweakDateInputStyles,\n ...(isRange ? { startDate: startDateValue, endDate: endDateValue } : { date: dateValue }),\n };\n\n const handleChangeDate = (value: Date | null, event?: SyntheticEvent) => {\n onChangeDate?.(value, event);\n };\n\n const isDateInRange = (date: Date) =>\n (isEmpty(minDate) || isAfter(date, minDate)) && (isEmpty(maxDate) || isBefore(date, maxDate));\n\n // TODO: Если пропса allowSameDay равна true и введена только начальная дата, то\n // невозможно будет стереть значение в инпуте. Обойти это можно только если\n // полностью выбрать период, а затем уже очищать инпут (баг в react-datepicker. В этом\n // случае value равняется не [null, null], а [start, null])\n const handleChangeRange = (value: IRange, event?: SyntheticEvent) => {\n if (\n allowSameDay ||\n !areDatesEquals(value?.[0], startDate) ||\n !areDatesEquals(value?.[1], endDate)\n ) {\n setStart(value?.[0] ?? null);\n setEnd(value?.[1] ?? null);\n onChangeRange?.(value, event);\n }\n };\n\n // TODO: кажется это можно улучшить, т.к проблему пофиксили (https://github.com/Hacker0x01/react-datepicker/pull/5060)\n const handleChangeDateRangeInput = (value: string) => {\n const newStartDateValue = value.slice(0, 10);\n let newStart = parseDateValue(newStartDateValue);\n const newEndDateValue = value.slice(13);\n let newEnd = parseDateValue(newEndDateValue);\n\n if (\n (isNotEmpty(newStart) && !isValid(newStart)) ||\n (isNotEmpty(newStart) && !isDateInRange(newStart))\n ) {\n newStart = start;\n }\n\n if (\n (isNotEmpty(newEnd) && !isValid(newEnd)) ||\n (isNotEmpty(newEnd) && !isDateInRange(newEnd))\n ) {\n newEnd = end;\n }\n\n // Если оставить пустой начальную дату и заполненной конечную,\n // то ломается react-datepicker и в календарике ничего нельзя выбирать\n if (\n (isEmpty(newStart) && isValid(newEnd)) ||\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n (isValid(newStart) && isValid(newEnd) && isAfter(newStart!, newEnd!))\n ) {\n newStart = newEnd;\n newEnd = null;\n }\n\n setStartDateValue(newStartDateValue);\n setStart(newStart);\n setEndDateValue(newEndDateValue);\n setEnd(newEnd);\n };\n\n const handleDateInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n setDateValue(formatDate(selectedDate));\n };\n\n const setDateRangeValues = (startValue: Date | null = null, endValue: Date | null = null) => {\n let convertedStartDate = formatDate(startValue);\n const convertedEndDate = formatDate(endValue);\n if (convertedStartDate === '' && convertedEndDate !== '') {\n // Если выставлять пустую строку, то конечная дата перепрыгивает на место начальной\n convertedStartDate = EMPTY_DATE_INPUT_VALUE;\n }\n\n setStart(startValue);\n setStartDateValue(convertedStartDate);\n setEnd(endValue);\n setEndDateValue(convertedEndDate);\n };\n\n const handleDateRangeInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n handleChangeRange([start, end], event);\n setDateRangeValues(start, end);\n };\n\n const handleOpenCalendar = () => {\n setIsOpen(true);\n onCalendarOpen?.();\n };\n\n const handleCloseCalendar = () => {\n setIsOpen(false);\n if (isRange) {\n handleChangeRange([start, end]);\n setDateRangeValues(start, end);\n } else {\n setDateValue(formatDate(selectedDate));\n }\n onCalendarClose?.();\n };\n\n useEffect(() => {\n setDateValue(formatDate(selectedDate));\n setDateRangeValues(startDate, endDate);\n }, [selectedDate, startDate, endDate]);\n\n // Кастомный обработчик клика снаружи, чтобы можно было поставить фокус на Input при открытом календаре.\n // Проблема в том, что класс OUTSIDE_CLICK_IGNORE_CLASS висит контейнере Input'а. А react-datepicker\n // проверяет наличие класса непосредственно на элементе, который вызвал клик, но не на его родителях\n useOnClickOutside(\n () => datePickerRef.current?.calendar?.containerRef?.current,\n (event) => datePickerRef.current?.handleClickOutside(event as MouseEvent),\n OUTSIDE_CLICK_IGNORE_CLASS,\n );\n\n return (\n <div className={classes.root} {...addDataAttributes(data)}>\n <DatePickerBase\n ref={componentRef}\n minDate={minDate}\n maxDate={maxDate}\n locale={isString(locale) ? LocalesMap[locale] : locale}\n dateFormat={dateFormat}\n placeholderText={placeholder}\n calendarStartDay={calendarStartDay}\n inline={isInline}\n disabled={isDisabled}\n fixedHeight={fixedHeight}\n showPreviousMonths={showPreviousMonths}\n focusSelectedMonth={focusSelectedMonth}\n monthsShown={monthsShown}\n allowSameDay={allowSameDay}\n showPopperArrow={false}\n popperClassName={classes.popper}\n calendarClassName={classes.datepicker}\n dayClassName={(v) => clsx(classes.day, dayClassName?.(v))}\n disabledKeyboardNavigation={disabledKeyboardNavigation}\n popperContainer={shouldRenderPopperInBody ? PopperContainer : undefined}\n // Убираем дефолтный отступ в 10px из либы\n // https://github.com/Hacker0x01/react-datepicker/blob/db67a58de2b05d2681bdf0a4977b606095d514c4/src/with_floating.tsx#L58\n popperModifiers={[offset(-10), ...popperModifiers]}\n popperPlacement={popperPlacement}\n strictParsing={strictParsing}\n preventOpenOnFocus={preventOpenOnFocus}\n shouldCloseOnSelect={shouldCloseOnSelect}\n customInputRef={customInputRef}\n customInput={<CustomInput {...dateInputProps} />}\n renderDayContents={(day) => <div className={classes.dayInner}>{day}</div>}\n renderCustomHeader={\n renderCustomHeader ?? ((baseProps) => <DatePickerHeader {...baseProps} months={months} />)\n }\n todayButton={todayButton}\n highlightDates={highlightDates}\n calendarContainer={calendarContainer}\n filterDate={filterDate}\n onYearChange={onYearChange}\n onMonthChange={onMonthChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onCalendarOpen={handleOpenCalendar}\n onCalendarClose={handleCloseCalendar}\n onChangeRaw={(_, value?: string) => {\n // Если передали value, значит этот обработчик вызвался после изменения значения в инпуте\n // (react-datepicker вызывает эту функцию также при клике на дату в календаре)\n if (value === undefined) {\n return;\n }\n if (isRange) {\n handleChangeDateRangeInput(value);\n } else {\n setDateValue(value);\n }\n }}\n {...(isRange\n ? {\n startDate: start,\n endDate: end,\n selected: start,\n selectsRange: true,\n onBlur: handleDateRangeInputBlur,\n onChange: handleChangeRange,\n }\n : {\n selected: selectedDate,\n onBlur: handleDateInputBlur,\n onChange: handleChangeDate,\n })}\n />\n </div>\n );\n});\n","export const LINK_REGEXP = /(http(s?):\\/\\/(.*))(\\s?)/;\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Description', {\n root: {},\n\n button: {\n cursor: 'pointer',\n display: 'inline-block',\n color: colors.FONT_MEDIUM,\n marginTop: 18,\n textTransform: 'capitalize',\n borderBottom: [1, 'dashed', colors.FONT_MEDIUM],\n\n '&:hover': {\n color: colors.FONT_MAIN,\n },\n },\n\n link: {\n color: colors.FONT_MEDIUM,\n textDecoration: 'none',\n borderBottom: [1, 'dashed', colors.FONT_MEDIUM],\n\n '&:hover': {\n color: colors.FONT_MAIN,\n },\n },\n});\n\nexport type IDescriptionStyles = ITweakStyles<typeof useStyles>;\n","import { SyntheticEvent } from 'react';\n\nexport const blockEvent = (event: SyntheticEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n};\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('FileInput', {\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n\n label: {\n position: 'relative',\n width: 'fit-content',\n fontSize: 16,\n marginBottom: 12,\n },\n\n requiredLabel: {\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n right: -8,\n top: 4,\n transform: 'translate(0, -50%)',\n width: 6,\n height: 6,\n borderRadius: '50%',\n },\n },\n\n description: {\n marginBottom: 8,\n fontSize: 12,\n },\n\n text: {\n padding: [16, 0],\n },\n\n inputWrapper: {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n boxSizing: 'border-box',\n marginBottom: 8,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color',\n },\n\n inputLabel: {\n position: 'absolute',\n inset: 0,\n cursor: 'pointer',\n\n '& input': {\n opacity: 0,\n width: 1,\n height: 1,\n zIndex: -1,\n },\n },\n\n dragged: {},\n\n active: {},\n\n disabled: {\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n\n fileList: {\n display: 'flex',\n flexWrap: 'wrap',\n columnGap: 6,\n rowGap: 12,\n },\n});\n\nexport type IFileInputStyles = ITweakStyles<typeof useStyles>;\n","import {\n ReactNode,\n useState,\n InputHTMLAttributes,\n forwardRef,\n ChangeEventHandler,\n DragEventHandler,\n} from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { blockEvent } from './helpers';\nimport { IFileInputStyles, useStyles } from './FileInput.styles';\n\nexport interface IFileInputProps extends ICommonProps<IFileInputStyles> {\n fileList?: ReactNode;\n label?: ReactNode;\n text: ReactNode;\n description?: ReactNode;\n /** @default false */\n isDragAndDropDisabled?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isReadOnly?: boolean;\n /** @default false */\n isMultipleDisabled?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default undefined */\n accept?: InputHTMLAttributes<HTMLInputElement>['accept'];\n onAdd?: (files: File[]) => void;\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, IFileInputProps>(function FileInput(\n {\n fileList,\n label,\n text,\n description,\n isDragAndDropDisabled = false,\n isRequired = false,\n isReadOnly = false,\n isMultipleDisabled = false,\n isDisabled = false,\n isActive = false,\n accept,\n onAdd,\n testId,\n tweakStyles,\n data,\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const [isDragOver, setIsDragOver] = useState(false);\n\n const handleAdd = (files: FileList | null) => {\n if (isDisabled || isEmpty(files) || files?.length === 0) {\n return;\n }\n\n onAdd?.([...files]);\n };\n\n const handleDragStart: DragEventHandler<HTMLDivElement> = (event) => {\n blockEvent(event);\n setIsDragOver(true);\n };\n\n const handleDragStop: DragEventHandler<HTMLDivElement> = (event) => {\n blockEvent(event);\n setIsDragOver(false);\n };\n\n const handleDrop: DragEventHandler<HTMLDivElement> = (event) => {\n handleDragStop(event);\n\n handleAdd(event.dataTransfer.files);\n };\n\n const handleFileChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n handleAdd(event.target.files);\n };\n\n const dndHandlers =\n !isDragAndDropDisabled && !isDisabled\n ? {\n onDragOver: handleDragStart,\n onDragEnter: handleDragStart,\n onDragLeave: handleDragStop,\n onDrop: handleDrop,\n }\n : undefined;\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isReactNodeNotEmpty(label) && (\n <div className={clsx(classes.label, { [classes.requiredLabel]: isRequired })}>{label}</div>\n )}\n {!isReadOnly && (\n <div\n className={clsx(classes.inputWrapper, {\n [classes.dragged]: isDragOver,\n [classes.disabled]: isDisabled,\n [classes.active]: isActive,\n })}\n {...dndHandlers}\n >\n {isReactNodeNotEmpty(text) && <div className={classes.text}>{text}</div>}\n <label className={classes.inputLabel}>\n <input\n ref={ref}\n type=\"file\"\n value=\"\"\n onChange={handleFileChange}\n multiple={!isMultipleDisabled}\n disabled={isDisabled}\n accept={accept}\n {...addDataTestId(testId, 'input')}\n />\n </label>\n </div>\n )}\n\n {isReactNodeNotEmpty(description) && <div className={classes.description}>{description}</div>}\n\n <div className={classes.fileList}>{fileList}</div>\n </div>\n );\n});\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('IconButton', {\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n outline: 'none',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color, border-color, opacity, visibility',\n border: 'none',\n position: 'relative',\n boxShadow: 'none',\n borderRadius: '50%',\n background: 'none',\n padding: 0,\n flexShrink: 0,\n\n '&:disabled': {\n extend: 'disabled',\n },\n\n '&:active': {\n extend: 'active',\n },\n\n width: 'var(--icon-button-size)',\n height: 'var(--icon-button-size)',\n '--icon-button-icon-size': '20px',\n },\n\n 'cancel-light': {},\n\n cancel: {},\n\n main: {},\n\n custom: {},\n\n active: {},\n\n disabled: {\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n\n loading: {\n '& $loader': {\n display: 'block',\n },\n },\n\n icon: {\n display: 'flex',\n alignItems: 'center',\n width: 'var(--icon-button-icon-size)',\n height: 'var(--icon-button-icon-size)',\n },\n\n loader: {\n display: 'none',\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n\n width: 'var(--icon-button-icon-size)',\n height: 'var(--icon-button-icon-size)',\n },\n\n s: {\n '--icon-button-size': '24px',\n },\n\n m: {\n '--icon-button-size': '32px',\n },\n\n l: {\n '--icon-button-size': '40px',\n },\n});\n\nexport type IIconButtonStyles = ITweakStyles<typeof useStyles>;\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { renderIcon, IIcon } from '../Icon';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { IIconButtonSize, IIconButtonView, IIconButtonHTMLBaseProps } from './types';\nimport { useStyles, IIconButtonStyles } from './IconButton.styles';\n\nexport interface IIconButtonProps\n extends IIconButtonHTMLBaseProps,\n ICommonProps<IIconButtonStyles> {\n icon: IIcon;\n /** @default 'm' */\n size?: IIconButtonSize;\n /** @default 'cancel-light' */\n view?: IIconButtonView;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default false */\n isLoading?: boolean;\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IIconButtonProps>(function IconButton(\n {\n icon,\n size = 'm',\n view = 'cancel-light',\n isDisabled = false,\n isActive = false,\n isLoading = false,\n type = 'button',\n testId,\n tweakStyles,\n data,\n onClick,\n ...restProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const hasNoAction = isDisabled || isLoading;\n\n return (\n <button\n ref={ref}\n className={clsx(classes.root, classes[view], classes[size], {\n [classes.disabled]: isDisabled,\n [classes.active]: isActive,\n [classes.loading]: isLoading,\n })}\n type={type}\n disabled={isDisabled}\n onClick={hasNoAction ? undefined : onClick}\n {...restProps}\n {...addDataAttributes(data, testId)}\n >\n {isLoading ? (\n <span className={classes.loader}>\n <ThemedPreloader type=\"default\" useCurrentColor />\n </span>\n ) : (\n <span className={classes.icon}>{renderIcon(icon)}</span>\n )}\n </button>\n );\n});\n","import { rgba } from '../../helpers';\nimport { colors, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { ITooltipSizes } from './types';\n\nexport const useStyles = createThemedStyles('Tooltip', {\n root: {\n display: 'inline-block',\n boxSizing: 'border-box',\n },\n\n tooltip: {\n fontSize: 14,\n padding: [18, 20],\n letterSpacing: 0.15,\n backgroundColor: colors.CLASSIC_WHITE,\n color: colors.FONT_MAIN,\n boxShadow: `0 0 1px ${rgba(colors.FONT_MAIN, 0.4)}, 0 -2px 6px ${rgba(\n colors.FONT_MAIN,\n 0.06,\n )}, 0 8px 32px -8px ${rgba(colors.FONT_MAIN, 0.3)}`,\n borderRadius: 12,\n lineHeight: 1.4,\n maxWidth: 320,\n },\n\n hint: {\n whiteSpace: 'nowrap',\n fontSize: 12,\n padding: [8, 12],\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.FONT_MEDIUM,\n color: colors.CLASSIC_WHITE,\n letterSpacing: 0.2,\n },\n\n custom: {},\n\n info: {},\n\n error: {\n '&$tooltip': {\n backgroundColor: colors.RED_WARNING,\n color: colors.CLASSIC_WHITE,\n },\n\n '&$hint': {\n backgroundColor: colors.RED_WARNING,\n },\n },\n});\n\nexport type ITooltipStyles = ITweakStyles<typeof useStyles, ITooltipSizes>;\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { ITooltipSize } from './types';\nimport { useStyles, ITooltipStyles } from './Tooltip.styles';\n\nexport interface ITooltipProps extends ICommonProps<ITooltipStyles> {\n text: ReactNode;\n /** @default 'tooltip' */\n view?: 'tooltip' | 'hint' | 'custom';\n /** @default 'info' */\n type?: 'info' | 'error';\n /** @default 'undefined' */\n size?: ITooltipSize;\n}\n\nexport const Tooltip: FC<ITooltipProps> = ({\n text,\n view = 'tooltip',\n type = 'info',\n size,\n data,\n testId,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <div\n className={clsx(\n classes.root,\n classes[view],\n classes[type],\n isNotEmpty(size) && classes[size],\n )}\n {...addDataAttributes(data, testId)}\n >\n {text}\n </div>\n );\n};\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { ITooltipStyles } from '../Tooltip';\n\nexport const useStyles = createThemedStyles('TextWithTooltip', {\n root: {\n position: 'relative',\n },\n\n tooltip: {\n zIndex: 9999,\n },\n\n clickable: {\n cursor: 'pointer',\n },\n});\n\nexport type ITextWithTooltipStyles = ITweakStyles<\n typeof useStyles,\n { tweakTooltip: ITooltipStyles }\n>;\n","import { CSSProperties, FC, ReactNode, useEffect, useRef, useState } from 'react';\nimport { Portal } from 'react-overlays';\nimport usePopper, { Modifier, Placement } from 'react-overlays/usePopper';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ITooltipProps, Tooltip } from '../Tooltip';\nimport { ITextWithTooltipStyles, useStyles } from './TextWithTooltip.styles';\n\nexport interface ITextWithTooltipProps extends ICommonProps<ITextWithTooltipStyles> {\n children: ReactNode;\n tooltipText: ITooltipProps['text'];\n /** @default 'tooltip' */\n tooltipView?: ITooltipProps['view'];\n /** @default 'info' */\n tooltipType?: ITooltipProps['type'];\n /** @default 'top' */\n tooltipPosition?: Placement;\n /** @default [] */\n tooltipModifiers?: Array<Partial<Modifier<any, any>>>;\n tooltipOffsetOptions?: Record<string, unknown>;\n /** @default 'undefined' */\n tooltipSize?: ITooltipProps['size'];\n /** @default 'hover' */\n mouseEventType?: 'hover' | 'click';\n hoverDelay?: number;\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n shouldRenderInBody?: boolean;\n}\n\n/** @deprecated Используйте {@link import('../WithTooltip').WithTooltip WithTooltip} */\nexport const TextWithTooltip: FC<ITextWithTooltipProps> = ({\n children,\n tooltipText,\n tooltipPosition = 'top',\n tooltipView = 'tooltip',\n tooltipType = 'info',\n tooltipModifiers = [],\n tooltipOffsetOptions,\n tooltipSize,\n isDisabled = false,\n shouldRenderInBody = true,\n mouseEventType = 'hover',\n hoverDelay,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakTooltipStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTooltip',\n currentComponentName: 'TextWithTooltip',\n });\n\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n const [tooltipTimeout, setTooltipTimeout] = useState<ReturnType<typeof setTimeout>>();\n\n const root = useRef<HTMLDivElement>(null);\n const tooltip = useRef<HTMLDivElement>(null);\n\n const hasDelay = hoverDelay !== undefined;\n\n const handleMouseEnter = () => {\n if (hasDelay) {\n const timeout = setTimeout(() => {\n setIsTooltipVisible(true);\n }, hoverDelay);\n\n setTooltipTimeout(timeout);\n } else {\n setIsTooltipVisible(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (hasDelay) {\n clearTimeout(tooltipTimeout);\n }\n setIsTooltipVisible(false);\n };\n\n useEffect(() => () => clearTimeout(tooltipTimeout), []);\n\n const { styles: popperStyles, attributes } = usePopper(root.current, tooltip.current, {\n enabled: isTooltipVisible,\n placement: tooltipPosition,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 6],\n ...tooltipOffsetOptions,\n },\n },\n ...tooltipModifiers,\n ],\n });\n\n useOnClickOutsideWithRef(\n tooltip,\n () => {\n if (mouseEventType === 'click') {\n setIsTooltipVisible(false);\n }\n },\n root,\n );\n\n const props =\n mouseEventType === 'click'\n ? {\n onClick: () => setIsTooltipVisible(true),\n }\n : {\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n };\n\n const shouldShowTooltip = tooltipText !== undefined && tooltipText !== null && !isDisabled;\n\n return (\n <div\n className={clsx(\n classes.root,\n mouseEventType === 'click' && shouldShowTooltip && classes.clickable,\n )}\n {...(shouldShowTooltip ? props : undefined)}\n {...addDataAttributes(data, testId)}\n ref={root}\n >\n {shouldShowTooltip && (\n <Portal container={shouldRenderInBody ? document.body : root.current}>\n <div\n className={classes.tooltip}\n style={popperStyles.popper as CSSProperties}\n {...attributes.popper}\n ref={tooltip}\n >\n <Tooltip\n view={tooltipView}\n type={tooltipType}\n text={tooltipText}\n size={tooltipSize}\n tweakStyles={tweakTooltipStyles}\n />\n </div>\n </Portal>\n )}\n {children}\n </div>\n );\n};\n","import { mimeTypes } from '../../constants';\nimport { IIconType } from '../Icon';\n\nexport const FILE_ICON_DEFAULT: IIconType = 'file-other';\n\nexport const iconTypeMap: Record<string, IIconType> = {\n [mimeTypes.xls]: 'file-excel',\n [mimeTypes.xlsx]: 'file-excel',\n [mimeTypes.jpeg]: 'file-image',\n [mimeTypes.png]: 'file-image',\n [mimeTypes.pdf]: 'file-pdf',\n [mimeTypes.doc]: 'file-word',\n [mimeTypes.docx]: 'file-word',\n [mimeTypes.xml]: 'file-xml',\n [mimeTypes.zip]: 'file-zip',\n};\n\nexport const FILE_ITEM_SIZES = ['m', 'l'] as const;\n","import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { IMimeType, mimeTypes } from '../../constants';\nimport { IIconType } from '../Icon';\nimport { FILE_ICON_DEFAULT, iconTypeMap } from './constants';\nimport { IFileInfo } from './types';\n\nexport const getFileExtensionByFilename = (fileName: string): string | undefined => {\n const splitFileName = fileName.split('.');\n return splitFileName.length > 1 ? splitFileName.pop() : undefined;\n};\n\nexport const getMimeTypeByFilename = (fileName: string): string | undefined => {\n const ext = getFileExtensionByFilename(fileName);\n return isNotEmpty(ext) ? mimeTypes[ext as IMimeType] : undefined;\n};\n\nexport const getFileIcon = ({ type, name }: IFileInfo): IIconType => {\n if (isNotEmpty(type) && type in iconTypeMap) {\n return iconTypeMap[type];\n }\n\n const mimeType = getMimeTypeByFilename(name);\n if (isNotEmpty(mimeType) && mimeType in iconTypeMap) {\n return iconTypeMap[mimeType];\n }\n\n return FILE_ICON_DEFAULT;\n};\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\nimport { IIconButtonStyles } from '../IconButton';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\nimport { ITooltipStyles } from '../Tooltip';\n\nexport const useStyles = createThemedStyles('FileItem', {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n },\n\n fileItemWrapper: {\n display: 'flex',\n gap: 12,\n width: '100%',\n cursor: 'pointer',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color, box-shadow, border-color',\n },\n\n m: {\n '&$fileItemWrapper': {\n padding: [10, 10, 10, 12],\n },\n\n '--icon-size': '20px',\n },\n\n l: {\n '&$fileItemWrapper': {\n padding: [12, 16],\n },\n\n '--icon-size': '32px',\n },\n\n fileIcon: {\n maxWidth: 'var(--icon-size)',\n maxHeight: 'var(--icon-size)',\n },\n\n fileName: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: 16,\n },\n\n fileNameContainer: {\n overflow: 'hidden',\n marginRight: 'auto',\n },\n\n preloader: {\n display: 'flex',\n margin: 6,\n },\n\n 'preloader-dots': {\n width: 26,\n marginTop: 12,\n },\n\n 'preloader-default': {\n width: 20,\n height: 20,\n },\n\n 'preloader-logo': {\n width: 20,\n height: 20,\n },\n\n metadata: {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n fontSize: 12,\n },\n\n actions: {\n display: 'flex',\n flexShrink: 0,\n margin: -6,\n },\n\n fileSize: {},\n\n footer: {},\n\n error: {\n fontSize: 12,\n },\n\n info: {\n fontSize: 12,\n },\n\n disabled: {\n cursor: 'not-allowed',\n },\n});\n\nexport const themedPreloaderStyles: IThemedPreloaderStyles = {\n tweakDotsPreloader: {\n root: {\n gap: 4,\n '--dot-size': '6px',\n },\n },\n};\n\nexport type IFileItemStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakRemoveIconButton: IIconButtonStyles;\n tweakPreloader: IThemedPreloaderStyles;\n tweakTooltip: ITooltipStyles;\n }\n>;\n","import { endOfMonth, endOfYear, startOfMonth, startOfYear, sub } from 'date-fns';\nimport type {\n IFilterLocale,\n IFilterLocaleKey,\n IPeriodGetter,\n ISelectLocale,\n ISelectLocaleKey,\n} from './types';\n\nexport const PERIODS = ['THIS_MONTH', 'LAST_MONTH', 'THIS_YEAR', 'LAST_YEAR', 'CUSTOM'] as const;\n\nexport const SelectLocales: Record<string, ISelectLocale> = {\n ru: {\n clear: 'Очистить',\n all: 'Все',\n chosen: 'Выбранные',\n nothingFound: 'Ничего не найдено',\n searchPlaceholder: 'Поиск',\n },\n\n en: {\n clear: 'Clear',\n all: 'All',\n chosen: 'Chosen',\n nothingFound: 'Nothing found',\n searchPlaceholder: 'Search',\n },\n};\n\nexport const FilterLocales: Record<string, IFilterLocale> = {\n ru: {\n clear: 'Очистить',\n all: 'Все',\n other: 'Остальные',\n chosen: 'Выбранные',\n nothingFound: 'Не найдено',\n from: 'От',\n to: 'До',\n back: 'Назад',\n searchPlaceholder: 'Поиск',\n displayedFields: 'Поля для поиска',\n months: [\n 'Январь',\n 'Февраль',\n 'Март',\n 'Апрель',\n 'Май',\n 'Июнь',\n 'Июль',\n 'Август',\n 'Сентябрь',\n 'Октябрь',\n 'Ноябрь',\n 'Декабрь',\n ],\n periods: {\n THIS_MONTH: 'Этот месяц',\n LAST_MONTH: 'Прошлый месяц',\n THIS_YEAR: 'Этот год',\n LAST_YEAR: 'Прошлый год',\n CUSTOM: 'Другой период',\n },\n },\n\n en: {\n clear: 'Clear',\n all: 'All',\n other: 'Others',\n chosen: 'Chosen',\n nothingFound: 'Nothing found',\n from: 'From',\n to: 'To',\n back: 'Back',\n searchPlaceholder: 'Search',\n displayedFields: 'Displayed fields',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n periods: {\n THIS_MONTH: 'This month',\n LAST_MONTH: 'Previous month',\n THIS_YEAR: 'This year',\n LAST_YEAR: 'Previous year',\n CUSTOM: 'Custom',\n },\n },\n};\n\nexport const DEFAULT_LOCALE: IFilterLocaleKey = 'en';\n\nexport const DEFAULT_SELECT_LOCALE: ISelectLocaleKey = 'en';\n\nexport const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\n\nexport const DEFAULT_PICKER_PROPS = {};\n\nexport const PERIODS_GETTERS: Record<string, IPeriodGetter> = {\n THIS_MONTH: () => {\n const today = new Date();\n return {\n from: startOfMonth(today),\n to: endOfMonth(today),\n };\n },\n LAST_MONTH: () => {\n const day = sub(new Date(), { months: 1 });\n return {\n from: startOfMonth(day),\n to: endOfMonth(day),\n };\n },\n THIS_YEAR: () => {\n const today = new Date();\n return {\n from: startOfYear(today),\n to: endOfYear(today),\n };\n },\n LAST_YEAR: () => {\n const day = sub(new Date(), { years: 1 });\n return {\n from: startOfYear(day),\n to: endOfYear(day),\n };\n },\n};\n","import { merge } from '@true-engineering/true-react-platform-helpers';\nimport { DEFAULT_LOCALE, DEFAULT_SELECT_LOCALE, FilterLocales, SelectLocales } from './constants';\nimport {\n type IFilterLocale,\n type IFilterLocaleKey,\n type IPartialFilterLocale,\n ISelectLocale,\n ISelectLocaleKey,\n} from './types';\n\nexport const getLocale = (\n key: IFilterLocaleKey = DEFAULT_LOCALE,\n custom?: IPartialFilterLocale,\n custom2?: IPartialFilterLocale,\n): IFilterLocale => merge(FilterLocales[key], custom, custom2);\n\nexport const getSelectLocale = (\n key: ISelectLocaleKey = DEFAULT_SELECT_LOCALE,\n custom?: Partial<ISelectLocale>,\n custom2?: Partial<ISelectLocale>,\n): ISelectLocale => merge(SelectLocales[key], custom, custom2);\n\nexport const sortValues = (arr: Array<number | undefined>): Array<number | undefined> =>\n arr.includes(undefined) ? arr : (arr as number[]).sort((a, b) => (a < b ? -1 : 1));\n\nexport const defaultConvertFunction = (val: unknown): string => String(val);\n","import { isStringNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { formatNumber, isSpaceChar } from '../../helpers';\nimport type { INumberInputProps } from './NumberInput';\n\nconst getPrevSpaces = (val: string, position: number): number =>\n val.slice(0, position).split('').filter(isSpaceChar).length;\n\nexport const getNewCaretPosition = (\n defaultPosition: number,\n oldValue: string,\n newValue: string,\n isDeleteForwardAction?: boolean,\n): number => {\n if (oldValue === newValue) {\n return isDeleteForwardAction ? defaultPosition + 1 : defaultPosition;\n }\n\n const isAdding = newValue.length > oldValue.length;\n const oldPrevSpaces = getPrevSpaces(oldValue, defaultPosition - (isAdding ? 1 : 0));\n const newPrevSpaces = getPrevSpaces(newValue, defaultPosition);\n const diff = newPrevSpaces - oldPrevSpaces;\n const res = defaultPosition + diff;\n if (res <= 0) {\n return 0;\n }\n return res - (isSpaceChar(newValue[res - 1]) ? 1 : 0);\n};\n\nexport const formatNumberWithDefault = (\n value: number | undefined,\n defaultValue?: number,\n): string => {\n const val = formatNumber(value);\n return isStringNotEmpty(val) ? val : formatNumber(defaultValue);\n};\n\nexport const constructRegExp = ({\n canBeFloat,\n canBeNegative,\n intPartPrecision,\n precision,\n}: Pick<\n INumberInputProps,\n 'canBeFloat' | 'canBeNegative' | 'intPartPrecision' | 'precision'\n>): string => {\n const basePart = `\\\\d{0,${intPartPrecision}}`;\n const floatPart = `(\\\\.\\\\d{0,${precision}})?`;\n const negativePart = '(\\\\-)?';\n\n return `^${canBeNegative ? negativePart : ''}${basePart}${canBeFloat ? floatPart : ''}$`;\n};\n\n// const testNewCaretPosition = () => {\n// console.log(getNewCaretPosition(1, '', '1') === 1);\n// console.log(getNewCaretPosition(2, '1', '12') === 2);\n// console.log(getNewCaretPosition(3, '12', '123') === 3);\n// console.log(getNewCaretPosition(4, '123', '1 234') === 5);\n// console.log(getNewCaretPosition(6, '1 234', '12 345') === 6);\n// console.log(getNewCaretPosition(2, '1 234', '10 234') === 2);\n// console.log(getNewCaretPosition(3, '1 234', '10 234') === 2);\n// console.log(getNewCaretPosition(1, '1 234', '21 234') === 1);\n// console.log(getNewCaretPosition(8, '123 456', '123 456.') === 8);\n// console.log(getNewCaretPosition(8, '123 456', '1 234 567') === 9);\n// console.log(getNewCaretPosition(5, '123 456', '1 230 456') === 5);\n// console.log(getNewCaretPosition(4, '123 456', '1 230 456') === 5);\n//\n// console.log(getNewCaretPosition(0, '1', '') === 0);\n// console.log(getNewCaretPosition(1, '12', '1') === 1);\n// console.log(getNewCaretPosition(2, '123', '12') === 2);\n// console.log(getNewCaretPosition(4, '1 234', '123') === 3);\n// console.log(getNewCaretPosition(5, '12 345', '1 234') === 5);\n// console.log(getNewCaretPosition(1, '10 234', '1 234') === 1);\n// console.log(getNewCaretPosition(2, '10 234', '10 234') === 2);\n// console.log(getNewCaretPosition(0, '21 234', '1 234') === 0);\n// console.log(getNewCaretPosition(7, '123 456.', '123 456') === 7);\n// console.log(getNewCaretPosition(8, '1 234 567', '123 456') === 7);\n// console.log(getNewCaretPosition(5, '1 230 456', '1 230 456') === 5);\n// console.log(getNewCaretPosition(4, '1 230 456', '123 456') === 3);\n//\n// console.log(getNewCaretPosition(6, '1 234 567', '123 467') === 5);\n// console.log(getNewCaretPosition(5, '1 234 567', '1 234') === 5);\n// };\n//\n// testNewCaretPosition();\n","import { FocusEvent, forwardRef, KeyboardEvent, useState } from 'react';\nimport { isStringNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport {\n formatNumber,\n formatStringNumber,\n getNumberInRange,\n removeStringFormat,\n setCaretPosition,\n stringToNumber,\n} from '../../helpers';\nimport { useDidMountEffect } from '../../hooks';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport { constructRegExp, formatNumberWithDefault, getNewCaretPosition } from './helpers';\n\nexport interface INumberInputProps extends Omit<IInputProps, 'value' | 'onChange' | 'type'> {\n value?: number;\n /** @default 3 */\n precision?: number;\n /** @default 7 */\n intPartPrecision?: number;\n defaultValue?: number;\n /** @default false */\n canBeFloat?: boolean;\n /** @default false */\n canBeNegative?: boolean;\n min?: number;\n max?: number;\n onChange: (value: number | undefined, event?: IChangeInputEvent) => void;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, INumberInputProps>(function NumberInput(\n {\n value,\n canBeFloat = false,\n canBeNegative = false,\n defaultValue,\n precision = 3,\n intPartPrecision = 7,\n onChange,\n onBlur,\n min,\n max,\n ...props\n },\n ref,\n) {\n const [showedValue, setShowedValue] = useState(() =>\n formatNumberWithDefault(value, defaultValue),\n );\n\n // специальный костыль для обработки Delete - т.к. без него каретка будет работать неправильно при удалении пробелов\n const [isDeleteForwardAction, setIsDeleteForwardAction] = useState(false);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n setIsDeleteForwardAction(event.key === 'Delete');\n };\n\n const setShowedValueWithDefault = (v: string) => {\n setShowedValue(isStringNotEmpty(v) ? v : formatNumber(defaultValue));\n };\n\n const handleChange = async (inputValue: string, event: IChangeInputEvent): Promise<void> => {\n const oldValue = showedValue;\n const target = event.target as HTMLInputElement;\n const defaultCaretPos = target.selectionStart ?? 0;\n const numString = removeStringFormat(inputValue);\n\n if (numString === '') {\n onChange(undefined);\n // не убирать - ломается каретка\n setShowedValue('');\n return;\n }\n\n const numberRegexp = new RegExp(\n constructRegExp({\n precision,\n intPartPrecision,\n canBeNegative,\n canBeFloat,\n }),\n );\n\n if (!numberRegexp.test(numString)) {\n await setShowedValue(oldValue);\n setCaretPosition(target, defaultCaretPos - 1);\n return;\n }\n\n const hasDot = canBeFloat && /^[-]*[\\d\\s]*[.,]$/.test(inputValue);\n const formattedValue = formatStringNumber(numString);\n const newValue = hasDot ? `${formattedValue}.` : formattedValue;\n await setShowedValue(newValue);\n setCaretPosition(\n target,\n getNewCaretPosition(defaultCaretPos, oldValue, newValue, isDeleteForwardAction),\n );\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>): void => {\n const val = event.currentTarget.value;\n const num = stringToNumber(val);\n const newValue = num !== undefined ? getNumberInRange(num, min, max) : undefined;\n if (newValue !== value) {\n onChange(newValue);\n } else {\n setShowedValueWithDefault(formatNumber(value));\n }\n if (onBlur !== undefined) {\n onBlur(event);\n }\n };\n\n useDidMountEffect(() => {\n if (value !== undefined) {\n setShowedValueWithDefault(formatNumber(value));\n } else {\n setShowedValue(formatNumber(value));\n }\n }, [value]);\n\n return (\n <Input\n value={showedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n ref={ref}\n {...props}\n />\n );\n});\n","import { colors, ITweakStyles, createThemedStyles, animations } from '../../theme';\nimport { IButtonStyles } from '../Button';\nimport type { IFilterWrapperStyles } from './components';\n\nexport const FILTER_HEIGHT = 36;\n\nexport const useStyles = createThemedStyles('FiltersPane', {\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 8,\n width: '100%',\n },\n\n settings: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 18,\n boxSizing: 'border-box',\n width: 40,\n height: FILTER_HEIGHT,\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n },\n\n settingsIcon: {\n width: 16,\n height: 16,\n },\n\n clear: {\n display: 'flex',\n alignItems: 'center',\n height: FILTER_HEIGHT,\n },\n\n filterWithClearButton: {\n display: 'flex',\n gap: 16,\n minWidth: 0,\n },\n});\n\nexport const clearButtonStyles: IButtonStyles = {\n s: {\n paddingLeft: 0,\n paddingRight: 0,\n minWidth: 'unset',\n },\n\n text: {\n background: 'none',\n color: colors.GREY_ACTIVE,\n\n '&:hover, &:focus': {\n color: colors.FONT_MEDIUM,\n },\n\n '&:active': {\n color: colors.FONT_MAIN,\n },\n\n '&:hover, &:focus, &:active': {\n background: 'none',\n borderColor: 'transparent',\n },\n },\n};\n\nexport const innerTextButtonStyles: IButtonStyles = {\n text: {\n color: colors.GREY_ACTIVE,\n\n '&:hover, &:focus': {\n color: colors.FONT_MEDIUM,\n },\n\n '&:active': {\n color: colors.FONT_MEDIUM,\n },\n },\n};\n\nexport type IFiltersPaneStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakClearButton: IButtonStyles;\n tweakFilterWrapper: IFilterWrapperStyles;\n }\n>;\n","import { colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IButtonStyles } from '../../../Button';\nimport { IInputStyles } from '../../../Input';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterInterval', {\n root: {\n padding: 8,\n background: colors.CLASSIC_WHITE,\n },\n\n inputWrapper: {\n padding: [4, 12],\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: 20,\n marginBottom: 12,\n },\n\n autosize: {\n minWidth: 120,\n height: 0,\n opacity: 0,\n paddingRight: 16,\n fontSize: 16,\n whiteSpace: 'pre',\n userSelect: 'none',\n pointerEvents: 'none',\n },\n\n clear: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n});\n\nexport const inputStyles: IInputStyles = {\n input: {\n minWidth: 120,\n },\n\n tweakControlWrapper: {\n icon: {\n padding: 0,\n width: 24,\n\n '&:last-child': {\n paddingRight: 0,\n },\n },\n },\n};\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport type IFilterIntervalStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakInput: IInputStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { FC, useMemo } from 'react';\nimport { getTestId, addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { NumberInput } from '../../../NumberInput';\nimport { getLocale, sortValues } from '../../helpers';\nimport { IFilterLocaleKey, IFilterNumberInputProps, IPartialFilterLocale } from '../../types';\nimport {\n clearButtonStyles,\n IFilterIntervalStyles,\n inputStyles,\n useStyles,\n} from './FilterInterval.styles';\n\nexport interface IFilterIntervalProps extends ICommonProps<IFilterIntervalStyles> {\n value?: Array<number | undefined>;\n onChange: (value?: Array<number | undefined>) => void;\n labelName: string;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n withFieldNameInLabel?: boolean;\n canBeFloat?: boolean;\n fromInput?: IFilterNumberInputProps;\n toInput?: IFilterNumberInputProps;\n}\n\nexport const FilterInterval: FC<IFilterIntervalProps> = ({\n data,\n tweakStyles,\n value,\n labelName,\n withFieldNameInLabel,\n localeKey,\n locale,\n canBeFloat,\n onChange,\n fromInput,\n toInput,\n testId,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const handleClear = () => {\n onChange(undefined);\n };\n\n const handleFromChange = (v?: number) => {\n if (v === undefined && value?.[1] === undefined) {\n onChange(undefined);\n return;\n }\n onChange(sortValues([v, value?.[1]]));\n };\n\n const handleToChange = (v?: number) => {\n if (v === undefined && value?.[0] === undefined) {\n onChange(undefined);\n return;\n }\n onChange(sortValues([value?.[0], v]));\n };\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'FilterInterval',\n });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterInterval',\n });\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n <div className={classes.inputWrapper}>\n <div>\n <NumberInput\n onChange={handleFromChange}\n value={value?.[0]}\n label={\n withFieldNameInLabel\n ? `${labelName} ${translates.from.toLocaleLowerCase()}`\n : translates.from\n }\n canBeFloat={canBeFloat}\n isClearable\n tweakStyles={tweakInputStyles}\n testId={getTestId(testId, 'start')}\n {...fromInput}\n />\n {withFieldNameInLabel && (\n <div className={classes.autosize}>\n {labelName}&nbsp;{translates.from}\n </div>\n )}\n </div>\n <div>\n <NumberInput\n onChange={handleToChange}\n value={value?.[1]}\n label={\n withFieldNameInLabel\n ? `${labelName} ${translates.to.toLocaleLowerCase()}`\n : translates.to\n }\n canBeFloat={canBeFloat}\n isClearable\n tweakStyles={tweakInputStyles}\n testId={getTestId(testId, 'end')}\n {...toInput}\n />\n {withFieldNameInLabel && (\n <div className={classes.autosize}>\n {labelName}&nbsp;{translates.to}\n </div>\n )}\n </div>\n </div>\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n </div>\n );\n};\n","import type { IMultiSelectLocale, IMultiSelectLocaleKey } from './types';\n\nexport const MultiSelectLocales: Record<string, IMultiSelectLocale> = {\n ru: {\n clear: 'Очистить',\n all: 'Все',\n chosen: 'Выбранные',\n nothingFound: 'Не найдено',\n searchPlaceholder: 'Поиск',\n },\n\n en: {\n clear: 'Clear',\n all: 'All',\n chosen: 'Chosen',\n nothingFound: 'Nothing found',\n searchPlaceholder: 'Search',\n },\n};\n\nexport const DEFAULT_LOCALE: IMultiSelectLocaleKey = 'en';\n","import { merge } from '@true-engineering/true-react-platform-helpers';\nimport { DEFAULT_LOCALE, MultiSelectLocales } from './constants';\nimport type { IMultiSelectLocale, IMultiSelectLocaleKey } from './types';\n\nexport const defaultConvertFunction = (val: unknown): string => String(val);\n\nexport const getLocale = (\n key: IMultiSelectLocaleKey = DEFAULT_LOCALE,\n custom?: Partial<IMultiSelectLocale>,\n custom2?: Partial<IMultiSelectLocale>,\n): IMultiSelectLocale => merge(MultiSelectLocales[key], custom, custom2);\n","import { colors, createThemedStyles, helpers, ITweakStyles } from '../../theme';\nimport { IButtonStyles } from '../Button';\nimport { ICheckboxStyles } from '../Checkbox';\nimport { ISearchInputStyles } from '../SearchInput';\n\nconst ITEM_HEIGHT = 40;\nconst TOP_GAP = 12;\n\nexport const useStyles = createThemedStyles('MultiSelectList', {\n root: {\n width: 220,\n background: colors.CLASSIC_WHITE,\n },\n\n list: {\n paddingTop: TOP_GAP,\n maxHeight: ITEM_HEIGHT * 5 + TOP_GAP,\n overscrollBehavior: 'contain',\n ...helpers.withScrollBar,\n },\n\n label: {\n boxSizing: 'border-box',\n fontSize: 14,\n padding: [12, 16],\n userSelect: 'none',\n display: 'flex',\n alignItems: 'center',\n color: colors.FONT_LABEL,\n },\n\n labelChosen: {\n fontWeight: 'bold',\n color: colors.FONT_MAIN,\n padding: [4, 16, 12],\n },\n\n withoutTopGap: {\n paddingTop: 0,\n },\n\n item: {\n boxSizing: 'border-box',\n padding: 0,\n maxWidth: '100%',\n fontSize: 14,\n },\n\n option: {\n display: 'inline-block',\n userSelect: 'none',\n maxWidth: '100%',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n\n panel: {\n display: 'flex',\n padding: [0, 6, 8],\n },\n\n clear: {\n marginLeft: 'auto',\n },\n\n selectedItem: {},\n\n preloader: {\n width: 80,\n height: ITEM_HEIGHT,\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n dropdownInput: {\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n nothingFound: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: 16,\n fontSize: 14,\n },\n});\n\nexport const searchInputStyles: ISearchInputStyles = {\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': '40px',\n backgroundColor: 'transparent',\n border: 'none',\n },\n },\n },\n};\n\nexport const checkboxStyles: ICheckboxStyles = {\n root: {\n padding: [11, 16],\n boxSizing: 'border-box',\n width: '100%',\n },\n\n children: {\n marginRight: 'auto',\n overflow: 'hidden',\n },\n};\n\nexport const clearButtonStyles: IButtonStyles = {\n text: {\n color: colors.GREY_ACTIVE,\n\n '&:hover, &:focus': {\n color: colors.FONT_MEDIUM,\n },\n\n '&:active': {\n color: colors.FONT_MEDIUM,\n },\n },\n};\n\nexport type IMultiSelectListStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakSearchInput: ISearchInputStyles;\n tweakCheckbox: ICheckboxStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { useEffect, useState, useMemo, useRef, useCallback, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { debounce } from 'ts-debounce';\nimport {\n addDataAttributes,\n addDataTestId,\n getTestId,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useIsMounted, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Button } from '../Button';\nimport { Checkbox, ICheckboxProps } from '../Checkbox';\nimport { SearchInput } from '../SearchInput';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { DEFAULT_LOCALE, MultiSelectLocales } from './constants';\nimport { defaultConvertFunction, getLocale } from './helpers';\nimport { IMultiSelectListValues, IMultiSelectLocale, IMultiSelectLocaleKey } from './types';\nimport {\n useStyles,\n IMultiSelectListStyles,\n checkboxStyles,\n searchInputStyles,\n clearButtonStyles,\n} from './MultiSelectList.styles';\n\nexport interface IMultiSelectListProps<Value, Option> extends ICommonProps<IMultiSelectListStyles> {\n value?: Value;\n /** @default false */\n isSearchEnabled?: boolean;\n localeKey?: IMultiSelectLocaleKey;\n locale?: Partial<IMultiSelectLocale>;\n onClose?: () => void;\n onChange: (val?: Value) => void;\n options?: Option[];\n fetchOptions?: (val?: string, page?: number) => Promise<Option[]>;\n getValueView?: (val: Option) => ReactNode;\n getValueId?: (val: Option) => string;\n getValueString?: (val: Option) => string;\n /** @default по умолчанию значение совпадает с isSearchEnabled */\n isGroupingEnabled?: boolean;\n /** @default 'left' */\n checkboxPosition?: 'left' | 'right';\n pageSize?: number;\n searchMaxLength?: number;\n}\n\nexport function MultiSelectList<Value extends IMultiSelectListValues<Option>, Option = string>({\n value,\n tweakStyles,\n data,\n isSearchEnabled = false,\n localeKey = DEFAULT_LOCALE,\n locale = MultiSelectLocales[localeKey],\n onChange,\n onClose,\n options,\n fetchOptions,\n isGroupingEnabled = isSearchEnabled,\n getValueView = defaultConvertFunction,\n getValueId = defaultConvertFunction,\n getValueString = defaultConvertFunction,\n checkboxPosition = 'left',\n pageSize,\n searchMaxLength,\n testId,\n}: IMultiSelectListProps<Value, Option>): JSX.Element {\n const isMounted = useIsMounted();\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCheckboxStyles = useTweakStyles({\n innerStyles: checkboxStyles,\n tweakStyles,\n className: 'tweakCheckbox',\n currentComponentName: 'MultiSelectList',\n });\n\n const tweakSearchInputStyles = useTweakStyles({\n innerStyles: searchInputStyles,\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'MultiSelectList',\n });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'MultiSelectList',\n });\n\n const [keyCursorOn, setKeyCursorOn] = useState(0);\n const [searchValue, setSearchValue] = useState('');\n // Опции, которые получаем с бека при изменении строки поиска\n const [allOptions, setAllOptions] = useState<Option[]>([]);\n\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingOptionsOnScroll, setLoadingOptionsOnScroll] = useState(false);\n\n const [activePage, setActivePage] = useState(0);\n const [isMaxPage, setIsMaxPage] = useState(false);\n\n const observer = useRef<IntersectionObserver>();\n\n const chosenValues = value?.include;\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n const chosenValuesIds = useMemo(() => chosenValues?.map(getValueId), [getValueId, chosenValues]);\n\n const unchosenOptions = useMemo(\n () => allOptions.filter((v) => !chosenValuesIds?.includes(getValueId(v))),\n [getValueId, allOptions, chosenValuesIds],\n );\n\n const handleSearchInputChange = useCallback(\n async (inputValue?: string) => {\n if (fetchOptions === undefined) {\n return;\n }\n setIsLoading(true);\n\n try {\n const response = await fetchOptions(inputValue?.trim() ?? '');\n if (isMounted() && response !== undefined) {\n setAllOptions(response);\n setActivePage(0);\n setIsMaxPage(\n response.length === 0 || (pageSize !== undefined && response.length < pageSize),\n );\n }\n } finally {\n if (isMounted()) {\n setIsLoading(false);\n }\n }\n },\n [fetchOptions, pageSize],\n );\n\n const changeSearchValue = useCallback(debounce(handleSearchInputChange), [\n handleSearchInputChange,\n ]);\n\n function handleOnChange(inputValue: string) {\n setSearchValue(inputValue);\n\n if (fetchOptions === undefined) {\n if (options !== undefined) {\n const lowerSearchValue = inputValue.toLowerCase();\n setAllOptions(\n options.filter((o) => getValueString(o).toLowerCase().includes(lowerSearchValue)),\n );\n }\n } else {\n setIsLoading(true);\n changeSearchValue(inputValue);\n }\n }\n\n const handleSelectValue = (val: Option[]) => {\n if (val.length === 0) {\n onChange(undefined);\n return;\n }\n\n onChange({\n include: val,\n } as Value);\n };\n\n const handleClear = () => {\n onChange(undefined);\n };\n\n const onSelect: ICheckboxProps<Option>['onSelect'] = ({ value: checkboxValue, isSelected }) => {\n if (isNotEmpty(checkboxValue)) {\n handleSelectValue(\n isSelected\n ? [...(chosenValues ?? []), checkboxValue]\n : chosenValues?.filter((v) => getValueId(v) !== getValueId(checkboxValue)) ?? [],\n );\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n // TODO: это все очень плохо работает\n if (event.code === 'Escape') {\n onChange(value);\n if (onClose) {\n onClose();\n }\n }\n if (event.code === 'ArrowDown') {\n if (keyCursorOn < unchosenOptions.length + (value?.include.length ?? 0) - 1) {\n setKeyCursorOn(keyCursorOn + 1);\n }\n }\n if (event.code === 'ArrowUp') {\n if (keyCursorOn >= 1) {\n setKeyCursorOn(keyCursorOn - 1);\n }\n }\n if (event.code === 'Enter') {\n if (\n unchosenOptions[keyCursorOn] === undefined &&\n (value === undefined || value.include.length === 0)\n ) {\n return;\n }\n if (value !== undefined) {\n if (keyCursorOn < value.include.length) {\n onChange({\n ...value,\n include:\n value.include.filter(\n (val) => getValueId(val) !== getValueId(value.include[keyCursorOn]),\n ) ?? [],\n });\n } else {\n onChange({\n ...value,\n include: [...value.include, unchosenOptions[keyCursorOn - value.include.length]],\n });\n }\n } else {\n onChange({\n include: [unchosenOptions[keyCursorOn]],\n } as Value);\n }\n }\n };\n\n const getIsValueChosen = (id: string) => chosenValues?.some((v) => getValueId(v) === id);\n\n const handleLoadItemsOnScroll = useCallback(\n async (inputValue?: string, page?: number) => {\n if (fetchOptions === undefined) {\n return;\n }\n\n setLoadingOptionsOnScroll(true);\n\n try {\n const response = await fetchOptions(inputValue ?? '', page ?? 0);\n if (isMounted()) {\n if (response.length > 0) {\n setAllOptions((prevState) => [...prevState, ...response]);\n }\n if (response.length === 0 || (pageSize !== undefined && response.length < pageSize)) {\n setIsMaxPage(true);\n }\n }\n } finally {\n if (isMounted()) {\n setLoadingOptionsOnScroll(false);\n }\n }\n },\n [fetchOptions, getValueId],\n );\n\n const initIntersectionObserver = useCallback(\n (node: HTMLDivElement) => {\n if (isLoadingOptionsOnScroll || isMaxPage) {\n return;\n }\n\n if (observer.current) {\n observer.current.disconnect();\n }\n\n observer.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting) {\n await handleLoadItemsOnScroll(searchValue, activePage + 1);\n if (isMounted()) {\n setActivePage((prevState) => prevState + 1);\n }\n }\n });\n\n if (node) {\n observer.current.observe(node);\n }\n },\n [activePage, handleLoadItemsOnScroll, isLoadingOptionsOnScroll, isMaxPage, searchValue],\n );\n\n useEffect(() => {\n if (fetchOptions === undefined) {\n setAllOptions(options ?? []);\n return;\n }\n\n const doFetchOptions = async () => {\n setIsLoading(true);\n\n try {\n const response = await fetchOptions('');\n if (response !== undefined && isMounted()) {\n if (response.length === 0 || (pageSize !== undefined && response.length < pageSize)) {\n setIsMaxPage(true);\n }\n setAllOptions(response);\n }\n } finally {\n if (isMounted()) {\n setIsLoading(false);\n }\n }\n };\n doFetchOptions();\n }, []);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n });\n\n const mainOptionsList = isGroupingEnabled ? unchosenOptions : allOptions;\n\n const hasSelectedOptionsGroup = isGroupingEnabled && isArrayNotEmpty(chosenValues);\n\n const shouldShowNothingFoundMessage = !isLoading && !isArrayNotEmpty(allOptions);\n\n const shouldShowAllOptionsLabel =\n hasSelectedOptionsGroup && (isArrayNotEmpty(unchosenOptions) || !isArrayNotEmpty(allOptions));\n\n const shouldShowPreloader = isLoading || isLoadingOptionsOnScroll;\n\n const shouldShowOptionsList =\n !isLoading && (isArrayNotEmpty(allOptions) || isArrayNotEmpty(chosenValues));\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isSearchEnabled && (\n <div className={classes.dropdownInput}>\n <SearchInput\n value={searchValue}\n placeholder={translates.searchPlaceholder}\n onChange={handleOnChange}\n tweakStyles={tweakSearchInputStyles}\n maxLength={searchMaxLength}\n testId={getTestId(testId, 'search')}\n shouldFocusOnMount\n />\n </div>\n )}\n {shouldShowOptionsList && (\n <div className={classes.list} {...addDataTestId(testId, 'list')}>\n {/* Выбранные */}\n {hasSelectedOptionsGroup && (\n <>\n <div\n className={clsx(\n classes.label,\n classes.labelChosen,\n !isSearchEnabled && classes.withoutTopGap,\n )}\n >\n {translates.chosen}\n </div>\n {chosenValues?.map((val) => {\n const id = getValueId(val);\n const view = getValueView(val);\n\n return (\n <div\n className={clsx(\n classes.item,\n // keyCursorOn === index && classes.selectedItem,\n )}\n key={id}\n >\n <Checkbox\n onSelect={onSelect}\n isChecked\n value={val}\n tweakStyles={tweakCheckboxStyles}\n labelPosition={checkboxPosition === 'left' ? 'right' : 'left'}\n data={{ id }}\n >\n <div className={classes.option} {...addDataAttributes({ option: id })}>\n {view}\n </div>\n </Checkbox>\n </div>\n );\n })}\n </>\n )}\n\n {!isLoading && (\n <>\n {/* Не выбранные (или все если нет группировки) */}\n {shouldShowAllOptionsLabel && <div className={classes.label}>{translates.all}</div>}\n\n {mainOptionsList.map((val, index) => {\n const id = getValueId(val);\n const view = getValueView(val);\n\n return (\n <div\n className={clsx(\n classes.item,\n // keyCursorOn === index + (value?.include.length ?? 0) &&\n // classes.selectedItem,\n )}\n ref={\n mainOptionsList.length - 1 === index ? initIntersectionObserver : undefined\n }\n key={id}\n >\n <Checkbox\n onSelect={onSelect}\n isChecked={getIsValueChosen(id)}\n value={val}\n tweakStyles={tweakCheckboxStyles}\n labelPosition={checkboxPosition === 'left' ? 'right' : 'left'}\n data={{ id }}\n >\n <div className={classes.option} {...addDataAttributes({ option: id })}>\n {view}\n </div>\n </Checkbox>\n </div>\n );\n })}\n </>\n )}\n </div>\n )}\n\n {/* Preloader */}\n {shouldShowPreloader && (\n <div className={classes.preloader}>\n <ThemedPreloader type=\"dots\" />\n </div>\n )}\n\n {/* Nothing found */}\n {shouldShowNothingFoundMessage && (\n <div className={classes.nothingFound}>{translates.nothingFound}</div>\n )}\n\n {/* Controls */}\n <div className={classes.panel}>\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import { IMultiSelectListProps, MultiSelectList } from '../../../MultiSelectList';\nimport { IFilterMultiSelectValues } from '../../types';\n\nexport type IFilterMultiSelectProps<Value, Option = string> = IMultiSelectListProps<Value, Option>;\n\nexport function FilterMultiSelect<Value extends IFilterMultiSelectValues<Option>, Option = string>(\n props: IFilterMultiSelectProps<Value, Option>,\n): JSX.Element {\n return <MultiSelectList {...props} />;\n}\n","import { animations, colors, createThemedStyles, helpers, ITweakStyles } from '../../../../theme';\nimport { IButtonStyles } from '../../../Button';\nimport { ISearchInputStyles } from '../../../SearchInput';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nconst ITEM_HEIGHT = 40;\nconst LIST_GAP = 12;\n\nexport const useStyles = createThemedStyles('FilterSelect', {\n root: {\n width: 220,\n background: colors.CLASSIC_WHITE,\n },\n\n list: {\n paddingTop: LIST_GAP,\n padding: [LIST_GAP, 0],\n maxHeight: ITEM_HEIGHT * 5 + LIST_GAP * 2,\n overscrollBehavior: 'contain',\n ...helpers.withScrollBar,\n },\n\n label: {\n boxSizing: 'border-box',\n fontSize: 14,\n padding: [12, 16],\n userSelect: 'none',\n display: 'flex',\n alignItems: 'center',\n color: colors.FONT_LABEL,\n },\n\n labelChosen: {\n fontWeight: 'bold',\n color: colors.FONT_MAIN,\n padding: [4, 16, 12],\n },\n\n withoutTopGap: {\n paddingTop: 0,\n },\n\n withClearButton: {\n paddingBottom: 0,\n maxHeight: ITEM_HEIGHT * 5 + LIST_GAP,\n },\n\n item: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: [10, 16],\n maxWidth: '100%',\n cursor: 'pointer',\n fontSize: 14,\n minHeight: ITEM_HEIGHT,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n boxSizing: 'border-box',\n },\n\n option: {\n display: 'inline-block',\n userSelect: 'none',\n width: '100%',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n\n icon: {\n width: 20,\n height: 20,\n marginRight: 4,\n alignSelf: 'center',\n flexShrink: 0,\n },\n\n panel: {\n display: 'flex',\n padding: [0, 6, 8],\n gap: 8,\n },\n\n panelWithFooter: {\n borderTop: [1, 'solid', colors.BORDER_MAIN],\n padding: [8, 16],\n },\n\n footer: {\n wordBreak: 'break-word',\n alignSelf: 'center',\n },\n\n clear: {\n marginLeft: 'auto',\n alignSelf: 'center',\n },\n\n preloader: {\n width: 80,\n height: ITEM_HEIGHT,\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n dropdownInput: {\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n nothingFound: {\n display: 'flex',\n alignItems: 'center',\n textAlign: 'center',\n padding: 16,\n fontSize: 14,\n },\n});\n\nexport const searchInputStyles: ISearchInputStyles = {\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': '40px',\n backgroundColor: 'transparent',\n border: 'none',\n },\n },\n },\n};\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport type IFilterSelectStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakSearchInput: ISearchInputStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { debounce } from 'ts-debounce';\nimport {\n addDataTestId,\n getTestId,\n isReactNodeNotEmpty,\n addDataAttributes,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useIsMounted, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { Icon } from '../../../Icon';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport { SearchInput } from '../../../SearchInput';\nimport { ThemedPreloader } from '../../../ThemedPreloader';\nimport { defaultConvertFunction, getSelectLocale } from '../../helpers';\nimport { IFilterLocaleKey, ISelectLocale } from '../../types';\nimport {\n useStyles,\n IFilterSelectStyles,\n searchInputStyles,\n clearButtonStyles,\n} from './FilterSelect.styles';\n\nexport interface IFilterSelectProps<Value> extends ICommonProps<IFilterSelectStyles> {\n value?: Value;\n onChange: (value?: Value) => void;\n onClose?: () => void;\n /**\n * @default false\n */\n isSearchEnabled?: boolean;\n /**\n * @default false\n */\n isGroupingEnabled?: boolean;\n localeKey?: IFilterLocaleKey;\n locale?: Partial<ISelectLocale>;\n options?: Value[];\n footer?: ReactNode;\n fetchOptions?: (value?: string, page?: number) => Promise<Value[]>;\n getValueString?: (value: Value) => string;\n getValueView?: (value: Value) => ReactNode;\n getValueId?: (value: Value) => string;\n /**\n * @default true\n */\n hasClearButton?: boolean;\n}\n\nexport function FilterSelect<Value>({\n data,\n tweakStyles,\n value,\n isSearchEnabled = false,\n isGroupingEnabled = false,\n localeKey,\n locale,\n onChange,\n onClose,\n options,\n fetchOptions,\n footer,\n getValueView = defaultConvertFunction,\n getValueId = defaultConvertFunction,\n getValueString = defaultConvertFunction,\n hasClearButton = true,\n testId,\n}: IFilterSelectProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakSearchInputStyles = useTweakStyles({\n innerStyles: searchInputStyles,\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'FilterSelect',\n });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterSelect',\n });\n\n const isMounted = useIsMounted();\n\n const translates = useMemo(() => getSelectLocale(localeKey, locale), [localeKey, locale]);\n\n const observer = useRef<IntersectionObserver>();\n\n const [searchValue, setSearchValue] = useState('');\n const [allOptions, setAllOptions] = useState<Value[]>([]);\n\n const [activePage, setActivePage] = useState(0);\n const [isMaxPage, setIsMaxPage] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingOptionsOnScroll, setLoadingOptionsOnScroll] = useState(false);\n\n const shouldShowPreloader = isLoading || isLoadingOptionsOnScroll;\n const hasFooter = isReactNodeNotEmpty(footer);\n\n const handleSearchInputChange = useCallback(\n async (inputValue?: string) => {\n if (fetchOptions === undefined) {\n return;\n }\n setIsLoading(true);\n\n try {\n const response = await fetchOptions(inputValue?.trim() ?? '');\n if (isMounted() && response !== undefined) {\n setAllOptions(response);\n setActivePage(0);\n setIsMaxPage(false);\n }\n } finally {\n if (isMounted()) {\n setIsLoading(false);\n }\n }\n },\n [fetchOptions],\n );\n\n const changeSearchValue = useMemo(\n () => debounce(handleSearchInputChange),\n [handleSearchInputChange],\n );\n\n const handleOnChange = (inputValue: string) => {\n setSearchValue(inputValue);\n if (fetchOptions === undefined) {\n if (options !== undefined) {\n const lowerSearchValue = inputValue.toLowerCase();\n setAllOptions(\n options.filter((o) => getValueString(o).toLowerCase().includes(lowerSearchValue)),\n );\n }\n } else {\n changeSearchValue(inputValue);\n }\n };\n\n const handleChange = (val?: Value) => {\n onChange(val);\n onClose?.();\n };\n\n const handleClear = () => {\n if (options !== undefined) {\n setAllOptions(options);\n }\n handleChange(undefined);\n setSearchValue('');\n };\n\n const handleLoadItemsOnScroll = useCallback(\n async (inputValue?: string, page?: number) => {\n if (fetchOptions === undefined) {\n return;\n }\n\n setLoadingOptionsOnScroll(true);\n\n try {\n const response = await fetchOptions(inputValue?.trim() ?? '', page ?? 0);\n\n if (isMounted()) {\n if (response.length > 0) {\n setAllOptions((prevState) => [...prevState, ...response]);\n } else {\n setIsMaxPage(true);\n }\n }\n } finally {\n if (isMounted()) {\n setLoadingOptionsOnScroll(false);\n }\n }\n },\n [fetchOptions],\n );\n\n const initIntersectionObserver = useCallback(\n (node: HTMLDivElement) => {\n if (isLoadingOptionsOnScroll || isMaxPage) {\n return;\n }\n\n if (observer.current) {\n observer.current.disconnect();\n }\n\n observer.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting) {\n await handleLoadItemsOnScroll(searchValue, activePage + 1);\n if (isMounted()) {\n setActivePage((prevState) => prevState + 1);\n }\n }\n });\n\n if (node) {\n observer.current.observe(node);\n }\n },\n [activePage, handleLoadItemsOnScroll, isLoadingOptionsOnScroll, isMaxPage, searchValue],\n );\n\n useEffect(() => {\n if (fetchOptions === undefined) {\n setAllOptions(options ?? []);\n return;\n }\n\n const doFetchOptions = async () => {\n setIsLoading(true);\n\n try {\n const response = await fetchOptions('');\n if (response !== undefined && isMounted()) {\n setAllOptions(response);\n }\n } finally {\n setIsLoading(false);\n }\n };\n doFetchOptions();\n }, []);\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isSearchEnabled && (\n <div className={classes.dropdownInput}>\n <SearchInput\n value={searchValue}\n placeholder={translates.searchPlaceholder}\n onChange={handleOnChange}\n tweakStyles={tweakSearchInputStyles}\n testId={getTestId(testId, 'search')}\n shouldFocusOnMount\n />\n </div>\n )}\n\n {!isLoading && (\n <>\n {isArrayNotEmpty(allOptions) && (\n <div\n className={clsx(classes.list, { [classes.withClearButton]: hasClearButton })}\n {...addDataTestId(testId, 'list')}\n >\n {isGroupingEnabled && isNotEmpty(value) && (\n <>\n <div\n className={clsx(classes.label, classes.labelChosen, {\n [classes.withoutTopGap]: !isSearchEnabled,\n })}\n >\n {translates.chosen}\n </div>\n <div className={classes.item} onClick={() => handleChange(undefined)}>\n <div className={classes.option}>{getValueView(value)}</div>\n <div className={classes.icon}>\n <Icon type=\"check\" />\n </div>\n </div>\n <div className={classes.label}>{translates.all}</div>\n </>\n )}\n {allOptions.map((item, index) => {\n const isActive = isNotEmpty(value) && getValueId(value) === getValueId(item);\n if (isGroupingEnabled && isActive) {\n return null;\n }\n const id = getValueId(item);\n const view = getValueView(item);\n\n const renderedItem = (\n <div\n key={id}\n className={classes.item}\n ref={\n allOptions.length - 1 === index && fetchOptions !== undefined\n ? initIntersectionObserver\n : undefined\n }\n onClick={() => handleChange(item)}\n >\n <div className={classes.option} {...addDataAttributes({ id, option: id })}>\n {view}\n </div>\n {isActive && (\n <div className={classes.icon}>\n <Icon type=\"check\" />\n </div>\n )}\n </div>\n );\n\n if (options !== undefined && searchValue === '') {\n return (\n <ScrollIntoViewIfNeeded key={id} active={isActive}>\n {renderedItem}\n </ScrollIntoViewIfNeeded>\n );\n } else {\n return renderedItem;\n }\n })}\n </div>\n )}\n\n {/* Preloader */}\n {shouldShowPreloader && (\n <div className={classes.preloader}>\n <ThemedPreloader type=\"dots\" />\n </div>\n )}\n\n {/* Nothing found */}\n {!isArrayNotEmpty(allOptions) && (\n <div className={classes.nothingFound}>{translates.nothingFound}</div>\n )}\n\n {/* Controls and footer */}\n {(hasClearButton || hasFooter) && (\n <div className={clsx(classes.panel, { [classes.panelWithFooter]: hasFooter })}>\n {hasFooter && <div className={classes.footer}>{footer}</div>}\n\n {hasClearButton && (\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n )}\n </div>\n )}\n </>\n )}\n\n {isLoading && (\n <div className={classes.preloader}>\n <ThemedPreloader type=\"dots\" />\n </div>\n )}\n </div>\n );\n}\n","import { colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IButtonStyles } from '../../../Button';\nimport { IDatePickerStyles } from '../../../DatePicker';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterWithDates', {\n root: {\n width: 320,\n background: colors.CLASSIC_WHITE,\n position: 'relative',\n zIndex: 20,\n },\n\n container: {\n display: 'flex',\n gap: 20,\n padding: [8, 20],\n },\n\n containerItem: {\n width: '50%',\n height: 44,\n },\n\n btnRow: {\n display: 'flex',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n padding: 8,\n },\n\n datepicker: {},\n});\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport const backButtonStyles = innerTextButtonStyles;\n\nconst PICKER_TOP_MARGIN = 28;\nconst PICKER_WITH_BUTTONS_TOP_MARGIN = 56;\nconst START_PICKER_LEFT_MARGIN = -20;\nconst END_PICKER_LEFT_MARGIN = -170;\n\nexport const startDatePickerStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_TOP_MARGIN, marginLeft: START_PICKER_LEFT_MARGIN },\n};\n\nexport const startDatePickerWithButtonStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_WITH_BUTTONS_TOP_MARGIN, marginLeft: START_PICKER_LEFT_MARGIN },\n};\n\nexport const endDatePickerStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_TOP_MARGIN, marginLeft: END_PICKER_LEFT_MARGIN },\n};\n\nexport const endDatePickerWithButtonStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_WITH_BUTTONS_TOP_MARGIN, marginLeft: END_PICKER_LEFT_MARGIN },\n};\n\nexport type IFilterWithDatesStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakClearButton: IButtonStyles;\n tweakBackButton: IButtonStyles;\n tweakStartDatePicker: IDatePickerStyles;\n tweakEndDatePicker: IDatePickerStyles;\n }\n>;\n","import { FC, useMemo, useRef, useState } from 'react';\nimport { isAfter, isBefore } from 'date-fns';\nimport { enUS, ru } from 'date-fns/locale';\nimport {\n getTestId,\n isNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { DatePicker } from '../../../DatePicker';\nimport { DEFAULT_PICKER_PROPS } from '../../constants';\nimport { getLocale } from '../../helpers';\nimport {\n IFilterLocaleKey,\n IFilterWithDateDatePickerProps,\n IFilterWithDatesValue,\n IPartialFilterLocale,\n} from '../../types';\nimport {\n backButtonStyles,\n clearButtonStyles,\n endDatePickerStyles,\n endDatePickerWithButtonStyles,\n IFilterWithDatesStyles,\n startDatePickerStyles,\n startDatePickerWithButtonStyles,\n useStyles,\n} from './FilterWithDates.styles';\n\nexport interface IFilterWithDatesProps extends ICommonProps<IFilterWithDatesStyles> {\n value?: IFilterWithDatesValue;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n isClearable?: boolean;\n startPickerProps?: IFilterWithDateDatePickerProps;\n endPickerProps?: IFilterWithDateDatePickerProps;\n onChange: (val: IFilterWithDatesValue) => void;\n onStartBtnSubmit?: () => void;\n onEndBtnSubmit: () => void;\n}\n\nexport const FilterWithDates: FC<IFilterWithDatesProps> = ({\n value,\n onChange,\n localeKey,\n locale,\n onStartBtnSubmit,\n onEndBtnSubmit,\n data,\n tweakStyles,\n testId,\n startPickerProps = DEFAULT_PICKER_PROPS,\n endPickerProps = DEFAULT_PICKER_PROPS,\n isClearable = true,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterWithDates',\n });\n\n const tweakBackButtonStyles = useTweakStyles({\n innerStyles: backButtonStyles,\n tweakStyles,\n className: 'tweakBackButton',\n currentComponentName: 'FilterWithDates',\n });\n\n const hasButtonsRow = isClearable || isNotEmpty(onStartBtnSubmit);\n\n const tweakStartDatePickerStyles = useTweakStyles({\n innerStyles: hasButtonsRow ? startDatePickerWithButtonStyles : startDatePickerStyles,\n tweakStyles,\n className: 'tweakStartDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const tweakEndDatePickerStyles = useTweakStyles({\n innerStyles: hasButtonsRow ? endDatePickerWithButtonStyles : endDatePickerStyles,\n tweakStyles,\n className: 'tweakEndDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const [isOpenFrom, setOpenFrom] = useState(false);\n const [isOpenTo, setOpenTo] = useState(false);\n\n const ref = useRef<HTMLDivElement>(null);\n\n const dateLocale = localeKey === 'ru' ? ru : enUS;\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const handleClear = () => {\n onEndBtnSubmit();\n };\n const isOpenCalendar = isOpenFrom || isOpenTo;\n\n const handleFromSelected = (val: Date | null) => {\n onChange({ from: val, to: value?.to ?? null });\n setOpenFrom(false);\n };\n\n const handleToSelected = (val: Date | null) => {\n onChange({ from: value?.from ?? null, to: val });\n setOpenTo(false);\n };\n\n const handleChangeFrom = (val: Date | null) => {\n // на самом деле ситуации когда надо переворачивать даты, произойти не может\n if (val !== null && value !== undefined && value.to !== null && isAfter(val, value.to)) {\n onChange({ from: value.to, to: val });\n } else {\n onChange({ from: val, to: value?.to ?? null });\n }\n };\n\n const handleChangeTo = (val: Date | null) => {\n // на самом деле ситуации когда надо переворачивать даты, произойти не может\n if (val !== null && value !== undefined && value.from !== null && isBefore(val, value.from)) {\n onChange({ from: val, to: value.from });\n } else {\n onChange({ from: value?.from ?? null, to: val });\n }\n };\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n <div className={classes.container}>\n <div className={classes.containerItem}>\n <DatePicker\n selectedDate={value?.from}\n maxDate={value?.to ?? undefined}\n label={translates.from}\n months={translates.months}\n locale={dateLocale}\n onChangeDate={handleChangeFrom}\n tweakStyles={tweakStartDatePickerStyles}\n testId={getTestId(testId, 'from')}\n isClearable={isClearable}\n {...startPickerProps}\n />\n </div>\n <div className={classes.containerItem}>\n <DatePicker\n selectedDate={value?.to}\n label={translates.to}\n months={translates.months}\n minDate={value?.from ?? undefined}\n locale={dateLocale}\n onChangeDate={handleChangeTo}\n tweakStyles={tweakEndDatePickerStyles}\n testId={getTestId(testId, 'to')}\n isClearable={isClearable}\n {...endPickerProps}\n />\n </div>\n </div>\n\n <div className={classes.btnRow}>\n {isClearable && (\n <div>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n isFullWidth\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n )}\n\n {onStartBtnSubmit && (\n <div>\n <Button\n onClick={onStartBtnSubmit}\n size=\"s\"\n view=\"text\"\n isFullWidth\n tweakStyles={tweakBackButtonStyles}\n >\n {translates.back}\n </Button>\n </div>\n )}\n </div>\n\n {isOpenCalendar && (\n <div ref={ref} className={classes.datepicker}>\n <DatePicker\n selectedDate={(isOpenFrom ? value?.from : value?.to) ?? null}\n label=\"\"\n locale={dateLocale}\n months={translates.months}\n isInline\n onChangeDate={isOpenFrom ? handleFromSelected : handleToSelected}\n />\n </div>\n )}\n </div>\n );\n};\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IFilterSelectStyles } from '../FilterSelect';\n\nexport const useStyles = createThemedStyles('FilterWithPeriod', {\n root: {},\n\n main: {},\n\n picker: {},\n});\n\nexport const filterSelectStyles: IFilterSelectStyles = {\n list: {\n maxHeight: 'auto',\n },\n};\n\nexport type IFilterWithPeriodStyles = ITweakStyles<\n typeof useStyles,\n { tweakFilterSelect: IFilterSelectStyles }\n>;\n","import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutside, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { PERIODS, PERIODS_GETTERS } from '../../constants';\nimport { getLocale } from '../../helpers';\nimport {\n IDatePeriod,\n IFilterLocaleKey,\n IPartialFilterLocale,\n IPeriod,\n IPeriodGetter,\n IPeriodsList,\n} from '../../types';\nimport { FilterSelect } from '../FilterSelect';\nimport { FilterWithDates } from '../FilterWithDates';\nimport { useStyles, IFilterWithPeriodStyles, filterSelectStyles } from './FilterWithPeriod.styles';\n\nexport interface IFilterWithPeriodProps extends ICommonProps<IFilterWithPeriodStyles> {\n value?: IPeriod;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n periods?: IPeriodsList;\n onChange: (period?: IPeriod) => void;\n onClose?: () => void;\n}\n\nexport const FilterWithPeriod: FC<IFilterWithPeriodProps> = ({\n value,\n localeKey,\n locale,\n onChange,\n onClose,\n periods,\n tweakStyles,\n testId,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const [isPeriodPickerShown, setIsPeriodPickerShown] = useState(value?.periodType !== 'CUSTOM');\n\n const [isDatePickerShown, setIsDatePickerShown] = useState(value?.periodType === 'CUSTOM');\n\n const [period, setPeriod] = useState(value);\n\n const periodGetters = useMemo(() => {\n const result: Record<string, IPeriodGetter> = { ...PERIODS_GETTERS };\n periods?.forEach((p) => {\n if (Array.isArray(p)) {\n result[p[0]] = p[1];\n }\n });\n return result;\n }, [periods]);\n\n const periodsList = useMemo(() => {\n if (periods === undefined) {\n return [...PERIODS];\n }\n return periods.map((p) => (Array.isArray(p) ? p[0] : p));\n }, [periods]);\n\n const getPeriodTranslate = useCallback(\n (val: string) => translates.periods[val] ?? val,\n [translates.periods],\n );\n\n const handlePeriodChange = (periodType: string) => {\n let from = null;\n let to = null;\n\n if (periodType in periodGetters) {\n const newPeriod = periodGetters[periodType]();\n from = newPeriod.from;\n to = newPeriod.to;\n }\n\n const p = { from, to, periodType };\n setPeriod(p);\n\n if (periodType === 'CUSTOM') {\n setIsDatePickerShown(true);\n } else {\n if (onClose !== undefined) {\n onClose();\n }\n onChange({ ...p, label: getPeriodTranslate(periodType) });\n }\n\n setIsPeriodPickerShown(false);\n };\n\n const refPeriodPicker = useRef<HTMLDivElement>(null);\n const refDatePicker = useRef<HTMLDivElement>(null);\n\n const onPeriodChange = (val?: string) => {\n if (val !== undefined) {\n handlePeriodChange(val);\n } else {\n onChange(undefined);\n if (onClose !== undefined) {\n onClose();\n }\n }\n };\n\n const handleCustomDateChange = (val: IDatePeriod): void => {\n if (val.from || val.to) {\n onChange({\n ...val,\n periodType: 'CUSTOM',\n });\n } else {\n onChange(undefined);\n }\n };\n\n useOnClickOutside(refDatePicker, () => {\n if (!period?.from && !period?.to) {\n setPeriod(undefined);\n }\n setIsDatePickerShown(false);\n });\n\n useEffect(() => {\n setPeriod(value);\n }, [value, value?.from, value?.to, value?.periodType]);\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: filterSelectStyles,\n tweakStyles,\n className: 'tweakFilterSelect',\n currentComponentName: 'FilterWithPeriod',\n });\n\n return (\n <div className={classes.root}>\n {isPeriodPickerShown && (\n <div className={classes.main} ref={refPeriodPicker}>\n <FilterSelect\n options={periodsList}\n value={period?.periodType}\n onChange={onPeriodChange}\n localeKey={localeKey}\n locale={translates}\n tweakStyles={tweakSelectStyles}\n getValueView={getPeriodTranslate}\n testId={getTestId(testId, 'select')}\n />\n </div>\n )}\n {isDatePickerShown && (\n <div className={classes.picker} ref={refDatePicker}>\n <FilterWithDates\n onStartBtnSubmit={() => {\n setIsDatePickerShown(false);\n setIsPeriodPickerShown(true);\n }}\n onEndBtnSubmit={() => {\n onChange(undefined);\n setIsDatePickerShown(false);\n if (onClose !== undefined) {\n onClose();\n }\n }}\n value={period}\n onChange={handleCustomDateChange}\n localeKey={localeKey}\n locale={translates}\n testId={getTestId(testId, 'dates')}\n />\n </div>\n )}\n </div>\n );\n};\n","import { isEmpty, isString } from '@true-engineering/true-react-platform-helpers';\nimport { IDatePeriod, IFilterMultiSelectValues, IPeriod } from '../../types';\n\nconst isDateOrEmpty = (value: unknown): value is Date | null | undefined =>\n isEmpty(value) || value instanceof Date;\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const isDatePeriodValue = (value: any): value is IDatePeriod =>\n isDateOrEmpty(value?.from) && isDateOrEmpty(value?.to);\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const isPeriodValue = (value: any): value is IPeriod =>\n isString(value?.periodType) && isDatePeriodValue(value);\n\nexport const isMultiSelectValue = <T extends string>(\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n value: any,\n): value is IFilterMultiSelectValues<T> => Array.isArray(value?.include);\n","import { useMemo } from 'react';\nimport { getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { getLocale } from '../../helpers';\nimport { FilterInterval } from '../FilterInterval';\nimport { FilterMultiSelect } from '../FilterMultiSelect';\nimport { FilterSelect } from '../FilterSelect';\nimport { FilterWithDates } from '../FilterWithDates';\nimport { FilterWithPeriod } from '../FilterWithPeriod';\nimport type { IFilterWrapperProps } from '../FilterWrapper';\nimport { isDatePeriodValue, isMultiSelectValue, isPeriodValue } from './helpers';\n\nexport interface IFilterProps<Values extends Record<string, unknown>, Key extends keyof Values>\n extends IFilterWrapperProps<Values, Key> {\n onChange: <V>(v: V) => void;\n onClose?: () => void;\n}\n\nexport function Filter<Values extends Record<string, unknown>, Key extends keyof Values>(\n props: IFilterProps<Values, Key>,\n): JSX.Element | null {\n const { filter, value, onChange, onClose, localeKey, locale, testId } = props;\n const translatesLocaleKey = filter.localeKey ?? localeKey;\n const translates = useMemo(\n () => getLocale(translatesLocaleKey, locale, filter.locale),\n [translatesLocaleKey, locale, filter.locale],\n );\n\n if (filter.type === 'select') {\n return (\n <FilterSelect\n value={value}\n onChange={onChange}\n onClose={onClose}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'select')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'dateRange') {\n const preparedValue = isPeriodValue(value) ? { ...value } : undefined;\n\n return (\n <FilterWithPeriod\n value={preparedValue}\n onChange={onChange}\n onClose={onClose}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'period')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'dateRangeWithoutPeriod') {\n const preparedValue = isDatePeriodValue(value) ? value : undefined;\n\n return (\n <FilterWithDates\n value={preparedValue}\n onChange={(v) => onChange({ ...v, periodType: 'CUSTOM' })}\n onEndBtnSubmit={() => onChange(undefined)}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'dates')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'multiSelect') {\n const preparedValue = isMultiSelectValue<any>(value) ? value : undefined;\n\n return (\n <FilterMultiSelect\n value={preparedValue}\n onChange={onChange}\n onClose={onClose}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'multiSelect')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'interval') {\n const preparedValue = Array.isArray(value) ? (value as number[]) : undefined;\n\n return (\n <FilterInterval\n value={preparedValue}\n onChange={onChange}\n localeKey={translatesLocaleKey}\n locale={translates}\n labelName={filter.name}\n testId={getTestId(testId, 'interval')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'custom' && filter.component) {\n const Component = filter.component;\n\n return <Component {...props} filter={filter} testId={getTestId(testId, 'dropdown')} />;\n }\n\n if (filter.type !== 'boolean') {\n console.warn(\n `%cДля фильтра ${filter.name} не задан тип или component`,\n 'background: red; color: black',\n );\n }\n\n return null;\n}\n","import { rgba } from '../../../../helpers';\nimport {\n animations,\n colors,\n createThemedStyles,\n dimensions,\n ITweakStyles,\n} from '../../../../theme';\nimport { ISearchInputStyles } from '../../../SearchInput';\nimport { ISelectStyles } from '../../../Select';\nimport { FILTER_HEIGHT } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FiltersPaneSearch', {\n root: {\n display: 'flex',\n position: 'relative',\n backgroundColor: rgba(colors.BORDER_MAIN, 0.3),\n border: [1, 'transparent', 'solid'],\n borderRadius: 18,\n paddingRight: 8,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, border-color',\n },\n\n focused: {\n backgroundColor: colors.CLASSIC_WHITE,\n borderColor: colors.BORDER_MAIN,\n },\n\n disabled: {\n '& $selectBlock': {\n cursor: 'default',\n },\n },\n\n hasValue: {\n backgroundColor: colors.CLASSIC_WHITE,\n borderColor: colors.BORDER_MAIN,\n },\n\n selectWrapper: {\n position: 'relative',\n display: 'flex',\n flexShrink: 0,\n },\n\n selectBlock: {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n cursor: 'pointer',\n height: '100%',\n },\n\n selectLabel: {\n flexShrink: 0,\n fontSize: 14,\n userSelect: 'none',\n },\n\n chevronIcon: {\n flexShrink: 0,\n width: 20,\n height: 20,\n marginRight: 4,\n transition: 'transform .2s ease',\n opacity: 0.5,\n },\n\n open: {\n transform: 'rotate(180deg)',\n },\n\n dropdown: {\n position: 'absolute',\n top: FILTER_HEIGHT - 2,\n right: 0,\n zIndex: 20,\n minWidth: 200,\n marginTop: 6,\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.CLASSIC_WHITE,\n overflow: 'hidden',\n },\n\n dropdownInput: {\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n active: {\n fontWeight: 'bold',\n },\n});\n\nexport const searchInputStyles: ISearchInputStyles = {\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': `${FILTER_HEIGHT - 2}px`,\n backgroundColor: 'transparent',\n border: 'none',\n minWidth: 140,\n },\n\n focused: {\n backgroundColor: 'transparent',\n border: 'none',\n },\n },\n },\n};\n\nexport const selectStyles: ISelectStyles = {\n root: {\n borderRadius: 0,\n borderBottomLeftRadius: 6,\n borderBottomRightRadius: 6,\n boxShadow: 'none',\n width: '100%',\n },\n};\n\nexport type IFiltersPaneSearchStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakSearchInput: ISearchInputStyles;\n tweakSelect: ISelectStyles;\n }\n>;\n","import { ReactNode, useMemo, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n getTestId,\n isArrayLikeNotEmpty,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutside, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { SearchInput } from '../../../SearchInput';\nimport { getLocale } from '../../helpers';\nimport { IFilterLocaleKey, IFiltersPaneSearchPayload, IPartialFilterLocale } from '../../types';\nimport { FilterSelect } from '../FilterSelect';\nimport {\n IFiltersPaneSearchStyles,\n searchInputStyles,\n selectStyles,\n useStyles,\n} from './FiltersPaneSearch.styles';\n\nexport interface IFiltersPaneSearchProps<Value> extends ICommonProps<IFiltersPaneSearchStyles> {\n field?: Value;\n fields?: Value[];\n value?: string;\n onChange: (v: IFiltersPaneSearchPayload<Value>) => void;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n maxLength?: number;\n getValueView?: (value: Value) => ReactNode;\n getValueId?: (value: Value) => string;\n getValueString?: (value: Value) => string;\n hasClearSelectButton?: boolean;\n isDisabled?: boolean;\n isSelectSearchEnabled?: boolean;\n isAutoSized?: boolean;\n}\n\nexport function FiltersPaneSearch<Value>({\n value,\n fields = [],\n field,\n onChange,\n localeKey,\n locale,\n getValueId,\n getValueView,\n getValueString,\n hasClearSelectButton,\n isDisabled = false,\n isSelectSearchEnabled = true,\n isAutoSized = false,\n maxLength,\n data,\n tweakStyles,\n testId,\n}: IFiltersPaneSearchProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakSearchInputStyles = useTweakStyles({\n innerStyles: searchInputStyles,\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'FiltersPaneSearch',\n });\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: selectStyles,\n tweakStyles,\n className: 'tweakSelect',\n currentComponentName: 'FiltersPaneSearch',\n });\n\n const [isInputFocused, setIsInputFocused] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n\n const refRoot = useRef<HTMLDivElement | null>(null);\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n useOnClickOutside(refRoot, () => setIsOpen(false));\n\n const handleSearchChange = (v?: string) => {\n onChange({\n value: v,\n field,\n });\n };\n\n const handleFieldsChange = (v?: Value) => {\n onChange({\n value,\n field: v,\n });\n setIsOpen(false);\n };\n\n return (\n <div\n className={clsx(classes.root, {\n [classes.focused]: isInputFocused,\n [classes.disabled]: isDisabled,\n [classes.hasValue]: isArrayLikeNotEmpty(value),\n })}\n ref={refRoot}\n {...addDataAttributes(data, testId)}\n >\n <SearchInput\n value={value}\n onChange={handleSearchChange}\n placeholder={translates.searchPlaceholder}\n tweakStyles={tweakSearchInputStyles}\n onFocus={() => setIsInputFocused(true)}\n onBlur={() => setIsInputFocused(false)}\n testId={getTestId(testId, 'input')}\n maxLength={maxLength}\n isDisabled={isDisabled}\n isAutoSized={isAutoSized}\n />\n\n <div className={classes.selectWrapper}>\n {/* Select block */}\n {isArrayNotEmpty(fields) && (\n <div\n className={classes.selectBlock}\n onClick={!isDisabled ? () => setIsOpen(!isOpen) : undefined}\n {...addDataTestId(testId, 'select')}\n >\n <div className={clsx(classes.selectLabel, { [classes.active]: isNotEmpty(field) })}>\n {isNotEmpty(field) ? getValueView?.(field) : translates.displayedFields}\n </div>\n <div className={clsx(classes.chevronIcon, isOpen && classes.open)}>\n <Icon type=\"chevron-down\" />\n </div>\n </div>\n )}\n {/* Selector */}\n {isOpen && (\n <div className={classes.dropdown}>\n <FilterSelect\n tweakStyles={tweakSelectStyles}\n value={field}\n options={fields}\n getValueView={getValueView}\n getValueId={getValueId}\n getValueString={getValueString}\n localeKey={localeKey}\n locale={translates}\n onChange={handleFieldsChange}\n isSearchEnabled={isSelectSearchEnabled}\n hasClearButton={hasClearSelectButton}\n testId={getTestId(testId, 'dropdown')}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('FilterValueView', {\n text: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n count: {\n whiteSpace: 'pre',\n },\n});\n\nexport type IFilterValueViewStyles = ITweakStyles<typeof useStyles>;\n","import { useMemo } from 'react';\nimport { format } from 'date-fns';\nimport { isEmpty, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../../../types';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\nimport { defaultConvertFunction, getLocale } from '../../helpers';\nimport { IDateRangeConfigItem, IFilterWithDatesValue, IPeriod } from '../../types';\nimport type { IFilterWrapperProps } from '../FilterWrapper';\nimport { IFilterValueViewStyles, useStyles } from './FilterValueView.styles';\n\nexport interface IFilterValueView<Values extends Record<string, unknown>, Key extends keyof Values>\n extends Omit<IFilterWrapperProps<Values, Key>, 'filtersPaneRef' | 'tweakStyles' | 'onChange'>,\n ICommonProps<IFilterValueViewStyles> {}\n\nexport function FilterValueView<Values extends Record<string, unknown>, Key extends keyof Values>({\n value,\n filter,\n locale,\n localeKey,\n tweakStyles,\n}: IFilterValueView<Values, Key>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const translatesLocaleKey = filter.localeKey ?? localeKey;\n const translates = useMemo(\n () => getLocale(translatesLocaleKey, locale, filter.locale),\n [translatesLocaleKey, locale, filter.locale],\n );\n\n if (isEmpty(value)) {\n return <></>;\n }\n\n if (isNotEmpty(filter.getSelectedValueView)) {\n return <span className={classes.text}>{filter.getSelectedValueView(value)}</span>;\n }\n\n const isMultiple = filter.type === 'custom' && filter.valueViewType === 'multiple';\n const isRange = filter.type === 'custom' && filter.valueViewType === 'range';\n const isDate = filter.type === 'dateRange' || filter.type === 'dateRangeWithoutPeriod';\n\n const displayValue = (v: unknown): string => {\n if (!isNotEmpty(v)) {\n return '';\n }\n\n if (v instanceof Date) {\n return format(\n v,\n (filter as IDateRangeConfigItem<IFilterWithDatesValue>).dateFormat || DEFAULT_DATE_FORMAT,\n );\n }\n\n if (typeof v === 'object' && 'value' in v && isNotEmpty(v.value)) {\n return String(v.value);\n }\n\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n return String(v);\n }\n\n console.warn(\n `%c Ошибка конфигурации фильтра ${filter.name}. Невозможно отобразить значение фильтра. Задайте filterValueViewComponent или filterValueViewType.`,\n 'background: orange; color: black',\n );\n\n return '';\n };\n\n if (filter.type === 'select') {\n const getView = filter.getValueView ?? defaultConvertFunction;\n return <span className={classes.text}>{getView(value)}</span>;\n }\n\n if (filter.type === 'multiSelect') {\n const multiSelectValue = value as IMultiSelectListValues<any>;\n const getView = filter.getValueView ?? defaultConvertFunction;\n const { include } = multiSelectValue;\n\n return (\n <>\n {Array.isArray(include) && include.length > 0 && (\n <>\n <span className={classes.text}>{getView(include[0])}</span>\n <span className={classes.count}>\n {include.length > 1 && ` (+${include.length - 1})`}\n </span>\n </>\n )}\n </>\n );\n }\n\n if (filter.type === 'interval') {\n const intervalValue = value as unknown as number[];\n const intervalValueFrom = intervalValue[0];\n const intervalValueTo = intervalValue[1];\n\n const intervals: string[] = [];\n if (intervalValueFrom !== undefined) {\n intervals.push(`${translates.from.toLowerCase()} ${String(intervalValueFrom)}`);\n }\n if (intervalValueTo !== undefined) {\n intervals.push(`${translates.to.toLowerCase()} ${String(intervalValueTo)}`);\n }\n\n return <span className={classes.text}>{intervals.join(' ')}</span>;\n }\n\n if (isDate) {\n const { from, to, periodType, label } = value as unknown as IPeriod;\n const hasFrom = from !== undefined && from !== null;\n const hasTo = to !== undefined && to !== null;\n\n if (periodType !== 'CUSTOM') {\n return <span className={classes.text}>{displayValue(label)}</span>;\n }\n\n const range: string[] = [];\n if (hasFrom) {\n if (!hasTo) {\n range.push(translates.from.toLowerCase());\n }\n range.push(displayValue(from));\n }\n if (hasTo) {\n if (hasFrom) {\n range.push('—');\n } else {\n range.push(translates.to.toLowerCase());\n }\n range.push(displayValue(to));\n }\n\n return <span className={classes.text}>{range.join(' ')}</span>;\n }\n\n if (isMultiple) {\n const convertValue = filter.getSelectedValue ?? displayValue;\n\n return (\n <>\n {Array.isArray(value) && value.length > 0 && (\n <>\n <span className={classes.text}>{convertValue(value[0])}</span>\n <span className={classes.count}>{value.length > 1 && ` (+${value.length - 1})`}</span>\n </>\n )}\n </>\n );\n }\n\n if (isRange && Array.isArray(value)) {\n const rangeValue = value as unknown as number[];\n const rangeValueFrom = rangeValue[0];\n const rangeValueTo = rangeValue[1];\n\n const range: string[] = [];\n if (rangeValueFrom !== undefined) {\n range.push(`${translates.from.toLowerCase()} ${String(rangeValueFrom)}`);\n }\n if (rangeValueTo !== undefined) {\n range.push(`${translates.to.toLowerCase()} ${String(rangeValueTo)}`);\n }\n\n return <span className={classes.text}>{range.join(' ')}</span>;\n }\n\n return <span className={classes.text}>{displayValue(value)}</span>;\n}\n","import { isNotEmpty, isObject } from '@true-engineering/true-react-platform-helpers';\n\nexport const isContentNotEmpty = (value: unknown): boolean => {\n if (Array.isArray(value)) {\n return value.some(isContentNotEmpty);\n }\n if (isObject(value)) {\n return Object.values(value).some(isContentNotEmpty);\n }\n if (typeof value === 'boolean') {\n return value;\n }\n return isNotEmpty(value);\n};\n","import { animations, colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IWithPopupStyles } from '../../../WithPopup';\nimport type { IFilterValueViewStyles } from '../FilterValueView';\nimport { FILTER_HEIGHT } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterWrapper', {\n root: {\n position: 'relative',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, border-color',\n border: [1, 'solid', colors.BORDER_MAIN],\n borderRadius: 18,\n boxSizing: 'border-box',\n height: FILTER_HEIGHT,\n minWidth: 0,\n },\n\n item: {\n display: 'flex',\n padding: [0, 8, 0, 16],\n cursor: 'pointer',\n },\n\n booleanItem: {\n padding: 0,\n },\n\n name: {\n fontSize: 14,\n lineHeight: '34px',\n whiteSpace: 'nowrap',\n },\n\n boolean: {\n padding: [0, 16],\n },\n\n noValue: {},\n\n openNoValue: {},\n\n openWithValue: {},\n\n disabled: {\n '& > $item': {\n cursor: 'default',\n },\n },\n\n withValue: {},\n\n iconContainer: {\n width: 20,\n height: 20,\n transition: 'transform .2s ease-in-out',\n alignSelf: 'center',\n marginLeft: 6,\n marginRight: 4,\n flexShrink: 0,\n },\n\n chevronIcon: {},\n\n clearIcon: {},\n\n open: {\n transform: 'rotate(180deg)',\n },\n\n dropdown: {\n position: 'absolute',\n zIndex: 20,\n marginTop: 6,\n border: [1, colors.BORDER_MAIN, 'solid'],\n },\n\n left: {\n left: 0,\n },\n\n right: {\n right: 0,\n },\n\n value: {\n alignSelf: 'center',\n fontSize: 14,\n lineHeight: '16px',\n margin: [0, 2, 0, 8],\n fontWeight: 'bold',\n display: 'flex',\n minWidth: 0,\n },\n});\n\nexport type IFilterWrapperStyles = ITweakStyles<\n typeof useStyles,\n { tweakWithPopup: IWithPopupStyles; tweakValueView: IFilterValueViewStyles }\n>;\n","import { MouseEventHandler } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useMixedStyles, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { WithPopup } from '../../../WithPopup';\nimport { ConfigItem, IFilterLocaleKey, IPartialFilterLocale } from '../../types';\nimport { Filter } from '../Filter';\nimport { FilterValueView } from '../FilterValueView';\nimport { isContentNotEmpty } from './helpers';\nimport { useStyles, IFilterWrapperStyles } from './FilterWrapper.styles';\n\nexport interface IFilterWrapperProps<\n Values extends Record<string, unknown>,\n Key extends keyof Values,\n> extends ICommonProps<IFilterWrapperStyles> {\n filter: ConfigItem<Values[Key]>;\n value?: Values[Key];\n isDisabled?: boolean;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n onChange: <V>(value: V) => void;\n}\n\nexport function FilterWrapper<Values extends Record<string, unknown>, Key extends keyof Values>({\n filter,\n value,\n isDisabled,\n locale,\n localeKey,\n data,\n testId,\n tweakStyles: baseTweakStyles,\n onChange,\n}: IFilterWrapperProps<Values, Key>): JSX.Element {\n const tweakStyles = useMixedStyles(baseTweakStyles, filter.tweakWrapperStyles);\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakWithPopupStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithPopup',\n currentComponentName: 'FilterWrapper',\n });\n\n const tweakFilterValueViewStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakValueView',\n currentComponentName: 'FilterWrapper',\n });\n\n if (filter.isInline) {\n return (\n <Filter\n value={value}\n filter={filter}\n localeKey={localeKey}\n locale={locale}\n onChange={onChange}\n testId={testId}\n />\n );\n }\n\n const isBoolean = filter.type === 'boolean';\n\n const handleLabelClick = () => {\n if (isBoolean) {\n onChange(!value);\n }\n };\n const handleClearIconClick: MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n onChange(undefined);\n };\n\n const hasValue = isContentNotEmpty(value);\n const hasClearIcon = (filter.isClearable ?? false) && hasValue;\n\n return (\n <WithPopup\n placement=\"bottom-start\"\n canBeFlipped\n isDisabled={isBoolean || isDisabled}\n tweakStyles={tweakWithPopupStyles}\n trigger={({ triggerProps: { isActive }, referenceProps }) => (\n <div\n className={clsx(classes.root, {\n [classes.noValue]: !hasValue,\n [classes.openNoValue]: isActive && !hasValue,\n [classes.withValue]: !isActive && hasValue,\n [classes.openWithValue]: isActive && hasValue,\n [classes.boolean]: isBoolean,\n [classes.disabled]: isDisabled,\n })}\n {...addDataAttributes(data, testId)}\n {...referenceProps}\n >\n <div\n onClick={handleLabelClick}\n className={clsx(classes.item, { [classes.booleanItem]: isBoolean })}\n >\n <div className={classes.name}>{filter.name}</div>\n {!isBoolean && isNotEmpty(value) && (\n <div className={classes.value}>\n <FilterValueView\n value={value}\n filter={filter}\n locale={locale}\n localeKey={localeKey}\n testId={getTestId(testId, 'value')}\n tweakStyles={tweakFilterValueViewStyles}\n />\n </div>\n )}\n {!isBoolean && !hasClearIcon && (\n <div\n className={clsx(classes.iconContainer, classes.chevronIcon, {\n [classes.open]: isActive,\n })}\n >\n <Icon type=\"chevron-down\" />\n </div>\n )}\n {hasClearIcon && (\n <div\n className={clsx(classes.iconContainer, classes.clearIcon)}\n onClick={handleClearIconClick}\n >\n <Icon type=\"close-large\" />\n </div>\n )}\n </div>\n </div>\n )}\n >\n {({ onClose }) => (\n <Filter\n value={value}\n filter={filter}\n locale={locale}\n localeKey={localeKey}\n onClose={onClose}\n onChange={onChange}\n testId={testId}\n />\n )}\n </WithPopup>\n );\n}\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 341.3\\\"><path fill=\\\"#FFF\\\" d=\\\"M0 0h512v341.3H0z\\\"/><g fill=\\\"#6DA544\\\"><path d=\\\"M0 0h512v48.8H0zM0 97.5h512v48.8H0zM0 195h512v48.8H0zM0 292.6h512v48.8H0z\\\"/></g><path fill=\\\"#D80027\\\" d=\\\"M0 0h256v146.3H0z\\\"/><path fill=\\\"#FFF\\\" d=\\\"m116.9 114.4-7.5-14.8V69.9L128 59l18.6 10.9v22.3l7.4-7.4 4.2 3-4.2 11.8-14.9 14.8z\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"82\\\" cy=\\\"82.8\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"90.8\\\" cy=\\\"61.7\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"106.6\\\" cy=\\\"46.2\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"128\\\" cy=\\\"40.8\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"149.4\\\" cy=\\\"46.2\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"165.2\\\" cy=\\\"61.7\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"174\\\" cy=\\\"82.8\\\" r=\\\"5.4\\\"/></svg>\"","import AB from './AB.svg?raw';\nimport OS from './OS.svg?raw';\n\nexport const customFlags = {\n /**\n * Абхазия\n */\n AB,\n /**\n * Южная осетия\n */\n OS,\n};\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 450 300\\\"><path fill=\\\"#FFF\\\" d=\\\"M0 0h450v300H0z\\\"/><path fill=\\\"red\\\" d=\\\"M0 100h450v200H0z\\\"/><path fill=\\\"#FFDF00\\\" d=\\\"M0 200h450v100H0z\\\"/></svg>\"","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Flag', {\n root: {\n display: 'flex',\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n // приходится хардкодить в компоненте, тк либа Flags выдает флаги с 2-3 пиксельным отступом снизу\n // если будет нужно, то можно вынести border на уровень пропсов\n border: [1, 'solid', colors.BORDER_MAIN],\n borderRadius: 2,\n },\n\n noFlag: {\n width: 20,\n color: colors.FONT_MEDIUM,\n },\n});\n\nexport type IFlagStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { hasFlag } from 'country-flag-icons';\nimport * as Flags from 'country-flag-icons/react/3x2';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { customFlags } from './customFlags';\nimport { IFlagStyles, useStyles } from './Flag.styles';\n\nexport interface IFlagProps extends Pick<ICommonProps<IFlagStyles>, 'tweakStyles'> {\n /** @default '' */\n countryCode?: string;\n}\n\nexport const Flag: FC<IFlagProps> = ({ countryCode = '', tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n const countryFlagKey = countryCode.toUpperCase();\n\n const hasFlagInLibrary = hasFlag(countryFlagKey);\n\n if (hasFlagInLibrary) {\n const FlagComponent = Flags[countryFlagKey as keyof typeof Flags];\n return (\n <div className={classes.root}>\n <FlagComponent />\n </div>\n );\n }\n\n const CustomFlag = customFlags[countryFlagKey as keyof typeof customFlags];\n\n if (CustomFlag !== undefined) {\n return <div className={classes.root} dangerouslySetInnerHTML={{ __html: CustomFlag }} />;\n }\n\n return (\n <div className={classes.noFlag}>\n <Icon type=\"minus\" />\n </div>\n );\n};\n","import { IFlexibleTableRenderElement, IFlexibleTableRenderMode } from './types';\n\nexport const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\n\nexport const TableRenders = {\n table: { Root: 'table', Head: 'thead', Body: 'tbody', Row: 'tr', Header: 'th', Cell: 'td' },\n divs: { Root: 'div', Head: 'div', Body: 'div', Row: 'div', Header: 'div', Cell: 'div' },\n} satisfies Record<\n IFlexibleTableRenderMode,\n Record<IFlexibleTableRenderElement, keyof JSX.IntrinsicElements>\n>;\n","import { rgba } from '../../helpers';\nimport { colors, createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Skeleton', {\n root: {\n display: 'flex',\n width: '100%',\n height: '100%',\n backgroundColor: rgba(colors.GREY_DISABLED, 0.8),\n position: 'relative',\n borderRadius: 4,\n overflow: 'hidden',\n '-webkit-mask-image': '-webkit-radial-gradient(white, black)',\n\n '&::after': {\n content: '\"\"',\n animation: '$skeleton 1.6s linear 0.5s infinite',\n background: `linear-gradient(90deg, transparent, ${rgba(\n colors.GREY_BACKGROUND,\n 0.65,\n )}, transparent)`,\n position: 'absolute',\n transform: 'translateX(-100%)',\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n },\n },\n\n '@keyframes skeleton': {\n '0%': {\n transform: 'translateX(-100%)',\n },\n\n '50%': {\n transform: 'translateX(100%)',\n },\n\n '100%': {\n transform: 'translateX(100%)',\n },\n },\n});\n\nexport type ISkeletonStyles = ITweakStyles<typeof useStyles>;\n","import { CSSProperties, FC } from 'react';\nimport { ICommonProps } from '../../types';\nimport { ISkeletonStyles, useStyles } from './Skeleton.styles';\n\nexport interface ISkeletonProps extends Pick<ICommonProps<ISkeletonStyles>, 'tweakStyles'> {\n height?: CSSProperties['height'];\n}\n\nexport const Skeleton: FC<ISkeletonProps> = ({ height, tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n return <div className={classes.root} style={{ height }} />;\n};\n","import { format } from 'date-fns';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { DEFAULT_DATE_FORMAT } from './constants';\nimport { IFlexibleTableConfigType, IHeaderContent, ITableRow } from './types';\n\nexport const hasHorizontalScrollBar = (el: HTMLElement | null | undefined): boolean =>\n isNotEmpty(el) && el.scrollWidth !== el.clientWidth;\n\nexport const formatCellContent = <\n Values extends ITableRow,\n HeaderContent extends IHeaderContent<Values>,\n>(\n value: unknown,\n config?: IFlexibleTableConfigType<Values, HeaderContent>[keyof Values],\n): string =>\n value instanceof Date ? format(value, config?.dateFormat ?? DEFAULT_DATE_FORMAT) : String(value);\n","import { rgba } from '../../helpers';\nimport { colors, ITweakStyles, createThemedStyles, animations, helpers } from '../../theme';\nimport type { IFlexibleTableRowStyles } from './components';\n\nexport const STICKY_SHADOW_PADDING = 12;\n\nexport const useStyles = createThemedStyles('FlexibleTable', {\n flexibleTableWrapper: {},\n\n root: {\n width: '100%',\n position: 'relative',\n borderCollapse: 'separate',\n borderSpacing: 0,\n },\n\n scroll: {\n ...helpers.withScrollBar,\n /*\n Чтобы сделать таблицу на всю высоту проставьте\n height у родителя таблицы у себя в проекте.\n Например: height: calc(100vh -{высота шапки}px)\n */\n maxHeight: '100%',\n },\n\n head: {},\n\n body: {},\n\n loaderRow: {},\n\n loaderCell: {},\n\n loader: {\n position: 'sticky',\n left: 0,\n maxWidth: '100vw',\n height: 48,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n headerRow: {\n position: 'relative',\n verticalAlign: 'bottom',\n },\n\n header: {\n position: 'sticky',\n boxSizing: 'content-box',\n top: 0,\n zIndex: 10,\n fontSize: 12,\n fontWeight: 'normal',\n padding: [0, 7, 16, 7],\n },\n\n headerSticky: {\n zIndex: 20,\n left: 0,\n paddingLeft: 24,\n paddingRight: 12,\n\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n background: 'transparent',\n pointerEvents: 'none',\n zIndex: 1,\n transition: animations.defaultTransition,\n transitionProperty: 'box-shadow',\n\n '[data-scrolled] &': {\n boxShadow: '4px 0 4px rgba(0, 0, 0, 0.05)',\n },\n },\n\n '&::after': {\n content: '\"\"',\n display: 'block',\n width: STICKY_SHADOW_PADDING,\n height: '100%',\n position: 'absolute',\n left: '100%',\n top: 0,\n background: `linear-gradient(90deg, ${colors.CLASSIC_WHITE}, ${rgba(\n colors.CLASSIC_WHITE,\n 0,\n )})`,\n zIndex: 0,\n },\n },\n\n /** @deprecated удалить вместе с isFirstColumnSticky */\n headerSecond: {\n paddingLeft: STICKY_SHADOW_PADDING,\n },\n\n nothingFoundRow: {},\n\n nothingFound: {},\n});\n\nexport type IFlexibleTableStyles = ITweakStyles<\n typeof useStyles,\n { tweakTableRow: IFlexibleTableRowStyles }\n>;\n","import { getTransition } from '@true-engineering/true-react-platform-helpers';\nimport { ITweakStyles, createThemedStyles } from '../../../../theme';\nimport { STICKY_SHADOW_PADDING } from '../../FlexibleTable.styles';\n\nexport const useStyles = createThemedStyles('FlexibleTableCell', {\n root: {\n position: 'relative',\n boxSizing: 'content-box',\n padding: [14, 7],\n fontSize: 14,\n lineHeight: 1.42,\n zIndex: 5,\n verticalAlign: 'top',\n },\n\n sticky: {\n zIndex: 19,\n paddingLeft: 24,\n paddingRight: 12,\n left: 0,\n ...getTransition(['box-shadow']),\n\n '[data-scrolled] &': {\n boxShadow: '4px 0 4px rgba(0, 0, 0, 0.05)',\n },\n },\n\n /** @deprecated удалить вместе с isFirstColumnSticky */\n second: {\n paddingLeft: STICKY_SHADOW_PADDING,\n },\n\n loading: {},\n\n skeleton: {\n height: 21,\n },\n\n clickable: {\n cursor: 'pointer',\n },\n});\n\nexport type IFlexibleTableCellStyles = ITweakStyles<typeof useStyles>;\n","import { ReactNode, useCallback } from 'react';\nimport clsx from 'clsx';\nimport {\n applyAction,\n isNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../../../types';\nimport { Skeleton } from '../../../Skeleton';\nimport { TableRenders } from '../../constants';\nimport { formatCellContent } from '../../helpers';\nimport {\n ITableRow,\n IValueComponentProps,\n IFlexibleTableConfigType,\n IFlexibleTableRenderMode,\n IHeaderContent,\n} from '../../types';\nimport { useStyles, IFlexibleTableCellStyles } from './FlexibleTableCell.styles';\n\nexport interface IFlexibleTableCellProps<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n> extends Pick<ICommonProps<IFlexibleTableCellStyles>, 'tweakStyles'>,\n Pick<\n IValueComponentProps<Row, unknown>,\n 'isFocusedRow' | 'isActiveRow' | 'isNestedComponentExpanded' | 'isRowNestedComponentExpanded'\n > {\n row: Row;\n columnName: keyof Row;\n updateNestedComponent: (component: ReactNode, cellKey: keyof Row) => void;\n config: IFlexibleTableConfigType<Row, HeaderContent>;\n renderMode: IFlexibleTableRenderMode;\n isSecond?: boolean;\n isSticky?: boolean;\n isLoading?: boolean;\n}\n\nexport function FlexibleTableCell<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n>({\n row,\n columnName,\n config,\n renderMode,\n isSecond,\n isSticky: isOldSticky,\n isLoading,\n updateNestedComponent,\n tweakStyles,\n ...valueComponentProps\n}: IFlexibleTableCellProps<Row, HeaderContent>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const value = row[columnName];\n\n const {\n component = formatCellContent(value, config[columnName]),\n width,\n maxWidth,\n minWidth,\n left,\n right,\n position,\n cellAlign,\n cellVerticalAlign,\n shouldRenderDataId,\n shouldRenderComponent = isNotEmpty,\n onCellClick,\n } = config[columnName] ?? {};\n\n const isSticky = isOldSticky || position === 'sticky';\n const isClickable = !isLoading && isNotEmpty(onCellClick);\n\n const cellComponentProps: IValueComponentProps<Row, Row[keyof Row]> = {\n ...valueComponentProps,\n onSetNestedComponent: useCallback(\n (node) => updateNestedComponent(node, columnName),\n [columnName, updateNestedComponent],\n ),\n value,\n row,\n };\n\n const Table = TableRenders[renderMode];\n\n return (\n <Table.Cell\n className={clsx(classes.root, {\n [classes.sticky]: isSticky,\n [classes.second]: isSecond,\n [classes.loading]: isLoading,\n [classes.clickable]: isClickable,\n })}\n style={{\n textAlign: cellAlign,\n position: isSticky ? 'sticky' : position,\n width,\n maxWidth,\n minWidth,\n right,\n left,\n verticalAlign: cellVerticalAlign,\n }}\n onClick={isClickable ? (event) => onCellClick?.(event, cellComponentProps) : undefined}\n {...addDataAttributes({ id: shouldRenderDataId ? columnName : undefined })}\n >\n {isLoading ? (\n <div className={classes.skeleton}>\n <Skeleton />\n </div>\n ) : (\n applyAction(shouldRenderComponent, value, row, columnName) &&\n applyAction(component, cellComponentProps)\n )}\n </Table.Cell>\n );\n}\n","import { ITweakStyles, createThemedStyles } from '../../../../theme';\nimport { IFlexibleTableCellStyles } from '../FlexibleTableCell';\n\nexport const useStyles = createThemedStyles('FlexibleTableRow', {\n root: {\n position: 'relative',\n },\n\n active: {},\n\n editable: {\n cursor: 'pointer',\n },\n\n clickable: {\n cursor: 'pointer',\n },\n\n nestedComponent: {},\n});\n\nexport type IFlexibleTableRowStyles = ITweakStyles<\n typeof useStyles,\n { tweakTableCell: IFlexibleTableCellStyles }\n>;\n","import { ReactNode, useState, MouseEvent, RefCallback, useCallback } from 'react';\nimport clsx from 'clsx';\nimport {\n isEmpty,\n isNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { genericMemo } from '../../../../helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { IDataAttributes, ITweakStylesProps } from '../../../../types';\nimport { TableRenders } from '../../constants';\nimport {\n ITableRow,\n IFlexibleTableConfigType,\n IFlexibleTableRenderMode,\n INestedComponent,\n IHeaderContent,\n} from '../../types';\nimport { FlexibleTableCell } from '../FlexibleTableCell';\nimport { useStyles, IFlexibleTableRowStyles } from './FlexibleTableRow.styles';\n\nexport interface IFlexibleTableRowProps<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n UniqueField extends keyof Row,\n> extends ITweakStylesProps<IFlexibleTableRowStyles> {\n item: Row;\n uniqueField?: UniqueField;\n renderMode: IFlexibleTableRenderMode;\n /** @default false */\n isActive?: boolean;\n /** @default false */\n isFocusable?: boolean;\n /** @deprecated Use {@position}\n * @default false */\n isFirstColumnSticky?: boolean;\n /** @default false */\n isLoading?: boolean;\n config: IFlexibleTableConfigType<Row, HeaderContent>;\n columns: Array<keyof Row & string>;\n rowAttributes?: Array<keyof Row>;\n /** @default false */\n isExpandableRowComponentInitiallyOpen?: boolean;\n rowRef?: RefCallback<HTMLTableRowElement>;\n /** Возвращает React-элемент, который отрисуется под строкой при нажатии на неё */\n expandableRowComponent?: (item: Row, isOpen: boolean, close: () => void) => ReactNode;\n onRowHover?: (id?: Row[UniqueField]) => void;\n onRowClick?: (id: Row[UniqueField]) => void;\n}\n\nexport const FlexibleTableRow = genericMemo(function FlexibleTableRow<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n UniqueField extends keyof Row,\n>({\n item,\n config,\n columns,\n uniqueField,\n renderMode,\n isActive = false,\n isFocusable = false,\n isFirstColumnSticky = false,\n isLoading = false,\n rowAttributes,\n isExpandableRowComponentInitiallyOpen = false,\n rowRef,\n tweakStyles,\n expandableRowComponent,\n onRowHover,\n onRowClick,\n}: IFlexibleTableRowProps<Row, HeaderContent, UniqueField>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakTableCellStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTableCell',\n currentComponentName: 'FlexibleTableRow',\n });\n\n const [isFocused, setFocused] = useState(false);\n const [nestedComponent, setNestedComponent] = useState<INestedComponent<keyof Row>>(() => ({\n isOpen: isExpandableRowComponentInitiallyOpen,\n }));\n\n const isEditable = !isLoading && (isNotEmpty(onRowClick) || isNotEmpty(onRowHover));\n const isClickable = !isLoading && (isNotEmpty(onRowClick) || isNotEmpty(expandableRowComponent));\n\n const { isOpen: isNestedComponentExpanded, cellKey: nestedComponentCellKey } = nestedComponent;\n\n // уникальная разработка, позволяющая прокидывать data-атрибуты в <tr>\n // например: rowAttributes={['id']} => <tr data-id=\"x\" />\n const rowData: IDataAttributes = Object.fromEntries(\n rowAttributes?.map((attribute) => [attribute, item[attribute]]) ?? [],\n );\n\n const handleMouseEnter = (event: MouseEvent) => {\n if (isNotEmpty(uniqueField) && isNotEmpty(onRowHover)) {\n event.stopPropagation();\n onRowHover(item[uniqueField]);\n }\n if (isFocusable) {\n setFocused(true);\n }\n };\n\n const handleMouseLeave = () => {\n onRowHover?.(undefined);\n if (isFocusable) {\n setFocused(false);\n }\n };\n\n const closeNestedComponent = () => {\n setNestedComponent({ isOpen: false });\n };\n\n const updateNestedComponent = useCallback((component: ReactNode, cellKey: keyof Row) => {\n if (isEmpty(component)) {\n closeNestedComponent();\n } else {\n setNestedComponent({ isOpen: true, component, cellKey });\n }\n }, []);\n\n const handleRowClick = () => {\n if (isNotEmpty(uniqueField)) {\n onRowClick?.(item[uniqueField]);\n }\n if (isEmpty(expandableRowComponent)) {\n return;\n }\n\n if (!isNestedComponentExpanded) {\n setNestedComponent({ isOpen: true });\n } else if (isEmpty(nestedComponentCellKey)) {\n closeNestedComponent();\n }\n };\n\n const Table = TableRenders[renderMode];\n\n return (\n <>\n <Table.Row\n ref={rowRef}\n className={clsx(classes.root, {\n [classes.active]: isActive,\n [classes.editable]: isEditable,\n [classes.clickable]: isClickable,\n })}\n {...(!isLoading && {\n onClick: handleRowClick,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n })}\n {...addDataAttributes({\n ...rowData,\n active: isActive ? true : undefined,\n editable: isEditable ? true : undefined,\n isExpandableComponentActive: isNestedComponentExpanded ? true : undefined,\n })}\n >\n {columns.map((key, i) => (\n <FlexibleTableCell\n key={key}\n isSticky={isFirstColumnSticky && i === 0}\n isSecond={isFirstColumnSticky && i === 1}\n isLoading={isLoading}\n row={item}\n config={config}\n columnName={key}\n tweakStyles={tweakTableCellStyles}\n renderMode={renderMode}\n isFocusedRow={isFocused}\n isActiveRow={isActive}\n isNestedComponentExpanded={isNestedComponentExpanded && nestedComponentCellKey === key}\n isRowNestedComponentExpanded={\n isNestedComponentExpanded && isEmpty(nestedComponentCellKey)\n }\n updateNestedComponent={updateNestedComponent}\n />\n ))}\n </Table.Row>\n\n {isNestedComponentExpanded && (\n <Table.Row className={classes.root}>\n <Table.Cell className={classes.nestedComponent} colSpan={columns.length}>\n {nestedComponent.component ??\n expandableRowComponent?.(item, true, closeNestedComponent)}\n </Table.Cell>\n </Table.Row>\n )}\n </>\n );\n});\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { ICheckboxStyles } from '../../../Checkbox';\n\nexport const useStyles = createThemedStyles('DocActions', {\n docActions: {\n display: 'grid',\n alignItems: 'center',\n gridTemplateColumns: 'max-content 1fr',\n },\n\n neutral: {},\n\n inverse: {},\n\n counterWrapper: {},\n\n title: {},\n\n actionsWrapper: {\n justifySelf: 'end',\n },\n});\n\nexport type IDocActionsStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakCheckbox: ICheckboxStyles;\n }\n>;\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Checkbox, ICheckboxProps } from '../../../Checkbox';\nimport { IDocActionsView } from './types';\nimport { IDocActionsStyles, useStyles } from './DocActions.styles';\n\nexport interface IDocActionsProps\n extends Omit<ICheckboxProps<never>, 'tweakStyles'>,\n ICommonProps<IDocActionsStyles> {\n title: string;\n /** @default 'neutral' */\n view?: IDocActionsView;\n children: ReactNode;\n}\n\nexport const DocActions: FC<IDocActionsProps> = ({\n title,\n view = 'neutral',\n children,\n tweakStyles,\n ...checkBoxProps\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCheckboxStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakCheckbox',\n currentComponentName: 'DocActions',\n });\n\n return (\n <div className={clsx(classes.docActions, classes[view])}>\n <div className={classes.counterWrapper}>\n <Checkbox tweakStyles={tweakCheckboxStyles} {...checkBoxProps}>\n <span className={classes.title}>{title}</span>\n </Checkbox>\n </div>\n <div className={classes.actionsWrapper}>{children}</div>\n </div>\n );\n};\n","import { createUseStyles } from 'react-jss';\nimport { animations, ITweakStyles } from '../../theme';\nimport { IDocActionsStyles } from './components';\n\nexport const useStyles = createUseStyles({\n ...animations.slideUp,\n});\n\nexport type IFloatDocActionsStyles = ITweakStyles<\n typeof useStyles,\n { tweakDocActions: IDocActionsStyles }\n>;\n","import { animations, colors, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { IInputStyles } from '../Input';\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n controlWrapper: {\n '--increment-buttons-width': '36px',\n '--increment-buttons-gap': '1px',\n '--increment-buttons-margin': '1px',\n '--increment-button-icon-size': '16px',\n },\n },\n};\n\nexport const useStyles = createThemedStyles('IncrementInput', {\n buttons: {\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100% - var(--increment-buttons-margin) * 2)',\n margin: 'var(--increment-buttons-margin)',\n gap: 'var(--increment-buttons-gap)',\n flexShrink: 0,\n order: 1000, // сдвигаем кнопки на самый конец\n\n zIndex: dimensions.Z_INDEX.CONTROL_FOCUS + 1,\n },\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 'var(--increment-buttons-width)',\n flexGrow: 1,\n\n cursor: 'pointer',\n border: 'none',\n outline: 'none',\n color: colors.FONT_MEDIUM,\n backgroundColor: colors.GREY_BACKGROUND,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color',\n\n '&:hover, &:focus': {\n backgroundColor: colors.GREY_HOVER,\n },\n\n '&:active': {\n backgroundColor: colors.GREY_ACTIVE,\n },\n },\n\n disabledButton: {\n cursor: 'default',\n color: colors.FONT_DISABLED,\n backgroundColor: colors.CLASSIC_WHITE,\n\n '&:hover': {\n backgroundColor: colors.CLASSIC_WHITE,\n },\n },\n\n errorButton: {},\n\n icon: {\n width: 'var(--increment-button-icon-size)',\n height: 'var(--increment-button-icon-size)',\n },\n});\n\nexport type IIncrementInputStyles = ITweakStyles<typeof useStyles, { tweakInput: IInputStyles }>;\n","import { rgba } from '../../helpers';\nimport { colors, dimensions, ITweakStyles, createThemedStyles } from '../../theme';\nimport { IIconButtonStyles } from '../IconButton';\n\nconst VERTICAL_OVERLAY_PADDING = 50;\n\nconst MODAL_HORIZONTAL_PADDING_L = 40;\nconst MODAL_HORIZONTAL_PADDING_M = 36;\nconst MODAL_HORIZONTAL_PADDING_S = 26;\n\nconst MODAL_CLOSE_BUTTON_SIZE = 40;\nconst MODAL_CLOSE_BUTTON_ICON_SIZE = 30;\n\nexport const useStyles = createThemedStyles('Modal', {\n root: {},\n\n fixedPosition: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n zIndex: 999,\n overflowX: 'hidden',\n '-webkit-overflow-scrolling': 'touch',\n\n '& $innerOverlay': {\n display: 'flex',\n width: '100%',\n minHeight: '100%',\n boxSizing: 'border-box',\n },\n },\n\n innerOverlay: {},\n\n sideBar: {\n '& $modal': {\n borderRadius: 0,\n margin: 0,\n minHeight: '100%',\n },\n },\n\n 'position-static': {},\n\n 'position-left': {},\n\n 'position-right': {\n justifyContent: 'flex-end',\n },\n\n 'position-center': {\n padding: [VERTICAL_OVERLAY_PADDING, 30],\n },\n\n overlay: {\n backgroundColor: rgba(colors.BORDER_MAIN, 0.5),\n },\n\n modal: {\n backgroundColor: colors.CLASSIC_WHITE,\n borderRadius: dimensions.BORDER_RADIUS_LARGE,\n boxShadow: `0 8px 32px -8px ${rgba(colors.FONT_MAIN, 0.24)}, 0 -2px 6px 0 ${rgba(\n colors.FONT_MAIN,\n 0.04,\n )}, 0 0 1px 0 ${rgba(colors.FONT_MAIN, 0.15)}`,\n margin: 'auto',\n position: 'relative',\n // do not override this\n maxWidth: '100%',\n },\n\n title: {\n fontSize: 28,\n lineHeight: 1.3,\n marginTop: 0,\n },\n\n titleWithCloseButton: {\n paddingRight: 32,\n },\n\n close: {\n position: 'absolute',\n },\n\n content: {},\n\n footer: {\n display: 'flex',\n gap: 12,\n },\n\n stickyFooterWrapper: {\n position: 'sticky',\n bottom: 0,\n marginTop: 'auto',\n zIndex: 1,\n },\n\n stickyFooter: {\n borderTop: [1, 'solid', colors.BORDER_LIGHT],\n padding: [16, 40],\n borderBottomLeftRadius: dimensions.BORDER_RADIUS_LARGE,\n borderBottomRightRadius: dimensions.BORDER_RADIUS_LARGE,\n backgroundColor: colors.CLASSIC_WHITE,\n },\n\n 'buttons-left': {\n justifyContent: 'flex-start',\n },\n\n 'buttons-center': {\n justifyContent: 'center',\n },\n\n 'buttons-right': {\n justifyContent: 'flex-end',\n },\n\n withoutFooter: {},\n\n withStickyFooter: {\n display: 'flex',\n flexDirection: 'column',\n\n '& $content': {\n position: 'relative',\n zIndex: 1,\n },\n },\n\n footerWrapper: {},\n\n l: {\n '& $modal': {\n padding: [36, MODAL_HORIZONTAL_PADDING_L],\n fontSize: 16,\n width: 560,\n\n '&$withStickyFooter': {\n paddingBottom: 0,\n },\n },\n\n '& $withoutFooter': {\n paddingBottom: 54,\n },\n\n '& $title': {\n fontSize: 28,\n marginBottom: 32,\n },\n\n '& $close': {\n right: 27,\n top: 22,\n },\n\n '& $footerWrapper': {\n paddingTop: 40,\n },\n\n '& $stickyFooter': {\n paddingLeft: MODAL_HORIZONTAL_PADDING_L,\n paddingRight: MODAL_HORIZONTAL_PADDING_L,\n marginLeft: -MODAL_HORIZONTAL_PADDING_L,\n marginRight: -MODAL_HORIZONTAL_PADDING_L,\n },\n },\n\n m: {\n '& $modal': {\n padding: [32, MODAL_HORIZONTAL_PADDING_M],\n width: 480,\n\n '&$withStickyFooter': {\n paddingBottom: 0,\n },\n },\n\n '& $withoutFooter': {\n paddingBottom: 48,\n },\n\n '& $title': {\n fontSize: 24,\n marginBottom: 28,\n },\n\n '& $close': {\n right: 23,\n top: 18,\n },\n\n '& $footerWrapper': {\n paddingTop: 36,\n },\n\n '& $stickyFooter': {\n paddingLeft: MODAL_HORIZONTAL_PADDING_M,\n paddingRight: MODAL_HORIZONTAL_PADDING_M,\n marginLeft: -MODAL_HORIZONTAL_PADDING_M,\n marginRight: -MODAL_HORIZONTAL_PADDING_M,\n },\n },\n\n s: {\n '& $modal': {\n padding: [24, MODAL_HORIZONTAL_PADDING_S],\n fontSize: 14,\n width: 360,\n\n '&$withStickyFooter': {\n paddingBottom: 0,\n },\n },\n\n '& $withoutFooter': {\n paddingBottom: 40,\n },\n\n '& $title': {\n fontSize: 20,\n marginBottom: 15,\n },\n\n '& $close': {\n right: 14,\n top: 11,\n },\n\n '& $footerWrapper': {\n paddingTop: 28,\n },\n\n '& $stickyFooter': {\n paddingLeft: MODAL_HORIZONTAL_PADDING_S,\n paddingRight: MODAL_HORIZONTAL_PADDING_S,\n marginLeft: -MODAL_HORIZONTAL_PADDING_S,\n marginRight: -MODAL_HORIZONTAL_PADDING_S,\n },\n },\n\n modalWrapper: {\n display: 'flex',\n width: '100%',\n },\n\n // TODO: вынести анимацию ?\n /* ----------- SHOW / HIDE ANIMATION ----------- */\n animationEnd: {\n '& $modal': {\n opacity: 0,\n },\n\n '& $position-center $modal': {\n transform: 'translateY(35px)',\n },\n\n '& $position-right $modal': {\n transform: 'translateX(35px)',\n },\n\n '& $position-left $modal': {\n transform: 'translateX(-35px)',\n },\n\n '& $overlay': {\n opacity: 0,\n },\n },\n\n animationStart: {\n '& $modal': {\n opacity: 1,\n transition: '0.15s ease',\n transitionProperty: 'transform, opacity',\n },\n\n '& $position-center $modal': {\n transform: 'translateY(0)',\n },\n\n '& $position-right $modal': {\n transform: 'translateX(0)',\n },\n\n '& $position-left $modal': {\n transform: 'translateX(0)',\n },\n\n '& $overlay': {\n opacity: 1,\n transition: 'opacity 0.2s ease',\n },\n },\n\n 'modal-enter': { extend: 'animationEnd' },\n 'modal-enter-active': { extend: 'animationStart' },\n 'modal-exit': { extend: 'animationStart' },\n 'modal-exit-active': { extend: 'animationEnd' },\n});\n\nexport const closeButtonStyles: IIconButtonStyles = {\n m: {\n width: MODAL_CLOSE_BUTTON_SIZE,\n height: MODAL_CLOSE_BUTTON_SIZE,\n },\n\n icon: {\n width: MODAL_CLOSE_BUTTON_ICON_SIZE,\n height: MODAL_CLOSE_BUTTON_ICON_SIZE,\n },\n};\n\nexport type IModalStyles = ITweakStyles<typeof useStyles, { tweakCloseButton: IIconButtonStyles }>;\n","import { rgba } from '../../helpers';\nimport { colors, ITweakStyles, createThemedStyles, animations } from '../../theme';\nimport { IListStyles } from '../List';\n\nexport const useStyles = createThemedStyles('MoreMenu', {\n root: {\n position: 'relative',\n },\n\n hasCircle: {},\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n backgroundColor: 'transparent',\n color: colors.FONT_MEDIUM,\n padding: 0,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n\n '&$hasCircle': {\n backgroundColor: rgba(colors.GREY_HOVER, 0.5),\n },\n\n '&:hover': {\n backgroundColor: rgba(colors.BORDER_MAIN, 0.5),\n },\n\n '&:focus': {\n backgroundColor: rgba(colors.FONT_DISABLED, 0.2),\n },\n\n '&:active, &$active': {\n backgroundColor: rgba(colors.FONT_DISABLED, 0.5),\n },\n\n '&$disabled': {\n backgroundColor: rgba(colors.GREY_FOCUS, 0.5),\n color: colors.BORDER_MAIN,\n },\n },\n\n icon: {\n width: 30,\n height: 30,\n },\n\n active: {},\n\n disabled: {\n cursor: 'default',\n },\n\n menu: {\n position: 'absolute',\n zIndex: 5,\n top: '100%',\n right: 0,\n marginTop: 6,\n },\n});\n\nexport type IMoreMenuStyles = ITweakStyles<typeof useStyles, { tweakList: IListStyles }>;\n","import { ITweakStyles, createThemedStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('MultiSelectInput', {\n root: {\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'column',\n height: '100%',\n padding: [0, 12],\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n\n placeholder: {\n fontSize: 16,\n userSelect: 'none',\n },\n\n placeholderSmall: {\n fontSize: 12,\n marginBottom: 2,\n position: 'relative',\n },\n\n values: {\n width: '100%',\n },\n\n value: {\n width: 'calc(100% - 64px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n\n amount: {\n boxSizing: 'border-box',\n position: 'absolute',\n top: 'calc(50% - 11px)',\n right: 44,\n height: 22,\n minWidth: 22,\n fontSize: 14,\n lineHeight: '16px',\n textAlign: 'center',\n padding: [2, 4],\n },\n\n indicator: {\n position: 'absolute',\n top: 0,\n right: 0,\n height: '100%',\n width: 36,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n arrow: {\n width: 20,\n height: 20,\n transition: 'transform .2s ease',\n },\n\n arrowUp: {\n transform: 'rotate(180deg)',\n },\n\n indicatorDisabled: {},\n});\n\nexport type IMultiSelectInputStyles = ITweakStyles<typeof useStyles>;\n","import { ReactElement } from 'react';\nimport clsx from 'clsx';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { useStyles, IMultiSelectInputStyles } from './MultiSelectInput.styles';\n\nexport interface IMultiSelectInputProps<Value>\n extends Pick<ICommonProps<IMultiSelectInputStyles>, 'tweakStyles'> {\n value?: IMultiSelectListValues<Value>;\n isOpen: boolean;\n isDisabled: boolean;\n placeholder: string;\n onToggle: (state: boolean) => void;\n}\n\nexport function MultiSelectInput<Value>({\n value: v,\n isOpen,\n isDisabled = false,\n placeholder = '',\n tweakStyles,\n onToggle,\n}: IMultiSelectInputProps<Value>): ReactElement | null {\n const classes = useStyles({ theme: tweakStyles });\n\n const value = v?.include;\n\n return (\n <div className={classes.root} onClick={() => !isDisabled && onToggle(!isOpen)}>\n {/* Placeholder */}\n {(value === undefined || (value && value.length === 0)) && (\n <div className={classes.placeholder}>{placeholder}</div>\n )}\n {/* Selected options */}\n {value !== undefined && value.length > 0 && (\n <>\n <div className={clsx(classes.placeholder, classes.placeholderSmall)}>{placeholder}</div>\n <div className={classes.values}>\n <div className={classes.value}>{value.join(', ')}</div>\n <div className={classes.amount}>{value.length}</div>\n </div>\n </>\n )}\n {/* Chevron */}\n <div className={clsx(classes.indicator, isDisabled && classes.indicatorDisabled)}>\n <div className={clsx(classes.arrow, isOpen && classes.arrowUp)}>\n <Icon type=\"chevron-down\" />\n </div>\n </div>\n </div>\n );\n}\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { IMultiSelectListStyles } from '../MultiSelectList';\n\nexport const useStyles = createThemedStyles('MultiSelect', {\n root: {\n position: 'relative',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%',\n cursor: 'pointer',\n fontSize: 16,\n },\n\n required: {\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: -12,\n top: '50%',\n transform: 'translate(0, -50%)',\n width: 6,\n height: 6,\n borderRadius: '50%',\n },\n },\n\n disabled: {\n cursor: 'default',\n },\n\n listContainer: {\n position: 'absolute',\n top: 'calc(100% + 4px)',\n left: -1,\n right: -1,\n zIndex: 2,\n },\n\n invalid: {},\n\n open: {},\n\n full: {},\n\n left: {},\n\n right: {},\n});\n\nexport const multiSelectListStyles: IMultiSelectListStyles = {\n root: {\n width: '100%',\n },\n};\n\nexport type IMultiSelectStyles = ITweakStyles<\n typeof useStyles,\n { tweakMultiSelectList: IMultiSelectListStyles }\n>;\n","import { ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Notification', {\n root: {\n display: 'flex',\n },\n\n inline: {\n width: 'fit-content',\n },\n\n icon: {\n width: 20,\n height: 20,\n marginRight: 16,\n flexShrink: 0,\n },\n\n body: {\n flexGrow: 1,\n },\n\n title: {\n display: 'block',\n fontWeight: 'bold',\n },\n\n text: {\n display: 'block',\n },\n\n content: {},\n\n s: {},\n\n m: {},\n\n l: {},\n\n withText: {},\n\n withTitle: {},\n\n error: {},\n\n info: {},\n\n warning: {},\n\n ok: {},\n\n 'not-ok': {},\n\n custom: {},\n});\n\nexport type INotificationStyles = ITweakStyles<typeof useStyles>;\n","import { colors, createThemedStyles, dimensions, helpers, ITweakStyles } from '../../../../theme';\nimport { IInputStyles } from '../../../Input';\n\nconst ROW_HEIGHT = 40;\nconst LIST_PADDING = 10;\n\nexport const useStyles = createThemedStyles('PhoneInputCountryList', {\n root: {\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.CLASSIC_WHITE,\n border: [1, 'solid', colors.BORDER_MAIN],\n boxShadow: '1px 2px 10px rgba(0, 0, 0, 0.25)',\n overflow: 'hidden',\n },\n\n searchContainer: {\n width: '100%',\n height: dimensions.CONTROL.HEIGHT,\n display: 'flex',\n alignItems: 'center',\n boxSizing: 'border-box',\n padding: [0, 8, 0, 16],\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n icon: {\n width: 20,\n height: 20,\n },\n\n searchIcon: {\n extend: 'icon',\n color: colors.FONT_LABEL,\n flexShrink: 0,\n },\n\n flagList: {\n maxHeight: ROW_HEIGHT * 6 + 2 * LIST_PADDING,\n padding: [LIST_PADDING, 0],\n ...helpers.withScrollBar,\n },\n\n listItem: {\n height: ROW_HEIGHT,\n padding: [12, 16],\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n fontSize: 14,\n lineHeight: '20px',\n letterSpacing: 0.15,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n },\n\n selectedCountry: {\n backgroundColor: colors.GREY_BACKGROUND,\n },\n\n activeCountry: {\n backgroundColor: colors.GREY_FOCUS,\n },\n\n flag: {\n width: 22,\n height: 16,\n flexShrink: 0,\n },\n\n countryName: {\n color: colors.FONT_MAIN,\n overflowX: 'hidden',\n textOverflow: 'ellipsis',\n margin: [0, 8, 0, 12],\n },\n\n dialCode: {\n color: colors.GREY_ACTIVE,\n },\n\n emptyResult: {\n color: colors.FONT_LABEL,\n padding: [6, 16],\n },\n});\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n controlWrapper: {\n border: 'none',\n height: 'calc(var(--control-height) - 2px)',\n },\n },\n\n input: {\n fontSize: 14,\n lineHeight: '20px',\n letterSpacing: 0.15,\n },\n};\n\nexport type IPhoneInputCountryListStyles = ITweakStyles<\n typeof useStyles,\n { tweakInput: IInputStyles }\n>;\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport clsx from 'clsx';\nimport { phoneInfo } from '../../../../constants';\nimport {\n checkSearchStringInCountry,\n findCountryIndexByCode,\n getCountryTextByLocale,\n sortCountriesByLocale,\n} from '../../../../helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Flag } from '../../../Flag';\nimport { Icon } from '../../../Icon';\nimport { IChangeInputEvent, Input } from '../../../Input';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport { IPhoneInfo } from '../../types';\nimport {\n inputStyles,\n IPhoneInputCountryListStyles,\n useStyles,\n} from './PhoneInputCountryList.styles';\n\nexport interface IPhoneInputCountryListProps\n extends Pick<ICommonProps<IPhoneInputCountryListStyles>, 'tweakStyles'> {\n selectedCountryCode?: string;\n locale: string;\n placeholder: string;\n noMatchesLabel: string;\n closeList: () => void;\n onChange: (country: IPhoneInfo, event: IChangeInputEvent | KeyboardEvent) => void;\n}\n\nexport const PhoneInputCountryList: FC<IPhoneInputCountryListProps> = ({\n locale,\n placeholder,\n selectedCountryCode,\n closeList,\n noMatchesLabel,\n onChange,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'PhoneInputCountryList',\n });\n\n const sortedCountries = useMemo(() => sortCountriesByLocale(phoneInfo, locale), [locale]);\n\n const selectedCountryIdx = findCountryIndexByCode(selectedCountryCode, sortedCountries);\n\n const [searchValue, setSearchValue] = useState('');\n const [countriesList, setCountriesList] = useState(sortedCountries);\n const [keyCursorOn, setKeyCursorOn] = useState(\n selectedCountryIdx !== -1 ? selectedCountryIdx : 0,\n );\n\n const handleSearchChange = (newSearchValue: string) => {\n const newCountriesList = sortedCountries.filter((country) =>\n checkSearchStringInCountry(country, newSearchValue),\n );\n\n const defaultKeyCursorOn = newCountriesList.length > 0 ? 0 : -1;\n const newSelectedCountryIdx = findCountryIndexByCode(selectedCountryCode, newCountriesList);\n\n setCountriesList(newCountriesList);\n setSearchValue(newSearchValue);\n setKeyCursorOn(newSelectedCountryIdx !== -1 ? newSelectedCountryIdx : defaultKeyCursorOn);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const lastListItemIdx = countriesList.length - 1;\n\n if (event.code === 'Escape' || event.code === 'Tab') {\n closeList();\n }\n\n if (event.code === 'ArrowDown' && lastListItemIdx !== -1) {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n setKeyCursorOn(keyCursorOn < lastListItemIdx ? keyCursorOn + 1 : 0);\n }\n\n if (event.code === 'ArrowUp' && lastListItemIdx !== -1) {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n setKeyCursorOn(keyCursorOn > 0 ? keyCursorOn - 1 : lastListItemIdx);\n }\n\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n if (countriesList.length === 0) {\n closeList();\n } else if (keyCursorOn >= 0) {\n onChange(countriesList[keyCursorOn], event);\n }\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n });\n\n return (\n <div className={classes.root}>\n <div className={classes.searchContainer}>\n <div className={classes.searchIcon}>\n <Icon type=\"search\" />\n </div>\n <Input\n value={searchValue}\n placeholder={placeholder}\n onChange={handleSearchChange}\n tweakStyles={tweakInputStyles}\n isClearable\n shouldFocusOnMount\n />\n </div>\n <div className={classes.flagList}>\n {countriesList.map((country, index) => (\n <ScrollIntoViewIfNeeded\n key={country.countryCode}\n active={keyCursorOn === index}\n options={{ block: 'nearest' }}\n >\n <div\n className={clsx(classes.listItem, {\n [classes.activeCountry]: selectedCountryIdx === index,\n [classes.selectedCountry]: keyCursorOn === index,\n })}\n onMouseEnter={() => setKeyCursorOn(index)}\n onClick={(e) => onChange(country, e)}\n >\n <div className={classes.flag}>\n <Flag countryCode={country.countryCode} />\n </div>\n <div className={classes.countryName}>{getCountryTextByLocale(country, locale)}</div>\n <div className={classes.dialCode}>{`+${country.dialCode}`}</div>\n </div>\n </ScrollIntoViewIfNeeded>\n ))}\n {countriesList.length === 0 && <div className={classes.emptyResult}>{noMatchesLabel}</div>}\n </div>\n </div>\n );\n};\n","import { IPhoneValue } from './types';\n\nexport const DEFAULT_VALUE: IPhoneValue = { phoneNumber: '', dialCode: '' };\n","import { colors, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { IInputStyles } from '../Input';\nimport { IPhoneInputCountryListStyles } from './components';\n\nconst COUNTRY_SELECT_WIDTH = 80;\n\nexport const useStyles = createThemedStyles('PhoneInput', {\n root: {\n width: '100%',\n position: 'relative',\n boxSizing: 'border-box',\n zIndex: 0,\n },\n\n countrySelectContainer: {\n position: 'absolute',\n left: 1,\n top: 1,\n width: COUNTRY_SELECT_WIDTH,\n height: dimensions.CONTROL.HEIGHT - 2,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: ['solid', 1, colors.BORDER_MAIN],\n transition: 'border-color 0.2s ease-in',\n cursor: 'pointer',\n zIndex: dimensions.Z_INDEX.CONTROL_FOCUS + 1,\n },\n\n disabledCountrySelect: {\n cursor: 'default',\n },\n\n flag: {\n width: 22,\n height: 16,\n },\n\n arrow: {\n width: 20,\n color: colors.GREY_ACTIVE,\n marginLeft: 8,\n transition: 'transform .2s ease',\n },\n\n up: {\n transform: 'rotate(180deg)',\n },\n\n invalidArrow: {\n color: colors.RED_WARNING,\n },\n\n focusedBorder: {},\n\n invalidBorder: {\n borderColor: colors.RED_WARNING,\n },\n\n inputContainer: {\n position: 'relative',\n flex: 1,\n },\n\n flagListContainer: {\n position: 'absolute',\n width: '100%',\n top: dimensions.CONTROL.HEIGHT + 6,\n left: -1,\n zIndex: 3,\n },\n});\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n controlWrapper: {\n paddingLeft: COUNTRY_SELECT_WIDTH,\n },\n\n label: {\n marginLeft: COUNTRY_SELECT_WIDTH,\n },\n },\n};\n\nexport type IPhoneInputStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakInput: IInputStyles;\n tweakCountryList: IPhoneInputCountryListStyles;\n }\n>;\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { IRadioButtonSizes } from './types';\n\nexport const useStyles = createThemedStyles('RadioButton', {\n input: {\n appearance: 'none',\n cursor: 'pointer',\n borderRadius: '50%',\n width: 18,\n height: 18,\n outline: 'none',\n transition: '0.1s all ease-in-out',\n margin: 0,\n border: [1, 'solid', '#000'],\n\n '&:checked': {\n border: [5, 'solid', '#000'],\n },\n },\n\n label: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n },\n\n content: {\n marginLeft: 8,\n },\n\n isDisabled: {\n cursor: 'default',\n },\n\n isInvalid: {},\n});\n\nexport type IRadioButtonStyles = ITweakStyles<typeof useStyles, IRadioButtonSizes>;\n","import { CSSProperties } from 'react';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { colors, dimensions, ITweakStyles, createThemedStyles, animations } from '../../theme';\n\nconst SELECTOR_TOTAL_GAP = 4;\nconst SELECTOR_BORDER_WIDTH = 1;\nexport const SELECTOR_GAP = SELECTOR_TOTAL_GAP - SELECTOR_BORDER_WIDTH;\n\nexport const getSelectorLineStyle = (activeElementData?: {\n clientWidth: number;\n offsetLeft: number;\n}): CSSProperties | undefined =>\n isNotEmpty(activeElementData)\n ? {\n width: activeElementData.clientWidth - SELECTOR_GAP * 2,\n transform: `translateX(${activeElementData.offsetLeft}px)`,\n }\n : undefined;\n\nexport const useStyles = createThemedStyles('Selector', {\n root: {\n display: 'flex',\n alignItems: 'center',\n listStyle: 'none',\n position: 'relative',\n },\n\n required: {\n '&::before': {\n top: '50%',\n left: -12,\n width: 6,\n height: 6,\n content: '\"\"',\n position: 'absolute',\n transform: 'translate(0, -50%)',\n borderRadius: '50%',\n backgroundColor: colors.ORANGE_FOCUS,\n },\n },\n\n invalid: {},\n\n optionWrapper: {\n height: '100%',\n },\n\n option: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n appearance: 'none',\n borderRadius: 0,\n padding: 0,\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n },\n\n active: {\n cursor: 'default',\n },\n\n disabled: {\n cursor: 'default',\n\n '& $optionText': {\n color: colors.FONT_LABEL,\n },\n },\n\n optionIcon: {\n width: 20,\n height: 20,\n },\n\n optionText: {},\n\n iconFromRight: {\n '& $option': {\n flexDirection: 'row-reverse',\n },\n },\n\n s: {},\n\n m: {},\n\n l: {},\n\n line: {},\n\n selector: {\n display: 'grid',\n gridAutoFlow: 'column',\n gridAutoColumns: '1fr',\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.BORDER_LIGHT,\n width: 'fit-content',\n position: 'relative',\n border: ['solid', SELECTOR_BORDER_WIDTH, 'transparent'],\n\n '& $line': {\n content: '\"\"',\n position: 'absolute',\n left: SELECTOR_GAP,\n height: `calc(100% - ${SELECTOR_GAP * 2}px)`,\n backgroundColor: colors.CLASSIC_WHITE,\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n transition: animations.defaultTransition,\n transitionProperty: 'transform, width',\n },\n\n '&$invalid': {\n borderColor: colors.RED_WARNING,\n },\n\n '& $option': {\n gap: 6,\n position: 'relative',\n zIndex: 1,\n height: '100%',\n color: colors.FONT_MEDIUM,\n fontSize: 16,\n transition: animations.defaultTransition,\n transitionProperty: 'color',\n background: 'none',\n\n '&$s': {\n padding: [4, 8],\n fontSize: 10,\n lineHeight: '14px',\n },\n\n '&$m': {\n padding: [14, 18],\n },\n\n '&$l': {\n padding: [16, 24],\n },\n\n '&:hover, &:focus': {\n color: colors.FONT_MAIN,\n },\n\n '&$active': {\n color: colors.FONT_MAIN,\n },\n },\n },\n\n autoWidth: {\n '&$selector': {\n gridAutoColumns: 'auto',\n\n '& $line': {\n width: 'unset',\n transform: 'unset',\n },\n },\n },\n});\n\nexport type ISelectorStyles = ITweakStyles<typeof useStyles>;\n","import { ICharactersMap } from './types';\n\nexport const SMART_INPUT_REGEX_MAP = {\n default: /./i,\n agencyName: /^[a-zA-Z\\s0-9-]*$/i,\n surname: /^[a-zA-Z\\s-]*$/i,\n name: /^[a-zA-Z\\s-.`']*$/i,\n surnameRuEn: /^[a-zA-Zа-яА-Я\\s-]*$/i,\n nameRuEn: /^[a-zA-Zа-яА-Я\\s-.`']*$/i,\n email: /^[a-zA-Z0-9@_\\-.+']*$/i,\n digits: /^[0-9]*$/i,\n docNumber: /^[a-zA-Z0-9]*$/i,\n benefitCert: /^[a-zA-Z0-9/]*$/i,\n};\n\nexport const CharactersMap: ICharactersMap = {\n й: 'q',\n ц: 'w',\n у: 'e',\n к: 'r',\n е: 't',\n н: 'y',\n г: 'u',\n ш: 'i',\n щ: 'o',\n з: 'p',\n х: '[',\n ъ: ']',\n ф: 'a',\n ы: 's',\n в: 'd',\n а: 'f',\n п: 'g',\n р: 'h',\n о: 'j',\n л: 'k',\n д: 'l',\n ж: ';',\n э: \"'\",\n я: 'z',\n ч: 'x',\n с: 'c',\n м: 'v',\n и: 'b',\n т: 'n',\n ь: 'm',\n б: ',',\n ю: '.',\n ё: '`',\n};\n\nexport const EmailCharactersMap: ICharactersMap = {\n ...CharactersMap,\n '\"': '@',\n};\n\nexport const TransliterationMap: ICharactersMap = {\n й: 'i',\n ц: 'ts',\n у: 'u',\n к: 'k',\n е: 'e',\n н: 'n',\n г: 'g',\n ш: 'sh',\n щ: 'shch',\n з: 'z',\n х: 'h',\n ъ: 'ie',\n ф: 'f',\n ы: 'y',\n в: 'v',\n а: 'a',\n п: 'p',\n р: 'r',\n о: 'o',\n л: 'l',\n д: 'd',\n ж: 'zh',\n э: 'e',\n я: 'ia',\n ч: 'ch',\n с: 's',\n м: 'm',\n и: 'i',\n т: 't',\n ь: '',\n б: 'b',\n ю: 'iu',\n ё: 'e',\n};\n","import { ICharactersMap } from './types';\n\nexport const mapSymbols = (\n str: string,\n regex: RegExp,\n charactersMap: ICharactersMap,\n isTransliterationEnabled: boolean,\n): string =>\n str\n .split('')\n .map((symbol) => {\n if (regex.test(symbol)) {\n return symbol;\n }\n if (!isTransliterationEnabled) {\n return '';\n }\n\n const mappedSymbol = charactersMap[symbol.toLowerCase()] ?? symbol;\n\n const isUpperCase = symbol.toUpperCase() === symbol;\n const result = isUpperCase ? mappedSymbol.toUpperCase() : mappedSymbol;\n\n return regex.test(result) ? result : '';\n })\n .join('');\n","import { ClipboardEvent, forwardRef, useRef } from 'react';\nimport { isEmpty, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useMergedRefs } from '../../hooks';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport {\n CharactersMap,\n EmailCharactersMap,\n SMART_INPUT_REGEX_MAP,\n TransliterationMap,\n} from './constants';\nimport { mapSymbols } from './helpers';\nimport { IInputRawValue, ISmartType } from './types';\n\nexport interface ISmartInputProps extends Omit<IInputProps, 'onChange'> {\n /** @default 'default' */\n smartType?: ISmartType;\n regExp?: RegExp;\n /** @default false */\n isUpperCase?: boolean;\n /** @default true */\n isTransliterationEnabled?: boolean;\n onChange: (\n value: string,\n rawValue: IInputRawValue,\n event?: IChangeInputEvent | ClipboardEvent<HTMLInputElement>,\n ) => void;\n}\n\nexport const SmartInput = forwardRef<HTMLInputElement, ISmartInputProps>(function SmartInput(\n {\n value = '',\n smartType = 'default',\n regExp,\n maxLength,\n isUpperCase = false,\n isTransliterationEnabled = true,\n onChange,\n ...rest\n },\n ref,\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMergedRefs([ref, inputRef]);\n\n const regex = regExp || SMART_INPUT_REGEX_MAP[smartType];\n\n const getUpperCaseIfNeeded = (str: string) => (isUpperCase ? str.toUpperCase() : str);\n\n const updateCaretPosition = (position: number | null, newValue: string) => {\n const input = inputRef.current;\n if (isNotEmpty(input) && input.type !== 'email') {\n // Нужно для того, чтобы после ререндера позиция каретки не сбросилась\n input.value = newValue;\n input.setSelectionRange(position, position);\n }\n };\n\n const handleChange = async (str: string, event: IChangeInputEvent) => {\n const isValid = regex.test(str);\n\n const charactersMap = smartType === 'email' ? EmailCharactersMap : CharactersMap;\n const newValue = getUpperCaseIfNeeded(\n isValid ? str : mapSymbols(str, regex, charactersMap, isTransliterationEnabled),\n );\n\n onChange(newValue, { rawValue: str, isValid }, event);\n\n const input = inputRef.current;\n if (isNotEmpty(input)) {\n const start = input.selectionStart;\n updateCaretPosition(isEmpty(start) || newValue !== value ? start : start - 1, newValue);\n }\n };\n\n const handlePaste = async (event: ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n\n const str = event.clipboardData.getData('text/plain').split('').join('');\n\n const input = event.currentTarget;\n const selectionStart = input.selectionStart ?? 0;\n const selectionEnd = input.selectionEnd ?? 0;\n\n const isValid = regex.test(str);\n\n let mappedValue = isValid\n ? str\n : mapSymbols(str, regex, TransliterationMap, isTransliterationEnabled);\n\n const newValueLength = mappedValue.length + value.length - (selectionEnd - selectionStart);\n\n if (isNotEmpty(maxLength) && maxLength >= 0 && newValueLength > maxLength) {\n mappedValue = mappedValue.substring(0, mappedValue.length - (newValueLength - maxLength));\n }\n\n const newValue = getUpperCaseIfNeeded(\n `${value.substring(0, selectionStart)}${mappedValue}${value.substring(selectionEnd)}`,\n );\n\n onChange(newValue, { rawValue: str, isValid }, event);\n updateCaretPosition(selectionStart + mappedValue.length, newValue);\n };\n\n return (\n <Input\n {...rest}\n ref={mergedRef}\n value={value}\n maxLength={maxLength}\n onPaste={handlePaste}\n onChange={handleChange}\n />\n );\n});\n","import { colors, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IStatusColors } from './types';\n\nexport const useStyles = createThemedStyles('Status', {\n root: {\n display: 'inline-flex',\n verticalAlign: 'middle',\n color: 'var(--status-color)',\n backgroundColor: 'var(--status-background)',\n width: 'max-content',\n alignItems: 'center',\n\n '& > *': {\n flexShrink: 0,\n },\n },\n\n icon: {\n '& > div': {\n display: 'inline-block',\n },\n },\n\n iconLeft: {\n order: -1,\n },\n\n text: {},\n\n badge: {\n color: colors.CLASSIC_WHITE,\n backgroundColor: 'var(--status-color)',\n },\n\n xs: {\n padding: [2, 4],\n gap: 4,\n borderRadius: 2,\n\n fontSize: 12,\n lineHeight: '16px',\n letterSpacing: 0.24,\n fontWeight: 'bold',\n\n '& $icon': {\n width: 16,\n height: 16,\n },\n\n '& $badge': {\n padding: [0, 2],\n marginRight: -1,\n borderRadius: 4,\n },\n },\n\n s: {\n padding: [3, 8, 5, 8],\n gap: 4,\n borderRadius: 6,\n\n fontSize: 13,\n lineHeight: '16px',\n letterSpacing: 0.2,\n fontWeight: 'bold',\n\n '& $text': {},\n\n '& $icon': {\n width: 16,\n height: 16,\n },\n\n '& $badge': {\n padding: [0, 4, 2, 4],\n margin: [0, -4, -2, 0],\n borderRadius: 4,\n },\n },\n\n m: {\n padding: [7, 12],\n gap: 4,\n borderRadius: 6,\n\n fontSize: 15,\n lineHeight: '18px',\n letterSpacing: 0.15,\n fontWeight: 'bold',\n\n '& $text': {},\n\n '& $icon': {\n width: 18,\n height: 18,\n },\n\n '& $badge': {\n padding: [2, 4],\n margin: [-2, -7, -2, 0],\n borderRadius: 4,\n },\n },\n\n custom: {},\n});\n\nexport type IStatusStyles = ITweakStyles<typeof useStyles, IStatusColors>;\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\nimport { ISwitchSizes } from './types';\n\nexport const useStyles = createThemedStyles('Switch', {\n root: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n\n '--switch-width': '36px',\n '--switch-height': '20px',\n '--switch-toggle-width': '16px',\n '--switch-toggle-height': '16px',\n '--switch-toggle-padding': 'calc((var(--switch-height) - var(--switch-toggle-height)) / 2)',\n '--switch-label-gap': '12px',\n },\n\n primary: {},\n\n secondary: {},\n\n invalid: {},\n\n disabled: {\n pointerEvents: 'none',\n cursor: 'default',\n },\n\n checked: {\n '& $switch::before': {\n left: 'calc(var(--switch-width) - var(--switch-toggle-width) - var(--switch-toggle-padding))',\n },\n },\n\n switch: {\n position: 'relative',\n flexShrink: 0,\n display: 'block',\n width: 'var(--switch-width)',\n height: 'var(--switch-height)',\n borderRadius: 'calc(infinity * 1px)',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'opacity, background-color',\n backgroundColor: '#333',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 'var(--switch-toggle-padding)',\n left: 'var(--switch-toggle-padding)',\n width: 'var(--switch-toggle-width)',\n height: 'var(--switch-toggle-height)',\n right: 'auto',\n display: 'block',\n backgroundColor: '#fff',\n borderRadius: 'calc(infinity * 1px)',\n zIndex: 1,\n transition: animations.defaultTransition,\n transitionProperty: 'left, background-color',\n },\n },\n\n input: {\n display: 'none',\n },\n\n label: {\n transition: animations.defaultTransition,\n transitionProperty: 'opacity, color',\n },\n\n labelLeft: {\n order: -1,\n marginRight: 'var(--switch-label-gap)',\n },\n\n labelRight: {\n marginLeft: 'var(--switch-label-gap)',\n },\n});\n\nexport type ISwitchStyles = ITweakStyles<typeof useStyles, ISwitchSizes>;\n","import { animations, createThemedStyles, helpers, ITweakStyles } from '../../theme';\nimport { IWithPrefix } from '../../types';\nimport { IControlWrapperSizes, IControlWrapperStyles } from '../ControlWrapper';\nimport { IWithMessagesStyles } from '../WithMessages';\nimport { ITextAreaCounterPositions } from './types';\n\nexport const useStyles = createThemedStyles('TextArea', {\n root: {\n width: '100%',\n },\n\n textarea: {\n ...helpers.withScrollBar,\n width: '100%',\n height: '100%',\n fontFamily: 'inherit',\n fontSize: 16,\n padding: [14, 0, 8, 'var(--control-padding)'],\n scrollPadding: '14px 0 8px var(--control-padding)',\n scrollbarGutter: 'stable',\n boxSizing: 'border-box',\n outline: 'none',\n outlineStyle: 'none',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n border: 'none',\n resize: 'none',\n background: 'transparent',\n\n '&::placeholder': {\n opacity: 1,\n },\n\n MozAppearance: 'textfield',\n '&::-webkit-inner-spin-button,&::-webkit-outer-spin-button': {\n WebkitAppearance: 'none',\n margin: 0,\n },\n },\n\n wrapper: {\n width: '100%',\n },\n\n autoSized: {\n display: 'grid',\n gridTemplateRows: 'minmax(0, 100%)',\n\n '& > $textarea, &::after': {\n gridArea: '1 / 1',\n },\n\n '&::after': {\n extend: 'textarea',\n content: 'attr(data-value) \" \"', // Без пробела ломается!\n overflowWrap: 'break-word',\n whiteSpace: 'pre-wrap',\n visibility: 'hidden',\n },\n },\n\n symbolsCount: {\n textAlign: 'right',\n marginTop: 4,\n fontSize: 12,\n marginLeft: 'auto',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n },\n\n symbolsCountError: {\n color: 'red',\n },\n\n symbolsCountActive: {},\n\n 'counter-default': {},\n\n withLabel: {},\n});\n\nexport type ITextAreaStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakWithMessages: IWithMessagesStyles;\n tweakControlWrapper: IControlWrapperStyles;\n } & IWithPrefix<ITextAreaCounterPositions, 'counter-'> &\n IControlWrapperSizes\n>;\n","import {\n ChangeEvent,\n CSSProperties,\n FocusEvent,\n FormEvent,\n forwardRef,\n TextareaHTMLAttributes,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isArrayLikeNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ControlWrapper, IControlWrapperProps } from '../ControlWrapper';\nimport { IWithMessagesProps, WithMessages } from '../WithMessages';\nimport { ITextAreaCounterPosition } from './types';\nimport { ITextAreaStyles, useStyles } from './TextArea.styles';\n\nexport interface ITextAreaProps\n extends ICommonProps<ITextAreaStyles>,\n Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'>,\n Pick<\n IControlWrapperProps,\n 'label' | 'isInvalid' | 'isRequired' | 'isDisabled' | 'size' | 'groupPlacement'\n >,\n Pick<IWithMessagesProps, 'infoMessage' | 'errorMessage'> {\n value?: string;\n placeholder?: string;\n counterPosition?: ITextAreaCounterPosition;\n /** @default false */\n isActive?: boolean;\n /**\n * Должна ли высота и ширина textarea подстраиваться под содержимое\n * @default true\n */\n isAutoSized?: boolean;\n /** @default false */\n shouldFocusOnMount?: boolean;\n /** @default true */\n hasCounter?: boolean;\n /** @default false */\n shouldTrimAfterMaxLength?: boolean;\n /** @default false */\n shouldAlwaysShowPlaceholder?: boolean;\n onChange: (value: string, event?: FormEvent<HTMLTextAreaElement>) => void;\n}\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(function TextArea(\n {\n value = '',\n placeholder,\n name,\n counterPosition = 'default',\n shouldFocusOnMount,\n hasCounter = true,\n shouldTrimAfterMaxLength,\n isAutoSized = true,\n shouldAlwaysShowPlaceholder,\n isActive,\n maxLength,\n rows,\n data,\n testId,\n tweakStyles,\n onChange,\n onPaste,\n onFocus,\n onBlur,\n // Пропсы WithMessages\n infoMessage,\n errorMessage,\n // Пропсы ControlWrapper\n label,\n isDisabled,\n isInvalid,\n isRequired,\n size,\n groupPlacement,\n ...textAreaProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const shouldShowCounter = hasCounter && isNotEmpty(maxLength);\n const counterString = `${value.length} / ${maxLength}`;\n\n const tweakWithMessagesStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithMessages',\n currentComponentName: 'TextArea',\n });\n\n const tweakControlWrapperStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakControlWrapper',\n currentComponentName: 'TextArea',\n });\n\n const [isFocused, setFocused] = useState(false);\n\n const hasFocus = isFocused || isActive;\n const hasValue = isArrayLikeNotEmpty(value);\n const hasLabel = isReactNodeNotEmpty(label);\n const hasPlaceholder =\n (!hasLabel || hasFocus || shouldAlwaysShowPlaceholder) && isStringNotEmpty(placeholder);\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n onChange(event.currentTarget.value, event);\n };\n\n const handleFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n return (\n <div\n className={clsx(classes.root, isNotEmpty(size) && classes[size])}\n style={{ '--counter-length': counterString.length } as CSSProperties}\n >\n <WithMessages\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n tweakStyles={tweakWithMessagesStyles}\n testId={getTestId(testId, 'wrapper')}\n >\n <ControlWrapper\n label={label}\n tweakStyles={tweakControlWrapperStyles}\n isFocused={hasFocus}\n isDisabled={isDisabled}\n hasValue={hasValue}\n isInvalid={isInvalid}\n isRequired={isRequired}\n groupPlacement={groupPlacement}\n size={size}\n isFullWidth\n >\n <div\n className={clsx(classes.wrapper, {\n [classes.autoSized]: isAutoSized,\n [classes.withLabel]: hasLabel,\n })}\n // Не менять на addDataAttributes\n {...(isAutoSized && { 'data-value': value })}\n >\n <textarea\n ref={ref}\n className={classes.textarea}\n value={value}\n disabled={isDisabled}\n placeholder={hasPlaceholder ? placeholder : undefined}\n maxLength={shouldTrimAfterMaxLength ? maxLength : undefined}\n name={name}\n rows={rows}\n onPaste={onPaste}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n autoFocus={shouldFocusOnMount}\n {...addDataAttributes(data, testId)}\n {...textAreaProps}\n />\n {shouldShowCounter && (\n <span\n className={clsx(classes.symbolsCount, classes[`counter-${counterPosition}`], {\n [classes.symbolsCountError]: value.length > maxLength,\n [classes.symbolsCountActive]: hasFocus || hasValue,\n })}\n {...addDataAttributes({ counterPosition })}\n >\n {counterString}\n </span>\n )}\n </div>\n </ControlWrapper>\n </WithMessages>\n </div>\n );\n});\n","import { animations, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\n\nexport const useStyles = createThemedStyles('TextButton', {\n root: {\n display: 'flex',\n alignItems: 'center',\n height: 24,\n padding: 0,\n position: 'relative',\n background: 'transparent',\n border: 'none',\n borderRadius: 0,\n cursor: 'pointer',\n outline: 'none',\n transition: animations.defaultTransition,\n transitionProperty: 'color',\n\n '&[disabled]': {\n cursor: 'default',\n pointerEvents: 'none',\n },\n },\n\n xl: {\n fontSize: 16,\n\n '& $content': {\n gap: 14,\n },\n },\n\n l: {\n fontSize: 14,\n letterSpacing: '0.15px',\n\n '& $content': {\n gap: 10,\n\n '&$reverseContent': {\n gap: 6,\n },\n },\n },\n\n primary: {},\n\n secondary: {},\n\n custom: {},\n\n active: {},\n\n disabled: {},\n\n bold: {\n fontWeight: 'bold',\n },\n\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n circle: {\n width: 24,\n height: 24,\n borderRadius: '50%',\n transition: animations.defaultTransition,\n transitionProperty: ['background', 'color'],\n },\n\n icon: {\n width: 20,\n height: 20,\n },\n\n content: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n },\n\n reverseContent: {\n flexDirection: 'row-reverse',\n },\n\n loader: {\n display: 'none',\n height: 8,\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n\n loading: {\n '& $content': {\n visibility: 'hidden',\n },\n\n '& $loader': {\n display: 'block',\n },\n },\n});\n\nexport const preloaderStyles: IThemedPreloaderStyles = {\n tweakDotsPreloader: {\n fadedDot: {\n width: 6,\n height: 6,\n },\n },\n\n logo: {\n width: 24,\n height: 24,\n },\n\n default: {\n width: 24,\n height: 24,\n },\n};\n\nexport type ITextButtonStyles = ITweakStyles<\n typeof useStyles,\n { tweakPreloader: IThemedPreloaderStyles }\n>;\n","import { forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IThemedPreloaderProps, ThemedPreloader } from '../ThemedPreloader';\nimport { ITextButtonHTMLBaseProps, ITextButtonSize, ITextButtonView } from './types';\nimport { useStyles, ITextButtonStyles, preloaderStyles } from './TextButton.styles';\n\nexport interface ITextButtonProps\n extends ICommonProps<ITextButtonStyles>,\n ITextButtonHTMLBaseProps {\n /** @default 'undefined' */\n children?: ReactNode;\n /** @default 'undefined' */\n icon?: IIcon;\n /** @default 'primary' */\n view?: ITextButtonView;\n /** @default false */\n isBold?: boolean;\n /** @default false */\n hasCircleUnderIcon?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default 'l' */\n size?: ITextButtonSize;\n /** @default 'left' */\n iconPosition?: 'left' | 'right';\n /** @default 'dots' */\n preloaderType?: IThemedPreloaderProps['type'];\n}\n\nexport const TextButton = forwardRef<HTMLButtonElement, ITextButtonProps>(function TextButton(\n {\n children,\n icon,\n view = 'primary',\n isDisabled = false,\n isBold = false,\n isLoading = false,\n isActive = false,\n hasCircleUnderIcon = false,\n size = 'l',\n iconPosition = 'left',\n preloaderType = 'dots',\n type = 'button',\n testId,\n tweakStyles,\n data,\n onClick,\n ...restProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakPreloaderStyles = useTweakStyles({\n innerStyles: preloaderStyles,\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'TextButton',\n });\n\n const hasNoAction = isDisabled || isLoading;\n\n return (\n <button\n ref={ref}\n type={type}\n className={clsx(classes.root, classes[size], classes[view], {\n [classes.bold]: isBold,\n [classes.loading]: isLoading,\n [classes.active]: isActive,\n [classes.disabled]: isDisabled,\n })}\n disabled={hasNoAction}\n onClick={!hasNoAction ? onClick : undefined}\n {...restProps}\n {...addDataAttributes(data, testId)}\n >\n <span className={clsx(classes.content, iconPosition === 'right' && classes.reverseContent)}>\n {isReactNodeNotEmpty(icon) && (\n <span className={clsx(classes.iconContainer, hasCircleUnderIcon && classes.circle)}>\n <span className={classes.icon}>{renderIcon(icon)}</span>\n </span>\n )}\n {children}\n </span>\n\n {isLoading && (\n <span className={classes.loader}>\n <ThemedPreloader\n type={preloaderType}\n useCurrentColor\n tweakStyles={tweakPreloaderStyles}\n />\n </span>\n )}\n </button>\n );\n});\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('TextWithInfo', {\n root: {\n display: 'inline-block',\n height: 40,\n padding: [0, 18],\n borderRadius: 20,\n boxSizing: 'border-box',\n color: colors.FONT_MEDIUM,\n\n '&:hover': {\n backgroundColor: colors.GREY_FOCUS,\n },\n },\n\n container: {\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n },\n\n selected: {\n backgroundColor: colors.GREY_FOCUS,\n },\n\n text: {\n cursor: 'pointer',\n fontSize: 16,\n },\n\n info: {\n width: 20,\n marginLeft: 4,\n color: colors.FONT_DISABLED,\n cursor: 'pointer',\n borderRadius: '50%',\n\n '&:link': {\n color: colors.FONT_DISABLED,\n },\n\n '&:hover': {\n color: colors.CLASSIC_WHITE,\n backgroundColor: colors.FONT_DISABLED,\n },\n\n '&:visited': {\n color: colors.FONT_DISABLED,\n\n '&:hover': {\n color: colors.CLASSIC_WHITE,\n backgroundColor: colors.FONT_DISABLED,\n },\n },\n },\n});\n\nexport type ITextWithInfoStyles = ITweakStyles<typeof useStyles>;\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\nimport { IIconButtonStyles } from '../IconButton';\n\nexport const useStyles = createThemedStyles('Toaster', {\n root: {\n borderRadius: 8,\n position: 'relative',\n background: colors.CLASSIC_WHITE,\n padding: [20, 40, 20, 20],\n display: 'flex',\n },\n\n iconContainer: {\n width: 20,\n height: 20,\n flexShrink: 0,\n marginRight: 16,\n },\n\n error: {\n color: colors.RED_WARNING,\n },\n\n info: {},\n\n warning: {\n color: colors.ORANGE_FOCUS,\n },\n\n ok: {\n color: colors.GREEN_FOCUS,\n },\n\n 'not-ok': {\n color: colors.FONT_LABEL,\n },\n\n text: {},\n\n title: {},\n\n content: {\n '&:not(:first-child):not(:empty)': {\n marginTop: 16,\n },\n },\n\n close: {\n position: 'absolute',\n top: 12,\n right: 12,\n width: 32,\n height: 32,\n },\n});\n\nexport type IToasterStyles = ITweakStyles<\n typeof useStyles,\n { tweakCloseButton: IIconButtonStyles }\n>;\n","import { colors, ITweakStyles, createThemedStyles, animations } from '../../theme';\nimport { IListStyles } from '../List';\nimport { IWithPopupStyles } from '../WithPopup';\n\nexport const useStyles = createThemedStyles('NewMoreMenu', {\n hasCircle: {},\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n backgroundColor: 'transparent',\n color: colors.FONT_MEDIUM,\n padding: 0,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n },\n\n icon: {\n width: 30,\n height: 30,\n },\n\n active: {},\n\n disabled: {\n cursor: 'default',\n },\n});\n\nexport type INewMoreMenuStyles = ITweakStyles<\n typeof useStyles,\n { tweakList: IListStyles; tweakWithPopup: IWithPopupStyles }\n>;\n","import { ITooltipStyles } from '../Tooltip';\nimport { IWithPopupStyles } from '../WithPopup';\n\nexport const withPopupStyles: IWithPopupStyles = {\n popup: {\n zIndex: 9999,\n },\n};\n\nexport interface IWithTooltipStyles {\n tweakWithPopup?: IWithPopupStyles;\n tweakTooltip?: ITooltipStyles;\n}\n","import { FC, ReactNode, useRef, useState, MouseEvent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { IListProps, List } from '../List';\nimport { ANIMATION_TIMEOUT } from './constants';\nimport { useStyles, IAccountInfoStyles } from './AccountInfo.styles';\n\nexport interface IAccountInfoProps extends ICommonProps<IAccountInfoStyles> {\n /** @default `<Icon type='avatar' />` */\n avatar?: ReactNode;\n accountName: ReactNode;\n options: IListProps['items'];\n}\n\nexport const AccountInfo: FC<IAccountInfoProps> = ({\n data,\n testId,\n avatar,\n tweakStyles,\n accountName,\n options,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakList',\n currentComponentName: 'AccountInfo',\n });\n\n const nameRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const toggleMenu = (event: MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n setIsMenuOpen((v) => !v);\n };\n\n useOnClickOutsideWithRef(dropdownRef, () => setIsMenuOpen(false), nameRef);\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {avatar ?? (\n <div className={classes.avatarIcon}>\n <Icon type=\"avatar\" />\n </div>\n )}\n <div ref={nameRef} className={classes.account} onClick={toggleMenu}>\n <div className={clsx(classes.accountName, isMenuOpen && classes.accountNameOpened)}>\n {accountName}\n </div>\n <div className={clsx(classes.accountChevron, isMenuOpen && classes.accountChevronOpened)}>\n <Icon type=\"chevron-down-small\" />\n </div>\n <CSSTransition\n in={isMenuOpen}\n timeout={ANIMATION_TIMEOUT}\n unmountOnExit\n classNames={{\n enter: classes['slide-up-enter'],\n enterActive: classes['slide-up-enter-active'],\n exit: classes['slide-up-exit'],\n exitActive: classes['slide-up-exit-active'],\n }}\n >\n <div ref={dropdownRef} className={classes.accountMenu} onClick={toggleMenu}>\n <List items={options} tweakStyles={tweakListStyles} />\n </div>\n </CSSTransition>\n </div>\n </div>\n );\n};\n","export const ANIMATION_TIMEOUT = 150; // такой же тайминг должен быть в стилях анимации\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { useStyles, IAddButtonStyles } from './AddButton.styles';\n\nexport interface IAddButtonProps extends ICommonProps<IAddButtonStyles> {\n text: string;\n /** @default 'button' */\n type?: 'submit' | 'button';\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isFullWidth?: boolean;\n onClick?: () => void | Promise<void>;\n}\n\n/** @deprecated Весьма сомнительный компонент */\nexport const AddButton: FC<IAddButtonProps> = ({\n text,\n type = 'button',\n isDisabled = false,\n onClick,\n isFullWidth = false,\n data,\n testId,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <button\n type={type}\n className={clsx(\n classes.root,\n isDisabled && classes.disabled,\n isFullWidth && classes.fullWidth,\n )}\n onClick={!isDisabled ? onClick : undefined}\n disabled={isDisabled}\n {...addDataAttributes(data, testId)}\n >\n <div className={classes.icon}>\n <Icon type=\"plus\" />\n </div>\n <div>{text}</div>\n </button>\n );\n};\n","import { FC } from 'react';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { ICloseButtonStyles, useStyles } from './CloseButton.styles';\n\nexport interface ICloseButtonProps extends ICommonProps<ICloseButtonStyles> {\n /** @default 'close' */\n icon?: 'close' | 'close-large' | 'close-window';\n onClose?: () => void;\n}\n\n/** @deprecated */\nexport const CloseButton: FC<ICloseButtonProps> = ({\n tweakStyles,\n testId,\n data,\n icon = 'close',\n onClose,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <button\n type=\"button\"\n className={classes.root}\n onClick={onClose}\n {...addDataAttributes(data, testId)}\n >\n <Icon type={icon} />\n </button>\n );\n};\n","import { FC } from 'react';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { useStyles, ICssBaselineStyles } from './CssBaseline.styles';\n\nexport type ICssBaselineProps = ICommonProps<ICssBaselineStyles>;\n\nexport const CssBaseline: FC<ICssBaselineProps> = ({ data, testId, tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return <div className={classes.root} {...addDataAttributes(data, testId)} />;\n};\n","export const DOC_ACTIONS_VIEWS = ['neutral', 'inverse'] as const;\n","import { FC, useState } from 'react';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { LINK_REGEXP } from './constants';\nimport { useStyles, IDescriptionStyles } from './Description.styles';\n\nexport interface IDescriptionProps extends ICommonProps<IDescriptionStyles> {\n text: string;\n moreTitle?: string;\n lessTitle?: string;\n /** @default 150 */\n truncateIndex?: number;\n /** @default true */\n isAlwaysOpen?: boolean;\n}\n\nexport const Description: FC<IDescriptionProps> = ({\n text,\n moreTitle,\n lessTitle,\n truncateIndex = 150,\n isAlwaysOpen = true,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const isTooShort = text.length < truncateIndex;\n const [isOpen, setIsOpen] = useState(isAlwaysOpen);\n const link = text.match(LINK_REGEXP);\n const linkText = link && link[0];\n const textWithNoLink = text.replace(LINK_REGEXP, '');\n\n const shortText = text.slice(0, text.slice(0, truncateIndex).lastIndexOf(' '));\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isAlwaysOpen || isOpen || isTooShort ? (\n <div>\n <span>{textWithNoLink} </span>\n {!!linkText && (\n <a className={classes.link} href={linkText} target=\"_blank\" rel=\"noopener noreferrer\">\n {linkText}\n </a>\n )}\n </div>\n ) : (\n <div>\n <span>{shortText}</span>\n </div>\n )}\n {isAlwaysOpen || isTooShort ? undefined : (\n <div className={classes.button} onClick={() => setIsOpen(!isOpen)}>\n {isOpen ? lessTitle : moreTitle}\n </div>\n )}\n </div>\n );\n};\n","import { FC, MouseEvent, KeyboardEvent, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { filesize } from 'filesize';\nimport {\n addClickHandler,\n addDataAttributes,\n isFunction,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport { TextWithTooltip } from '../TextWithTooltip';\nimport { IThemedPreloaderProps, ThemedPreloader } from '../ThemedPreloader';\nimport { getFileIcon } from './helpers';\nimport { IFileInfo, IFileItemSize } from './types';\nimport { IFileItemStyles, themedPreloaderStyles, useStyles } from './FileItem.styles';\n\nexport interface IFileItemProps extends ICommonProps<IFileItemStyles> {\n fileInfo: IFileInfo;\n icon?: IIcon;\n /** @default trash-can */\n removeIcon?: IIcon;\n metadata?: ReactNode;\n actions?: ReactNode;\n error?: ReactNode;\n info?: ReactNode;\n /** @default m */\n itemSize?: IFileItemSize;\n /** @default default */\n preloaderType?: IThemedPreloaderProps['type'];\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n areActionsDisabled?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n shouldShowSize?: boolean;\n onClick?: (event: MouseEvent | KeyboardEvent) => void;\n onRemove?: (event: MouseEvent | KeyboardEvent) => void;\n}\n\nexport const FileItem: FC<IFileItemProps> = ({\n fileInfo,\n icon = getFileIcon(fileInfo),\n metadata,\n actions,\n error,\n info,\n isDisabled = false,\n areActionsDisabled = false,\n isLoading = false,\n shouldShowSize = false,\n itemSize = 'm',\n preloaderType = 'default',\n removeIcon = 'trash-can',\n onRemove,\n onClick,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakIconButtonStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakRemoveIconButton',\n currentComponentName: 'FileItem',\n });\n\n const tweakPreloaderStyles = useTweakStyles({\n innerStyles: themedPreloaderStyles,\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'FileItem',\n });\n\n const tweakTooltipStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTooltip',\n currentComponentName: 'FileItem',\n });\n\n const handleClick = (event: MouseEvent | KeyboardEvent) => {\n event.stopPropagation();\n onClick?.(event);\n };\n\n const handleRemove = (event: MouseEvent | KeyboardEvent) => {\n event.stopPropagation();\n onRemove?.(event);\n };\n\n const { name, size } = fileInfo;\n const hasRemoveButton = isFunction(onRemove);\n\n return (\n <div className={classes.root}>\n <div\n className={clsx(classes.fileItemWrapper, classes[itemSize], {\n [classes.disabled]: isDisabled,\n })}\n {...addDataAttributes(data, testId)}\n {...addClickHandler(handleClick, !isDisabled)}\n >\n <div className={classes.fileIcon}>{renderIcon(icon)}</div>\n\n <div className={classes.fileNameContainer}>\n <TextWithTooltip tooltipText={name} tooltipView=\"hint\" tweakStyles={tweakTooltipStyles}>\n <div className={classes.fileName}>{name}</div>\n </TextWithTooltip>\n\n <div className={classes.metadata}>\n {metadata}\n {shouldShowSize && isNotEmpty(size) && (\n <div className={classes.fileSize}>{filesize(size)}</div>\n )}\n </div>\n </div>\n\n <div className={classes.actions}>\n {isLoading ? (\n <div className={clsx(classes.preloader, classes[`preloader-${preloaderType}`])}>\n <ThemedPreloader\n type={preloaderType}\n tweakStyles={tweakPreloaderStyles}\n useCurrentColor\n />\n </div>\n ) : (\n hasRemoveButton && (\n <IconButton\n icon={removeIcon}\n onClick={handleRemove}\n isDisabled={areActionsDisabled}\n tweakStyles={tweakIconButtonStyles}\n />\n )\n )}\n\n {actions}\n </div>\n </div>\n\n <div className={classes.footer}>\n {isReactNodeNotEmpty(error) && <div className={classes.error}>{error}</div>}\n\n {isReactNodeNotEmpty(info) && <div className={classes.info}>{info}</div>}\n </div>\n </div>\n );\n};\n","import { useMemo } from 'react';\nimport {\n addDataAttributes,\n addDataTestId,\n getTestId,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Button } from '../Button';\nimport { IIcon, renderIcon } from '../Icon';\nimport { FilterWrapper, IFiltersPaneSearchProps, FiltersPaneSearch } from './components';\nimport { getLocale } from './helpers';\nimport { ConfigType, IFilterLocaleKey, IPartialFilterLocale } from './types';\nimport { useStyles, IFiltersPaneStyles, clearButtonStyles } from './FiltersPane.styles';\n\nexport interface IFiltersPaneProps<Values extends Record<string, unknown>, Content = Values>\n extends ICommonProps<IFiltersPaneStyles> {\n filtersConfig: ConfigType<Values>;\n enabledFilters?: Array<keyof ConfigType<Values>>;\n /** @default {} */\n values?: Partial<Values>;\n search?: IFiltersPaneSearchProps<keyof Content>;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n hasClearButton?: boolean;\n /** @default false */\n shouldRenderDataId?: boolean;\n /** @default 'filter' */\n settingsIcon?: IIcon;\n onChangeFilters: (values: Partial<Values>) => void;\n onSettingsButtonClick?: () => void;\n onClear?: () => void;\n}\n\nexport function FiltersPane<Values extends Record<string, unknown>, Content = Values>({\n data,\n tweakStyles,\n filtersConfig,\n enabledFilters,\n values = {} as Values,\n localeKey,\n locale,\n search,\n isDisabled = false,\n hasClearButton = true,\n shouldRenderDataId = false,\n settingsIcon = 'filter',\n testId,\n onChangeFilters,\n onSettingsButtonClick,\n onClear,\n}: IFiltersPaneProps<Values, Content>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FiltersPane',\n });\n\n const tweakFilterWrapperStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakFilterWrapper',\n currentComponentName: 'FiltersPane',\n });\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const filtersKeys = enabledFilters ?? Object.keys(filtersConfig);\n\n const handleClear = () => {\n if (isNotEmpty(onClear)) {\n onClear();\n return;\n }\n onChangeFilters({});\n if (search !== undefined) {\n search.onChange({});\n }\n };\n\n const shouldShowClearButton =\n hasClearButton &&\n (isNotEmpty(search) || filtersKeys.some((key) => isNotEmpty(filtersConfig[key])));\n\n const clearButton = (\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n isDisabled={isDisabled}\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n );\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {/* Settings */}\n {onSettingsButtonClick !== undefined && (\n <div\n className={classes.settings}\n tabIndex={0}\n {...addDataTestId(testId, 'settings-button')}\n onClick={!isDisabled ? onSettingsButtonClick : undefined}\n >\n <div className={classes.settingsIcon}>{renderIcon(settingsIcon)}</div>\n </div>\n )}\n {/* Search */}\n {search !== undefined && (\n <FiltersPaneSearch\n {...search}\n locale={getLocale(search.localeKey ?? localeKey, search.locale, locale)}\n localeKey={search.localeKey ?? localeKey}\n isDisabled={search.isDisabled ?? isDisabled}\n testId={getTestId(testId, 'search')}\n />\n )}\n {/* Filters */}\n {filtersKeys.map((key, index) => {\n const isLast = index === filtersKeys.length - 1;\n const filterKey = String(key);\n const currentValue = values[filterKey];\n const filter = filtersConfig[filterKey];\n if (filter === undefined) {\n console.error(`enabledFilters содержит фильтр ${filterKey}, не описанный в конфиге`);\n if (isLast) {\n return clearButton;\n }\n return null;\n }\n\n const filterWrapper = (\n <FilterWrapper\n filter={filter}\n locale={locale}\n localeKey={localeKey}\n onChange={(value) => onChangeFilters({ ...values, [filterKey]: value })}\n value={currentValue}\n key={filterKey}\n isDisabled={isDisabled || filter?.requiredFilledFilters?.some((item) => !values[item])}\n tweakStyles={tweakFilterWrapperStyles}\n data={shouldRenderDataId ? { id: filterKey } : undefined}\n testId={getTestId(testId, `filter-${filterKey}`)}\n />\n );\n\n if (isLast) {\n return (\n <div className={classes.filterWithClearButton} key={filterKey}>\n {filterWrapper}\n {shouldShowClearButton && <>{clearButton}</>}\n </div>\n );\n }\n\n return filterWrapper;\n })}\n </div>\n );\n}\n","import { ReactNode, RefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n applyAction,\n getTestId,\n indexMap,\n isArrayNotEmpty,\n isEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useIntersectionRef, useMergedRefs, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { FlexibleTableRow, IFlexibleTableRowProps } from './components';\nimport { TableRenders } from './constants';\nimport { hasHorizontalScrollBar } from './helpers';\nimport {\n ITableRow,\n IFlexibleTableConfigType,\n IInfinityScrollConfig,\n IFlexibleTableRenderMode,\n IHeaderContent,\n} from './types';\nimport { useStyles, IFlexibleTableStyles } from './FlexibleTable.styles';\n\nexport interface IFlexibleTableProps<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n UniqueField extends keyof Row,\n> extends ICommonProps<IFlexibleTableStyles>,\n Pick<\n IFlexibleTableRowProps<Row, HeaderContent, UniqueField>,\n | 'uniqueField'\n | 'rowAttributes'\n | 'isFirstColumnSticky'\n | 'expandableRowComponent'\n | 'onRowClick'\n | 'onRowHover'\n | 'rowRef'\n > {\n content: Row[];\n /** @default 'table' */\n renderMode?: IFlexibleTableRenderMode;\n headerContent?: HeaderContent;\n config: IFlexibleTableConfigType<Row, HeaderContent>;\n enabledColumns?: Array<keyof Row & string>;\n /** Индексы строк, на которые навешивается класс `active` */\n activeRows?: number[];\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n isHorizontallyScrollable?: boolean;\n /**\n * Добавляет строкам состояние `isFocused`, вызывает ререндер при наведении\n * @default false\n */\n isRowFocusable?: boolean;\n infinityScrollConfig?: IInfinityScrollConfig;\n onHeadClick?: (column: keyof Row) => void;\n refForScroll?: RefObject<HTMLDivElement>;\n nothingFoundContent?: ReactNode;\n /** @default true */\n shouldRenderHeader?: boolean;\n /** @default false */\n isExpandableRowComponentInitiallyOpen?: boolean | ((row: Row, index: number) => boolean);\n}\n\nexport function FlexibleTable<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row> = IHeaderContent<Row>,\n UniqueField extends keyof Row = keyof Row,\n>({\n content,\n headerContent,\n config,\n enabledColumns,\n activeRows,\n uniqueField,\n isLoading = false,\n isFirstColumnSticky = false,\n isHorizontallyScrollable = false,\n isRowFocusable = false,\n infinityScrollConfig: infinityScrollConfigDeprecated,\n renderMode = 'table',\n refForScroll,\n nothingFoundContent,\n data,\n testId,\n tweakStyles,\n shouldRenderHeader = true,\n onHeadClick,\n isExpandableRowComponentInitiallyOpen: isRowInitiallyOpen,\n ...restProps\n}: IFlexibleTableProps<Row, HeaderContent, UniqueField>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakTableRowStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTableRow',\n currentComponentName: 'FlexibleTable',\n });\n\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const columns = useMemo(() => enabledColumns ?? Object.keys(config), [enabledColumns, config]);\n\n const getTableRowProps = (\n item: Row,\n index: number,\n ): IFlexibleTableRowProps<Row, HeaderContent, UniqueField> => ({\n ...restProps,\n item,\n renderMode,\n config,\n columns,\n uniqueField,\n isLoading,\n isFirstColumnSticky,\n isFocusable: isRowFocusable,\n tweakStyles: tweakTableRowStyles,\n isExpandableRowComponentInitiallyOpen: applyAction(isRowInitiallyOpen, item, index),\n });\n\n const getDataScrollAttributeSetter = useCallback(\n (key: string, setter: (el: HTMLDivElement) => boolean) => (el?: HTMLDivElement) => {\n if (isHorizontallyScrollable && isNotEmpty(el) && setter(el)) {\n el.dataset[key] = 'true';\n } else {\n el?.removeAttribute(`data-${key}`);\n }\n },\n [isHorizontallyScrollable],\n );\n\n // Когда таблица имеет скроллбар - добавляем аттрибут scrollable\n const setHasScrollBarAttribute = useMemo(\n () => getDataScrollAttributeSetter('scrollable', hasHorizontalScrollBar),\n [getDataScrollAttributeSetter],\n );\n\n // Когда таблица проскроллена - добавляем аттрибут scrolled\n const setIsScrolledAttribute = useMemo(\n () => getDataScrollAttributeSetter('scrolled', (el) => el.scrollLeft > 0),\n [getDataScrollAttributeSetter],\n );\n\n const ref = useMergedRefs([\n refForScroll,\n scrollRef,\n setHasScrollBarAttribute,\n setIsScrolledAttribute,\n ]);\n\n const infinityScrollConfig = infinityScrollConfigDeprecated && {\n isLoading: infinityScrollConfigDeprecated.isLoading,\n onInfinityScroll: () =>\n infinityScrollConfigDeprecated.onInfinityScroll(\n (infinityScrollConfigDeprecated.activePage ?? 0) + 1,\n ),\n isEnabled:\n infinityScrollConfigDeprecated.isEnabled ?? !infinityScrollConfigDeprecated.isLastPage,\n };\n const intersectionRef = useIntersectionRef({\n isDisabled: !infinityScrollConfig?.isEnabled || infinityScrollConfig.isLoading,\n onIntersection: infinityScrollConfig?.onInfinityScroll,\n });\n\n const shouldShowNothingFound =\n isReactNodeNotEmpty(nothingFoundContent) &&\n !isArrayNotEmpty(content) &&\n !infinityScrollConfig?.isLoading &&\n !infinityScrollConfig?.isEnabled;\n\n useEffect(() => {\n const scrollContainer = scrollRef.current;\n if (isEmpty(scrollContainer) || !isHorizontallyScrollable) {\n return;\n }\n\n const scrollHandler = () => {\n setIsScrolledAttribute(scrollContainer);\n };\n\n const resizeHandler = () => {\n setHasScrollBarAttribute(scrollContainer);\n };\n\n scrollContainer.addEventListener('scroll', scrollHandler);\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n scrollContainer.removeEventListener('scroll', scrollHandler);\n window.removeEventListener('resize', resizeHandler);\n };\n }, [scrollRef, isHorizontallyScrollable, setIsScrolledAttribute, setHasScrollBarAttribute]);\n\n const activeRowsSet = useMemo(() => new Set(activeRows), [activeRows]);\n\n const Table = TableRenders[renderMode];\n\n return (\n <div\n ref={ref}\n className={clsx(classes.flexibleTableWrapper, { [classes.scroll]: isHorizontallyScrollable })}\n >\n <Table.Root className={classes.root} {...addDataAttributes({ ...data, isLoading }, testId)}>\n {shouldRenderHeader && (\n <Table.Head className={classes.head}>\n <Table.Row className={classes.headerRow}>\n {columns.map((key, i) => {\n const {\n position,\n minWidth,\n width,\n maxWidth,\n titleAlign = 'left',\n right,\n left,\n title = '',\n shouldRenderDataId,\n } = config?.[key] ?? {};\n const isSticky = position === 'sticky' || (isFirstColumnSticky && i === 0);\n\n return (\n <Table.Header\n key={key}\n className={clsx(classes.header, {\n [classes.headerSticky]: isSticky,\n [classes.headerSecond]: isFirstColumnSticky && i === 1,\n })}\n style={{\n minWidth,\n width,\n maxWidth,\n textAlign: titleAlign,\n position: isSticky ? 'sticky' : position,\n right,\n left,\n }}\n onClick={isNotEmpty(onHeadClick) ? () => onHeadClick(key) : undefined}\n {...addDataAttributes({ id: shouldRenderDataId ? key : undefined })}\n >\n {applyAction(title, { value: headerContent?.[key] as HeaderContent[string] })}\n </Table.Header>\n );\n })}\n </Table.Row>\n </Table.Head>\n )}\n <Table.Body className={classes.body}>\n {isLoading ? (\n indexMap(6, (i) => <FlexibleTableRow {...getTableRowProps({} as Row, i)} key={i} />)\n ) : (\n <>\n {shouldShowNothingFound && (\n <Table.Row className={classes.nothingFoundRow}>\n <Table.Cell className={classes.nothingFound} colSpan={columns.length}>\n {nothingFoundContent}\n </Table.Cell>\n </Table.Row>\n )}\n\n {content.map((item, i) => (\n <FlexibleTableRow\n {...getTableRowProps(item, i)}\n isActive={activeRowsSet.has(i)}\n key={isNotEmpty(uniqueField) ? item[uniqueField] : i}\n />\n ))}\n\n {infinityScrollConfig?.isEnabled && (\n <Table.Row className={classes.loaderRow}>\n <Table.Cell className={classes.loaderCell} colSpan={columns.length}>\n <div ref={intersectionRef} className={classes.loader}>\n <ThemedPreloader type=\"dots\" testId={getTestId(testId, 'loader')} />\n </div>\n </Table.Cell>\n </Table.Row>\n )}\n </>\n )}\n </Table.Body>\n </Table.Root>\n </div>\n );\n}\n","import { FC } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { DocActions, IDocActionsProps } from './components';\nimport { DEFAULT_TIMEOUT } from './constants';\nimport { useStyles } from './FloatDocActions.styles';\n\nexport interface IFloatDocActionsProps extends IDocActionsProps {\n isOpen: boolean;\n}\n\nexport const FloatDocActions: FC<IFloatDocActionsProps> = ({\n isOpen,\n children,\n ...docActionsProps\n}) => {\n const classes = useStyles();\n\n return (\n <CSSTransition\n in={isOpen}\n timeout={DEFAULT_TIMEOUT}\n mountOnEnter\n unmountOnExit\n classNames={{\n enter: classes['slide-up-enter'],\n enterActive: classes['slide-up-enter-active'],\n exit: classes['slide-up-exit'],\n exitActive: classes['slide-up-exit-active'],\n }}\n >\n <DocActions {...docActionsProps}>{children}</DocActions>\n </CSSTransition>\n );\n};\n","export const DEFAULT_TIMEOUT = 150;\n","export const GROUP_PLACEMENTS = [\n 'left',\n 'right',\n 'middle',\n 'top',\n 'bottom',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n] as const;\n","import { FC, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { isNotEmpty, isNumberInteger } from '@true-engineering/true-react-platform-helpers';\nimport { getNumberInRange, getNumberLength } from '../../helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { INumberInputProps, NumberInput } from '../NumberInput';\nimport { useStyles, IIncrementInputStyles, inputStyles } from './IncrementInput.styles';\n\nexport interface IIncrementInputProps\n extends Omit<INumberInputProps, 'canBeFloat' | 'precision' | 'tweakStyles'>,\n ICommonProps<IIncrementInputStyles> {\n /** @default 1 */\n step?: number;\n}\n\nexport const IncrementInput: FC<IIncrementInputProps> = ({\n value,\n onChange,\n min,\n max,\n step = 1,\n intPartPrecision,\n tweakStyles,\n isDisabled,\n isReadonly,\n isInvalid,\n ...props\n}) => {\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'IncrementInput',\n });\n\n const classes = useStyles({ theme: tweakStyles });\n\n const isEditDisabled = isDisabled || isReadonly;\n\n const isIncreaseDisabled =\n isEditDisabled ||\n (isNotEmpty(intPartPrecision) && getNumberLength((value ?? 0) + step) > intPartPrecision) ||\n (isNotEmpty(max) && isNotEmpty(value) && value >= max);\n\n const isDecreaseDisabled =\n isEditDisabled || (isNotEmpty(min) && isNotEmpty(value) && value <= min);\n\n const increment = (): void => {\n onChange(getNumberInRange((value ?? 0) + step, min, max));\n };\n\n const decrement = (): void => {\n onChange(getNumberInRange((value ?? 0) - step, min, max));\n };\n\n useEffect(() => {\n if (!isNumberInteger(step)) {\n console.error('Параметр step должен быть целым числом');\n }\n }, [step]);\n\n return (\n <NumberInput\n {...props}\n isInvalid={isInvalid}\n isDisabled={isDisabled}\n isReadonly={isReadonly}\n min={min}\n max={max}\n intPartPrecision={intPartPrecision}\n onChange={onChange}\n value={value}\n tweakStyles={tweakInputStyles}\n >\n <div className={classes.buttons}>\n <button\n className={clsx(classes.button, {\n [classes.disabledButton]: isIncreaseDisabled,\n [classes.errorButton]: isInvalid,\n })}\n type=\"button\"\n disabled={isIncreaseDisabled}\n onClick={increment}\n >\n <div className={classes.icon}>\n <Icon type=\"plus\" />\n </div>\n </button>\n\n <button\n className={clsx(classes.button, {\n [classes.disabledButton]: isDecreaseDisabled,\n [classes.errorButton]: isInvalid,\n })}\n type=\"button\"\n disabled={isDecreaseDisabled}\n onClick={decrement}\n >\n <div className={classes.icon}>\n <Icon type=\"minus\" />\n </div>\n </button>\n </div>\n </NumberInput>\n );\n};\n","import { FC, ReactNode, MouseEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { CSSTransition } from 'react-transition-group';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isArrayNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IconButton } from '../IconButton';\nimport { IModalPosition, IModalTransitionProps } from './types';\nimport { useStyles, IModalStyles, closeButtonStyles } from './Modal.styles';\n\nexport interface IModalProps extends ICommonProps<IModalStyles>, IModalTransitionProps {\n title?: ReactNode;\n /** @default 'l' */\n size?: 'l' | 'm' | 's';\n /** @default false */\n isFooterSticky?: boolean;\n footer?: ReactNode;\n /** @deprecated use {@link footer} */\n buttons?: ReactNode[];\n /** @default 'right' */\n buttonsAlign?: 'left' | 'center' | 'right';\n children?: ReactNode | ReactNode[];\n /** @default 'center' */\n position?: IModalPosition;\n /** @default true */\n hasCloseButton?: boolean;\n /** @default true */\n hasOverlay?: boolean;\n /** @default true */\n shouldCloseOnOverlayClick?: boolean;\n /** @default true */\n shouldCloseOnEsc?: boolean;\n /** @default true */\n shouldBlockScroll?: boolean;\n /** @default false */\n isOpen?: boolean;\n zIndex?: number;\n onClose?: () => void;\n}\n\nexport const Modal: FC<IModalProps> = ({\n data,\n tweakStyles,\n title,\n size = 'l',\n isFooterSticky = false,\n footer,\n buttons,\n buttonsAlign = 'right',\n hasCloseButton = true,\n hasOverlay = true,\n isOpen = false,\n position = 'center',\n children,\n zIndex,\n testId,\n shouldCloseOnOverlayClick = true,\n shouldCloseOnEsc = true,\n shouldBlockScroll = true,\n timeout = 150,\n unmountOnExit = true,\n onClose,\n ...restProps\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCloseButtonStyles = useTweakStyles({\n innerStyles: closeButtonStyles,\n tweakStyles,\n className: 'tweakCloseButton',\n currentComponentName: 'Modal',\n });\n\n const [isClickOnOverlay, setIsClickOnOverlay] = useState(false);\n\n const isModalOpen = restProps.in ?? isOpen;\n const hasFooter = isReactNodeNotEmpty(footer) || isArrayNotEmpty(buttons);\n const overlay = useRef<HTMLDivElement>(null);\n\n // Клик на оверлее обрабатываем через связку onMouseDown и onMouseUp, т.к. клик\n // создает ложные срабатывания (баг при старте клика на модалке и отпусканием мышки уже на оверлее)\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (onClose !== undefined && event.target === overlay.current) {\n setIsClickOnOverlay(true);\n }\n };\n\n const handleOutsideMouseUp = (event: MouseEvent) => {\n if (onClose === undefined) {\n return;\n }\n if (event.target === overlay.current && isClickOnOverlay) {\n onClose();\n }\n setIsClickOnOverlay(false);\n };\n\n const handleEscClose = useCallback(\n (event: KeyboardEvent) => {\n if (event.code === 'Escape' && onClose !== undefined) {\n onClose();\n }\n },\n [onClose],\n );\n\n useEffect(() => {\n if (!shouldCloseOnEsc || onClose === undefined || !isModalOpen) {\n return () => null;\n }\n\n document.addEventListener('keydown', handleEscClose);\n return () => document.removeEventListener('keydown', handleEscClose);\n }, [shouldCloseOnEsc, onClose, isModalOpen, handleEscClose]);\n\n return (\n <CSSTransition\n in={isModalOpen}\n timeout={timeout}\n unmountOnExit={unmountOnExit}\n classNames={{\n enter: classes['modal-enter'],\n enterActive: classes['modal-enter-active'],\n exit: classes['modal-exit'],\n exitActive: classes['modal-exit-active'],\n }}\n {...restProps}\n >\n <div className={classes.modalWrapper}>\n <RemoveScroll enabled={shouldBlockScroll} forwardProps>\n <div\n className={clsx(classes.root, classes[size], {\n [classes.overlay]: position !== 'static' && hasOverlay,\n [classes.sideBar]: position === 'left' || position === 'right',\n [classes.fixedPosition]: position !== 'static',\n })}\n style={{ zIndex }}\n {...addDataAttributes(data, testId)}\n >\n <div\n ref={overlay}\n className={clsx(classes.innerOverlay, classes[`position-${position}`])}\n onMouseDown={shouldCloseOnOverlayClick ? handleOutsideMouseDown : undefined}\n onMouseUp={shouldCloseOnOverlayClick ? handleOutsideMouseUp : undefined}\n >\n <div\n className={clsx(classes.modal, {\n [classes.withoutFooter]: !hasFooter,\n [classes.withStickyFooter]: isFooterSticky,\n })}\n >\n {hasCloseButton && (\n <div className={classes.close}>\n <IconButton\n testId={getTestId(testId, 'close-button')}\n tweakStyles={tweakCloseButtonStyles}\n view=\"cancel-light\"\n icon=\"close\"\n onClick={onClose}\n />\n </div>\n )}\n {isReactNodeNotEmpty(title) && (\n <h3\n className={clsx(classes.title, {\n [classes.titleWithCloseButton]: hasCloseButton,\n })}\n >\n {title}\n </h3>\n )}\n {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}\n {hasFooter && (\n <div\n className={clsx(classes.footerWrapper, {\n [classes.stickyFooterWrapper]: isFooterSticky,\n })}\n >\n <div\n className={clsx(classes.footer, classes[`buttons-${buttonsAlign}`], {\n [classes.stickyFooter]: isFooterSticky,\n })}\n >\n {isReactNodeNotEmpty(footer) ? footer : buttons}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </RemoveScroll>\n </div>\n </CSSTransition>\n );\n};\n","import { FC, MouseEvent, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles, useOnClickOutsideWithRef } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { IListItem, List } from '../List';\nimport { useStyles, IMoreMenuStyles } from './MoreMenu.styles';\n\nexport interface IMoreMenuProps extends ICommonProps<IMoreMenuStyles> {\n items: IListItem[];\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n hasDefaultStateBackground?: boolean;\n onMenuOpen?: () => void;\n onMenuClose?: () => void;\n}\n\n/** @deprecated Используйте {@link import('../NewMoreMenu').NewMoreMenu NewMoreMenu} */\nexport const MoreMenu: FC<IMoreMenuProps> = ({\n items,\n isDisabled = false,\n hasDefaultStateBackground = true,\n data,\n testId,\n tweakStyles,\n onMenuOpen,\n onMenuClose,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakList',\n currentComponentName: 'MoreMenu',\n });\n\n const [isMenuShown, setIsMenuShown] = useState(false);\n const list = useRef<HTMLDivElement>(null);\n const button = useRef<HTMLButtonElement>(null);\n\n const isButtonDisabled = isDisabled || items.length === 0;\n\n const toggleMenu = (event: MouseEvent) => {\n const isShown = !isMenuShown;\n event.stopPropagation();\n setIsMenuShown(isShown);\n if (isShown) {\n onMenuOpen?.();\n } else {\n onMenuClose?.();\n }\n };\n\n const handleCloseMenu = () => {\n setIsMenuShown(false);\n onMenuClose?.();\n };\n\n useOnClickOutsideWithRef(list, handleCloseMenu, button);\n\n return (\n <div className={classes.root}>\n <button\n ref={button}\n className={clsx(classes.button, {\n [classes.hasCircle]: hasDefaultStateBackground,\n [classes.disabled]: isButtonDisabled,\n [classes.active]: isMenuShown,\n })}\n onClick={!isButtonDisabled ? toggleMenu : undefined}\n {...addDataAttributes(data, testId)}\n >\n <div className={classes.icon}>\n <Icon type=\"menu\" />\n </div>\n </button>\n {isMenuShown && !isButtonDisabled && (\n <div className={classes.menu} ref={list}>\n <List\n items={items}\n testId={getTestId(testId, 'list')}\n tweakStyles={tweakListStyles}\n onClick={handleCloseMenu}\n />\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutside, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport {\n MultiSelectList,\n IMultiSelectListValues,\n IMultiSelectLocale,\n IMultiSelectLocaleKey,\n} from '../MultiSelectList';\nimport { MultiSelectInput } from './components';\nimport { IHorizontalCornerConnection } from './types';\nimport { useStyles, IMultiSelectStyles, multiSelectListStyles } from './MultiSelect.styles';\n\nexport interface IMultiSelectProps<Value = string> extends ICommonProps<IMultiSelectStyles> {\n value?: IMultiSelectListValues<Value>;\n /** @default 'full' */\n corners?: IHorizontalCornerConnection;\n /** @default false */\n isInvalid?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default '' */\n placeholder?: string;\n localeKey?: IMultiSelectLocaleKey;\n locale?: IMultiSelectLocale;\n onChange: (value?: IMultiSelectListValues<Value>) => void;\n fetchOptions: (value?: string, page?: number) => Promise<Value[]>;\n}\n\nexport function MultiSelect<Value = string>({\n value,\n corners = 'full',\n isInvalid = false,\n isRequired = false,\n isDisabled = false,\n placeholder = '',\n localeKey,\n locale,\n testId,\n data,\n onChange,\n fetchOptions,\n tweakStyles,\n}: IMultiSelectProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakMultiSelectListStyles = useTweakStyles({\n innerStyles: multiSelectListStyles,\n tweakStyles,\n className: 'tweakMultiSelectList',\n currentComponentName: 'MultiSelect',\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const ref = useRef(null);\n\n const handleOnClose = () => {\n setIsOpen(false);\n };\n\n useOnClickOutside(ref, handleOnClose, classes.root);\n\n return (\n <div\n className={clsx(\n classes.root,\n classes[corners],\n isOpen && classes.open,\n isInvalid && !isDisabled && classes.invalid,\n isRequired && classes.required,\n isDisabled && classes.disabled,\n )}\n {...addDataAttributes(data, testId)}\n >\n {/* Input */}\n <MultiSelectInput\n value={value}\n isOpen={isOpen}\n isDisabled={isDisabled}\n placeholder={placeholder}\n onToggle={(state) => setIsOpen(state)}\n />\n {/* Dropdown */}\n {isOpen && (\n <div className={classes.listContainer} ref={ref}>\n <MultiSelectList\n tweakStyles={tweakMultiSelectListStyles}\n value={value}\n localeKey={localeKey}\n locale={locale}\n fetchOptions={fetchOptions}\n onChange={onChange}\n onClose={handleOnClose}\n />\n </div>\n )}\n </div>\n );\n}\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, isArrayEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps, IRenderNode } from '../../types';\nimport { Icon } from '../Icon';\nimport { IListItem, IListSize, List } from '../List';\nimport { IWithPopupProps, WithPopup } from '../WithPopup';\nimport { IWithPopupTriggerProps } from '../WithPopup/types';\nimport { useStyles, INewMoreMenuStyles } from './NewMoreMenu.styles';\n\nexport interface INewMoreMenuProps\n extends Pick<\n IWithPopupProps,\n | 'placement'\n | 'middlewares'\n | 'shouldHideOnScroll'\n | 'shouldRenderInBody'\n | 'canBeFlipped'\n | 'onToggle'\n >,\n ICommonProps<INewMoreMenuStyles> {\n items: IListItem[];\n renderTrigger?: IRenderNode<IWithPopupTriggerProps>;\n listSize?: IListSize;\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n hasDefaultStateBackground?: boolean;\n}\n\nexport const NewMoreMenu: FC<INewMoreMenuProps> = ({\n items,\n isDisabled = false,\n hasDefaultStateBackground = true,\n data,\n renderTrigger,\n listSize,\n testId,\n tweakStyles,\n ...rest\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakWithPopupStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithPopup',\n currentComponentName: 'NewMoreMenu',\n });\n\n const tweakListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakList',\n currentComponentName: 'NewMoreMenu',\n });\n\n const defaultTrigger = ({ triggerProps, referenceProps }: IWithPopupTriggerProps) => (\n <button\n className={clsx(classes.button, {\n [classes.hasCircle]: hasDefaultStateBackground,\n [classes.disabled]: triggerProps.isDisabled,\n [classes.active]: triggerProps.isActive,\n })}\n disabled={triggerProps.isDisabled}\n {...addDataAttributes(data, testId)}\n {...referenceProps}\n >\n <div className={classes.icon}>\n <Icon type=\"menu\" />\n </div>\n </button>\n );\n\n return (\n <WithPopup\n isDisabled={isDisabled || isArrayEmpty(items)}\n tweakStyles={tweakWithPopupStyles}\n {...rest}\n trigger={renderTrigger ?? defaultTrigger}\n >\n {({ onClose }) => (\n <List items={items} size={listSize} tweakStyles={tweakListStyles} onClick={onClose} />\n )}\n </WithPopup>\n );\n};\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon, IIcon, renderIcon } from '../Icon';\nimport { INotificationType } from './types';\nimport { useStyles, INotificationStyles } from './Notification.styles';\n\nexport interface INotificationProps extends ICommonProps<INotificationStyles> {\n type: INotificationType;\n /** @default true */\n isFullWidth?: boolean;\n text?: string;\n title?: string;\n /** @default 's' */\n size?: 's' | 'm' | 'l';\n icon?: IIcon;\n children?: ReactNode;\n}\n\nexport const Notification: FC<INotificationProps> = ({\n children,\n type,\n isFullWidth = true,\n text,\n title,\n testId,\n size = 's',\n data,\n icon,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const hasText = isStringNotEmpty(text);\n const hasTitle = isStringNotEmpty(title);\n const isDefaultType = type !== 'custom';\n const hasIcon = isReactNodeNotEmpty(icon) || isDefaultType;\n\n return (\n <div\n className={clsx(classes.root, classes[size], classes[type], {\n [classes.inline]: !isFullWidth,\n [classes.withTitle]: hasTitle,\n [classes.withText]: hasText,\n })}\n {...addDataAttributes(data, testId)}\n >\n {hasIcon && (\n <div className={classes.icon}>\n {isReactNodeNotEmpty(icon)\n ? renderIcon(icon)\n : isDefaultType && <Icon type={`status-${type}`} />}\n </div>\n )}\n <div className={classes.body}>\n {hasTitle && (\n <span className={classes.title} {...addDataTestId(testId, 'title')}>\n {title}\n </span>\n )}\n {hasText && (\n <span className={classes.text} {...addDataTestId(testId, 'text')}>\n {text}\n </span>\n )}\n {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}\n </div>\n </div>\n );\n};\n","import { FC, FocusEvent, useMemo, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, getTestId } from '@true-engineering/true-react-platform-helpers';\nimport {\n findCountryByCode,\n getCountryCodeFromPhone,\n getFullPhone,\n getPhoneMask,\n getPhoneObjFromString,\n} from '../../helpers';\nimport { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Flag } from '../Flag';\nimport { Icon } from '../Icon';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport { PhoneInputCountryList } from './components';\nimport { DEFAULT_VALUE } from './constants';\nimport { IChangePhoneInputEvent, IPhoneInfo, IPhoneValue } from './types';\nimport { inputStyles, IPhoneInputStyles, useStyles } from './PhoneInput.styles';\n\nexport interface IPhoneInputProps\n extends Omit<\n IInputProps,\n 'value' | 'onChange' | 'type' | 'mask' | 'units' | 'placeholder' | 'tweakStyles'\n >,\n ICommonProps<IPhoneInputStyles> {\n /** @default 'ru' */\n locale?: string;\n /** @default 'Поиск' */\n codeSearchPlaceholder?: string;\n /** @default 'Ничего не найдено' */\n noMatchesLabel?: string;\n /** @default { phoneNumber: '', dialCode: '' } */\n value?: IPhoneValue;\n onChange: (phone: IPhoneValue, event: IChangePhoneInputEvent) => void;\n}\n\nexport const PhoneInput: FC<IPhoneInputProps> = ({\n locale = 'ru',\n value = DEFAULT_VALUE,\n onChange,\n data,\n testId,\n isDisabled,\n isInvalid,\n isActive,\n tweakStyles,\n codeSearchPlaceholder = 'Поиск',\n noMatchesLabel = 'Ничего не найдено',\n ...inputProps\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'PhoneInput',\n });\n\n const tweakCountryListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakCountryList',\n currentComponentName: 'PhoneInput',\n });\n\n const [isListOpen, setIsListOpen] = useState(false);\n const [isFocused, setFocused] = useState(false);\n\n const list = useRef<HTMLDivElement>(null);\n const inputWrapper = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const phoneWithCode = getFullPhone(value);\n\n const countryCode = useMemo(\n () => value?.countryCode ?? getCountryCodeFromPhone(phoneWithCode),\n [phoneWithCode, value?.countryCode],\n );\n\n const handleClose = () => {\n setIsListOpen(false);\n };\n\n const handleChange = (inputValue: string, event: IChangeInputEvent) => {\n // if (event.type === 'change') - нужно из-за InputMask\n // Помимо change, еще могут приходить focus и blur, когда input пустой и тогда происходят неприятные сайд-эффекты\n if (event.type === 'change') {\n const newValue = inputValue.replace(/[^0-9]/g, '');\n let selectedCountryCode = countryCode;\n\n const selectedCountry = findCountryByCode(countryCode);\n\n // Проверяем введенный номер на соответствие с selectedCountry\n // Если не соответствует, то пытаемся найти countryCode, для которой\n // данный номер будет валидным (функция getPhoneObjFromString)\n if (selectedCountry !== undefined) {\n // Сначала проверяем, что введенный телефон удовлетворяет одному\n // из fullCode для выбранной страны\n const isSomeFullCodeValid = selectedCountry.fullCodes.some((fullCode) => {\n if (newValue.length >= fullCode.length) {\n return newValue.startsWith(fullCode);\n } else {\n return fullCode.startsWith(newValue);\n }\n });\n\n // После проверяем, что введенный телефон удовлетворяет dialCode для выбранной страны\n const isDialCodeValid = newValue.startsWith(selectedCountry.dialCode);\n\n if (!isSomeFullCodeValid || !isDialCodeValid) {\n selectedCountryCode = undefined;\n }\n }\n\n onChange(getPhoneObjFromString(newValue, selectedCountryCode), event);\n }\n };\n\n const handleSelect = (newPhoneInfo: IPhoneInfo, event: IChangePhoneInputEvent) => {\n if (newPhoneInfo.countryCode !== countryCode) {\n onChange(\n {\n phoneNumber:\n newPhoneInfo.dialCode !== value.dialCode\n ? ''\n : getPhoneObjFromString(phoneWithCode).phoneNumber,\n dialCode: newPhoneInfo.dialCode,\n countryCode: newPhoneInfo.countryCode,\n },\n event,\n );\n }\n handleClose();\n\n const input = inputRef?.current;\n if (input !== null) {\n input.focus();\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n if (inputProps.onFocus !== undefined) {\n inputProps?.onFocus(event);\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n if (inputProps.onBlur !== undefined) {\n inputProps?.onBlur(event);\n }\n };\n\n useOnClickOutsideWithRef(list, handleClose, inputWrapper);\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n <div\n className={clsx(classes.countrySelectContainer, {\n [classes.disabledCountrySelect]: isDisabled,\n [classes.invalidBorder]: isInvalid,\n [classes.focusedBorder]: isActive || isListOpen || isFocused,\n })}\n ref={inputWrapper}\n onClick={!isDisabled ? () => setIsListOpen(!isListOpen) : undefined}\n >\n <div className={classes.flag}>\n <Flag countryCode={countryCode} />\n </div>\n <div\n className={clsx(classes.arrow, {\n [classes.up]: isListOpen,\n [classes.invalidArrow]: isInvalid,\n })}\n >\n <Icon type=\"chevron-down\" />\n </div>\n </div>\n\n <Input\n value={phoneWithCode}\n mask={getPhoneMask(countryCode)}\n // alwaysShowMask={false}\n ref={inputRef}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isActive={isListOpen || isActive}\n testId={getTestId(testId, 'input')}\n tweakStyles={tweakInputStyles}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...inputProps}\n />\n\n {isListOpen && (\n <div className={classes.flagListContainer} ref={list}>\n <PhoneInputCountryList\n selectedCountryCode={countryCode}\n placeholder={codeSearchPlaceholder}\n locale={locale}\n tweakStyles={tweakCountryListStyles}\n noMatchesLabel={noMatchesLabel}\n onChange={handleSelect}\n closeList={handleClose}\n />\n </div>\n )}\n </div>\n );\n};\n","import { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n isNotEmpty,\n isReactNodeNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { IRadioButtonSize } from './types';\nimport { useStyles, IRadioButtonStyles } from './RadioButton.styles';\n\nexport interface IRadioButtonProps<Value extends string> extends ICommonProps<IRadioButtonStyles> {\n children?: ReactNode;\n value: Value;\n groupName: string;\n size?: IRadioButtonSize;\n isChecked?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isInvalid?: boolean;\n onChange: (value: Value) => void | Promise<void>;\n}\n\nexport function RadioButton<Value extends string>({\n children,\n value,\n groupName,\n size,\n isChecked,\n isDisabled = false,\n isInvalid = false,\n data,\n testId,\n tweakStyles,\n onChange,\n}: IRadioButtonProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <label\n className={clsx(classes.label, isNotEmpty(size) && classes[size], {\n [classes.isDisabled]: isDisabled,\n })}\n htmlFor={`${groupName}--${value}`}\n {...addDataAttributes(data, testId)}\n >\n <input\n id={`${groupName}--${value}`}\n type=\"radio\"\n value={value}\n name={groupName}\n checked={isChecked}\n disabled={isDisabled}\n onChange={(event) => onChange(event.target.value as Value)}\n className={clsx(classes.input, {\n [classes.isDisabled]: isDisabled,\n [classes.isInvalid]: isInvalid,\n })}\n />\n {isReactNodeNotEmpty(children) && <span className={classes.content}>{children}</span>}\n </label>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataTestId,\n addDataAttributes,\n hasDuplicates,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { renderIcon } from '../Icon';\nimport { ISelectorOption, ISelectorValue } from './types';\nimport { getSelectorLineStyle, ISelectorStyles, useStyles } from './Selector.styles';\n\nexport interface ISelectorProps<V extends ISelectorValue> extends ICommonProps<ISelectorStyles> {\n options: Array<ISelectorOption<V>>;\n value?: V;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isInvalid?: boolean;\n /** @default true */\n hasSameOptionsWidth?: boolean;\n /** @default 'left' */\n iconPosition?: 'left' | 'right';\n /** @default 'l' */\n size?: 's' | 'm' | 'l';\n onChange: (value: V) => void;\n}\n\nexport function Selector<V extends ISelectorValue>({\n options,\n value,\n isDisabled = false,\n isRequired = false,\n isInvalid = false,\n hasSameOptionsWidth = true,\n iconPosition = 'left',\n size = 'l',\n testId,\n data,\n tweakStyles,\n onChange,\n}: ISelectorProps<V>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n const optionsValues = options.map((opt) => opt.value);\n\n const [elementsData, setElementsData] = useState<HTMLElement[]>([]);\n const listRef = useRef<HTMLDivElement>(null);\n\n if (hasDuplicates(optionsValues)) {\n console.error('Selector: Значения options.value должны быть уникальными');\n }\n\n useEffect(() => {\n const listEl = listRef.current;\n if (listEl === null) {\n return;\n }\n\n setElementsData([...listEl.querySelectorAll<HTMLElement>(`.${classes.optionWrapper}`)]);\n }, [options, size]);\n\n const activeElementData = isNotEmpty(value)\n ? elementsData[optionsValues.indexOf(value)]\n : undefined;\n\n return (\n <div\n className={clsx(classes.root, classes.selector, {\n [classes.iconFromRight]: iconPosition === 'right',\n [classes.invalid]: isInvalid,\n [classes.required]: isRequired,\n [classes.autoWidth]: hasSameOptionsWidth,\n })}\n ref={listRef}\n {...addDataAttributes(data, testId)}\n >\n {isNotEmpty(activeElementData) && (\n <div className={classes.line} style={getSelectorLineStyle(activeElementData)} />\n )}\n\n {options.map((option) => {\n const optionId = option.value.toString();\n const isDisabledOption = option.isDisabled ?? isDisabled;\n const isActiveOption = option.value === value;\n\n return (\n <div key={optionId} className={classes.optionWrapper}>\n <button\n type=\"button\"\n className={clsx(classes.option, classes[size], {\n [classes.active]: isActiveOption,\n [classes.disabled]: isDisabledOption,\n })}\n disabled={isDisabledOption}\n onClick={!isDisabledOption ? () => onChange(option.value) : undefined}\n {...addDataTestId(testId, optionId)}\n >\n {isReactNodeNotEmpty(option.icon) && (\n <div className={classes.optionIcon}>{renderIcon(option.icon)}</div>\n )}\n <div className={classes.optionText}>{option.label}</div>\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IStatusColor, IStatusSize } from './types';\nimport { useStyles, IStatusStyles } from './Status.styles';\n\nexport interface IStatusProps extends ICommonProps<IStatusStyles> {\n children: ReactNode;\n color: IStatusColor;\n icon?: IIcon;\n /** @default 's' */\n size?: IStatusSize;\n /** @default 'right' */\n iconPosition?: 'left' | 'right';\n badge?: ReactNode;\n}\n\nexport const Status: FC<IStatusProps> = ({\n children,\n color,\n size = 's',\n icon,\n iconPosition = 'right',\n badge,\n tweakStyles,\n testId,\n data,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <span\n className={clsx(classes.root, classes[size], classes[color])}\n {...addDataAttributes(data, testId)}\n >\n {isReactNodeNotEmpty(children) && <span className={classes.text}>{children}</span>}\n {isReactNodeNotEmpty(icon) && (\n <span className={clsx(classes.icon, iconPosition === 'left' && classes.iconLeft)}>\n {renderIcon(icon)}\n </span>\n )}\n {isReactNodeNotEmpty(badge) && <span className={classes.badge}>{badge}</span>}\n </span>\n );\n};\n","import { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { ISwitchSize, ISwitchState } from './types';\nimport { useStyles, ISwitchStyles } from './Switch.styles';\n\nexport interface ISwitchProps<V extends string> extends ICommonProps<ISwitchStyles> {\n children?: ReactNode;\n value: V;\n /** @default false */\n isChecked: boolean | undefined;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isInvalid?: boolean;\n /** @default 'right' */\n labelPosition?: 'left' | 'right';\n /** @default 'primary' */\n color?: 'primary' | 'secondary';\n size?: ISwitchSize;\n onChange: (state: ISwitchState<V>) => void;\n}\n\nexport const Switch = <V extends string>({\n isDisabled = false,\n isChecked = false,\n isInvalid = false,\n value,\n children,\n labelPosition = 'right',\n color = 'primary',\n size,\n data,\n tweakStyles,\n testId,\n onChange,\n}: ISwitchProps<V>): JSX.Element => {\n const classes = useStyles({ theme: tweakStyles });\n\n const handleChange = () => onChange({ name: value, isEnabled: !isChecked });\n\n return (\n <label\n className={clsx(classes.root, classes[color], isNotEmpty(size) && classes[size], {\n [classes.disabled]: isDisabled,\n [classes.checked]: isChecked,\n [classes.invalid]: isInvalid,\n })}\n {...addDataAttributes(data, testId)}\n >\n <span className={classes.switch}>\n <input\n type=\"checkbox\"\n name={value}\n className={classes.input}\n onChange={isDisabled ? undefined : handleChange}\n checked={isChecked}\n disabled={isDisabled}\n {...addDataTestId(testId, 'input')}\n />\n </span>\n {isReactNodeNotEmpty(children) && (\n <span\n className={clsx(\n classes.label,\n classes[labelPosition === 'left' ? 'labelLeft' : 'labelRight'],\n )}\n >\n {children}\n </span>\n )}\n </label>\n );\n};\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { TextWithTooltip } from '../TextWithTooltip';\nimport { useStyles, ITextWithInfoStyles } from './TextWithInfo.styles';\n\nexport interface ITextWithInfoProps extends ICommonProps<ITextWithInfoStyles> {\n text: string;\n /** @default false */\n isSelected?: boolean;\n textTooltip?: string;\n info?: {\n infoTooltip?: string;\n link?: string;\n };\n onClick: () => void;\n}\n\nexport const TextWithInfo: FC<ITextWithInfoProps> = ({\n text,\n isSelected = false,\n info,\n textTooltip,\n onClick,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <div\n className={clsx(classes.root, isSelected && classes.selected)}\n {...addDataAttributes(data, testId)}\n >\n <div className={classes.container}>\n <div className={classes.text} onClick={onClick}>\n {textTooltip !== undefined ? (\n <TextWithTooltip tooltipText={textTooltip}>{text}</TextWithTooltip>\n ) : (\n text\n )}\n </div>\n {info && (\n <a className={classes.info} href={info.link} target=\"_blank\" rel=\"noopener noreferrer\">\n {info.infoTooltip !== undefined ? (\n <TextWithTooltip tooltipText={info.infoTooltip}>\n <Icon type=\"information\" />\n </TextWithTooltip>\n ) : (\n <Icon type=\"information\" />\n )}\n </a>\n )}\n </div>\n </div>\n );\n};\n","import { FC, ReactNode, useEffect } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport { DEFAULT_TIMEOUT } from './constants';\nimport { IToasterType } from './types';\nimport { IToasterStyles, useStyles } from './Toaster.styles';\n\nexport interface IToasterProps extends ICommonProps<IToasterStyles> {\n /** @default 'error' */\n type?: IToasterType;\n title?: ReactNode;\n text?: ReactNode;\n children?: ReactNode;\n /**\n * Время автоматического закрытия тостера в миллисекундах\n * @default 7000\n */\n timeout?: number;\n /** @default false */\n hasCloseButton?: boolean;\n /** @default false */\n shouldCloseOnClick?: boolean;\n onClose?: () => void;\n onTimeEnd?: () => void;\n}\n\nexport const Toaster: FC<IToasterProps> = ({\n type = 'error',\n title,\n text,\n children,\n timeout = DEFAULT_TIMEOUT,\n hasCloseButton = false,\n shouldCloseOnClick = false,\n data,\n testId,\n tweakStyles,\n onClose,\n onTimeEnd,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCloseButtonStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakCloseButton',\n currentComponentName: 'Toaster',\n });\n\n useEffect(() => {\n if (!Number.isFinite(timeout) || isEmpty(onTimeEnd)) {\n return;\n }\n\n const timeoutId = window.setTimeout(() => onTimeEnd(), timeout);\n\n return () => window.clearTimeout(timeoutId);\n }, []);\n\n return (\n <div\n className={classes.root}\n onClick={shouldCloseOnClick ? onClose : undefined}\n {...addDataAttributes(data, testId)}\n >\n <div className={clsx(classes.iconContainer, classes[type])}>\n <Icon type={`status-${type}`} />\n </div>\n <div>\n {isReactNodeNotEmpty(title) && <div className={classes.title}>{title}</div>}\n {isReactNodeNotEmpty(text) && <div className={classes.text}>{text}</div>}\n {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}\n </div>\n {hasCloseButton && isNotEmpty(onClose) && (\n <div className={classes.close}>\n <IconButton\n view=\"cancel-light\"\n icon=\"close-window\"\n tweakStyles={tweakCloseButtonStyles}\n onClick={onClose}\n />\n </div>\n )}\n </div>\n );\n};\n","export const DEFAULT_TIMEOUT = 7 * 1000; // 7 seconds\n","import { FC } from 'react';\nimport { getTestId, isReactNodeNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ITooltipProps, Tooltip } from '../Tooltip';\nimport { IWithPopupProps, WithPopup } from '../WithPopup';\nimport { IWithTooltipStyles, withPopupStyles } from './WithTooltip.styles';\n\nexport interface IWithTooltipProps\n extends Omit<\n IWithPopupProps,\n 'trigger' | 'children' | 'placement' | 'eventType' | 'isTriggerWrapped' | 'tweakStyles'\n >,\n ICommonProps<IWithTooltipStyles> {\n children: IWithPopupProps['trigger'];\n /** @default 'hover' */\n eventType?: IWithPopupProps['eventType'];\n /** @default 'top' */\n placement?: IWithPopupProps['placement'];\n tooltipText?: ITooltipProps['text'];\n /** @default 'tooltip' */\n tooltipView?: ITooltipProps['view'];\n /** @default 'info' */\n tooltipType?: ITooltipProps['type'];\n /** @default 'undefined' */\n tooltipSize?: ITooltipProps['size'];\n}\n\nexport const WithTooltip: FC<IWithTooltipProps> = ({\n children,\n eventType = 'hover',\n placement = 'top',\n tooltipText,\n tooltipView = 'tooltip',\n tooltipType = 'info',\n tooltipSize,\n isDisabled = false,\n popupData,\n tweakStyles,\n ...restProps\n}) => {\n const tweakWithPopupStyles = useTweakStyles({\n innerStyles: withPopupStyles,\n tweakStyles,\n className: 'tweakWithPopup',\n currentComponentName: 'WithTooltip',\n });\n\n const tweakTooltipStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTooltip',\n currentComponentName: 'WithTooltip',\n });\n\n return (\n <WithPopup\n trigger={children}\n placement={placement}\n eventType={eventType}\n popupData={{ ...popupData, tooltipView }}\n isDisabled={isDisabled || !isReactNodeNotEmpty(tooltipText)}\n isTriggerWrapped\n tweakStyles={tweakWithPopupStyles}\n {...restProps}\n >\n <Tooltip\n view={tooltipView}\n type={tooltipType}\n text={tooltipText}\n size={tooltipSize}\n tweakStyles={tweakTooltipStyles}\n testId={getTestId(restProps.testId, 'tooltip')}\n />\n </WithPopup>\n );\n};\n","import { useMemo } from 'react';\nimport { isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';\n\nexport const useMerge = <T>(one?: T, two?: T): T | undefined =>\n useMemo(\n () => (isNotEmpty(one) && isNotEmpty(two) ? mergeStyles(one, two) : one ?? two),\n [one, two],\n );\n","import { RefCallback, useMemo, useEffect } from 'react';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useLatestRef } from './use-latest-ref';\n\nexport interface IResizeRefOptions {\n /** @default false */\n isDisabled?: boolean;\n onChange: (entry: ResizeObserverEntry) => void;\n}\n\nexport const useResizeRef = (options: IResizeRefOptions): RefCallback<Element> => {\n const optionsRef = useLatestRef(options);\n\n const { ref, disconnect } = useMemo(() => {\n const observer = new ResizeObserver(([entry]) => {\n const { current } = optionsRef;\n if (!current.isDisabled) {\n current?.onChange(entry);\n }\n });\n\n const observerRef: RefCallback<Element> = (node) => {\n observer.disconnect();\n if (isNotEmpty(node)) {\n observer.observe(node);\n }\n };\n\n return { ref: observerRef, disconnect: () => observer.disconnect() };\n }, [optionsRef]);\n\n useEffect(() => disconnect, [disconnect]);\n\n return ref;\n};\n"],"names":["colors","FONT_MAIN","FONT_MEDIUM","FONT_LABEL","FONT_DISABLED","GREY_ACTIVE","BORDER_MAIN","BORDER_LIGHT","GREY_HOVER","GREY_FOCUS","GREY_DISABLED","GREY_BACKGROUND","CLASSIC_WHITE","RED_ACTIVE","RED_HOVER","RED_WARNING","RED_WARNING_LIGHT","RED_BACKGROUND","ORANGE_BACKGROUND","GREEN_BACKGROUND","BLUE_BACKGROUND","GREEN_FOCUS","ORANGE_FOCUS","dimensions","BORDER_RADIUS_LARGE","BORDER_RADIUS_MEDIUM","BORDER_RADIUS_STD","BORDER_RADIUS_SMALL","BORDER_RADIUS_EXTRA_SMALL","CONTROL","HEIGHT","PADDING","ICON_SIZE","ICON_INNER_SIZE","ICON_GAP","Z_INDEX","CONTROL_INVALID","CONTROL_FOCUS","helpers","withAngle","angleSize","position","distance","display","marginTop","boxShadow","border","borderRadius","content","top","left","right","width","height","borderLeft","borderRight","borderBottom","withScrollBar","boxSizing","overflow","minHeight","backgroundColor","backgroundClip","scrollbarWidth","scrollbarColor","animations","defaultTransition","slideUp","opacity","transform","transition","transitionProperty","common","ThemeContext","createContext","ThemeProvider","Provider","useTheme","useContext","mixStyles","tweakStyles","flat","filter","isObject","useMixedStyles","baseStyles","useMemo","useThemeComponentStyles","componentName","components","isNotEmpty","isTweakStyle","key","startsWith","areStylesNotEmpty","Object","keys","every","getTweakStylesCache","mergedStyles","cache","WeakMap","styles","idx","next","at","has","set","get","getNext","first","rest","isArrayNotEmpty","mergeStyles","tweakStylesCache","useStyles","createUseStyles","createThemedStyles","second","isString","process","env","NODE_ENV","invalidClasses","console","error","checkStyles","theme","themeStyles","data","resultStyles","useDidMountEffect","effect","dependencies","isMountedRef","useRef","useEffect","unmount","current","minWidthModifier","name","enabled","phase","requires","fn","state","popper","minWidth","rects","reference","elements","style","offsetWidth","phoneInfo","countryEn","countryRu","countryCode","phoneMask","dialCode","dialCodePriority","fullCodes","areaCodes","mimeTypes","aac","abw","arc","avi","azw","bin","bmp","bz","bz2","csh","css","csv","doc","docx","eot","epub","gz","gif","htm","html","ico","ics","jar","jpeg","jpg","js","json","jsonld","mid","mjs","mp3","mpeg","mpkg","odp","ods","odt","oga","ogv","ogx","opus","otf","png","pdf","php","ppt","pptx","rar","rtf","sh","svg","swf","tar","tif","tiff","ts","ttf","txt","vsd","wav","weba","webm","webp","woff","woff2","xhtml","xls","xlsx","xml","xul","zip","findCountryByCode","countriesList","find","info","findCountryIndexByCode","findIndex","getCountryTextByLocale","country","locale","toLowerCase","sortCountriesByLocale","sort","countryA","countryB","localeCompare","checkSearchStringInCountry","searchString","checkValue","trim","replace","split","map","part","some","v","getFullPhone","phone","phoneNumber","getCountryCodeFromPhone","phoneWithCode","isStringEmpty","matchedCountries","fullCode","length","highestPriorityCountries","a","b","getPhoneObjFromString","fullPhone","newCountryCode","slice","DEFAULT_PHONE_MASK","getPhoneMask","mask","countrySettings","dialCodeLength","areaAndPhoneMask","substring","repeat","transformToKebab","string","result","forEach","char","getParentNode","element","nodeName","document","parentNode","host","hasExactParent","parent","getStyleComputedProperty","nodeType","getComputedStyle","getScrollParent","body","ownerDocument","overflowX","overflowY","test","getNumberInRange","value","min","max","Infinity","Math","formatStringNumber","val","separator","parts","join","formatNumber","isNaN","String","removeStringFormat","stringToNumber","trimmed","num","Number","setCaretPosition","elem","caretPos","selectionStart","focus","setSelectionRange","isSpaceChar","match","getNumberLength","n","toString","genericMemo","memo","useDropdown","isOpen","onDropdownClose","referenceElement","dropdownElement","options","dependenciesForPositionUpdating","shouldUsePopper","shouldRenderInBody","shouldHideOnScroll","scrollParent","canBeFlipped","modifiers","placement","flipOptions","popperData","scrollParentEl","addEventListener","removeEventListener","usePopper","offset","fallbackPlacements","update","useLatestRef","ref","useLayoutEffect","useIntersectionRef","observerOptions","optionsRef","disconnect","observer","IntersectionObserver","isIntersecting","isDisabled","onIntersection","onIntersectionEnd","node","observe","useIsMounted","isMounted","useCallback","useMergedRefs","refs","mergeRefs","checkElementParentsClassNames","className","classList","contains","parentElement","isElementOneOfParents","elToSearch","useOnClickOutsideWithRef","refOrGetter","handler","ignoreRef","useOnClickOutside","ignoreClassName","listener","event","isFunction","ignoreElem","target","isEmpty","useTweakStyles","innerStyles","currentComponentName","iconsMap","avatar","calendar","check","close","information","menu","minus","plus","search","root","alignItems","Icon","type","testId","classes","icon","icons","jsx","addDataAttributes","dangerouslySetInnerHTML","__html","renderIcon","minWidthRelativeToTrigger","size","apply","assign","floating","trigger","clickable","cursor","active","disabled","popup","zIndex","outline","arrow","animationEnd","animationStart","extend","visibility","WithPopup","children","middlewares","eventType","hoverDelay","popupOffset","arrowProps","popupData","shouldStopPropagation","isTriggerWrapped","shouldShowArrow","isMinWidthSameAsTrigger","hoverOptions","clickOptions","focusOptions","dismissOptions","transitionOptions","onToggle","setIsOpen","useState","isActive","arrowRef","handleToggle","stopPropagation","floatingStyles","context","useFloating","open","middleware","flip","fallbackAxisSideDirection","whileElementsMounted","autoUpdate","onOpenChange","hover","useHover","delay","handleClose","safePolygon","useFocus","click","useClick","dismiss","useDismiss","ancestorScroll","getFloatingProps","getReferenceProps","useInteractions","status","useTransitionStatus","duration","referenceProps","setReference","onClick","triggerElement","applyAction","triggerProps","jsxs","Fragment","clsx","FloatingPortal","setFloating","FloatingArrow","floatingContext","onClose","gap","fontSize","whiteSpace","padding","default","destructive","focused","disabledItem","spacer","withIconGap","paddingLeft","ITEM_HORIZONTAL_PADDING","flexShrink","flexGrow","chevron","ListItem","item","nestedItems","isFocused","shouldDrawSpacerAbove","shouldDrawSpacerBelow","view","addClickHandler","isReactNodeNotEmpty","listStyle","margin","textAlign","withPopupStyles","List","items","filteredItems","isHidden","i","itemProps","getTestId","itemOnClick","handleItemClick","account","accountName","accountNameOpened","accountChevron","accountChevronOpened","accountMenu","avatarIcon","marginRight","fullWidth","animationDelay","fadedDot","animationDuration","animationIterationCount","animationName","dot","DotsPreloader","DefaultPreloader","viewBox","xmlns","x1","y1","x2","y2","id","stopColor","stopOpacity","fill","d","stroke","strokeWidth","attributeName","attributeType","from","to","dur","begin","repeatCount","SvgPreloader","PreloaderIcon","preloaders","dots","logo","currentColor","color","ThemedPreloader","useCurrentColor","tweakDotsPreloaderStyles","tweakSvgPreloaderStyles","justifyContent","maxWidth","pointerEvents","primary","secondary","warning","text","custom","iconFromLeft","flexDirection","marginLeft","iconFromRight","onlyIcon","withIcon","s","letterSpacing","m","l","xl","inline","borderTopLeftRadius","borderBottomLeftRadius","loader","loading","dotsPreloaderStyles","tweakDotsPreloader","getPreloaderStyles","Button","forwardRef","isFullWidth","isInline","isLoading","shouldSkipTabNavigation","iconPosition","preloaderType","interactions","tweakPreloaderStyles","hasIcon","hasChildren","hasNoAction","tabIndex","checked","invalid","input","labelPositionLeft","Checkbox","isChecked","isSemiChecked","isInvalid","isReadonly","labelPosition","onSelect","hasAction","isSelected","readOnly","onChange","onKeyDown","getSelectKeyHandler","maxHeight","appearance","rgba","fontFamily","withMessages","horizontal","vertical","message","WithMessages","infoMessage","errorMessage","controlsDirection","shouldShowError","shouldShowInfo","addDataTestId","isControlWrapperIcon","iconItem","convertToControlWrapperIcon","iconComponent","controlWrapper","withValue","minContent","label","transformOrigin","activeLabel","requiredLabel","disabledLabel","wrapper","controls","startControls","paddingRight","iconInner","customIcon","startIcon","endIcon","activeIcon","clearIcon","withStartControls","borderBottomRightRadius","borderTopRightRadius","ControlWrapper","groupPlacement","isRequired","hasValue","onClear","startControlsWidth","setStartControlsWidth","startIcons","getArray","endIcons","hasStartIcons","hasEndIcons","hasClearButton","hasEndControls","startControlsRef","clientWidth","renderIconControl","shouldResetSize","iconType","index","iconProps","inputContent","outlineStyle","background","MozAppearance","WebkitAppearance","defaultWrapper","autoSizeWrapper","autoSized","withUnits","withLabel","fakeValue","units","alignSelf","focusedInput","disabledInput","invalidInput","InputBase","placeholder","autoComplete","inputMode","initialInputMode","isClearable","isAutoSized","maxLength","shouldFocusOnMount","shouldAlwaysShowPlaceholder","onPaste","onFocus","onBlur","maskPlaceholder","alwaysShowMask","beforeMaskedStateChange","inputProps","tweakControlWrapperStyles","setFocused","unitsWidth","setUnitsWidth","inputRef","mergedRef","includes","hasFocus","isArrayLikeNotEmpty","hasUnits","hasPlaceholder","isStringNotEmpty","unitsRef","props","currentTarget","async","InputMask","Input","tweakWithMessagesStyles","EMPTY_DATE_INPUT_VALUE","EMPTY_DATE_RANGE_INPUT_VALUE","DateInput","date","startDate","endDate","isRange","tweakInputStyles","nextState","selection","start","end","DatePickerBase","ReactDatePicker","handleClickOutside","constructor","super","this","handleCalendarClickOutside","doNothing","inputStyles","tweakControlWrapper","borderColor","SearchInput","ScrollIntoViewIfNeededDefaultProps","elementType","behavior","scrollMode","ScrollIntoViewIfNeeded","PureComponent","static","createRef","componentDidMount","handleScrollIntoViewIfNeeded","componentDidUpdate","isNowActive","scrollIntoViewIfNeeded","render","wrapperProps","createElement","DEFAULT_OPTION_INDEX","ALL_OPTION_INDEX","CELL_PADDING","withListHeader","paddingTop","withListFooter","paddingBottom","listHeader","listFooter","list","ROW_HEIGHT","cell","cellWithCheckbox","noMatchesLabel","defaultCell","checkboxStyles","SelectListItem","isMultiSelect","onOptionSelect","onToggleCheckbox","multiSelectContent","block","SelectList","focusedIndex","activeValue","defaultOptionLabel","loadingLabel","shouldScrollToList","areAllOptionsSelected","customListHeader","customListFooter","isOptionDisabled","allOptionsLabel","convertValueToString","convertValueToReactNode","convertValueToId","isHeaderNotEmpty","isFooterNotEmpty","optionsDisableMap","listOptions","option","activeOptionsIds","Set","opt","optionValue","defaultIsOptionDisabled","defaultConvertFunction","defaultCompareFunction","v1","v2","inputWrapper","listWrapper","withoutPopper","listWrapperInBody","activeArrow","counter","baseInputStyles","readonlyInputBaseStyles","readonlyInputStyles","readonlyMultiSelectStyles","getInputStyles","hasReadonlyInput","Select","header","footer","debounceTime","optionsMode","dropdownOptions","minSymbolsCountToOpenList","dropdownIcon","searchInput","onType","onOpen","compareValuesOnChange","optionsFilter","shouldRenderInList","shouldRenderSearchInputInList","searchInputProps","hasSearchInputInList","tweakSearchInputStyles","tweakSelectListStyles","isListOpen","setIsListOpen","areOptionsLoading","setAreOptionsLoading","hasDefaultOption","focusedListCellIndex","setFocusedListCellIndex","searchValue","setSearchValue","shouldShowDefaultOption","setShouldShowDefaultOption","strValue","shouldShowAllOption","filteredOptions","createFilter","availableOptions","shouldShowMultiSelectCounter","optionsIndexesForNavigation","push","concat","reduce","acc","cur","stringValue","showedStringValue","convertToId","getDefaultConvertToIdFunction","closeList","handleListClose","handleListOpen","handleChange","newValue","handleOptionSelect","blur","handleToggleOptionCheckbox","o","handleOnType","debounceHandleOnType","debounce","isImmediate","handleInputChange","hasEnoughSymbolsToSearch","handleBlur","relatedTarget","focusedCellIndex","searchInputEl","customHeader","listEl","attributes","curIndexInNavigation","code","indexToSelect","isThisValueAlreadySelected","valueIdToSelect","preventDefault","targetIndexInNavigation","Portal","container","btn","buttons","selectStyles","tweakSelectList","tweakInput","fontWeight","DatePickerHeader","months","prevMonthButtonDisabled","nextMonthButtonDisabled","changeYear","changeMonth","decreaseMonth","increaseMonth","tweakSelectStyles","years","Array","_","getYear","Date","getMonth","indexOf","PopperContainer","LocalesMap","ru","ruLocale","en","enLocale","getDateFormatter","dateFormat","format","getDateValueParser","inputValue","parse","areDatesEquals","date1","date2","isSameDay","day","dayInner","datepicker","DatePicker","selectedDate","minDate","maxDate","calendarStartDay","DEFAULT_DATE_FORMAT","monthsShown","strictParsing","fixedHeight","focusSelectedMonth","disabledKeyboardNavigation","shouldRenderPopperInBody","allowSameDay","shouldCloseOnSelect","showPreviousMonths","preventOpenOnFocus","popperModifiers","popperPlacement","todayButton","highlightDates","calendarContainer","dayClassName","customInput","CustomInput","customInputRef","renderCustomHeader","filterDate","onYearChange","onMonthChange","onCalendarOpen","onCalendarClose","onChangeDate","onChangeRange","tweakDateInputStyles","formatDate","parseDateValue","datePickerRef","componentRef","dateValue","setDateValue","setStart","startDateValue","setStartDateValue","setEnd","endDateValue","setEndDateValue","hasDateInputValue","dateInputProps","isDateInRange","isAfter","isBefore","handleChangeRange","setDateRangeValues","startValue","endValue","convertedStartDate","convertedEndDate","containerRef","placeholderText","showPopperArrow","popperClassName","calendarClassName","popperContainer","renderDayContents","baseProps","onChangeRaw","newStartDateValue","newStart","newEndDateValue","newEnd","isValid","handleChangeDateRangeInput","selected","selectsRange","LINK_REGEXP","button","textTransform","link","textDecoration","blockEvent","marginBottom","description","inputLabel","inset","dragged","fileList","flexWrap","columnGap","rowGap","FileInput","isDragAndDropDisabled","isReadOnly","isMultipleDisabled","accept","onAdd","isDragOver","setIsDragOver","handleAdd","files","handleDragStart","handleDragStop","dndHandlers","onDragOver","onDragEnter","onDragLeave","onDrop","dataTransfer","multiple","cancel","main","IconButton","restProps","tooltip","lineHeight","hint","Tooltip","TextWithTooltip","tooltipText","tooltipPosition","tooltipView","tooltipType","tooltipModifiers","tooltipOffsetOptions","tooltipSize","mouseEventType","tweakTooltipStyles","isTooltipVisible","setIsTooltipVisible","tooltipTimeout","setTooltipTimeout","hasDelay","clearTimeout","popperStyles","onMouseEnter","timeout","setTimeout","onMouseLeave","shouldShowTooltip","iconTypeMap","getFileExtensionByFilename","fileName","splitFileName","pop","getMimeTypeByFilename","ext","getFileIcon","mimeType","fileItemWrapper","fileIcon","textOverflow","fileNameContainer","preloader","metadata","actions","fileSize","themedPreloaderStyles","PERIODS","SelectLocales","clear","all","chosen","nothingFound","searchPlaceholder","FilterLocales","other","back","displayedFields","periods","THIS_MONTH","LAST_MONTH","THIS_YEAR","LAST_YEAR","CUSTOM","DEFAULT_PICKER_PROPS","PERIODS_GETTERS","today","startOfMonth","endOfMonth","sub","startOfYear","endOfYear","getLocale","custom2","merge","sortValues","arr","getPrevSpaces","NumberInput","canBeFloat","canBeNegative","defaultValue","precision","intPartPrecision","showedValue","setShowedValue","formatNumberWithDefault","isDeleteForwardAction","setIsDeleteForwardAction","setShowedValueWithDefault","oldValue","defaultCaretPos","numString","numberRegexp","RegExp","constructRegExp","hasDot","formattedValue","defaultPosition","isAdding","oldPrevSpaces","res","getNewCaretPosition","settings","settingsIcon","filterWithClearButton","clearButtonStyles","innerTextButtonStyles","gridTemplateColumns","autosize","userSelect","structuredClone","FilterInterval","labelName","withFieldNameInLabel","localeKey","fromInput","toInput","translates","tweakClearButtonStyles","toLocaleLowerCase","MultiSelectLocales","ITEM_HEIGHT","overscrollBehavior","labelChosen","withoutTopGap","panel","selectedItem","dropdownInput","searchInputStyles","MultiSelectList","isSearchEnabled","fetchOptions","isGroupingEnabled","getValueView","getValueId","getValueString","checkboxPosition","pageSize","searchMaxLength","tweakCheckboxStyles","keyCursorOn","setKeyCursorOn","allOptions","setAllOptions","setIsLoading","isLoadingOptionsOnScroll","setLoadingOptionsOnScroll","activePage","setActivePage","isMaxPage","setIsMaxPage","chosenValues","include","chosenValuesIds","unchosenOptions","handleSearchInputChange","response","changeSearchValue","checkboxValue","handleKeyDown","getIsValueChosen","handleLoadItemsOnScroll","page","prevState","initIntersectionObserver","entries","doFetchOptions","mainOptionsList","hasSelectedOptionsGroup","shouldShowNothingFoundMessage","shouldShowAllOptionsLabel","shouldShowPreloader","shouldShowOptionsList","lowerSearchValue","FilterMultiSelect","withClearButton","panelWithFooter","borderTop","wordBreak","FilterSelect","getSelectLocale","hasFooter","renderedItem","containerItem","btnRow","backButtonStyles","startDatePickerStyles","startDatePickerWithButtonStyles","endDatePickerStyles","endDatePickerWithButtonStyles","FilterWithDates","onStartBtnSubmit","onEndBtnSubmit","startPickerProps","endPickerProps","tweakBackButtonStyles","hasButtonsRow","tweakStartDatePickerStyles","tweakEndDatePickerStyles","isOpenFrom","setOpenFrom","isOpenTo","setOpenTo","dateLocale","enUS","isOpenCalendar","picker","filterSelectStyles","FilterWithPeriod","isPeriodPickerShown","setIsPeriodPickerShown","periodType","isDatePickerShown","setIsDatePickerShown","period","setPeriod","periodGetters","p","isArray","periodsList","getPeriodTranslate","refPeriodPicker","refDatePicker","newPeriod","handlePeriodChange","isDateOrEmpty","isDatePeriodValue","Filter","translatesLocaleKey","preparedValue","isPeriodValue","isMultiSelectValue","component","Component","warn","selectWrapper","selectBlock","selectLabel","chevronIcon","dropdown","FILTER_HEIGHT","FiltersPaneSearch","fields","field","hasClearSelectButton","isSelectSearchEnabled","isInputFocused","setIsInputFocused","refRoot","count","FilterValueView","getSelectedValueView","isMultiple","valueViewType","isDate","displayValue","getView","multiSelectValue","intervalValue","intervalValueFrom","intervalValueTo","intervals","hasFrom","hasTo","range","convertValue","getSelectedValue","rangeValue","rangeValueFrom","rangeValueTo","isContentNotEmpty","values","booleanItem","boolean","noValue","openNoValue","openWithValue","iconContainer","FilterWrapper","baseTweakStyles","tweakWrapperStyles","tweakWithPopupStyles","tweakFilterValueViewStyles","isBoolean","handleLabelClick","handleClearIconClick","hasClearIcon","customFlags","AB","OS","noFlag","Flag","countryFlagKey","toUpperCase","hasFlag","FlagComponent","Flags","CustomFlag","TableRenders","table","Root","Head","Body","Row","Header","Cell","divs","animation","bottom","Skeleton","hasHorizontalScrollBar","el","scrollWidth","formatCellContent","config","flexibleTableWrapper","borderCollapse","borderSpacing","scroll","head","loaderRow","loaderCell","headerRow","verticalAlign","headerSticky","headerSecond","nothingFoundRow","sticky","getTransition","skeleton","FlexibleTableCell","row","columnName","renderMode","isSecond","isSticky","isOldSticky","updateNestedComponent","valueComponentProps","cellAlign","cellVerticalAlign","shouldRenderDataId","shouldRenderComponent","onCellClick","isClickable","cellComponentProps","onSetNestedComponent","Table","editable","nestedComponent","FlexibleTableRow","columns","uniqueField","isFocusable","isFirstColumnSticky","rowAttributes","isExpandableRowComponentInitiallyOpen","rowRef","expandableRowComponent","onRowHover","onRowClick","tweakTableCellStyles","setNestedComponent","isEditable","isNestedComponentExpanded","cellKey","nestedComponentCellKey","rowData","fromEntries","attribute","closeNestedComponent","isExpandableComponentActive","isFocusedRow","isActiveRow","isRowNestedComponentExpanded","colSpan","docActions","neutral","inverse","counterWrapper","title","actionsWrapper","justifySelf","DocActions","checkBoxProps","order","disabledButton","errorButton","fixedPosition","innerOverlay","sideBar","overlay","modal","titleWithCloseButton","stickyFooterWrapper","stickyFooter","withoutFooter","withStickyFooter","footerWrapper","modalWrapper","closeButtonStyles","hasCircle","placeholderSmall","amount","indicator","arrowUp","indicatorDisabled","MultiSelectInput","required","listContainer","full","multiSelectListStyles","withText","withTitle","ok","searchContainer","searchIcon","flagList","listItem","selectedCountry","activeCountry","flag","countryName","emptyResult","PhoneInputCountryList","selectedCountryCode","sortedCountries","selectedCountryIdx","setCountriesList","lastListItemIdx","newSearchValue","newCountriesList","defaultKeyCursorOn","newSelectedCountryIdx","e","DEFAULT_VALUE","countrySelectContainer","disabledCountrySelect","up","invalidArrow","focusedBorder","invalidBorder","inputContainer","flex","flagListContainer","getSelectorLineStyle","activeElementData","SELECTOR_GAP","offsetLeft","optionWrapper","optionIcon","optionText","line","selector","gridAutoFlow","gridAutoColumns","SELECTOR_TOTAL_GAP","autoWidth","SMART_INPUT_REGEX_MAP","agencyName","surname","surnameRuEn","nameRuEn","email","digits","docNumber","benefitCert","CharactersMap","EmailCharactersMap","TransliterationMap","mapSymbols","str","regex","charactersMap","isTransliterationEnabled","symbol","mappedSymbol","SmartInput","smartType","regExp","isUpperCase","getUpperCaseIfNeeded","updateCaretPosition","clipboardData","getData","selectionEnd","mappedValue","newValueLength","rawValue","iconLeft","badge","xs","switch","labelLeft","labelRight","textarea","scrollPadding","scrollbarGutter","resize","gridTemplateRows","gridArea","overflowWrap","symbolsCount","symbolsCountError","symbolsCountActive","TextArea","counterPosition","hasCounter","shouldTrimAfterMaxLength","rows","textAreaProps","shouldShowCounter","counterString","hasLabel","autoFocus","bold","circle","reverseContent","preloaderStyles","TextButton","isBold","hasCircleUnderIcon","tweakListStyles","nameRef","dropdownRef","isMenuOpen","setIsMenuOpen","toggleMenu","CSSTransition","in","unmountOnExit","classNames","enter","enterActive","exit","exitActive","moreTitle","lessTitle","truncateIndex","isAlwaysOpen","isTooShort","linkText","textWithNoLink","shortText","lastIndexOf","href","rel","fileInfo","areActionsDisabled","shouldShowSize","itemSize","removeIcon","onRemove","tweakIconButtonStyles","hasRemoveButton","filesize","filtersConfig","enabledFilters","onChangeFilters","onSettingsButtonClick","tweakFilterWrapperStyles","filtersKeys","shouldShowClearButton","clearButton","isLast","filterKey","currentValue","filterWrapper","requiredFilledFilters","headerContent","enabledColumns","activeRows","isHorizontallyScrollable","isRowFocusable","infinityScrollConfig","infinityScrollConfigDeprecated","refForScroll","nothingFoundContent","shouldRenderHeader","onHeadClick","isRowInitiallyOpen","tweakTableRowStyles","scrollRef","getTableRowProps","getDataScrollAttributeSetter","setter","dataset","removeAttribute","setHasScrollBarAttribute","setIsScrolledAttribute","scrollLeft","onInfinityScroll","isEnabled","isLastPage","intersectionRef","shouldShowNothingFound","scrollContainer","scrollHandler","resizeHandler","window","activeRowsSet","titleAlign","indexMap","docActionsProps","mountOnEnter","step","isEditDisabled","isIncreaseDisabled","isDecreaseDisabled","isNumberInteger","isFooterSticky","buttonsAlign","hasCloseButton","hasOverlay","shouldCloseOnOverlayClick","shouldCloseOnEsc","shouldBlockScroll","tweakCloseButtonStyles","isClickOnOverlay","setIsClickOnOverlay","isModalOpen","handleEscClose","RemoveScroll","forwardProps","onMouseDown","onMouseUp","hasDefaultStateBackground","onMenuOpen","onMenuClose","isMenuShown","setIsMenuShown","isButtonDisabled","handleCloseMenu","isShown","corners","tweakMultiSelectListStyles","handleOnClose","renderTrigger","listSize","isArrayEmpty","hasText","hasTitle","isDefaultType","codeSearchPlaceholder","tweakCountryListStyles","isSomeFullCodeValid","isDialCodeValid","newPhoneInfo","groupName","htmlFor","hasSameOptionsWidth","optionsValues","elementsData","setElementsData","listRef","hasDuplicates","querySelectorAll","optionId","isDisabledOption","isActiveOption","textTooltip","infoTooltip","shouldCloseOnClick","onTimeEnd","isFinite","timeoutId","params","scrollHeight","scrollHeightWithElement","hidden","scrollHeightWithoutElement","isOffscreen","elRect","getBoundingClientRect","scrollParentRect","topOffset","clientHeight","one","two","ResizeObserver","entry"],"mappings":"i4DAEaA,EAAS,CACpBC,UAAW,UACXC,YAAa,UACbC,WAAY,UACZC,cAAe,UACfC,YAAa,UACbC,YAAa,UACbC,aAAc,UACdC,WAAY,UACZC,WAAY,UACZC,cAAe,UACfC,gBAAiB,UACjBC,cAAe,UACfC,WAAY,UACZC,UAAW,UACXC,YAAa,UACbC,kBAAmB,UACnBC,eAAgB,UAChBC,kBAAmB,UACnBC,iBAAkB,UAClBC,gBAAiB,UAEjBC,YAAa,UACbC,aAAc,WAGHC,EAAa,CACxBC,oBAAqB,GACrBC,qBAAsB,GACtBC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAE3BC,QAAS,CACPC,OAAQ,GACRC,QAAS,GACTC,UAAW,GACXC,gBAAiB,GACjBC,SAAU,GAGZC,QAAS,CACPC,gBAAiB,EACjBC,cAAe,IAINC,EAAU,CACrBC,UAAW,CAACC,EAAY,EAAGC,EAA6B,OAAQC,EAAW,OAAA,CACzEC,QAAS,eACTF,SAAU,WACVG,UAAuB,EAAZJ,EAAgB,EAC3BK,UAAW,mCACXC,OAAQ,CAAC,QAAS,EAAG9C,EAAOM,aAC5ByC,aAAcxB,EAAWK,0BAEzB,WAAY,CACVoB,QAAS,KACTP,SAAU,WACVQ,KAAMT,EACNU,KAAmB,SAAbT,GAAuBC,EAC7BS,MAAoB,UAAbV,GAAwBC,EAC/BU,MAAO,EACPC,OAAQ,EACRC,WAAY,CAACd,EAAW,QAAS,eACjCe,YAAa,CAACf,EAAW,QAAS,eAClCgB,aAAc,CAAChB,EAAW,QAASxC,EAAOM,cAG5C,UAAW,CACT0C,QAAS,KACTP,SAAU,WACVQ,IAAkB,EAAZT,EACNU,KAAmB,SAAbT,GAAuBC,EAAW,EACxCS,MAAoB,UAAbV,GAAwBC,EAAW,EAC1CU,MAAO,EACPC,OAAQ,EACRC,WAAY,CAACd,EAAY,EAAG,QAAS,eACrCe,YAAa,CAACf,EAAY,EAAG,QAAS,eACtCgB,aAAc,CAAChB,EAAY,EAAG,QAASxC,EAAOY,kBAIlD6C,cAAe,CACbC,UAAW,aACXC,SAAU,OAGV,0CAA2C,CACzC,2BAA4B,OAC5B,4BAA6B,OAE7B,uBAAwB,CACtBP,MAAO,gCACPC,OAAQ,iCAER,UAAW,CACTD,MAAO,EACPQ,UAAW,GACXd,OAAQ,CAAC,EAAG,QAAS,eACrBC,aAAc,EACdc,gBAAiB7D,EAAOM,YACxBwD,eAAgB,cAEhB,UAAW,CACTD,gBAAiB7D,EAAOK,cAI5B,gBAAiB,CACfwD,gBAAiB,eAGnB,WAAY,CACVA,gBAAiB,iBAMvB,8CAA+C,CAC7CE,eAAgB,OAChBC,eAAgB,GAAGhE,EAAOM,6BASnB2D,EAAa,CACxBC,kBAAmB,oBACnBC,QAAS,CACP,iBAAkB,CAChBC,QAAS,EACTC,UAAW,oBAGb,wBAAyB,CACvBD,QAAS,EACTC,UAAW,kBACXC,WAAY,oBACZC,mBAAoB,sBAGtB,uBAAwB,CACtBH,QAAS,EACTC,UAAW,mBAGb,gBAAiB,CACfD,QAAS,EACTC,UAAW,mBACXC,WAAY,oBACZC,mBAAoB,wBAYbC,EAA4B,CACvCP,aACAjE,SACAuB,aACAe,WCzKWmC,EAAeC,EAAAA,cAA2BF,GAE1CG,EAAgBF,EAAaG,SAE7BC,EAAW,IAAmBC,EAAAA,WAAWL,GCJzCM,EAAY,IAAOC,IAC9BA,EAAYC,OAAOC,OAAOC,EAAAA,UAEfC,EAAiB,CAC5BC,EACAL,IAEAM,UAAQ,IAAMP,EAAUM,EAAYL,GAAc,CAACK,EAAYL,ICCpDO,EACXC,IAEA,MAAMC,WAAEA,GAAeZ,IACvB,OAAOa,EAAAA,WAAWF,GAAkBC,IAAaD,QAA2B,GAGxEG,EAAgBC,GAAyBA,EAAIC,WAAW,SAExDC,EAAwBd,GAC5BU,EAAAA,WAAWV,KAAiBe,OAAOC,KAAKhB,GAAaiB,MAAMN,GAavDO,EAAsB,KAC1B,IAAIC,EACJ,MAAMC,MAAYC,QAUlB,MAAO,CAACC,EAAQC,EAAM,KACpB,MAAMC,EAAOF,EAAOG,GAAGF,GACvB,GAAIb,EAAAA,WAAWc,GACb,MAXY,CAACA,IACVJ,EAAMM,IAAIF,IACbJ,EAAMO,IAAIH,EAAMN,KAGXE,EAAMQ,IAAIJ,IAMRK,CAAQL,EAARK,CAAcP,EAAQC,EAAM,GAGrC,IAAKb,EAAAA,WAAWS,GAAe,CAC7B,MAAOW,KAAUC,GAAQT,EACzBH,EAAea,EAAAA,gBAAgBD,GAAQE,EAAAA,YAAYH,KAAUC,GAAQD,CACvE,CAEA,OAAOX,IAILe,EAAmBhB,IACnBiB,EAAYC,EAAAA,gBAAyBpC,GAAgBA,GAE9CqC,EAEQ,CAACP,EAAOQ,KAC3B,MAAM9B,EAAgB+B,EAAAA,SAAST,GAASA,OAAQ,EAC1CR,EAASgB,GAAWR,EAM1B,MAJ6B,eAAzBU,QAAQC,IAAIC,UA/CE,EAACpB,EAAyBd,EAAgB,oBAC5D,MAAMmC,EAAiB5B,OAAOC,KAAKM,GAAQpB,OAAOS,GAE9CqB,EAAAA,gBAAgBW,IAClBC,QAAQC,MACN,GAAGrC,8DAA0EmC,MA2C/EG,CAAYxB,EAAQd,GAGf,EAAGuC,QAAO/C,cAAc+C,MAC7B,MAAMC,EAAczC,EAAuCC,GAErDyC,EAAO3C,EAAAA,QAAQ,KACnB,MAAM4C,EAAenD,EAAUuB,EAAQ0B,EAAahD,GAAaE,OAAOY,GACxE,MAAO,CAAEiC,MAAOb,EAAiBgB,KAChC,CAACF,EAAahD,IAEjB,OAAOmC,EAAUc,KCjFRE,EAAoB,CAACC,EAAwBC,KACxD,MAAMC,EAAeC,EAAAA,QAAO,GAC5BC,EAAAA,UAAU,KACR,IAAIC,EAMJ,OALIH,EAAaI,QACfD,EAAUL,IAEVE,EAAaI,SAAU,EAElB,UACW,IAAZD,GACFA,MAGHJ,ICdQM,EAAgD,CAC3DC,KAAM,WACNC,SAAS,EACTC,MAAO,cACPC,SAAU,CAAC,iBACXC,GAAI,EAAGC,YACLA,EAAM3C,OAAO4C,OAAOC,SAAW,GAAGF,EAAMG,MAAMC,UAAUjG,WAE1DgF,OAAQ,EAAGa,YACTA,EAAMK,SAASJ,OAAOK,MAAMJ,SAAW,GACpCF,EAAMK,SAASD,UAA0BG,kBCVnCC,EAA0B,CACrC,CACEC,UAAW,WACXC,UAAW,UACXC,YAAa,KACbC,UAAW,kBACXC,SAAU,IACVC,iBAAkB,EAClBC,UAAW,CAAC,MAEd,CACEN,UAAW,cACXC,UAAW,aACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,SACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,sBACXC,UAAW,oBACXC,YAAa,KACbE,SAAU,OACVE,UAAW,CAAC,SAEd,CACEN,UAAW,YACXC,UAAW,YACXC,YAAa,KACbE,SAAU,KACVD,UAAW,gBACXG,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,YACXC,UAAW,YACXC,YAAa,KACbE,SAAU,KACVD,UAAW,iBACXE,iBAAkB,EAClBE,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MAC7DD,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,SAEjF,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,aACXC,UAAW,cACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,SACXC,YAAa,KACbE,SAAU,OACVE,UAAW,CAAC,SAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,aACXC,UAAW,YACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,OACVE,UAAW,CAAC,SAEd,CACEN,UAAW,UACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVD,UAAW,iBACXG,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,KACVD,UAAW,eACXG,UAAW,CAAC,OAEd,CACEN,UAAW,SACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,yBACXC,UAAW,uBACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,WACXC,YAAa,KACbE,SAAU,KACVD,UAAW,iBACXG,UAAW,CAAC,OAEd,CACEN,UAAW,iCACXC,UAAW,2CACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,oBACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,eACXC,UAAW,eACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,SACXC,YAAa,KACbE,SAAU,IACVD,UAAW,iBACXE,iBAAkB,EAClBE,UAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFD,UAAW,CACT,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAGJ,CACEN,UAAW,aACXC,UAAW,aACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,wBACXC,UAAW,gCACXC,YAAa,KACbE,SAAU,MACVC,iBAAkB,EAClBC,UAAW,CAAC,QAEd,CACEN,UAAW,2BACXC,UAAW,oCACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,OACXC,UAAW,MACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,QACXC,UAAW,OACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,KACVD,UAAW,eACXG,UAAW,CAAC,OAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,SACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,wBACXC,UAAW,mBACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,aACXC,UAAW,aACXC,YAAa,KACbE,SAAU,MACVD,UAAW,YACXG,UAAW,CAAC,QAEd,CACEN,UAAW,gBACXC,UAAW,cACXC,YAAa,KACbE,SAAU,MACVD,UAAW,cACXG,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,OACXC,UAAW,OACXC,YAAa,KACbE,SAAU,KACV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cACXG,UAAW,CAAC,OAEd,CACEN,UAAW,gBACXC,UAAW,oBACXC,YAAa,KACbE,SAAU,IACVD,UAAW,iBACXE,iBAAkB,EAClBE,UAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFD,UAAW,CACT,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,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"}
1
+ {"version":3,"file":"true-react-common-ui-kit.umd.cjs","sources":["../src/theme/common.ts","../src/theme/Provider.tsx","../src/hooks/use-mixed-styles.ts","../src/theme/helpers.ts","../src/hooks/use-did-mount-effect.ts","../src/helpers/popper-helpers.ts","../src/constants/phone-info.ts","../src/constants/mime-types.ts","../src/helpers/phone.ts","../src/helpers/misc.ts","../src/hooks/use-dropdown.ts","../src/hooks/use-latest-ref.ts","../src/hooks/use-intersection-ref.ts","../src/hooks/use-resize-ref.ts","../src/hooks/use-is-mounted.ts","../src/hooks/use-merged-refs.ts","../src/hooks/use-on-click-outside.ts","../src/hooks/use-tweak-styles.ts","../src/components/Icon/icons/index.ts","../src/components/Icon/icons/avatar.svg?raw","../src/components/Icon/icons/calendar.svg?raw","../src/components/Icon/icons/check.svg?raw","../src/components/Icon/icons/chevron-down-small.svg?raw","../src/components/Icon/icons/chevron-down.svg?raw","../src/components/Icon/icons/chevron-left.svg?raw","../src/components/Icon/icons/chevron-right.svg?raw","../src/components/Icon/icons/close-large.svg?raw","../src/components/Icon/icons/close-window.svg?raw","../src/components/Icon/icons/close.svg?raw","../src/components/Icon/icons/file-excel.svg?raw","../src/components/Icon/icons/file-image.svg?raw","../src/components/Icon/icons/file-other.svg?raw","../src/components/Icon/icons/file-pdf.svg?raw","../src/components/Icon/icons/file-word.svg?raw","../src/components/Icon/icons/file-xml.svg?raw","../src/components/Icon/icons/file-zip.svg?raw","../src/components/Icon/icons/filter.svg?raw","../src/components/Icon/icons/information.svg?raw","../src/components/Icon/icons/menu.svg?raw","../src/components/Icon/icons/minus.svg?raw","../src/components/Icon/icons/plus.svg?raw","../src/components/Icon/icons/search.svg?raw","../src/components/Icon/icons/status-error.svg?raw","../src/components/Icon/icons/status-info.svg?raw","../src/components/Icon/icons/status-not-ok.svg?raw","../src/components/Icon/icons/status-ok.svg?raw","../src/components/Icon/icons/status-warning.svg?raw","../src/components/Icon/icons/trash-can.svg?raw","../src/components/Icon/Icon.styles.ts","../src/components/Icon/Icon.tsx","../src/components/Icon/snippet.tsx","../src/components/WithPopup/helpers.ts","../src/components/WithPopup/WithPopup.styles.ts","../src/components/WithPopup/WithPopup.tsx","../src/components/WithPopup/constants.ts","../src/components/List/components/ListItem/ListItem.styles.ts","../src/components/List/components/ListItem/ListItem.tsx","../src/components/List/List.styles.ts","../src/components/List/List.tsx","../src/components/AccountInfo/AccountInfo.styles.ts","../src/components/AddButton/AddButton.styles.ts","../src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts","../src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx","../src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx","../src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts","../src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx","../src/components/ThemedPreloader/ThemedPreloader.styles.ts","../src/components/ThemedPreloader/ThemedPreloader.tsx","../src/components/Button/Button.styles.ts","../src/components/Button/Button.tsx","../src/components/Checkbox/Checkbox.styles.ts","../src/components/Checkbox/Checkbox.tsx","../src/components/CloseButton/CloseButton.styles.ts","../src/components/CssBaseline/CssBaseline.styles.ts","../src/components/WithMessages/WithMessages.styles.ts","../src/components/WithMessages/WithMessages.tsx","../src/components/ControlWrapper/helpers.ts","../src/components/ControlWrapper/ControlWrapper.styles.ts","../src/components/ControlWrapper/ControlWrapper.tsx","../src/components/Input/Input.styles.ts","../src/components/Input/InputBase.tsx","../src/components/Input/Input.tsx","../src/components/DateInput/constants.ts","../src/components/DateInput/DateInput.styles.ts","../src/components/DateInput/DateInput.tsx","../src/components/DatePicker/components/DatePickerBase/DatePickerBase.tsx","../src/components/SearchInput/SearchInput.styles.ts","../src/components/SearchInput/SearchInput.tsx","../src/components/ScrollIntoViewIfNeeded/constants.ts","../src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts","../src/components/Select/constants.ts","../src/components/Select/components/SelectList/SelectList.styles.ts","../src/components/Select/components/SelectListItem/SelectListItem.styles.ts","../src/components/Select/components/SelectListItem/SelectListItem.tsx","../src/components/Select/components/SelectList/SelectList.tsx","../src/components/Select/helpers.ts","../src/components/Select/Select.styles.ts","../src/components/Select/Select.tsx","../src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.ts","../src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.tsx","../src/components/DatePicker/components/PopperContainer/PopperContainer.tsx","../src/components/DatePicker/constants.ts","../src/components/DatePicker/helpers.ts","../src/components/DatePicker/DatePicker.styles.ts","../src/components/DatePicker/DatePicker.tsx","../src/components/Description/constants.ts","../src/components/Description/Description.styles.ts","../src/components/FileInput/helpers.ts","../src/components/FileInput/FileInput.styles.ts","../src/components/FileInput/FileInput.tsx","../src/components/IconButton/IconButton.styles.ts","../src/components/IconButton/IconButton.tsx","../src/components/Tooltip/Tooltip.styles.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/TextWithTooltip/TextWithTooltip.styles.ts","../src/components/TextWithTooltip/TextWithTooltip.tsx","../src/components/FileItem/constants.ts","../src/components/FileItem/helpers.ts","../src/components/FileItem/FileItem.styles.ts","../src/components/FiltersPane/constants.ts","../src/components/FiltersPane/helpers.ts","../src/components/NumberInput/helpers.ts","../src/components/NumberInput/NumberInput.tsx","../src/components/FiltersPane/FiltersPane.styles.ts","../src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts","../src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx","../src/components/MultiSelectList/constants.ts","../src/components/MultiSelectList/helpers.ts","../src/components/MultiSelectList/MultiSelectList.styles.ts","../src/components/MultiSelectList/MultiSelectList.tsx","../src/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.tsx","../src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts","../src/components/FiltersPane/components/FilterSelect/FilterSelect.tsx","../src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts","../src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx","../src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.ts","../src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx","../src/components/FiltersPane/components/Filter/helpers.ts","../src/components/FiltersPane/components/Filter/Filter.tsx","../src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts","../src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.tsx","../src/components/FiltersPane/components/FilterValueView/FilterValueView.styles.tsx","../src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx","../src/components/FiltersPane/components/FilterWrapper/helpers.ts","../src/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.ts","../src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx","../src/components/Flag/customFlags/AB.svg?raw","../src/components/Flag/customFlags/customFlags.ts","../src/components/Flag/customFlags/OS.svg?raw","../src/components/Flag/Flag.styles.ts","../src/components/Flag/Flag.tsx","../src/components/FlexibleTable/constants.ts","../src/components/Skeleton/Skeleton.styles.ts","../src/components/Skeleton/Skeleton.tsx","../src/components/FlexibleTable/helpers.ts","../src/components/FlexibleTable/FlexibleTable.styles.ts","../src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts","../src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx","../src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts","../src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx","../src/components/FloatDocActions/components/DocActions/DocActions.styles.ts","../src/components/FloatDocActions/components/DocActions/DocActions.tsx","../src/components/FloatDocActions/FloatDocActions.styles.ts","../src/components/IncrementInput/IncrementInput.styles.ts","../src/components/Modal/Modal.styles.ts","../src/components/MoreMenu/MoreMenu.styles.ts","../src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.ts","../src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx","../src/components/MultiSelect/MultiSelect.styles.ts","../src/components/Notification/Notification.styles.ts","../src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.ts","../src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx","../src/components/PhoneInput/constants.ts","../src/components/PhoneInput/PhoneInput.styles.ts","../src/components/RadioButton/RadioButton.styles.ts","../src/components/Selector/Selector.styles.ts","../src/components/SmartInput/constants.ts","../src/components/SmartInput/helpers.ts","../src/components/SmartInput/SmartInput.tsx","../src/components/Status/Status.styles.ts","../src/components/Switch/Switch.styles.ts","../src/components/TextArea/TextArea.styles.ts","../src/components/TextArea/TextArea.tsx","../src/components/TextButton/TextButton.styles.ts","../src/components/TextButton/TextButton.tsx","../src/components/TextWithInfo/TextWithInfo.styles.ts","../src/components/Toaster/Toaster.styles.ts","../src/components/NewMoreMenu/NewMoreMenu.styles.ts","../src/components/WithTooltip/WithTooltip.styles.ts","../src/components/AccountInfo/AccountInfo.tsx","../src/components/AccountInfo/constants.ts","../src/components/AddButton/AddButton.tsx","../src/components/CloseButton/CloseButton.tsx","../src/components/CssBaseline/CssBaseline.tsx","../src/components/FloatDocActions/components/DocActions/constants.ts","../src/components/Description/Description.tsx","../src/components/FileItem/FileItem.tsx","../src/components/FiltersPane/FiltersPane.tsx","../src/components/FlexibleTable/FlexibleTable.tsx","../src/components/FloatDocActions/FloatDocActions.tsx","../src/components/FloatDocActions/constants.ts","../src/components/ControlWrapper/constants.ts","../src/components/IncrementInput/IncrementInput.tsx","../src/components/Modal/Modal.tsx","../src/components/MoreMenu/MoreMenu.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/NewMoreMenu/NewMoreMenu.tsx","../src/components/Notification/Notification.tsx","../src/components/PhoneInput/PhoneInput.tsx","../src/components/RadioButton/RadioButton.tsx","../src/components/Selector/Selector.tsx","../src/components/Status/Status.tsx","../src/components/Switch/Switch.tsx","../src/components/TextWithInfo/TextWithInfo.tsx","../src/components/Toaster/Toaster.tsx","../src/components/Toaster/constants.ts","../src/components/WithTooltip/WithTooltip.tsx","../src/hooks/use-merge.ts"],"sourcesContent":["import { IUiKitHelpers, IUiKitTheme } from './types';\n\nexport const colors = {\n FONT_MAIN: '#222a37',\n FONT_MEDIUM: '#505f79',\n FONT_LABEL: '#7a869a',\n FONT_DISABLED: '#95a0b3',\n GREY_ACTIVE: '#95a0b3',\n BORDER_MAIN: '#d0d6e1',\n BORDER_LIGHT: '#dde3ed',\n GREY_HOVER: '#dde3ed',\n GREY_FOCUS: '#eceff5',\n GREY_DISABLED: '#eceff5',\n GREY_BACKGROUND: '#f6f8fc',\n CLASSIC_WHITE: '#ffffff',\n RED_ACTIVE: '#912e34',\n RED_HOVER: '#c13e45',\n RED_WARNING: '#f14d56',\n RED_WARNING_LIGHT: '#ff6261',\n RED_BACKGROUND: '#feedee',\n ORANGE_BACKGROUND: '#fff4e9',\n GREEN_BACKGROUND: '#f4f9e6',\n BLUE_BACKGROUND: '#ebf1ff',\n // временные константы пока не будет полной темизации\n GREEN_FOCUS: '#97ba1e',\n ORANGE_FOCUS: '#ff991f',\n} as const;\n\nexport const dimensions = {\n BORDER_RADIUS_LARGE: 16,\n BORDER_RADIUS_MEDIUM: 12,\n BORDER_RADIUS_STD: 8,\n BORDER_RADIUS_SMALL: 6,\n BORDER_RADIUS_EXTRA_SMALL: 4,\n\n CONTROL: {\n HEIGHT: 48,\n PADDING: 16,\n ICON_SIZE: 24,\n ICON_INNER_SIZE: 24,\n ICON_GAP: 8,\n },\n\n Z_INDEX: {\n CONTROL_INVALID: 1,\n CONTROL_FOCUS: 2,\n },\n} as const;\n\nexport const helpers = {\n withAngle: (angleSize = 6, position: 'left' | 'right' = 'left', distance = 100) => ({\n display: 'inline-block',\n position: 'relative',\n marginTop: angleSize * 2 - 1,\n boxShadow: '0 8px 20px 0 rgba(0, 0, 0, 0.04)',\n border: ['solid', 1, colors.BORDER_MAIN],\n borderRadius: dimensions.BORDER_RADIUS_EXTRA_SMALL,\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n top: -angleSize,\n left: position === 'left' && distance,\n right: position === 'right' && distance,\n width: 0,\n height: 0,\n borderLeft: [angleSize, 'solid', 'transparent'],\n borderRight: [angleSize, 'solid', 'transparent'],\n borderBottom: [angleSize, 'solid', colors.BORDER_MAIN],\n },\n\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n top: -angleSize + 1,\n left: position === 'left' && distance + 1,\n right: position === 'right' && distance + 1,\n width: 0,\n height: 0,\n borderLeft: [angleSize - 1, 'solid', 'transparent'],\n borderRight: [angleSize - 1, 'solid', 'transparent'],\n borderBottom: [angleSize - 1, 'solid', colors.CLASSIC_WHITE],\n },\n }),\n\n withScrollBar: {\n boxSizing: 'border-box',\n overflow: 'auto',\n\n // Chromium\n '@supports selector(::-webkit-scrollbar)': {\n '--webkit-scrollbar-width': '10px',\n '--webkit-scrollbar-height': '10px',\n\n '&::-webkit-scrollbar': {\n width: 'var(--webkit-scrollbar-width)',\n height: 'var(--webkit-scrollbar-height)',\n\n '&-thumb': {\n width: 6,\n minHeight: 30,\n border: [2, 'solid', 'transparent'],\n borderRadius: 5,\n backgroundColor: colors.BORDER_MAIN,\n backgroundClip: 'padding-box',\n\n '&:hover': {\n backgroundColor: colors.GREY_ACTIVE,\n },\n },\n\n '&-track-piece': {\n backgroundColor: 'transparent',\n },\n\n '&-corner': {\n backgroundColor: 'transparent',\n },\n },\n },\n\n // Firefox\n '@supports not selector(::-webkit-scrollbar)': {\n scrollbarWidth: 'thin',\n scrollbarColor: `${colors.BORDER_MAIN} transparent`,\n },\n },\n} satisfies IUiKitHelpers;\n\nexport const SLIDE_UP_ANIMATION_DURATION = 150;\nconst SLIDE_UP_POSITION_START = 15;\nconst SLIDE_UP_POSITION_END = 0;\n\nexport const animations = {\n defaultTransition: '0.25s ease-in-out',\n slideUp: {\n 'slide-up-enter': {\n opacity: 0,\n transform: `translateY(${SLIDE_UP_POSITION_START}px)`,\n },\n\n 'slide-up-enter-active': {\n opacity: 1,\n transform: `translateY(${SLIDE_UP_POSITION_END}px)`,\n transition: `${SLIDE_UP_ANIMATION_DURATION}ms ease-in-out`,\n transitionProperty: 'opacity, transform',\n },\n\n 'slide-up-exit-active': {\n opacity: 1,\n transform: `translateY(${SLIDE_UP_POSITION_END}px)`,\n },\n\n 'slide-up-exit': {\n opacity: 0,\n transform: `translateY(${SLIDE_UP_POSITION_START}px)`,\n transition: `${SLIDE_UP_ANIMATION_DURATION}ms ease-in-out`,\n transitionProperty: 'opacity, transform',\n },\n },\n};\n\nexport interface ICommonUiKitTheme extends IUiKitTheme {\n colors: typeof colors;\n dimensions: typeof dimensions;\n helpers: typeof helpers;\n animations: typeof animations;\n}\n\nexport const common: ICommonUiKitTheme = {\n animations,\n colors,\n dimensions,\n helpers,\n};\n","import { createContext, useContext } from 'react';\nimport { common } from './common';\nimport type { IUiKitTheme } from './types';\n\nexport const ThemeContext = createContext<IUiKitTheme>(common);\n\nexport const ThemeProvider = ThemeContext.Provider;\n\nexport const useTheme = (): IUiKitTheme => useContext(ThemeContext);\n","import { useMemo } from 'react';\nimport { isObject } from '@true-engineering/true-react-platform-helpers';\nimport type { IMixedStyles } from '../theme';\n\nexport const mixStyles = <T>(...tweakStyles: Array<IMixedStyles<T>>): Array<NonNullable<T>> =>\n tweakStyles.flat().filter(isObject) as Array<NonNullable<T>>;\n\nexport const useMixedStyles = <StyleSheet>(\n baseStyles?: IMixedStyles<StyleSheet>,\n tweakStyles?: IMixedStyles<StyleSheet>,\n): Array<NonNullable<StyleSheet>> =>\n useMemo(() => mixStyles(baseStyles, tweakStyles), [baseStyles, tweakStyles]);\n","import { useMemo } from 'react';\nimport { createUseStyles } from 'react-jss';\nimport {\n isArrayNotEmpty,\n isNotEmpty,\n isString,\n mergeStyles,\n} from '@true-engineering/true-react-platform-helpers';\nimport { mixStyles } from '../hooks/use-mixed-styles';\nimport { useTheme } from './Provider';\nimport { IComponentName, IStyles, IUseStyles } from './types';\n\nexport const useThemeComponentStyles = <T>(\n componentName?: IComponentName,\n): Partial<T> | undefined => {\n const { components } = useTheme();\n return isNotEmpty(componentName) ? (components?.[componentName] as never) : undefined;\n};\n\nconst isTweakStyle = (key: string): boolean => key.startsWith('tweak');\n\nconst areStylesNotEmpty = <T>(tweakStyles?: T): tweakStyles is NonNullable<T> =>\n isNotEmpty(tweakStyles) && !Object.keys(tweakStyles).every(isTweakStyle);\n\nconst checkStyles = (styles: IStyles<string>, componentName = 'LocalComponent'): void => {\n const invalidClasses = Object.keys(styles).filter(isTweakStyle);\n\n if (isArrayNotEmpty(invalidClasses)) {\n console.error(\n `${componentName}: Названия классов не должны начинаться со слова \"tweak\": ${invalidClasses}`,\n );\n }\n};\n\ntype TweakStylesCache = (styles: object[], idx?: number) => object | undefined;\nconst getTweakStylesCache = (): TweakStylesCache => {\n let mergedStyles: object | undefined;\n const cache = new WeakMap<object, TweakStylesCache>();\n\n const getNext = (next: object) => {\n if (!cache.has(next)) {\n cache.set(next, getTweakStylesCache());\n }\n\n return cache.get(next)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n };\n\n return (styles, idx = 0) => {\n const next = styles.at(idx);\n if (isNotEmpty(next)) {\n return getNext(next)(styles, idx + 1);\n }\n\n if (!isNotEmpty(mergedStyles)) {\n const [first, ...rest] = styles;\n mergedStyles = isArrayNotEmpty(rest) ? mergeStyles(first, ...rest) : first;\n }\n\n return mergedStyles;\n };\n};\n\nconst tweakStylesCache = getTweakStylesCache();\nconst useStyles = createUseStyles<string>((tweakStyles) => tweakStyles as never);\n\nexport const createThemedStyles: <C extends string>(\n ...args: [IStyles<C>] | [IComponentName, IStyles<C>]\n) => IUseStyles<C> = (first, second?) => {\n const componentName = isString(first) ? first : undefined;\n const styles = second! ?? first; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n if (process.env.NODE_ENV !== 'production') {\n checkStyles(styles, componentName);\n }\n\n return ({ theme, tweakStyles = theme }) => {\n const themeStyles = useThemeComponentStyles<typeof styles>(componentName);\n\n const data = useMemo(() => {\n const resultStyles = mixStyles(styles, themeStyles, tweakStyles).filter(areStylesNotEmpty);\n return { theme: tweakStylesCache(resultStyles) };\n }, [themeStyles, tweakStyles]);\n\n return useStyles(data);\n };\n};\n","import { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nexport const useDidMountEffect = (effect: EffectCallback, dependencies: DependencyList): void => {\n const isMountedRef = useRef(false);\n useEffect(() => {\n let unmount: ReturnType<EffectCallback>;\n if (isMountedRef.current) {\n unmount = effect();\n } else {\n isMountedRef.current = true;\n }\n return () => {\n if (unmount !== undefined) {\n unmount();\n }\n };\n }, dependencies);\n};\n","import { Modifier } from 'react-overlays/usePopper';\n\nexport const minWidthModifier: Partial<Modifier<any, any>> = {\n name: 'minWidth',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn: ({ state }) => {\n state.styles.popper.minWidth = `${state.rects.reference.width}px`;\n },\n effect: ({ state }) => {\n state.elements.popper.style.minWidth = `${\n (state.elements.reference as HTMLElement).offsetWidth\n }px`;\n },\n};\n","import type { IPhoneInfo } from '../components';\n\nexport const phoneInfo: IPhoneInfo[] = [\n {\n countryEn: 'Abkhazia',\n countryRu: 'Абхазия',\n countryCode: 'AB',\n phoneMask: '(999) 999-99-99',\n dialCode: '7',\n dialCodePriority: 1,\n fullCodes: ['7'],\n },\n {\n countryEn: 'Afghanistan',\n countryRu: 'Афганистан',\n countryCode: 'AF',\n dialCode: '93',\n fullCodes: ['93'],\n },\n {\n countryEn: 'Albania',\n countryRu: 'Албания',\n countryCode: 'AL',\n dialCode: '355',\n fullCodes: ['355'],\n },\n {\n countryEn: 'Algeria',\n countryRu: 'Алжир',\n countryCode: 'DZ',\n dialCode: '213',\n fullCodes: ['213'],\n },\n {\n countryEn: 'Andorra',\n countryRu: 'Андорра',\n countryCode: 'AD',\n dialCode: '376',\n fullCodes: ['376'],\n },\n {\n countryEn: 'Angola',\n countryRu: 'Ангола',\n countryCode: 'AO',\n dialCode: '244',\n fullCodes: ['244'],\n },\n {\n countryEn: 'Antigua and Barbuda',\n countryRu: 'Антигуа и Барбуда',\n countryCode: 'AG',\n dialCode: '1268',\n fullCodes: ['1268'],\n },\n {\n countryEn: 'Argentina',\n countryRu: 'Аргентина',\n countryCode: 'AR',\n dialCode: '54',\n phoneMask: '(99) 99999999',\n fullCodes: ['54'],\n },\n {\n countryEn: 'Armenia',\n countryRu: 'Армения',\n countryCode: 'AM',\n dialCode: '374',\n fullCodes: ['374'],\n },\n {\n countryEn: 'Aruba',\n countryRu: 'Аруба',\n countryCode: 'AW',\n dialCode: '297',\n fullCodes: ['297'],\n },\n {\n countryEn: 'Australia',\n countryRu: 'Австралия',\n countryCode: 'AU',\n dialCode: '61',\n phoneMask: '(99) 9999 9999',\n dialCodePriority: 0,\n areaCodes: ['2', '3', '4', '7', '8', '02', '03', '04', '07', '08'],\n fullCodes: ['612', '613', '614', '617', '618', '6102', '6103', '6104', '6107', '6108'],\n },\n {\n countryEn: 'Austria',\n countryRu: 'Австрия',\n countryCode: 'AT',\n dialCode: '43',\n fullCodes: ['43'],\n },\n {\n countryEn: 'Azerbaijan',\n countryRu: 'Азербайджан',\n countryCode: 'AZ',\n dialCode: '994',\n fullCodes: ['994'],\n },\n {\n countryEn: 'Bahamas',\n countryRu: 'Багамы',\n countryCode: 'BS',\n dialCode: '1242',\n fullCodes: ['1242'],\n },\n {\n countryEn: 'Bahrain',\n countryRu: 'Бахрейн',\n countryCode: 'BH',\n dialCode: '973',\n fullCodes: ['973'],\n },\n {\n countryEn: 'Bangladesh',\n countryRu: 'Бангладеш',\n countryCode: 'BD',\n dialCode: '880',\n fullCodes: ['880'],\n },\n {\n countryEn: 'Barbados',\n countryRu: 'Барбадос',\n countryCode: 'BB',\n dialCode: '1246',\n fullCodes: ['1246'],\n },\n {\n countryEn: 'Belarus',\n countryRu: 'Беларусь',\n countryCode: 'BY',\n dialCode: '375',\n phoneMask: '(99) 999 99 99',\n fullCodes: ['375'],\n },\n {\n countryEn: 'Belgium',\n countryRu: 'Бельгия',\n countryCode: 'BE',\n dialCode: '32',\n phoneMask: '999 99 99 99',\n fullCodes: ['32'],\n },\n {\n countryEn: 'Belize',\n countryRu: 'Белиз',\n countryCode: 'BZ',\n dialCode: '501',\n fullCodes: ['501'],\n },\n {\n countryEn: 'Benin',\n countryRu: 'Бенин',\n countryCode: 'BJ',\n dialCode: '229',\n fullCodes: ['229'],\n },\n {\n countryEn: 'Bhutan',\n countryRu: 'Бутан',\n countryCode: 'BT',\n dialCode: '975',\n fullCodes: ['975'],\n },\n {\n countryEn: 'Bolivia',\n countryRu: 'Боливия',\n countryCode: 'BO',\n dialCode: '591',\n fullCodes: ['591'],\n },\n {\n countryEn: 'Bosnia and Herzegovina',\n countryRu: 'Босния и Герцеговина',\n countryCode: 'BA',\n dialCode: '387',\n fullCodes: ['387'],\n },\n {\n countryEn: 'Botswana',\n countryRu: 'Ботсвана',\n countryCode: 'BW',\n dialCode: '267',\n fullCodes: ['267'],\n },\n {\n countryEn: 'Brazil',\n countryRu: 'Бразилия',\n countryCode: 'BR',\n dialCode: '55',\n phoneMask: '(99) 999999999',\n fullCodes: ['55'],\n },\n {\n countryEn: 'British Indian Ocean Territory',\n countryRu: 'Британская территория в Индийском океане',\n countryCode: 'IO',\n dialCode: '246',\n fullCodes: ['246'],\n },\n {\n countryEn: 'Brunei',\n countryRu: 'Бруней-Даруссалам',\n countryCode: 'BN',\n dialCode: '673',\n fullCodes: ['673'],\n },\n {\n countryEn: 'Bulgaria',\n countryRu: 'Болгария',\n countryCode: 'BG',\n dialCode: '359',\n fullCodes: ['359'],\n },\n {\n countryEn: 'Burkina Faso',\n countryRu: 'Буркина-Фасо',\n countryCode: 'BF',\n dialCode: '226',\n fullCodes: ['226'],\n },\n {\n countryEn: 'Burundi',\n countryRu: 'Бурунди',\n countryCode: 'BI',\n dialCode: '257',\n fullCodes: ['257'],\n },\n {\n countryEn: 'Cambodia',\n countryRu: 'Камбоджа',\n countryCode: 'KH',\n dialCode: '855',\n fullCodes: ['855'],\n },\n {\n countryEn: 'Cameroon',\n countryRu: 'Камерун',\n countryCode: 'CM',\n dialCode: '237',\n fullCodes: ['237'],\n },\n {\n countryEn: 'Canada',\n countryRu: 'Канада',\n countryCode: 'CA',\n dialCode: '1',\n phoneMask: '(999) 999-9999',\n dialCodePriority: 1,\n areaCodes: [\n '204',\n '226',\n '236',\n '249',\n '250',\n '289',\n '306',\n '343',\n '365',\n '387',\n '403',\n '416',\n '418',\n '431',\n '437',\n '438',\n '450',\n '506',\n '514',\n '519',\n '548',\n '579',\n '581',\n '587',\n '604',\n '613',\n '639',\n '647',\n '672',\n '705',\n '709',\n '742',\n '778',\n '780',\n '782',\n '807',\n '819',\n '825',\n '867',\n '873',\n '902',\n '905',\n ],\n fullCodes: [\n '1204',\n '1226',\n '1236',\n '1249',\n '1250',\n '1289',\n '1306',\n '1343',\n '1365',\n '1387',\n '1403',\n '1416',\n '1418',\n '1431',\n '1437',\n '1438',\n '1450',\n '1506',\n '1514',\n '1519',\n '1548',\n '1579',\n '1581',\n '1587',\n '1604',\n '1613',\n '1639',\n '1647',\n '1672',\n '1705',\n '1709',\n '1742',\n '1778',\n '1780',\n '1782',\n '1807',\n '1819',\n '1825',\n '1867',\n '1873',\n '1902',\n '1905',\n ],\n },\n {\n countryEn: 'Cape Verde',\n countryRu: 'Кабо-Верде',\n countryCode: 'CV',\n dialCode: '238',\n fullCodes: ['238'],\n },\n {\n countryEn: 'Caribbean Netherlands',\n countryRu: 'Бонайре, Саба и Синт-Эстатиус',\n countryCode: 'BQ',\n dialCode: '599',\n dialCodePriority: 1,\n fullCodes: ['599'],\n },\n {\n countryEn: 'Central African Republic',\n countryRu: 'Центрально-Африканская Республика',\n countryCode: 'CF',\n dialCode: '236',\n fullCodes: ['236'],\n },\n {\n countryEn: 'Chad',\n countryRu: 'Чад',\n countryCode: 'TD',\n dialCode: '235',\n fullCodes: ['235'],\n },\n {\n countryEn: 'Chile',\n countryRu: 'Чили',\n countryCode: 'CL',\n dialCode: '56',\n fullCodes: ['56'],\n },\n {\n countryEn: 'China',\n countryRu: 'Китай',\n countryCode: 'CN',\n dialCode: '86',\n phoneMask: '99-999999999',\n fullCodes: ['86'],\n },\n {\n countryEn: 'Colombia',\n countryRu: 'Колумбия',\n countryCode: 'CO',\n dialCode: '57',\n fullCodes: ['57'],\n },\n {\n countryEn: 'Comoros',\n countryRu: 'Коморы',\n countryCode: 'KM',\n dialCode: '269',\n fullCodes: ['269'],\n },\n {\n countryEn: 'DR Congo',\n countryRu: 'ДР Конго',\n countryCode: 'CD',\n dialCode: '243',\n fullCodes: ['243'],\n },\n {\n countryEn: 'Republic of the Congo',\n countryRu: 'Республика Конго',\n countryCode: 'CG',\n dialCode: '242',\n fullCodes: ['242'],\n },\n {\n countryEn: 'Costa Rica',\n countryRu: 'Коста-Рика',\n countryCode: 'CR',\n dialCode: '506',\n phoneMask: '9999-9999',\n fullCodes: ['506'],\n },\n {\n countryEn: 'Côte d’Ivoire',\n countryRu: 'Кот д’Ивуар',\n countryCode: 'CI',\n dialCode: '225',\n phoneMask: '99 99 99 99',\n fullCodes: ['225'],\n },\n {\n countryEn: 'Croatia',\n countryRu: 'Хорватия',\n countryCode: 'HR',\n dialCode: '385',\n fullCodes: ['385'],\n },\n {\n countryEn: 'Cuba',\n countryRu: 'Куба',\n countryCode: 'CU',\n dialCode: '53',\n fullCodes: ['53'],\n },\n {\n countryEn: 'Curaçao',\n countryRu: 'Кюрасао',\n countryCode: 'CW',\n dialCode: '599',\n dialCodePriority: 0,\n fullCodes: ['599'],\n },\n {\n countryEn: 'Cyprus',\n countryRu: 'Кипр',\n countryCode: 'CY',\n dialCode: '357',\n phoneMask: '99 999999',\n fullCodes: ['357'],\n },\n {\n countryEn: 'Czech Republic',\n countryRu: 'Чешская Республика',\n countryCode: 'CZ',\n dialCode: '420',\n fullCodes: ['420'],\n },\n {\n countryEn: 'Denmark',\n countryRu: 'Дания',\n countryCode: 'DK',\n dialCode: '45',\n phoneMask: '99 99 99 99',\n fullCodes: ['45'],\n },\n {\n countryEn: 'Djibouti',\n countryRu: 'Джибути',\n countryCode: 'DJ',\n dialCode: '253',\n fullCodes: ['253'],\n },\n {\n countryEn: 'Dominica',\n countryRu: 'Доминика',\n countryCode: 'DM',\n dialCode: '1767',\n fullCodes: ['1767'],\n },\n {\n countryEn: 'Dominican Republic',\n countryRu: 'Доминиканская Республика',\n countryCode: 'DO',\n dialCode: '1',\n dialCodePriority: 2,\n areaCodes: ['809', '829', '849'],\n fullCodes: ['1809', '1829', '1849'],\n },\n {\n countryEn: 'Ecuador',\n countryRu: 'Эквадор',\n countryCode: 'EC',\n dialCode: '593',\n fullCodes: ['593'],\n },\n {\n countryEn: 'Egypt',\n countryRu: 'Египет',\n countryCode: 'EG',\n dialCode: '20',\n fullCodes: ['20'],\n },\n {\n countryEn: 'El Salvador',\n countryRu: 'Эль-Сальвадор',\n countryCode: 'SV',\n dialCode: '503',\n phoneMask: '9999-9999',\n fullCodes: ['503'],\n },\n {\n countryEn: 'Equatorial Guinea',\n countryRu: 'Экваториальная Гвинея',\n countryCode: 'GQ',\n dialCode: '240',\n fullCodes: ['240'],\n },\n {\n countryEn: 'Eritrea',\n countryRu: 'Эритрея',\n countryCode: 'ER',\n dialCode: '291',\n fullCodes: ['291'],\n },\n {\n countryEn: 'Estonia',\n countryRu: 'Эстония',\n countryCode: 'EE',\n dialCode: '372',\n phoneMask: '9999 999999',\n fullCodes: ['372'],\n },\n {\n countryEn: 'Ethiopia',\n countryRu: 'Эфиопия',\n countryCode: 'ET',\n dialCode: '251',\n fullCodes: ['251'],\n },\n {\n countryEn: 'Fiji',\n countryRu: 'Фиджи',\n countryCode: 'FJ',\n dialCode: '679',\n fullCodes: ['679'],\n },\n {\n countryEn: 'Finland',\n countryRu: 'Финляндия',\n countryCode: 'FI',\n dialCode: '358',\n phoneMask: '99 999 99 99',\n fullCodes: ['358'],\n },\n {\n countryEn: 'France',\n countryRu: 'Франция',\n countryCode: 'FR',\n dialCode: '33',\n phoneMask: '9 99 99 99 99',\n fullCodes: ['33'],\n },\n {\n countryEn: 'French Guiana',\n countryRu: 'Французская Гвиана',\n countryCode: 'GF',\n dialCode: '594',\n fullCodes: ['594'],\n },\n {\n countryEn: 'French Polynesia',\n countryRu: 'Французская Полинезия',\n countryCode: 'PF',\n dialCode: '689',\n fullCodes: ['689'],\n },\n {\n countryEn: 'Gabon',\n countryRu: 'Габон',\n countryCode: 'GA',\n dialCode: '241',\n fullCodes: ['241'],\n },\n {\n countryEn: 'Gambia',\n countryRu: 'Гамбия',\n countryCode: 'GM',\n dialCode: '220',\n fullCodes: ['220'],\n },\n {\n countryEn: 'Georgia',\n countryRu: 'Грузия',\n countryCode: 'GE',\n dialCode: '995',\n fullCodes: ['995'],\n },\n {\n countryEn: 'Germany',\n countryRu: 'Германия',\n countryCode: 'DE',\n dialCode: '49',\n phoneMask: '9999 99999999',\n fullCodes: ['49'],\n },\n {\n countryEn: 'Ghana',\n countryRu: 'Гана',\n countryCode: 'GH',\n dialCode: '233',\n fullCodes: ['233'],\n },\n {\n countryEn: 'Greece',\n countryRu: 'Греция',\n countryCode: 'GR',\n dialCode: '30',\n fullCodes: ['30'],\n },\n {\n countryEn: 'Grenada',\n countryRu: 'Гренада',\n countryCode: 'GD',\n dialCode: '1473',\n fullCodes: ['1473'],\n },\n {\n countryEn: 'Guadeloupe',\n countryRu: 'Гваделупа',\n countryCode: 'GP',\n dialCode: '590',\n dialCodePriority: 0,\n fullCodes: ['590'],\n },\n {\n countryEn: 'Guam',\n countryRu: 'Гуам',\n countryCode: 'GU',\n dialCode: '1671',\n fullCodes: ['1671'],\n },\n {\n countryEn: 'Guatemala',\n countryRu: 'Гватемала',\n countryCode: 'GT',\n dialCode: '502',\n phoneMask: '9999-9999',\n fullCodes: ['502'],\n },\n {\n countryEn: 'Guinea',\n countryRu: 'Гвинея',\n countryCode: 'GN',\n dialCode: '224',\n fullCodes: ['224'],\n },\n {\n countryEn: 'Guinea-Bissau',\n countryRu: 'Гвинея-Бисау',\n countryCode: 'GW',\n dialCode: '245',\n fullCodes: ['245'],\n },\n {\n countryEn: 'Guyana',\n countryRu: 'Гайана',\n countryCode: 'GY',\n dialCode: '592',\n fullCodes: ['592'],\n },\n {\n countryEn: 'Haiti',\n countryRu: 'Гаити',\n countryCode: 'HT',\n dialCode: '509',\n phoneMask: '9999-9999',\n fullCodes: ['509'],\n },\n {\n countryEn: 'Honduras',\n countryRu: 'Гондурас',\n countryCode: 'HN',\n dialCode: '504',\n fullCodes: ['504'],\n },\n {\n countryEn: 'Hong Kong',\n countryRu: 'Гонконг',\n countryCode: 'HK',\n dialCode: '852',\n phoneMask: '9999 9999',\n fullCodes: ['852'],\n },\n {\n countryEn: 'Hungary',\n countryRu: 'Венгрия',\n countryCode: 'HU',\n dialCode: '36',\n fullCodes: ['36'],\n },\n {\n countryEn: 'Iceland',\n countryRu: 'Исландия',\n countryCode: 'IS',\n dialCode: '354',\n phoneMask: '999 9999',\n fullCodes: ['354'],\n },\n {\n countryEn: 'India',\n countryRu: 'Индия',\n countryCode: 'IN',\n dialCode: '91',\n phoneMask: '99999-99999',\n fullCodes: ['91'],\n },\n {\n countryEn: 'Indonesia',\n countryRu: 'Индонезия',\n countryCode: 'ID',\n dialCode: '62',\n fullCodes: ['62'],\n },\n {\n countryEn: 'Iran',\n countryRu: 'Иран',\n countryCode: 'IR',\n dialCode: '98',\n fullCodes: ['98'],\n },\n {\n countryEn: 'Iraq',\n countryRu: 'Ирак',\n countryCode: 'IQ',\n dialCode: '964',\n fullCodes: ['964'],\n },\n {\n countryEn: 'Ireland',\n countryRu: 'Ирландия',\n countryCode: 'IE',\n dialCode: '353',\n phoneMask: '99 9999999',\n fullCodes: ['353'],\n },\n {\n countryEn: 'Israel',\n countryRu: 'Израиль',\n countryCode: 'IL',\n dialCode: '972',\n phoneMask: '999 999 9999',\n fullCodes: ['972'],\n },\n {\n countryEn: 'Italy',\n countryRu: 'Италия',\n countryCode: 'IT',\n dialCode: '39',\n phoneMask: '999 9999999',\n dialCodePriority: 0,\n fullCodes: ['39'],\n },\n {\n countryEn: 'Jamaica',\n countryRu: 'Ямайка',\n countryCode: 'JM',\n dialCode: '1876',\n fullCodes: ['1876'],\n },\n {\n countryEn: 'Japan',\n countryRu: 'Япония',\n countryCode: 'JP',\n dialCode: '81',\n phoneMask: '99 9999 9999',\n fullCodes: ['81'],\n },\n {\n countryEn: 'Jordan',\n countryRu: 'Иордания',\n countryCode: 'JO',\n dialCode: '962',\n fullCodes: ['962'],\n },\n {\n countryEn: 'Kazakhstan',\n countryRu: 'Казахстан',\n countryCode: 'KZ',\n dialCode: '7',\n phoneMask: '(999) 999-99-99',\n dialCodePriority: 1,\n fullCodes: ['7'],\n },\n {\n countryEn: 'Kenya',\n countryRu: 'Кения',\n countryCode: 'KE',\n dialCode: '254',\n fullCodes: ['254'],\n },\n {\n countryEn: 'Kiribati',\n countryRu: 'Кирибати',\n countryCode: 'KI',\n dialCode: '686',\n fullCodes: ['686'],\n },\n {\n countryEn: 'Kosovo',\n countryRu: 'Косово',\n countryCode: 'XK',\n dialCode: '383',\n fullCodes: ['383'],\n },\n {\n countryEn: 'Kuwait',\n countryRu: 'Кувейт',\n countryCode: 'KW',\n dialCode: '965',\n fullCodes: ['965'],\n },\n {\n countryEn: 'Kyrgyzstan',\n countryRu: 'Киргизия',\n countryCode: 'KG',\n dialCode: '996',\n fullCodes: ['996'],\n },\n {\n countryEn: 'Laos',\n countryRu: 'Лаос',\n countryCode: 'LA',\n dialCode: '856',\n fullCodes: ['856'],\n },\n {\n countryEn: 'Latvia',\n countryRu: 'Латвия',\n countryCode: 'LV',\n dialCode: '371',\n fullCodes: ['371'],\n },\n {\n countryEn: 'Lebanon',\n countryRu: 'Ливан',\n countryCode: 'LB',\n dialCode: '961',\n fullCodes: ['961'],\n },\n {\n countryEn: 'Lesotho',\n countryRu: 'Лесото',\n countryCode: 'LS',\n dialCode: '266',\n fullCodes: ['266'],\n },\n {\n countryEn: 'Liberia',\n countryRu: 'Либерия',\n countryCode: 'LR',\n dialCode: '231',\n fullCodes: ['231'],\n },\n {\n countryEn: 'Libya',\n countryRu: 'Ливийская Арабская Джамахирия',\n countryCode: 'LY',\n dialCode: '218',\n fullCodes: ['218'],\n },\n {\n countryEn: 'Liechtenstein',\n countryRu: 'Лихтенштейн',\n countryCode: 'LI',\n dialCode: '423',\n fullCodes: ['423'],\n },\n {\n countryEn: 'Lithuania',\n countryRu: 'Литва',\n countryCode: 'LT',\n dialCode: '370',\n fullCodes: ['370'],\n },\n {\n countryEn: 'Luxembourg',\n countryRu: 'Люксембург',\n countryCode: 'LU',\n dialCode: '352',\n fullCodes: ['352'],\n },\n {\n countryEn: 'Macau',\n countryRu: 'Макао',\n countryCode: 'MO',\n dialCode: '853',\n fullCodes: ['853'],\n },\n {\n countryEn: 'Macedonia',\n countryRu: 'Республика Македония',\n countryCode: 'MK',\n dialCode: '389',\n fullCodes: ['389'],\n },\n {\n countryEn: 'Madagascar',\n countryRu: 'Мадагаскар',\n countryCode: 'MG',\n dialCode: '261',\n fullCodes: ['261'],\n },\n {\n countryEn: 'Malawi',\n countryRu: 'Малави',\n countryCode: 'MW',\n dialCode: '265',\n fullCodes: ['265'],\n },\n {\n countryEn: 'Malaysia',\n countryRu: 'Малайзия',\n countryCode: 'MY',\n dialCode: '60',\n phoneMask: '99-9999-9999',\n fullCodes: ['60'],\n },\n {\n countryEn: 'Maldives',\n countryRu: 'Мальдивы',\n countryCode: 'MV',\n dialCode: '960',\n fullCodes: ['960'],\n },\n {\n countryEn: 'Mali',\n countryRu: 'Мали',\n countryCode: 'ML',\n dialCode: '223',\n fullCodes: ['223'],\n },\n {\n countryEn: 'Malta',\n countryRu: 'Мальта',\n countryCode: 'MT',\n dialCode: '356',\n fullCodes: ['356'],\n },\n {\n countryEn: 'Marshall Islands',\n countryRu: 'Маршалловы острова',\n countryCode: 'MH',\n dialCode: '692',\n fullCodes: ['692'],\n },\n {\n countryEn: 'Martinique',\n countryRu: 'Мартиника',\n countryCode: 'MQ',\n dialCode: '596',\n fullCodes: ['596'],\n },\n {\n countryEn: 'Mauritania',\n countryRu: 'Мавритания',\n countryCode: 'MR',\n dialCode: '222',\n fullCodes: ['222'],\n },\n {\n countryEn: 'Mauritius',\n countryRu: 'Маврикий',\n countryCode: 'MU',\n dialCode: '230',\n fullCodes: ['230'],\n },\n {\n countryEn: 'Mexico',\n countryRu: 'Мексика',\n countryCode: 'MX',\n dialCode: '52',\n phoneMask: '999 999 9999',\n dialCodePriority: 0,\n areaCodes: ['55', '81', '33', '656', '664', '998', '774', '229'],\n fullCodes: ['5255', '5281', '5233', '52656', '52664', '52998', '52774', '52229'],\n },\n {\n countryEn: 'Micronesia',\n countryRu: 'Микронезия, Федеративные Штаты',\n countryCode: 'FM',\n dialCode: '691',\n fullCodes: ['691'],\n },\n {\n countryEn: 'Moldova',\n countryRu: 'Молдова, Республика',\n countryCode: 'MD',\n dialCode: '373',\n phoneMask: '(99) 99-99-99',\n fullCodes: ['373'],\n },\n {\n countryEn: 'Monaco',\n countryRu: 'Монако',\n countryCode: 'MC',\n dialCode: '377',\n fullCodes: ['377'],\n },\n {\n countryEn: 'Mongolia',\n countryRu: 'Монголия',\n countryCode: 'MN',\n dialCode: '976',\n fullCodes: ['976'],\n },\n {\n countryEn: 'Montenegro',\n countryRu: 'Черногория',\n countryCode: 'ME',\n dialCode: '382',\n fullCodes: ['382'],\n },\n {\n countryEn: 'Morocco',\n countryRu: 'Марокко',\n countryCode: 'MA',\n dialCode: '212',\n fullCodes: ['212'],\n },\n {\n countryEn: 'Mozambique',\n countryRu: 'Мозамбик',\n countryCode: 'MZ',\n dialCode: '258',\n fullCodes: ['258'],\n },\n {\n countryEn: 'Myanmar',\n countryRu: 'Мьянма',\n countryCode: 'MM',\n dialCode: '95',\n fullCodes: ['95'],\n },\n {\n countryEn: 'Namibia',\n countryRu: 'Намибия',\n countryCode: 'NA',\n dialCode: '264',\n fullCodes: ['264'],\n },\n {\n countryEn: 'Nauru',\n countryRu: 'Науру',\n countryCode: 'NR',\n dialCode: '674',\n fullCodes: ['674'],\n },\n {\n countryEn: 'Nepal',\n countryRu: 'Непал',\n countryCode: 'NP',\n dialCode: '977',\n fullCodes: ['977'],\n },\n {\n countryEn: 'Netherlands',\n countryRu: 'Нидерланды',\n countryCode: 'NL',\n dialCode: '31',\n phoneMask: '99 99999999',\n fullCodes: ['31'],\n },\n {\n countryEn: 'New Caledonia',\n countryRu: 'Новая Каледония',\n countryCode: 'NC',\n dialCode: '687',\n fullCodes: ['687'],\n },\n {\n countryEn: 'New Zealand',\n countryRu: 'Новая Зеландия',\n countryCode: 'NZ',\n dialCode: '64',\n phoneMask: '999-999-9999',\n fullCodes: ['64'],\n },\n {\n countryEn: 'Nicaragua',\n countryRu: 'Никарагуа',\n countryCode: 'NI',\n dialCode: '505',\n fullCodes: ['505'],\n },\n {\n countryEn: 'Niger',\n countryRu: 'Нигер',\n countryCode: 'NE',\n dialCode: '227',\n fullCodes: ['227'],\n },\n {\n countryEn: 'Nigeria',\n countryRu: 'Нигерия',\n countryCode: 'NG',\n dialCode: '234',\n fullCodes: ['234'],\n },\n {\n countryEn: 'North Korea',\n countryRu: 'Северная Корея',\n countryCode: 'KP',\n dialCode: '850',\n fullCodes: ['850'],\n },\n {\n countryEn: 'Norway',\n countryRu: 'Норвегия',\n countryCode: 'NO',\n dialCode: '47',\n phoneMask: '999 99 999',\n fullCodes: ['47'],\n },\n {\n countryEn: 'Oman',\n countryRu: 'Оман',\n countryCode: 'OM',\n dialCode: '968',\n fullCodes: ['968'],\n },\n {\n countryEn: 'Pakistan',\n countryRu: 'Пакистан',\n countryCode: 'PK',\n dialCode: '92',\n phoneMask: '999-9999999',\n fullCodes: ['92'],\n },\n {\n countryEn: 'Palau',\n countryRu: 'Палау',\n countryCode: 'PW',\n dialCode: '680',\n fullCodes: ['680'],\n },\n {\n countryEn: 'Palestine',\n countryRu: 'Палестинская территория',\n countryCode: 'PS',\n dialCode: '970',\n fullCodes: ['970'],\n },\n {\n countryEn: 'Panama',\n countryRu: 'Панама',\n countryCode: 'PA',\n dialCode: '507',\n fullCodes: ['507'],\n },\n {\n countryEn: 'Papua New Guinea',\n countryRu: 'Папуа-Новая Гвинея',\n countryCode: 'PG',\n dialCode: '675',\n fullCodes: ['675'],\n },\n {\n countryEn: 'Paraguay',\n countryRu: 'Парагвай',\n countryCode: 'PY',\n dialCode: '595',\n fullCodes: ['595'],\n },\n {\n countryEn: 'Peru',\n countryRu: 'Перу',\n countryCode: 'PE',\n dialCode: '51',\n fullCodes: ['51'],\n },\n {\n countryEn: 'Philippines',\n countryRu: 'Филиппины',\n countryCode: 'PH',\n dialCode: '63',\n phoneMask: '9999 9999999',\n fullCodes: ['63'],\n },\n {\n countryEn: 'Poland',\n countryRu: 'Польша',\n countryCode: 'PL',\n dialCode: '48',\n phoneMask: '999-999-999',\n fullCodes: ['48'],\n },\n {\n countryEn: 'Portugal',\n countryRu: 'Португалия',\n countryCode: 'PT',\n dialCode: '351',\n fullCodes: ['351'],\n },\n {\n countryEn: 'Puerto Rico',\n countryRu: 'Пуэрто-Рико',\n countryCode: 'PR',\n dialCode: '1',\n dialCodePriority: 3,\n areaCodes: ['787', '939'],\n fullCodes: ['1787', '1939'],\n },\n {\n countryEn: 'Qatar',\n countryRu: 'Катар',\n countryCode: 'QA',\n dialCode: '974',\n fullCodes: ['974'],\n },\n {\n countryEn: 'Réunion',\n countryRu: 'Реюньон',\n countryCode: 'RE',\n dialCode: '262',\n fullCodes: ['262'],\n },\n {\n countryEn: 'Romania',\n countryRu: 'Румыния',\n countryCode: 'RO',\n dialCode: '40',\n fullCodes: ['40'],\n },\n {\n countryEn: 'Russia',\n countryRu: 'Россия',\n countryCode: 'RU',\n dialCode: '7',\n phoneMask: '(999) 999-99-99',\n dialCodePriority: 0,\n fullCodes: ['7'],\n },\n {\n countryEn: 'Rwanda',\n countryRu: 'Руанда',\n countryCode: 'RW',\n dialCode: '250',\n fullCodes: ['250'],\n },\n {\n countryEn: 'Saint Kitts and Nevis',\n countryRu: 'Сент-Китс и Невис',\n countryCode: 'KN',\n dialCode: '1869',\n fullCodes: ['1869'],\n },\n {\n countryEn: 'Saint Lucia',\n countryRu: 'Сент-Люсия',\n countryCode: 'LC',\n dialCode: '1758',\n fullCodes: ['1758'],\n },\n {\n countryEn: 'Saint Vincent and the Grenadines',\n countryRu: 'Сент-Винсент и Гренадины',\n countryCode: 'VC',\n dialCode: '1784',\n fullCodes: ['1784'],\n },\n {\n countryEn: 'Samoa',\n countryRu: 'Самоа',\n countryCode: 'WS',\n dialCode: '685',\n fullCodes: ['685'],\n },\n {\n countryEn: 'San Marino',\n countryRu: 'Сан-Марино',\n countryCode: 'SM',\n dialCode: '378',\n fullCodes: ['378'],\n },\n {\n countryEn: 'São Tomé and Príncipe',\n countryRu: 'Сан-Томе и Принсипи',\n countryCode: 'ST',\n dialCode: '239',\n fullCodes: ['239'],\n },\n {\n countryEn: 'Saudi Arabia',\n countryRu: 'Саудовская Аравия',\n countryCode: 'SA',\n dialCode: '966',\n fullCodes: ['966'],\n },\n {\n countryEn: 'Senegal',\n countryRu: 'Сенегал',\n countryCode: 'SN',\n dialCode: '221',\n fullCodes: ['221'],\n },\n {\n countryEn: 'Serbia',\n countryRu: 'Сербия',\n countryCode: 'RS',\n dialCode: '381',\n fullCodes: ['381'],\n },\n {\n countryEn: 'Seychelles',\n countryRu: 'Сейшелы',\n countryCode: 'SC',\n dialCode: '248',\n fullCodes: ['248'],\n },\n {\n countryEn: 'Sierra Leone',\n countryRu: 'Сьерра-Леоне',\n countryCode: 'SL',\n dialCode: '232',\n fullCodes: ['232'],\n },\n {\n countryEn: 'Singapore',\n countryRu: 'Сингапур',\n countryCode: 'SG',\n dialCode: '65',\n phoneMask: '9999-9999',\n fullCodes: ['65'],\n },\n {\n countryEn: 'Slovakia',\n countryRu: 'Словакия',\n countryCode: 'SK',\n dialCode: '421',\n fullCodes: ['421'],\n },\n {\n countryEn: 'Slovenia',\n countryRu: 'Словения',\n countryCode: 'SI',\n dialCode: '386',\n fullCodes: ['386'],\n },\n {\n countryEn: 'Solomon Islands',\n countryRu: 'Соломоновы острова',\n countryCode: 'SB',\n dialCode: '677',\n fullCodes: ['677'],\n },\n {\n countryEn: 'Somalia',\n countryRu: 'Сомали',\n countryCode: 'SO',\n dialCode: '252',\n fullCodes: ['252'],\n },\n {\n countryEn: 'South Africa',\n countryRu: 'Южная Африка',\n countryCode: 'ZA',\n dialCode: '27',\n fullCodes: ['27'],\n },\n {\n countryEn: 'South Korea',\n countryRu: 'Южная Корея',\n countryCode: 'KR',\n dialCode: '82',\n phoneMask: '999 9999 9999',\n fullCodes: ['82'],\n },\n {\n countryCode: 'OS',\n countryEn: 'South Ossetia',\n countryRu: 'Южная Осетия',\n phoneMask: '(999) 999-99-99',\n dialCode: '7',\n dialCodePriority: 1,\n fullCodes: ['7'],\n },\n {\n countryEn: 'South Sudan',\n countryRu: 'Южный Судан',\n countryCode: 'SS',\n dialCode: '211',\n fullCodes: ['211'],\n },\n {\n countryEn: 'Spain',\n countryRu: 'Испания',\n countryCode: 'ES',\n dialCode: '34',\n phoneMask: '999 999 999',\n fullCodes: ['34'],\n },\n {\n countryEn: 'Sri Lanka',\n countryRu: 'Шри-Ланка',\n countryCode: 'LK',\n dialCode: '94',\n fullCodes: ['94'],\n },\n {\n countryEn: 'Sudan',\n countryRu: 'Судан',\n countryCode: 'SD',\n dialCode: '249',\n fullCodes: ['249'],\n },\n {\n countryEn: 'Suriname',\n countryRu: 'Суринам',\n countryCode: 'SR',\n dialCode: '597',\n fullCodes: ['597'],\n },\n {\n countryEn: 'Swaziland',\n countryRu: 'Свазиленд',\n countryCode: 'SZ',\n dialCode: '268',\n fullCodes: ['268'],\n },\n {\n countryEn: 'Sweden',\n countryRu: 'Швеция',\n countryCode: 'SE',\n dialCode: '46',\n phoneMask: '(999) 999-999',\n fullCodes: ['46'],\n },\n {\n countryEn: 'Switzerland',\n countryRu: 'Швейцария',\n countryCode: 'CH',\n dialCode: '41',\n phoneMask: '99 999 99 99',\n fullCodes: ['41'],\n },\n {\n countryEn: 'Syria',\n countryRu: 'Сирийская Арабская Республика',\n countryCode: 'SY',\n dialCode: '963',\n fullCodes: ['963'],\n },\n {\n countryEn: 'Taiwan',\n countryRu: 'Тайвань',\n countryCode: 'TW',\n dialCode: '886',\n fullCodes: ['886'],\n },\n {\n countryEn: 'Tajikistan',\n countryRu: 'Таджикистан',\n countryCode: 'TJ',\n dialCode: '992',\n fullCodes: ['992'],\n },\n {\n countryEn: 'Tanzania',\n countryRu: 'Танзания',\n countryCode: 'TZ',\n dialCode: '255',\n fullCodes: ['255'],\n },\n {\n countryEn: 'Thailand',\n countryRu: 'Таиланд',\n countryCode: 'TH',\n dialCode: '66',\n fullCodes: ['66'],\n },\n {\n countryEn: 'Timor-Leste',\n countryRu: 'Тимор-Лесте',\n countryCode: 'TL',\n dialCode: '670',\n fullCodes: ['670'],\n },\n {\n countryEn: 'Togo',\n countryRu: 'Того',\n countryCode: 'TG',\n dialCode: '228',\n fullCodes: ['228'],\n },\n {\n countryEn: 'Tonga',\n countryRu: 'Тонга',\n countryCode: 'TO',\n dialCode: '676',\n fullCodes: ['676'],\n },\n {\n countryEn: 'Trinidad and Tobago',\n countryRu: 'Тринидад и Тобаго',\n countryCode: 'TT',\n dialCode: '1868',\n fullCodes: ['1868'],\n },\n {\n countryEn: 'Tunisia',\n countryRu: 'Тунис',\n countryCode: 'TN',\n dialCode: '216',\n fullCodes: ['216'],\n },\n {\n countryEn: 'Turkey',\n countryRu: 'Турция',\n countryCode: 'TR',\n dialCode: '90',\n phoneMask: '999 999 99 99',\n fullCodes: ['90'],\n },\n {\n countryEn: 'Turkmenistan',\n countryRu: 'Туркмения',\n countryCode: 'TM',\n dialCode: '993',\n fullCodes: ['993'],\n },\n {\n countryEn: 'Tuvalu',\n countryRu: 'Тувалу',\n countryCode: 'TV',\n dialCode: '688',\n fullCodes: ['688'],\n },\n {\n countryEn: 'Uganda',\n countryRu: 'Уганда',\n countryCode: 'UG',\n dialCode: '256',\n fullCodes: ['256'],\n },\n {\n countryEn: 'Ukraine',\n countryRu: 'Украина',\n countryCode: 'UA',\n dialCode: '380',\n phoneMask: '(99) 999 99 99',\n fullCodes: ['380'],\n },\n {\n countryEn: 'United Arab Emirates',\n countryRu: 'Объединенные Арабские Эмираты',\n countryCode: 'AE',\n dialCode: '971',\n fullCodes: ['971'],\n },\n {\n countryEn: 'United Kingdom',\n countryRu: 'Соединенное Королевство',\n countryCode: 'GB',\n dialCode: '44',\n phoneMask: '9999 999999',\n fullCodes: ['44'],\n },\n {\n countryEn: 'United States',\n countryRu: 'Соединенные Штаты',\n countryCode: 'US',\n dialCode: '1',\n phoneMask: '(999) 999-9999',\n dialCodePriority: 0,\n areaCodes: [\n '907',\n '205',\n '251',\n '256',\n '334',\n '479',\n '501',\n '870',\n '480',\n '520',\n '602',\n '623',\n '928',\n '209',\n '213',\n '310',\n '323',\n '408',\n '415',\n '510',\n '530',\n '559',\n '562',\n '619',\n '626',\n '650',\n '661',\n '707',\n '714',\n '760',\n '805',\n '818',\n '831',\n '858',\n '909',\n '916',\n '925',\n '949',\n '951',\n '303',\n '719',\n '970',\n '203',\n '860',\n '202',\n '302',\n '239',\n '305',\n '321',\n '352',\n '386',\n '407',\n '561',\n '727',\n '772',\n '813',\n '850',\n '863',\n '904',\n '941',\n '954',\n '229',\n '404',\n '478',\n '706',\n '770',\n '912',\n '808',\n '319',\n '515',\n '563',\n '641',\n '712',\n '208',\n '217',\n '309',\n '312',\n '618',\n '630',\n '708',\n '773',\n '815',\n '847',\n '219',\n '260',\n '317',\n '574',\n '765',\n '812',\n '316',\n '620',\n '785',\n '913',\n '270',\n '502',\n '606',\n '859',\n '225',\n '318',\n '337',\n '504',\n '985',\n '413',\n '508',\n '617',\n '781',\n '978',\n '301',\n '410',\n '207',\n '231',\n '248',\n '269',\n '313',\n '517',\n '586',\n '616',\n '734',\n '810',\n '906',\n '989',\n '218',\n '320',\n '507',\n '612',\n '651',\n '763',\n '952',\n '314',\n '417',\n '573',\n '636',\n '660',\n '816',\n '228',\n '601',\n '662',\n '406',\n '252',\n '336',\n '704',\n '828',\n '910',\n '919',\n '701',\n '308',\n '402',\n '603',\n '201',\n '609',\n '732',\n '856',\n '908',\n '973',\n '505',\n '575',\n '702',\n '775',\n '212',\n '315',\n '516',\n '518',\n '585',\n '607',\n '631',\n '716',\n '718',\n '845',\n '914',\n '216',\n '330',\n '419',\n '440',\n '513',\n '614',\n '740',\n '937',\n '405',\n '580',\n '918',\n '503',\n '541',\n '215',\n '412',\n '570',\n '610',\n '717',\n '724',\n '814',\n '401',\n '803',\n '843',\n '864',\n '605',\n '423',\n '615',\n '731',\n '865',\n '901',\n '931',\n '210',\n '214',\n '254',\n '281',\n '325',\n '361',\n '409',\n '432',\n '512',\n '713',\n '806',\n '817',\n '830',\n '903',\n '915',\n '936',\n '940',\n '956',\n '972',\n '979',\n '435',\n '801',\n '276',\n '434',\n '540',\n '703',\n '757',\n '804',\n '802',\n '206',\n '253',\n '360',\n '425',\n '509',\n '262',\n '414',\n '608',\n '715',\n '920',\n '304',\n '307',\n ],\n fullCodes: [\n '1907',\n '1205',\n '1251',\n '1256',\n '1334',\n '1479',\n '1501',\n '1870',\n '1480',\n '1520',\n '1602',\n '1623',\n '1928',\n '1209',\n '1213',\n '1310',\n '1323',\n '1408',\n '1415',\n '1510',\n '1530',\n '1559',\n '1562',\n '1619',\n '1626',\n '1650',\n '1661',\n '1707',\n '1714',\n '1760',\n '1805',\n '1818',\n '1831',\n '1858',\n '1909',\n '1916',\n '1925',\n '1949',\n '1951',\n '1303',\n '1719',\n '1970',\n '1203',\n '1860',\n '1202',\n '1302',\n '1239',\n '1305',\n '1321',\n '1352',\n '1386',\n '1407',\n '1561',\n '1727',\n '1772',\n '1813',\n '1850',\n '1863',\n '1904',\n '1941',\n '1954',\n '1229',\n '1404',\n '1478',\n '1706',\n '1770',\n '1912',\n '1808',\n '1319',\n '1515',\n '1563',\n '1641',\n '1712',\n '1208',\n '1217',\n '1309',\n '1312',\n '1618',\n '1630',\n '1708',\n '1773',\n '1815',\n '1847',\n '1219',\n '1260',\n '1317',\n '1574',\n '1765',\n '1812',\n '1316',\n '1620',\n '1785',\n '1913',\n '1270',\n '1502',\n '1606',\n '1859',\n '1225',\n '1318',\n '1337',\n '1504',\n '1985',\n '1413',\n '1508',\n '1617',\n '1781',\n '1978',\n '1301',\n '1410',\n '1207',\n '1231',\n '1248',\n '1269',\n '1313',\n '1517',\n '1586',\n '1616',\n '1734',\n '1810',\n '1906',\n '1989',\n '1218',\n '1320',\n '1507',\n '1612',\n '1651',\n '1763',\n '1952',\n '1314',\n '1417',\n '1573',\n '1636',\n '1660',\n '1816',\n '1228',\n '1601',\n '1662',\n '1406',\n '1252',\n '1336',\n '1704',\n '1828',\n '1910',\n '1919',\n '1701',\n '1308',\n '1402',\n '1603',\n '1201',\n '1609',\n '1732',\n '1856',\n '1908',\n '1973',\n '1505',\n '1575',\n '1702',\n '1775',\n '1212',\n '1315',\n '1516',\n '1518',\n '1585',\n '1607',\n '1631',\n '1716',\n '1718',\n '1845',\n '1914',\n '1216',\n '1330',\n '1419',\n '1440',\n '1513',\n '1614',\n '1740',\n '1937',\n '1405',\n '1580',\n '1918',\n '1503',\n '1541',\n '1215',\n '1412',\n '1570',\n '1610',\n '1717',\n '1724',\n '1814',\n '1401',\n '1803',\n '1843',\n '1864',\n '1605',\n '1423',\n '1615',\n '1731',\n '1865',\n '1901',\n '1931',\n '1210',\n '1214',\n '1254',\n '1281',\n '1325',\n '1361',\n '1409',\n '1432',\n '1512',\n '1713',\n '1806',\n '1817',\n '1830',\n '1903',\n '1915',\n '1936',\n '1940',\n '1956',\n '1972',\n '1979',\n '1435',\n '1801',\n '1276',\n '1434',\n '1540',\n '1703',\n '1757',\n '1804',\n '1802',\n '1206',\n '1253',\n '1360',\n '1425',\n '1509',\n '1262',\n '1414',\n '1608',\n '1715',\n '1920',\n '1304',\n '1307',\n ],\n },\n {\n countryEn: 'Uruguay',\n countryRu: 'Уругвай',\n countryCode: 'UY',\n dialCode: '598',\n fullCodes: ['598'],\n },\n {\n countryEn: 'Uzbekistan',\n countryRu: 'Узбекистан',\n countryCode: 'UZ',\n dialCode: '998',\n fullCodes: ['998'],\n },\n {\n countryEn: 'Vanuatu',\n countryRu: 'Вануату',\n countryCode: 'VU',\n dialCode: '678',\n fullCodes: ['678'],\n },\n {\n countryEn: 'Vatican City',\n countryRu: 'Ватикан',\n countryCode: 'VA',\n dialCode: '39',\n phoneMask: '99 9999 9999',\n dialCodePriority: 1,\n fullCodes: ['39'],\n },\n {\n countryEn: 'Venezuela',\n countryRu: 'Венесуэла',\n countryCode: 'VE',\n dialCode: '58',\n fullCodes: ['58'],\n },\n {\n countryEn: 'Vietnam',\n countryRu: 'Вьетнам',\n countryCode: 'VN',\n dialCode: '84',\n fullCodes: ['84'],\n },\n {\n countryEn: 'Yemen',\n countryRu: 'Йемен',\n countryCode: 'YE',\n dialCode: '967',\n fullCodes: ['967'],\n },\n {\n countryEn: 'Zambia',\n countryRu: 'Замбия',\n countryCode: 'ZM',\n dialCode: '260',\n fullCodes: ['260'],\n },\n {\n countryEn: 'Zimbabwe',\n countryRu: 'Зимбабве',\n countryCode: 'ZW',\n dialCode: '263',\n fullCodes: ['263'],\n },\n];\n","export const mimeTypes = {\n aac: 'audio/aac',\n abw: 'application/x-abiword',\n arc: 'application/x-freearc',\n avi: 'video/x-msvideo',\n azw: 'application/vnd.amazon.ebook',\n bin: 'application/octet-stream',\n bmp: 'image/bmp',\n bz: 'application/x-bzip',\n bz2: 'application/x-bzip2',\n csh: 'application/x-csh',\n css: 'text/css',\n csv: 'text/csv',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n eot: 'application/vnd.ms-fontobject',\n epub: 'application/epub+zip',\n gz: 'application/gzip',\n gif: 'image/gif',\n htm: 'text/html',\n html: 'text/html',\n ico: 'image/vnd.microsoft.icon',\n ics: 'text/calendar',\n jar: 'application/java-archive',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'text/javascript',\n json: 'application/json',\n jsonld: 'application/ld+json',\n mid: '.midi',\n mjs: 'text/javascript',\n mp3: 'audio/mpeg',\n mpeg: 'video/mpeg',\n mpkg: 'application/vnd.apple.installer+xml',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n oga: 'audio/ogg',\n ogv: 'video/ogg',\n ogx: 'application/ogg',\n opus: 'audio/opus',\n otf: 'font/otf',\n png: 'image/png',\n pdf: 'application/pdf',\n php: 'application/php',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n rar: 'application/vnd.rar',\n rtf: 'application/rtf',\n sh: 'application/x-sh',\n svg: 'image/svg+xml',\n swf: 'application/x-shockwave-flash',\n tar: 'application/x-tar',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n ts: 'video/mp2t',\n ttf: 'font/ttf',\n txt: 'text/plain',\n vsd: 'application/vnd.visio',\n wav: 'audio/wav',\n weba: 'audio/webm',\n webm: 'video/webm',\n webp: 'image/webp',\n woff: 'font/woff',\n woff2: 'font/woff2',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n xml: 'XML',\n xul: 'application/vnd.mozilla.xul+xml',\n zip: 'application/zip',\n '3gp': 'video/3gpp',\n '3g2': 'video/3gpp2',\n '7z': 'application/x-7z-compressed',\n} as const;\n\nexport type IMimeType = keyof typeof mimeTypes;\n","import { isNotEmpty, isStringEmpty } from '@true-engineering/true-react-platform-helpers';\nimport type { IPhoneInfo, IPhoneValue } from '../components';\nimport { phoneInfo } from '../constants';\n\nexport const findCountryByCode = (\n countryCode?: string,\n countriesList = phoneInfo,\n): IPhoneInfo | undefined =>\n isNotEmpty(countryCode)\n ? countriesList.find((info) => info.countryCode === countryCode)\n : undefined;\n\nexport const findCountryIndexByCode = (countryCode?: string, countriesList = phoneInfo): number =>\n isNotEmpty(countryCode)\n ? countriesList.findIndex((info) => info.countryCode === countryCode)\n : -1;\n\nexport const getCountryTextByLocale = (country: IPhoneInfo, locale: string): string =>\n locale.toLowerCase() === 'ru' ? country.countryRu : country.countryEn;\n\n/**\n * Мутирует countriesList!\n */\nexport const sortCountriesByLocale = (countriesList: IPhoneInfo[], locale: string): IPhoneInfo[] =>\n countriesList.sort((countryA, countryB) =>\n getCountryTextByLocale(countryA, locale).localeCompare(\n getCountryTextByLocale(countryB, locale),\n ),\n );\n\nexport const checkSearchStringInCountry = (country: IPhoneInfo, searchString: string): boolean => {\n const checkValue = searchString.toLowerCase().trim().replace('+', '');\n\n const possibleValues = [\n country.countryRu,\n country.countryEn,\n ...country.countryRu.split(' '),\n ...country.countryEn.split(' '),\n country.dialCode,\n ].map((part) => part.toLowerCase());\n\n return possibleValues.some((v) => v.startsWith(checkValue));\n};\n\nexport const getFullPhone = (phone?: IPhoneValue): string =>\n (phone?.dialCode ?? '') + (phone?.phoneNumber ?? '');\n\nexport const getCountryCodeFromPhone = (phoneWithCode: string): string | undefined => {\n if (isStringEmpty(phoneWithCode)) {\n return;\n }\n\n // ищем страны, для которых phoneWithCode начинается с fullCode (dialCode + areaCode)\n const matchedCountries = phoneInfo.filter((info) =>\n info.fullCodes.some((fullCode) => phoneWithCode.startsWith(fullCode)),\n );\n\n // если нашлась всего одна — ок, выдаём её\n if (matchedCountries.length === 1) {\n return matchedCountries[0].countryCode;\n }\n\n // если нашлось несколько, выбираем страну с наименьшим dialCodePriority (0 — самая приоритетная)\n const highestPriorityCountries = phoneInfo\n .filter((info) => phoneWithCode.startsWith(info.dialCode))\n .sort((a, b) => (a.dialCodePriority ?? 1000) - (b.dialCodePriority ?? 1000));\n\n return highestPriorityCountries.at(0)?.countryCode;\n};\n\nexport const getPhoneObjFromString = (fullPhone: string, countryCode?: string): IPhoneValue => {\n const newCountryCode = countryCode ?? getCountryCodeFromPhone(fullPhone);\n const dialCode = findCountryByCode(newCountryCode)?.dialCode;\n const phoneNumber = fullPhone.slice(dialCode?.length);\n\n return { dialCode, phoneNumber, countryCode: newCountryCode };\n};\n\nexport const DEFAULT_PHONE_MASK = '+ 9 999 999 999 999 99';\n\nexport const getPhoneMask = (countryCode?: string): string => {\n let mask = DEFAULT_PHONE_MASK;\n if (isNotEmpty(countryCode)) {\n const countrySettings = findCountryByCode(countryCode);\n\n if (countrySettings !== undefined) {\n const dialCodeLength = countrySettings.dialCode.length;\n const areaAndPhoneMask =\n countrySettings.phoneMask ?? mask.substring(2, mask.length - dialCodeLength);\n mask = `+ ${'9'.repeat(dialCodeLength)} ${areaAndPhoneMask}`;\n }\n }\n\n return mask;\n};\n","import { ComponentType, memo } from 'react';\nimport {\n isNotEmpty,\n isString,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { IDataAttributes } from '../types';\n\nexport { default as rgba } from 'hex-to-rgba';\n\n/** @deprecated Используйте `toKebabCase` из `true-react-platform-helpers` */\nexport const transformToKebab = (string: string): string => {\n let result = '';\n string.split('').forEach((char) => {\n if (char.toLowerCase() === char) {\n result += char;\n } else {\n result += `-${char.toLowerCase()}`;\n }\n });\n\n return result;\n};\n\nexport const getParentNode = (element: Element | ShadowRoot | Document): Element =>\n element.nodeName === 'HTML' || element === document\n ? (element as Element)\n : (element.parentNode as Element) ?? (element as ShadowRoot).host;\n\nexport const hasExactParent = (element: Element, parent: Element): boolean => {\n if (element === parent) {\n return true; // Found the exact parent\n }\n\n const parentNode = getParentNode(element);\n\n if (parentNode === element) {\n return false; // Reached the top-level HTML element or Shadow DOM host\n }\n\n return hasExactParent(parentNode, parent);\n};\n\nexport const getStyleComputedProperty = (element: Element): Partial<CSSStyleDeclaration> =>\n element.nodeType !== 1 ? {} : getComputedStyle(element, null);\n\nexport const getScrollParent = (element: Element | Document): Element => {\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return (element as Element).ownerDocument.body;\n case '#document':\n return (element as Document).body;\n }\n\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element as Element) ?? {};\n if (/(auto|scroll|overlay)/.test((overflow ?? '') + (overflowY ?? '') + (overflowX ?? ''))) {\n return element as Element;\n }\n return getScrollParent(getParentNode(element as Element));\n};\n\nexport const isElementOffScreen = (element: HTMLElement, input?: HTMLElement): boolean => {\n const el = element;\n const scrollParent = getScrollParent(element);\n\n const { scrollHeight: scrollHeightWithElement } = scrollParent;\n el.hidden = true;\n const { scrollHeight: scrollHeightWithoutElement } = scrollParent;\n el.hidden = false;\n\n const isOffscreen = scrollHeightWithElement !== scrollHeightWithoutElement;\n\n if (isOffscreen && input !== undefined) {\n const elRect = el.getBoundingClientRect();\n const scrollParentRect = scrollParent.getBoundingClientRect();\n const topOffset = elRect.top - scrollParentRect.top;\n if (input.clientHeight + el.clientHeight > topOffset) {\n return false;\n }\n }\n\n return isOffscreen;\n};\n\nexport const getNumberInRange = (value: number, min = -Infinity, max = Infinity): number =>\n Math.min(max, Math.max(min, value));\n\nconst DEFAULT_THOUSANDS_SEPARATOR = '\\u2009';\n\nexport const formatStringNumber = (\n val?: string,\n separator = DEFAULT_THOUSANDS_SEPARATOR,\n): string => {\n if (val === undefined) {\n return '';\n }\n const parts = val.split('.');\n\n parts[0] = parts[0]\n // убрать лидирующие нули\n .replace(/^0+(?=\\d)/, '')\n // проставить сепараторы тысяч\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n return (parts[1] ?? '').length > 0 ? parts.join('.') : parts[0];\n};\n\nexport const formatNumber = (val?: number, separator = DEFAULT_THOUSANDS_SEPARATOR): string => {\n if (val === undefined || isNaN(val)) {\n return '';\n }\n return formatStringNumber(String(val), separator);\n};\n\nexport const removeStringFormat = (val?: string): string =>\n (val ?? '').replace(',', '.').replace(/\\s/g, '');\n\nexport const stringToNumber = (val?: string): number | undefined => {\n const trimmed = removeStringFormat(val);\n if (trimmed === '') {\n return undefined;\n }\n const num = Number(trimmed);\n return isNaN(num) ? undefined : num;\n};\n\nexport const setCaretPosition = (elem: HTMLInputElement, caretPos: number | null): void => {\n if (caretPos === null || elem === null) {\n return;\n }\n if (elem.selectionStart) {\n elem.focus();\n elem.setSelectionRange(caretPos, caretPos);\n } else {\n elem.focus();\n }\n};\n\nexport const isSpaceChar = (char?: string): boolean =>\n char !== undefined && char.match(/\\s/) !== null;\n\nexport const getNumberLength = (n?: number): number =>\n n === undefined || isNaN(n) ? 0 : n.toString().length;\n\nexport const trimStringToMaxLength = (val: string, maxLength: number): string =>\n val.length > maxLength ? val.slice(0, maxLength) : val;\n\n/** @deprecated Используйте `addDataAttributes` из `true-react-platform-helpers` */\nexport const addDataAttributes = (data: IDataAttributes = {}): IDataAttributes =>\n Object.fromEntries(\n Object.entries(data).map(([key, value]) =>\n (isString(value) && isStringNotEmpty(value)) || isNotEmpty(value)\n ? [`data-${transformToKebab(key)}`, value]\n : [],\n ),\n );\n\nexport const excludeStorybookParams = (params: string[]): RegExp =>\n new RegExp(`^(on.*|${['tweakStyles', 'data', ...params].join('|')})$`);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const genericMemo = memo as <T extends ComponentType<any>>(\n ...args: Parameters<typeof memo<T>>\n) => T;\n","import { DependencyList, useEffect } from 'react';\nimport usePopper, { VirtualElement } from 'react-overlays/usePopper';\nimport { getScrollParent, minWidthModifier } from '../helpers';\nimport { IDropdownWithPopperOptions } from '../types';\n\nexport const useDropdown = ({\n isOpen,\n onDropdownClose,\n referenceElement,\n dropdownElement,\n options,\n dependenciesForPositionUpdating = [],\n}: {\n isOpen: boolean;\n referenceElement: VirtualElement | null | undefined;\n dropdownElement: HTMLElement | null | undefined;\n options?: IDropdownWithPopperOptions;\n dependenciesForPositionUpdating?: DependencyList;\n onDropdownClose: (event: Event) => void;\n}): ReturnType<typeof usePopper> | undefined => {\n const {\n shouldUsePopper = false,\n shouldRenderInBody = false,\n shouldHideOnScroll = false,\n scrollParent = 'document',\n canBeFlipped = false,\n modifiers = [],\n placement = 'bottom-start',\n flipOptions,\n } = options ?? {};\n\n useEffect(() => {\n if (!shouldHideOnScroll || !isOpen) {\n return;\n }\n\n const scrollParentEl =\n scrollParent === 'auto'\n ? getScrollParent(referenceElement as Element)\n : scrollParent === 'document'\n ? document\n : scrollParent;\n scrollParentEl.addEventListener('scroll', onDropdownClose);\n\n return () => {\n scrollParentEl.removeEventListener('scroll', onDropdownClose);\n };\n }, [shouldHideOnScroll, isOpen]);\n\n let popperData: ReturnType<typeof usePopper> | undefined;\n if (shouldUsePopper) {\n // TODO: Вытащить хук из под условия???\n // eslint-disable-next-line react-hooks/rules-of-hooks\n popperData = usePopper(referenceElement, dropdownElement, {\n enabled: isOpen,\n placement,\n modifiers: [\n ...(shouldRenderInBody ? [minWidthModifier] : []),\n {\n name: 'offset',\n options: {\n offset: [0, 6],\n },\n },\n {\n name: 'flip',\n options: {\n fallbackPlacements: canBeFlipped ? ['bottom-start', 'top-start'] : ['bottom-start'],\n ...flipOptions,\n },\n },\n ...modifiers,\n ],\n });\n }\n\n useEffect(() => {\n if (dependenciesForPositionUpdating.length !== 0) {\n popperData?.update();\n }\n }, dependenciesForPositionUpdating);\n\n return popperData;\n};\n","import { MutableRefObject, useLayoutEffect, useRef } from 'react';\n\nexport const useLatestRef = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef(value);\n\n useLayoutEffect(() => {\n ref.current = value;\n });\n\n return ref;\n};\n","import { RefCallback, useEffect, useMemo } from 'react';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useLatestRef } from './use-latest-ref';\n\nexport interface IInsertionRefOptions {\n /** @default false */\n isDisabled?: boolean;\n onIntersection?: VoidFunction;\n onIntersectionEnd?: VoidFunction;\n observerOptions?: IntersectionObserverInit;\n}\n\nexport const useIntersectionRef = ({\n observerOptions,\n ...options\n}: IInsertionRefOptions): RefCallback<Element> => {\n const optionsRef = useLatestRef(options);\n\n const { ref, disconnect } = useMemo(() => {\n const observer = new IntersectionObserver(([{ isIntersecting }]) => {\n const { current } = optionsRef;\n if (current?.isDisabled) {\n return;\n }\n if (isIntersecting) {\n current?.onIntersection?.();\n } else {\n current?.onIntersectionEnd?.();\n }\n }, observerOptions);\n\n const observerRef: RefCallback<Element> = (node) => {\n observer.disconnect();\n if (isNotEmpty(node)) {\n observer.observe(node);\n }\n };\n\n return {\n ref: observerRef,\n disconnect: () => observer.disconnect(),\n };\n }, [optionsRef, observerOptions]);\n\n useEffect(() => disconnect, [disconnect]);\n\n return ref;\n};\n","import { RefCallback, useMemo, useEffect } from 'react';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useLatestRef } from './use-latest-ref';\n\nexport interface IResizeRefOptions {\n /** @default false */\n isDisabled?: boolean;\n onChange?: (entry: ResizeObserverEntry) => void;\n onTargetChange?: (target: Element) => void;\n}\n\nexport const useResizeRef = (options: IResizeRefOptions): RefCallback<Element> => {\n const optionsRef = useLatestRef(options);\n\n const { ref, disconnect } = useMemo(() => {\n const observer = new ResizeObserver(([entry]) => {\n const { current } = optionsRef;\n if (!current.isDisabled) {\n current.onChange?.(entry);\n current.onTargetChange?.(entry.target);\n }\n });\n\n const observerRef: RefCallback<Element> = (node) => {\n observer.disconnect();\n if (!isNotEmpty(node)) {\n return;\n }\n\n observer.observe(node);\n if (!optionsRef.current.isDisabled) {\n optionsRef.current.onTargetChange?.(node);\n }\n };\n\n return { ref: observerRef, disconnect: () => observer.disconnect() };\n }, [optionsRef]);\n\n useEffect(() => disconnect, [disconnect]);\n\n return ref;\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\nexport const useIsMounted = (): (() => boolean) => {\n const isMounted = useRef(false);\n\n useEffect(() => {\n isMounted.current = true;\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return useCallback(() => isMounted.current, []);\n};\n","import { useMemo } from 'react';\nimport { mergeRefs } from '@true-engineering/true-react-platform-helpers';\n\nexport const useMergedRefs: typeof mergeRefs = (refs) => useMemo(() => mergeRefs(refs), refs);\n","import { RefObject, useEffect } from 'react';\nimport { isEmpty, isFunction, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useLatestRef } from './use-latest-ref';\n\nexport const checkElementParentsClassNames = (element: HTMLElement, className: string): boolean => {\n if (element.classList.contains(className)) {\n return true;\n }\n\n if (element === document.body) {\n return false;\n }\n\n if (element.parentElement) {\n return checkElementParentsClassNames(element.parentElement, className);\n }\n\n return false;\n};\n\nexport const isElementOneOfParents = (element: HTMLElement, elToSearch: HTMLElement): boolean => {\n if (element === elToSearch) {\n return true;\n }\n\n if (element === document.body) {\n return false;\n }\n\n if (element.parentElement) {\n return isElementOneOfParents(element.parentElement, elToSearch);\n }\n\n return false;\n};\n\nexport function useOnClickOutsideWithRef<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(\n refOrGetter: RefObject<Elem | null> | (() => Elem | null | undefined) | undefined,\n handler: (event: MouseEvent | TouchEvent) => void,\n ignoreRef?: RefObject<IgnoreElem>,\n): void {\n useOnClickOutside(refOrGetter, handler, undefined, ignoreRef);\n}\n\nexport function useOnClickOutside<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(\n refOrGetter: RefObject<Elem | null> | (() => Elem | null | undefined) | undefined,\n handler: (event: MouseEvent | TouchEvent) => void,\n ignoreClassName?: string,\n ignoreRef?: RefObject<IgnoreElem>,\n): void {\n const optionsRef = useLatestRef({ refOrGetter, ignoreRef, ignoreClassName, handler });\n\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const options = optionsRef.current;\n\n const elem = isFunction(options.refOrGetter)\n ? options.refOrGetter()\n : options.refOrGetter?.current;\n const ignoreElem = options.ignoreRef?.current;\n const target = event.target as HTMLElement;\n\n if (\n isEmpty(elem) ||\n // Do nothing if clicking ref's element or descendent elements\n elem.contains(target) ||\n (isNotEmpty(options.ignoreClassName) &&\n checkElementParentsClassNames(target, options.ignoreClassName)) ||\n (isNotEmpty(ignoreElem) && isElementOneOfParents(target, ignoreElem))\n ) {\n return;\n }\n\n options.handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [optionsRef]);\n}\n","import { useMemo } from 'react';\nimport { IMaybeArray } from '@true-engineering/true-react-platform-helpers';\nimport { IComponentName, IMixedStyles, useThemeComponentStyles } from '../theme';\nimport { mixStyles } from './use-mixed-styles';\n\n// TODO: Можно усилить типы\nexport const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet & `tweak${string}`>({\n innerStyles,\n tweakStyles,\n className,\n currentComponentName,\n}: {\n /**\n * Это tweakStyles, определенные в родительском компоненте\n * (например, стили для Input, определенные в стилях компонента Select)\n */\n innerStyles?: IMixedStyles<StyleSheet[ClassName]>;\n /**\n * Пропса tweakStyles из родительского компонента\n * (это уже непосредственно ISelectProps.tweakStyles)\n */\n tweakStyles?: IMaybeArray<StyleSheet>;\n /**\n * Класс для переопределения tweakStyles из-вне. (Например, 'tweakInput')\n */\n className: ClassName;\n /**\n * Название компонента который вызывает useTweakStyles\n */\n currentComponentName?: IComponentName;\n}): Array<NonNullable<StyleSheet[ClassName]>> => {\n const themeStyles = useThemeComponentStyles<StyleSheet>(currentComponentName);\n\n return useMemo(\n () =>\n mixStyles(\n innerStyles,\n mixStyles(themeStyles, tweakStyles).map((style) => style[className]),\n ),\n [innerStyles, className, themeStyles, tweakStyles],\n );\n};\n","import type { ISvgIcon } from '../types';\nimport avatar from './avatar.svg?raw';\nimport calendar from './calendar.svg?raw';\nimport check from './check.svg?raw';\nimport chevronDownSmall from './chevron-down-small.svg?raw';\nimport chevronDown from './chevron-down.svg?raw';\nimport chevronLeft from './chevron-left.svg?raw';\nimport chevronRight from './chevron-right.svg?raw';\nimport closeLarge from './close-large.svg?raw';\nimport closeWindow from './close-window.svg?raw';\nimport close from './close.svg?raw';\nimport fileExcel from './file-excel.svg?raw';\nimport fileImage from './file-image.svg?raw';\nimport fileOther from './file-other.svg?raw';\nimport filePdf from './file-pdf.svg?raw';\nimport fileWord from './file-word.svg?raw';\nimport fileXml from './file-xml.svg?raw';\nimport fileZip from './file-zip.svg?raw';\nimport filter from './filter.svg?raw';\nimport information from './information.svg?raw';\nimport menu from './menu.svg?raw';\nimport minus from './minus.svg?raw';\nimport plus from './plus.svg?raw';\nimport search from './search.svg?raw';\nimport statusError from './status-error.svg?raw';\nimport statusInfo from './status-info.svg?raw';\nimport statusNotOk from './status-not-ok.svg?raw';\nimport statusOk from './status-ok.svg?raw';\nimport statusWarning from './status-warning.svg?raw';\nimport trashCan from './trash-can.svg?raw';\n\nexport const iconsMap = {\n avatar,\n calendar,\n check,\n 'chevron-down-small': chevronDownSmall,\n 'chevron-down': chevronDown,\n 'chevron-left': chevronLeft,\n 'chevron-right': chevronRight,\n 'close-large': closeLarge,\n 'close-window': closeWindow,\n close,\n 'file-excel': fileExcel,\n 'file-image': fileImage,\n 'file-other': fileOther,\n 'file-pdf': filePdf,\n 'file-word': fileWord,\n 'file-xml': fileXml,\n 'file-zip': fileZip,\n filter,\n information,\n menu,\n minus,\n plus,\n search,\n 'status-error': statusError,\n 'status-info': statusInfo,\n 'status-not-ok': statusNotOk,\n 'status-ok': statusOk,\n 'status-warning': statusWarning,\n 'trash-can': trashCan,\n} satisfies Record<string, ISvgIcon>;\n","export default \" <svg\\n width=\\\"100%\\\"\\n height=\\\"100%\\\"\\n viewBox=\\\"0 0 32 32\\\"\\n fill=\\\"none\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n >\\n <circle opacity=\\\"0.5\\\" cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"16\\\" fill=\\\"#DDE3ED\\\" />\\n <mask\\n id=\\\"mask0_0_12744\\\"\\n style=\\\"mask-type: 'alpha';\\\"\\n maskUnits=\\\"userSpaceOnUse\\\"\\n x=\\\"0\\\"\\n y=\\\"0\\\"\\n width=\\\"32\\\"\\n height=\\\"32\\\"\\n >\\n <circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"16\\\" fill=\\\"white\\\" />\\n </mask>\\n <g mask=\\\"url(#mask0_0_12744)\\\">\\n <circle cx=\\\"16\\\" cy=\\\"29\\\" r=\\\"13\\\" fill=\\\"url(#paint0_linear_0_12744)\\\" />\\n <mask\\n id=\\\"mask1_0_12744\\\"\\n style=\\\"mask-type: 'alpha';\\\"\\n maskUnits=\\\"userSpaceOnUse\\\"\\n x=\\\"3\\\"\\n y=\\\"16\\\"\\n width=\\\"26\\\"\\n height=\\\"26\\\"\\n >\\n <circle cx=\\\"16\\\" cy=\\\"29\\\" r=\\\"13\\\" fill=\\\"white\\\" />\\n </mask>\\n <g mask=\\\"url(#mask1_0_12744)\\\">\\n <ellipse\\n cx=\\\"16\\\"\\n cy=\\\"17.5\\\"\\n rx=\\\"6\\\"\\n ry=\\\"7.5\\\"\\n fill=\\\"#505F79\\\"\\n fill-opacity=\\\"0.204983\\\"\\n />\\n </g>\\n </g>\\n <ellipse cx=\\\"16\\\" cy=\\\"13\\\" rx=\\\"6\\\" ry=\\\"7\\\" fill=\\\"white\\\" />\\n <defs>\\n <linearGradient\\n id=\\\"paint0_linear_0_12744\\\"\\n x1=\\\"13.347\\\"\\n y1=\\\"46.279\\\"\\n x2=\\\"33.5318\\\"\\n y2=\\\"30.8088\\\"\\n gradientUnits=\\\"userSpaceOnUse\\\"\\n >\\n <stop stop-color=\\\"#ABD229\\\" />\\n <stop offset=\\\"1\\\" stop-color=\\\"#9CD03F\\\" />\\n </linearGradient>\\n </defs>\\n </svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M6 12h3V9H6v3zm-2 4V7h12l.002 9H4zM16 4h-1V3c0-.552-.448-1-1-1s-1 .448-1 1v1H7V3c0-.552-.448-1-1-1s-1 .448-1 1v1H4c-1.103 0-2 .897-2 2v10c0 1.103.897 2 2 2h12c1.103 0 2-.897 2-2V6c0-1.103-.897-2-2-2z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"m7.5 13.086 7.793-7.793a1 1 0 1 1 1.414 1.414l-8.5 8.5a1 1 0 0 1-1.414 0l-3.5-3.5a1 1 0 1 1 1.414-1.414L7.5 13.086Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M8.24512 8.84751L11.038 6.05461C11.4285 5.66409 12.0617 5.66409 12.4522 6.05461C12.8427 6.44514 12.8427 7.0783 12.4522 7.46883L8.95222 10.9688C8.5617 11.3593 7.92853 11.3593 7.53801 10.9688L4.03801 7.46883C3.64749 7.0783 3.64749 6.44514 4.03801 6.05461C4.42853 5.66409 5.0617 5.66409 5.45222 6.05461L8.24512 8.84751Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10.0029 11.6053L5.71004 7.31242C5.31951 6.9219 4.68635 6.9219 4.29582 7.31242C3.9053 7.70295 3.9053 8.33611 4.29582 8.72664L9.29582 13.7266C9.68635 14.1172 10.3195 14.1172 10.71 13.7266L15.71 8.72664C16.1006 8.33611 16.1006 7.70295 15.71 7.31242C15.3195 6.9219 14.6863 6.9219 14.2958 7.31242L10.0029 11.6053Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M8.41421 10L12.7071 5.70711C13.0976 5.31658 13.0976 4.68342 12.7071 4.29289C12.3166 3.90237 11.6834 3.90237 11.2929 4.29289L6.29289 9.29289C5.90237 9.68342 5.90237 10.3166 6.29289 10.7071L11.2929 15.7071C11.6834 16.0976 12.3166 16.0976 12.7071 15.7071C13.0976 15.3166 13.0976 14.6834 12.7071 14.2929L8.41421 10Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M11.5858 10L7.29289 5.70711C6.90237 5.31658 6.90237 4.68342 7.29289 4.29289C7.68342 3.90237 8.31658 3.90237 8.70711 4.29289L13.7071 9.29289C14.0976 9.68342 14.0976 10.3166 13.7071 10.7071L8.70711 15.7071C8.31658 16.0976 7.68342 16.0976 7.29289 15.7071C6.90237 15.3166 6.90237 14.6834 7.29289 14.2929L11.5858 10Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M6.102 4.709c-.446-.36-1.055-.373-1.415-.012-.39.39-.342 1.072.108 1.523l3.783 3.782-3.783 3.782-.096.108c-.36.446-.373 1.055-.012 1.415.39.391 1.072.342 1.523-.108l3.782-3.783 3.782 3.783.108.097c.446.358 1.055.372 1.415.011.39-.39.342-1.072-.108-1.523l-3.783-3.782L15.19 6.22l.097-.108c.358-.446.372-1.055.011-1.415-.39-.39-1.072-.342-1.523.108L9.992 8.588 6.21 4.805l-.108-.096Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"currentColor\\\" d=\\\"M4.5 4.5l11 11m0-11l-11 11\\\" stroke-width=\\\"2\\\" stroke-linejoin=\\\"round\\\" stroke-linecap=\\\"round\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M11.985 10l2.407-2.293c.41-.39.41-1.023 0-1.414-.41-.39-1.074-.39-1.485 0L10.5 8.586 8.093 6.293c-.411-.39-1.075-.39-1.485 0-.41.391-.41 1.023 0 1.414L9.015 10l-2.407 2.293c-.41.391-.41 1.023 0 1.414.205.195.473.293.742.293s.538-.098.743-.293l2.407-2.293 2.407 2.293c.205.195.474.293.743.293s.537-.098.742-.293c.41-.391.41-1.023 0-1.414L11.985 10z\\\"></path></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#21A366\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16081)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M8.00342 14.5244L10.0728 11.3062L12.1357 14.5244H14.4019L11.2217 9.73828L14.1162 5.21875H11.939L10.1108 8.2085L8.24463 5.21875H6.04834L8.93018 9.66846L5.75 14.5244H8.00342Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16081\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#FF991F\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16103)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M3.90113 15C3.09595 15 2.62093 14.097 3.07709 13.4335L6.67606 8.19861C7.07341 7.62064 7.9268 7.62065 8.32414 8.19861L13.0001 15H3.90113Z\\\" fill=\\\"white\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M9.53962 15L12.7076 10.2481C13.1034 9.65434 13.9758 9.65434 14.3717 10.2481L16.5031 13.4453C16.9462 14.1099 16.4698 15 15.6711 15H9.53962Z\\\" fill=\\\"white\\\"/>\\n <path d=\\\"M16.0001 5.5C16.0001 6.32843 15.3285 7 14.5001 7C13.6717 7 13.0001 6.32843 13.0001 5.5C13.0001 4.67157 13.6717 4 14.5001 4C15.3285 4 16.0001 4.67157 16.0001 5.5Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16103\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M18 6.60751L11.392 -0.000488281L5 0.000113437C3.34315 0.000113437 2 1.34326 2 3.00011V17.0001C2 18.657 3.34315 20.0001 5 20.0001H15C16.6569 20.0001 18 18.657 18 17.0001V6.60751ZM17 8.00011L10 1.00011V6.00011C10 7.10468 10.8954 8.00011 12 8.00011H17Z\\\" fill=\\\"#AABFFC\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M18 6.60751L11.392 -0.000488281L5 0.000113437C3.34315 0.000113437 2 1.34326 2 3.00011V17.0001C2 18.657 3.34315 20.0001 5 20.0001H15C16.6569 20.0001 18 18.657 18 17.0001V6.60751ZM17 8.00011L10 1.00011V6.00011C10 7.10468 10.8954 8.00011 12 8.00011H17Z\\\" fill=\\\"url(#paint0_linear_0_16113)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16113\\\" x1=\\\"-5.9615\\\" y1=\\\"9.95168\\\" x2=\\\"13.4572\\\" y2=\\\"25.4862\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#FF5630\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16087)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M4.55535 13.6488V11.0388H4.92535C5.65535 11.0388 5.93535 10.9988 6.27535 10.8688C6.97535 10.5988 7.36535 9.92876 7.36535 8.99876C7.36535 8.21876 7.07535 7.57876 6.57535 7.25876C6.27535 7.06876 5.82535 6.97876 5.09535 6.97876H2.98535V13.6488H4.55535ZM4.84535 9.90876H4.54535V8.10876H4.84535C5.51535 8.10876 5.75535 8.34876 5.75535 9.02876C5.75535 9.66876 5.51535 9.90876 4.84535 9.90876ZM11.6393 13.4388C11.2793 13.5988 10.9993 13.6488 10.4393 13.6488H8.21935V6.97876H10.2593C11.2393 6.97876 11.7193 7.11876 12.1093 7.52876C12.5993 8.02876 12.7693 8.71876 12.7693 10.1388C12.7693 10.9388 12.7093 11.6788 12.6093 12.1588C12.4893 12.7388 12.1193 13.2188 11.6393 13.4388ZM10.0793 12.5188H9.79935V8.10876H10.0193C10.9713 8.10876 11.1466 8.35839 11.1586 9.95112L11.1593 10.1488C11.1593 12.2088 11.0193 12.5188 10.0793 12.5188ZM15.3333 10.8188V13.6488H13.7533V6.97876H17.6033V8.23876H15.3333V9.58876H17.4433V10.8188H15.3333Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16087\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#2C7CD3\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_0_16075)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M8.0542 14.9946L9.90137 8.0376L11.7549 14.9946H13.748L16.0078 5.68896H14.1162L12.688 12.189L11.0566 5.68896H8.82227L7.12109 12.0811L5.71826 5.68896H3.79492L6.0166 14.9946H8.0542Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_0_16075\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"#FF991F\\\"/>\\n <rect width=\\\"20\\\" height=\\\"20\\\" rx=\\\"4\\\" fill=\\\"url(#paint0_linear_2163_24057)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M1.97561 5.99658L3.56111 9.43008L1.84961 13.0001H3.66611L4.21211 11.6771C4.40111 11.0996 4.45361 10.8791 4.49561 10.6166H4.52711C4.54811 10.8686 4.61111 11.1101 4.77911 11.5826L5.34611 13.0001H7.20461L5.49311 9.44058L7.07861 5.99658H5.28311L4.86311 7.06758C4.85261 7.08858 4.83161 7.16208 4.80011 7.25658C4.75811 7.44558 4.70561 7.63458 4.65311 7.82358C4.60061 8.02308 4.57961 8.10708 4.56911 8.23308H4.52711C4.49561 8.02308 4.43261 7.78158 4.27511 7.23558L3.82361 5.99658H1.97561Z\\\" fill=\\\"white\\\"/>\\n <path d=\\\"M7.53437 5.99658V13.0001H9.05687V9.78708L9.02537 9.34608L8.98337 8.41158C8.98337 8.33808 8.96237 8.00208 8.92037 7.47708H8.98337C9.05687 7.90758 9.10937 8.21208 9.18287 8.53758C9.24587 8.87358 9.34037 9.28308 9.44537 9.77658L10.1804 13.0001H11.3984L12.1544 9.59808C12.2909 8.98908 12.5324 7.79208 12.5744 7.47708H12.6374C12.6059 7.80258 12.5849 8.01258 12.5744 8.22258L12.5534 8.98908C12.5429 9.25158 12.5324 9.52458 12.5219 9.80808V13.0001H14.0444V5.99658H11.6714L11.2409 8.10708C11.0834 8.74758 10.8419 10.3751 10.8419 10.8161L10.7999 10.8266C10.7894 10.2911 10.5269 8.61108 10.3274 7.85508L9.92837 5.99658H7.53437Z\\\" fill=\\\"white\\\"/>\\n <path d=\\\"M14.8685 5.99658V13.0001H18.89V11.6666H16.5275V5.99658H14.8685Z\\\" fill=\\\"white\\\"/>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_2163_24057\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n </defs>\\n</svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\">\\n <g clip-path=\\\"url(#clip0_922_22603)\\\">\\n <path d=\\\"M16 0H4C1.79086 0 0 1.79086 0 4V16C0 18.2091 1.79086 20 4 20H16C18.2091 20 20 18.2091 20 16V4C20 1.79086 18.2091 0 16 0Z\\\" fill=\\\"#A1D237\\\"/>\\n <path d=\\\"M16 0H4C1.79086 0 0 1.79086 0 4V16C0 18.2091 1.79086 20 4 20H16C18.2091 20 20 18.2091 20 16V4C20 1.79086 18.2091 0 16 0Z\\\" fill=\\\"url(#paint0_linear_922_22603)\\\" style=\\\"mix-blend-mode:overlay\\\"/>\\n <path d=\\\"M8.32086 14V12.6807H6.32086C5.92513 12.6807 5.72193 12.6927 5.58289 12.7166C5.64706 12.6207 5.68984 12.5367 5.73262 12.4528C5.7861 12.3568 5.83957 12.2609 5.89305 12.1529L8.28877 7.22339V6H4.17112V7.31934H6.20321C6.39572 7.31934 6.59893 7.30735 6.69519 7.29535C6.58824 7.47526 6.49198 7.65517 6.41711 7.81109L4 12.8246V14H8.32086ZM10.4813 14V6H9.03743V14H10.4813ZM12.9519 14V10.8096H13.4439C14.2139 10.8096 14.5241 10.7616 14.877 10.6057C15.5936 10.2699 16 9.47826 16 8.38681C16 7.45127 15.6898 6.69565 15.1444 6.32384C14.8342 6.09595 14.3743 6 13.6364 6H11.508V14H12.9519ZM13.4118 9.6102H12.9519V7.1994H13.3797C13.7219 7.1994 13.9679 7.24738 14.107 7.34333C14.385 7.53523 14.5241 7.87106 14.5241 8.38681C14.5241 8.91454 14.4064 9.25037 14.1497 9.44228C13.9893 9.57421 13.8075 9.6102 13.4118 9.6102Z\\\" fill=\\\"white\\\"/>\\n </g>\\n <defs>\\n <linearGradient id=\\\"paint0_linear_922_22603\\\" x1=\\\"-9.95187\\\" y1=\\\"9.95187\\\" x2=\\\"9.95187\\\" y2=\\\"29.8556\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n <stop stop-color=\\\"white\\\" stop-opacity=\\\"0.245559\\\"/>\\n <stop offset=\\\"1\\\" stop-opacity=\\\"0.498578\\\"/>\\n </linearGradient>\\n <clipPath id=\\\"clip0_922_22603\\\">\\n <rect width=\\\"20\\\" height=\\\"20\\\" fill=\\\"white\\\"/>\\n </clipPath>\\n </defs>\\n</svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M12 11c1.306 0 2.417.834 2.829 2H17c.552 0 1 .448 1 1s-.448 1-1 1h-2.17c-.412 1.165-1.524 2-2.83 2s-2.418-.835-2.83-2H3c-.552 0-1-.448-1-1s.448-1 1-1h6.171c.412-1.166 1.523-2 2.829-2zM5 3c1.306 0 2.417.834 2.829 2H17c.552 0 1 .448 1 1s-.448 1-1 1H7.83C7.417 8.165 6.305 9 5 9 3.343 9 2 7.657 2 6s1.343-3 3-3z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 8c-.552 0-1-.448-1-1s.448-1 1-1 1 .448 1 1-.448 1-1 1zm0 8c3.307 0 6-2.693 6-6 0-3.308-2.693-6-6-6-3.308 0-6 2.692-6 6 0 3.307 2.692 6 6 6zm0-14c2.122 0 4.157.843 5.657 2.343S18 7.878 18 10s-.843 4.157-2.343 5.657S12.122 18 10 18s-4.157-.843-5.657-2.343S2 12.122 2 10c0-4.418 3.582-8 8-8zm0 12c-.552 0-1-.448-1-1v-3c0-.552.448-1 1-1s1 .448 1 1v3c0 .552-.448 1-1 1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"1 1 16 16\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M5.08154 9.02148C5.08154 8.77083 5.16211 8.55778 5.32324 8.38232C5.48438 8.20687 5.70817 8.11914 5.99463 8.11914C6.28109 8.11914 6.50667 8.20687 6.67139 8.38232C6.8361 8.55778 6.91846 8.77083 6.91846 9.02148C6.91846 9.27214 6.8361 9.47803 6.67139 9.63916C6.50667 9.80029 6.28109 9.88086 5.99463 9.88086C5.70817 9.88086 5.48438 9.80029 5.32324 9.63916C5.16211 9.47803 5.08154 9.27214 5.08154 9.02148ZM8.08154 9.02148C8.08154 8.77083 8.16211 8.55778 8.32324 8.38232C8.48438 8.20687 8.70817 8.11914 8.99463 8.11914C9.28109 8.11914 9.50667 8.20687 9.67139 8.38232C9.8361 8.55778 9.91846 8.77083 9.91846 9.02148C9.91846 9.27214 9.8361 9.47803 9.67139 9.63916C9.50667 9.80029 9.28109 9.88086 8.99463 9.88086C8.70817 9.88086 8.48438 9.80029 8.32324 9.63916C8.16211 9.47803 8.08154 9.27214 8.08154 9.02148ZM11.0815 9.02148C11.0815 8.77083 11.1621 8.55778 11.3232 8.38232C11.4844 8.20687 11.7082 8.11914 11.9946 8.11914C12.2811 8.11914 12.5067 8.20687 12.6714 8.38232C12.8361 8.55778 12.9185 8.77083 12.9185 9.02148C12.9185 9.27214 12.8361 9.47803 12.6714 9.63916C12.5067 9.80029 12.2811 9.88086 11.9946 9.88086C11.7082 9.88086 11.4844 9.80029 11.3232 9.63916C11.1621 9.47803 11.0815 9.27214 11.0815 9.02148Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M16 11H4a1 1 0 1 1 0-2h12a1 1 0 1 1 0 2Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M16 11h-5v5a1 1 0 1 1-2 0v-5H4a1 1 0 1 1 0-2h5V4a1 1 0 0 1 2 0v5h5a1 1 0 1 1 0 2Z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M9 2c3.866 0 7 3.134 7 7 0 1.7-.606 3.259-1.614 4.472l2.589 2.59c.39.39.39 1.023 0 1.414-.39.39-1.024.39-1.414 0l-2.662-2.661C11.785 15.563 10.443 16 9 16c-3.866 0-7-3.134-7-7s3.134-7 7-7zm0 2C6.239 4 4 6.239 4 9s2.239 5 5 5 5-2.239 5-5-2.239-5-5-5z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M14 11H6c-.552 0-1-.448-1-1s.448-1 1-1h8c.552 0 1 .448 1 1s-.448 1-1 1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M10 15c-.552 0-1-.448-1-1v-4c0-.552.448-1 1-1s1 .448 1 1v4c0 .552-.448 1-1 1zM10 7c-.552 0-1-.448-1-1s.448-1 1-1 1 .448 1 1-.448 1-1 1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M11.414 10l2.293-2.293c.391-.391.391-1.023 0-1.414-.39-.391-1.023-.391-1.414 0L10 8.586 7.707 6.293c-.39-.391-1.023-.391-1.414 0-.39.391-.39 1.023 0 1.414L8.586 10l-2.293 2.293c-.39.391-.39 1.023 0 1.414.195.195.451.293.707.293.256 0 .512-.098.707-.293L10 11.414l2.293 2.293c.195.195.451.293.707.293.256 0 .512-.098.707-.293.391-.391.391-1.023 0-1.414L11.414 10z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M8.333 11.252l4.96-4.96c.39-.39 1.024-.39 1.414 0 .39.391.39 1.025 0 1.415L9.04 13.374c-.39.39-1.023.39-1.414 0L5.293 11.04c-.39-.39-.39-1.023 0-1.414.39-.39 1.024-.39 1.414 0l1.626 1.626z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0z\\\"></path><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#FFF\\\" stroke=\\\"none\\\" d=\\\"M10 5c-.552 0-1 .448-1 1v4c0 .552.448 1 1 1s1-.448 1-1V6c0-.552-.448-1-1-1zM10 13c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1z\\\"></path></svg>\"","export default \"<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 20 20\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"currentColor\\\" stroke=\\\"none\\\" d=\\\"M16 6v10c0 1.105-.895 2-2 2H6c-1.105 0-2-.895-2-2V6h12zM8 8c-.552 0-1 .448-1 1v6c0 .552.448 1 1 1s1-.448 1-1V9c0-.552-.448-1-1-1zm4 0c-.552 0-1 .448-1 1v6c0 .552.448 1 1 1s1-.448 1-1V9c0-.552-.448-1-1-1zm0-6l1 1h3c.552 0 1 .448 1 1s-.448 1-1 1H4c-.552 0-1-.448-1-1s.448-1 1-1h3l1-1h4z\\\"></path></svg>\"","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Icon', {\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport type IIconStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { addDataAttributes, isEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTheme } from '../../theme';\nimport { ICommonProps } from '../../types';\nimport { iconsMap } from './icons';\nimport { IIconType } from './types';\nimport { IIconStyles, useStyles } from './Icon.styles';\n\nexport interface IIconProps extends ICommonProps<IIconStyles> {\n type: IIconType;\n}\n\nexport const Icon: FC<IIconProps> = ({ type, data, testId, tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n const theme = useTheme();\n\n const icon = theme.icons?.[type] ?? iconsMap[type];\n\n if (isEmpty(icon)) {\n console.error(`Иконки ${type} не существует`);\n return null;\n }\n\n return (\n <div\n className={classes.root}\n {...addDataAttributes(data, testId)}\n dangerouslySetInnerHTML={{ __html: icon }}\n />\n );\n};\n","import { ReactNode } from 'react';\nimport { Icon } from './Icon';\nimport { IIcon } from './types';\n\nexport const renderIcon = (icon: IIcon): ReactNode =>\n typeof icon === 'string' ? <Icon type={icon} /> : icon;\n","import { Middleware, size } from '@floating-ui/react';\n\nexport const minWidthRelativeToTrigger: Middleware = size({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n minWidth: `${rects.reference.width}px`,\n });\n },\n});\n","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('WithPopup', {\n trigger: {\n width: 'fit-content',\n },\n\n clickable: {\n cursor: 'pointer',\n },\n\n active: {},\n\n disabled: {\n cursor: 'auto',\n },\n\n popup: {\n zIndex: 5,\n outline: 'none',\n },\n\n arrow: {},\n\n animationEnd: {},\n\n animationStart: {},\n\n 'dropdown-initial': {\n extend: 'animationEnd',\n },\n\n 'dropdown-open': {\n extend: 'animationStart',\n },\n\n 'dropdown-close': {\n visibility: 'hidden',\n extend: 'animationEnd',\n },\n\n 'dropdown-unmounted': {\n extend: 'animationEnd',\n },\n});\n\nexport type IWithPopupStyles = ITweakStyles<typeof useStyles>;\n","import { FC, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n applyAction,\n stopPropagation,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport {\n autoUpdate,\n useFloating,\n useClick,\n useDismiss,\n useHover,\n useInteractions,\n Placement,\n Middleware,\n FloatingPortal,\n offset,\n flip,\n useTransitionStatus,\n OffsetOptions,\n UseHoverProps,\n safePolygon,\n useFocus,\n FloatingArrow,\n arrow,\n UseClickProps,\n UseFocusProps,\n UseDismissProps,\n UseTransitionStatusProps,\n} from '@floating-ui/react';\nimport { ICommonProps, IDataAttributes, IRenderNode } from '../../types';\nimport { DEFAULT_OFFSET } from './constants';\nimport { minWidthRelativeToTrigger } from './helpers';\nimport {\n IPopupArrowProps,\n IPopupEventType,\n IReferenceProps,\n IWithPopupChildrenProps,\n IWithPopupToggleEvent,\n IWithPopupTriggerProps,\n} from './types';\nimport { useStyles, IWithPopupStyles } from './WithPopup.styles';\n\nexport interface IWithPopupProps extends ICommonProps<IWithPopupStyles> {\n trigger: IRenderNode<IWithPopupTriggerProps>;\n children: IRenderNode<IWithPopupChildrenProps>;\n middlewares?: Middleware[];\n /** @default eventType === 'click' ? 'bottom-end' : 'top' */\n placement?: Placement;\n /** @default 'click' */\n eventType?: IPopupEventType;\n /**\n * @deprecated Используйте hoverOptions\n * @default 0\n */\n hoverDelay?: number;\n /** @default 6 */\n popupOffset?: OffsetOptions;\n arrowProps?: IPopupArrowProps;\n popupData?: IDataAttributes;\n /** @default true, if eventType === click */\n shouldStopPropagation?: boolean;\n /** @default false */\n shouldHideOnScroll?: boolean;\n /** @default true */\n shouldRenderInBody?: boolean;\n /** Должен ли WithPopup рендерить свой div-wrapper в качестве триггера\n * @default true, if eventType === hover */\n isTriggerWrapped?: boolean;\n /** @default true */\n canBeFlipped?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n shouldShowArrow?: boolean;\n /** Должна ли минимальная ширина попапа быть равна ширине триггера\n * @default false */\n isMinWidthSameAsTrigger?: boolean;\n hoverOptions?: UseHoverProps;\n clickOptions?: UseClickProps;\n focusOptions?: UseFocusProps;\n dismissOptions?: UseDismissProps;\n transitionOptions?: UseTransitionStatusProps;\n onToggle?: (isActive: boolean, event?: IWithPopupToggleEvent) => void;\n}\n\nexport const WithPopup: FC<IWithPopupProps> = ({\n trigger,\n children,\n middlewares = [],\n eventType = 'click',\n placement = eventType === 'click' ? 'bottom-end' : 'top',\n hoverDelay = 0,\n popupOffset = DEFAULT_OFFSET,\n arrowProps,\n popupData,\n shouldStopPropagation = eventType === 'click',\n shouldHideOnScroll = false,\n shouldRenderInBody = true,\n canBeFlipped = true,\n isTriggerWrapped = eventType === 'hover',\n isDisabled = false,\n shouldShowArrow = false,\n isMinWidthSameAsTrigger = false,\n hoverOptions,\n clickOptions,\n focusOptions,\n dismissOptions,\n transitionOptions,\n tweakStyles,\n data,\n testId,\n onToggle,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const [isOpen, setIsOpen] = useState(false);\n const isActive = isOpen && !isDisabled;\n\n const arrowRef = useRef<SVGSVGElement>(null);\n\n const handleToggle = (next: boolean, event?: IWithPopupToggleEvent) => {\n event?.stopPropagation();\n onToggle?.(next, event);\n setIsOpen(next);\n };\n\n const handleClose = (event?: IWithPopupToggleEvent) => {\n handleToggle(false, event);\n };\n\n const { refs, floatingStyles, context } = useFloating({\n open: isActive,\n middleware: [\n offset(popupOffset),\n canBeFlipped && flip({ fallbackAxisSideDirection: 'start' }),\n isMinWidthSameAsTrigger && minWidthRelativeToTrigger,\n ...middlewares,\n shouldShowArrow && arrow({ element: arrowRef }),\n ],\n whileElementsMounted: autoUpdate,\n placement,\n onOpenChange: handleToggle,\n });\n\n const hover = useHover(context, {\n enabled: eventType === 'hover',\n delay: { open: hoverDelay, close: 0 },\n handleClose: safePolygon(),\n ...hoverOptions,\n });\n\n const focus = useFocus(context, { enabled: eventType === 'hover', ...focusOptions });\n\n const click = useClick(context, { enabled: eventType === 'click', ...clickOptions });\n\n const dismiss = useDismiss(context, {\n enabled: eventType === 'click',\n ancestorScroll: shouldHideOnScroll,\n ...dismissOptions,\n });\n\n const { getFloatingProps, getReferenceProps } = useInteractions([hover, click, focus, dismiss]);\n\n const { isMounted, status } = useTransitionStatus(context, {\n duration: { close: 500 },\n ...transitionOptions,\n });\n\n const referenceProps: IReferenceProps = getReferenceProps({\n ref: refs.setReference,\n ...(shouldStopPropagation && {\n onClick: stopPropagation,\n }),\n });\n\n const triggerElement = applyAction(trigger, {\n referenceProps: !isTriggerWrapped ? referenceProps : undefined,\n triggerProps: {\n isActive,\n isDisabled,\n ...(!isTriggerWrapped && { data, testId, ...referenceProps }),\n },\n });\n\n return (\n <>\n {isTriggerWrapped ? (\n <div\n className={clsx(classes.trigger, {\n [classes.clickable]: eventType === 'click',\n [classes.disabled]: isDisabled,\n [classes.active]: isActive,\n })}\n {...referenceProps}\n {...addDataAttributes(data, testId)}\n >\n {triggerElement}\n </div>\n ) : (\n triggerElement\n )}\n {isMounted && (\n <FloatingPortal\n root={shouldRenderInBody ? document.body : (refs.reference.current as HTMLElement)}\n >\n <div\n ref={refs.setFloating}\n style={floatingStyles}\n className={classes.popup}\n {...getFloatingProps()}\n {...addDataAttributes(popupData, testId, 'popup')}\n >\n <div className={classes[`dropdown-${status}`]}>\n {shouldShowArrow && (\n <FloatingArrow\n {...arrowProps}\n ref={arrowRef}\n context={context}\n className={classes.arrow}\n />\n )}\n {applyAction(children, { floatingContext: context, onClose: handleClose })}\n </div>\n </div>\n </FloatingPortal>\n )}\n </>\n );\n};\n","export const DEFAULT_OFFSET = 6;\n\nexport const POPUP_EVENT_TYPES = ['hover', 'click'] as const;\n","import { animations, colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport type { IListSizes as IListItemSizes } from '../../types';\n\nconst ITEM_HORIZONTAL_PADDING = 16;\nconst ICON_SIZE = 20;\nconst ICON_GAP = 12;\n\nexport const useStyles = createThemedStyles('ListItem', {\n root: {\n display: 'flex',\n alignItems: 'center',\n gap: ICON_GAP,\n boxSizing: 'border-box',\n fontSize: 16,\n whiteSpace: 'nowrap',\n minHeight: 40,\n padding: [0, ITEM_HORIZONTAL_PADDING],\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n cursor: 'pointer',\n },\n\n default: {},\n\n destructive: {},\n\n focused: {},\n\n disabledItem: {\n cursor: 'default',\n },\n\n spacer: {\n height: 1,\n backgroundColor: colors.BORDER_LIGHT,\n },\n\n withIconGap: {\n paddingLeft: ITEM_HORIZONTAL_PADDING + ICON_SIZE + ICON_GAP,\n },\n\n icon: {\n width: ICON_SIZE,\n height: ICON_SIZE,\n flexShrink: 0,\n },\n\n content: {\n flexGrow: 1,\n },\n\n chevron: {},\n});\n\nexport type IListItemStyles = ITweakStyles<typeof useStyles, IListItemSizes>;\n","import { FC, MouseEvent, KeyboardEvent, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addClickHandler,\n addDataAttributes,\n isArrayNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../../../types';\nimport { renderIcon, IIcon, Icon } from '../../../Icon';\nimport type { IListSize as IListItemSize } from '../../types';\nimport { useStyles, IListItemStyles } from './ListItem.styles';\n\nexport interface IListItemProps extends ICommonProps<IListItemStyles> {\n item: ReactNode;\n view?: 'default' | 'destructive';\n icon?: IIcon;\n nestedItems?: IListItemProps[];\n size?: IListItemSize;\n isFocused?: boolean;\n disabled?: boolean;\n shouldDrawSpacerAbove?: boolean;\n shouldDrawSpacerBelow?: boolean;\n withIconGap?: boolean;\n onClick?: (event: MouseEvent | KeyboardEvent) => void;\n}\n\nexport const ListItem: FC<IListItemProps> = ({\n icon,\n item,\n nestedItems,\n size,\n disabled: isDisabled,\n isFocused,\n shouldDrawSpacerAbove,\n shouldDrawSpacerBelow,\n testId,\n tweakStyles,\n view = 'default',\n withIconGap,\n data,\n onClick,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <>\n {shouldDrawSpacerAbove && <div className={classes.spacer} />}\n <div\n className={clsx(classes.root, classes[view], isNotEmpty(size) && classes[size], {\n [classes.disabledItem]: isDisabled,\n [classes.withIconGap]: withIconGap,\n [classes.focused]: isFocused,\n })}\n {...addClickHandler(onClick, !isDisabled)}\n {...addDataAttributes({ ...data, disabled: isDisabled ? true : undefined }, testId)}\n >\n {isReactNodeNotEmpty(icon) && <span className={classes.icon}>{renderIcon(icon)}</span>}\n <span className={classes.content}>{item}</span>\n {isArrayNotEmpty(nestedItems) && (\n <span className={clsx(classes.icon, classes.chevron)}>\n <Icon type=\"chevron-right\" />\n </span>\n )}\n </div>\n {shouldDrawSpacerBelow && <div className={classes.spacer} />}\n </>\n );\n};\n","import { colors, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IWithPopupStyles } from '../WithPopup';\nimport { IListSizes } from './types';\n\nexport const useStyles = createThemedStyles('List', {\n root: {\n minWidth: 180,\n backgroundColor: colors.CLASSIC_WHITE,\n padding: [8, 0],\n listStyle: 'none',\n margin: 0,\n textAlign: 'left',\n },\n\n nestedItems: {\n marginTop: -8,\n paddingLeft: 4,\n },\n});\n\nexport const withPopupStyles: IWithPopupStyles = {\n trigger: {\n width: '100%',\n },\n};\n\nexport type IListStyles = ITweakStyles<typeof useStyles, IListSizes>;\n","import { FC, Fragment, KeyboardEvent, MouseEvent } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { WithPopup } from '../WithPopup';\nimport { IListItemProps, ListItem } from './components';\nimport { IListItem, IListSize } from './types';\nimport { useStyles, IListStyles, withPopupStyles } from './List.styles';\n\nexport interface IListProps extends ICommonProps<IListStyles> {\n items: IListItem[];\n size?: IListSize;\n onClick?: (event: MouseEvent | KeyboardEvent) => void;\n}\n\nexport const List: FC<IListProps> = ({ items, size, testId, data, tweakStyles, onClick }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const handleItemClick = (\n event: MouseEvent | KeyboardEvent,\n { onClick: itemOnClick }: IListItem,\n ) => {\n if (isNotEmpty(itemOnClick)) {\n itemOnClick(event);\n onClick?.(event);\n }\n };\n\n const filteredItems = items.filter(({ isHidden }) => !isHidden);\n\n return (\n <div\n className={clsx(classes.root, isNotEmpty(size) && classes[size])}\n {...addDataAttributes(data, testId)}\n >\n {filteredItems.map((item, i) => {\n const itemProps: IListItemProps = {\n testId: getTestId(testId, `item-${i}`),\n size,\n ...item,\n shouldDrawSpacerAbove: item.shouldDrawSpacerAbove && i !== 0,\n shouldDrawSpacerBelow: item.shouldDrawSpacerBelow && i !== items.length - 1,\n onClick: (event) => handleItemClick(event, item),\n };\n\n return (\n <Fragment key={i}>\n {isArrayNotEmpty(item.nestedItems) ? (\n <WithPopup\n eventType=\"hover\"\n tweakStyles={withPopupStyles}\n placement=\"right-start\"\n popupOffset={0}\n shouldRenderInBody={false}\n trigger={({ triggerProps }) => (\n <ListItem {...itemProps} isFocused={triggerProps.isActive} />\n )}\n >\n <div className={classes.nestedItems}>\n <List items={item.nestedItems} size={size} onClick={onClick} />\n </div>\n </WithPopup>\n ) : (\n <ListItem {...itemProps} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n};\n","import { animations, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IListStyles } from '../List';\n\nexport const useStyles = createThemedStyles('AccountInfo', {\n root: {\n display: 'flex',\n },\n\n account: {\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n cursor: 'pointer',\n },\n\n accountName: {\n margin: [0, 2, 0, 10],\n fontSize: 14,\n transition: animations.defaultTransition,\n transitionProperty: 'color',\n },\n\n accountNameOpened: {},\n\n accountChevron: {\n width: 16,\n height: 16,\n transition: animations.defaultTransition,\n transitionProperty: 'transform, color',\n },\n\n accountChevronOpened: {\n transform: 'rotate(180deg)',\n },\n\n accountMenu: {\n position: 'absolute',\n zIndex: 90,\n top: '100%',\n right: 0,\n marginTop: 8,\n },\n\n avatarIcon: {\n width: 32,\n height: 32,\n },\n\n ...animations.slideUp,\n});\n\nexport type IAccountInfoStyles = ITweakStyles<typeof useStyles, { tweakList: IListStyles }>;\n","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('AddButton', {\n root: {\n display: 'flex',\n alignItems: 'center',\n padding: '0px 16px',\n height: 52,\n cursor: 'pointer',\n outline: 'none',\n transition: 'border-color 0.1s ease-in, background-color 0.1s ease-in',\n fontSize: 14,\n\n '&:hover': {\n transition: 'border-color 0.1s ease-in, background-color 0.1s ease-in',\n },\n },\n\n disabled: {\n cursor: 'default',\n },\n\n icon: {\n width: 20,\n display: 'inline-block',\n marginRight: 8,\n },\n\n fullWidth: {\n width: '100%',\n },\n});\n\nexport type IAddButtonStyles = ITweakStyles<typeof useStyles>;\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('DotsPreloader', {\n root: {\n display: 'flex',\n gap: 4,\n '--dot-size': '8px',\n\n '&::before, &::after': {\n content: '\"\"',\n extend: 'fadedDot',\n },\n\n '&::before': {\n animationDelay: '0',\n },\n\n '&::after': {\n animationDelay: '360ms',\n },\n },\n\n /* ----------- 3 DOTS ---------- */\n\n '@keyframes FadedDots': {\n '0%': {\n opacity: 0.2,\n },\n '30%': {\n opacity: 1,\n },\n '100%': {\n opacity: 0.2,\n },\n },\n\n // используется в .dot и в before и after элементах root\n fadedDot: {\n display: 'block',\n animationDuration: 750,\n animationIterationCount: 'infinite',\n animationName: '$FadedDots',\n borderRadius: '50%',\n width: 'var(--dot-size)',\n height: 'var(--dot-size)',\n backgroundColor: 'currentColor',\n },\n\n dot: {\n extend: 'fadedDot',\n animationDelay: '180ms',\n },\n});\n\nexport type IDotsPreloaderStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { ICommonProps } from '../../../../types';\nimport { useStyles, IDotsPreloaderStyles } from './DotsPreloader.styles';\n\nexport type IDotsPreloaderProps = Pick<ICommonProps<IDotsPreloaderStyles>, 'tweakStyles'>;\n\nexport const DotsPreloader: FC<IDotsPreloaderProps> = ({ tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <div className={classes.root}>\n <span className={classes.dot} />\n </div>\n );\n};\n","import { FC } from 'react';\n\nexport const DefaultPreloader: FC = () => (\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient x1=\"8.042%\" y1=\"0%\" x2=\"65.682%\" y2=\"23.865%\" id=\"a\">\n <stop stopColor=\"currentColor\" stopOpacity=\"0\" offset=\"0%\" />\n <stop stopColor=\"currentColor\" stopOpacity=\".631\" offset=\"63.146%\" />\n <stop stopColor=\"currentColor\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <g transform=\"translate(2,2)\" fill=\"none\">\n <path d=\"M36 18c0-9.94-8.06-18-18-18\" stroke=\"url(#a)\" strokeWidth=\"3\">\n <animateTransform\n xmlns=\"http://www.w3.org/2000/svg\"\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n begin=\"0s\"\n repeatCount=\"indefinite\"\n fill=\"freeze\"\n />\n </path>\n </g>\n </svg>\n);\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('SvgPreloader', {\n root: {\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n});\n\nexport type ISvgPreloaderStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { useTheme } from '../../../../theme';\nimport { ICommonProps } from '../../../../types';\nimport { IPreloaderSvgType } from '../../types';\nimport { DefaultPreloader } from '../DefaultPreloader';\nimport { ISvgPreloaderStyles, useStyles } from './SvgPreloader.styles';\n\nexport interface ISvgPreloaderProps extends Pick<ICommonProps<ISvgPreloaderStyles>, 'tweakStyles'> {\n type: IPreloaderSvgType;\n}\n\nexport const SvgPreloader: FC<ISvgPreloaderProps> = ({ type = 'default', tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const theme = useTheme();\n const PreloaderIcon = theme.preloaders?.[type] ?? DefaultPreloader;\n const isInlineSvg = typeof PreloaderIcon === 'string';\n\n return isInlineSvg ? (\n <div className={classes.root} dangerouslySetInnerHTML={{ __html: PreloaderIcon }} />\n ) : (\n <PreloaderIcon />\n );\n};\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { IDotsPreloaderStyles, ISvgPreloaderStyles } from './components';\n\nexport const useStyles = createThemedStyles('ThemedPreloader', {\n root: {\n display: 'flex',\n },\n\n dots: {},\n\n default: {},\n\n logo: {},\n\n currentColor: {\n color: 'currentColor',\n },\n});\n\nexport type IThemedPreloaderStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakDotsPreloader: IDotsPreloaderStyles;\n tweakSvgPreloader: ISvgPreloaderStyles;\n }\n>;\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { SvgPreloader, DotsPreloader } from './components';\nimport { IPreloaderSvgType } from './types';\nimport { useStyles, IThemedPreloaderStyles } from './ThemedPreloader.styles';\n\nexport interface IThemedPreloaderProps extends ICommonProps<IThemedPreloaderStyles> {\n /** @default 'default' */\n type?: 'dots' | IPreloaderSvgType;\n /** @default false */\n useCurrentColor?: boolean;\n}\n\nexport const ThemedPreloader: FC<IThemedPreloaderProps> = ({\n type = 'default',\n useCurrentColor = false,\n data,\n testId,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakDotsPreloaderStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakDotsPreloader',\n currentComponentName: 'ThemedPreloader',\n });\n\n const tweakSvgPreloaderStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakSvgPreloader',\n currentComponentName: 'ThemedPreloader',\n });\n\n return (\n <div\n className={clsx(classes.root, classes[type], {\n [classes.currentColor]: useCurrentColor,\n })}\n {...addDataAttributes(data, testId)}\n >\n {type === 'dots' ? (\n <DotsPreloader tweakStyles={tweakDotsPreloaderStyles} />\n ) : (\n <SvgPreloader type={type} tweakStyles={tweakSvgPreloaderStyles} />\n )}\n </div>\n );\n};\n","import { animations, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\nimport { IButtonSize } from './types';\n\nexport const useStyles = createThemedStyles('Button', {\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n outline: 'none',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color, box-shadow, border-color',\n maxWidth: '100%',\n border: [1, 'solid', 'transparent'],\n position: 'relative',\n boxShadow: 'none',\n\n '&[disabled]': {\n cursor: 'default',\n pointerEvents: 'none',\n },\n },\n\n primary: {},\n secondary: {},\n outline: {},\n warning: {},\n destructive: {},\n text: {},\n custom: {},\n\n children: {},\n\n icon: {\n width: 20,\n height: 20,\n flexShrink: 0,\n },\n\n iconFromLeft: {\n flexDirection: 'row',\n gap: 6,\n\n '& $icon': {\n marginLeft: -4,\n },\n },\n\n iconFromRight: {\n flexDirection: 'row-reverse',\n gap: 6,\n\n '& $icon': {\n marginRight: -4,\n },\n },\n\n onlyIcon: {},\n\n withIcon: {},\n\n s: {\n padding: [0, 12],\n height: 32,\n fontSize: 14,\n letterSpacing: 0.15,\n\n '&$onlyIcon': {\n padding: 0,\n width: 32,\n },\n\n '& $icon': {\n width: 16,\n height: 16,\n },\n\n '& $iconFromLeft': {\n gap: 4,\n },\n\n '& $iconFromRight': {\n gap: 4,\n },\n },\n\n m: {\n padding: [0, 12],\n height: 42,\n fontSize: 16,\n\n '& $iconFromLeft': {\n gap: 6,\n },\n\n '& $iconFromRight': {\n gap: 6,\n },\n\n '&$onlyIcon': {\n padding: 0,\n width: 42,\n },\n },\n\n l: {\n padding: [0, 16],\n height: 48,\n fontSize: 16,\n\n '& $iconFromLeft': {\n gap: 6,\n },\n\n '& $iconFromRight': {\n gap: 6,\n },\n\n '&$onlyIcon': {\n padding: 0,\n width: 48,\n },\n },\n\n xl: {\n padding: [0, 20],\n height: 56,\n fontSize: 16,\n\n '&$onlyIcon': {\n padding: 0,\n width: 56,\n },\n\n '& $iconFromLeft': {\n gap: 8,\n },\n\n '& $iconFromRight': {\n gap: 8,\n },\n },\n\n fullWidth: {\n minWidth: 'auto',\n width: '100%',\n },\n\n inline: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n active: {},\n\n content: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n },\n\n loader: {\n display: 'none',\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n\n loading: {\n '& $content': {\n visibility: 'hidden',\n },\n\n '& $loader': {\n display: 'block',\n },\n },\n\n disabled: {},\n});\n\nconst dotsPreloaderStyles: IThemedPreloaderStyles = {\n tweakDotsPreloader: {\n fadedDot: {\n width: 6,\n height: 6,\n },\n },\n};\n\nexport const getPreloaderStyles = (size: IButtonSize): IThemedPreloaderStyles | undefined =>\n size === 's' || size === 'm' ? dotsPreloaderStyles : undefined;\n\nexport type IButtonStyles = ITweakStyles<\n typeof useStyles,\n { tweakPreloader: IThemedPreloaderStyles }\n>;\n","import { ReactNode, ButtonHTMLAttributes, MouseEvent, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps, IDomElementInteractions } from '../../types';\nimport { renderIcon, IIcon } from '../Icon';\nimport { ThemedPreloader, IThemedPreloaderProps } from '../ThemedPreloader';\nimport { IButtonSize, IButtonView } from './types';\nimport { useStyles, IButtonStyles, getPreloaderStyles } from './Button.styles';\n\nexport interface IButtonProps\n extends ICommonProps<IButtonStyles>,\n IDomElementInteractions<HTMLButtonElement> {\n children?: ReactNode;\n /** @default 'button' */\n type?: ButtonHTMLAttributes<unknown>['type'];\n /** @default 'l' */\n size?: IButtonSize;\n /** @default 'primary' */\n view?: IButtonView;\n /** @default false */\n shouldSkipTabNavigation?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isFullWidth?: boolean;\n /**\n * Нужно ли убирать скругление у кнопки слева\n * @default false\n */\n isInline?: boolean;\n /**\n * Нужно ли показать лоадер и заблокировать кнопку\n * @default false\n */\n isLoading?: boolean;\n /** @default false */\n isActive?: boolean;\n icon?: IIcon;\n /** @default 'left' */\n iconPosition?: 'left' | 'right';\n /** @default 'dots' */\n preloaderType?: IThemedPreloaderProps['type'];\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n onMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void | Promise<void>;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, IButtonProps>(function Button(\n {\n type = 'button',\n children,\n size = 'l',\n view = 'primary',\n isFullWidth = false,\n isInline = false,\n isDisabled = false,\n isActive = false,\n isLoading = false,\n shouldSkipTabNavigation = false,\n data,\n testId,\n tweakStyles,\n icon,\n iconPosition = 'left',\n preloaderType = 'dots',\n ...interactions\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakPreloaderStyles = useTweakStyles({\n innerStyles: getPreloaderStyles(size),\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'Button',\n });\n\n const hasIcon = isReactNodeNotEmpty(icon);\n const hasChildren = isReactNodeNotEmpty(children);\n const hasNoAction = isDisabled || isLoading;\n\n return (\n <button\n ref={ref}\n type={type}\n className={clsx(classes.root, classes[size], classes[view], {\n [classes.disabled]: isDisabled,\n [classes.fullWidth]: isFullWidth,\n [classes.inline]: isInline,\n [classes.active]: isActive,\n [classes.loading]: isLoading,\n [classes.onlyIcon]: hasIcon && !hasChildren,\n })}\n tabIndex={shouldSkipTabNavigation ? -1 : undefined}\n disabled={hasNoAction}\n {...interactions}\n {...addDataAttributes(data, testId)}\n >\n <span\n className={clsx(classes.content, {\n [classes.iconFromRight]: hasChildren && hasIcon && iconPosition === 'right',\n [classes.iconFromLeft]: hasChildren && hasIcon && iconPosition === 'left',\n })}\n >\n {hasIcon && (\n <span className={classes.icon}>{isReactNodeNotEmpty(icon) && renderIcon(icon)}</span>\n )}\n {hasChildren && (\n <span className={clsx(classes.children, hasIcon && classes.withIcon)}>{children}</span>\n )}\n </span>\n\n {isLoading && (\n <span className={classes.loader}>\n <ThemedPreloader\n type={preloaderType}\n useCurrentColor\n tweakStyles={tweakPreloaderStyles}\n />\n </span>\n )}\n </button>\n );\n});\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { ICheckboxSizes } from './types';\n\nexport const useStyles = createThemedStyles('Checkbox', {\n root: {\n position: 'relative',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: 14,\n width: 'fit-content',\n },\n\n checked: {},\n\n invalid: {},\n\n disabled: {\n cursor: 'default',\n pointerEvents: 'none',\n },\n\n input: {\n width: 1,\n height: 1,\n position: 'absolute',\n opacity: 0,\n },\n\n children: {\n display: 'flex',\n alignItems: 'center',\n },\n\n check: {\n width: 18,\n height: 18,\n borderRadius: 2,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n },\n\n labelPositionLeft: {\n flexDirection: 'row-reverse',\n },\n});\n\nexport type ICheckboxStyles = ITweakStyles<typeof useStyles, ICheckboxSizes>;\n","import { ReactNode, ChangeEvent, KeyboardEvent } from 'react';\nimport clsx from 'clsx';\nimport {\n getSelectKeyHandler,\n isNotEmpty,\n isReactNodeNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { ICheckboxSize } from './types';\nimport { useStyles, ICheckboxStyles } from './Checkbox.styles';\n\nexport interface ICheckboxProps<V> extends ICommonProps<ICheckboxStyles> {\n value?: V;\n children?: ReactNode;\n size?: ICheckboxSize;\n /** @default false */\n isChecked?: boolean;\n /** @default false */\n isSemiChecked?: boolean;\n /** @default false */\n isInvalid?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isReadonly?: boolean;\n /** @default 'right' */\n labelPosition?: 'right' | 'left';\n onSelect?: (\n value: { value?: V; isSelected: boolean },\n event: ChangeEvent<HTMLInputElement> | KeyboardEvent,\n ) => void;\n}\n\nexport function Checkbox<V>({\n value,\n children,\n size,\n isChecked = false,\n isSemiChecked = false,\n isInvalid = false,\n isDisabled = false,\n isReadonly = false,\n labelPosition = 'right',\n data,\n testId,\n tweakStyles,\n onSelect,\n}: ICheckboxProps<V>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const hasAction = !isDisabled && !isReadonly;\n const isSelected = isChecked || isSemiChecked;\n\n const onToggle = (event: ChangeEvent<HTMLInputElement> | KeyboardEvent) =>\n onSelect?.({ value, isSelected: !isSelected }, event);\n\n return (\n <label\n className={clsx(classes.root, isNotEmpty(size) && classes[size], {\n [classes.checked]: isSelected,\n [classes.invalid]: isInvalid,\n [classes.disabled]: isDisabled,\n [classes.labelPositionLeft]: labelPosition === 'left',\n })}\n {...addDataAttributes(data, testId)}\n >\n <input\n className={classes.input}\n type=\"checkbox\"\n checked={isSelected}\n disabled={isDisabled}\n readOnly={isReadonly}\n {...(hasAction && {\n onChange: onToggle,\n onKeyDown: getSelectKeyHandler(onToggle),\n })}\n />\n <div className={classes.check}>\n {isSelected && <Icon type={isSemiChecked ? 'minus' : 'check'} />}\n </div>\n {isReactNodeNotEmpty(children) && <div className={classes.children}>{children}</div>}\n </label>\n );\n}\n","import { rgba } from '../../helpers';\nimport { animations, colors, createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('CloseButton', {\n root: {\n width: 40,\n height: 40,\n maxWidth: '100%',\n maxHeight: '100%',\n padding: 5,\n color: colors.FONT_MEDIUM,\n border: 0,\n borderRadius: '50%',\n appearance: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n\n '&:hover': {\n backgroundColor: rgba(colors.BORDER_MAIN, 0.5),\n },\n\n '&:focus': {\n backgroundColor: colors.GREY_FOCUS,\n },\n\n '&:active': {\n backgroundColor: rgba(colors.FONT_DISABLED, 0.5),\n },\n },\n});\n\nexport type ICloseButtonStyles = ITweakStyles<typeof useStyles>;\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('CssBaseline', {\n '@global html, body': {\n fontFamily: 'Arial, sans-serif',\n color: colors.FONT_MAIN,\n padding: 0,\n margin: 0,\n },\n\n '@global': {},\n\n root: {},\n});\n\nexport type ICssBaselineStyles = ITweakStyles<typeof useStyles>;\n","import { createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('WithMessages', {\n withMessages: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n position: 'relative',\n },\n\n error: {\n color: 'red',\n },\n\n info: {\n color: 'gray',\n },\n\n horizontal: {\n display: 'flex',\n\n '& > *': {\n flexGrow: 1,\n\n '&:not(:first-child)': {\n marginLeft: -1,\n },\n },\n },\n\n vertical: {\n display: 'flex',\n flexDirection: 'column',\n\n '& > *:not(:first-child)': {\n marginTop: -1,\n },\n },\n\n message: {\n fontSize: 12,\n },\n\n children: {},\n});\n\nexport type IWithMessagesStyles = ITweakStyles<typeof useStyles>;\n","import { forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { IWithMessagesStyles, useStyles } from './WithMessages.styles';\n\nexport interface IWithMessagesProps extends ICommonProps<IWithMessagesStyles> {\n children: ReactNode;\n infoMessage?: ReactNode;\n errorMessage?: ReactNode;\n controlsDirection?: 'horizontal' | 'vertical';\n}\n\nexport const WithMessages = forwardRef<HTMLDivElement, IWithMessagesProps>(function WithMessages(\n { children, infoMessage, errorMessage, controlsDirection, tweakStyles, testId, data },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const shouldShowError = isReactNodeNotEmpty(errorMessage);\n const shouldShowInfo = isReactNodeNotEmpty(infoMessage) && !shouldShowError;\n\n return (\n <div\n ref={ref}\n className={classes.withMessages}\n data-invalid={shouldShowError ? true : undefined}\n {...addDataAttributes(data, testId)}\n >\n {isReactNodeNotEmpty(children) && (\n <div\n className={clsx(classes.children, {\n [classes.horizontal]: controlsDirection === 'horizontal',\n [classes.vertical]: controlsDirection === 'vertical',\n })}\n >\n {children}\n </div>\n )}\n {(shouldShowError || shouldShowInfo) && (\n <div className={classes.message}>\n {shouldShowError && (\n <div className={classes.error} {...addDataTestId(testId, 'error')}>\n {errorMessage}\n </div>\n )}\n {shouldShowInfo && (\n <div className={classes.info} {...addDataTestId(testId, 'info')}>\n {infoMessage}\n </div>\n )}\n </div>\n )}\n </div>\n );\n});\n","import { isObject } from '@true-engineering/true-react-platform-helpers';\nimport { IIcon } from '../Icon';\nimport { IControlWrapperIcon } from './types';\n\nexport const isControlWrapperIcon = (\n iconItem: IIcon | IControlWrapperIcon,\n): iconItem is IControlWrapperIcon => isObject(iconItem) && 'iconComponent' in iconItem;\n\nexport const convertToControlWrapperIcon = (\n iconItem: IIcon | IControlWrapperIcon,\n): IControlWrapperIcon => (isControlWrapperIcon(iconItem) ? iconItem : { iconComponent: iconItem });\n","import { animations, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\nimport { IControlWrapperSizes } from './types';\n\nconst { CONTROL, Z_INDEX } = dimensions;\n\nexport const useStyles = createThemedStyles('ControlWrapper', {\n controlWrapper: {\n '--control-height': `${CONTROL.HEIGHT - 2}px`, // borders\n '--control-padding': `${CONTROL.PADDING}px`,\n '--icon-size': `${CONTROL.ICON_SIZE}px`,\n '--icon-inner-size': `${CONTROL.ICON_INNER_SIZE}px`,\n '--icon-gap': `${CONTROL.ICON_GAP}px`,\n display: 'flex',\n width: '100%',\n backgroundColor: 'white',\n position: 'relative',\n border: ['solid', 1, 'gray'],\n borderRadius: 8,\n boxSizing: 'border-box',\n zIndex: 0,\n },\n\n disabled: {},\n\n focused: {\n position: 'relative',\n zIndex: Z_INDEX.CONTROL_FOCUS,\n },\n\n invalid: {\n zIndex: Z_INDEX.CONTROL_INVALID,\n },\n\n withValue: {},\n\n loading: {},\n\n minContent: {\n width: 'min-content',\n },\n\n label: {\n position: 'absolute',\n pointerEvents: 'none',\n left: 'var(--control-padding)',\n top: 'calc(var(--control-height) / 2)',\n transformOrigin: 'top left',\n transform: 'translateY(-50%)',\n transition: animations.defaultTransition,\n transitionProperty: 'transform, color',\n fontSize: 16,\n zIndex: 1,\n },\n\n activeLabel: {},\n\n requiredLabel: {\n '&:after': {\n content: '\"\"',\n display: 'block',\n position: 'absolute',\n top: 0,\n right: -8,\n width: 6,\n height: 6,\n borderRadius: '50%',\n backgroundColor: 'orange',\n },\n },\n\n disabledLabel: {},\n\n wrapper: {\n display: 'flex',\n flexGrow: 1,\n minWidth: 0, // Нужно для селекта\n textAlign: 'left',\n },\n\n controls: {\n display: 'flex',\n marginLeft: 'auto',\n flexShrink: 0,\n },\n\n startControls: {\n paddingLeft: 'var(--control-padding)',\n },\n\n icon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 'var(--icon-size)',\n width: 'var(--icon-size)',\n height: '100%',\n flexShrink: 0,\n cursor: 'default',\n\n '&:last-child': {\n paddingRight: 6,\n },\n },\n\n iconInner: {\n width: 'var(--icon-inner-size)',\n },\n\n customIcon: {\n width: 'unset',\n\n '& $iconInner': {\n width: 'unset',\n },\n },\n\n startIcon: {},\n\n endIcon: {},\n\n activeIcon: {\n cursor: 'pointer',\n outline: 'none',\n },\n\n clearIcon: {\n '& $iconInner': {\n width: 'var(--icon-inner-size)',\n },\n },\n\n loader: {\n '& $iconInner': {\n width: 'var(--icon-inner-size)',\n },\n },\n\n withStartControls: {},\n\n /* groupPositions */\n 'placement-top': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-bottom': {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n\n 'placement-top-left': {\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-top-right': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-bottom-left': {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-bottom-right': {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n 'placement-left': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n 'placement-right': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n 'placement-middle': {\n borderRadius: 0,\n },\n});\n\nexport type IControlWrapperStyles = ITweakStyles<\n typeof useStyles,\n { tweakPreloader: IThemedPreloaderStyles } & IControlWrapperSizes\n>;\n","import { CSSProperties, FC, ReactNode, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n addClickHandler,\n addDataAttributes,\n addDataTestId,\n getArray,\n IMaybeArray,\n isArrayNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useResizeRef, useTweakStyles } from '../../hooks';\nimport { IClickHandlerEvent, ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { convertToControlWrapperIcon } from './helpers';\nimport { IControlWrapperIcon, IControlWrapperSize, IGroupPlacement } from './types';\nimport { IControlWrapperStyles, useStyles } from './ControlWrapper.styles';\n\nexport interface IControlWrapperProps extends ICommonProps<IControlWrapperStyles> {\n children: ReactNode;\n label?: ReactNode;\n /** @deprecated */\n icon?: IMaybeArray<IIcon | IControlWrapperIcon>;\n startIcon?: IMaybeArray<IIcon | IControlWrapperIcon>;\n endIcon?: IMaybeArray<IIcon | IControlWrapperIcon>;\n size?: IControlWrapperSize;\n groupPlacement?: IGroupPlacement;\n /** @default false */\n isInvalid?: boolean;\n /** @default false */\n isFocused?: boolean;\n /** @default false */\n hasValue?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isFullWidth?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isActive?: boolean;\n onClear?: (event: IClickHandlerEvent) => void;\n}\n\nexport const ControlWrapper: FC<IControlWrapperProps> = ({\n label,\n icon,\n startIcon,\n endIcon = icon,\n groupPlacement,\n isInvalid,\n isFocused,\n isRequired,\n isLoading,\n isFullWidth,\n isActive,\n isDisabled,\n hasValue,\n size,\n testId,\n children,\n tweakStyles,\n data,\n onClear,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const [startControlsWidth, setStartControlsWidth] = useState<number>();\n\n const startIcons = getArray(startIcon).map(convertToControlWrapperIcon);\n const endIcons = getArray(endIcon).map(convertToControlWrapperIcon);\n\n const hasStartIcons = isArrayNotEmpty(startIcons);\n const hasEndIcons = !isLoading && isArrayNotEmpty(endIcons);\n const hasClearButton = !isDisabled && !isLoading && hasValue && isNotEmpty(onClear);\n const hasEndControls = hasEndIcons || hasClearButton || isLoading;\n\n const tweakPreloaderStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'ControlWrapper',\n });\n\n const startControlsRef = useResizeRef({\n onTargetChange: (target) => setStartControlsWidth(target.clientWidth),\n });\n\n const renderIconControl = (\n { key, iconComponent, onClick, shouldResetSize = false }: IControlWrapperIcon,\n iconType: 'start' | 'end' | 'clear',\n index?: number,\n ) => (\n <div\n key={key ?? index}\n className={clsx(classes.icon, classes[`${iconType}Icon`], {\n [classes.activeIcon]: !isDisabled && isNotEmpty(onClick),\n [classes.customIcon]: shouldResetSize,\n })}\n {...addClickHandler(onClick, !isDisabled)}\n {...addDataTestId(testId, `${iconType}-icon`)}\n >\n <div className={classes.iconInner}>{renderIcon(iconComponent)}</div>\n </div>\n );\n\n return (\n <div\n className={clsx(\n classes.controlWrapper,\n isNotEmpty(groupPlacement) && classes[`placement-${groupPlacement}`],\n isNotEmpty(size) && classes[size],\n {\n [classes.invalid]: isInvalid,\n [classes.focused]: isFocused,\n [classes.withValue]: hasValue,\n [classes.disabled]: isDisabled,\n [classes.loading]: isLoading,\n [classes.minContent]: !isFullWidth,\n [classes.withStartControls]: hasStartIcons,\n },\n )}\n style={\n hasStartIcons\n ? ({ '--start-controls-width': `${startControlsWidth}px` } as CSSProperties)\n : undefined\n }\n {...addDataAttributes(data, testId)}\n >\n {isReactNodeNotEmpty(label) && (\n <div\n className={clsx(classes.label, {\n [classes.requiredLabel]: isRequired,\n [classes.disabledLabel]: isDisabled,\n [classes.activeLabel]: isFocused || hasValue || isActive,\n })}\n >\n {label}\n </div>\n )}\n <div className={classes.wrapper}>\n {hasStartIcons && (\n <div className={clsx(classes.controls, classes.startControls)} ref={startControlsRef}>\n {startIcons.map((iconProps, index) => renderIconControl(iconProps, 'start', index))}\n </div>\n )}\n\n {children}\n\n {hasEndControls && (\n <div className={classes.controls}>\n {hasClearButton &&\n renderIconControl({ iconComponent: 'close', onClick: onClear }, 'clear')}\n\n {hasEndIcons &&\n endIcons.map((iconProps, index) => renderIconControl(iconProps, 'end', index))}\n\n {isLoading && (\n <div\n className={clsx(classes.icon, classes.loader)}\n {...addDataTestId(testId, 'loading')}\n >\n <div className={classes.iconInner}>\n <ThemedPreloader tweakStyles={tweakPreloaderStyles} />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { IControlWrapperStyles } from '../ControlWrapper';\nimport { IWithMessagesStyles } from '../WithMessages';\n\nconst PADDING_WITH_UNITS = 8;\n\nexport const useStyles = createThemedStyles('Input', {\n inputContent: {\n height: 'var(--control-height)',\n padding: [0, 'var(--control-padding)'],\n fontSize: 16,\n fontFamily: 'inherit',\n },\n\n input: {\n extend: 'inputContent',\n width: '100%',\n outline: 'none',\n outlineStyle: 'none',\n boxSizing: 'border-box',\n border: 'none',\n background: 'none',\n color: 'black',\n\n '&[readonly]': {\n cursor: 'default',\n },\n\n '&::placeholder': {\n opacity: 1,\n },\n\n '&::-webkit-date-and-time-value': {\n textAlign: 'left',\n },\n\n MozAppearance: 'textfield',\n '&::-webkit-inner-spin-button,&::-webkit-outer-spin-button,&::-webkit-calendar-picker-indicator':\n {\n display: 'none',\n WebkitAppearance: 'none',\n margin: 0,\n },\n },\n\n defaultWrapper: {\n display: 'flex',\n flexGrow: 1,\n },\n\n autoSizeWrapper: {\n position: 'relative',\n minWidth: 0,\n zIndex: 0,\n },\n\n autoSized: {\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n },\n\n withUnits: {\n extend: 'autoSized',\n paddingRight: `calc(${PADDING_WITH_UNITS}px + var(--units-width) - 1px)`,\n\n '& + $fakeValue': {\n paddingRight: PADDING_WITH_UNITS,\n },\n },\n\n withLabel: {},\n\n withValue: {},\n\n fakeValue: {\n extend: 'inputContent',\n visibility: 'hidden',\n maxWidth: '100%',\n overflow: 'hidden',\n minWidth: 8,\n whiteSpace: 'nowrap',\n },\n\n units: {\n alignSelf: 'center',\n paddingRight: 'var(--control-padding)',\n },\n\n focusedInput: {},\n\n disabledInput: {},\n\n invalidInput: {},\n});\n\nexport type IInputStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakControlWrapper: IControlWrapperStyles;\n tweakWithMessages: IWithMessagesStyles;\n }\n>;\n","import {\n ChangeEvent,\n CSSProperties,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n MutableRefObject,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport InputMask, { Props as ReactInputMaskBaseProps } from 'react-input-mask';\nimport clsx from 'clsx';\nimport {\n addDataTestId,\n isArrayLikeNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useMergedRefs, useResizeRef, useTweakStyles } from '../../hooks';\nimport { IClickHandlerEvent, ICommonProps } from '../../types';\nimport { ControlWrapper, IControlWrapperProps } from '../ControlWrapper';\nimport { IChangeInputEvent } from './types';\nimport { IInputStyles, useStyles } from './Input.styles';\n\nexport interface IInputBaseProps\n extends ICommonProps<IInputStyles>,\n Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'size' | 'className'>,\n Pick<\n IControlWrapperProps,\n | 'label'\n | 'icon'\n | 'endIcon'\n | 'startIcon'\n | 'size'\n | 'groupPlacement'\n | 'isInvalid'\n | 'isRequired'\n | 'isLoading'\n | 'isDisabled'\n >,\n Pick<\n Partial<ReactInputMaskBaseProps>,\n 'mask' | 'maskPlaceholder' | 'alwaysShowMask' | 'beforeMaskedStateChange'\n > {\n value?: string;\n units?: ReactNode;\n /** @default false */\n isReadonly?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default false */\n isClearable?: boolean;\n /** @default false */\n shouldFocusOnMount?: boolean;\n /** @default false */\n isAutoSized?: boolean;\n /** @default false */\n shouldAlwaysShowPlaceholder?: boolean;\n onChange: (value: string, event: IChangeInputEvent, eventType: 'change' | 'clear') => void;\n}\n\nexport const InputBase = forwardRef<HTMLInputElement, IInputBaseProps>(function InputBase(\n {\n value = '',\n placeholder,\n label,\n type = 'text',\n isDisabled,\n autoComplete,\n inputMode: initialInputMode,\n isReadonly,\n isInvalid,\n isActive,\n isClearable,\n isAutoSized,\n name,\n tweakStyles,\n maxLength,\n shouldFocusOnMount,\n units,\n testId,\n tabIndex,\n shouldAlwaysShowPlaceholder,\n onChange,\n onPaste,\n onFocus,\n onBlur,\n onKeyDown,\n // Пропсы react-input-mask\n mask,\n maskPlaceholder,\n alwaysShowMask,\n beforeMaskedStateChange,\n // Пропсы ControlWrapper\n data,\n groupPlacement,\n startIcon,\n icon,\n endIcon = icon,\n isLoading,\n isRequired,\n size,\n children,\n ...inputProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakControlWrapperStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakControlWrapper',\n currentComponentName: 'Input',\n });\n\n const [isFocused, setFocused] = useState(false);\n const [unitsWidth, setUnitsWidth] = useState<number>();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMergedRefs([ref, inputRef]);\n\n // Try to guess input-mode if possible\n const inputMode: IInputBaseProps['inputMode'] =\n initialInputMode ??\n (['email', 'tel', 'url'].includes(type) ? (type as 'email' | 'tel' | 'url') : undefined);\n\n const hasFocus = isFocused || isActive;\n const hasValue = isArrayLikeNotEmpty(value);\n const hasUnits = isReactNodeNotEmpty(units);\n const hasPlaceholder =\n (!isReactNodeNotEmpty(label) || hasFocus || shouldAlwaysShowPlaceholder) &&\n isStringNotEmpty(placeholder);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange(event.currentTarget.value, event, 'change');\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n // для SmartInput нужен event, иначе onChange не вызовется\n const handleInputClear = async (event: IClickHandlerEvent) => {\n // await не убирать (важно для порядка выполнения (сначала onChange, затем focus)\n await onChange('', event, 'clear');\n inputRef.current?.focus();\n };\n\n const unitsRef = useResizeRef({\n onTargetChange: (target) => setUnitsWidth(target.clientWidth),\n });\n\n const props: InputHTMLAttributes<HTMLInputElement> = {\n className: clsx(classes.input, {\n [classes.withUnits]: hasUnits,\n [classes.withValue]: hasValue,\n [classes.withLabel]: isReactNodeNotEmpty(label),\n [classes.autoSized]: isAutoSized,\n [classes.focusedInput]: isFocused,\n [classes.disabledInput]: isDisabled,\n [classes.invalidInput]: isInvalid,\n }),\n style:\n hasUnits && hasValue ? ({ '--units-width': `${unitsWidth}px` } as CSSProperties) : undefined,\n value,\n type,\n autoComplete,\n inputMode,\n disabled: isDisabled,\n placeholder: hasPlaceholder ? placeholder : undefined,\n name,\n maxLength,\n readOnly: isReadonly,\n tabIndex,\n onKeyDown,\n onPaste,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n ...addDataTestId(testId),\n ...inputProps,\n };\n\n useEffect(() => {\n // It works much better than autoFocus for mobile devices\n if (shouldFocusOnMount) {\n inputRef.current?.focus();\n }\n }, [shouldFocusOnMount]);\n\n return (\n <ControlWrapper\n label={label}\n isDisabled={isDisabled}\n isFocused={hasFocus}\n isActive={hasPlaceholder}\n isInvalid={isInvalid}\n hasValue={hasValue}\n isFullWidth={!isAutoSized}\n tweakStyles={tweakControlWrapperStyles}\n onClear={isClearable && hasValue ? handleInputClear : undefined}\n data={data}\n groupPlacement={groupPlacement}\n startIcon={startIcon}\n endIcon={endIcon}\n isLoading={isLoading}\n isRequired={isRequired}\n size={size}\n >\n <div\n className={clsx(classes.defaultWrapper, {\n [classes.autoSizeWrapper]: hasUnits || isAutoSized,\n })}\n >\n {isNotEmpty(mask) ? (\n <InputMask\n ref={mergedRef as unknown as MutableRefObject<InputMask>}\n mask={mask}\n maskPlaceholder={maskPlaceholder}\n alwaysShowMask={alwaysShowMask}\n beforeMaskedStateChange={beforeMaskedStateChange}\n {...props}\n />\n ) : (\n <input ref={mergedRef} {...props} />\n )}\n\n {(hasUnits || isAutoSized) && <div className={classes.fakeValue}>{value}</div>}\n {hasUnits && hasValue && (\n <div className={classes.units} ref={unitsRef}>\n {units}\n </div>\n )}\n </div>\n {children}\n </ControlWrapper>\n );\n});\n","import { forwardRef } from 'react';\nimport { getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { IWithMessagesProps, WithMessages } from '../WithMessages';\nimport { IInputBaseProps, InputBase } from './InputBase';\n\nexport interface IInputProps\n extends IInputBaseProps,\n Pick<IWithMessagesProps, 'infoMessage' | 'errorMessage'> {}\n\nexport const Input = forwardRef<HTMLInputElement, IInputProps>(function Input(\n { infoMessage, errorMessage, isInvalid, testId, tweakStyles, ...inputProps },\n ref,\n) {\n const tweakWithMessagesStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithMessages',\n currentComponentName: 'Input',\n });\n\n return (\n <WithMessages\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n testId={getTestId(testId, 'wrapper')}\n tweakStyles={tweakWithMessagesStyles}\n >\n <InputBase\n {...inputProps}\n ref={ref}\n testId={testId}\n tweakStyles={tweakStyles}\n isInvalid={isInvalid}\n />\n </WithMessages>\n );\n});\n","export const EMPTY_DATE_INPUT_VALUE = '__.__.____';\nexport const EMPTY_DATE_RANGE_INPUT_VALUE = `${EMPTY_DATE_INPUT_VALUE} - ${EMPTY_DATE_INPUT_VALUE}`;\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { IInputStyles } from '../Input';\n\nexport const useStyles = createThemedStyles('DateInput', {\n root: {\n width: '100%',\n height: '100%',\n cursor: 'pointer',\n position: 'relative',\n },\n});\n\nexport type IDateInputStyles = ITweakStyles<typeof useStyles, { tweakInput: IInputStyles }>;\n","import { ChangeEvent, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport { EMPTY_DATE_INPUT_VALUE, EMPTY_DATE_RANGE_INPUT_VALUE } from './constants';\nimport { IDateInputStyles, useStyles } from './DateInput.styles';\n\nexport interface IDateInputProps\n extends Omit<IInputProps, 'value' | 'beforeMaskedStateChange' | 'onChange' | 'tweakStyles'>,\n ICommonProps<IDateInputStyles> {\n date?: string;\n /** @default '' */\n startDate?: string;\n /** @default '' */\n endDate?: string;\n className?: string;\n /** @default false */\n isRange?: boolean;\n // react-datepicker ожидает event первым аргументом\n onChange?: (event: IChangeInputEvent, value: string) => void;\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, IDateInputProps>(function DateInput(\n {\n date,\n startDate = '',\n endDate = '',\n mask,\n className,\n placeholder,\n data,\n isRange = false,\n tweakStyles,\n onClick,\n onChange,\n ...inputProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakInputStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'DateInput',\n });\n\n const beforeMaskedStateChange: IInputProps['beforeMaskedStateChange'] = ({ nextState }) => {\n // Если в инпуте отсутствует введенное значение, то выставляем\n // пустую строку для корректной работы react-datepicker\n if (\n nextState.value === EMPTY_DATE_INPUT_VALUE ||\n nextState.value === EMPTY_DATE_RANGE_INPUT_VALUE\n ) {\n return { value: '', selection: { start: 0, end: 0 } };\n }\n return nextState;\n };\n\n const handleChange: IInputProps['onChange'] = (value, event) => {\n // Событие click срабатывает только при нажатии на кнопку очистки\n if (event.type === 'click') {\n // react-datepicker ожидает пустую строку в event.target.value\n (event as ChangeEvent<HTMLInputElement>).target.value = '';\n }\n onChange?.(event, value);\n };\n\n return (\n <div className={clsx(classes.root, className)} {...addDataAttributes(data)} onClick={onClick}>\n <Input\n {...inputProps}\n ref={ref}\n value={isRange ? `${startDate}${endDate}` : date}\n mask={mask ?? (isRange ? '99.99.9999 - 99.99.9999' : '99.99.9999')}\n placeholder={\n placeholder ?? (isRange ? EMPTY_DATE_RANGE_INPUT_VALUE : EMPTY_DATE_INPUT_VALUE)\n }\n tweakStyles={tweakInputStyles}\n onChange={handleChange}\n beforeMaskedStateChange={beforeMaskedStateChange}\n />\n </div>\n );\n});\n","import ReactDatePicker, { DatePickerProps } from 'react-datepicker';\nimport { doNothing } from '@true-engineering/true-react-platform-helpers';\n\nexport class DatePickerBase extends ReactDatePicker {\n public handleClickOutside;\n\n constructor(props: DatePickerProps) {\n super(props);\n this.handleClickOutside = this.handleCalendarClickOutside;\n // Затираем дефолтный обработчик клика снаружи, чтобы обрабатывать его самим\n // (см. использование useOnClickOutside в DatePicker)\n this.handleCalendarClickOutside = doNothing;\n }\n}\n","import { IInputStyles } from '../Input';\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n startControls: {\n position: 'absolute',\n left: 0,\n top: 0,\n height: '100%',\n pointerEvents: 'none',\n },\n\n controlWrapper: {\n borderColor: 'transparent',\n },\n },\n\n inputContent: {\n paddingLeft: 'calc(var(--start-controls-width) + var(--control-padding))',\n },\n};\n\nexport interface ISearchInputStyles {\n tweakInput?: IInputStyles;\n}\n","import { forwardRef } from 'react';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IInputProps, Input } from '../Input';\nimport { inputStyles, ISearchInputStyles } from './SearchInput.styles';\n\nexport type ISearchInputProps = Omit<\n IInputProps,\n 'type' | 'label' | 'isInvalid' | 'errorMessage' | 'isActive' | 'tweakStyles' | 'startIcon'\n> &\n ICommonProps<ISearchInputStyles>;\n\nexport const SearchInput = forwardRef<HTMLInputElement, ISearchInputProps>(function SearchInput(\n { isClearable = true, tweakStyles, ...props },\n ref,\n) {\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'SearchInput',\n });\n\n return (\n <Input\n ref={ref}\n startIcon=\"search\"\n isClearable={isClearable}\n tweakStyles={tweakInputStyles}\n {...props}\n />\n );\n});\n","import type { IScrollIntoViewIfNeededProps } from './ScrollIntoViewIfNeeded';\n\nexport const ScrollIntoViewIfNeededDefaultElementType = 'div';\n\nexport const ScrollIntoViewIfNeededDefaultProps: IScrollIntoViewIfNeededProps = {\n active: true,\n elementType: ScrollIntoViewIfNeededDefaultElementType,\n options: {\n behavior: 'smooth',\n scrollMode: 'if-needed',\n },\n};\n","import {\n createElement,\n createRef,\n DOMElement,\n HTMLProps,\n PureComponent,\n ReactNode,\n RefObject,\n} from 'react';\nimport scrollIntoViewIfNeeded, { StandardBehaviorOptions } from 'scroll-into-view-if-needed';\nimport {\n ScrollIntoViewIfNeededDefaultElementType,\n ScrollIntoViewIfNeededDefaultProps,\n} from './constants';\n\nexport interface IScrollIntoViewIfNeededProps extends HTMLProps<HTMLElement> {\n active?: boolean;\n children?: ReactNode;\n elementType?: string;\n options?: StandardBehaviorOptions;\n}\n\nexport class ScrollIntoViewIfNeeded extends PureComponent<IScrollIntoViewIfNeededProps> {\n public static defaultProps: IScrollIntoViewIfNeededProps = ScrollIntoViewIfNeededDefaultProps;\n\n node: RefObject<HTMLElement> = createRef();\n\n componentDidMount(): void {\n const { active } = this.props;\n if (active) {\n this.handleScrollIntoViewIfNeeded();\n }\n }\n\n componentDidUpdate({ active }: IScrollIntoViewIfNeededProps): void {\n const { active: isNowActive } = this.props;\n if (!active && isNowActive) {\n this.handleScrollIntoViewIfNeeded();\n }\n }\n\n handleScrollIntoViewIfNeeded = (): void => {\n const { options } = this.props;\n const { current: node } = this.node;\n\n if (node) {\n scrollIntoViewIfNeeded(node, options);\n }\n };\n\n render(): DOMElement<any, any> {\n const { active, elementType, children, options, ...wrapperProps } = this.props;\n\n return createElement(\n elementType ?? ScrollIntoViewIfNeededDefaultElementType,\n { ref: this.node, ...wrapperProps },\n children,\n );\n }\n}\n","export const DEFAULT_OPTION_INDEX = -2;\nexport const ALL_OPTION_INDEX = -1;\n","import { colors, createThemedStyles, dimensions, helpers, ITweakStyles } from '../../../../theme';\nimport { IControlWrapperSizes } from '../../../ControlWrapper';\n\nexport const ROW_HEIGHT = 40;\nexport const CONTAINER_PADDING = 10;\nexport const CELL_PADDING = [10, 20];\n\nexport const useStyles = createThemedStyles('SelectList', {\n root: {\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n boxShadow: '0 13px 74px -27px rgba(0, 0, 0, 0.11)',\n boxSizing: 'border-box',\n padding: [CONTAINER_PADDING, 0],\n fontSize: 16,\n overflow: 'hidden',\n },\n\n withListHeader: {\n paddingTop: 0,\n },\n\n withListFooter: {\n paddingBottom: 0,\n },\n\n listHeader: {},\n\n listFooter: {},\n\n list: {\n height: '100%',\n maxHeight: ROW_HEIGHT * 6,\n cursor: 'pointer',\n backgroundColor: colors.CLASSIC_WHITE,\n\n ...helpers.withScrollBar,\n },\n\n cell: {\n display: 'flex',\n cursor: 'pointer',\n minHeight: ROW_HEIGHT,\n width: 'auto',\n padding: CELL_PADDING,\n alignItems: 'center',\n boxSizing: 'border-box',\n fontSize: 14,\n },\n\n cellWithCheckbox: {\n padding: 0,\n },\n\n noMatchesLabel: {\n pointerEvents: 'none',\n },\n\n focused: {},\n\n active: {},\n\n disabled: {\n cursor: 'default',\n },\n\n loading: {\n cursor: 'default',\n pointerEvents: 'none',\n },\n\n defaultCell: {},\n});\n\nexport type ISelectListStyles = ITweakStyles<typeof useStyles, IControlWrapperSizes>;\n","import { ICheckboxStyles } from '../../../Checkbox';\nimport { CELL_PADDING } from '../SelectList/SelectList.styles';\n\nexport const checkboxStyles: ICheckboxStyles = {\n root: {\n padding: CELL_PADDING,\n width: '100%',\n },\n\n input: {\n // иначе будет фокуситься и энтер будет вызывать изменение нескольких опций\n display: 'none',\n },\n};\n","import {\n type ChangeEvent,\n type FC,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport clsx from 'clsx';\nimport { type Classes } from 'jss';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { IDataAttributesProps } from '../../../../types';\nimport { Checkbox } from '../../../Checkbox';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport { checkboxStyles } from './SelectListItem.styles';\n\nexport interface ISelectListItemProps extends IDataAttributesProps {\n index: number;\n isSemiChecked?: boolean;\n isDisabled?: boolean;\n isActive?: boolean;\n isFocused?: boolean;\n children: ReactNode;\n classes: Classes<'cellWithCheckbox' | 'cell' | 'focused' | 'active' | 'disabled'>; // TODO: !!!\n isMultiSelect?: boolean;\n onOptionSelect: (index: number, event: MouseEvent<HTMLElement>) => void;\n onToggleCheckbox: (\n index: number,\n isSelected: boolean,\n event: ChangeEvent<HTMLElement> | KeyboardEvent,\n ) => void;\n}\n\nexport const SelectListItem: FC<ISelectListItemProps> = ({\n classes,\n index,\n isSemiChecked,\n isDisabled,\n isActive,\n children,\n isFocused,\n isMultiSelect,\n data,\n onOptionSelect,\n onToggleCheckbox,\n}) => {\n const multiSelectContent = isMultiSelect && (\n <Checkbox\n isChecked={isActive || isSemiChecked}\n isSemiChecked={isSemiChecked}\n isDisabled={isDisabled}\n tweakStyles={checkboxStyles}\n onSelect={({ isSelected }, event) => onToggleCheckbox(index, isSelected, event)}\n >\n {children}\n </Checkbox>\n );\n\n return (\n <ScrollIntoViewIfNeeded\n active={isFocused}\n options={{ block: 'nearest' }}\n className={clsx(classes.cell, {\n [classes.cellWithCheckbox]: isMultiSelect,\n [classes.focused]: isFocused,\n [classes.active]: isActive && !isMultiSelect,\n [classes.disabled]: isDisabled,\n })}\n {...addDataAttributes({\n disabled: isDisabled,\n active: isActive,\n focused: isFocused,\n ...data,\n })}\n onClick={!isDisabled && !isMultiSelect ? (event) => onOptionSelect(index, event) : undefined}\n >\n {isMultiSelect ? multiSelectContent : children}\n </ScrollIntoViewIfNeeded>\n );\n};\n","import { type ReactNode, useMemo } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataTestId,\n getArray,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { type ICommonProps } from '../../../../types';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport type { ISelectProps } from '../../Select';\nimport { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from '../../constants';\nimport { type ISelectListItemProps, SelectListItem } from '../SelectListItem';\nimport { type ISelectListStyles, useStyles } from './SelectList.styles';\n\nexport interface ISelectListProps<Value>\n extends ICommonProps<ISelectListStyles>,\n Pick<ISelectListItemProps, 'onToggleCheckbox' | 'onOptionSelect' | 'isMultiSelect'> {\n options: Value[] | readonly Value[];\n size?: ISelectProps<Value>['size'];\n focusedIndex?: number;\n activeValue?: Value | Value[];\n noMatchesLabel?: string;\n isLoading?: boolean;\n loadingLabel?: ReactNode;\n defaultOptionLabel?: ReactNode;\n allOptionsLabel?: ReactNode;\n areAllOptionsSelected?: boolean;\n shouldScrollToList?: boolean;\n customListHeader?: ReactNode;\n customListFooter?: ReactNode;\n isOptionDisabled: (value: Value) => boolean;\n convertValueToString: (value: Value) => string | undefined;\n convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;\n convertValueToId: (value: Value) => string | undefined;\n}\n\nexport function SelectList<Value>({\n options,\n focusedIndex,\n size,\n activeValue,\n defaultOptionLabel,\n noMatchesLabel = 'Совпадений не найдено',\n isLoading,\n loadingLabel = 'Загрузка...',\n tweakStyles,\n testId,\n shouldScrollToList = true,\n areAllOptionsSelected,\n customListHeader,\n customListFooter,\n isMultiSelect,\n isOptionDisabled,\n allOptionsLabel,\n onOptionSelect,\n onToggleCheckbox,\n convertValueToString,\n convertValueToReactNode = convertValueToString,\n convertValueToId,\n}: ISelectListProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const isHeaderNotEmpty = isReactNodeNotEmpty(customListHeader);\n const isFooterNotEmpty = isReactNodeNotEmpty(customListFooter);\n\n const optionsDisableMap = useMemo(\n () => options.map(isOptionDisabled),\n [options, isOptionDisabled],\n );\n\n const listOptions = useMemo(\n () => options.map((option, index) => convertValueToReactNode(option, optionsDisableMap[index])),\n [options, convertValueToReactNode, optionsDisableMap],\n );\n\n const activeOptionsIds = useMemo(\n () => new Set((getArray(activeValue) as Value[]).map(convertValueToId)),\n [activeValue, convertValueToId],\n );\n\n return (\n <ScrollIntoViewIfNeeded\n active={shouldScrollToList && !isMultiSelect}\n className={clsx(classes.root, isNotEmpty(size) && classes[size], {\n [classes.withListHeader]: isHeaderNotEmpty,\n [classes.withListFooter]: isFooterNotEmpty,\n })}\n >\n {isHeaderNotEmpty && <div className={classes.listHeader}>{customListHeader}</div>}\n <div className={classes.list} {...addDataTestId(testId)} tabIndex={-1}>\n {isLoading ? (\n <div className={clsx(classes.cell, classes.loading)}>{loadingLabel}</div>\n ) : (\n <>\n {isReactNodeNotEmpty(defaultOptionLabel) && (\n <ScrollIntoViewIfNeeded\n active={focusedIndex === DEFAULT_OPTION_INDEX}\n options={{ block: 'nearest' }}\n className={clsx(\n classes.cell,\n classes.defaultCell,\n focusedIndex === DEFAULT_OPTION_INDEX && classes.focused,\n )}\n onClick={(event) => onOptionSelect(DEFAULT_OPTION_INDEX, event)}\n >\n {defaultOptionLabel}\n </ScrollIntoViewIfNeeded>\n )}\n {isReactNodeNotEmpty(allOptionsLabel) && (\n <SelectListItem\n classes={classes}\n index={ALL_OPTION_INDEX}\n isSemiChecked={activeOptionsIds.size > 0 && !areAllOptionsSelected}\n isActive={areAllOptionsSelected}\n isFocused={focusedIndex === ALL_OPTION_INDEX}\n isMultiSelect={isMultiSelect}\n onOptionSelect={onOptionSelect}\n onToggleCheckbox={onToggleCheckbox}\n >\n {allOptionsLabel}\n </SelectListItem>\n )}\n {listOptions.map((opt, i) => {\n const optionValue = options[i];\n const id = convertValueToId(optionValue);\n const isFocused = focusedIndex === i;\n const isActive = activeOptionsIds.has(id);\n // проверяем, что опция задизейблена\n const isDisabled = optionsDisableMap[i];\n\n return (\n <SelectListItem\n key={i}\n classes={classes}\n index={i}\n isDisabled={isDisabled}\n isActive={isActive}\n isFocused={isFocused}\n isMultiSelect={isMultiSelect}\n onOptionSelect={onOptionSelect}\n onToggleCheckbox={onToggleCheckbox}\n data={{ id }}\n >\n {opt}\n </SelectListItem>\n );\n })}\n {listOptions.length === 0 && (\n <div className={clsx(classes.cell, classes.noMatchesLabel)}>{noMatchesLabel}</div>\n )}\n </>\n )}\n </div>\n {isFooterNotEmpty && <div className={classes.listFooter}>{customListFooter}</div>}\n </ScrollIntoViewIfNeeded>\n );\n}\n","import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\n\nexport const defaultIsOptionDisabled = <Value>(option: Value): boolean =>\n typeof option === 'object' &&\n option !== null &&\n ((option as { isDisabled?: boolean })?.isDisabled ?? false);\n\nexport const defaultConvertFunction = (v: unknown): string | undefined =>\n v === undefined ? undefined : String(v);\n\nexport const defaultCompareFunction = <Value>(v1: Value, v2: Value): boolean => v1 === v2;\n\nexport const getDefaultConvertToIdFunction =\n <Value>(\n convertValueToString: (value: Value) => string | undefined,\n ): ((value: Value) => string | undefined) =>\n (value) =>\n isNotEmpty((value as { id: unknown })?.id)\n ? String((value as { id: unknown }).id)\n : convertValueToString(value);\n","import { mergeStyles } from '@true-engineering/true-react-platform-helpers';\nimport { animations, createThemedStyles, dimensions, type ITweakStyles } from '../../theme';\nimport { type IInputStyles } from '../Input';\nimport { type ISearchInputStyles } from '../SearchInput';\nimport { IWithMessagesStyles } from '../WithMessages';\nimport { type ISelectListStyles } from './components';\n\nconst { Z_INDEX } = dimensions;\n\nexport const useStyles = createThemedStyles('Select', {\n root: {\n width: '100%',\n position: 'relative',\n boxSizing: 'border-box',\n },\n\n inputWrapper: {\n width: '100%',\n cursor: 'text',\n },\n\n listWrapper: {\n left: -1,\n zIndex: 3,\n width: 'fit-content',\n minWidth: 'calc(100% + 1px)',\n },\n\n withoutPopper: {\n position: 'absolute',\n top: '100%',\n paddingTop: 4,\n },\n\n listWrapperInBody: {\n minWidth: 'auto',\n width: 'auto',\n maxWidth: 'min-content',\n },\n\n arrow: {\n width: 'var(--icon-inner-size, 20px)',\n height: 'var(--icon-inner-size, 20px)',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'transform',\n zIndex: Z_INDEX.CONTROL_FOCUS + 1,\n },\n\n activeArrow: {\n transform: 'rotate(180deg)',\n },\n\n disabled: {\n '& $arrow': {\n cursor: 'default',\n },\n },\n\n counter: {},\n});\n\nconst baseInputStyles: IInputStyles = {\n input: {\n '&[readonly]': {\n cursor: 'pointer',\n },\n },\n};\n\nconst readonlyInputBaseStyles: IInputStyles = {\n input: {\n cursor: 'pointer',\n },\n};\n\nexport const readonlyInputStyles = mergeStyles(baseInputStyles, readonlyInputBaseStyles);\nexport const readonlyMultiSelectStyles = mergeStyles(baseInputStyles, readonlyInputBaseStyles);\n\nexport const getInputStyles = ({\n hasReadonlyInput,\n isMultiSelect,\n}: {\n hasReadonlyInput: boolean;\n isMultiSelect?: boolean;\n}): IInputStyles => {\n if (hasReadonlyInput && isMultiSelect) {\n return readonlyMultiSelectStyles;\n }\n if (hasReadonlyInput && !isMultiSelect) {\n return readonlyInputStyles;\n }\n return baseInputStyles;\n};\n\nexport type ISelectStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakWithMessages: IWithMessagesStyles;\n tweakInput: IInputStyles;\n tweakSelectList: ISelectListStyles;\n tweakSearchInput: ISearchInputStyles;\n }\n>;\n","import {\n ChangeEvent,\n CSSProperties,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n Ref,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from 'react-overlays';\nimport clsx from 'clsx';\nimport { debounce } from 'ts-debounce';\nimport {\n applyAction,\n createFilter,\n getArray,\n getTestId,\n isNotEmpty,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { hasExactParent } from '../../helpers';\nimport { useDropdown, useIsMounted, useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps, IDropdownWithPopperOptions } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IChangeInputEvent, IInputProps, InputBase } from '../Input';\nimport { ISearchInputProps, SearchInput } from '../SearchInput';\nimport { WithMessages } from '../WithMessages';\nimport { SelectList } from './components';\nimport { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from './constants';\nimport {\n defaultCompareFunction,\n defaultConvertFunction,\n defaultIsOptionDisabled,\n getDefaultConvertToIdFunction,\n} from './helpers';\nimport { IChangeSelectEvent, IMultipleSelectValue, ISelectFooter } from './types';\nimport { getInputStyles, ISelectStyles, useStyles } from './Select.styles';\n\nexport interface ISelectProps<Value>\n extends Omit<IInputProps, 'value' | 'onChange' | 'onBlur' | 'type' | 'tweakStyles'>,\n ICommonProps<ISelectStyles> {\n header?: ReactNode;\n footer?: ISelectFooter<Value>;\n defaultOptionLabel?: ReactNode;\n allOptionsLabel?: string;\n noMatchesLabel?: string;\n loadingLabel?: ReactNode;\n /** @default 'normal' */\n optionsMode?: 'search' | 'dynamic' | 'normal';\n /** @default 400 */\n debounceTime?: number;\n /** @default 0 */\n minSymbolsCountToOpenList?: number;\n dropdownOptions?: IDropdownWithPopperOptions;\n /** @default 'chevron-down' */\n dropdownIcon?: IIcon;\n options: Value[] | readonly Value[];\n value: Value | undefined;\n /** @default true */\n shouldScrollToList?: boolean;\n isMultiSelect?: false;\n searchInput?: {\n /** @default false */\n shouldRenderInList?: boolean;\n ref?: Ref<HTMLInputElement>;\n } & Pick<ISearchInputProps, 'placeholder' | 'shouldFocusOnMount'>;\n isOptionDisabled?: (option: Value) => boolean;\n onChange: (value: Value | undefined, event: IChangeSelectEvent) => void; // подумать как возвращать индекс\n onBlur?: (event: Event | SyntheticEvent) => void;\n onType?: (value: string) => Promise<void>;\n optionsFilter?: (options: Value[], query: string) => Value[];\n onOpen?: () => void;\n compareValuesOnChange?: (v1?: Value, v2?: Value) => boolean;\n /** @description Функция должна быть мемоизирована с целью избежания ререндера */\n convertValueToString?: (value: Value) => string | undefined;\n /** @description Функция должна быть мемоизирована с целью избежания ререндера */\n convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;\n /** @description Функция должна быть мемоизирована с целью избежания ререндера */\n convertValueToId?: (value: Value) => string | undefined;\n}\n\nexport interface IMultipleSelectProps<Value>\n extends Omit<\n ISelectProps<Value>,\n 'value' | 'onChange' | 'compareValuesOnChange' | 'isMultiSelect'\n > {\n isMultiSelect: true;\n value: IMultipleSelectValue<Value> | undefined;\n onChange: (value: IMultipleSelectValue<Value> | undefined, event: IChangeSelectEvent) => void;\n compareValuesOnChange?: (\n v1?: IMultipleSelectValue<Value>,\n v2?: IMultipleSelectValue<Value>,\n ) => boolean;\n}\n\nexport function Select<Value>(\n props: ISelectProps<Value> | IMultipleSelectProps<Value>,\n): JSX.Element {\n const {\n options,\n isMultiSelect,\n value,\n header,\n footer,\n defaultOptionLabel,\n allOptionsLabel,\n debounceTime = 400,\n optionsMode = 'normal',\n noMatchesLabel,\n loadingLabel,\n tweakStyles,\n testId,\n isActive,\n isReadonly,\n isDisabled,\n dropdownOptions,\n minSymbolsCountToOpenList = 0,\n dropdownIcon = 'chevron-down',\n shouldScrollToList = true,\n searchInput,\n icon,\n endIcon = icon,\n onChange,\n onFocus,\n onBlur,\n onType,\n onOpen,\n isOptionDisabled = defaultIsOptionDisabled,\n compareValuesOnChange = defaultCompareFunction,\n convertValueToString = defaultConvertFunction,\n convertValueToId,\n convertValueToReactNode,\n optionsFilter,\n infoMessage,\n errorMessage,\n size,\n ...inputProps\n } = props;\n const classes = useStyles({ theme: tweakStyles });\n\n const { shouldRenderInList: shouldRenderSearchInputInList = false, ...searchInputProps } =\n searchInput ?? {};\n const hasSearchInputInList = optionsMode !== 'normal' && shouldRenderSearchInputInList;\n const hasReadonlyInput = isReadonly || optionsMode === 'normal' || shouldRenderSearchInputInList;\n\n const tweakWithMessagesStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithMessages',\n currentComponentName: 'Select',\n });\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: getInputStyles({ hasReadonlyInput, isMultiSelect }),\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'Select',\n });\n\n const tweakSearchInputStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'Select',\n });\n\n const tweakSelectListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakSelectList',\n currentComponentName: 'Select',\n });\n\n const isMounted = useIsMounted();\n const [isListOpen, setIsListOpen] = useState(false);\n const [areOptionsLoading, setAreOptionsLoading] = useState(false);\n const hasDefaultOption = isReactNodeNotEmpty(defaultOptionLabel);\n\n const [focusedListCellIndex, setFocusedListCellIndex] = useState(DEFAULT_OPTION_INDEX);\n const [searchValue, setSearchValue] = useState('');\n // если мы ввели что то в строку поиска - то этот булеан будет отключаться\n // вынесен отдельно, из-за проблем с дебаунсом при динамич. опциях\n const [shouldShowDefaultOption, setShouldShowDefaultOption] = useState(true);\n\n const root = useRef<HTMLDivElement>(null);\n const inputWrapper = useRef<HTMLDivElement>(null);\n const list = useRef<HTMLDivElement>(null);\n const input = useRef<HTMLInputElement>(null); // TODO ref снаружи?\n\n const strValue = isMultiSelect ? value?.[0] : value;\n const shouldShowAllOption =\n isMultiSelect && isStringNotEmpty(allOptionsLabel) && searchValue === '';\n\n const filteredOptions = useMemo(() => {\n if (optionsMode !== 'search') {\n return options as Value[];\n }\n\n const filter =\n optionsFilter ?? createFilter<Value>((option) => [convertValueToString(option) ?? '']);\n\n return filter(options as Value[], searchValue);\n }, [optionsFilter, options, convertValueToString, searchValue, optionsMode]);\n\n const availableOptions = useMemo(\n () => options.filter((option) => !isOptionDisabled(option)),\n [options, isOptionDisabled],\n );\n\n const areAllOptionsSelected = isMultiSelect && value?.length === availableOptions.length;\n const shouldShowMultiSelectCounter =\n isMultiSelect && isNotEmpty(value) && value.length > 1 && !areAllOptionsSelected;\n\n const optionsIndexesForNavigation = useMemo(() => {\n const result: number[] = [];\n if (shouldShowDefaultOption && hasDefaultOption) {\n result.push(DEFAULT_OPTION_INDEX);\n }\n if (shouldShowAllOption) {\n result.push(ALL_OPTION_INDEX);\n }\n return result.concat(\n filteredOptions.reduce((acc, cur, i) => {\n if (!isOptionDisabled(cur)) {\n acc.push(i);\n }\n return acc;\n }, [] as number[]),\n );\n }, [\n filteredOptions,\n hasDefaultOption,\n isOptionDisabled,\n shouldShowAllOption,\n shouldShowDefaultOption,\n ]);\n\n const stringValue = isNotEmpty(strValue) ? convertValueToString(strValue) : undefined;\n // Для мультиселекта пытаемся показать \"Все опции\" если выбраны все опции\n const showedStringValue =\n areAllOptionsSelected && isNotEmpty(allOptionsLabel) ? allOptionsLabel : stringValue;\n\n const convertToId = useCallback(\n (v: Value) => (convertValueToId ?? getDefaultConvertToIdFunction(convertValueToString))(v),\n [convertValueToId, convertValueToString],\n );\n\n const closeList = useCallback(() => {\n setIsListOpen(false);\n setSearchValue('');\n setShouldShowDefaultOption(true);\n }, [dropdownOptions?.shouldUsePopper]);\n\n const handleListClose = useCallback(\n (event: Event | SyntheticEvent) => {\n if (!isListOpen) {\n return;\n }\n\n closeList();\n onBlur?.(event);\n },\n [isListOpen, closeList, onBlur],\n );\n\n const handleListOpen = () => {\n if (!isReadonly && !isListOpen) {\n setIsListOpen(true);\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n handleListOpen();\n };\n\n const handleOnClick = () => {\n handleListOpen();\n };\n\n const handleChange = useCallback(\n (newValue: Value | IMultipleSelectValue<Value> | undefined, event: IChangeSelectEvent) => {\n // Тут беда с типами, сорри\n if (!compareValuesOnChange(value as never, newValue as never)) {\n onChange(newValue as (Value & IMultipleSelectValue<Value>) | undefined, event);\n }\n },\n [value, compareValuesOnChange, onChange],\n );\n\n const handleOptionSelect = useCallback(\n (index: number, event: MouseEvent<HTMLElement> | KeyboardEvent) => {\n handleChange(index === DEFAULT_OPTION_INDEX ? undefined : filteredOptions[index], event);\n handleListClose(event);\n input.current?.blur();\n },\n [handleChange, handleListClose, filteredOptions],\n );\n\n // MultiSelect\n const handleToggleOptionCheckbox = useCallback(\n (index: number, isSelected: boolean, event: ChangeEvent<HTMLElement> | KeyboardEvent) => {\n if (!isMultiSelect) {\n return;\n }\n\n // Если выбрана не дефолтная опция, которая сетит андеф\n if (index === DEFAULT_OPTION_INDEX || (index === ALL_OPTION_INDEX && !isSelected)) {\n handleChange(undefined, event);\n return;\n }\n if (index === ALL_OPTION_INDEX && isSelected) {\n handleChange(availableOptions as IMultipleSelectValue<Value>, event);\n return;\n }\n const option = filteredOptions[index];\n handleChange(\n isSelected\n ? // Добавляем\n ([...(value ?? []), option] as IMultipleSelectValue<Value>)\n : // Убираем\n value?.filter((o) => convertToId(o) !== convertToId(option)),\n event,\n );\n },\n [isMultiSelect, filteredOptions, handleChange, value, availableOptions, convertToId],\n );\n\n const handleOnType = useCallback(\n async (v: string) => {\n if (onType === undefined) {\n return;\n }\n if (isMounted()) {\n setAreOptionsLoading(true);\n }\n await onType(v);\n if (isMounted()) {\n setAreOptionsLoading(false);\n }\n if (optionsMode === 'dynamic') {\n setShouldShowDefaultOption(v === '');\n }\n },\n [isMounted, onType, optionsMode],\n );\n\n const debounceHandleOnType = useMemo(\n () => debounce(handleOnType, debounceTime, { isImmediate: debounceTime === 0 }),\n [handleOnType, debounceTime],\n );\n\n const handleInputChange = (v: string, event: IChangeInputEvent) => {\n if (onType !== undefined) {\n debounceHandleOnType(v);\n }\n\n if (optionsMode !== 'dynamic') {\n setShouldShowDefaultOption(v === '');\n }\n\n if (v === '' && !hasSearchInputInList) {\n handleChange(undefined, event);\n }\n\n setSearchValue(v);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isListOpen) {\n return;\n }\n\n event.stopPropagation();\n const curIndexInNavigation = optionsIndexesForNavigation.findIndex(\n (index) => index === focusedListCellIndex,\n );\n\n switch (event.code) {\n case 'Enter':\n case 'NumpadEnter': {\n let indexToSelect = focusedListCellIndex;\n\n // если осталась одна опция в списке,\n // то выбираем ее нажатием на enter\n if (indexToSelect === DEFAULT_OPTION_INDEX && filteredOptions.length === 1) {\n indexToSelect = 0;\n }\n\n if (isMultiSelect) {\n let isThisValueAlreadySelected: boolean | undefined;\n if (indexToSelect === ALL_OPTION_INDEX) {\n isThisValueAlreadySelected = areAllOptionsSelected;\n } else {\n // подумать над концептом реального фокуса на опциях, а не вот эти вот focusedCell\n const option = filteredOptions[indexToSelect];\n const valueIdToSelect = convertToId(option);\n isThisValueAlreadySelected =\n value?.some((opt) => convertToId(opt) === valueIdToSelect) ?? false;\n }\n handleToggleOptionCheckbox(indexToSelect, !isThisValueAlreadySelected, event);\n } else {\n handleOptionSelect(indexToSelect, event);\n }\n break;\n }\n\n case 'ArrowDown': {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n const targetIndexInNavigation =\n (curIndexInNavigation + 1) % optionsIndexesForNavigation.length;\n setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);\n break;\n }\n\n case 'ArrowUp': {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n const targetIndexInNavigation =\n (curIndexInNavigation - 1 + optionsIndexesForNavigation.length) %\n optionsIndexesForNavigation.length;\n setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);\n break;\n }\n }\n };\n\n const onArrowClick = () => {\n if (isListOpen) {\n input.current?.blur();\n closeList();\n } else {\n input.current?.focus();\n }\n };\n\n useOnClickOutsideWithRef(list, handleListClose, inputWrapper);\n\n const hasEnoughSymbolsToSearch = searchValue.trim().length >= minSymbolsCountToOpenList;\n\n const isOpen =\n // Пользователь пытается открыть лист\n isListOpen &&\n // Нам есть что показать:\n // Есть опции\n (filteredOptions.length > 0 ||\n // Дефолтная опция\n (defaultOptionLabel !== undefined && !hasEnoughSymbolsToSearch) ||\n // Текст \"Загрузка...\"\n inputProps.isLoading ||\n // Текст \"Совпадений не найдено\"\n noMatchesLabel !== undefined ||\n // У нас есть инпут с поиском внутри листа\n hasSearchInputInList) &&\n // Последняя проверка на случай, если мы че то ищем в опциях\n (optionsMode === 'normal' || hasEnoughSymbolsToSearch);\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n // Когда что-то блокирует открытие листа, но блур все равно должен сработать\n // например minSymbolsCount\n if (isListOpen && !isOpen) {\n handleListClose(event);\n return;\n }\n\n if (\n !isNotEmpty(event.relatedTarget) ||\n !isNotEmpty(list.current) ||\n !isNotEmpty(inputWrapper.current)\n ) {\n return;\n }\n\n const isActionInsideSelect =\n hasExactParent(event.relatedTarget, list.current) ||\n hasExactParent(event.relatedTarget, inputWrapper.current);\n\n // Ничего не делаем, если клик был внутри селекта\n if (!isActionInsideSelect) {\n handleListClose(event);\n }\n };\n\n // Эти значения ставятся в false по дефолту также в useDropdown\n const {\n shouldUsePopper = false,\n shouldRenderInBody = false,\n shouldHideOnScroll = false,\n } = dropdownOptions ?? {};\n\n const popperData = useDropdown({\n isOpen,\n onDropdownClose: handleListClose,\n referenceElement: inputWrapper.current,\n dropdownElement: list.current,\n options: dropdownOptions,\n dependenciesForPositionUpdating: [inputProps.isLoading, filteredOptions.length],\n });\n\n useEffect(() => {\n const focusedCellIndex = isNotEmpty(strValue)\n ? optionsIndexesForNavigation.find((index) => {\n const option = filteredOptions[index];\n return isNotEmpty(option) && convertToId(option) === convertToId(strValue);\n })\n : undefined;\n\n setFocusedListCellIndex(focusedCellIndex ?? optionsIndexesForNavigation[0]);\n }, [strValue, filteredOptions, optionsIndexesForNavigation, convertToId]);\n\n useEffect(() => {\n if (isOpen) {\n onOpen?.();\n }\n }, [isOpen]);\n\n const searchInputEl = hasSearchInputInList && (\n <SearchInput\n size={size}\n value={searchValue}\n onChange={handleInputChange}\n tweakStyles={tweakSearchInputStyles}\n placeholder=\"Поиск\"\n {...searchInputProps}\n />\n );\n\n // Т.к. используется для проверки на пустой элемент `isReactNodeNotEmpty` внутри `SelectList`, то\n // он пропускает React.Fragment\n const customHeader = (isReactNodeNotEmpty(searchInputEl) || isReactNodeNotEmpty(header)) && (\n <>\n {searchInputEl}\n {header}\n </>\n );\n\n const listEl = (\n <div\n className={clsx(classes.listWrapper, {\n [classes.withoutPopper]: !shouldUsePopper,\n [classes.listWrapperInBody]: shouldRenderInBody,\n })}\n ref={list}\n style={popperData?.styles.popper as CSSProperties}\n tabIndex={0}\n onBlur={handleBlur} // обработка для Tab из списка\n {...popperData?.attributes.popper}\n >\n {isOpen && (\n <SelectList\n options={filteredOptions}\n size={size}\n defaultOptionLabel={hasDefaultOption && shouldShowDefaultOption && defaultOptionLabel}\n allOptionsLabel={shouldShowAllOption && allOptionsLabel}\n areAllOptionsSelected={areAllOptionsSelected}\n customListHeader={customHeader}\n customListFooter={applyAction(footer, { filteredOptions })}\n noMatchesLabel={noMatchesLabel}\n focusedIndex={focusedListCellIndex}\n activeValue={value}\n isLoading={inputProps.isLoading}\n loadingLabel={loadingLabel}\n tweakStyles={tweakSelectListStyles}\n testId={getTestId(testId, 'list')}\n isMultiSelect={isMultiSelect}\n // скролл не работает с включеным поппером\n shouldScrollToList={shouldScrollToList && !shouldUsePopper && !shouldHideOnScroll}\n isOptionDisabled={isOptionDisabled}\n convertValueToString={convertValueToString}\n convertValueToReactNode={convertValueToReactNode}\n convertValueToId={convertToId}\n onOptionSelect={handleOptionSelect}\n onToggleCheckbox={handleToggleOptionCheckbox}\n />\n )}\n </div>\n );\n\n return (\n <WithMessages\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n tweakStyles={tweakWithMessagesStyles}\n testId={getTestId(testId, 'wrapper')}\n >\n <div className={classes.root} onKeyDown={handleKeyDown} ref={root}>\n <div\n className={clsx(classes.inputWrapper, isDisabled && classes.disabled)}\n onClick={isDisabled || isReadonly ? undefined : handleOnClick}\n ref={inputWrapper}\n >\n <InputBase\n value={\n searchValue !== '' && !shouldRenderSearchInputInList ? searchValue : showedStringValue\n }\n size={size}\n onChange={handleInputChange}\n isActive={isListOpen || isActive}\n isReadonly={hasReadonlyInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n isDisabled={isDisabled}\n ref={input}\n isLoading={areOptionsLoading}\n tweakStyles={tweakInputStyles}\n testId={testId}\n icon={[\n isMultiSelect && shouldShowMultiSelectCounter\n ? {\n key: 'counter',\n iconComponent: (\n <div key=\"counter\" className={classes.counter}>\n (+{value.length - 1})\n </div>\n ),\n shouldResetSize: true,\n }\n : undefined,\n\n ...getArray(endIcon),\n\n <div\n key=\"arrow\"\n className={clsx(classes.arrow, isOpen && classes.activeArrow)}\n onClick={onArrowClick} // клик тут, потому что onClick в ControlWrapper добавляет tabIndex={0}\n >\n {renderIcon(dropdownIcon)}\n </div>,\n ].filter(isNotEmpty)}\n {...inputProps}\n />\n </div>\n {shouldUsePopper ? (\n <Portal container={shouldRenderInBody ? document.body : inputWrapper.current}>\n <>{listEl}</>\n </Portal>\n ) : (\n <>{isOpen && listEl}</>\n )}\n </div>\n </WithMessages>\n );\n}\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { ISelectStyles } from '../../../Select';\n\nexport const useStyles = createThemedStyles('DatePickerHeader', {\n btn: {\n width: 36,\n height: 36,\n padding: 8,\n boxSizing: 'border-box',\n border: 'none',\n outline: 'none',\n cursor: 'pointer',\n marginLeft: 8,\n },\n\n header: {\n margin: 6,\n display: 'flex',\n alignItems: 'center',\n },\n\n buttons: {\n flexShrink: 0,\n marginLeft: 'auto',\n },\n});\n\nexport const selectStyles: ISelectStyles = {\n tweakSelectList: {\n cell: {\n fontSize: 14,\n minHeight: 35,\n },\n },\n\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': '35px',\n border: 'none',\n },\n },\n\n inputContent: {\n fontSize: 16,\n fontWeight: 'bold',\n },\n },\n};\n\nexport type IDatePickerHeaderStyles = ITweakStyles<\n typeof useStyles,\n { tweakSelect: ISelectStyles }\n>;\n","import { FC, useMemo } from 'react';\nimport { ReactDatePickerCustomHeaderProps as BaseProps } from 'react-datepicker';\nimport { getMonth, getYear } from 'date-fns';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { Select } from '../../../Select';\nimport { IDatePickerHeaderStyles, selectStyles, useStyles } from './DatePickerHeader.styles';\n\nexport interface IDatePickerHeaderProps\n extends BaseProps,\n Pick<ICommonProps<IDatePickerHeaderStyles>, 'tweakStyles'> {\n months?: string[];\n}\n\nexport const DatePickerHeader: FC<IDatePickerHeaderProps> = ({\n date,\n months = [],\n tweakStyles,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n changeYear,\n changeMonth,\n decreaseMonth,\n increaseMonth,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: selectStyles,\n tweakStyles,\n className: 'tweakSelect',\n currentComponentName: 'DatePickerHeader',\n });\n\n const years = useMemo(\n () => Array.from(Array(41)).map((_, i) => getYear(new Date()) - 30 + i),\n [],\n );\n\n return (\n <div className={classes.header}>\n <Select\n value={months[getMonth(date)]}\n options={months}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => changeMonth(months.indexOf(value as string))}\n />\n <Select\n value={getYear(date)}\n options={years}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => changeYear(value as number)}\n />\n\n <div className={classes.buttons}>\n <button\n type=\"button\"\n className={classes.btn}\n disabled={prevMonthButtonDisabled}\n onClick={decreaseMonth}\n >\n <Icon type=\"chevron-left\" />\n </button>\n\n <button\n type=\"button\"\n className={classes.btn}\n disabled={nextMonthButtonDisabled}\n onClick={increaseMonth}\n >\n <Icon type=\"chevron-right\" />\n </button>\n </div>\n </div>\n );\n};\n","import { FC, PropsWithChildren } from 'react';\nimport { FloatingPortal } from '@floating-ui/react';\n\nexport const PopperContainer: FC<PropsWithChildren> = (props) => (\n <FloatingPortal root={document.body} {...props} />\n);\n","import { enUS as enLocale, ru as ruLocale, type Locale } from 'date-fns/locale';\n\nexport const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\n\nexport const OUTSIDE_CLICK_IGNORE_CLASS = 'react-datepicker-ignore-onclickoutside';\n\nexport const LocalesMap = {\n ru: ruLocale,\n en: enLocale,\n} satisfies Record<string, Locale>;\n\nexport type IDatePickerLocale = keyof typeof LocalesMap | Locale;\n","import { format, isSameDay, parse } from 'date-fns';\nimport {\n isEmpty,\n isNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { EMPTY_DATE_INPUT_VALUE } from '../DateInput';\n\nexport const getDateFormatter =\n (dateFormat: string) =>\n (date?: Date | null): string =>\n isNotEmpty(date) ? format(date, dateFormat) : '';\n\nexport const getDateValueParser =\n (dateFormat: string) =>\n (value: string): Date | null => {\n const inputValue = value === EMPTY_DATE_INPUT_VALUE ? '' : value;\n return isStringNotEmpty(inputValue) ? parse(value, dateFormat, new Date()) : null;\n };\n\nexport const areDatesEquals = (date1?: Date | null, date2?: Date | null): boolean =>\n (isEmpty(date1) && isEmpty(date2)) ||\n (isNotEmpty(date1) && isNotEmpty(date2) && isSameDay(date1, date2));\n","import { createThemedStyles, ITweakStyles } from '../../theme';\nimport { IDateInputStyles } from '../DateInput';\n\nexport const useStyles = createThemedStyles('DatePicker', {\n root: {\n width: '100%',\n height: '100%',\n },\n\n day: {},\n\n dayInner: {},\n\n datepicker: {},\n\n popper: {\n zIndex: 10,\n\n '&[data-placement^=\"bottom\"]': {\n paddingTop: 6,\n },\n\n '&[data-placement^=\"top\"]': {\n paddingBottom: 6,\n },\n\n '&[data-placement^=\"left\"]': {\n paddingRight: 6,\n },\n\n '&[data-placement^=\"right\"]': {\n paddingLeft: 6,\n },\n },\n});\n\nexport type IDatePickerStyles = ITweakStyles<\n typeof useStyles,\n { tweakDateInput: IDateInputStyles }\n>;\n","import {\n FC,\n FocusEvent,\n SyntheticEvent,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type ReactDatePicker from 'react-datepicker';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport clsx from 'clsx';\nimport { isAfter, isBefore, isValid } from 'date-fns';\nimport {\n addDataAttributes,\n isEmpty,\n isNotEmpty,\n isString,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { offset } from '@floating-ui/react';\nimport { useMergedRefs, useOnClickOutside, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { DateInput, EMPTY_DATE_INPUT_VALUE, IDateInputProps } from '../DateInput';\nimport { DatePickerBase, DatePickerHeader, PopperContainer } from './components';\nimport {\n DEFAULT_DATE_FORMAT,\n IDatePickerLocale,\n LocalesMap,\n OUTSIDE_CLICK_IGNORE_CLASS,\n} from './constants';\nimport { areDatesEquals, getDateFormatter, getDateValueParser } from './helpers';\nimport { IDatePickerBaseProps, IRange } from './types';\nimport { IDatePickerStyles, useStyles } from './DatePicker.styles';\n\nexport interface IDatePickerProps extends IDatePickerBaseProps, ICommonProps<IDatePickerStyles> {\n selectedDate?: Date | null;\n locale: IDatePickerLocale;\n months?: string[];\n /** @default 'dd.MM.yyyy' */\n dateFormat?: string;\n /** @default 1 */\n calendarStartDay?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** @default false */\n isRange?: boolean;\n /** @default false */\n isInline?: boolean;\n /** @default false */\n shouldRenderPopperInBody?: boolean;\n customInput?: FC<IDateInputProps>;\n onChangeDate?: (date: Date | null, event?: SyntheticEvent) => void;\n onChangeRange?: (date: IRange, event?: SyntheticEvent) => void;\n}\n\nexport const DatePicker = forwardRef<ReactDatePicker, IDatePickerProps>(function DatePicker(\n {\n data,\n selectedDate = null,\n minDate,\n maxDate,\n endDate = null,\n startDate = null,\n locale,\n months,\n calendarStartDay = 1,\n dateFormat = DEFAULT_DATE_FORMAT,\n monthsShown,\n placeholder,\n isRange = false,\n isInline = false,\n isDisabled,\n isClearable,\n strictParsing,\n fixedHeight,\n focusSelectedMonth,\n disabledKeyboardNavigation,\n shouldRenderPopperInBody = false,\n allowSameDay = false,\n shouldCloseOnSelect,\n showPreviousMonths,\n preventOpenOnFocus,\n popperModifiers = [],\n popperPlacement = 'bottom-start',\n todayButton,\n highlightDates,\n calendarContainer,\n dayClassName,\n customInput: CustomInput = DateInput,\n customInputRef,\n renderCustomHeader,\n filterDate,\n onYearChange,\n onMonthChange,\n onCalendarOpen,\n onCalendarClose,\n onChangeDate,\n onChangeRange,\n onBlur,\n onFocus,\n onKeyDown,\n tweakStyles,\n ...inputProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakDateInputStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakDateInput',\n currentComponentName: 'DatePicker',\n });\n\n const { formatDate, parseDateValue } = useMemo(\n () => ({\n formatDate: getDateFormatter(dateFormat),\n parseDateValue: getDateValueParser(dateFormat),\n }),\n [dateFormat],\n );\n\n const datePickerRef = useRef<DatePickerBase>();\n\n const componentRef = useMergedRefs([ref, datePickerRef]);\n\n const [isOpen, setIsOpen] = useState(false);\n\n const [dateValue, setDateValue] = useState(formatDate(selectedDate));\n\n const [start, setStart] = useState(startDate);\n const [startDateValue, setStartDateValue] = useState(formatDate(startDate));\n const [end, setEnd] = useState(endDate);\n const [endDateValue, setEndDateValue] = useState(formatDate(endDate));\n\n const hasDateInputValue = isRange\n ? isStringNotEmpty(startDateValue) || isStringNotEmpty(endDateValue)\n : isStringNotEmpty(dateValue);\n\n const dateInputProps: IDateInputProps = {\n ...inputProps,\n isRange,\n isDisabled,\n isClearable,\n isActive: isOpen,\n icon: isClearable && hasDateInputValue ? undefined : 'calendar',\n tweakStyles: tweakDateInputStyles,\n ...(isRange ? { startDate: startDateValue, endDate: endDateValue } : { date: dateValue }),\n };\n\n const handleChangeDate = (value: Date | null, event?: SyntheticEvent) => {\n onChangeDate?.(value, event);\n };\n\n const isDateInRange = (date: Date) =>\n (isEmpty(minDate) || isAfter(date, minDate)) && (isEmpty(maxDate) || isBefore(date, maxDate));\n\n // TODO: Если пропса allowSameDay равна true и введена только начальная дата, то\n // невозможно будет стереть значение в инпуте. Обойти это можно только если\n // полностью выбрать период, а затем уже очищать инпут (баг в react-datepicker. В этом\n // случае value равняется не [null, null], а [start, null])\n const handleChangeRange = (value: IRange, event?: SyntheticEvent) => {\n if (\n allowSameDay ||\n !areDatesEquals(value?.[0], startDate) ||\n !areDatesEquals(value?.[1], endDate)\n ) {\n setStart(value?.[0] ?? null);\n setEnd(value?.[1] ?? null);\n onChangeRange?.(value, event);\n }\n };\n\n // TODO: кажется это можно улучшить, т.к проблему пофиксили (https://github.com/Hacker0x01/react-datepicker/pull/5060)\n const handleChangeDateRangeInput = (value: string) => {\n const newStartDateValue = value.slice(0, 10);\n let newStart = parseDateValue(newStartDateValue);\n const newEndDateValue = value.slice(13);\n let newEnd = parseDateValue(newEndDateValue);\n\n if (\n (isNotEmpty(newStart) && !isValid(newStart)) ||\n (isNotEmpty(newStart) && !isDateInRange(newStart))\n ) {\n newStart = start;\n }\n\n if (\n (isNotEmpty(newEnd) && !isValid(newEnd)) ||\n (isNotEmpty(newEnd) && !isDateInRange(newEnd))\n ) {\n newEnd = end;\n }\n\n // Если оставить пустой начальную дату и заполненной конечную,\n // то ломается react-datepicker и в календарике ничего нельзя выбирать\n if (\n (isEmpty(newStart) && isValid(newEnd)) ||\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n (isValid(newStart) && isValid(newEnd) && isAfter(newStart!, newEnd!))\n ) {\n newStart = newEnd;\n newEnd = null;\n }\n\n setStartDateValue(newStartDateValue);\n setStart(newStart);\n setEndDateValue(newEndDateValue);\n setEnd(newEnd);\n };\n\n const handleDateInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n setDateValue(formatDate(selectedDate));\n };\n\n const setDateRangeValues = (startValue: Date | null = null, endValue: Date | null = null) => {\n let convertedStartDate = formatDate(startValue);\n const convertedEndDate = formatDate(endValue);\n if (convertedStartDate === '' && convertedEndDate !== '') {\n // Если выставлять пустую строку, то конечная дата перепрыгивает на место начальной\n convertedStartDate = EMPTY_DATE_INPUT_VALUE;\n }\n\n setStart(startValue);\n setStartDateValue(convertedStartDate);\n setEnd(endValue);\n setEndDateValue(convertedEndDate);\n };\n\n const handleDateRangeInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n handleChangeRange([start, end], event);\n setDateRangeValues(start, end);\n };\n\n const handleOpenCalendar = () => {\n setIsOpen(true);\n onCalendarOpen?.();\n };\n\n const handleCloseCalendar = () => {\n setIsOpen(false);\n if (isRange) {\n handleChangeRange([start, end]);\n setDateRangeValues(start, end);\n } else {\n setDateValue(formatDate(selectedDate));\n }\n onCalendarClose?.();\n };\n\n useEffect(() => {\n setDateValue(formatDate(selectedDate));\n setDateRangeValues(startDate, endDate);\n }, [selectedDate, startDate, endDate]);\n\n // Кастомный обработчик клика снаружи, чтобы можно было поставить фокус на Input при открытом календаре.\n // Проблема в том, что класс OUTSIDE_CLICK_IGNORE_CLASS висит контейнере Input'а. А react-datepicker\n // проверяет наличие класса непосредственно на элементе, который вызвал клик, но не на его родителях\n useOnClickOutside(\n () => datePickerRef.current?.calendar?.containerRef?.current,\n (event) => datePickerRef.current?.handleClickOutside(event as MouseEvent),\n OUTSIDE_CLICK_IGNORE_CLASS,\n );\n\n return (\n <div className={classes.root} {...addDataAttributes(data)}>\n <DatePickerBase\n ref={componentRef}\n minDate={minDate}\n maxDate={maxDate}\n locale={isString(locale) ? LocalesMap[locale] : locale}\n dateFormat={dateFormat}\n placeholderText={placeholder}\n calendarStartDay={calendarStartDay}\n inline={isInline}\n disabled={isDisabled}\n fixedHeight={fixedHeight}\n showPreviousMonths={showPreviousMonths}\n focusSelectedMonth={focusSelectedMonth}\n monthsShown={monthsShown}\n allowSameDay={allowSameDay}\n showPopperArrow={false}\n popperClassName={classes.popper}\n calendarClassName={classes.datepicker}\n dayClassName={(v) => clsx(classes.day, dayClassName?.(v))}\n disabledKeyboardNavigation={disabledKeyboardNavigation}\n popperContainer={shouldRenderPopperInBody ? PopperContainer : undefined}\n // Убираем дефолтный отступ в 10px из либы\n // https://github.com/Hacker0x01/react-datepicker/blob/db67a58de2b05d2681bdf0a4977b606095d514c4/src/with_floating.tsx#L58\n popperModifiers={[offset(-10), ...popperModifiers]}\n popperPlacement={popperPlacement}\n strictParsing={strictParsing}\n preventOpenOnFocus={preventOpenOnFocus}\n shouldCloseOnSelect={shouldCloseOnSelect}\n customInputRef={customInputRef}\n customInput={<CustomInput {...dateInputProps} />}\n renderDayContents={(day) => <div className={classes.dayInner}>{day}</div>}\n renderCustomHeader={\n renderCustomHeader ?? ((baseProps) => <DatePickerHeader {...baseProps} months={months} />)\n }\n todayButton={todayButton}\n highlightDates={highlightDates}\n calendarContainer={calendarContainer}\n filterDate={filterDate}\n onYearChange={onYearChange}\n onMonthChange={onMonthChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onCalendarOpen={handleOpenCalendar}\n onCalendarClose={handleCloseCalendar}\n onChangeRaw={(_, value?: string) => {\n // Если передали value, значит этот обработчик вызвался после изменения значения в инпуте\n // (react-datepicker вызывает эту функцию также при клике на дату в календаре)\n if (value === undefined) {\n return;\n }\n if (isRange) {\n handleChangeDateRangeInput(value);\n } else {\n setDateValue(value);\n }\n }}\n {...(isRange\n ? {\n startDate: start,\n endDate: end,\n selected: start,\n selectsRange: true,\n onBlur: handleDateRangeInputBlur,\n onChange: handleChangeRange,\n }\n : {\n selected: selectedDate,\n onBlur: handleDateInputBlur,\n onChange: handleChangeDate,\n })}\n />\n </div>\n );\n});\n","export const LINK_REGEXP = /(http(s?):\\/\\/(.*))(\\s?)/;\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Description', {\n root: {},\n\n button: {\n cursor: 'pointer',\n display: 'inline-block',\n color: colors.FONT_MEDIUM,\n marginTop: 18,\n textTransform: 'capitalize',\n borderBottom: [1, 'dashed', colors.FONT_MEDIUM],\n\n '&:hover': {\n color: colors.FONT_MAIN,\n },\n },\n\n link: {\n color: colors.FONT_MEDIUM,\n textDecoration: 'none',\n borderBottom: [1, 'dashed', colors.FONT_MEDIUM],\n\n '&:hover': {\n color: colors.FONT_MAIN,\n },\n },\n});\n\nexport type IDescriptionStyles = ITweakStyles<typeof useStyles>;\n","import { SyntheticEvent } from 'react';\n\nexport const blockEvent = (event: SyntheticEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n};\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('FileInput', {\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n\n label: {\n position: 'relative',\n width: 'fit-content',\n fontSize: 16,\n marginBottom: 12,\n },\n\n requiredLabel: {\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n right: -8,\n top: 4,\n transform: 'translate(0, -50%)',\n width: 6,\n height: 6,\n borderRadius: '50%',\n },\n },\n\n description: {\n marginBottom: 8,\n fontSize: 12,\n },\n\n text: {\n padding: [16, 0],\n },\n\n inputWrapper: {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n boxSizing: 'border-box',\n marginBottom: 8,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color',\n },\n\n inputLabel: {\n position: 'absolute',\n inset: 0,\n cursor: 'pointer',\n\n '& input': {\n opacity: 0,\n width: 1,\n height: 1,\n zIndex: -1,\n },\n },\n\n dragged: {},\n\n active: {},\n\n disabled: {\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n\n fileList: {\n display: 'flex',\n flexWrap: 'wrap',\n columnGap: 6,\n rowGap: 12,\n },\n});\n\nexport type IFileInputStyles = ITweakStyles<typeof useStyles>;\n","import {\n ReactNode,\n useState,\n InputHTMLAttributes,\n forwardRef,\n ChangeEventHandler,\n DragEventHandler,\n} from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { blockEvent } from './helpers';\nimport { IFileInputStyles, useStyles } from './FileInput.styles';\n\nexport interface IFileInputProps extends ICommonProps<IFileInputStyles> {\n fileList?: ReactNode;\n label?: ReactNode;\n text: ReactNode;\n description?: ReactNode;\n /** @default false */\n isDragAndDropDisabled?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isReadOnly?: boolean;\n /** @default false */\n isMultipleDisabled?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default undefined */\n accept?: InputHTMLAttributes<HTMLInputElement>['accept'];\n onAdd?: (files: File[]) => void;\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, IFileInputProps>(function FileInput(\n {\n fileList,\n label,\n text,\n description,\n isDragAndDropDisabled = false,\n isRequired = false,\n isReadOnly = false,\n isMultipleDisabled = false,\n isDisabled = false,\n isActive = false,\n accept,\n onAdd,\n testId,\n tweakStyles,\n data,\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const [isDragOver, setIsDragOver] = useState(false);\n\n const handleAdd = (files: FileList | null) => {\n if (isDisabled || isEmpty(files) || files?.length === 0) {\n return;\n }\n\n onAdd?.([...files]);\n };\n\n const handleDragStart: DragEventHandler<HTMLDivElement> = (event) => {\n blockEvent(event);\n setIsDragOver(true);\n };\n\n const handleDragStop: DragEventHandler<HTMLDivElement> = (event) => {\n blockEvent(event);\n setIsDragOver(false);\n };\n\n const handleDrop: DragEventHandler<HTMLDivElement> = (event) => {\n handleDragStop(event);\n\n handleAdd(event.dataTransfer.files);\n };\n\n const handleFileChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n handleAdd(event.target.files);\n };\n\n const dndHandlers =\n !isDragAndDropDisabled && !isDisabled\n ? {\n onDragOver: handleDragStart,\n onDragEnter: handleDragStart,\n onDragLeave: handleDragStop,\n onDrop: handleDrop,\n }\n : undefined;\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isReactNodeNotEmpty(label) && (\n <div className={clsx(classes.label, { [classes.requiredLabel]: isRequired })}>{label}</div>\n )}\n {!isReadOnly && (\n <div\n className={clsx(classes.inputWrapper, {\n [classes.dragged]: isDragOver,\n [classes.disabled]: isDisabled,\n [classes.active]: isActive,\n })}\n {...dndHandlers}\n >\n {isReactNodeNotEmpty(text) && <div className={classes.text}>{text}</div>}\n <label className={classes.inputLabel}>\n <input\n ref={ref}\n type=\"file\"\n value=\"\"\n onChange={handleFileChange}\n multiple={!isMultipleDisabled}\n disabled={isDisabled}\n accept={accept}\n {...addDataTestId(testId, 'input')}\n />\n </label>\n </div>\n )}\n\n {isReactNodeNotEmpty(description) && <div className={classes.description}>{description}</div>}\n\n <div className={classes.fileList}>{fileList}</div>\n </div>\n );\n});\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('IconButton', {\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n outline: 'none',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color, border-color, opacity, visibility',\n border: 'none',\n position: 'relative',\n boxShadow: 'none',\n borderRadius: '50%',\n background: 'none',\n padding: 0,\n flexShrink: 0,\n\n '&:disabled': {\n extend: 'disabled',\n },\n\n '&:active': {\n extend: 'active',\n },\n\n width: 'var(--icon-button-size)',\n height: 'var(--icon-button-size)',\n '--icon-button-icon-size': '20px',\n },\n\n 'cancel-light': {},\n\n cancel: {},\n\n main: {},\n\n custom: {},\n\n active: {},\n\n disabled: {\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n\n loading: {\n '& $loader': {\n display: 'block',\n },\n },\n\n icon: {\n display: 'flex',\n alignItems: 'center',\n width: 'var(--icon-button-icon-size)',\n height: 'var(--icon-button-icon-size)',\n },\n\n loader: {\n display: 'none',\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n\n width: 'var(--icon-button-icon-size)',\n height: 'var(--icon-button-icon-size)',\n },\n\n s: {\n '--icon-button-size': '24px',\n },\n\n m: {\n '--icon-button-size': '32px',\n },\n\n l: {\n '--icon-button-size': '40px',\n },\n});\n\nexport type IIconButtonStyles = ITweakStyles<typeof useStyles>;\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { renderIcon, IIcon } from '../Icon';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { IIconButtonSize, IIconButtonView, IIconButtonHTMLBaseProps } from './types';\nimport { useStyles, IIconButtonStyles } from './IconButton.styles';\n\nexport interface IIconButtonProps\n extends IIconButtonHTMLBaseProps,\n ICommonProps<IIconButtonStyles> {\n icon: IIcon;\n /** @default 'm' */\n size?: IIconButtonSize;\n /** @default 'cancel-light' */\n view?: IIconButtonView;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default false */\n isLoading?: boolean;\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IIconButtonProps>(function IconButton(\n {\n icon,\n size = 'm',\n view = 'cancel-light',\n isDisabled = false,\n isActive = false,\n isLoading = false,\n type = 'button',\n testId,\n tweakStyles,\n data,\n onClick,\n ...restProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const hasNoAction = isDisabled || isLoading;\n\n return (\n <button\n ref={ref}\n className={clsx(classes.root, classes[view], classes[size], {\n [classes.disabled]: isDisabled,\n [classes.active]: isActive,\n [classes.loading]: isLoading,\n })}\n type={type}\n disabled={isDisabled}\n onClick={hasNoAction ? undefined : onClick}\n {...restProps}\n {...addDataAttributes(data, testId)}\n >\n {isLoading ? (\n <span className={classes.loader}>\n <ThemedPreloader type=\"default\" useCurrentColor />\n </span>\n ) : (\n <span className={classes.icon}>{renderIcon(icon)}</span>\n )}\n </button>\n );\n});\n","import { rgba } from '../../helpers';\nimport { colors, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { ITooltipSizes } from './types';\n\nexport const useStyles = createThemedStyles('Tooltip', {\n root: {\n display: 'inline-block',\n boxSizing: 'border-box',\n },\n\n tooltip: {\n fontSize: 14,\n padding: [18, 20],\n letterSpacing: 0.15,\n backgroundColor: colors.CLASSIC_WHITE,\n color: colors.FONT_MAIN,\n boxShadow: `0 0 1px ${rgba(colors.FONT_MAIN, 0.4)}, 0 -2px 6px ${rgba(\n colors.FONT_MAIN,\n 0.06,\n )}, 0 8px 32px -8px ${rgba(colors.FONT_MAIN, 0.3)}`,\n borderRadius: 12,\n lineHeight: 1.4,\n maxWidth: 320,\n },\n\n hint: {\n whiteSpace: 'nowrap',\n fontSize: 12,\n padding: [8, 12],\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.FONT_MEDIUM,\n color: colors.CLASSIC_WHITE,\n letterSpacing: 0.2,\n },\n\n custom: {},\n\n info: {},\n\n error: {\n '&$tooltip': {\n backgroundColor: colors.RED_WARNING,\n color: colors.CLASSIC_WHITE,\n },\n\n '&$hint': {\n backgroundColor: colors.RED_WARNING,\n },\n },\n});\n\nexport type ITooltipStyles = ITweakStyles<typeof useStyles, ITooltipSizes>;\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { ITooltipSize } from './types';\nimport { useStyles, ITooltipStyles } from './Tooltip.styles';\n\nexport interface ITooltipProps extends ICommonProps<ITooltipStyles> {\n text: ReactNode;\n /** @default 'tooltip' */\n view?: 'tooltip' | 'hint' | 'custom';\n /** @default 'info' */\n type?: 'info' | 'error';\n /** @default 'undefined' */\n size?: ITooltipSize;\n}\n\nexport const Tooltip: FC<ITooltipProps> = ({\n text,\n view = 'tooltip',\n type = 'info',\n size,\n data,\n testId,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <div\n className={clsx(\n classes.root,\n classes[view],\n classes[type],\n isNotEmpty(size) && classes[size],\n )}\n {...addDataAttributes(data, testId)}\n >\n {text}\n </div>\n );\n};\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { ITooltipStyles } from '../Tooltip';\n\nexport const useStyles = createThemedStyles('TextWithTooltip', {\n root: {\n position: 'relative',\n },\n\n tooltip: {\n zIndex: 9999,\n },\n\n clickable: {\n cursor: 'pointer',\n },\n});\n\nexport type ITextWithTooltipStyles = ITweakStyles<\n typeof useStyles,\n { tweakTooltip: ITooltipStyles }\n>;\n","import { CSSProperties, FC, ReactNode, useEffect, useRef, useState } from 'react';\nimport { Portal } from 'react-overlays';\nimport usePopper, { Modifier, Placement } from 'react-overlays/usePopper';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ITooltipProps, Tooltip } from '../Tooltip';\nimport { ITextWithTooltipStyles, useStyles } from './TextWithTooltip.styles';\n\nexport interface ITextWithTooltipProps extends ICommonProps<ITextWithTooltipStyles> {\n children: ReactNode;\n tooltipText: ITooltipProps['text'];\n /** @default 'tooltip' */\n tooltipView?: ITooltipProps['view'];\n /** @default 'info' */\n tooltipType?: ITooltipProps['type'];\n /** @default 'top' */\n tooltipPosition?: Placement;\n /** @default [] */\n tooltipModifiers?: Array<Partial<Modifier<any, any>>>;\n tooltipOffsetOptions?: Record<string, unknown>;\n /** @default 'undefined' */\n tooltipSize?: ITooltipProps['size'];\n /** @default 'hover' */\n mouseEventType?: 'hover' | 'click';\n hoverDelay?: number;\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n shouldRenderInBody?: boolean;\n}\n\n/** @deprecated Используйте {@link import('../WithTooltip').WithTooltip WithTooltip} */\nexport const TextWithTooltip: FC<ITextWithTooltipProps> = ({\n children,\n tooltipText,\n tooltipPosition = 'top',\n tooltipView = 'tooltip',\n tooltipType = 'info',\n tooltipModifiers = [],\n tooltipOffsetOptions,\n tooltipSize,\n isDisabled = false,\n shouldRenderInBody = true,\n mouseEventType = 'hover',\n hoverDelay,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakTooltipStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTooltip',\n currentComponentName: 'TextWithTooltip',\n });\n\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n const [tooltipTimeout, setTooltipTimeout] = useState<ReturnType<typeof setTimeout>>();\n\n const root = useRef<HTMLDivElement>(null);\n const tooltip = useRef<HTMLDivElement>(null);\n\n const hasDelay = hoverDelay !== undefined;\n\n const handleMouseEnter = () => {\n if (hasDelay) {\n const timeout = setTimeout(() => {\n setIsTooltipVisible(true);\n }, hoverDelay);\n\n setTooltipTimeout(timeout);\n } else {\n setIsTooltipVisible(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (hasDelay) {\n clearTimeout(tooltipTimeout);\n }\n setIsTooltipVisible(false);\n };\n\n useEffect(() => () => clearTimeout(tooltipTimeout), []);\n\n const { styles: popperStyles, attributes } = usePopper(root.current, tooltip.current, {\n enabled: isTooltipVisible,\n placement: tooltipPosition,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 6],\n ...tooltipOffsetOptions,\n },\n },\n ...tooltipModifiers,\n ],\n });\n\n useOnClickOutsideWithRef(\n tooltip,\n () => {\n if (mouseEventType === 'click') {\n setIsTooltipVisible(false);\n }\n },\n root,\n );\n\n const props =\n mouseEventType === 'click'\n ? {\n onClick: () => setIsTooltipVisible(true),\n }\n : {\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n };\n\n const shouldShowTooltip = tooltipText !== undefined && tooltipText !== null && !isDisabled;\n\n return (\n <div\n className={clsx(\n classes.root,\n mouseEventType === 'click' && shouldShowTooltip && classes.clickable,\n )}\n {...(shouldShowTooltip ? props : undefined)}\n {...addDataAttributes(data, testId)}\n ref={root}\n >\n {shouldShowTooltip && (\n <Portal container={shouldRenderInBody ? document.body : root.current}>\n <div\n className={classes.tooltip}\n style={popperStyles.popper as CSSProperties}\n {...attributes.popper}\n ref={tooltip}\n >\n <Tooltip\n view={tooltipView}\n type={tooltipType}\n text={tooltipText}\n size={tooltipSize}\n tweakStyles={tweakTooltipStyles}\n />\n </div>\n </Portal>\n )}\n {children}\n </div>\n );\n};\n","import { mimeTypes } from '../../constants';\nimport { IIconType } from '../Icon';\n\nexport const FILE_ICON_DEFAULT: IIconType = 'file-other';\n\nexport const iconTypeMap: Record<string, IIconType> = {\n [mimeTypes.xls]: 'file-excel',\n [mimeTypes.xlsx]: 'file-excel',\n [mimeTypes.jpeg]: 'file-image',\n [mimeTypes.png]: 'file-image',\n [mimeTypes.pdf]: 'file-pdf',\n [mimeTypes.doc]: 'file-word',\n [mimeTypes.docx]: 'file-word',\n [mimeTypes.xml]: 'file-xml',\n [mimeTypes.zip]: 'file-zip',\n};\n\nexport const FILE_ITEM_SIZES = ['m', 'l'] as const;\n","import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { IMimeType, mimeTypes } from '../../constants';\nimport { IIconType } from '../Icon';\nimport { FILE_ICON_DEFAULT, iconTypeMap } from './constants';\nimport { IFileInfo } from './types';\n\nexport const getFileExtensionByFilename = (fileName: string): string | undefined => {\n const splitFileName = fileName.split('.');\n return splitFileName.length > 1 ? splitFileName.pop() : undefined;\n};\n\nexport const getMimeTypeByFilename = (fileName: string): string | undefined => {\n const ext = getFileExtensionByFilename(fileName);\n return isNotEmpty(ext) ? mimeTypes[ext as IMimeType] : undefined;\n};\n\nexport const getFileIcon = ({ type, name }: IFileInfo): IIconType => {\n if (isNotEmpty(type) && type in iconTypeMap) {\n return iconTypeMap[type];\n }\n\n const mimeType = getMimeTypeByFilename(name);\n if (isNotEmpty(mimeType) && mimeType in iconTypeMap) {\n return iconTypeMap[mimeType];\n }\n\n return FILE_ICON_DEFAULT;\n};\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\nimport { IIconButtonStyles } from '../IconButton';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\nimport { ITooltipStyles } from '../Tooltip';\n\nexport const useStyles = createThemedStyles('FileItem', {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n },\n\n fileItemWrapper: {\n display: 'flex',\n gap: 12,\n width: '100%',\n cursor: 'pointer',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color, box-shadow, border-color',\n },\n\n m: {\n '&$fileItemWrapper': {\n padding: [10, 10, 10, 12],\n },\n\n '--icon-size': '20px',\n },\n\n l: {\n '&$fileItemWrapper': {\n padding: [12, 16],\n },\n\n '--icon-size': '32px',\n },\n\n fileIcon: {\n maxWidth: 'var(--icon-size)',\n maxHeight: 'var(--icon-size)',\n },\n\n fileName: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: 16,\n },\n\n fileNameContainer: {\n overflow: 'hidden',\n marginRight: 'auto',\n },\n\n preloader: {\n display: 'flex',\n margin: 6,\n },\n\n 'preloader-dots': {\n width: 26,\n marginTop: 12,\n },\n\n 'preloader-default': {\n width: 20,\n height: 20,\n },\n\n 'preloader-logo': {\n width: 20,\n height: 20,\n },\n\n metadata: {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n fontSize: 12,\n },\n\n actions: {\n display: 'flex',\n flexShrink: 0,\n margin: -6,\n },\n\n fileSize: {},\n\n footer: {},\n\n error: {\n fontSize: 12,\n },\n\n info: {\n fontSize: 12,\n },\n\n disabled: {\n cursor: 'not-allowed',\n },\n});\n\nexport const themedPreloaderStyles: IThemedPreloaderStyles = {\n tweakDotsPreloader: {\n root: {\n gap: 4,\n '--dot-size': '6px',\n },\n },\n};\n\nexport type IFileItemStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakRemoveIconButton: IIconButtonStyles;\n tweakPreloader: IThemedPreloaderStyles;\n tweakTooltip: ITooltipStyles;\n }\n>;\n","import { endOfMonth, endOfYear, startOfMonth, startOfYear, sub } from 'date-fns';\nimport type {\n IFilterLocale,\n IFilterLocaleKey,\n IPeriodGetter,\n ISelectLocale,\n ISelectLocaleKey,\n} from './types';\n\nexport const PERIODS = ['THIS_MONTH', 'LAST_MONTH', 'THIS_YEAR', 'LAST_YEAR', 'CUSTOM'] as const;\n\nexport const SelectLocales: Record<string, ISelectLocale> = {\n ru: {\n clear: 'Очистить',\n all: 'Все',\n chosen: 'Выбранные',\n nothingFound: 'Ничего не найдено',\n searchPlaceholder: 'Поиск',\n },\n\n en: {\n clear: 'Clear',\n all: 'All',\n chosen: 'Chosen',\n nothingFound: 'Nothing found',\n searchPlaceholder: 'Search',\n },\n};\n\nexport const FilterLocales: Record<string, IFilterLocale> = {\n ru: {\n clear: 'Очистить',\n all: 'Все',\n other: 'Остальные',\n chosen: 'Выбранные',\n nothingFound: 'Не найдено',\n from: 'От',\n to: 'До',\n back: 'Назад',\n searchPlaceholder: 'Поиск',\n displayedFields: 'Поля для поиска',\n months: [\n 'Январь',\n 'Февраль',\n 'Март',\n 'Апрель',\n 'Май',\n 'Июнь',\n 'Июль',\n 'Август',\n 'Сентябрь',\n 'Октябрь',\n 'Ноябрь',\n 'Декабрь',\n ],\n periods: {\n THIS_MONTH: 'Этот месяц',\n LAST_MONTH: 'Прошлый месяц',\n THIS_YEAR: 'Этот год',\n LAST_YEAR: 'Прошлый год',\n CUSTOM: 'Другой период',\n },\n },\n\n en: {\n clear: 'Clear',\n all: 'All',\n other: 'Others',\n chosen: 'Chosen',\n nothingFound: 'Nothing found',\n from: 'From',\n to: 'To',\n back: 'Back',\n searchPlaceholder: 'Search',\n displayedFields: 'Displayed fields',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n periods: {\n THIS_MONTH: 'This month',\n LAST_MONTH: 'Previous month',\n THIS_YEAR: 'This year',\n LAST_YEAR: 'Previous year',\n CUSTOM: 'Custom',\n },\n },\n};\n\nexport const DEFAULT_LOCALE: IFilterLocaleKey = 'en';\n\nexport const DEFAULT_SELECT_LOCALE: ISelectLocaleKey = 'en';\n\nexport const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\n\nexport const DEFAULT_PICKER_PROPS = {};\n\nexport const PERIODS_GETTERS: Record<string, IPeriodGetter> = {\n THIS_MONTH: () => {\n const today = new Date();\n return {\n from: startOfMonth(today),\n to: endOfMonth(today),\n };\n },\n LAST_MONTH: () => {\n const day = sub(new Date(), { months: 1 });\n return {\n from: startOfMonth(day),\n to: endOfMonth(day),\n };\n },\n THIS_YEAR: () => {\n const today = new Date();\n return {\n from: startOfYear(today),\n to: endOfYear(today),\n };\n },\n LAST_YEAR: () => {\n const day = sub(new Date(), { years: 1 });\n return {\n from: startOfYear(day),\n to: endOfYear(day),\n };\n },\n};\n","import { merge } from '@true-engineering/true-react-platform-helpers';\nimport { DEFAULT_LOCALE, DEFAULT_SELECT_LOCALE, FilterLocales, SelectLocales } from './constants';\nimport {\n type IFilterLocale,\n type IFilterLocaleKey,\n type IPartialFilterLocale,\n ISelectLocale,\n ISelectLocaleKey,\n} from './types';\n\nexport const getLocale = (\n key: IFilterLocaleKey = DEFAULT_LOCALE,\n custom?: IPartialFilterLocale,\n custom2?: IPartialFilterLocale,\n): IFilterLocale => merge(FilterLocales[key], custom, custom2);\n\nexport const getSelectLocale = (\n key: ISelectLocaleKey = DEFAULT_SELECT_LOCALE,\n custom?: Partial<ISelectLocale>,\n custom2?: Partial<ISelectLocale>,\n): ISelectLocale => merge(SelectLocales[key], custom, custom2);\n\nexport const sortValues = (arr: Array<number | undefined>): Array<number | undefined> =>\n arr.includes(undefined) ? arr : (arr as number[]).sort((a, b) => (a < b ? -1 : 1));\n\nexport const defaultConvertFunction = (val: unknown): string => String(val);\n","import { isStringNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { formatNumber, isSpaceChar } from '../../helpers';\nimport type { INumberInputProps } from './NumberInput';\n\nconst getPrevSpaces = (val: string, position: number): number =>\n val.slice(0, position).split('').filter(isSpaceChar).length;\n\nexport const getNewCaretPosition = (\n defaultPosition: number,\n oldValue: string,\n newValue: string,\n isDeleteForwardAction?: boolean,\n): number => {\n if (oldValue === newValue) {\n return isDeleteForwardAction ? defaultPosition + 1 : defaultPosition;\n }\n\n const isAdding = newValue.length > oldValue.length;\n const oldPrevSpaces = getPrevSpaces(oldValue, defaultPosition - (isAdding ? 1 : 0));\n const newPrevSpaces = getPrevSpaces(newValue, defaultPosition);\n const diff = newPrevSpaces - oldPrevSpaces;\n const res = defaultPosition + diff;\n if (res <= 0) {\n return 0;\n }\n return res - (isSpaceChar(newValue[res - 1]) ? 1 : 0);\n};\n\nexport const formatNumberWithDefault = (\n value: number | undefined,\n defaultValue?: number,\n): string => {\n const val = formatNumber(value);\n return isStringNotEmpty(val) ? val : formatNumber(defaultValue);\n};\n\nexport const constructRegExp = ({\n canBeFloat,\n canBeNegative,\n intPartPrecision,\n precision,\n}: Pick<\n INumberInputProps,\n 'canBeFloat' | 'canBeNegative' | 'intPartPrecision' | 'precision'\n>): string => {\n const basePart = `\\\\d{0,${intPartPrecision}}`;\n const floatPart = `(\\\\.\\\\d{0,${precision}})?`;\n const negativePart = '(\\\\-)?';\n\n return `^${canBeNegative ? negativePart : ''}${basePart}${canBeFloat ? floatPart : ''}$`;\n};\n\n// const testNewCaretPosition = () => {\n// console.log(getNewCaretPosition(1, '', '1') === 1);\n// console.log(getNewCaretPosition(2, '1', '12') === 2);\n// console.log(getNewCaretPosition(3, '12', '123') === 3);\n// console.log(getNewCaretPosition(4, '123', '1 234') === 5);\n// console.log(getNewCaretPosition(6, '1 234', '12 345') === 6);\n// console.log(getNewCaretPosition(2, '1 234', '10 234') === 2);\n// console.log(getNewCaretPosition(3, '1 234', '10 234') === 2);\n// console.log(getNewCaretPosition(1, '1 234', '21 234') === 1);\n// console.log(getNewCaretPosition(8, '123 456', '123 456.') === 8);\n// console.log(getNewCaretPosition(8, '123 456', '1 234 567') === 9);\n// console.log(getNewCaretPosition(5, '123 456', '1 230 456') === 5);\n// console.log(getNewCaretPosition(4, '123 456', '1 230 456') === 5);\n//\n// console.log(getNewCaretPosition(0, '1', '') === 0);\n// console.log(getNewCaretPosition(1, '12', '1') === 1);\n// console.log(getNewCaretPosition(2, '123', '12') === 2);\n// console.log(getNewCaretPosition(4, '1 234', '123') === 3);\n// console.log(getNewCaretPosition(5, '12 345', '1 234') === 5);\n// console.log(getNewCaretPosition(1, '10 234', '1 234') === 1);\n// console.log(getNewCaretPosition(2, '10 234', '10 234') === 2);\n// console.log(getNewCaretPosition(0, '21 234', '1 234') === 0);\n// console.log(getNewCaretPosition(7, '123 456.', '123 456') === 7);\n// console.log(getNewCaretPosition(8, '1 234 567', '123 456') === 7);\n// console.log(getNewCaretPosition(5, '1 230 456', '1 230 456') === 5);\n// console.log(getNewCaretPosition(4, '1 230 456', '123 456') === 3);\n//\n// console.log(getNewCaretPosition(6, '1 234 567', '123 467') === 5);\n// console.log(getNewCaretPosition(5, '1 234 567', '1 234') === 5);\n// };\n//\n// testNewCaretPosition();\n","import { FocusEvent, forwardRef, KeyboardEvent, useState } from 'react';\nimport { isStringNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport {\n formatNumber,\n formatStringNumber,\n getNumberInRange,\n removeStringFormat,\n setCaretPosition,\n stringToNumber,\n} from '../../helpers';\nimport { useDidMountEffect } from '../../hooks';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport { constructRegExp, formatNumberWithDefault, getNewCaretPosition } from './helpers';\n\nexport interface INumberInputProps extends Omit<IInputProps, 'value' | 'onChange' | 'type'> {\n value?: number;\n /** @default 3 */\n precision?: number;\n /** @default 7 */\n intPartPrecision?: number;\n defaultValue?: number;\n /** @default false */\n canBeFloat?: boolean;\n /** @default false */\n canBeNegative?: boolean;\n min?: number;\n max?: number;\n onChange: (value: number | undefined, event?: IChangeInputEvent) => void;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, INumberInputProps>(function NumberInput(\n {\n value,\n canBeFloat = false,\n canBeNegative = false,\n defaultValue,\n precision = 3,\n intPartPrecision = 7,\n onChange,\n onBlur,\n min,\n max,\n ...props\n },\n ref,\n) {\n const [showedValue, setShowedValue] = useState(() =>\n formatNumberWithDefault(value, defaultValue),\n );\n\n // специальный костыль для обработки Delete - т.к. без него каретка будет работать неправильно при удалении пробелов\n const [isDeleteForwardAction, setIsDeleteForwardAction] = useState(false);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n setIsDeleteForwardAction(event.key === 'Delete');\n };\n\n const setShowedValueWithDefault = (v: string) => {\n setShowedValue(isStringNotEmpty(v) ? v : formatNumber(defaultValue));\n };\n\n const handleChange = async (inputValue: string, event: IChangeInputEvent): Promise<void> => {\n const oldValue = showedValue;\n const target = event.target as HTMLInputElement;\n const defaultCaretPos = target.selectionStart ?? 0;\n const numString = removeStringFormat(inputValue);\n\n if (numString === '') {\n onChange(undefined);\n // не убирать - ломается каретка\n setShowedValue('');\n return;\n }\n\n const numberRegexp = new RegExp(\n constructRegExp({\n precision,\n intPartPrecision,\n canBeNegative,\n canBeFloat,\n }),\n );\n\n if (!numberRegexp.test(numString)) {\n await setShowedValue(oldValue);\n setCaretPosition(target, defaultCaretPos - 1);\n return;\n }\n\n const hasDot = canBeFloat && /^[-]*[\\d\\s]*[.,]$/.test(inputValue);\n const formattedValue = formatStringNumber(numString);\n const newValue = hasDot ? `${formattedValue}.` : formattedValue;\n await setShowedValue(newValue);\n setCaretPosition(\n target,\n getNewCaretPosition(defaultCaretPos, oldValue, newValue, isDeleteForwardAction),\n );\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>): void => {\n const val = event.currentTarget.value;\n const num = stringToNumber(val);\n const newValue = num !== undefined ? getNumberInRange(num, min, max) : undefined;\n if (newValue !== value) {\n onChange(newValue);\n } else {\n setShowedValueWithDefault(formatNumber(value));\n }\n if (onBlur !== undefined) {\n onBlur(event);\n }\n };\n\n useDidMountEffect(() => {\n if (value !== undefined) {\n setShowedValueWithDefault(formatNumber(value));\n } else {\n setShowedValue(formatNumber(value));\n }\n }, [value]);\n\n return (\n <Input\n value={showedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n ref={ref}\n {...props}\n />\n );\n});\n","import { colors, ITweakStyles, createThemedStyles, animations } from '../../theme';\nimport { IButtonStyles } from '../Button';\nimport type { IFilterWrapperStyles } from './components';\n\nexport const FILTER_HEIGHT = 36;\n\nexport const useStyles = createThemedStyles('FiltersPane', {\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 8,\n width: '100%',\n },\n\n settings: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 18,\n boxSizing: 'border-box',\n width: 40,\n height: FILTER_HEIGHT,\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n },\n\n settingsIcon: {\n width: 16,\n height: 16,\n },\n\n clear: {\n display: 'flex',\n alignItems: 'center',\n height: FILTER_HEIGHT,\n },\n\n filterWithClearButton: {\n display: 'flex',\n gap: 16,\n minWidth: 0,\n },\n});\n\nexport const clearButtonStyles: IButtonStyles = {\n s: {\n paddingLeft: 0,\n paddingRight: 0,\n minWidth: 'unset',\n },\n\n text: {\n background: 'none',\n color: colors.GREY_ACTIVE,\n\n '&:hover, &:focus': {\n color: colors.FONT_MEDIUM,\n },\n\n '&:active': {\n color: colors.FONT_MAIN,\n },\n\n '&:hover, &:focus, &:active': {\n background: 'none',\n borderColor: 'transparent',\n },\n },\n};\n\nexport const innerTextButtonStyles: IButtonStyles = {\n text: {\n color: colors.GREY_ACTIVE,\n\n '&:hover, &:focus': {\n color: colors.FONT_MEDIUM,\n },\n\n '&:active': {\n color: colors.FONT_MEDIUM,\n },\n },\n};\n\nexport type IFiltersPaneStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakClearButton: IButtonStyles;\n tweakFilterWrapper: IFilterWrapperStyles;\n }\n>;\n","import { colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IButtonStyles } from '../../../Button';\nimport { IInputStyles } from '../../../Input';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterInterval', {\n root: {\n padding: 8,\n background: colors.CLASSIC_WHITE,\n },\n\n inputWrapper: {\n padding: [4, 12],\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: 20,\n marginBottom: 12,\n },\n\n autosize: {\n minWidth: 120,\n height: 0,\n opacity: 0,\n paddingRight: 16,\n fontSize: 16,\n whiteSpace: 'pre',\n userSelect: 'none',\n pointerEvents: 'none',\n },\n\n clear: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n});\n\nexport const inputStyles: IInputStyles = {\n input: {\n minWidth: 120,\n },\n\n tweakControlWrapper: {\n icon: {\n padding: 0,\n width: 24,\n\n '&:last-child': {\n paddingRight: 0,\n },\n },\n },\n};\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport type IFilterIntervalStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakInput: IInputStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { FC, useMemo } from 'react';\nimport { getTestId, addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { NumberInput } from '../../../NumberInput';\nimport { getLocale, sortValues } from '../../helpers';\nimport { IFilterLocaleKey, IFilterNumberInputProps, IPartialFilterLocale } from '../../types';\nimport {\n clearButtonStyles,\n IFilterIntervalStyles,\n inputStyles,\n useStyles,\n} from './FilterInterval.styles';\n\nexport interface IFilterIntervalProps extends ICommonProps<IFilterIntervalStyles> {\n value?: Array<number | undefined>;\n onChange: (value?: Array<number | undefined>) => void;\n labelName: string;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n withFieldNameInLabel?: boolean;\n canBeFloat?: boolean;\n fromInput?: IFilterNumberInputProps;\n toInput?: IFilterNumberInputProps;\n}\n\nexport const FilterInterval: FC<IFilterIntervalProps> = ({\n data,\n tweakStyles,\n value,\n labelName,\n withFieldNameInLabel,\n localeKey,\n locale,\n canBeFloat,\n onChange,\n fromInput,\n toInput,\n testId,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const handleClear = () => {\n onChange(undefined);\n };\n\n const handleFromChange = (v?: number) => {\n if (v === undefined && value?.[1] === undefined) {\n onChange(undefined);\n return;\n }\n onChange(sortValues([v, value?.[1]]));\n };\n\n const handleToChange = (v?: number) => {\n if (v === undefined && value?.[0] === undefined) {\n onChange(undefined);\n return;\n }\n onChange(sortValues([value?.[0], v]));\n };\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'FilterInterval',\n });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterInterval',\n });\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n <div className={classes.inputWrapper}>\n <div>\n <NumberInput\n onChange={handleFromChange}\n value={value?.[0]}\n label={\n withFieldNameInLabel\n ? `${labelName} ${translates.from.toLocaleLowerCase()}`\n : translates.from\n }\n canBeFloat={canBeFloat}\n isClearable\n tweakStyles={tweakInputStyles}\n testId={getTestId(testId, 'start')}\n {...fromInput}\n />\n {withFieldNameInLabel && (\n <div className={classes.autosize}>\n {labelName}&nbsp;{translates.from}\n </div>\n )}\n </div>\n <div>\n <NumberInput\n onChange={handleToChange}\n value={value?.[1]}\n label={\n withFieldNameInLabel\n ? `${labelName} ${translates.to.toLocaleLowerCase()}`\n : translates.to\n }\n canBeFloat={canBeFloat}\n isClearable\n tweakStyles={tweakInputStyles}\n testId={getTestId(testId, 'end')}\n {...toInput}\n />\n {withFieldNameInLabel && (\n <div className={classes.autosize}>\n {labelName}&nbsp;{translates.to}\n </div>\n )}\n </div>\n </div>\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n </div>\n );\n};\n","import type { IMultiSelectLocale, IMultiSelectLocaleKey } from './types';\n\nexport const MultiSelectLocales: Record<string, IMultiSelectLocale> = {\n ru: {\n clear: 'Очистить',\n all: 'Все',\n chosen: 'Выбранные',\n nothingFound: 'Не найдено',\n searchPlaceholder: 'Поиск',\n },\n\n en: {\n clear: 'Clear',\n all: 'All',\n chosen: 'Chosen',\n nothingFound: 'Nothing found',\n searchPlaceholder: 'Search',\n },\n};\n\nexport const DEFAULT_LOCALE: IMultiSelectLocaleKey = 'en';\n","import { merge } from '@true-engineering/true-react-platform-helpers';\nimport { DEFAULT_LOCALE, MultiSelectLocales } from './constants';\nimport type { IMultiSelectLocale, IMultiSelectLocaleKey } from './types';\n\nexport const defaultConvertFunction = (val: unknown): string => String(val);\n\nexport const getLocale = (\n key: IMultiSelectLocaleKey = DEFAULT_LOCALE,\n custom?: Partial<IMultiSelectLocale>,\n custom2?: Partial<IMultiSelectLocale>,\n): IMultiSelectLocale => merge(MultiSelectLocales[key], custom, custom2);\n","import { colors, createThemedStyles, helpers, ITweakStyles } from '../../theme';\nimport { IButtonStyles } from '../Button';\nimport { ICheckboxStyles } from '../Checkbox';\nimport { ISearchInputStyles } from '../SearchInput';\n\nconst ITEM_HEIGHT = 40;\nconst TOP_GAP = 12;\n\nexport const useStyles = createThemedStyles('MultiSelectList', {\n root: {\n width: 220,\n background: colors.CLASSIC_WHITE,\n },\n\n list: {\n paddingTop: TOP_GAP,\n maxHeight: ITEM_HEIGHT * 5 + TOP_GAP,\n overscrollBehavior: 'contain',\n ...helpers.withScrollBar,\n },\n\n label: {\n boxSizing: 'border-box',\n fontSize: 14,\n padding: [12, 16],\n userSelect: 'none',\n display: 'flex',\n alignItems: 'center',\n color: colors.FONT_LABEL,\n },\n\n labelChosen: {\n fontWeight: 'bold',\n color: colors.FONT_MAIN,\n padding: [4, 16, 12],\n },\n\n withoutTopGap: {\n paddingTop: 0,\n },\n\n item: {\n boxSizing: 'border-box',\n padding: 0,\n maxWidth: '100%',\n fontSize: 14,\n },\n\n option: {\n display: 'inline-block',\n userSelect: 'none',\n maxWidth: '100%',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n\n panel: {\n display: 'flex',\n padding: [0, 6, 8],\n },\n\n clear: {\n marginLeft: 'auto',\n },\n\n selectedItem: {},\n\n preloader: {\n width: 80,\n height: ITEM_HEIGHT,\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n dropdownInput: {\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n nothingFound: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: 16,\n fontSize: 14,\n },\n});\n\nexport const searchInputStyles: ISearchInputStyles = {\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': '40px',\n backgroundColor: 'transparent',\n border: 'none',\n },\n },\n },\n};\n\nexport const checkboxStyles: ICheckboxStyles = {\n root: {\n padding: [11, 16],\n boxSizing: 'border-box',\n width: '100%',\n },\n\n children: {\n marginRight: 'auto',\n overflow: 'hidden',\n },\n};\n\nexport const clearButtonStyles: IButtonStyles = {\n text: {\n color: colors.GREY_ACTIVE,\n\n '&:hover, &:focus': {\n color: colors.FONT_MEDIUM,\n },\n\n '&:active': {\n color: colors.FONT_MEDIUM,\n },\n },\n};\n\nexport type IMultiSelectListStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakSearchInput: ISearchInputStyles;\n tweakCheckbox: ICheckboxStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { useEffect, useState, useMemo, useRef, useCallback, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { debounce } from 'ts-debounce';\nimport {\n addDataAttributes,\n addDataTestId,\n getTestId,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useIsMounted, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Button } from '../Button';\nimport { Checkbox, ICheckboxProps } from '../Checkbox';\nimport { SearchInput } from '../SearchInput';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { DEFAULT_LOCALE, MultiSelectLocales } from './constants';\nimport { defaultConvertFunction, getLocale } from './helpers';\nimport { IMultiSelectListValues, IMultiSelectLocale, IMultiSelectLocaleKey } from './types';\nimport {\n useStyles,\n IMultiSelectListStyles,\n checkboxStyles,\n searchInputStyles,\n clearButtonStyles,\n} from './MultiSelectList.styles';\n\nexport interface IMultiSelectListProps<Value, Option> extends ICommonProps<IMultiSelectListStyles> {\n value?: Value;\n /** @default false */\n isSearchEnabled?: boolean;\n localeKey?: IMultiSelectLocaleKey;\n locale?: Partial<IMultiSelectLocale>;\n onClose?: () => void;\n onChange: (val?: Value) => void;\n options?: Option[];\n fetchOptions?: (val?: string, page?: number) => Promise<Option[]>;\n getValueView?: (val: Option) => ReactNode;\n getValueId?: (val: Option) => string;\n getValueString?: (val: Option) => string;\n /** @default по умолчанию значение совпадает с isSearchEnabled */\n isGroupingEnabled?: boolean;\n /** @default 'left' */\n checkboxPosition?: 'left' | 'right';\n pageSize?: number;\n searchMaxLength?: number;\n}\n\nexport function MultiSelectList<Value extends IMultiSelectListValues<Option>, Option = string>({\n value,\n tweakStyles,\n data,\n isSearchEnabled = false,\n localeKey = DEFAULT_LOCALE,\n locale = MultiSelectLocales[localeKey],\n onChange,\n onClose,\n options,\n fetchOptions,\n isGroupingEnabled = isSearchEnabled,\n getValueView = defaultConvertFunction,\n getValueId = defaultConvertFunction,\n getValueString = defaultConvertFunction,\n checkboxPosition = 'left',\n pageSize,\n searchMaxLength,\n testId,\n}: IMultiSelectListProps<Value, Option>): JSX.Element {\n const isMounted = useIsMounted();\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCheckboxStyles = useTweakStyles({\n innerStyles: checkboxStyles,\n tweakStyles,\n className: 'tweakCheckbox',\n currentComponentName: 'MultiSelectList',\n });\n\n const tweakSearchInputStyles = useTweakStyles({\n innerStyles: searchInputStyles,\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'MultiSelectList',\n });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'MultiSelectList',\n });\n\n const [keyCursorOn, setKeyCursorOn] = useState(0);\n const [searchValue, setSearchValue] = useState('');\n // Опции, которые получаем с бека при изменении строки поиска\n const [allOptions, setAllOptions] = useState<Option[]>([]);\n\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingOptionsOnScroll, setLoadingOptionsOnScroll] = useState(false);\n\n const [activePage, setActivePage] = useState(0);\n const [isMaxPage, setIsMaxPage] = useState(false);\n\n const observer = useRef<IntersectionObserver>();\n\n const chosenValues = value?.include;\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n const chosenValuesIds = useMemo(() => chosenValues?.map(getValueId), [getValueId, chosenValues]);\n\n const unchosenOptions = useMemo(\n () => allOptions.filter((v) => !chosenValuesIds?.includes(getValueId(v))),\n [getValueId, allOptions, chosenValuesIds],\n );\n\n const handleSearchInputChange = useCallback(\n async (inputValue?: string) => {\n if (fetchOptions === undefined) {\n return;\n }\n setIsLoading(true);\n\n try {\n const response = await fetchOptions(inputValue?.trim() ?? '');\n if (isMounted() && response !== undefined) {\n setAllOptions(response);\n setActivePage(0);\n setIsMaxPage(\n response.length === 0 || (pageSize !== undefined && response.length < pageSize),\n );\n }\n } finally {\n if (isMounted()) {\n setIsLoading(false);\n }\n }\n },\n [fetchOptions, pageSize],\n );\n\n const changeSearchValue = useCallback(debounce(handleSearchInputChange), [\n handleSearchInputChange,\n ]);\n\n function handleOnChange(inputValue: string) {\n setSearchValue(inputValue);\n\n if (fetchOptions === undefined) {\n if (options !== undefined) {\n const lowerSearchValue = inputValue.toLowerCase();\n setAllOptions(\n options.filter((o) => getValueString(o).toLowerCase().includes(lowerSearchValue)),\n );\n }\n } else {\n setIsLoading(true);\n changeSearchValue(inputValue);\n }\n }\n\n const handleSelectValue = (val: Option[]) => {\n if (val.length === 0) {\n onChange(undefined);\n return;\n }\n\n onChange({\n include: val,\n } as Value);\n };\n\n const handleClear = () => {\n onChange(undefined);\n };\n\n const onSelect: ICheckboxProps<Option>['onSelect'] = ({ value: checkboxValue, isSelected }) => {\n if (isNotEmpty(checkboxValue)) {\n handleSelectValue(\n isSelected\n ? [...(chosenValues ?? []), checkboxValue]\n : chosenValues?.filter((v) => getValueId(v) !== getValueId(checkboxValue)) ?? [],\n );\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n // TODO: это все очень плохо работает\n if (event.code === 'Escape') {\n onChange(value);\n if (onClose) {\n onClose();\n }\n }\n if (event.code === 'ArrowDown') {\n if (keyCursorOn < unchosenOptions.length + (value?.include.length ?? 0) - 1) {\n setKeyCursorOn(keyCursorOn + 1);\n }\n }\n if (event.code === 'ArrowUp') {\n if (keyCursorOn >= 1) {\n setKeyCursorOn(keyCursorOn - 1);\n }\n }\n if (event.code === 'Enter') {\n if (\n unchosenOptions[keyCursorOn] === undefined &&\n (value === undefined || value.include.length === 0)\n ) {\n return;\n }\n if (value !== undefined) {\n if (keyCursorOn < value.include.length) {\n onChange({\n ...value,\n include:\n value.include.filter(\n (val) => getValueId(val) !== getValueId(value.include[keyCursorOn]),\n ) ?? [],\n });\n } else {\n onChange({\n ...value,\n include: [...value.include, unchosenOptions[keyCursorOn - value.include.length]],\n });\n }\n } else {\n onChange({\n include: [unchosenOptions[keyCursorOn]],\n } as Value);\n }\n }\n };\n\n const getIsValueChosen = (id: string) => chosenValues?.some((v) => getValueId(v) === id);\n\n const handleLoadItemsOnScroll = useCallback(\n async (inputValue?: string, page?: number) => {\n if (fetchOptions === undefined) {\n return;\n }\n\n setLoadingOptionsOnScroll(true);\n\n try {\n const response = await fetchOptions(inputValue ?? '', page ?? 0);\n if (isMounted()) {\n if (response.length > 0) {\n setAllOptions((prevState) => [...prevState, ...response]);\n }\n if (response.length === 0 || (pageSize !== undefined && response.length < pageSize)) {\n setIsMaxPage(true);\n }\n }\n } finally {\n if (isMounted()) {\n setLoadingOptionsOnScroll(false);\n }\n }\n },\n [fetchOptions, getValueId],\n );\n\n const initIntersectionObserver = useCallback(\n (node: HTMLDivElement) => {\n if (isLoadingOptionsOnScroll || isMaxPage) {\n return;\n }\n\n if (observer.current) {\n observer.current.disconnect();\n }\n\n observer.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting) {\n await handleLoadItemsOnScroll(searchValue, activePage + 1);\n if (isMounted()) {\n setActivePage((prevState) => prevState + 1);\n }\n }\n });\n\n if (node) {\n observer.current.observe(node);\n }\n },\n [activePage, handleLoadItemsOnScroll, isLoadingOptionsOnScroll, isMaxPage, searchValue],\n );\n\n useEffect(() => {\n if (fetchOptions === undefined) {\n setAllOptions(options ?? []);\n return;\n }\n\n const doFetchOptions = async () => {\n setIsLoading(true);\n\n try {\n const response = await fetchOptions('');\n if (response !== undefined && isMounted()) {\n if (response.length === 0 || (pageSize !== undefined && response.length < pageSize)) {\n setIsMaxPage(true);\n }\n setAllOptions(response);\n }\n } finally {\n if (isMounted()) {\n setIsLoading(false);\n }\n }\n };\n doFetchOptions();\n }, []);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n });\n\n const mainOptionsList = isGroupingEnabled ? unchosenOptions : allOptions;\n\n const hasSelectedOptionsGroup = isGroupingEnabled && isArrayNotEmpty(chosenValues);\n\n const shouldShowNothingFoundMessage = !isLoading && !isArrayNotEmpty(allOptions);\n\n const shouldShowAllOptionsLabel =\n hasSelectedOptionsGroup && (isArrayNotEmpty(unchosenOptions) || !isArrayNotEmpty(allOptions));\n\n const shouldShowPreloader = isLoading || isLoadingOptionsOnScroll;\n\n const shouldShowOptionsList =\n !isLoading && (isArrayNotEmpty(allOptions) || isArrayNotEmpty(chosenValues));\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isSearchEnabled && (\n <div className={classes.dropdownInput}>\n <SearchInput\n value={searchValue}\n placeholder={translates.searchPlaceholder}\n onChange={handleOnChange}\n tweakStyles={tweakSearchInputStyles}\n maxLength={searchMaxLength}\n testId={getTestId(testId, 'search')}\n shouldFocusOnMount\n />\n </div>\n )}\n {shouldShowOptionsList && (\n <div className={classes.list} {...addDataTestId(testId, 'list')}>\n {/* Выбранные */}\n {hasSelectedOptionsGroup && (\n <>\n <div\n className={clsx(\n classes.label,\n classes.labelChosen,\n !isSearchEnabled && classes.withoutTopGap,\n )}\n >\n {translates.chosen}\n </div>\n {chosenValues?.map((val) => {\n const id = getValueId(val);\n const view = getValueView(val);\n\n return (\n <div\n className={clsx(\n classes.item,\n // keyCursorOn === index && classes.selectedItem,\n )}\n key={id}\n >\n <Checkbox\n onSelect={onSelect}\n isChecked\n value={val}\n tweakStyles={tweakCheckboxStyles}\n labelPosition={checkboxPosition === 'left' ? 'right' : 'left'}\n data={{ id }}\n >\n <div className={classes.option} {...addDataAttributes({ option: id })}>\n {view}\n </div>\n </Checkbox>\n </div>\n );\n })}\n </>\n )}\n\n {!isLoading && (\n <>\n {/* Не выбранные (или все если нет группировки) */}\n {shouldShowAllOptionsLabel && <div className={classes.label}>{translates.all}</div>}\n\n {mainOptionsList.map((val, index) => {\n const id = getValueId(val);\n const view = getValueView(val);\n\n return (\n <div\n className={clsx(\n classes.item,\n // keyCursorOn === index + (value?.include.length ?? 0) &&\n // classes.selectedItem,\n )}\n ref={\n mainOptionsList.length - 1 === index ? initIntersectionObserver : undefined\n }\n key={id}\n >\n <Checkbox\n onSelect={onSelect}\n isChecked={getIsValueChosen(id)}\n value={val}\n tweakStyles={tweakCheckboxStyles}\n labelPosition={checkboxPosition === 'left' ? 'right' : 'left'}\n data={{ id }}\n >\n <div className={classes.option} {...addDataAttributes({ option: id })}>\n {view}\n </div>\n </Checkbox>\n </div>\n );\n })}\n </>\n )}\n </div>\n )}\n\n {/* Preloader */}\n {shouldShowPreloader && (\n <div className={classes.preloader}>\n <ThemedPreloader type=\"dots\" />\n </div>\n )}\n\n {/* Nothing found */}\n {shouldShowNothingFoundMessage && (\n <div className={classes.nothingFound}>{translates.nothingFound}</div>\n )}\n\n {/* Controls */}\n <div className={classes.panel}>\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import { IMultiSelectListProps, MultiSelectList } from '../../../MultiSelectList';\nimport { IFilterMultiSelectValues } from '../../types';\n\nexport type IFilterMultiSelectProps<Value, Option = string> = IMultiSelectListProps<Value, Option>;\n\nexport function FilterMultiSelect<Value extends IFilterMultiSelectValues<Option>, Option = string>(\n props: IFilterMultiSelectProps<Value, Option>,\n): JSX.Element {\n return <MultiSelectList {...props} />;\n}\n","import { animations, colors, createThemedStyles, helpers, ITweakStyles } from '../../../../theme';\nimport { IButtonStyles } from '../../../Button';\nimport { ISearchInputStyles } from '../../../SearchInput';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nconst ITEM_HEIGHT = 40;\nconst LIST_GAP = 12;\n\nexport const useStyles = createThemedStyles('FilterSelect', {\n root: {\n width: 220,\n background: colors.CLASSIC_WHITE,\n },\n\n list: {\n paddingTop: LIST_GAP,\n padding: [LIST_GAP, 0],\n maxHeight: ITEM_HEIGHT * 5 + LIST_GAP * 2,\n overscrollBehavior: 'contain',\n ...helpers.withScrollBar,\n },\n\n label: {\n boxSizing: 'border-box',\n fontSize: 14,\n padding: [12, 16],\n userSelect: 'none',\n display: 'flex',\n alignItems: 'center',\n color: colors.FONT_LABEL,\n },\n\n labelChosen: {\n fontWeight: 'bold',\n color: colors.FONT_MAIN,\n padding: [4, 16, 12],\n },\n\n withoutTopGap: {\n paddingTop: 0,\n },\n\n withClearButton: {\n paddingBottom: 0,\n maxHeight: ITEM_HEIGHT * 5 + LIST_GAP,\n },\n\n item: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: [10, 16],\n maxWidth: '100%',\n cursor: 'pointer',\n fontSize: 14,\n minHeight: ITEM_HEIGHT,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n boxSizing: 'border-box',\n },\n\n option: {\n display: 'inline-block',\n userSelect: 'none',\n width: '100%',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n\n icon: {\n width: 20,\n height: 20,\n marginRight: 4,\n alignSelf: 'center',\n flexShrink: 0,\n },\n\n panel: {\n display: 'flex',\n padding: [0, 6, 8],\n gap: 8,\n },\n\n panelWithFooter: {\n borderTop: [1, 'solid', colors.BORDER_MAIN],\n padding: [8, 16],\n },\n\n footer: {\n wordBreak: 'break-word',\n alignSelf: 'center',\n },\n\n clear: {\n marginLeft: 'auto',\n alignSelf: 'center',\n },\n\n preloader: {\n width: 80,\n height: ITEM_HEIGHT,\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n dropdownInput: {\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n nothingFound: {\n display: 'flex',\n alignItems: 'center',\n textAlign: 'center',\n padding: 16,\n fontSize: 14,\n },\n});\n\nexport const searchInputStyles: ISearchInputStyles = {\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': '40px',\n backgroundColor: 'transparent',\n border: 'none',\n },\n },\n },\n};\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport type IFilterSelectStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakSearchInput: ISearchInputStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { debounce } from 'ts-debounce';\nimport {\n addDataTestId,\n getTestId,\n isReactNodeNotEmpty,\n addDataAttributes,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useIsMounted, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { Icon } from '../../../Icon';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport { SearchInput } from '../../../SearchInput';\nimport { ThemedPreloader } from '../../../ThemedPreloader';\nimport { defaultConvertFunction, getSelectLocale } from '../../helpers';\nimport { IFilterLocaleKey, ISelectLocale } from '../../types';\nimport {\n useStyles,\n IFilterSelectStyles,\n searchInputStyles,\n clearButtonStyles,\n} from './FilterSelect.styles';\n\nexport interface IFilterSelectProps<Value> extends ICommonProps<IFilterSelectStyles> {\n value?: Value;\n onChange: (value?: Value) => void;\n onClose?: () => void;\n /**\n * @default false\n */\n isSearchEnabled?: boolean;\n /**\n * @default false\n */\n isGroupingEnabled?: boolean;\n localeKey?: IFilterLocaleKey;\n locale?: Partial<ISelectLocale>;\n options?: Value[];\n footer?: ReactNode;\n fetchOptions?: (value?: string, page?: number) => Promise<Value[]>;\n getValueString?: (value: Value) => string;\n getValueView?: (value: Value) => ReactNode;\n getValueId?: (value: Value) => string;\n /**\n * @default true\n */\n hasClearButton?: boolean;\n}\n\nexport function FilterSelect<Value>({\n data,\n tweakStyles,\n value,\n isSearchEnabled = false,\n isGroupingEnabled = false,\n localeKey,\n locale,\n onChange,\n onClose,\n options,\n fetchOptions,\n footer,\n getValueView = defaultConvertFunction,\n getValueId = defaultConvertFunction,\n getValueString = defaultConvertFunction,\n hasClearButton = true,\n testId,\n}: IFilterSelectProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakSearchInputStyles = useTweakStyles({\n innerStyles: searchInputStyles,\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'FilterSelect',\n });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterSelect',\n });\n\n const isMounted = useIsMounted();\n\n const translates = useMemo(() => getSelectLocale(localeKey, locale), [localeKey, locale]);\n\n const observer = useRef<IntersectionObserver>();\n\n const [searchValue, setSearchValue] = useState('');\n const [allOptions, setAllOptions] = useState<Value[]>([]);\n\n const [activePage, setActivePage] = useState(0);\n const [isMaxPage, setIsMaxPage] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingOptionsOnScroll, setLoadingOptionsOnScroll] = useState(false);\n\n const shouldShowPreloader = isLoading || isLoadingOptionsOnScroll;\n const hasFooter = isReactNodeNotEmpty(footer);\n\n const handleSearchInputChange = useCallback(\n async (inputValue?: string) => {\n if (fetchOptions === undefined) {\n return;\n }\n setIsLoading(true);\n\n try {\n const response = await fetchOptions(inputValue?.trim() ?? '');\n if (isMounted() && response !== undefined) {\n setAllOptions(response);\n setActivePage(0);\n setIsMaxPage(false);\n }\n } finally {\n if (isMounted()) {\n setIsLoading(false);\n }\n }\n },\n [fetchOptions],\n );\n\n const changeSearchValue = useMemo(\n () => debounce(handleSearchInputChange),\n [handleSearchInputChange],\n );\n\n const handleOnChange = (inputValue: string) => {\n setSearchValue(inputValue);\n if (fetchOptions === undefined) {\n if (options !== undefined) {\n const lowerSearchValue = inputValue.toLowerCase();\n setAllOptions(\n options.filter((o) => getValueString(o).toLowerCase().includes(lowerSearchValue)),\n );\n }\n } else {\n changeSearchValue(inputValue);\n }\n };\n\n const handleChange = (val?: Value) => {\n onChange(val);\n onClose?.();\n };\n\n const handleClear = () => {\n if (options !== undefined) {\n setAllOptions(options);\n }\n handleChange(undefined);\n setSearchValue('');\n };\n\n const handleLoadItemsOnScroll = useCallback(\n async (inputValue?: string, page?: number) => {\n if (fetchOptions === undefined) {\n return;\n }\n\n setLoadingOptionsOnScroll(true);\n\n try {\n const response = await fetchOptions(inputValue?.trim() ?? '', page ?? 0);\n\n if (isMounted()) {\n if (response.length > 0) {\n setAllOptions((prevState) => [...prevState, ...response]);\n } else {\n setIsMaxPage(true);\n }\n }\n } finally {\n if (isMounted()) {\n setLoadingOptionsOnScroll(false);\n }\n }\n },\n [fetchOptions],\n );\n\n const initIntersectionObserver = useCallback(\n (node: HTMLDivElement) => {\n if (isLoadingOptionsOnScroll || isMaxPage) {\n return;\n }\n\n if (observer.current) {\n observer.current.disconnect();\n }\n\n observer.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting) {\n await handleLoadItemsOnScroll(searchValue, activePage + 1);\n if (isMounted()) {\n setActivePage((prevState) => prevState + 1);\n }\n }\n });\n\n if (node) {\n observer.current.observe(node);\n }\n },\n [activePage, handleLoadItemsOnScroll, isLoadingOptionsOnScroll, isMaxPage, searchValue],\n );\n\n useEffect(() => {\n if (fetchOptions === undefined) {\n setAllOptions(options ?? []);\n return;\n }\n\n const doFetchOptions = async () => {\n setIsLoading(true);\n\n try {\n const response = await fetchOptions('');\n if (response !== undefined && isMounted()) {\n setAllOptions(response);\n }\n } finally {\n setIsLoading(false);\n }\n };\n doFetchOptions();\n }, []);\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isSearchEnabled && (\n <div className={classes.dropdownInput}>\n <SearchInput\n value={searchValue}\n placeholder={translates.searchPlaceholder}\n onChange={handleOnChange}\n tweakStyles={tweakSearchInputStyles}\n testId={getTestId(testId, 'search')}\n shouldFocusOnMount\n />\n </div>\n )}\n\n {!isLoading && (\n <>\n {isArrayNotEmpty(allOptions) && (\n <div\n className={clsx(classes.list, { [classes.withClearButton]: hasClearButton })}\n {...addDataTestId(testId, 'list')}\n >\n {isGroupingEnabled && isNotEmpty(value) && (\n <>\n <div\n className={clsx(classes.label, classes.labelChosen, {\n [classes.withoutTopGap]: !isSearchEnabled,\n })}\n >\n {translates.chosen}\n </div>\n <div className={classes.item} onClick={() => handleChange(undefined)}>\n <div className={classes.option}>{getValueView(value)}</div>\n <div className={classes.icon}>\n <Icon type=\"check\" />\n </div>\n </div>\n <div className={classes.label}>{translates.all}</div>\n </>\n )}\n {allOptions.map((item, index) => {\n const isActive = isNotEmpty(value) && getValueId(value) === getValueId(item);\n if (isGroupingEnabled && isActive) {\n return null;\n }\n const id = getValueId(item);\n const view = getValueView(item);\n\n const renderedItem = (\n <div\n key={id}\n className={classes.item}\n ref={\n allOptions.length - 1 === index && fetchOptions !== undefined\n ? initIntersectionObserver\n : undefined\n }\n onClick={() => handleChange(item)}\n >\n <div className={classes.option} {...addDataAttributes({ id, option: id })}>\n {view}\n </div>\n {isActive && (\n <div className={classes.icon}>\n <Icon type=\"check\" />\n </div>\n )}\n </div>\n );\n\n if (options !== undefined && searchValue === '') {\n return (\n <ScrollIntoViewIfNeeded key={id} active={isActive}>\n {renderedItem}\n </ScrollIntoViewIfNeeded>\n );\n } else {\n return renderedItem;\n }\n })}\n </div>\n )}\n\n {/* Preloader */}\n {shouldShowPreloader && (\n <div className={classes.preloader}>\n <ThemedPreloader type=\"dots\" />\n </div>\n )}\n\n {/* Nothing found */}\n {!isArrayNotEmpty(allOptions) && (\n <div className={classes.nothingFound}>{translates.nothingFound}</div>\n )}\n\n {/* Controls and footer */}\n {(hasClearButton || hasFooter) && (\n <div className={clsx(classes.panel, { [classes.panelWithFooter]: hasFooter })}>\n {hasFooter && <div className={classes.footer}>{footer}</div>}\n\n {hasClearButton && (\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n )}\n </div>\n )}\n </>\n )}\n\n {isLoading && (\n <div className={classes.preloader}>\n <ThemedPreloader type=\"dots\" />\n </div>\n )}\n </div>\n );\n}\n","import { colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IButtonStyles } from '../../../Button';\nimport { IDatePickerStyles } from '../../../DatePicker';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterWithDates', {\n root: {\n width: 320,\n background: colors.CLASSIC_WHITE,\n position: 'relative',\n zIndex: 20,\n },\n\n container: {\n display: 'flex',\n gap: 20,\n padding: [8, 20],\n },\n\n containerItem: {\n width: '50%',\n height: 44,\n },\n\n btnRow: {\n display: 'flex',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n padding: 8,\n },\n\n datepicker: {},\n});\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport const backButtonStyles = innerTextButtonStyles;\n\nconst PICKER_TOP_MARGIN = 28;\nconst PICKER_WITH_BUTTONS_TOP_MARGIN = 56;\nconst START_PICKER_LEFT_MARGIN = -20;\nconst END_PICKER_LEFT_MARGIN = -170;\n\nexport const startDatePickerStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_TOP_MARGIN, marginLeft: START_PICKER_LEFT_MARGIN },\n};\n\nexport const startDatePickerWithButtonStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_WITH_BUTTONS_TOP_MARGIN, marginLeft: START_PICKER_LEFT_MARGIN },\n};\n\nexport const endDatePickerStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_TOP_MARGIN, marginLeft: END_PICKER_LEFT_MARGIN },\n};\n\nexport const endDatePickerWithButtonStyles: IDatePickerStyles = {\n popper: { marginTop: PICKER_WITH_BUTTONS_TOP_MARGIN, marginLeft: END_PICKER_LEFT_MARGIN },\n};\n\nexport type IFilterWithDatesStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakClearButton: IButtonStyles;\n tweakBackButton: IButtonStyles;\n tweakStartDatePicker: IDatePickerStyles;\n tweakEndDatePicker: IDatePickerStyles;\n }\n>;\n","import { FC, useMemo, useRef, useState } from 'react';\nimport { isAfter, isBefore } from 'date-fns';\nimport { enUS, ru } from 'date-fns/locale';\nimport {\n getTestId,\n isNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { DatePicker } from '../../../DatePicker';\nimport { DEFAULT_PICKER_PROPS } from '../../constants';\nimport { getLocale } from '../../helpers';\nimport {\n IFilterLocaleKey,\n IFilterWithDateDatePickerProps,\n IFilterWithDatesValue,\n IPartialFilterLocale,\n} from '../../types';\nimport {\n backButtonStyles,\n clearButtonStyles,\n endDatePickerStyles,\n endDatePickerWithButtonStyles,\n IFilterWithDatesStyles,\n startDatePickerStyles,\n startDatePickerWithButtonStyles,\n useStyles,\n} from './FilterWithDates.styles';\n\nexport interface IFilterWithDatesProps extends ICommonProps<IFilterWithDatesStyles> {\n value?: IFilterWithDatesValue;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n isClearable?: boolean;\n startPickerProps?: IFilterWithDateDatePickerProps;\n endPickerProps?: IFilterWithDateDatePickerProps;\n onChange: (val: IFilterWithDatesValue) => void;\n onStartBtnSubmit?: () => void;\n onEndBtnSubmit: () => void;\n}\n\nexport const FilterWithDates: FC<IFilterWithDatesProps> = ({\n value,\n onChange,\n localeKey,\n locale,\n onStartBtnSubmit,\n onEndBtnSubmit,\n data,\n tweakStyles,\n testId,\n startPickerProps = DEFAULT_PICKER_PROPS,\n endPickerProps = DEFAULT_PICKER_PROPS,\n isClearable = true,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterWithDates',\n });\n\n const tweakBackButtonStyles = useTweakStyles({\n innerStyles: backButtonStyles,\n tweakStyles,\n className: 'tweakBackButton',\n currentComponentName: 'FilterWithDates',\n });\n\n const hasButtonsRow = isClearable || isNotEmpty(onStartBtnSubmit);\n\n const tweakStartDatePickerStyles = useTweakStyles({\n innerStyles: hasButtonsRow ? startDatePickerWithButtonStyles : startDatePickerStyles,\n tweakStyles,\n className: 'tweakStartDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const tweakEndDatePickerStyles = useTweakStyles({\n innerStyles: hasButtonsRow ? endDatePickerWithButtonStyles : endDatePickerStyles,\n tweakStyles,\n className: 'tweakEndDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const [isOpenFrom, setOpenFrom] = useState(false);\n const [isOpenTo, setOpenTo] = useState(false);\n\n const ref = useRef<HTMLDivElement>(null);\n\n const dateLocale = localeKey === 'ru' ? ru : enUS;\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const handleClear = () => {\n onEndBtnSubmit();\n };\n const isOpenCalendar = isOpenFrom || isOpenTo;\n\n const handleFromSelected = (val: Date | null) => {\n onChange({ from: val, to: value?.to ?? null });\n setOpenFrom(false);\n };\n\n const handleToSelected = (val: Date | null) => {\n onChange({ from: value?.from ?? null, to: val });\n setOpenTo(false);\n };\n\n const handleChangeFrom = (val: Date | null) => {\n // на самом деле ситуации когда надо переворачивать даты, произойти не может\n if (val !== null && value !== undefined && value.to !== null && isAfter(val, value.to)) {\n onChange({ from: value.to, to: val });\n } else {\n onChange({ from: val, to: value?.to ?? null });\n }\n };\n\n const handleChangeTo = (val: Date | null) => {\n // на самом деле ситуации когда надо переворачивать даты, произойти не может\n if (val !== null && value !== undefined && value.from !== null && isBefore(val, value.from)) {\n onChange({ from: val, to: value.from });\n } else {\n onChange({ from: value?.from ?? null, to: val });\n }\n };\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n <div className={classes.container}>\n <div className={classes.containerItem}>\n <DatePicker\n selectedDate={value?.from}\n maxDate={value?.to ?? undefined}\n label={translates.from}\n months={translates.months}\n locale={dateLocale}\n onChangeDate={handleChangeFrom}\n tweakStyles={tweakStartDatePickerStyles}\n testId={getTestId(testId, 'from')}\n isClearable={isClearable}\n {...startPickerProps}\n />\n </div>\n <div className={classes.containerItem}>\n <DatePicker\n selectedDate={value?.to}\n label={translates.to}\n months={translates.months}\n minDate={value?.from ?? undefined}\n locale={dateLocale}\n onChangeDate={handleChangeTo}\n tweakStyles={tweakEndDatePickerStyles}\n testId={getTestId(testId, 'to')}\n isClearable={isClearable}\n {...endPickerProps}\n />\n </div>\n </div>\n\n <div className={classes.btnRow}>\n {isClearable && (\n <div>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n testId={getTestId(testId, 'clear-button')}\n isFullWidth\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n )}\n\n {onStartBtnSubmit && (\n <div>\n <Button\n onClick={onStartBtnSubmit}\n size=\"s\"\n view=\"text\"\n isFullWidth\n tweakStyles={tweakBackButtonStyles}\n >\n {translates.back}\n </Button>\n </div>\n )}\n </div>\n\n {isOpenCalendar && (\n <div ref={ref} className={classes.datepicker}>\n <DatePicker\n selectedDate={(isOpenFrom ? value?.from : value?.to) ?? null}\n label=\"\"\n locale={dateLocale}\n months={translates.months}\n isInline\n onChangeDate={isOpenFrom ? handleFromSelected : handleToSelected}\n />\n </div>\n )}\n </div>\n );\n};\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IFilterSelectStyles } from '../FilterSelect';\n\nexport const useStyles = createThemedStyles('FilterWithPeriod', {\n root: {},\n\n main: {},\n\n picker: {},\n});\n\nexport const filterSelectStyles: IFilterSelectStyles = {\n list: {\n maxHeight: 'auto',\n },\n};\n\nexport type IFilterWithPeriodStyles = ITweakStyles<\n typeof useStyles,\n { tweakFilterSelect: IFilterSelectStyles }\n>;\n","import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutside, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { PERIODS, PERIODS_GETTERS } from '../../constants';\nimport { getLocale } from '../../helpers';\nimport {\n IDatePeriod,\n IFilterLocaleKey,\n IPartialFilterLocale,\n IPeriod,\n IPeriodGetter,\n IPeriodsList,\n} from '../../types';\nimport { FilterSelect } from '../FilterSelect';\nimport { FilterWithDates } from '../FilterWithDates';\nimport { useStyles, IFilterWithPeriodStyles, filterSelectStyles } from './FilterWithPeriod.styles';\n\nexport interface IFilterWithPeriodProps extends ICommonProps<IFilterWithPeriodStyles> {\n value?: IPeriod;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n periods?: IPeriodsList;\n onChange: (period?: IPeriod) => void;\n onClose?: () => void;\n}\n\nexport const FilterWithPeriod: FC<IFilterWithPeriodProps> = ({\n value,\n localeKey,\n locale,\n onChange,\n onClose,\n periods,\n tweakStyles,\n testId,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const [isPeriodPickerShown, setIsPeriodPickerShown] = useState(value?.periodType !== 'CUSTOM');\n\n const [isDatePickerShown, setIsDatePickerShown] = useState(value?.periodType === 'CUSTOM');\n\n const [period, setPeriod] = useState(value);\n\n const periodGetters = useMemo(() => {\n const result: Record<string, IPeriodGetter> = { ...PERIODS_GETTERS };\n periods?.forEach((p) => {\n if (Array.isArray(p)) {\n result[p[0]] = p[1];\n }\n });\n return result;\n }, [periods]);\n\n const periodsList = useMemo(() => {\n if (periods === undefined) {\n return [...PERIODS];\n }\n return periods.map((p) => (Array.isArray(p) ? p[0] : p));\n }, [periods]);\n\n const getPeriodTranslate = useCallback(\n (val: string) => translates.periods[val] ?? val,\n [translates.periods],\n );\n\n const handlePeriodChange = (periodType: string) => {\n let from = null;\n let to = null;\n\n if (periodType in periodGetters) {\n const newPeriod = periodGetters[periodType]();\n from = newPeriod.from;\n to = newPeriod.to;\n }\n\n const p = { from, to, periodType };\n setPeriod(p);\n\n if (periodType === 'CUSTOM') {\n setIsDatePickerShown(true);\n } else {\n if (onClose !== undefined) {\n onClose();\n }\n onChange({ ...p, label: getPeriodTranslate(periodType) });\n }\n\n setIsPeriodPickerShown(false);\n };\n\n const refPeriodPicker = useRef<HTMLDivElement>(null);\n const refDatePicker = useRef<HTMLDivElement>(null);\n\n const onPeriodChange = (val?: string) => {\n if (val !== undefined) {\n handlePeriodChange(val);\n } else {\n onChange(undefined);\n if (onClose !== undefined) {\n onClose();\n }\n }\n };\n\n const handleCustomDateChange = (val: IDatePeriod): void => {\n if (val.from || val.to) {\n onChange({\n ...val,\n periodType: 'CUSTOM',\n });\n } else {\n onChange(undefined);\n }\n };\n\n useOnClickOutside(refDatePicker, () => {\n if (!period?.from && !period?.to) {\n setPeriod(undefined);\n }\n setIsDatePickerShown(false);\n });\n\n useEffect(() => {\n setPeriod(value);\n }, [value, value?.from, value?.to, value?.periodType]);\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: filterSelectStyles,\n tweakStyles,\n className: 'tweakFilterSelect',\n currentComponentName: 'FilterWithPeriod',\n });\n\n return (\n <div className={classes.root}>\n {isPeriodPickerShown && (\n <div className={classes.main} ref={refPeriodPicker}>\n <FilterSelect\n options={periodsList}\n value={period?.periodType}\n onChange={onPeriodChange}\n localeKey={localeKey}\n locale={translates}\n tweakStyles={tweakSelectStyles}\n getValueView={getPeriodTranslate}\n testId={getTestId(testId, 'select')}\n />\n </div>\n )}\n {isDatePickerShown && (\n <div className={classes.picker} ref={refDatePicker}>\n <FilterWithDates\n onStartBtnSubmit={() => {\n setIsDatePickerShown(false);\n setIsPeriodPickerShown(true);\n }}\n onEndBtnSubmit={() => {\n onChange(undefined);\n setIsDatePickerShown(false);\n if (onClose !== undefined) {\n onClose();\n }\n }}\n value={period}\n onChange={handleCustomDateChange}\n localeKey={localeKey}\n locale={translates}\n testId={getTestId(testId, 'dates')}\n />\n </div>\n )}\n </div>\n );\n};\n","import { isEmpty, isString } from '@true-engineering/true-react-platform-helpers';\nimport { IDatePeriod, IFilterMultiSelectValues, IPeriod } from '../../types';\n\nconst isDateOrEmpty = (value: unknown): value is Date | null | undefined =>\n isEmpty(value) || value instanceof Date;\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const isDatePeriodValue = (value: any): value is IDatePeriod =>\n isDateOrEmpty(value?.from) && isDateOrEmpty(value?.to);\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const isPeriodValue = (value: any): value is IPeriod =>\n isString(value?.periodType) && isDatePeriodValue(value);\n\nexport const isMultiSelectValue = <T extends string>(\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n value: any,\n): value is IFilterMultiSelectValues<T> => Array.isArray(value?.include);\n","import { useMemo } from 'react';\nimport { getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { getLocale } from '../../helpers';\nimport { FilterInterval } from '../FilterInterval';\nimport { FilterMultiSelect } from '../FilterMultiSelect';\nimport { FilterSelect } from '../FilterSelect';\nimport { FilterWithDates } from '../FilterWithDates';\nimport { FilterWithPeriod } from '../FilterWithPeriod';\nimport type { IFilterWrapperProps } from '../FilterWrapper';\nimport { isDatePeriodValue, isMultiSelectValue, isPeriodValue } from './helpers';\n\nexport interface IFilterProps<Values extends Record<string, unknown>, Key extends keyof Values>\n extends IFilterWrapperProps<Values, Key> {\n onChange: <V>(v: V) => void;\n onClose?: () => void;\n}\n\nexport function Filter<Values extends Record<string, unknown>, Key extends keyof Values>(\n props: IFilterProps<Values, Key>,\n): JSX.Element | null {\n const { filter, value, onChange, onClose, localeKey, locale, testId } = props;\n const translatesLocaleKey = filter.localeKey ?? localeKey;\n const translates = useMemo(\n () => getLocale(translatesLocaleKey, locale, filter.locale),\n [translatesLocaleKey, locale, filter.locale],\n );\n\n if (filter.type === 'select') {\n return (\n <FilterSelect\n value={value}\n onChange={onChange}\n onClose={onClose}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'select')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'dateRange') {\n const preparedValue = isPeriodValue(value) ? { ...value } : undefined;\n\n return (\n <FilterWithPeriod\n value={preparedValue}\n onChange={onChange}\n onClose={onClose}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'period')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'dateRangeWithoutPeriod') {\n const preparedValue = isDatePeriodValue(value) ? value : undefined;\n\n return (\n <FilterWithDates\n value={preparedValue}\n onChange={(v) => onChange({ ...v, periodType: 'CUSTOM' })}\n onEndBtnSubmit={() => onChange(undefined)}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'dates')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'multiSelect') {\n const preparedValue = isMultiSelectValue<any>(value) ? value : undefined;\n\n return (\n <FilterMultiSelect\n value={preparedValue}\n onChange={onChange}\n onClose={onClose}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'multiSelect')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'interval') {\n const preparedValue = Array.isArray(value) ? (value as number[]) : undefined;\n\n return (\n <FilterInterval\n value={preparedValue}\n onChange={onChange}\n localeKey={translatesLocaleKey}\n locale={translates}\n labelName={filter.name}\n testId={getTestId(testId, 'interval')}\n {...filter}\n />\n );\n }\n\n if (filter.type === 'custom' && filter.component) {\n const Component = filter.component;\n\n return <Component {...props} filter={filter} testId={getTestId(testId, 'dropdown')} />;\n }\n\n if (filter.type !== 'boolean') {\n console.warn(\n `%cДля фильтра ${filter.name} не задан тип или component`,\n 'background: red; color: black',\n );\n }\n\n return null;\n}\n","import { rgba } from '../../../../helpers';\nimport {\n animations,\n colors,\n createThemedStyles,\n dimensions,\n ITweakStyles,\n} from '../../../../theme';\nimport { ISearchInputStyles } from '../../../SearchInput';\nimport { ISelectStyles } from '../../../Select';\nimport { FILTER_HEIGHT } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FiltersPaneSearch', {\n root: {\n display: 'flex',\n position: 'relative',\n backgroundColor: rgba(colors.BORDER_MAIN, 0.3),\n border: [1, 'transparent', 'solid'],\n borderRadius: 18,\n paddingRight: 8,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, border-color',\n },\n\n focused: {\n backgroundColor: colors.CLASSIC_WHITE,\n borderColor: colors.BORDER_MAIN,\n },\n\n disabled: {\n '& $selectBlock': {\n cursor: 'default',\n },\n },\n\n hasValue: {\n backgroundColor: colors.CLASSIC_WHITE,\n borderColor: colors.BORDER_MAIN,\n },\n\n selectWrapper: {\n position: 'relative',\n display: 'flex',\n flexShrink: 0,\n },\n\n selectBlock: {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n cursor: 'pointer',\n height: '100%',\n },\n\n selectLabel: {\n flexShrink: 0,\n fontSize: 14,\n userSelect: 'none',\n },\n\n chevronIcon: {\n flexShrink: 0,\n width: 20,\n height: 20,\n marginRight: 4,\n transition: 'transform .2s ease',\n opacity: 0.5,\n },\n\n open: {\n transform: 'rotate(180deg)',\n },\n\n dropdown: {\n position: 'absolute',\n top: FILTER_HEIGHT - 2,\n right: 0,\n zIndex: 20,\n minWidth: 200,\n marginTop: 6,\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.CLASSIC_WHITE,\n overflow: 'hidden',\n },\n\n dropdownInput: {\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n active: {\n fontWeight: 'bold',\n },\n});\n\nexport const searchInputStyles: ISearchInputStyles = {\n tweakInput: {\n tweakControlWrapper: {\n controlWrapper: {\n '--control-height': `${FILTER_HEIGHT - 2}px`,\n backgroundColor: 'transparent',\n border: 'none',\n minWidth: 140,\n },\n\n focused: {\n backgroundColor: 'transparent',\n border: 'none',\n },\n },\n },\n};\n\nexport const selectStyles: ISelectStyles = {\n root: {\n borderRadius: 0,\n borderBottomLeftRadius: 6,\n borderBottomRightRadius: 6,\n boxShadow: 'none',\n width: '100%',\n },\n};\n\nexport type IFiltersPaneSearchStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakSearchInput: ISearchInputStyles;\n tweakSelect: ISelectStyles;\n }\n>;\n","import { ReactNode, useMemo, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n getTestId,\n isArrayLikeNotEmpty,\n isArrayNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutside, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { SearchInput } from '../../../SearchInput';\nimport { getLocale } from '../../helpers';\nimport { IFilterLocaleKey, IFiltersPaneSearchPayload, IPartialFilterLocale } from '../../types';\nimport { FilterSelect } from '../FilterSelect';\nimport {\n IFiltersPaneSearchStyles,\n searchInputStyles,\n selectStyles,\n useStyles,\n} from './FiltersPaneSearch.styles';\n\nexport interface IFiltersPaneSearchProps<Value> extends ICommonProps<IFiltersPaneSearchStyles> {\n field?: Value;\n fields?: Value[];\n value?: string;\n onChange: (v: IFiltersPaneSearchPayload<Value>) => void;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n maxLength?: number;\n getValueView?: (value: Value) => ReactNode;\n getValueId?: (value: Value) => string;\n getValueString?: (value: Value) => string;\n hasClearSelectButton?: boolean;\n isDisabled?: boolean;\n isSelectSearchEnabled?: boolean;\n isAutoSized?: boolean;\n}\n\nexport function FiltersPaneSearch<Value>({\n value,\n fields = [],\n field,\n onChange,\n localeKey,\n locale,\n getValueId,\n getValueView,\n getValueString,\n hasClearSelectButton,\n isDisabled = false,\n isSelectSearchEnabled = true,\n isAutoSized = false,\n maxLength,\n data,\n tweakStyles,\n testId,\n}: IFiltersPaneSearchProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakSearchInputStyles = useTweakStyles({\n innerStyles: searchInputStyles,\n tweakStyles,\n className: 'tweakSearchInput',\n currentComponentName: 'FiltersPaneSearch',\n });\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: selectStyles,\n tweakStyles,\n className: 'tweakSelect',\n currentComponentName: 'FiltersPaneSearch',\n });\n\n const [isInputFocused, setIsInputFocused] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n\n const refRoot = useRef<HTMLDivElement | null>(null);\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n useOnClickOutside(refRoot, () => setIsOpen(false));\n\n const handleSearchChange = (v?: string) => {\n onChange({\n value: v,\n field,\n });\n };\n\n const handleFieldsChange = (v?: Value) => {\n onChange({\n value,\n field: v,\n });\n setIsOpen(false);\n };\n\n return (\n <div\n className={clsx(classes.root, {\n [classes.focused]: isInputFocused,\n [classes.disabled]: isDisabled,\n [classes.hasValue]: isArrayLikeNotEmpty(value),\n })}\n ref={refRoot}\n {...addDataAttributes(data, testId)}\n >\n <SearchInput\n value={value}\n onChange={handleSearchChange}\n placeholder={translates.searchPlaceholder}\n tweakStyles={tweakSearchInputStyles}\n onFocus={() => setIsInputFocused(true)}\n onBlur={() => setIsInputFocused(false)}\n testId={getTestId(testId, 'input')}\n maxLength={maxLength}\n isDisabled={isDisabled}\n isAutoSized={isAutoSized}\n />\n\n <div className={classes.selectWrapper}>\n {/* Select block */}\n {isArrayNotEmpty(fields) && (\n <div\n className={classes.selectBlock}\n onClick={!isDisabled ? () => setIsOpen(!isOpen) : undefined}\n {...addDataTestId(testId, 'select')}\n >\n <div className={clsx(classes.selectLabel, { [classes.active]: isNotEmpty(field) })}>\n {isNotEmpty(field) ? getValueView?.(field) : translates.displayedFields}\n </div>\n <div className={clsx(classes.chevronIcon, isOpen && classes.open)}>\n <Icon type=\"chevron-down\" />\n </div>\n </div>\n )}\n {/* Selector */}\n {isOpen && (\n <div className={classes.dropdown}>\n <FilterSelect\n tweakStyles={tweakSelectStyles}\n value={field}\n options={fields}\n getValueView={getValueView}\n getValueId={getValueId}\n getValueString={getValueString}\n localeKey={localeKey}\n locale={translates}\n onChange={handleFieldsChange}\n isSearchEnabled={isSelectSearchEnabled}\n hasClearButton={hasClearSelectButton}\n testId={getTestId(testId, 'dropdown')}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('FilterValueView', {\n text: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n count: {\n whiteSpace: 'pre',\n },\n});\n\nexport type IFilterValueViewStyles = ITweakStyles<typeof useStyles>;\n","import { useMemo } from 'react';\nimport { format } from 'date-fns';\nimport { isEmpty, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../../../types';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\nimport { defaultConvertFunction, getLocale } from '../../helpers';\nimport { IDateRangeConfigItem, IFilterWithDatesValue, IPeriod } from '../../types';\nimport type { IFilterWrapperProps } from '../FilterWrapper';\nimport { IFilterValueViewStyles, useStyles } from './FilterValueView.styles';\n\nexport interface IFilterValueView<Values extends Record<string, unknown>, Key extends keyof Values>\n extends Omit<IFilterWrapperProps<Values, Key>, 'filtersPaneRef' | 'tweakStyles' | 'onChange'>,\n ICommonProps<IFilterValueViewStyles> {}\n\nexport function FilterValueView<Values extends Record<string, unknown>, Key extends keyof Values>({\n value,\n filter,\n locale,\n localeKey,\n tweakStyles,\n}: IFilterValueView<Values, Key>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const translatesLocaleKey = filter.localeKey ?? localeKey;\n const translates = useMemo(\n () => getLocale(translatesLocaleKey, locale, filter.locale),\n [translatesLocaleKey, locale, filter.locale],\n );\n\n if (isEmpty(value)) {\n return <></>;\n }\n\n if (isNotEmpty(filter.getSelectedValueView)) {\n return <span className={classes.text}>{filter.getSelectedValueView(value)}</span>;\n }\n\n const isMultiple = filter.type === 'custom' && filter.valueViewType === 'multiple';\n const isRange = filter.type === 'custom' && filter.valueViewType === 'range';\n const isDate = filter.type === 'dateRange' || filter.type === 'dateRangeWithoutPeriod';\n\n const displayValue = (v: unknown): string => {\n if (!isNotEmpty(v)) {\n return '';\n }\n\n if (v instanceof Date) {\n return format(\n v,\n (filter as IDateRangeConfigItem<IFilterWithDatesValue>).dateFormat || DEFAULT_DATE_FORMAT,\n );\n }\n\n if (typeof v === 'object' && 'value' in v && isNotEmpty(v.value)) {\n return String(v.value);\n }\n\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n return String(v);\n }\n\n console.warn(\n `%c Ошибка конфигурации фильтра ${filter.name}. Невозможно отобразить значение фильтра. Задайте filterValueViewComponent или filterValueViewType.`,\n 'background: orange; color: black',\n );\n\n return '';\n };\n\n if (filter.type === 'select') {\n const getView = filter.getValueView ?? defaultConvertFunction;\n return <span className={classes.text}>{getView(value)}</span>;\n }\n\n if (filter.type === 'multiSelect') {\n const multiSelectValue = value as IMultiSelectListValues<any>;\n const getView = filter.getValueView ?? defaultConvertFunction;\n const { include } = multiSelectValue;\n\n return (\n <>\n {Array.isArray(include) && include.length > 0 && (\n <>\n <span className={classes.text}>{getView(include[0])}</span>\n <span className={classes.count}>\n {include.length > 1 && ` (+${include.length - 1})`}\n </span>\n </>\n )}\n </>\n );\n }\n\n if (filter.type === 'interval') {\n const intervalValue = value as unknown as number[];\n const intervalValueFrom = intervalValue[0];\n const intervalValueTo = intervalValue[1];\n\n const intervals: string[] = [];\n if (intervalValueFrom !== undefined) {\n intervals.push(`${translates.from.toLowerCase()} ${String(intervalValueFrom)}`);\n }\n if (intervalValueTo !== undefined) {\n intervals.push(`${translates.to.toLowerCase()} ${String(intervalValueTo)}`);\n }\n\n return <span className={classes.text}>{intervals.join(' ')}</span>;\n }\n\n if (isDate) {\n const { from, to, periodType, label } = value as unknown as IPeriod;\n const hasFrom = from !== undefined && from !== null;\n const hasTo = to !== undefined && to !== null;\n\n if (periodType !== 'CUSTOM') {\n return <span className={classes.text}>{displayValue(label)}</span>;\n }\n\n const range: string[] = [];\n if (hasFrom) {\n if (!hasTo) {\n range.push(translates.from.toLowerCase());\n }\n range.push(displayValue(from));\n }\n if (hasTo) {\n if (hasFrom) {\n range.push('—');\n } else {\n range.push(translates.to.toLowerCase());\n }\n range.push(displayValue(to));\n }\n\n return <span className={classes.text}>{range.join(' ')}</span>;\n }\n\n if (isMultiple) {\n const convertValue = filter.getSelectedValue ?? displayValue;\n\n return (\n <>\n {Array.isArray(value) && value.length > 0 && (\n <>\n <span className={classes.text}>{convertValue(value[0])}</span>\n <span className={classes.count}>{value.length > 1 && ` (+${value.length - 1})`}</span>\n </>\n )}\n </>\n );\n }\n\n if (isRange && Array.isArray(value)) {\n const rangeValue = value as unknown as number[];\n const rangeValueFrom = rangeValue[0];\n const rangeValueTo = rangeValue[1];\n\n const range: string[] = [];\n if (rangeValueFrom !== undefined) {\n range.push(`${translates.from.toLowerCase()} ${String(rangeValueFrom)}`);\n }\n if (rangeValueTo !== undefined) {\n range.push(`${translates.to.toLowerCase()} ${String(rangeValueTo)}`);\n }\n\n return <span className={classes.text}>{range.join(' ')}</span>;\n }\n\n return <span className={classes.text}>{displayValue(value)}</span>;\n}\n","import { isNotEmpty, isObject } from '@true-engineering/true-react-platform-helpers';\n\nexport const isContentNotEmpty = (value: unknown): boolean => {\n if (Array.isArray(value)) {\n return value.some(isContentNotEmpty);\n }\n if (isObject(value)) {\n return Object.values(value).some(isContentNotEmpty);\n }\n if (typeof value === 'boolean') {\n return value;\n }\n return isNotEmpty(value);\n};\n","import { animations, colors, createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { IWithPopupStyles } from '../../../WithPopup';\nimport type { IFilterValueViewStyles } from '../FilterValueView';\nimport { FILTER_HEIGHT } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterWrapper', {\n root: {\n position: 'relative',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, border-color',\n border: [1, 'solid', colors.BORDER_MAIN],\n borderRadius: 18,\n boxSizing: 'border-box',\n height: FILTER_HEIGHT,\n minWidth: 0,\n },\n\n item: {\n display: 'flex',\n padding: [0, 8, 0, 16],\n cursor: 'pointer',\n },\n\n booleanItem: {\n padding: 0,\n },\n\n name: {\n fontSize: 14,\n lineHeight: '34px',\n whiteSpace: 'nowrap',\n },\n\n boolean: {\n padding: [0, 16],\n },\n\n noValue: {},\n\n openNoValue: {},\n\n openWithValue: {},\n\n disabled: {\n '& > $item': {\n cursor: 'default',\n },\n },\n\n withValue: {},\n\n iconContainer: {\n width: 20,\n height: 20,\n transition: 'transform .2s ease-in-out',\n alignSelf: 'center',\n marginLeft: 6,\n marginRight: 4,\n flexShrink: 0,\n },\n\n chevronIcon: {},\n\n clearIcon: {},\n\n open: {\n transform: 'rotate(180deg)',\n },\n\n dropdown: {\n position: 'absolute',\n zIndex: 20,\n marginTop: 6,\n border: [1, colors.BORDER_MAIN, 'solid'],\n },\n\n left: {\n left: 0,\n },\n\n right: {\n right: 0,\n },\n\n value: {\n alignSelf: 'center',\n fontSize: 14,\n lineHeight: '16px',\n margin: [0, 2, 0, 8],\n fontWeight: 'bold',\n display: 'flex',\n minWidth: 0,\n },\n});\n\nexport type IFilterWrapperStyles = ITweakStyles<\n typeof useStyles,\n { tweakWithPopup: IWithPopupStyles; tweakValueView: IFilterValueViewStyles }\n>;\n","import { MouseEventHandler } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useMixedStyles, useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { WithPopup } from '../../../WithPopup';\nimport { ConfigItem, IFilterLocaleKey, IPartialFilterLocale } from '../../types';\nimport { Filter } from '../Filter';\nimport { FilterValueView } from '../FilterValueView';\nimport { isContentNotEmpty } from './helpers';\nimport { useStyles, IFilterWrapperStyles } from './FilterWrapper.styles';\n\nexport interface IFilterWrapperProps<\n Values extends Record<string, unknown>,\n Key extends keyof Values,\n> extends ICommonProps<IFilterWrapperStyles> {\n filter: ConfigItem<Values[Key]>;\n value?: Values[Key];\n isDisabled?: boolean;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n onChange: <V>(value: V) => void;\n}\n\nexport function FilterWrapper<Values extends Record<string, unknown>, Key extends keyof Values>({\n filter,\n value,\n isDisabled,\n locale,\n localeKey,\n data,\n testId,\n tweakStyles: baseTweakStyles,\n onChange,\n}: IFilterWrapperProps<Values, Key>): JSX.Element {\n const tweakStyles = useMixedStyles(baseTweakStyles, filter.tweakWrapperStyles);\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakWithPopupStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithPopup',\n currentComponentName: 'FilterWrapper',\n });\n\n const tweakFilterValueViewStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakValueView',\n currentComponentName: 'FilterWrapper',\n });\n\n if (filter.isInline) {\n return (\n <Filter\n value={value}\n filter={filter}\n localeKey={localeKey}\n locale={locale}\n onChange={onChange}\n testId={testId}\n />\n );\n }\n\n const isBoolean = filter.type === 'boolean';\n\n const handleLabelClick = () => {\n if (isBoolean) {\n onChange(!value);\n }\n };\n const handleClearIconClick: MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n onChange(undefined);\n };\n\n const hasValue = isContentNotEmpty(value);\n const hasClearIcon = (filter.isClearable ?? false) && hasValue;\n\n return (\n <WithPopup\n placement=\"bottom-start\"\n canBeFlipped\n isDisabled={isBoolean || isDisabled}\n tweakStyles={tweakWithPopupStyles}\n trigger={({ triggerProps: { isActive }, referenceProps }) => (\n <div\n className={clsx(classes.root, {\n [classes.noValue]: !hasValue,\n [classes.openNoValue]: isActive && !hasValue,\n [classes.withValue]: !isActive && hasValue,\n [classes.openWithValue]: isActive && hasValue,\n [classes.boolean]: isBoolean,\n [classes.disabled]: isDisabled,\n })}\n {...addDataAttributes(data, testId)}\n {...referenceProps}\n >\n <div\n onClick={handleLabelClick}\n className={clsx(classes.item, { [classes.booleanItem]: isBoolean })}\n >\n <div className={classes.name}>{filter.name}</div>\n {!isBoolean && isNotEmpty(value) && (\n <div className={classes.value}>\n <FilterValueView\n value={value}\n filter={filter}\n locale={locale}\n localeKey={localeKey}\n testId={getTestId(testId, 'value')}\n tweakStyles={tweakFilterValueViewStyles}\n />\n </div>\n )}\n {!isBoolean && !hasClearIcon && (\n <div\n className={clsx(classes.iconContainer, classes.chevronIcon, {\n [classes.open]: isActive,\n })}\n >\n <Icon type=\"chevron-down\" />\n </div>\n )}\n {hasClearIcon && (\n <div\n className={clsx(classes.iconContainer, classes.clearIcon)}\n onClick={handleClearIconClick}\n >\n <Icon type=\"close-large\" />\n </div>\n )}\n </div>\n </div>\n )}\n >\n {({ onClose }) => (\n <Filter\n value={value}\n filter={filter}\n locale={locale}\n localeKey={localeKey}\n onClose={onClose}\n onChange={onChange}\n testId={testId}\n />\n )}\n </WithPopup>\n );\n}\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 341.3\\\"><path fill=\\\"#FFF\\\" d=\\\"M0 0h512v341.3H0z\\\"/><g fill=\\\"#6DA544\\\"><path d=\\\"M0 0h512v48.8H0zM0 97.5h512v48.8H0zM0 195h512v48.8H0zM0 292.6h512v48.8H0z\\\"/></g><path fill=\\\"#D80027\\\" d=\\\"M0 0h256v146.3H0z\\\"/><path fill=\\\"#FFF\\\" d=\\\"m116.9 114.4-7.5-14.8V69.9L128 59l18.6 10.9v22.3l7.4-7.4 4.2 3-4.2 11.8-14.9 14.8z\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"82\\\" cy=\\\"82.8\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"90.8\\\" cy=\\\"61.7\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"106.6\\\" cy=\\\"46.2\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"128\\\" cy=\\\"40.8\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"149.4\\\" cy=\\\"46.2\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"165.2\\\" cy=\\\"61.7\\\" r=\\\"5.4\\\"/><circle fill=\\\"#FFF\\\" cx=\\\"174\\\" cy=\\\"82.8\\\" r=\\\"5.4\\\"/></svg>\"","import AB from './AB.svg?raw';\nimport OS from './OS.svg?raw';\n\nexport const customFlags = {\n /**\n * Абхазия\n */\n AB,\n /**\n * Южная осетия\n */\n OS,\n};\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 450 300\\\"><path fill=\\\"#FFF\\\" d=\\\"M0 0h450v300H0z\\\"/><path fill=\\\"red\\\" d=\\\"M0 100h450v200H0z\\\"/><path fill=\\\"#FFDF00\\\" d=\\\"M0 200h450v100H0z\\\"/></svg>\"","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Flag', {\n root: {\n display: 'flex',\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n // приходится хардкодить в компоненте, тк либа Flags выдает флаги с 2-3 пиксельным отступом снизу\n // если будет нужно, то можно вынести border на уровень пропсов\n border: [1, 'solid', colors.BORDER_MAIN],\n borderRadius: 2,\n },\n\n noFlag: {\n width: 20,\n color: colors.FONT_MEDIUM,\n },\n});\n\nexport type IFlagStyles = ITweakStyles<typeof useStyles>;\n","import { FC } from 'react';\nimport { hasFlag } from 'country-flag-icons';\nimport * as Flags from 'country-flag-icons/react/3x2';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { customFlags } from './customFlags';\nimport { IFlagStyles, useStyles } from './Flag.styles';\n\nexport interface IFlagProps extends Pick<ICommonProps<IFlagStyles>, 'tweakStyles'> {\n /** @default '' */\n countryCode?: string;\n}\n\nexport const Flag: FC<IFlagProps> = ({ countryCode = '', tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n const countryFlagKey = countryCode.toUpperCase();\n\n const hasFlagInLibrary = hasFlag(countryFlagKey);\n\n if (hasFlagInLibrary) {\n const FlagComponent = Flags[countryFlagKey as keyof typeof Flags];\n return (\n <div className={classes.root}>\n <FlagComponent />\n </div>\n );\n }\n\n const CustomFlag = customFlags[countryFlagKey as keyof typeof customFlags];\n\n if (CustomFlag !== undefined) {\n return <div className={classes.root} dangerouslySetInnerHTML={{ __html: CustomFlag }} />;\n }\n\n return (\n <div className={classes.noFlag}>\n <Icon type=\"minus\" />\n </div>\n );\n};\n","import { IFlexibleTableRenderElement, IFlexibleTableRenderMode } from './types';\n\nexport const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';\n\nexport const TableRenders = {\n table: { Root: 'table', Head: 'thead', Body: 'tbody', Row: 'tr', Header: 'th', Cell: 'td' },\n divs: { Root: 'div', Head: 'div', Body: 'div', Row: 'div', Header: 'div', Cell: 'div' },\n} satisfies Record<\n IFlexibleTableRenderMode,\n Record<IFlexibleTableRenderElement, keyof JSX.IntrinsicElements>\n>;\n","import { rgba } from '../../helpers';\nimport { colors, createThemedStyles, ITweakStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Skeleton', {\n root: {\n display: 'flex',\n width: '100%',\n height: '100%',\n backgroundColor: rgba(colors.GREY_DISABLED, 0.8),\n position: 'relative',\n borderRadius: 4,\n overflow: 'hidden',\n '-webkit-mask-image': '-webkit-radial-gradient(white, black)',\n\n '&::after': {\n content: '\"\"',\n animation: '$skeleton 1.6s linear 0.5s infinite',\n background: `linear-gradient(90deg, transparent, ${rgba(\n colors.GREY_BACKGROUND,\n 0.65,\n )}, transparent)`,\n position: 'absolute',\n transform: 'translateX(-100%)',\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n },\n },\n\n '@keyframes skeleton': {\n '0%': {\n transform: 'translateX(-100%)',\n },\n\n '50%': {\n transform: 'translateX(100%)',\n },\n\n '100%': {\n transform: 'translateX(100%)',\n },\n },\n});\n\nexport type ISkeletonStyles = ITweakStyles<typeof useStyles>;\n","import { CSSProperties, FC } from 'react';\nimport { ICommonProps } from '../../types';\nimport { ISkeletonStyles, useStyles } from './Skeleton.styles';\n\nexport interface ISkeletonProps extends Pick<ICommonProps<ISkeletonStyles>, 'tweakStyles'> {\n height?: CSSProperties['height'];\n}\n\nexport const Skeleton: FC<ISkeletonProps> = ({ height, tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n return <div className={classes.root} style={{ height }} />;\n};\n","import { format } from 'date-fns';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { DEFAULT_DATE_FORMAT } from './constants';\nimport { IFlexibleTableConfigType, IHeaderContent, ITableRow } from './types';\n\nexport const hasHorizontalScrollBar = (el: HTMLElement | null | undefined): boolean =>\n isNotEmpty(el) && el.scrollWidth !== el.clientWidth;\n\nexport const formatCellContent = <\n Values extends ITableRow,\n HeaderContent extends IHeaderContent<Values>,\n>(\n value: unknown,\n config?: IFlexibleTableConfigType<Values, HeaderContent>[keyof Values],\n): string =>\n value instanceof Date ? format(value, config?.dateFormat ?? DEFAULT_DATE_FORMAT) : String(value);\n","import { rgba } from '../../helpers';\nimport { colors, ITweakStyles, createThemedStyles, animations, helpers } from '../../theme';\nimport type { IFlexibleTableRowStyles } from './components';\n\nexport const STICKY_SHADOW_PADDING = 12;\n\nexport const useStyles = createThemedStyles('FlexibleTable', {\n flexibleTableWrapper: {},\n\n root: {\n width: '100%',\n position: 'relative',\n borderCollapse: 'separate',\n borderSpacing: 0,\n },\n\n scroll: {\n ...helpers.withScrollBar,\n /*\n Чтобы сделать таблицу на всю высоту проставьте\n height у родителя таблицы у себя в проекте.\n Например: height: calc(100vh -{высота шапки}px)\n */\n maxHeight: '100%',\n },\n\n head: {},\n\n body: {},\n\n loaderRow: {},\n\n loaderCell: {},\n\n loader: {\n position: 'sticky',\n left: 0,\n maxWidth: '100vw',\n height: 48,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n headerRow: {\n position: 'relative',\n verticalAlign: 'bottom',\n },\n\n header: {\n position: 'sticky',\n boxSizing: 'content-box',\n top: 0,\n zIndex: 10,\n fontSize: 12,\n fontWeight: 'normal',\n padding: [0, 7, 16, 7],\n },\n\n headerSticky: {\n zIndex: 20,\n left: 0,\n paddingLeft: 24,\n paddingRight: 12,\n\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n background: 'transparent',\n pointerEvents: 'none',\n zIndex: 1,\n transition: animations.defaultTransition,\n transitionProperty: 'box-shadow',\n\n '[data-scrolled] &': {\n boxShadow: '4px 0 4px rgba(0, 0, 0, 0.05)',\n },\n },\n\n '&::after': {\n content: '\"\"',\n display: 'block',\n width: STICKY_SHADOW_PADDING,\n height: '100%',\n position: 'absolute',\n left: '100%',\n top: 0,\n background: `linear-gradient(90deg, ${colors.CLASSIC_WHITE}, ${rgba(\n colors.CLASSIC_WHITE,\n 0,\n )})`,\n zIndex: 0,\n },\n },\n\n /** @deprecated удалить вместе с isFirstColumnSticky */\n headerSecond: {\n paddingLeft: STICKY_SHADOW_PADDING,\n },\n\n nothingFoundRow: {},\n\n nothingFound: {},\n});\n\nexport type IFlexibleTableStyles = ITweakStyles<\n typeof useStyles,\n { tweakTableRow: IFlexibleTableRowStyles }\n>;\n","import { getTransition } from '@true-engineering/true-react-platform-helpers';\nimport { ITweakStyles, createThemedStyles } from '../../../../theme';\nimport { STICKY_SHADOW_PADDING } from '../../FlexibleTable.styles';\n\nexport const useStyles = createThemedStyles('FlexibleTableCell', {\n root: {\n position: 'relative',\n boxSizing: 'content-box',\n padding: [14, 7],\n fontSize: 14,\n lineHeight: 1.42,\n zIndex: 5,\n verticalAlign: 'top',\n },\n\n sticky: {\n zIndex: 19,\n paddingLeft: 24,\n paddingRight: 12,\n left: 0,\n ...getTransition(['box-shadow']),\n\n '[data-scrolled] &': {\n boxShadow: '4px 0 4px rgba(0, 0, 0, 0.05)',\n },\n },\n\n /** @deprecated удалить вместе с isFirstColumnSticky */\n second: {\n paddingLeft: STICKY_SHADOW_PADDING,\n },\n\n loading: {},\n\n skeleton: {\n height: 21,\n },\n\n clickable: {\n cursor: 'pointer',\n },\n});\n\nexport type IFlexibleTableCellStyles = ITweakStyles<typeof useStyles>;\n","import { ReactNode, useCallback } from 'react';\nimport clsx from 'clsx';\nimport {\n applyAction,\n isNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../../../types';\nimport { Skeleton } from '../../../Skeleton';\nimport { TableRenders } from '../../constants';\nimport { formatCellContent } from '../../helpers';\nimport {\n ITableRow,\n IValueComponentProps,\n IFlexibleTableConfigType,\n IFlexibleTableRenderMode,\n IHeaderContent,\n} from '../../types';\nimport { useStyles, IFlexibleTableCellStyles } from './FlexibleTableCell.styles';\n\nexport interface IFlexibleTableCellProps<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n> extends Pick<ICommonProps<IFlexibleTableCellStyles>, 'tweakStyles'>,\n Pick<\n IValueComponentProps<Row, unknown>,\n 'isFocusedRow' | 'isActiveRow' | 'isNestedComponentExpanded' | 'isRowNestedComponentExpanded'\n > {\n row: Row;\n columnName: keyof Row;\n updateNestedComponent: (component: ReactNode, cellKey: keyof Row) => void;\n config: IFlexibleTableConfigType<Row, HeaderContent>;\n renderMode: IFlexibleTableRenderMode;\n isSecond?: boolean;\n isSticky?: boolean;\n isLoading?: boolean;\n}\n\nexport function FlexibleTableCell<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n>({\n row,\n columnName,\n config,\n renderMode,\n isSecond,\n isSticky: isOldSticky,\n isLoading,\n updateNestedComponent,\n tweakStyles,\n ...valueComponentProps\n}: IFlexibleTableCellProps<Row, HeaderContent>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const value = row[columnName];\n\n const {\n component = formatCellContent(value, config[columnName]),\n width,\n maxWidth,\n minWidth,\n left,\n right,\n position,\n cellAlign,\n cellVerticalAlign,\n shouldRenderDataId,\n shouldRenderComponent = isNotEmpty,\n onCellClick,\n } = config[columnName] ?? {};\n\n const isSticky = isOldSticky || position === 'sticky';\n const isClickable = !isLoading && isNotEmpty(onCellClick);\n\n const cellComponentProps: IValueComponentProps<Row, Row[keyof Row]> = {\n ...valueComponentProps,\n onSetNestedComponent: useCallback(\n (node) => updateNestedComponent(node, columnName),\n [columnName, updateNestedComponent],\n ),\n value,\n row,\n };\n\n const Table = TableRenders[renderMode];\n\n return (\n <Table.Cell\n className={clsx(classes.root, {\n [classes.sticky]: isSticky,\n [classes.second]: isSecond,\n [classes.loading]: isLoading,\n [classes.clickable]: isClickable,\n })}\n style={{\n textAlign: cellAlign,\n position: isSticky ? 'sticky' : position,\n width,\n maxWidth,\n minWidth,\n right,\n left,\n verticalAlign: cellVerticalAlign,\n }}\n onClick={isClickable ? (event) => onCellClick?.(event, cellComponentProps) : undefined}\n {...addDataAttributes({ id: shouldRenderDataId ? columnName : undefined })}\n >\n {isLoading ? (\n <div className={classes.skeleton}>\n <Skeleton />\n </div>\n ) : (\n applyAction(shouldRenderComponent, value, row, columnName) &&\n applyAction(component, cellComponentProps)\n )}\n </Table.Cell>\n );\n}\n","import { ITweakStyles, createThemedStyles } from '../../../../theme';\nimport { IFlexibleTableCellStyles } from '../FlexibleTableCell';\n\nexport const useStyles = createThemedStyles('FlexibleTableRow', {\n root: {\n position: 'relative',\n },\n\n active: {},\n\n editable: {\n cursor: 'pointer',\n },\n\n clickable: {\n cursor: 'pointer',\n },\n\n nestedComponent: {},\n});\n\nexport type IFlexibleTableRowStyles = ITweakStyles<\n typeof useStyles,\n { tweakTableCell: IFlexibleTableCellStyles }\n>;\n","import { ReactNode, useState, MouseEvent, RefCallback, useCallback } from 'react';\nimport clsx from 'clsx';\nimport {\n isEmpty,\n isNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { genericMemo } from '../../../../helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { IDataAttributes, ITweakStylesProps } from '../../../../types';\nimport { TableRenders } from '../../constants';\nimport {\n ITableRow,\n IFlexibleTableConfigType,\n IFlexibleTableRenderMode,\n INestedComponent,\n IHeaderContent,\n} from '../../types';\nimport { FlexibleTableCell } from '../FlexibleTableCell';\nimport { useStyles, IFlexibleTableRowStyles } from './FlexibleTableRow.styles';\n\nexport interface IFlexibleTableRowProps<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n UniqueField extends keyof Row,\n> extends ITweakStylesProps<IFlexibleTableRowStyles> {\n item: Row;\n uniqueField?: UniqueField;\n renderMode: IFlexibleTableRenderMode;\n /** @default false */\n isActive?: boolean;\n /** @default false */\n isFocusable?: boolean;\n /** @deprecated Use {@position}\n * @default false */\n isFirstColumnSticky?: boolean;\n /** @default false */\n isLoading?: boolean;\n config: IFlexibleTableConfigType<Row, HeaderContent>;\n columns: Array<keyof Row & string>;\n rowAttributes?: Array<keyof Row>;\n /** @default false */\n isExpandableRowComponentInitiallyOpen?: boolean;\n rowRef?: RefCallback<HTMLTableRowElement>;\n /** Возвращает React-элемент, который отрисуется под строкой при нажатии на неё */\n expandableRowComponent?: (item: Row, isOpen: boolean, close: () => void) => ReactNode;\n onRowHover?: (id?: Row[UniqueField]) => void;\n onRowClick?: (id: Row[UniqueField]) => void;\n}\n\nexport const FlexibleTableRow = genericMemo(function FlexibleTableRow<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n UniqueField extends keyof Row,\n>({\n item,\n config,\n columns,\n uniqueField,\n renderMode,\n isActive = false,\n isFocusable = false,\n isFirstColumnSticky = false,\n isLoading = false,\n rowAttributes,\n isExpandableRowComponentInitiallyOpen = false,\n rowRef,\n tweakStyles,\n expandableRowComponent,\n onRowHover,\n onRowClick,\n}: IFlexibleTableRowProps<Row, HeaderContent, UniqueField>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakTableCellStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTableCell',\n currentComponentName: 'FlexibleTableRow',\n });\n\n const [isFocused, setFocused] = useState(false);\n const [nestedComponent, setNestedComponent] = useState<INestedComponent<keyof Row>>(() => ({\n isOpen: isExpandableRowComponentInitiallyOpen,\n }));\n\n const isEditable = !isLoading && (isNotEmpty(onRowClick) || isNotEmpty(onRowHover));\n const isClickable = !isLoading && (isNotEmpty(onRowClick) || isNotEmpty(expandableRowComponent));\n\n const { isOpen: isNestedComponentExpanded, cellKey: nestedComponentCellKey } = nestedComponent;\n\n // уникальная разработка, позволяющая прокидывать data-атрибуты в <tr>\n // например: rowAttributes={['id']} => <tr data-id=\"x\" />\n const rowData: IDataAttributes = Object.fromEntries(\n rowAttributes?.map((attribute) => [attribute, item[attribute]]) ?? [],\n );\n\n const handleMouseEnter = (event: MouseEvent) => {\n if (isNotEmpty(uniqueField) && isNotEmpty(onRowHover)) {\n event.stopPropagation();\n onRowHover(item[uniqueField]);\n }\n if (isFocusable) {\n setFocused(true);\n }\n };\n\n const handleMouseLeave = () => {\n onRowHover?.(undefined);\n if (isFocusable) {\n setFocused(false);\n }\n };\n\n const closeNestedComponent = () => {\n setNestedComponent({ isOpen: false });\n };\n\n const updateNestedComponent = useCallback((component: ReactNode, cellKey: keyof Row) => {\n if (isEmpty(component)) {\n closeNestedComponent();\n } else {\n setNestedComponent({ isOpen: true, component, cellKey });\n }\n }, []);\n\n const handleRowClick = () => {\n if (isNotEmpty(uniqueField)) {\n onRowClick?.(item[uniqueField]);\n }\n if (isEmpty(expandableRowComponent)) {\n return;\n }\n\n if (!isNestedComponentExpanded) {\n setNestedComponent({ isOpen: true });\n } else if (isEmpty(nestedComponentCellKey)) {\n closeNestedComponent();\n }\n };\n\n const Table = TableRenders[renderMode];\n\n return (\n <>\n <Table.Row\n ref={rowRef}\n className={clsx(classes.root, {\n [classes.active]: isActive,\n [classes.editable]: isEditable,\n [classes.clickable]: isClickable,\n })}\n {...(!isLoading && {\n onClick: handleRowClick,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n })}\n {...addDataAttributes({\n ...rowData,\n active: isActive ? true : undefined,\n editable: isEditable ? true : undefined,\n isExpandableComponentActive: isNestedComponentExpanded ? true : undefined,\n })}\n >\n {columns.map((key, i) => (\n <FlexibleTableCell\n key={key}\n isSticky={isFirstColumnSticky && i === 0}\n isSecond={isFirstColumnSticky && i === 1}\n isLoading={isLoading}\n row={item}\n config={config}\n columnName={key}\n tweakStyles={tweakTableCellStyles}\n renderMode={renderMode}\n isFocusedRow={isFocused}\n isActiveRow={isActive}\n isNestedComponentExpanded={isNestedComponentExpanded && nestedComponentCellKey === key}\n isRowNestedComponentExpanded={\n isNestedComponentExpanded && isEmpty(nestedComponentCellKey)\n }\n updateNestedComponent={updateNestedComponent}\n />\n ))}\n </Table.Row>\n\n {isNestedComponentExpanded && (\n <Table.Row className={classes.root}>\n <Table.Cell className={classes.nestedComponent} colSpan={columns.length}>\n {nestedComponent.component ??\n expandableRowComponent?.(item, true, closeNestedComponent)}\n </Table.Cell>\n </Table.Row>\n )}\n </>\n );\n});\n","import { createThemedStyles, ITweakStyles } from '../../../../theme';\nimport { ICheckboxStyles } from '../../../Checkbox';\n\nexport const useStyles = createThemedStyles('DocActions', {\n docActions: {\n display: 'grid',\n alignItems: 'center',\n gridTemplateColumns: 'max-content 1fr',\n },\n\n neutral: {},\n\n inverse: {},\n\n counterWrapper: {},\n\n title: {},\n\n actionsWrapper: {\n justifySelf: 'end',\n },\n});\n\nexport type IDocActionsStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakCheckbox: ICheckboxStyles;\n }\n>;\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Checkbox, ICheckboxProps } from '../../../Checkbox';\nimport { IDocActionsView } from './types';\nimport { IDocActionsStyles, useStyles } from './DocActions.styles';\n\nexport interface IDocActionsProps\n extends Omit<ICheckboxProps<never>, 'tweakStyles'>,\n ICommonProps<IDocActionsStyles> {\n title: string;\n /** @default 'neutral' */\n view?: IDocActionsView;\n children: ReactNode;\n}\n\nexport const DocActions: FC<IDocActionsProps> = ({\n title,\n view = 'neutral',\n children,\n tweakStyles,\n ...checkBoxProps\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCheckboxStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakCheckbox',\n currentComponentName: 'DocActions',\n });\n\n return (\n <div className={clsx(classes.docActions, classes[view])}>\n <div className={classes.counterWrapper}>\n <Checkbox tweakStyles={tweakCheckboxStyles} {...checkBoxProps}>\n <span className={classes.title}>{title}</span>\n </Checkbox>\n </div>\n <div className={classes.actionsWrapper}>{children}</div>\n </div>\n );\n};\n","import { createUseStyles } from 'react-jss';\nimport { animations, ITweakStyles } from '../../theme';\nimport { IDocActionsStyles } from './components';\n\nexport const useStyles = createUseStyles({\n ...animations.slideUp,\n});\n\nexport type IFloatDocActionsStyles = ITweakStyles<\n typeof useStyles,\n { tweakDocActions: IDocActionsStyles }\n>;\n","import { animations, colors, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { IInputStyles } from '../Input';\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n controlWrapper: {\n '--increment-buttons-width': '36px',\n '--increment-buttons-gap': '1px',\n '--increment-buttons-margin': '1px',\n '--increment-button-icon-size': '16px',\n },\n },\n};\n\nexport const useStyles = createThemedStyles('IncrementInput', {\n buttons: {\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100% - var(--increment-buttons-margin) * 2)',\n margin: 'var(--increment-buttons-margin)',\n gap: 'var(--increment-buttons-gap)',\n flexShrink: 0,\n order: 1000, // сдвигаем кнопки на самый конец\n\n zIndex: dimensions.Z_INDEX.CONTROL_FOCUS + 1,\n },\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 'var(--increment-buttons-width)',\n flexGrow: 1,\n\n cursor: 'pointer',\n border: 'none',\n outline: 'none',\n color: colors.FONT_MEDIUM,\n backgroundColor: colors.GREY_BACKGROUND,\n transition: animations.defaultTransition,\n transitionProperty: 'background-color, color',\n\n '&:hover, &:focus': {\n backgroundColor: colors.GREY_HOVER,\n },\n\n '&:active': {\n backgroundColor: colors.GREY_ACTIVE,\n },\n },\n\n disabledButton: {\n cursor: 'default',\n color: colors.FONT_DISABLED,\n backgroundColor: colors.CLASSIC_WHITE,\n\n '&:hover': {\n backgroundColor: colors.CLASSIC_WHITE,\n },\n },\n\n errorButton: {},\n\n icon: {\n width: 'var(--increment-button-icon-size)',\n height: 'var(--increment-button-icon-size)',\n },\n});\n\nexport type IIncrementInputStyles = ITweakStyles<typeof useStyles, { tweakInput: IInputStyles }>;\n","import { rgba } from '../../helpers';\nimport { colors, dimensions, ITweakStyles, createThemedStyles } from '../../theme';\nimport { IIconButtonStyles } from '../IconButton';\n\nconst VERTICAL_OVERLAY_PADDING = 50;\n\nconst MODAL_HORIZONTAL_PADDING_L = 40;\nconst MODAL_HORIZONTAL_PADDING_M = 36;\nconst MODAL_HORIZONTAL_PADDING_S = 26;\n\nconst MODAL_CLOSE_BUTTON_SIZE = 40;\nconst MODAL_CLOSE_BUTTON_ICON_SIZE = 30;\n\nexport const useStyles = createThemedStyles('Modal', {\n root: {},\n\n fixedPosition: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n zIndex: 999,\n overflowX: 'hidden',\n '-webkit-overflow-scrolling': 'touch',\n\n '& $innerOverlay': {\n display: 'flex',\n width: '100%',\n minHeight: '100%',\n boxSizing: 'border-box',\n },\n },\n\n innerOverlay: {},\n\n sideBar: {\n '& $modal': {\n borderRadius: 0,\n margin: 0,\n minHeight: '100%',\n },\n },\n\n 'position-static': {},\n\n 'position-left': {},\n\n 'position-right': {\n justifyContent: 'flex-end',\n },\n\n 'position-center': {\n padding: [VERTICAL_OVERLAY_PADDING, 30],\n },\n\n overlay: {\n backgroundColor: rgba(colors.BORDER_MAIN, 0.5),\n },\n\n modal: {\n backgroundColor: colors.CLASSIC_WHITE,\n borderRadius: dimensions.BORDER_RADIUS_LARGE,\n boxShadow: `0 8px 32px -8px ${rgba(colors.FONT_MAIN, 0.24)}, 0 -2px 6px 0 ${rgba(\n colors.FONT_MAIN,\n 0.04,\n )}, 0 0 1px 0 ${rgba(colors.FONT_MAIN, 0.15)}`,\n margin: 'auto',\n position: 'relative',\n // do not override this\n maxWidth: '100%',\n },\n\n title: {\n fontSize: 28,\n lineHeight: 1.3,\n marginTop: 0,\n },\n\n titleWithCloseButton: {\n paddingRight: 32,\n },\n\n close: {\n position: 'absolute',\n },\n\n content: {},\n\n footer: {\n display: 'flex',\n gap: 12,\n },\n\n stickyFooterWrapper: {\n position: 'sticky',\n bottom: 0,\n marginTop: 'auto',\n zIndex: 1,\n },\n\n stickyFooter: {\n borderTop: [1, 'solid', colors.BORDER_LIGHT],\n padding: [16, 40],\n borderBottomLeftRadius: dimensions.BORDER_RADIUS_LARGE,\n borderBottomRightRadius: dimensions.BORDER_RADIUS_LARGE,\n backgroundColor: colors.CLASSIC_WHITE,\n },\n\n 'buttons-left': {\n justifyContent: 'flex-start',\n },\n\n 'buttons-center': {\n justifyContent: 'center',\n },\n\n 'buttons-right': {\n justifyContent: 'flex-end',\n },\n\n withoutFooter: {},\n\n withStickyFooter: {\n display: 'flex',\n flexDirection: 'column',\n\n '& $content': {\n position: 'relative',\n zIndex: 1,\n },\n },\n\n footerWrapper: {},\n\n l: {\n '& $modal': {\n padding: [36, MODAL_HORIZONTAL_PADDING_L],\n fontSize: 16,\n width: 560,\n\n '&$withStickyFooter': {\n paddingBottom: 0,\n },\n },\n\n '& $withoutFooter': {\n paddingBottom: 54,\n },\n\n '& $title': {\n fontSize: 28,\n marginBottom: 32,\n },\n\n '& $close': {\n right: 27,\n top: 22,\n },\n\n '& $footerWrapper': {\n paddingTop: 40,\n },\n\n '& $stickyFooter': {\n paddingLeft: MODAL_HORIZONTAL_PADDING_L,\n paddingRight: MODAL_HORIZONTAL_PADDING_L,\n marginLeft: -MODAL_HORIZONTAL_PADDING_L,\n marginRight: -MODAL_HORIZONTAL_PADDING_L,\n },\n },\n\n m: {\n '& $modal': {\n padding: [32, MODAL_HORIZONTAL_PADDING_M],\n width: 480,\n\n '&$withStickyFooter': {\n paddingBottom: 0,\n },\n },\n\n '& $withoutFooter': {\n paddingBottom: 48,\n },\n\n '& $title': {\n fontSize: 24,\n marginBottom: 28,\n },\n\n '& $close': {\n right: 23,\n top: 18,\n },\n\n '& $footerWrapper': {\n paddingTop: 36,\n },\n\n '& $stickyFooter': {\n paddingLeft: MODAL_HORIZONTAL_PADDING_M,\n paddingRight: MODAL_HORIZONTAL_PADDING_M,\n marginLeft: -MODAL_HORIZONTAL_PADDING_M,\n marginRight: -MODAL_HORIZONTAL_PADDING_M,\n },\n },\n\n s: {\n '& $modal': {\n padding: [24, MODAL_HORIZONTAL_PADDING_S],\n fontSize: 14,\n width: 360,\n\n '&$withStickyFooter': {\n paddingBottom: 0,\n },\n },\n\n '& $withoutFooter': {\n paddingBottom: 40,\n },\n\n '& $title': {\n fontSize: 20,\n marginBottom: 15,\n },\n\n '& $close': {\n right: 14,\n top: 11,\n },\n\n '& $footerWrapper': {\n paddingTop: 28,\n },\n\n '& $stickyFooter': {\n paddingLeft: MODAL_HORIZONTAL_PADDING_S,\n paddingRight: MODAL_HORIZONTAL_PADDING_S,\n marginLeft: -MODAL_HORIZONTAL_PADDING_S,\n marginRight: -MODAL_HORIZONTAL_PADDING_S,\n },\n },\n\n modalWrapper: {\n display: 'flex',\n width: '100%',\n },\n\n // TODO: вынести анимацию ?\n /* ----------- SHOW / HIDE ANIMATION ----------- */\n animationEnd: {\n '& $modal': {\n opacity: 0,\n },\n\n '& $position-center $modal': {\n transform: 'translateY(35px)',\n },\n\n '& $position-right $modal': {\n transform: 'translateX(35px)',\n },\n\n '& $position-left $modal': {\n transform: 'translateX(-35px)',\n },\n\n '& $overlay': {\n opacity: 0,\n },\n },\n\n animationStart: {\n '& $modal': {\n opacity: 1,\n transition: '0.15s ease',\n transitionProperty: 'transform, opacity',\n },\n\n '& $position-center $modal': {\n transform: 'translateY(0)',\n },\n\n '& $position-right $modal': {\n transform: 'translateX(0)',\n },\n\n '& $position-left $modal': {\n transform: 'translateX(0)',\n },\n\n '& $overlay': {\n opacity: 1,\n transition: 'opacity 0.2s ease',\n },\n },\n\n 'modal-enter': { extend: 'animationEnd' },\n 'modal-enter-active': { extend: 'animationStart' },\n 'modal-exit': { extend: 'animationStart' },\n 'modal-exit-active': { extend: 'animationEnd' },\n});\n\nexport const closeButtonStyles: IIconButtonStyles = {\n m: {\n width: MODAL_CLOSE_BUTTON_SIZE,\n height: MODAL_CLOSE_BUTTON_SIZE,\n },\n\n icon: {\n width: MODAL_CLOSE_BUTTON_ICON_SIZE,\n height: MODAL_CLOSE_BUTTON_ICON_SIZE,\n },\n};\n\nexport type IModalStyles = ITweakStyles<typeof useStyles, { tweakCloseButton: IIconButtonStyles }>;\n","import { rgba } from '../../helpers';\nimport { colors, ITweakStyles, createThemedStyles, animations } from '../../theme';\nimport { IListStyles } from '../List';\n\nexport const useStyles = createThemedStyles('MoreMenu', {\n root: {\n position: 'relative',\n },\n\n hasCircle: {},\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n backgroundColor: 'transparent',\n color: colors.FONT_MEDIUM,\n padding: 0,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n\n '&$hasCircle': {\n backgroundColor: rgba(colors.GREY_HOVER, 0.5),\n },\n\n '&:hover': {\n backgroundColor: rgba(colors.BORDER_MAIN, 0.5),\n },\n\n '&:focus': {\n backgroundColor: rgba(colors.FONT_DISABLED, 0.2),\n },\n\n '&:active, &$active': {\n backgroundColor: rgba(colors.FONT_DISABLED, 0.5),\n },\n\n '&$disabled': {\n backgroundColor: rgba(colors.GREY_FOCUS, 0.5),\n color: colors.BORDER_MAIN,\n },\n },\n\n icon: {\n width: 30,\n height: 30,\n },\n\n active: {},\n\n disabled: {\n cursor: 'default',\n },\n\n menu: {\n position: 'absolute',\n zIndex: 5,\n top: '100%',\n right: 0,\n marginTop: 6,\n },\n});\n\nexport type IMoreMenuStyles = ITweakStyles<typeof useStyles, { tweakList: IListStyles }>;\n","import { ITweakStyles, createThemedStyles } from '../../../../theme';\n\nexport const useStyles = createThemedStyles('MultiSelectInput', {\n root: {\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'column',\n height: '100%',\n padding: [0, 12],\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n\n placeholder: {\n fontSize: 16,\n userSelect: 'none',\n },\n\n placeholderSmall: {\n fontSize: 12,\n marginBottom: 2,\n position: 'relative',\n },\n\n values: {\n width: '100%',\n },\n\n value: {\n width: 'calc(100% - 64px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n\n amount: {\n boxSizing: 'border-box',\n position: 'absolute',\n top: 'calc(50% - 11px)',\n right: 44,\n height: 22,\n minWidth: 22,\n fontSize: 14,\n lineHeight: '16px',\n textAlign: 'center',\n padding: [2, 4],\n },\n\n indicator: {\n position: 'absolute',\n top: 0,\n right: 0,\n height: '100%',\n width: 36,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n arrow: {\n width: 20,\n height: 20,\n transition: 'transform .2s ease',\n },\n\n arrowUp: {\n transform: 'rotate(180deg)',\n },\n\n indicatorDisabled: {},\n});\n\nexport type IMultiSelectInputStyles = ITweakStyles<typeof useStyles>;\n","import { ReactElement } from 'react';\nimport clsx from 'clsx';\nimport { ICommonProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { useStyles, IMultiSelectInputStyles } from './MultiSelectInput.styles';\n\nexport interface IMultiSelectInputProps<Value>\n extends Pick<ICommonProps<IMultiSelectInputStyles>, 'tweakStyles'> {\n value?: IMultiSelectListValues<Value>;\n isOpen: boolean;\n isDisabled: boolean;\n placeholder: string;\n onToggle: (state: boolean) => void;\n}\n\nexport function MultiSelectInput<Value>({\n value: v,\n isOpen,\n isDisabled = false,\n placeholder = '',\n tweakStyles,\n onToggle,\n}: IMultiSelectInputProps<Value>): ReactElement | null {\n const classes = useStyles({ theme: tweakStyles });\n\n const value = v?.include;\n\n return (\n <div className={classes.root} onClick={() => !isDisabled && onToggle(!isOpen)}>\n {/* Placeholder */}\n {(value === undefined || (value && value.length === 0)) && (\n <div className={classes.placeholder}>{placeholder}</div>\n )}\n {/* Selected options */}\n {value !== undefined && value.length > 0 && (\n <>\n <div className={clsx(classes.placeholder, classes.placeholderSmall)}>{placeholder}</div>\n <div className={classes.values}>\n <div className={classes.value}>{value.join(', ')}</div>\n <div className={classes.amount}>{value.length}</div>\n </div>\n </>\n )}\n {/* Chevron */}\n <div className={clsx(classes.indicator, isDisabled && classes.indicatorDisabled)}>\n <div className={clsx(classes.arrow, isOpen && classes.arrowUp)}>\n <Icon type=\"chevron-down\" />\n </div>\n </div>\n </div>\n );\n}\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { IMultiSelectListStyles } from '../MultiSelectList';\n\nexport const useStyles = createThemedStyles('MultiSelect', {\n root: {\n position: 'relative',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%',\n cursor: 'pointer',\n fontSize: 16,\n },\n\n required: {\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: -12,\n top: '50%',\n transform: 'translate(0, -50%)',\n width: 6,\n height: 6,\n borderRadius: '50%',\n },\n },\n\n disabled: {\n cursor: 'default',\n },\n\n listContainer: {\n position: 'absolute',\n top: 'calc(100% + 4px)',\n left: -1,\n right: -1,\n zIndex: 2,\n },\n\n invalid: {},\n\n open: {},\n\n full: {},\n\n left: {},\n\n right: {},\n});\n\nexport const multiSelectListStyles: IMultiSelectListStyles = {\n root: {\n width: '100%',\n },\n};\n\nexport type IMultiSelectStyles = ITweakStyles<\n typeof useStyles,\n { tweakMultiSelectList: IMultiSelectListStyles }\n>;\n","import { ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('Notification', {\n root: {\n display: 'flex',\n },\n\n inline: {\n width: 'fit-content',\n },\n\n icon: {\n width: 20,\n height: 20,\n marginRight: 16,\n flexShrink: 0,\n },\n\n body: {\n flexGrow: 1,\n },\n\n title: {\n display: 'block',\n fontWeight: 'bold',\n },\n\n text: {\n display: 'block',\n },\n\n content: {},\n\n s: {},\n\n m: {},\n\n l: {},\n\n withText: {},\n\n withTitle: {},\n\n error: {},\n\n info: {},\n\n warning: {},\n\n ok: {},\n\n 'not-ok': {},\n\n custom: {},\n});\n\nexport type INotificationStyles = ITweakStyles<typeof useStyles>;\n","import { colors, createThemedStyles, dimensions, helpers, ITweakStyles } from '../../../../theme';\nimport { IInputStyles } from '../../../Input';\n\nconst ROW_HEIGHT = 40;\nconst LIST_PADDING = 10;\n\nexport const useStyles = createThemedStyles('PhoneInputCountryList', {\n root: {\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.CLASSIC_WHITE,\n border: [1, 'solid', colors.BORDER_MAIN],\n boxShadow: '1px 2px 10px rgba(0, 0, 0, 0.25)',\n overflow: 'hidden',\n },\n\n searchContainer: {\n width: '100%',\n height: dimensions.CONTROL.HEIGHT,\n display: 'flex',\n alignItems: 'center',\n boxSizing: 'border-box',\n padding: [0, 8, 0, 16],\n borderBottom: [1, 'solid', colors.BORDER_MAIN],\n },\n\n icon: {\n width: 20,\n height: 20,\n },\n\n searchIcon: {\n extend: 'icon',\n color: colors.FONT_LABEL,\n flexShrink: 0,\n },\n\n flagList: {\n maxHeight: ROW_HEIGHT * 6 + 2 * LIST_PADDING,\n padding: [LIST_PADDING, 0],\n ...helpers.withScrollBar,\n },\n\n listItem: {\n height: ROW_HEIGHT,\n padding: [12, 16],\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n fontSize: 14,\n lineHeight: '20px',\n letterSpacing: 0.15,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n },\n\n selectedCountry: {\n backgroundColor: colors.GREY_BACKGROUND,\n },\n\n activeCountry: {\n backgroundColor: colors.GREY_FOCUS,\n },\n\n flag: {\n width: 22,\n height: 16,\n flexShrink: 0,\n },\n\n countryName: {\n color: colors.FONT_MAIN,\n overflowX: 'hidden',\n textOverflow: 'ellipsis',\n margin: [0, 8, 0, 12],\n },\n\n dialCode: {\n color: colors.GREY_ACTIVE,\n },\n\n emptyResult: {\n color: colors.FONT_LABEL,\n padding: [6, 16],\n },\n});\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n controlWrapper: {\n border: 'none',\n height: 'calc(var(--control-height) - 2px)',\n },\n },\n\n input: {\n fontSize: 14,\n lineHeight: '20px',\n letterSpacing: 0.15,\n },\n};\n\nexport type IPhoneInputCountryListStyles = ITweakStyles<\n typeof useStyles,\n { tweakInput: IInputStyles }\n>;\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport clsx from 'clsx';\nimport { phoneInfo } from '../../../../constants';\nimport {\n checkSearchStringInCountry,\n findCountryIndexByCode,\n getCountryTextByLocale,\n sortCountriesByLocale,\n} from '../../../../helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Flag } from '../../../Flag';\nimport { Icon } from '../../../Icon';\nimport { IChangeInputEvent, Input } from '../../../Input';\nimport { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';\nimport { IPhoneInfo } from '../../types';\nimport {\n inputStyles,\n IPhoneInputCountryListStyles,\n useStyles,\n} from './PhoneInputCountryList.styles';\n\nexport interface IPhoneInputCountryListProps\n extends Pick<ICommonProps<IPhoneInputCountryListStyles>, 'tweakStyles'> {\n selectedCountryCode?: string;\n locale: string;\n placeholder: string;\n noMatchesLabel: string;\n closeList: () => void;\n onChange: (country: IPhoneInfo, event: IChangeInputEvent | KeyboardEvent) => void;\n}\n\nexport const PhoneInputCountryList: FC<IPhoneInputCountryListProps> = ({\n locale,\n placeholder,\n selectedCountryCode,\n closeList,\n noMatchesLabel,\n onChange,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'PhoneInputCountryList',\n });\n\n const sortedCountries = useMemo(() => sortCountriesByLocale(phoneInfo, locale), [locale]);\n\n const selectedCountryIdx = findCountryIndexByCode(selectedCountryCode, sortedCountries);\n\n const [searchValue, setSearchValue] = useState('');\n const [countriesList, setCountriesList] = useState(sortedCountries);\n const [keyCursorOn, setKeyCursorOn] = useState(\n selectedCountryIdx !== -1 ? selectedCountryIdx : 0,\n );\n\n const handleSearchChange = (newSearchValue: string) => {\n const newCountriesList = sortedCountries.filter((country) =>\n checkSearchStringInCountry(country, newSearchValue),\n );\n\n const defaultKeyCursorOn = newCountriesList.length > 0 ? 0 : -1;\n const newSelectedCountryIdx = findCountryIndexByCode(selectedCountryCode, newCountriesList);\n\n setCountriesList(newCountriesList);\n setSearchValue(newSearchValue);\n setKeyCursorOn(newSelectedCountryIdx !== -1 ? newSelectedCountryIdx : defaultKeyCursorOn);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const lastListItemIdx = countriesList.length - 1;\n\n if (event.code === 'Escape' || event.code === 'Tab') {\n closeList();\n }\n\n if (event.code === 'ArrowDown' && lastListItemIdx !== -1) {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n setKeyCursorOn(keyCursorOn < lastListItemIdx ? keyCursorOn + 1 : 0);\n }\n\n if (event.code === 'ArrowUp' && lastListItemIdx !== -1) {\n // чтобы убрать перемещение курсора в инпуте\n event.preventDefault();\n setKeyCursorOn(keyCursorOn > 0 ? keyCursorOn - 1 : lastListItemIdx);\n }\n\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n if (countriesList.length === 0) {\n closeList();\n } else if (keyCursorOn >= 0) {\n onChange(countriesList[keyCursorOn], event);\n }\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n });\n\n return (\n <div className={classes.root}>\n <div className={classes.searchContainer}>\n <div className={classes.searchIcon}>\n <Icon type=\"search\" />\n </div>\n <Input\n value={searchValue}\n placeholder={placeholder}\n onChange={handleSearchChange}\n tweakStyles={tweakInputStyles}\n isClearable\n shouldFocusOnMount\n />\n </div>\n <div className={classes.flagList}>\n {countriesList.map((country, index) => (\n <ScrollIntoViewIfNeeded\n key={country.countryCode}\n active={keyCursorOn === index}\n options={{ block: 'nearest' }}\n >\n <div\n className={clsx(classes.listItem, {\n [classes.activeCountry]: selectedCountryIdx === index,\n [classes.selectedCountry]: keyCursorOn === index,\n })}\n onMouseEnter={() => setKeyCursorOn(index)}\n onClick={(e) => onChange(country, e)}\n >\n <div className={classes.flag}>\n <Flag countryCode={country.countryCode} />\n </div>\n <div className={classes.countryName}>{getCountryTextByLocale(country, locale)}</div>\n <div className={classes.dialCode}>{`+${country.dialCode}`}</div>\n </div>\n </ScrollIntoViewIfNeeded>\n ))}\n {countriesList.length === 0 && <div className={classes.emptyResult}>{noMatchesLabel}</div>}\n </div>\n </div>\n );\n};\n","import { IPhoneValue } from './types';\n\nexport const DEFAULT_VALUE: IPhoneValue = { phoneNumber: '', dialCode: '' };\n","import { colors, createThemedStyles, dimensions, ITweakStyles } from '../../theme';\nimport { IInputStyles } from '../Input';\nimport { IPhoneInputCountryListStyles } from './components';\n\nconst COUNTRY_SELECT_WIDTH = 80;\n\nexport const useStyles = createThemedStyles('PhoneInput', {\n root: {\n width: '100%',\n position: 'relative',\n boxSizing: 'border-box',\n zIndex: 0,\n },\n\n countrySelectContainer: {\n position: 'absolute',\n left: 1,\n top: 1,\n width: COUNTRY_SELECT_WIDTH,\n height: dimensions.CONTROL.HEIGHT - 2,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: ['solid', 1, colors.BORDER_MAIN],\n transition: 'border-color 0.2s ease-in',\n cursor: 'pointer',\n zIndex: dimensions.Z_INDEX.CONTROL_FOCUS + 1,\n },\n\n disabledCountrySelect: {\n cursor: 'default',\n },\n\n flag: {\n width: 22,\n height: 16,\n },\n\n arrow: {\n width: 20,\n color: colors.GREY_ACTIVE,\n marginLeft: 8,\n transition: 'transform .2s ease',\n },\n\n up: {\n transform: 'rotate(180deg)',\n },\n\n invalidArrow: {\n color: colors.RED_WARNING,\n },\n\n focusedBorder: {},\n\n invalidBorder: {\n borderColor: colors.RED_WARNING,\n },\n\n inputContainer: {\n position: 'relative',\n flex: 1,\n },\n\n flagListContainer: {\n position: 'absolute',\n width: '100%',\n top: dimensions.CONTROL.HEIGHT + 6,\n left: -1,\n zIndex: 3,\n },\n});\n\nexport const inputStyles: IInputStyles = {\n tweakControlWrapper: {\n controlWrapper: {\n paddingLeft: COUNTRY_SELECT_WIDTH,\n },\n\n label: {\n marginLeft: COUNTRY_SELECT_WIDTH,\n },\n },\n};\n\nexport type IPhoneInputStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakInput: IInputStyles;\n tweakCountryList: IPhoneInputCountryListStyles;\n }\n>;\n","import { ITweakStyles, createThemedStyles } from '../../theme';\nimport { IRadioButtonSizes } from './types';\n\nexport const useStyles = createThemedStyles('RadioButton', {\n input: {\n appearance: 'none',\n cursor: 'pointer',\n borderRadius: '50%',\n width: 18,\n height: 18,\n outline: 'none',\n transition: '0.1s all ease-in-out',\n margin: 0,\n border: [1, 'solid', '#000'],\n\n '&:checked': {\n border: [5, 'solid', '#000'],\n },\n },\n\n label: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n },\n\n content: {\n marginLeft: 8,\n },\n\n isDisabled: {\n cursor: 'default',\n },\n\n isInvalid: {},\n});\n\nexport type IRadioButtonStyles = ITweakStyles<typeof useStyles, IRadioButtonSizes>;\n","import { CSSProperties } from 'react';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { colors, dimensions, ITweakStyles, createThemedStyles, animations } from '../../theme';\n\nconst SELECTOR_TOTAL_GAP = 4;\nconst SELECTOR_BORDER_WIDTH = 1;\nexport const SELECTOR_GAP = SELECTOR_TOTAL_GAP - SELECTOR_BORDER_WIDTH;\n\nexport const getSelectorLineStyle = (activeElementData?: {\n clientWidth: number;\n offsetLeft: number;\n}): CSSProperties | undefined =>\n isNotEmpty(activeElementData)\n ? {\n width: activeElementData.clientWidth - SELECTOR_GAP * 2,\n transform: `translateX(${activeElementData.offsetLeft}px)`,\n }\n : undefined;\n\nexport const useStyles = createThemedStyles('Selector', {\n root: {\n display: 'flex',\n alignItems: 'center',\n listStyle: 'none',\n position: 'relative',\n },\n\n required: {\n '&::before': {\n top: '50%',\n left: -12,\n width: 6,\n height: 6,\n content: '\"\"',\n position: 'absolute',\n transform: 'translate(0, -50%)',\n borderRadius: '50%',\n backgroundColor: colors.ORANGE_FOCUS,\n },\n },\n\n invalid: {},\n\n optionWrapper: {\n height: '100%',\n },\n\n option: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n appearance: 'none',\n borderRadius: 0,\n padding: 0,\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n },\n\n active: {\n cursor: 'default',\n },\n\n disabled: {\n cursor: 'default',\n\n '& $optionText': {\n color: colors.FONT_LABEL,\n },\n },\n\n optionIcon: {\n width: 20,\n height: 20,\n },\n\n optionText: {},\n\n iconFromRight: {\n '& $option': {\n flexDirection: 'row-reverse',\n },\n },\n\n s: {},\n\n m: {},\n\n l: {},\n\n line: {},\n\n selector: {\n display: 'grid',\n gridAutoFlow: 'column',\n gridAutoColumns: '1fr',\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n backgroundColor: colors.BORDER_LIGHT,\n width: 'fit-content',\n position: 'relative',\n border: ['solid', SELECTOR_BORDER_WIDTH, 'transparent'],\n\n '& $line': {\n content: '\"\"',\n position: 'absolute',\n left: SELECTOR_GAP,\n height: `calc(100% - ${SELECTOR_GAP * 2}px)`,\n backgroundColor: colors.CLASSIC_WHITE,\n borderRadius: dimensions.BORDER_RADIUS_SMALL,\n transition: animations.defaultTransition,\n transitionProperty: 'transform, width',\n },\n\n '&$invalid': {\n borderColor: colors.RED_WARNING,\n },\n\n '& $option': {\n gap: 6,\n position: 'relative',\n zIndex: 1,\n height: '100%',\n color: colors.FONT_MEDIUM,\n fontSize: 16,\n transition: animations.defaultTransition,\n transitionProperty: 'color',\n background: 'none',\n\n '&$s': {\n padding: [4, 8],\n fontSize: 10,\n lineHeight: '14px',\n },\n\n '&$m': {\n padding: [14, 18],\n },\n\n '&$l': {\n padding: [16, 24],\n },\n\n '&:hover, &:focus': {\n color: colors.FONT_MAIN,\n },\n\n '&$active': {\n color: colors.FONT_MAIN,\n },\n },\n },\n\n autoWidth: {\n '&$selector': {\n gridAutoColumns: 'auto',\n\n '& $line': {\n width: 'unset',\n transform: 'unset',\n },\n },\n },\n});\n\nexport type ISelectorStyles = ITweakStyles<typeof useStyles>;\n","import { ICharactersMap } from './types';\n\nexport const SMART_INPUT_REGEX_MAP = {\n default: /./i,\n agencyName: /^[a-zA-Z\\s0-9-]*$/i,\n surname: /^[a-zA-Z\\s-]*$/i,\n name: /^[a-zA-Z\\s-.`']*$/i,\n surnameRuEn: /^[a-zA-Zа-яА-Я\\s-]*$/i,\n nameRuEn: /^[a-zA-Zа-яА-Я\\s-.`']*$/i,\n email: /^[a-zA-Z0-9@_\\-.+']*$/i,\n digits: /^[0-9]*$/i,\n docNumber: /^[a-zA-Z0-9]*$/i,\n benefitCert: /^[a-zA-Z0-9/]*$/i,\n};\n\nexport const CharactersMap: ICharactersMap = {\n й: 'q',\n ц: 'w',\n у: 'e',\n к: 'r',\n е: 't',\n н: 'y',\n г: 'u',\n ш: 'i',\n щ: 'o',\n з: 'p',\n х: '[',\n ъ: ']',\n ф: 'a',\n ы: 's',\n в: 'd',\n а: 'f',\n п: 'g',\n р: 'h',\n о: 'j',\n л: 'k',\n д: 'l',\n ж: ';',\n э: \"'\",\n я: 'z',\n ч: 'x',\n с: 'c',\n м: 'v',\n и: 'b',\n т: 'n',\n ь: 'm',\n б: ',',\n ю: '.',\n ё: '`',\n};\n\nexport const EmailCharactersMap: ICharactersMap = {\n ...CharactersMap,\n '\"': '@',\n};\n\nexport const TransliterationMap: ICharactersMap = {\n й: 'i',\n ц: 'ts',\n у: 'u',\n к: 'k',\n е: 'e',\n н: 'n',\n г: 'g',\n ш: 'sh',\n щ: 'shch',\n з: 'z',\n х: 'h',\n ъ: 'ie',\n ф: 'f',\n ы: 'y',\n в: 'v',\n а: 'a',\n п: 'p',\n р: 'r',\n о: 'o',\n л: 'l',\n д: 'd',\n ж: 'zh',\n э: 'e',\n я: 'ia',\n ч: 'ch',\n с: 's',\n м: 'm',\n и: 'i',\n т: 't',\n ь: '',\n б: 'b',\n ю: 'iu',\n ё: 'e',\n};\n","import { ICharactersMap } from './types';\n\nexport const mapSymbols = (\n str: string,\n regex: RegExp,\n charactersMap: ICharactersMap,\n isTransliterationEnabled: boolean,\n): string =>\n str\n .split('')\n .map((symbol) => {\n if (regex.test(symbol)) {\n return symbol;\n }\n if (!isTransliterationEnabled) {\n return '';\n }\n\n const mappedSymbol = charactersMap[symbol.toLowerCase()] ?? symbol;\n\n const isUpperCase = symbol.toUpperCase() === symbol;\n const result = isUpperCase ? mappedSymbol.toUpperCase() : mappedSymbol;\n\n return regex.test(result) ? result : '';\n })\n .join('');\n","import { ClipboardEvent, forwardRef, useRef } from 'react';\nimport { isEmpty, isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useMergedRefs } from '../../hooks';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport {\n CharactersMap,\n EmailCharactersMap,\n SMART_INPUT_REGEX_MAP,\n TransliterationMap,\n} from './constants';\nimport { mapSymbols } from './helpers';\nimport { IInputRawValue, ISmartType } from './types';\n\nexport interface ISmartInputProps extends Omit<IInputProps, 'onChange'> {\n /** @default 'default' */\n smartType?: ISmartType;\n regExp?: RegExp;\n /** @default false */\n isUpperCase?: boolean;\n /** @default true */\n isTransliterationEnabled?: boolean;\n onChange: (\n value: string,\n rawValue: IInputRawValue,\n event?: IChangeInputEvent | ClipboardEvent<HTMLInputElement>,\n ) => void;\n}\n\nexport const SmartInput = forwardRef<HTMLInputElement, ISmartInputProps>(function SmartInput(\n {\n value = '',\n smartType = 'default',\n regExp,\n maxLength,\n isUpperCase = false,\n isTransliterationEnabled = true,\n onChange,\n ...rest\n },\n ref,\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMergedRefs([ref, inputRef]);\n\n const regex = regExp || SMART_INPUT_REGEX_MAP[smartType];\n\n const getUpperCaseIfNeeded = (str: string) => (isUpperCase ? str.toUpperCase() : str);\n\n const updateCaretPosition = (position: number | null, newValue: string) => {\n const input = inputRef.current;\n if (isNotEmpty(input) && input.type !== 'email') {\n // Нужно для того, чтобы после ререндера позиция каретки не сбросилась\n input.value = newValue;\n input.setSelectionRange(position, position);\n }\n };\n\n const handleChange = async (str: string, event: IChangeInputEvent) => {\n const isValid = regex.test(str);\n\n const charactersMap = smartType === 'email' ? EmailCharactersMap : CharactersMap;\n const newValue = getUpperCaseIfNeeded(\n isValid ? str : mapSymbols(str, regex, charactersMap, isTransliterationEnabled),\n );\n\n onChange(newValue, { rawValue: str, isValid }, event);\n\n const input = inputRef.current;\n if (isNotEmpty(input)) {\n const start = input.selectionStart;\n updateCaretPosition(isEmpty(start) || newValue !== value ? start : start - 1, newValue);\n }\n };\n\n const handlePaste = async (event: ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n\n const str = event.clipboardData.getData('text/plain').split('').join('');\n\n const input = event.currentTarget;\n const selectionStart = input.selectionStart ?? 0;\n const selectionEnd = input.selectionEnd ?? 0;\n\n const isValid = regex.test(str);\n\n let mappedValue = isValid\n ? str\n : mapSymbols(str, regex, TransliterationMap, isTransliterationEnabled);\n\n const newValueLength = mappedValue.length + value.length - (selectionEnd - selectionStart);\n\n if (isNotEmpty(maxLength) && maxLength >= 0 && newValueLength > maxLength) {\n mappedValue = mappedValue.substring(0, mappedValue.length - (newValueLength - maxLength));\n }\n\n const newValue = getUpperCaseIfNeeded(\n `${value.substring(0, selectionStart)}${mappedValue}${value.substring(selectionEnd)}`,\n );\n\n onChange(newValue, { rawValue: str, isValid }, event);\n updateCaretPosition(selectionStart + mappedValue.length, newValue);\n };\n\n return (\n <Input\n {...rest}\n ref={mergedRef}\n value={value}\n maxLength={maxLength}\n onPaste={handlePaste}\n onChange={handleChange}\n />\n );\n});\n","import { colors, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IStatusColors } from './types';\n\nexport const useStyles = createThemedStyles('Status', {\n root: {\n display: 'inline-flex',\n verticalAlign: 'middle',\n color: 'var(--status-color)',\n backgroundColor: 'var(--status-background)',\n width: 'max-content',\n alignItems: 'center',\n\n '& > *': {\n flexShrink: 0,\n },\n },\n\n icon: {\n '& > div': {\n display: 'inline-block',\n },\n },\n\n iconLeft: {\n order: -1,\n },\n\n text: {},\n\n badge: {\n color: colors.CLASSIC_WHITE,\n backgroundColor: 'var(--status-color)',\n },\n\n xs: {\n padding: [2, 4],\n gap: 4,\n borderRadius: 2,\n\n fontSize: 12,\n lineHeight: '16px',\n letterSpacing: 0.24,\n fontWeight: 'bold',\n\n '& $icon': {\n width: 16,\n height: 16,\n },\n\n '& $badge': {\n padding: [0, 2],\n marginRight: -1,\n borderRadius: 4,\n },\n },\n\n s: {\n padding: [3, 8, 5, 8],\n gap: 4,\n borderRadius: 6,\n\n fontSize: 13,\n lineHeight: '16px',\n letterSpacing: 0.2,\n fontWeight: 'bold',\n\n '& $text': {},\n\n '& $icon': {\n width: 16,\n height: 16,\n },\n\n '& $badge': {\n padding: [0, 4, 2, 4],\n margin: [0, -4, -2, 0],\n borderRadius: 4,\n },\n },\n\n m: {\n padding: [7, 12],\n gap: 4,\n borderRadius: 6,\n\n fontSize: 15,\n lineHeight: '18px',\n letterSpacing: 0.15,\n fontWeight: 'bold',\n\n '& $text': {},\n\n '& $icon': {\n width: 18,\n height: 18,\n },\n\n '& $badge': {\n padding: [2, 4],\n margin: [-2, -7, -2, 0],\n borderRadius: 4,\n },\n },\n\n custom: {},\n});\n\nexport type IStatusStyles = ITweakStyles<typeof useStyles, IStatusColors>;\n","import { ITweakStyles, animations, createThemedStyles } from '../../theme';\nimport { ISwitchSizes } from './types';\n\nexport const useStyles = createThemedStyles('Switch', {\n root: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n\n '--switch-width': '36px',\n '--switch-height': '20px',\n '--switch-toggle-width': '16px',\n '--switch-toggle-height': '16px',\n '--switch-toggle-padding': 'calc((var(--switch-height) - var(--switch-toggle-height)) / 2)',\n '--switch-label-gap': '12px',\n },\n\n primary: {},\n\n secondary: {},\n\n invalid: {},\n\n disabled: {\n pointerEvents: 'none',\n cursor: 'default',\n },\n\n checked: {\n '& $switch::before': {\n left: 'calc(var(--switch-width) - var(--switch-toggle-width) - var(--switch-toggle-padding))',\n },\n },\n\n switch: {\n position: 'relative',\n flexShrink: 0,\n display: 'block',\n width: 'var(--switch-width)',\n height: 'var(--switch-height)',\n borderRadius: 'calc(infinity * 1px)',\n boxSizing: 'border-box',\n transition: animations.defaultTransition,\n transitionProperty: 'opacity, background-color',\n backgroundColor: '#333',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 'var(--switch-toggle-padding)',\n left: 'var(--switch-toggle-padding)',\n width: 'var(--switch-toggle-width)',\n height: 'var(--switch-toggle-height)',\n right: 'auto',\n display: 'block',\n backgroundColor: '#fff',\n borderRadius: 'calc(infinity * 1px)',\n zIndex: 1,\n transition: animations.defaultTransition,\n transitionProperty: 'left, background-color',\n },\n },\n\n input: {\n display: 'none',\n },\n\n label: {\n transition: animations.defaultTransition,\n transitionProperty: 'opacity, color',\n },\n\n labelLeft: {\n order: -1,\n marginRight: 'var(--switch-label-gap)',\n },\n\n labelRight: {\n marginLeft: 'var(--switch-label-gap)',\n },\n});\n\nexport type ISwitchStyles = ITweakStyles<typeof useStyles, ISwitchSizes>;\n","import { animations, createThemedStyles, helpers, ITweakStyles } from '../../theme';\nimport { IWithPrefix } from '../../types';\nimport { IControlWrapperSizes, IControlWrapperStyles } from '../ControlWrapper';\nimport { IWithMessagesStyles } from '../WithMessages';\nimport { ITextAreaCounterPositions } from './types';\n\nexport const useStyles = createThemedStyles('TextArea', {\n root: {\n width: '100%',\n },\n\n textarea: {\n ...helpers.withScrollBar,\n width: '100%',\n height: '100%',\n fontFamily: 'inherit',\n fontSize: 16,\n padding: [14, 0, 8, 'var(--control-padding)'],\n scrollPadding: '14px 0 8px var(--control-padding)',\n scrollbarGutter: 'stable',\n boxSizing: 'border-box',\n outline: 'none',\n outlineStyle: 'none',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n border: 'none',\n resize: 'none',\n background: 'transparent',\n\n '&::placeholder': {\n opacity: 1,\n },\n\n MozAppearance: 'textfield',\n '&::-webkit-inner-spin-button,&::-webkit-outer-spin-button': {\n WebkitAppearance: 'none',\n margin: 0,\n },\n },\n\n wrapper: {\n width: '100%',\n },\n\n autoSized: {\n display: 'grid',\n gridTemplateRows: 'minmax(0, 100%)',\n\n '& > $textarea, &::after': {\n gridArea: '1 / 1',\n },\n\n '&::after': {\n extend: 'textarea',\n content: 'attr(data-value) \" \"', // Без пробела ломается!\n overflowWrap: 'break-word',\n whiteSpace: 'pre-wrap',\n visibility: 'hidden',\n },\n },\n\n symbolsCount: {\n textAlign: 'right',\n marginTop: 4,\n fontSize: 12,\n marginLeft: 'auto',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n },\n\n symbolsCountError: {\n color: 'red',\n },\n\n symbolsCountActive: {},\n\n 'counter-default': {},\n\n withLabel: {},\n});\n\nexport type ITextAreaStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakWithMessages: IWithMessagesStyles;\n tweakControlWrapper: IControlWrapperStyles;\n } & IWithPrefix<ITextAreaCounterPositions, 'counter-'> &\n IControlWrapperSizes\n>;\n","import {\n ChangeEvent,\n CSSProperties,\n FocusEvent,\n FormEvent,\n forwardRef,\n TextareaHTMLAttributes,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isArrayLikeNotEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ControlWrapper, IControlWrapperProps } from '../ControlWrapper';\nimport { IWithMessagesProps, WithMessages } from '../WithMessages';\nimport { ITextAreaCounterPosition } from './types';\nimport { ITextAreaStyles, useStyles } from './TextArea.styles';\n\nexport interface ITextAreaProps\n extends ICommonProps<ITextAreaStyles>,\n Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'>,\n Pick<\n IControlWrapperProps,\n 'label' | 'isInvalid' | 'isRequired' | 'isDisabled' | 'size' | 'groupPlacement'\n >,\n Pick<IWithMessagesProps, 'infoMessage' | 'errorMessage'> {\n value?: string;\n placeholder?: string;\n counterPosition?: ITextAreaCounterPosition;\n /** @default false */\n isActive?: boolean;\n /**\n * Должна ли высота и ширина textarea подстраиваться под содержимое\n * @default true\n */\n isAutoSized?: boolean;\n /** @default false */\n shouldFocusOnMount?: boolean;\n /** @default true */\n hasCounter?: boolean;\n /** @default false */\n shouldTrimAfterMaxLength?: boolean;\n /** @default false */\n shouldAlwaysShowPlaceholder?: boolean;\n onChange: (value: string, event?: FormEvent<HTMLTextAreaElement>) => void;\n}\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(function TextArea(\n {\n value = '',\n placeholder,\n name,\n counterPosition = 'default',\n shouldFocusOnMount,\n hasCounter = true,\n shouldTrimAfterMaxLength,\n isAutoSized = true,\n shouldAlwaysShowPlaceholder,\n isActive,\n maxLength,\n rows,\n data,\n testId,\n tweakStyles,\n onChange,\n onPaste,\n onFocus,\n onBlur,\n // Пропсы WithMessages\n infoMessage,\n errorMessage,\n // Пропсы ControlWrapper\n label,\n isDisabled,\n isInvalid,\n isRequired,\n size,\n groupPlacement,\n ...textAreaProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const shouldShowCounter = hasCounter && isNotEmpty(maxLength);\n const counterString = `${value.length} / ${maxLength}`;\n\n const tweakWithMessagesStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithMessages',\n currentComponentName: 'TextArea',\n });\n\n const tweakControlWrapperStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakControlWrapper',\n currentComponentName: 'TextArea',\n });\n\n const [isFocused, setFocused] = useState(false);\n\n const hasFocus = isFocused || isActive;\n const hasValue = isArrayLikeNotEmpty(value);\n const hasLabel = isReactNodeNotEmpty(label);\n const hasPlaceholder =\n (!hasLabel || hasFocus || shouldAlwaysShowPlaceholder) && isStringNotEmpty(placeholder);\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n onChange(event.currentTarget.value, event);\n };\n\n const handleFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n return (\n <div\n className={clsx(classes.root, isNotEmpty(size) && classes[size])}\n style={{ '--counter-length': counterString.length } as CSSProperties}\n >\n <WithMessages\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n tweakStyles={tweakWithMessagesStyles}\n testId={getTestId(testId, 'wrapper')}\n >\n <ControlWrapper\n label={label}\n tweakStyles={tweakControlWrapperStyles}\n isFocused={hasFocus}\n isDisabled={isDisabled}\n hasValue={hasValue}\n isInvalid={isInvalid}\n isRequired={isRequired}\n groupPlacement={groupPlacement}\n size={size}\n isFullWidth\n >\n <div\n className={clsx(classes.wrapper, {\n [classes.autoSized]: isAutoSized,\n [classes.withLabel]: hasLabel,\n })}\n // Не менять на addDataAttributes\n {...(isAutoSized && { 'data-value': value })}\n >\n <textarea\n ref={ref}\n className={classes.textarea}\n value={value}\n disabled={isDisabled}\n placeholder={hasPlaceholder ? placeholder : undefined}\n maxLength={shouldTrimAfterMaxLength ? maxLength : undefined}\n name={name}\n rows={rows}\n onPaste={onPaste}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n autoFocus={shouldFocusOnMount}\n {...addDataAttributes(data, testId)}\n {...textAreaProps}\n />\n {shouldShowCounter && (\n <span\n className={clsx(classes.symbolsCount, classes[`counter-${counterPosition}`], {\n [classes.symbolsCountError]: value.length > maxLength,\n [classes.symbolsCountActive]: hasFocus || hasValue,\n })}\n {...addDataAttributes({ counterPosition })}\n >\n {counterString}\n </span>\n )}\n </div>\n </ControlWrapper>\n </WithMessages>\n </div>\n );\n});\n","import { animations, createThemedStyles, ITweakStyles } from '../../theme';\nimport { IThemedPreloaderStyles } from '../ThemedPreloader';\n\nexport const useStyles = createThemedStyles('TextButton', {\n root: {\n display: 'flex',\n alignItems: 'center',\n height: 24,\n padding: 0,\n position: 'relative',\n background: 'transparent',\n border: 'none',\n borderRadius: 0,\n cursor: 'pointer',\n outline: 'none',\n transition: animations.defaultTransition,\n transitionProperty: 'color',\n\n '&[disabled]': {\n cursor: 'default',\n pointerEvents: 'none',\n },\n },\n\n xl: {\n fontSize: 16,\n\n '& $content': {\n gap: 14,\n },\n },\n\n l: {\n fontSize: 14,\n letterSpacing: '0.15px',\n\n '& $content': {\n gap: 10,\n\n '&$reverseContent': {\n gap: 6,\n },\n },\n },\n\n primary: {},\n\n secondary: {},\n\n custom: {},\n\n active: {},\n\n disabled: {},\n\n bold: {\n fontWeight: 'bold',\n },\n\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n\n circle: {\n width: 24,\n height: 24,\n borderRadius: '50%',\n transition: animations.defaultTransition,\n transitionProperty: ['background', 'color'],\n },\n\n icon: {\n width: 20,\n height: 20,\n },\n\n content: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n },\n\n reverseContent: {\n flexDirection: 'row-reverse',\n },\n\n loader: {\n display: 'none',\n height: 8,\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n\n loading: {\n '& $content': {\n visibility: 'hidden',\n },\n\n '& $loader': {\n display: 'block',\n },\n },\n});\n\nexport const preloaderStyles: IThemedPreloaderStyles = {\n tweakDotsPreloader: {\n fadedDot: {\n width: 6,\n height: 6,\n },\n },\n\n logo: {\n width: 24,\n height: 24,\n },\n\n default: {\n width: 24,\n height: 24,\n },\n};\n\nexport type ITextButtonStyles = ITweakStyles<\n typeof useStyles,\n { tweakPreloader: IThemedPreloaderStyles }\n>;\n","import { forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IThemedPreloaderProps, ThemedPreloader } from '../ThemedPreloader';\nimport { ITextButtonHTMLBaseProps, ITextButtonSize, ITextButtonView } from './types';\nimport { useStyles, ITextButtonStyles, preloaderStyles } from './TextButton.styles';\n\nexport interface ITextButtonProps\n extends ICommonProps<ITextButtonStyles>,\n ITextButtonHTMLBaseProps {\n /** @default 'undefined' */\n children?: ReactNode;\n /** @default 'undefined' */\n icon?: IIcon;\n /** @default 'primary' */\n view?: ITextButtonView;\n /** @default false */\n isBold?: boolean;\n /** @default false */\n hasCircleUnderIcon?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n isActive?: boolean;\n /** @default 'l' */\n size?: ITextButtonSize;\n /** @default 'left' */\n iconPosition?: 'left' | 'right';\n /** @default 'dots' */\n preloaderType?: IThemedPreloaderProps['type'];\n}\n\nexport const TextButton = forwardRef<HTMLButtonElement, ITextButtonProps>(function TextButton(\n {\n children,\n icon,\n view = 'primary',\n isDisabled = false,\n isBold = false,\n isLoading = false,\n isActive = false,\n hasCircleUnderIcon = false,\n size = 'l',\n iconPosition = 'left',\n preloaderType = 'dots',\n type = 'button',\n testId,\n tweakStyles,\n data,\n onClick,\n ...restProps\n },\n ref,\n) {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakPreloaderStyles = useTweakStyles({\n innerStyles: preloaderStyles,\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'TextButton',\n });\n\n const hasNoAction = isDisabled || isLoading;\n\n return (\n <button\n ref={ref}\n type={type}\n className={clsx(classes.root, classes[size], classes[view], {\n [classes.bold]: isBold,\n [classes.loading]: isLoading,\n [classes.active]: isActive,\n [classes.disabled]: isDisabled,\n })}\n disabled={hasNoAction}\n onClick={!hasNoAction ? onClick : undefined}\n {...restProps}\n {...addDataAttributes(data, testId)}\n >\n <span className={clsx(classes.content, iconPosition === 'right' && classes.reverseContent)}>\n {isReactNodeNotEmpty(icon) && (\n <span className={clsx(classes.iconContainer, hasCircleUnderIcon && classes.circle)}>\n <span className={classes.icon}>{renderIcon(icon)}</span>\n </span>\n )}\n {children}\n </span>\n\n {isLoading && (\n <span className={classes.loader}>\n <ThemedPreloader\n type={preloaderType}\n useCurrentColor\n tweakStyles={tweakPreloaderStyles}\n />\n </span>\n )}\n </button>\n );\n});\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\n\nexport const useStyles = createThemedStyles('TextWithInfo', {\n root: {\n display: 'inline-block',\n height: 40,\n padding: [0, 18],\n borderRadius: 20,\n boxSizing: 'border-box',\n color: colors.FONT_MEDIUM,\n\n '&:hover': {\n backgroundColor: colors.GREY_FOCUS,\n },\n },\n\n container: {\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n },\n\n selected: {\n backgroundColor: colors.GREY_FOCUS,\n },\n\n text: {\n cursor: 'pointer',\n fontSize: 16,\n },\n\n info: {\n width: 20,\n marginLeft: 4,\n color: colors.FONT_DISABLED,\n cursor: 'pointer',\n borderRadius: '50%',\n\n '&:link': {\n color: colors.FONT_DISABLED,\n },\n\n '&:hover': {\n color: colors.CLASSIC_WHITE,\n backgroundColor: colors.FONT_DISABLED,\n },\n\n '&:visited': {\n color: colors.FONT_DISABLED,\n\n '&:hover': {\n color: colors.CLASSIC_WHITE,\n backgroundColor: colors.FONT_DISABLED,\n },\n },\n },\n});\n\nexport type ITextWithInfoStyles = ITweakStyles<typeof useStyles>;\n","import { colors, ITweakStyles, createThemedStyles } from '../../theme';\nimport { IIconButtonStyles } from '../IconButton';\n\nexport const useStyles = createThemedStyles('Toaster', {\n root: {\n borderRadius: 8,\n position: 'relative',\n background: colors.CLASSIC_WHITE,\n padding: [20, 40, 20, 20],\n display: 'flex',\n },\n\n iconContainer: {\n width: 20,\n height: 20,\n flexShrink: 0,\n marginRight: 16,\n },\n\n error: {\n color: colors.RED_WARNING,\n },\n\n info: {},\n\n warning: {\n color: colors.ORANGE_FOCUS,\n },\n\n ok: {\n color: colors.GREEN_FOCUS,\n },\n\n 'not-ok': {\n color: colors.FONT_LABEL,\n },\n\n text: {},\n\n title: {},\n\n content: {\n '&:not(:first-child):not(:empty)': {\n marginTop: 16,\n },\n },\n\n close: {\n position: 'absolute',\n top: 12,\n right: 12,\n width: 32,\n height: 32,\n },\n});\n\nexport type IToasterStyles = ITweakStyles<\n typeof useStyles,\n { tweakCloseButton: IIconButtonStyles }\n>;\n","import { colors, ITweakStyles, createThemedStyles, animations } from '../../theme';\nimport { IListStyles } from '../List';\nimport { IWithPopupStyles } from '../WithPopup';\n\nexport const useStyles = createThemedStyles('NewMoreMenu', {\n hasCircle: {},\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n backgroundColor: 'transparent',\n color: colors.FONT_MEDIUM,\n padding: 0,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n transition: animations.defaultTransition,\n transitionProperty: 'background-color',\n },\n\n icon: {\n width: 30,\n height: 30,\n },\n\n active: {},\n\n disabled: {\n cursor: 'default',\n },\n});\n\nexport type INewMoreMenuStyles = ITweakStyles<\n typeof useStyles,\n { tweakList: IListStyles; tweakWithPopup: IWithPopupStyles }\n>;\n","import { ITooltipStyles } from '../Tooltip';\nimport { IWithPopupStyles } from '../WithPopup';\n\nexport const withPopupStyles: IWithPopupStyles = {\n popup: {\n zIndex: 9999,\n },\n};\n\nexport interface IWithTooltipStyles {\n tweakWithPopup?: IWithPopupStyles;\n tweakTooltip?: ITooltipStyles;\n}\n","import { FC, ReactNode, useRef, useState, MouseEvent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { IListProps, List } from '../List';\nimport { ANIMATION_TIMEOUT } from './constants';\nimport { useStyles, IAccountInfoStyles } from './AccountInfo.styles';\n\nexport interface IAccountInfoProps extends ICommonProps<IAccountInfoStyles> {\n /** @default `<Icon type='avatar' />` */\n avatar?: ReactNode;\n accountName: ReactNode;\n options: IListProps['items'];\n}\n\nexport const AccountInfo: FC<IAccountInfoProps> = ({\n data,\n testId,\n avatar,\n tweakStyles,\n accountName,\n options,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakList',\n currentComponentName: 'AccountInfo',\n });\n\n const nameRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const toggleMenu = (event: MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n setIsMenuOpen((v) => !v);\n };\n\n useOnClickOutsideWithRef(dropdownRef, () => setIsMenuOpen(false), nameRef);\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {avatar ?? (\n <div className={classes.avatarIcon}>\n <Icon type=\"avatar\" />\n </div>\n )}\n <div ref={nameRef} className={classes.account} onClick={toggleMenu}>\n <div className={clsx(classes.accountName, isMenuOpen && classes.accountNameOpened)}>\n {accountName}\n </div>\n <div className={clsx(classes.accountChevron, isMenuOpen && classes.accountChevronOpened)}>\n <Icon type=\"chevron-down-small\" />\n </div>\n <CSSTransition\n in={isMenuOpen}\n timeout={ANIMATION_TIMEOUT}\n unmountOnExit\n classNames={{\n enter: classes['slide-up-enter'],\n enterActive: classes['slide-up-enter-active'],\n exit: classes['slide-up-exit'],\n exitActive: classes['slide-up-exit-active'],\n }}\n >\n <div ref={dropdownRef} className={classes.accountMenu} onClick={toggleMenu}>\n <List items={options} tweakStyles={tweakListStyles} />\n </div>\n </CSSTransition>\n </div>\n </div>\n );\n};\n","export const ANIMATION_TIMEOUT = 150; // такой же тайминг должен быть в стилях анимации\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { useStyles, IAddButtonStyles } from './AddButton.styles';\n\nexport interface IAddButtonProps extends ICommonProps<IAddButtonStyles> {\n text: string;\n /** @default 'button' */\n type?: 'submit' | 'button';\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isFullWidth?: boolean;\n onClick?: () => void | Promise<void>;\n}\n\n/** @deprecated Весьма сомнительный компонент */\nexport const AddButton: FC<IAddButtonProps> = ({\n text,\n type = 'button',\n isDisabled = false,\n onClick,\n isFullWidth = false,\n data,\n testId,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <button\n type={type}\n className={clsx(\n classes.root,\n isDisabled && classes.disabled,\n isFullWidth && classes.fullWidth,\n )}\n onClick={!isDisabled ? onClick : undefined}\n disabled={isDisabled}\n {...addDataAttributes(data, testId)}\n >\n <div className={classes.icon}>\n <Icon type=\"plus\" />\n </div>\n <div>{text}</div>\n </button>\n );\n};\n","import { FC } from 'react';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { ICloseButtonStyles, useStyles } from './CloseButton.styles';\n\nexport interface ICloseButtonProps extends ICommonProps<ICloseButtonStyles> {\n /** @default 'close' */\n icon?: 'close' | 'close-large' | 'close-window';\n onClose?: () => void;\n}\n\n/** @deprecated */\nexport const CloseButton: FC<ICloseButtonProps> = ({\n tweakStyles,\n testId,\n data,\n icon = 'close',\n onClose,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <button\n type=\"button\"\n className={classes.root}\n onClick={onClose}\n {...addDataAttributes(data, testId)}\n >\n <Icon type={icon} />\n </button>\n );\n};\n","import { FC } from 'react';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { useStyles, ICssBaselineStyles } from './CssBaseline.styles';\n\nexport type ICssBaselineProps = ICommonProps<ICssBaselineStyles>;\n\nexport const CssBaseline: FC<ICssBaselineProps> = ({ data, testId, tweakStyles }) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return <div className={classes.root} {...addDataAttributes(data, testId)} />;\n};\n","export const DOC_ACTIONS_VIEWS = ['neutral', 'inverse'] as const;\n","import { FC, useState } from 'react';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { LINK_REGEXP } from './constants';\nimport { useStyles, IDescriptionStyles } from './Description.styles';\n\nexport interface IDescriptionProps extends ICommonProps<IDescriptionStyles> {\n text: string;\n moreTitle?: string;\n lessTitle?: string;\n /** @default 150 */\n truncateIndex?: number;\n /** @default true */\n isAlwaysOpen?: boolean;\n}\n\nexport const Description: FC<IDescriptionProps> = ({\n text,\n moreTitle,\n lessTitle,\n truncateIndex = 150,\n isAlwaysOpen = true,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const isTooShort = text.length < truncateIndex;\n const [isOpen, setIsOpen] = useState(isAlwaysOpen);\n const link = text.match(LINK_REGEXP);\n const linkText = link && link[0];\n const textWithNoLink = text.replace(LINK_REGEXP, '');\n\n const shortText = text.slice(0, text.slice(0, truncateIndex).lastIndexOf(' '));\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {isAlwaysOpen || isOpen || isTooShort ? (\n <div>\n <span>{textWithNoLink} </span>\n {!!linkText && (\n <a className={classes.link} href={linkText} target=\"_blank\" rel=\"noopener noreferrer\">\n {linkText}\n </a>\n )}\n </div>\n ) : (\n <div>\n <span>{shortText}</span>\n </div>\n )}\n {isAlwaysOpen || isTooShort ? undefined : (\n <div className={classes.button} onClick={() => setIsOpen(!isOpen)}>\n {isOpen ? lessTitle : moreTitle}\n </div>\n )}\n </div>\n );\n};\n","import { FC, MouseEvent, KeyboardEvent, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { filesize } from 'filesize';\nimport {\n addClickHandler,\n addDataAttributes,\n isFunction,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport { TextWithTooltip } from '../TextWithTooltip';\nimport { IThemedPreloaderProps, ThemedPreloader } from '../ThemedPreloader';\nimport { getFileIcon } from './helpers';\nimport { IFileInfo, IFileItemSize } from './types';\nimport { IFileItemStyles, themedPreloaderStyles, useStyles } from './FileItem.styles';\n\nexport interface IFileItemProps extends ICommonProps<IFileItemStyles> {\n fileInfo: IFileInfo;\n icon?: IIcon;\n /** @default trash-can */\n removeIcon?: IIcon;\n metadata?: ReactNode;\n actions?: ReactNode;\n error?: ReactNode;\n info?: ReactNode;\n /** @default m */\n itemSize?: IFileItemSize;\n /** @default default */\n preloaderType?: IThemedPreloaderProps['type'];\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n areActionsDisabled?: boolean;\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n shouldShowSize?: boolean;\n onClick?: (event: MouseEvent | KeyboardEvent) => void;\n onRemove?: (event: MouseEvent | KeyboardEvent) => void;\n}\n\nexport const FileItem: FC<IFileItemProps> = ({\n fileInfo,\n icon = getFileIcon(fileInfo),\n metadata,\n actions,\n error,\n info,\n isDisabled = false,\n areActionsDisabled = false,\n isLoading = false,\n shouldShowSize = false,\n itemSize = 'm',\n preloaderType = 'default',\n removeIcon = 'trash-can',\n onRemove,\n onClick,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakIconButtonStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakRemoveIconButton',\n currentComponentName: 'FileItem',\n });\n\n const tweakPreloaderStyles = useTweakStyles({\n innerStyles: themedPreloaderStyles,\n tweakStyles,\n className: 'tweakPreloader',\n currentComponentName: 'FileItem',\n });\n\n const tweakTooltipStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTooltip',\n currentComponentName: 'FileItem',\n });\n\n const handleClick = (event: MouseEvent | KeyboardEvent) => {\n event.stopPropagation();\n onClick?.(event);\n };\n\n const handleRemove = (event: MouseEvent | KeyboardEvent) => {\n event.stopPropagation();\n onRemove?.(event);\n };\n\n const { name, size } = fileInfo;\n const hasRemoveButton = isFunction(onRemove);\n\n return (\n <div className={classes.root}>\n <div\n className={clsx(classes.fileItemWrapper, classes[itemSize], {\n [classes.disabled]: isDisabled,\n })}\n {...addDataAttributes(data, testId)}\n {...addClickHandler(handleClick, !isDisabled)}\n >\n <div className={classes.fileIcon}>{renderIcon(icon)}</div>\n\n <div className={classes.fileNameContainer}>\n <TextWithTooltip tooltipText={name} tooltipView=\"hint\" tweakStyles={tweakTooltipStyles}>\n <div className={classes.fileName}>{name}</div>\n </TextWithTooltip>\n\n <div className={classes.metadata}>\n {metadata}\n {shouldShowSize && isNotEmpty(size) && (\n <div className={classes.fileSize}>{filesize(size)}</div>\n )}\n </div>\n </div>\n\n <div className={classes.actions}>\n {isLoading ? (\n <div className={clsx(classes.preloader, classes[`preloader-${preloaderType}`])}>\n <ThemedPreloader\n type={preloaderType}\n tweakStyles={tweakPreloaderStyles}\n useCurrentColor\n />\n </div>\n ) : (\n hasRemoveButton && (\n <IconButton\n icon={removeIcon}\n onClick={handleRemove}\n isDisabled={areActionsDisabled}\n tweakStyles={tweakIconButtonStyles}\n />\n )\n )}\n\n {actions}\n </div>\n </div>\n\n <div className={classes.footer}>\n {isReactNodeNotEmpty(error) && <div className={classes.error}>{error}</div>}\n\n {isReactNodeNotEmpty(info) && <div className={classes.info}>{info}</div>}\n </div>\n </div>\n );\n};\n","import { useMemo } from 'react';\nimport {\n addDataAttributes,\n addDataTestId,\n getTestId,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Button } from '../Button';\nimport { IIcon, renderIcon } from '../Icon';\nimport { FilterWrapper, IFiltersPaneSearchProps, FiltersPaneSearch } from './components';\nimport { getLocale } from './helpers';\nimport { ConfigType, IFilterLocaleKey, IPartialFilterLocale } from './types';\nimport { useStyles, IFiltersPaneStyles, clearButtonStyles } from './FiltersPane.styles';\n\nexport interface IFiltersPaneProps<Values extends Record<string, unknown>, Content = Values>\n extends ICommonProps<IFiltersPaneStyles> {\n filtersConfig: ConfigType<Values>;\n enabledFilters?: Array<keyof ConfigType<Values>>;\n /** @default {} */\n values?: Partial<Values>;\n search?: IFiltersPaneSearchProps<keyof Content>;\n localeKey?: IFilterLocaleKey;\n locale?: IPartialFilterLocale;\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n hasClearButton?: boolean;\n /** @default false */\n shouldRenderDataId?: boolean;\n /** @default 'filter' */\n settingsIcon?: IIcon;\n onChangeFilters: (values: Partial<Values>) => void;\n onSettingsButtonClick?: () => void;\n onClear?: () => void;\n}\n\nexport function FiltersPane<Values extends Record<string, unknown>, Content = Values>({\n data,\n tweakStyles,\n filtersConfig,\n enabledFilters,\n values = {} as Values,\n localeKey,\n locale,\n search,\n isDisabled = false,\n hasClearButton = true,\n shouldRenderDataId = false,\n settingsIcon = 'filter',\n testId,\n onChangeFilters,\n onSettingsButtonClick,\n onClear,\n}: IFiltersPaneProps<Values, Content>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FiltersPane',\n });\n\n const tweakFilterWrapperStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakFilterWrapper',\n currentComponentName: 'FiltersPane',\n });\n\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const filtersKeys = enabledFilters ?? Object.keys(filtersConfig);\n\n const handleClear = () => {\n if (isNotEmpty(onClear)) {\n onClear();\n return;\n }\n onChangeFilters({});\n if (search !== undefined) {\n search.onChange({});\n }\n };\n\n const shouldShowClearButton =\n hasClearButton &&\n (isNotEmpty(search) || filtersKeys.some((key) => isNotEmpty(filtersConfig[key])));\n\n const clearButton = (\n <div className={classes.clear}>\n <Button\n onClick={handleClear}\n size=\"s\"\n view=\"text\"\n isDisabled={isDisabled}\n testId={getTestId(testId, 'clear-button')}\n tweakStyles={tweakClearButtonStyles}\n >\n {translates.clear}\n </Button>\n </div>\n );\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n {/* Settings */}\n {onSettingsButtonClick !== undefined && (\n <div\n className={classes.settings}\n tabIndex={0}\n {...addDataTestId(testId, 'settings-button')}\n onClick={!isDisabled ? onSettingsButtonClick : undefined}\n >\n <div className={classes.settingsIcon}>{renderIcon(settingsIcon)}</div>\n </div>\n )}\n {/* Search */}\n {search !== undefined && (\n <FiltersPaneSearch\n {...search}\n locale={getLocale(search.localeKey ?? localeKey, search.locale, locale)}\n localeKey={search.localeKey ?? localeKey}\n isDisabled={search.isDisabled ?? isDisabled}\n testId={getTestId(testId, 'search')}\n />\n )}\n {/* Filters */}\n {filtersKeys.map((key, index) => {\n const isLast = index === filtersKeys.length - 1;\n const filterKey = String(key);\n const currentValue = values[filterKey];\n const filter = filtersConfig[filterKey];\n if (filter === undefined) {\n console.error(`enabledFilters содержит фильтр ${filterKey}, не описанный в конфиге`);\n if (isLast) {\n return clearButton;\n }\n return null;\n }\n\n const filterWrapper = (\n <FilterWrapper\n filter={filter}\n locale={locale}\n localeKey={localeKey}\n onChange={(value) => onChangeFilters({ ...values, [filterKey]: value })}\n value={currentValue}\n key={filterKey}\n isDisabled={isDisabled || filter?.requiredFilledFilters?.some((item) => !values[item])}\n tweakStyles={tweakFilterWrapperStyles}\n data={shouldRenderDataId ? { id: filterKey } : undefined}\n testId={getTestId(testId, `filter-${filterKey}`)}\n />\n );\n\n if (isLast) {\n return (\n <div className={classes.filterWithClearButton} key={filterKey}>\n {filterWrapper}\n {shouldShowClearButton && <>{clearButton}</>}\n </div>\n );\n }\n\n return filterWrapper;\n })}\n </div>\n );\n}\n","import { ReactNode, RefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n applyAction,\n getTestId,\n indexMap,\n isArrayNotEmpty,\n isEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useIntersectionRef, useMergedRefs, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ThemedPreloader } from '../ThemedPreloader';\nimport { FlexibleTableRow, IFlexibleTableRowProps } from './components';\nimport { TableRenders } from './constants';\nimport { hasHorizontalScrollBar } from './helpers';\nimport {\n ITableRow,\n IFlexibleTableConfigType,\n IInfinityScrollConfig,\n IFlexibleTableRenderMode,\n IHeaderContent,\n} from './types';\nimport { useStyles, IFlexibleTableStyles } from './FlexibleTable.styles';\n\nexport interface IFlexibleTableProps<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row>,\n UniqueField extends keyof Row,\n> extends ICommonProps<IFlexibleTableStyles>,\n Pick<\n IFlexibleTableRowProps<Row, HeaderContent, UniqueField>,\n | 'uniqueField'\n | 'rowAttributes'\n | 'isFirstColumnSticky'\n | 'expandableRowComponent'\n | 'onRowClick'\n | 'onRowHover'\n | 'rowRef'\n > {\n content: Row[];\n /** @default 'table' */\n renderMode?: IFlexibleTableRenderMode;\n headerContent?: HeaderContent;\n config: IFlexibleTableConfigType<Row, HeaderContent>;\n enabledColumns?: Array<keyof Row & string>;\n /** Индексы строк, на которые навешивается класс `active` */\n activeRows?: number[];\n /** @default false */\n isLoading?: boolean;\n /** @default false */\n isHorizontallyScrollable?: boolean;\n /**\n * Добавляет строкам состояние `isFocused`, вызывает ререндер при наведении\n * @default false\n */\n isRowFocusable?: boolean;\n infinityScrollConfig?: IInfinityScrollConfig;\n onHeadClick?: (column: keyof Row) => void;\n refForScroll?: RefObject<HTMLDivElement>;\n nothingFoundContent?: ReactNode;\n /** @default true */\n shouldRenderHeader?: boolean;\n /** @default false */\n isExpandableRowComponentInitiallyOpen?: boolean | ((row: Row, index: number) => boolean);\n}\n\nexport function FlexibleTable<\n Row extends ITableRow,\n HeaderContent extends IHeaderContent<Row> = IHeaderContent<Row>,\n UniqueField extends keyof Row = keyof Row,\n>({\n content,\n headerContent,\n config,\n enabledColumns,\n activeRows,\n uniqueField,\n isLoading = false,\n isFirstColumnSticky = false,\n isHorizontallyScrollable = false,\n isRowFocusable = false,\n infinityScrollConfig: infinityScrollConfigDeprecated,\n renderMode = 'table',\n refForScroll,\n nothingFoundContent,\n data,\n testId,\n tweakStyles,\n shouldRenderHeader = true,\n onHeadClick,\n isExpandableRowComponentInitiallyOpen: isRowInitiallyOpen,\n ...restProps\n}: IFlexibleTableProps<Row, HeaderContent, UniqueField>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakTableRowStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTableRow',\n currentComponentName: 'FlexibleTable',\n });\n\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const columns = useMemo(() => enabledColumns ?? Object.keys(config), [enabledColumns, config]);\n\n const getTableRowProps = (\n item: Row,\n index: number,\n ): IFlexibleTableRowProps<Row, HeaderContent, UniqueField> => ({\n ...restProps,\n item,\n renderMode,\n config,\n columns,\n uniqueField,\n isLoading,\n isFirstColumnSticky,\n isFocusable: isRowFocusable,\n tweakStyles: tweakTableRowStyles,\n isExpandableRowComponentInitiallyOpen: applyAction(isRowInitiallyOpen, item, index),\n });\n\n const getDataScrollAttributeSetter = useCallback(\n (key: string, setter: (el: HTMLDivElement) => boolean) => (el?: HTMLDivElement) => {\n if (isHorizontallyScrollable && isNotEmpty(el) && setter(el)) {\n el.dataset[key] = 'true';\n } else {\n el?.removeAttribute(`data-${key}`);\n }\n },\n [isHorizontallyScrollable],\n );\n\n // Когда таблица имеет скроллбар - добавляем аттрибут scrollable\n const setHasScrollBarAttribute = useMemo(\n () => getDataScrollAttributeSetter('scrollable', hasHorizontalScrollBar),\n [getDataScrollAttributeSetter],\n );\n\n // Когда таблица проскроллена - добавляем аттрибут scrolled\n const setIsScrolledAttribute = useMemo(\n () => getDataScrollAttributeSetter('scrolled', (el) => el.scrollLeft > 0),\n [getDataScrollAttributeSetter],\n );\n\n const ref = useMergedRefs([\n refForScroll,\n scrollRef,\n setHasScrollBarAttribute,\n setIsScrolledAttribute,\n ]);\n\n const infinityScrollConfig = infinityScrollConfigDeprecated && {\n isLoading: infinityScrollConfigDeprecated.isLoading,\n onInfinityScroll: () =>\n infinityScrollConfigDeprecated.onInfinityScroll(\n (infinityScrollConfigDeprecated.activePage ?? 0) + 1,\n ),\n isEnabled:\n infinityScrollConfigDeprecated.isEnabled ?? !infinityScrollConfigDeprecated.isLastPage,\n };\n const intersectionRef = useIntersectionRef({\n isDisabled: !infinityScrollConfig?.isEnabled || infinityScrollConfig.isLoading,\n onIntersection: infinityScrollConfig?.onInfinityScroll,\n });\n\n const shouldShowNothingFound =\n isReactNodeNotEmpty(nothingFoundContent) &&\n !isArrayNotEmpty(content) &&\n !infinityScrollConfig?.isLoading &&\n !infinityScrollConfig?.isEnabled;\n\n useEffect(() => {\n const scrollContainer = scrollRef.current;\n if (isEmpty(scrollContainer) || !isHorizontallyScrollable) {\n return;\n }\n\n const scrollHandler = () => {\n setIsScrolledAttribute(scrollContainer);\n };\n\n const resizeHandler = () => {\n setHasScrollBarAttribute(scrollContainer);\n };\n\n scrollContainer.addEventListener('scroll', scrollHandler);\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n scrollContainer.removeEventListener('scroll', scrollHandler);\n window.removeEventListener('resize', resizeHandler);\n };\n }, [scrollRef, isHorizontallyScrollable, setIsScrolledAttribute, setHasScrollBarAttribute]);\n\n const activeRowsSet = useMemo(() => new Set(activeRows), [activeRows]);\n\n const Table = TableRenders[renderMode];\n\n return (\n <div\n ref={ref}\n className={clsx(classes.flexibleTableWrapper, { [classes.scroll]: isHorizontallyScrollable })}\n >\n <Table.Root className={classes.root} {...addDataAttributes({ ...data, isLoading }, testId)}>\n {shouldRenderHeader && (\n <Table.Head className={classes.head}>\n <Table.Row className={classes.headerRow}>\n {columns.map((key, i) => {\n const {\n position,\n minWidth,\n width,\n maxWidth,\n titleAlign = 'left',\n right,\n left,\n title = '',\n shouldRenderDataId,\n } = config?.[key] ?? {};\n const isSticky = position === 'sticky' || (isFirstColumnSticky && i === 0);\n\n return (\n <Table.Header\n key={key}\n className={clsx(classes.header, {\n [classes.headerSticky]: isSticky,\n [classes.headerSecond]: isFirstColumnSticky && i === 1,\n })}\n style={{\n minWidth,\n width,\n maxWidth,\n textAlign: titleAlign,\n position: isSticky ? 'sticky' : position,\n right,\n left,\n }}\n onClick={isNotEmpty(onHeadClick) ? () => onHeadClick(key) : undefined}\n {...addDataAttributes({ id: shouldRenderDataId ? key : undefined })}\n >\n {applyAction(title, { value: headerContent?.[key] as HeaderContent[string] })}\n </Table.Header>\n );\n })}\n </Table.Row>\n </Table.Head>\n )}\n <Table.Body className={classes.body}>\n {isLoading ? (\n indexMap(6, (i) => <FlexibleTableRow {...getTableRowProps({} as Row, i)} key={i} />)\n ) : (\n <>\n {shouldShowNothingFound && (\n <Table.Row className={classes.nothingFoundRow}>\n <Table.Cell className={classes.nothingFound} colSpan={columns.length}>\n {nothingFoundContent}\n </Table.Cell>\n </Table.Row>\n )}\n\n {content.map((item, i) => (\n <FlexibleTableRow\n {...getTableRowProps(item, i)}\n isActive={activeRowsSet.has(i)}\n key={isNotEmpty(uniqueField) ? item[uniqueField] : i}\n />\n ))}\n\n {infinityScrollConfig?.isEnabled && (\n <Table.Row className={classes.loaderRow}>\n <Table.Cell className={classes.loaderCell} colSpan={columns.length}>\n <div ref={intersectionRef} className={classes.loader}>\n <ThemedPreloader type=\"dots\" testId={getTestId(testId, 'loader')} />\n </div>\n </Table.Cell>\n </Table.Row>\n )}\n </>\n )}\n </Table.Body>\n </Table.Root>\n </div>\n );\n}\n","import { FC } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { DocActions, IDocActionsProps } from './components';\nimport { DEFAULT_TIMEOUT } from './constants';\nimport { useStyles } from './FloatDocActions.styles';\n\nexport interface IFloatDocActionsProps extends IDocActionsProps {\n isOpen: boolean;\n}\n\nexport const FloatDocActions: FC<IFloatDocActionsProps> = ({\n isOpen,\n children,\n ...docActionsProps\n}) => {\n const classes = useStyles();\n\n return (\n <CSSTransition\n in={isOpen}\n timeout={DEFAULT_TIMEOUT}\n mountOnEnter\n unmountOnExit\n classNames={{\n enter: classes['slide-up-enter'],\n enterActive: classes['slide-up-enter-active'],\n exit: classes['slide-up-exit'],\n exitActive: classes['slide-up-exit-active'],\n }}\n >\n <DocActions {...docActionsProps}>{children}</DocActions>\n </CSSTransition>\n );\n};\n","export const DEFAULT_TIMEOUT = 150;\n","export const GROUP_PLACEMENTS = [\n 'left',\n 'right',\n 'middle',\n 'top',\n 'bottom',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n] as const;\n","import { FC, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { isNotEmpty, isNumberInteger } from '@true-engineering/true-react-platform-helpers';\nimport { getNumberInRange, getNumberLength } from '../../helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { INumberInputProps, NumberInput } from '../NumberInput';\nimport { useStyles, IIncrementInputStyles, inputStyles } from './IncrementInput.styles';\n\nexport interface IIncrementInputProps\n extends Omit<INumberInputProps, 'canBeFloat' | 'precision' | 'tweakStyles'>,\n ICommonProps<IIncrementInputStyles> {\n /** @default 1 */\n step?: number;\n}\n\nexport const IncrementInput: FC<IIncrementInputProps> = ({\n value,\n onChange,\n min,\n max,\n step = 1,\n intPartPrecision,\n tweakStyles,\n isDisabled,\n isReadonly,\n isInvalid,\n ...props\n}) => {\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'IncrementInput',\n });\n\n const classes = useStyles({ theme: tweakStyles });\n\n const isEditDisabled = isDisabled || isReadonly;\n\n const isIncreaseDisabled =\n isEditDisabled ||\n (isNotEmpty(intPartPrecision) && getNumberLength((value ?? 0) + step) > intPartPrecision) ||\n (isNotEmpty(max) && isNotEmpty(value) && value >= max);\n\n const isDecreaseDisabled =\n isEditDisabled || (isNotEmpty(min) && isNotEmpty(value) && value <= min);\n\n const increment = (): void => {\n onChange(getNumberInRange((value ?? 0) + step, min, max));\n };\n\n const decrement = (): void => {\n onChange(getNumberInRange((value ?? 0) - step, min, max));\n };\n\n useEffect(() => {\n if (!isNumberInteger(step)) {\n console.error('Параметр step должен быть целым числом');\n }\n }, [step]);\n\n return (\n <NumberInput\n {...props}\n isInvalid={isInvalid}\n isDisabled={isDisabled}\n isReadonly={isReadonly}\n min={min}\n max={max}\n intPartPrecision={intPartPrecision}\n onChange={onChange}\n value={value}\n tweakStyles={tweakInputStyles}\n >\n <div className={classes.buttons}>\n <button\n className={clsx(classes.button, {\n [classes.disabledButton]: isIncreaseDisabled,\n [classes.errorButton]: isInvalid,\n })}\n type=\"button\"\n disabled={isIncreaseDisabled}\n onClick={increment}\n >\n <div className={classes.icon}>\n <Icon type=\"plus\" />\n </div>\n </button>\n\n <button\n className={clsx(classes.button, {\n [classes.disabledButton]: isDecreaseDisabled,\n [classes.errorButton]: isInvalid,\n })}\n type=\"button\"\n disabled={isDecreaseDisabled}\n onClick={decrement}\n >\n <div className={classes.icon}>\n <Icon type=\"minus\" />\n </div>\n </button>\n </div>\n </NumberInput>\n );\n};\n","import { FC, ReactNode, MouseEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { CSSTransition } from 'react-transition-group';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n getTestId,\n isArrayNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { IconButton } from '../IconButton';\nimport { IModalPosition, IModalTransitionProps } from './types';\nimport { useStyles, IModalStyles, closeButtonStyles } from './Modal.styles';\n\nexport interface IModalProps extends ICommonProps<IModalStyles>, IModalTransitionProps {\n title?: ReactNode;\n /** @default 'l' */\n size?: 'l' | 'm' | 's';\n /** @default false */\n isFooterSticky?: boolean;\n footer?: ReactNode;\n /** @deprecated use {@link footer} */\n buttons?: ReactNode[];\n /** @default 'right' */\n buttonsAlign?: 'left' | 'center' | 'right';\n children?: ReactNode | ReactNode[];\n /** @default 'center' */\n position?: IModalPosition;\n /** @default true */\n hasCloseButton?: boolean;\n /** @default true */\n hasOverlay?: boolean;\n /** @default true */\n shouldCloseOnOverlayClick?: boolean;\n /** @default true */\n shouldCloseOnEsc?: boolean;\n /** @default true */\n shouldBlockScroll?: boolean;\n /** @default false */\n isOpen?: boolean;\n zIndex?: number;\n onClose?: () => void;\n}\n\nexport const Modal: FC<IModalProps> = ({\n data,\n tweakStyles,\n title,\n size = 'l',\n isFooterSticky = false,\n footer,\n buttons,\n buttonsAlign = 'right',\n hasCloseButton = true,\n hasOverlay = true,\n isOpen = false,\n position = 'center',\n children,\n zIndex,\n testId,\n shouldCloseOnOverlayClick = true,\n shouldCloseOnEsc = true,\n shouldBlockScroll = true,\n timeout = 150,\n unmountOnExit = true,\n onClose,\n ...restProps\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCloseButtonStyles = useTweakStyles({\n innerStyles: closeButtonStyles,\n tweakStyles,\n className: 'tweakCloseButton',\n currentComponentName: 'Modal',\n });\n\n const [isClickOnOverlay, setIsClickOnOverlay] = useState(false);\n\n const isModalOpen = restProps.in ?? isOpen;\n const hasFooter = isReactNodeNotEmpty(footer) || isArrayNotEmpty(buttons);\n const overlay = useRef<HTMLDivElement>(null);\n\n // Клик на оверлее обрабатываем через связку onMouseDown и onMouseUp, т.к. клик\n // создает ложные срабатывания (баг при старте клика на модалке и отпусканием мышки уже на оверлее)\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (onClose !== undefined && event.target === overlay.current) {\n setIsClickOnOverlay(true);\n }\n };\n\n const handleOutsideMouseUp = (event: MouseEvent) => {\n if (onClose === undefined) {\n return;\n }\n if (event.target === overlay.current && isClickOnOverlay) {\n onClose();\n }\n setIsClickOnOverlay(false);\n };\n\n const handleEscClose = useCallback(\n (event: KeyboardEvent) => {\n if (event.code === 'Escape' && onClose !== undefined) {\n onClose();\n }\n },\n [onClose],\n );\n\n useEffect(() => {\n if (!shouldCloseOnEsc || onClose === undefined || !isModalOpen) {\n return () => null;\n }\n\n document.addEventListener('keydown', handleEscClose);\n return () => document.removeEventListener('keydown', handleEscClose);\n }, [shouldCloseOnEsc, onClose, isModalOpen, handleEscClose]);\n\n return (\n <CSSTransition\n in={isModalOpen}\n timeout={timeout}\n unmountOnExit={unmountOnExit}\n classNames={{\n enter: classes['modal-enter'],\n enterActive: classes['modal-enter-active'],\n exit: classes['modal-exit'],\n exitActive: classes['modal-exit-active'],\n }}\n {...restProps}\n >\n <div className={classes.modalWrapper}>\n <RemoveScroll enabled={shouldBlockScroll} forwardProps>\n <div\n className={clsx(classes.root, classes[size], {\n [classes.overlay]: position !== 'static' && hasOverlay,\n [classes.sideBar]: position === 'left' || position === 'right',\n [classes.fixedPosition]: position !== 'static',\n })}\n style={{ zIndex }}\n {...addDataAttributes(data, testId)}\n >\n <div\n ref={overlay}\n className={clsx(classes.innerOverlay, classes[`position-${position}`])}\n onMouseDown={shouldCloseOnOverlayClick ? handleOutsideMouseDown : undefined}\n onMouseUp={shouldCloseOnOverlayClick ? handleOutsideMouseUp : undefined}\n >\n <div\n className={clsx(classes.modal, {\n [classes.withoutFooter]: !hasFooter,\n [classes.withStickyFooter]: isFooterSticky,\n })}\n >\n {hasCloseButton && (\n <div className={classes.close}>\n <IconButton\n testId={getTestId(testId, 'close-button')}\n tweakStyles={tweakCloseButtonStyles}\n view=\"cancel-light\"\n icon=\"close\"\n onClick={onClose}\n />\n </div>\n )}\n {isReactNodeNotEmpty(title) && (\n <h3\n className={clsx(classes.title, {\n [classes.titleWithCloseButton]: hasCloseButton,\n })}\n >\n {title}\n </h3>\n )}\n {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}\n {hasFooter && (\n <div\n className={clsx(classes.footerWrapper, {\n [classes.stickyFooterWrapper]: isFooterSticky,\n })}\n >\n <div\n className={clsx(classes.footer, classes[`buttons-${buttonsAlign}`], {\n [classes.stickyFooter]: isFooterSticky,\n })}\n >\n {isReactNodeNotEmpty(footer) ? footer : buttons}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </RemoveScroll>\n </div>\n </CSSTransition>\n );\n};\n","import { FC, MouseEvent, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles, useOnClickOutsideWithRef } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { IListItem, List } from '../List';\nimport { useStyles, IMoreMenuStyles } from './MoreMenu.styles';\n\nexport interface IMoreMenuProps extends ICommonProps<IMoreMenuStyles> {\n items: IListItem[];\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n hasDefaultStateBackground?: boolean;\n onMenuOpen?: () => void;\n onMenuClose?: () => void;\n}\n\n/** @deprecated Используйте {@link import('../NewMoreMenu').NewMoreMenu NewMoreMenu} */\nexport const MoreMenu: FC<IMoreMenuProps> = ({\n items,\n isDisabled = false,\n hasDefaultStateBackground = true,\n data,\n testId,\n tweakStyles,\n onMenuOpen,\n onMenuClose,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakList',\n currentComponentName: 'MoreMenu',\n });\n\n const [isMenuShown, setIsMenuShown] = useState(false);\n const list = useRef<HTMLDivElement>(null);\n const button = useRef<HTMLButtonElement>(null);\n\n const isButtonDisabled = isDisabled || items.length === 0;\n\n const toggleMenu = (event: MouseEvent) => {\n const isShown = !isMenuShown;\n event.stopPropagation();\n setIsMenuShown(isShown);\n if (isShown) {\n onMenuOpen?.();\n } else {\n onMenuClose?.();\n }\n };\n\n const handleCloseMenu = () => {\n setIsMenuShown(false);\n onMenuClose?.();\n };\n\n useOnClickOutsideWithRef(list, handleCloseMenu, button);\n\n return (\n <div className={classes.root}>\n <button\n ref={button}\n className={clsx(classes.button, {\n [classes.hasCircle]: hasDefaultStateBackground,\n [classes.disabled]: isButtonDisabled,\n [classes.active]: isMenuShown,\n })}\n onClick={!isButtonDisabled ? toggleMenu : undefined}\n {...addDataAttributes(data, testId)}\n >\n <div className={classes.icon}>\n <Icon type=\"menu\" />\n </div>\n </button>\n {isMenuShown && !isButtonDisabled && (\n <div className={classes.menu} ref={list}>\n <List\n items={items}\n testId={getTestId(testId, 'list')}\n tweakStyles={tweakListStyles}\n onClick={handleCloseMenu}\n />\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { useOnClickOutside, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport {\n MultiSelectList,\n IMultiSelectListValues,\n IMultiSelectLocale,\n IMultiSelectLocaleKey,\n} from '../MultiSelectList';\nimport { MultiSelectInput } from './components';\nimport { IHorizontalCornerConnection } from './types';\nimport { useStyles, IMultiSelectStyles, multiSelectListStyles } from './MultiSelect.styles';\n\nexport interface IMultiSelectProps<Value = string> extends ICommonProps<IMultiSelectStyles> {\n value?: IMultiSelectListValues<Value>;\n /** @default 'full' */\n corners?: IHorizontalCornerConnection;\n /** @default false */\n isInvalid?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default '' */\n placeholder?: string;\n localeKey?: IMultiSelectLocaleKey;\n locale?: IMultiSelectLocale;\n onChange: (value?: IMultiSelectListValues<Value>) => void;\n fetchOptions: (value?: string, page?: number) => Promise<Value[]>;\n}\n\nexport function MultiSelect<Value = string>({\n value,\n corners = 'full',\n isInvalid = false,\n isRequired = false,\n isDisabled = false,\n placeholder = '',\n localeKey,\n locale,\n testId,\n data,\n onChange,\n fetchOptions,\n tweakStyles,\n}: IMultiSelectProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakMultiSelectListStyles = useTweakStyles({\n innerStyles: multiSelectListStyles,\n tweakStyles,\n className: 'tweakMultiSelectList',\n currentComponentName: 'MultiSelect',\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const ref = useRef(null);\n\n const handleOnClose = () => {\n setIsOpen(false);\n };\n\n useOnClickOutside(ref, handleOnClose, classes.root);\n\n return (\n <div\n className={clsx(\n classes.root,\n classes[corners],\n isOpen && classes.open,\n isInvalid && !isDisabled && classes.invalid,\n isRequired && classes.required,\n isDisabled && classes.disabled,\n )}\n {...addDataAttributes(data, testId)}\n >\n {/* Input */}\n <MultiSelectInput\n value={value}\n isOpen={isOpen}\n isDisabled={isDisabled}\n placeholder={placeholder}\n onToggle={(state) => setIsOpen(state)}\n />\n {/* Dropdown */}\n {isOpen && (\n <div className={classes.listContainer} ref={ref}>\n <MultiSelectList\n tweakStyles={tweakMultiSelectListStyles}\n value={value}\n localeKey={localeKey}\n locale={locale}\n fetchOptions={fetchOptions}\n onChange={onChange}\n onClose={handleOnClose}\n />\n </div>\n )}\n </div>\n );\n}\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, isArrayEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps, IRenderNode } from '../../types';\nimport { Icon } from '../Icon';\nimport { IListItem, IListSize, List } from '../List';\nimport { IWithPopupProps, WithPopup } from '../WithPopup';\nimport { IWithPopupTriggerProps } from '../WithPopup/types';\nimport { useStyles, INewMoreMenuStyles } from './NewMoreMenu.styles';\n\nexport interface INewMoreMenuProps\n extends Pick<\n IWithPopupProps,\n | 'placement'\n | 'middlewares'\n | 'shouldHideOnScroll'\n | 'shouldRenderInBody'\n | 'canBeFlipped'\n | 'onToggle'\n >,\n ICommonProps<INewMoreMenuStyles> {\n items: IListItem[];\n renderTrigger?: IRenderNode<IWithPopupTriggerProps>;\n listSize?: IListSize;\n /** @default false */\n isDisabled?: boolean;\n /** @default true */\n hasDefaultStateBackground?: boolean;\n}\n\nexport const NewMoreMenu: FC<INewMoreMenuProps> = ({\n items,\n isDisabled = false,\n hasDefaultStateBackground = true,\n data,\n renderTrigger,\n listSize,\n testId,\n tweakStyles,\n ...rest\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakWithPopupStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakWithPopup',\n currentComponentName: 'NewMoreMenu',\n });\n\n const tweakListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakList',\n currentComponentName: 'NewMoreMenu',\n });\n\n const defaultTrigger = ({ triggerProps, referenceProps }: IWithPopupTriggerProps) => (\n <button\n className={clsx(classes.button, {\n [classes.hasCircle]: hasDefaultStateBackground,\n [classes.disabled]: triggerProps.isDisabled,\n [classes.active]: triggerProps.isActive,\n })}\n disabled={triggerProps.isDisabled}\n {...addDataAttributes(data, testId)}\n {...referenceProps}\n >\n <div className={classes.icon}>\n <Icon type=\"menu\" />\n </div>\n </button>\n );\n\n return (\n <WithPopup\n isDisabled={isDisabled || isArrayEmpty(items)}\n tweakStyles={tweakWithPopupStyles}\n {...rest}\n trigger={renderTrigger ?? defaultTrigger}\n >\n {({ onClose }) => (\n <List items={items} size={listSize} tweakStyles={tweakListStyles} onClick={onClose} />\n )}\n </WithPopup>\n );\n};\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isReactNodeNotEmpty,\n isStringNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon, IIcon, renderIcon } from '../Icon';\nimport { INotificationType } from './types';\nimport { useStyles, INotificationStyles } from './Notification.styles';\n\nexport interface INotificationProps extends ICommonProps<INotificationStyles> {\n type: INotificationType;\n /** @default true */\n isFullWidth?: boolean;\n text?: string;\n title?: string;\n /** @default 's' */\n size?: 's' | 'm' | 'l';\n icon?: IIcon;\n children?: ReactNode;\n}\n\nexport const Notification: FC<INotificationProps> = ({\n children,\n type,\n isFullWidth = true,\n text,\n title,\n testId,\n size = 's',\n data,\n icon,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const hasText = isStringNotEmpty(text);\n const hasTitle = isStringNotEmpty(title);\n const isDefaultType = type !== 'custom';\n const hasIcon = isReactNodeNotEmpty(icon) || isDefaultType;\n\n return (\n <div\n className={clsx(classes.root, classes[size], classes[type], {\n [classes.inline]: !isFullWidth,\n [classes.withTitle]: hasTitle,\n [classes.withText]: hasText,\n })}\n {...addDataAttributes(data, testId)}\n >\n {hasIcon && (\n <div className={classes.icon}>\n {isReactNodeNotEmpty(icon)\n ? renderIcon(icon)\n : isDefaultType && <Icon type={`status-${type}`} />}\n </div>\n )}\n <div className={classes.body}>\n {hasTitle && (\n <span className={classes.title} {...addDataTestId(testId, 'title')}>\n {title}\n </span>\n )}\n {hasText && (\n <span className={classes.text} {...addDataTestId(testId, 'text')}>\n {text}\n </span>\n )}\n {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}\n </div>\n </div>\n );\n};\n","import { FC, FocusEvent, useMemo, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes, getTestId } from '@true-engineering/true-react-platform-helpers';\nimport {\n findCountryByCode,\n getCountryCodeFromPhone,\n getFullPhone,\n getPhoneMask,\n getPhoneObjFromString,\n} from '../../helpers';\nimport { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Flag } from '../Flag';\nimport { Icon } from '../Icon';\nimport { IChangeInputEvent, IInputProps, Input } from '../Input';\nimport { PhoneInputCountryList } from './components';\nimport { DEFAULT_VALUE } from './constants';\nimport { IChangePhoneInputEvent, IPhoneInfo, IPhoneValue } from './types';\nimport { inputStyles, IPhoneInputStyles, useStyles } from './PhoneInput.styles';\n\nexport interface IPhoneInputProps\n extends Omit<\n IInputProps,\n 'value' | 'onChange' | 'type' | 'mask' | 'units' | 'placeholder' | 'tweakStyles'\n >,\n ICommonProps<IPhoneInputStyles> {\n /** @default 'ru' */\n locale?: string;\n /** @default 'Поиск' */\n codeSearchPlaceholder?: string;\n /** @default 'Ничего не найдено' */\n noMatchesLabel?: string;\n /** @default { phoneNumber: '', dialCode: '' } */\n value?: IPhoneValue;\n onChange: (phone: IPhoneValue, event: IChangePhoneInputEvent) => void;\n}\n\nexport const PhoneInput: FC<IPhoneInputProps> = ({\n locale = 'ru',\n value = DEFAULT_VALUE,\n onChange,\n data,\n testId,\n isDisabled,\n isInvalid,\n isActive,\n tweakStyles,\n codeSearchPlaceholder = 'Поиск',\n noMatchesLabel = 'Ничего не найдено',\n ...inputProps\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakInputStyles = useTweakStyles({\n innerStyles: inputStyles,\n tweakStyles,\n className: 'tweakInput',\n currentComponentName: 'PhoneInput',\n });\n\n const tweakCountryListStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakCountryList',\n currentComponentName: 'PhoneInput',\n });\n\n const [isListOpen, setIsListOpen] = useState(false);\n const [isFocused, setFocused] = useState(false);\n\n const list = useRef<HTMLDivElement>(null);\n const inputWrapper = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const phoneWithCode = getFullPhone(value);\n\n const countryCode = useMemo(\n () => value?.countryCode ?? getCountryCodeFromPhone(phoneWithCode),\n [phoneWithCode, value?.countryCode],\n );\n\n const handleClose = () => {\n setIsListOpen(false);\n };\n\n const handleChange = (inputValue: string, event: IChangeInputEvent) => {\n // if (event.type === 'change') - нужно из-за InputMask\n // Помимо change, еще могут приходить focus и blur, когда input пустой и тогда происходят неприятные сайд-эффекты\n if (event.type === 'change') {\n const newValue = inputValue.replace(/[^0-9]/g, '');\n let selectedCountryCode = countryCode;\n\n const selectedCountry = findCountryByCode(countryCode);\n\n // Проверяем введенный номер на соответствие с selectedCountry\n // Если не соответствует, то пытаемся найти countryCode, для которой\n // данный номер будет валидным (функция getPhoneObjFromString)\n if (selectedCountry !== undefined) {\n // Сначала проверяем, что введенный телефон удовлетворяет одному\n // из fullCode для выбранной страны\n const isSomeFullCodeValid = selectedCountry.fullCodes.some((fullCode) => {\n if (newValue.length >= fullCode.length) {\n return newValue.startsWith(fullCode);\n } else {\n return fullCode.startsWith(newValue);\n }\n });\n\n // После проверяем, что введенный телефон удовлетворяет dialCode для выбранной страны\n const isDialCodeValid = newValue.startsWith(selectedCountry.dialCode);\n\n if (!isSomeFullCodeValid || !isDialCodeValid) {\n selectedCountryCode = undefined;\n }\n }\n\n onChange(getPhoneObjFromString(newValue, selectedCountryCode), event);\n }\n };\n\n const handleSelect = (newPhoneInfo: IPhoneInfo, event: IChangePhoneInputEvent) => {\n if (newPhoneInfo.countryCode !== countryCode) {\n onChange(\n {\n phoneNumber:\n newPhoneInfo.dialCode !== value.dialCode\n ? ''\n : getPhoneObjFromString(phoneWithCode).phoneNumber,\n dialCode: newPhoneInfo.dialCode,\n countryCode: newPhoneInfo.countryCode,\n },\n event,\n );\n }\n handleClose();\n\n const input = inputRef?.current;\n if (input !== null) {\n input.focus();\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n if (inputProps.onFocus !== undefined) {\n inputProps?.onFocus(event);\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n if (inputProps.onBlur !== undefined) {\n inputProps?.onBlur(event);\n }\n };\n\n useOnClickOutsideWithRef(list, handleClose, inputWrapper);\n\n return (\n <div className={classes.root} {...addDataAttributes(data, testId)}>\n <div\n className={clsx(classes.countrySelectContainer, {\n [classes.disabledCountrySelect]: isDisabled,\n [classes.invalidBorder]: isInvalid,\n [classes.focusedBorder]: isActive || isListOpen || isFocused,\n })}\n ref={inputWrapper}\n onClick={!isDisabled ? () => setIsListOpen(!isListOpen) : undefined}\n >\n <div className={classes.flag}>\n <Flag countryCode={countryCode} />\n </div>\n <div\n className={clsx(classes.arrow, {\n [classes.up]: isListOpen,\n [classes.invalidArrow]: isInvalid,\n })}\n >\n <Icon type=\"chevron-down\" />\n </div>\n </div>\n\n <Input\n value={phoneWithCode}\n mask={getPhoneMask(countryCode)}\n // alwaysShowMask={false}\n ref={inputRef}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isActive={isListOpen || isActive}\n testId={getTestId(testId, 'input')}\n tweakStyles={tweakInputStyles}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...inputProps}\n />\n\n {isListOpen && (\n <div className={classes.flagListContainer} ref={list}>\n <PhoneInputCountryList\n selectedCountryCode={countryCode}\n placeholder={codeSearchPlaceholder}\n locale={locale}\n tweakStyles={tweakCountryListStyles}\n noMatchesLabel={noMatchesLabel}\n onChange={handleSelect}\n closeList={handleClose}\n />\n </div>\n )}\n </div>\n );\n};\n","import { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n isNotEmpty,\n isReactNodeNotEmpty,\n addDataAttributes,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { IRadioButtonSize } from './types';\nimport { useStyles, IRadioButtonStyles } from './RadioButton.styles';\n\nexport interface IRadioButtonProps<Value extends string> extends ICommonProps<IRadioButtonStyles> {\n children?: ReactNode;\n value: Value;\n groupName: string;\n size?: IRadioButtonSize;\n isChecked?: boolean;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isInvalid?: boolean;\n onChange: (value: Value) => void | Promise<void>;\n}\n\nexport function RadioButton<Value extends string>({\n children,\n value,\n groupName,\n size,\n isChecked,\n isDisabled = false,\n isInvalid = false,\n data,\n testId,\n tweakStyles,\n onChange,\n}: IRadioButtonProps<Value>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <label\n className={clsx(classes.label, isNotEmpty(size) && classes[size], {\n [classes.isDisabled]: isDisabled,\n })}\n htmlFor={`${groupName}--${value}`}\n {...addDataAttributes(data, testId)}\n >\n <input\n id={`${groupName}--${value}`}\n type=\"radio\"\n value={value}\n name={groupName}\n checked={isChecked}\n disabled={isDisabled}\n onChange={(event) => onChange(event.target.value as Value)}\n className={clsx(classes.input, {\n [classes.isDisabled]: isDisabled,\n [classes.isInvalid]: isInvalid,\n })}\n />\n {isReactNodeNotEmpty(children) && <span className={classes.content}>{children}</span>}\n </label>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataTestId,\n addDataAttributes,\n hasDuplicates,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { renderIcon } from '../Icon';\nimport { ISelectorOption, ISelectorValue } from './types';\nimport { getSelectorLineStyle, ISelectorStyles, useStyles } from './Selector.styles';\n\nexport interface ISelectorProps<V extends ISelectorValue> extends ICommonProps<ISelectorStyles> {\n options: Array<ISelectorOption<V>>;\n value?: V;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isRequired?: boolean;\n /** @default false */\n isInvalid?: boolean;\n /** @default true */\n hasSameOptionsWidth?: boolean;\n /** @default 'left' */\n iconPosition?: 'left' | 'right';\n /** @default 'l' */\n size?: 's' | 'm' | 'l';\n onChange: (value: V) => void;\n}\n\nexport function Selector<V extends ISelectorValue>({\n options,\n value,\n isDisabled = false,\n isRequired = false,\n isInvalid = false,\n hasSameOptionsWidth = true,\n iconPosition = 'left',\n size = 'l',\n testId,\n data,\n tweakStyles,\n onChange,\n}: ISelectorProps<V>): JSX.Element {\n const classes = useStyles({ theme: tweakStyles });\n const optionsValues = options.map((opt) => opt.value);\n\n const [elementsData, setElementsData] = useState<HTMLElement[]>([]);\n const listRef = useRef<HTMLDivElement>(null);\n\n if (hasDuplicates(optionsValues)) {\n console.error('Selector: Значения options.value должны быть уникальными');\n }\n\n useEffect(() => {\n const listEl = listRef.current;\n if (listEl === null) {\n return;\n }\n\n setElementsData([...listEl.querySelectorAll<HTMLElement>(`.${classes.optionWrapper}`)]);\n }, [options, size]);\n\n const activeElementData = isNotEmpty(value)\n ? elementsData[optionsValues.indexOf(value)]\n : undefined;\n\n return (\n <div\n className={clsx(classes.root, classes.selector, {\n [classes.iconFromRight]: iconPosition === 'right',\n [classes.invalid]: isInvalid,\n [classes.required]: isRequired,\n [classes.autoWidth]: hasSameOptionsWidth,\n })}\n ref={listRef}\n {...addDataAttributes(data, testId)}\n >\n {isNotEmpty(activeElementData) && (\n <div className={classes.line} style={getSelectorLineStyle(activeElementData)} />\n )}\n\n {options.map((option) => {\n const optionId = option.value.toString();\n const isDisabledOption = option.isDisabled ?? isDisabled;\n const isActiveOption = option.value === value;\n\n return (\n <div key={optionId} className={classes.optionWrapper}>\n <button\n type=\"button\"\n className={clsx(classes.option, classes[size], {\n [classes.active]: isActiveOption,\n [classes.disabled]: isDisabledOption,\n })}\n disabled={isDisabledOption}\n onClick={!isDisabledOption ? () => onChange(option.value) : undefined}\n {...addDataTestId(testId, optionId)}\n >\n {isReactNodeNotEmpty(option.icon) && (\n <div className={classes.optionIcon}>{renderIcon(option.icon)}</div>\n )}\n <div className={classes.optionText}>{option.label}</div>\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","import { FC, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { IIcon, renderIcon } from '../Icon';\nimport { IStatusColor, IStatusSize } from './types';\nimport { useStyles, IStatusStyles } from './Status.styles';\n\nexport interface IStatusProps extends ICommonProps<IStatusStyles> {\n children: ReactNode;\n color: IStatusColor;\n icon?: IIcon;\n /** @default 's' */\n size?: IStatusSize;\n /** @default 'right' */\n iconPosition?: 'left' | 'right';\n badge?: ReactNode;\n}\n\nexport const Status: FC<IStatusProps> = ({\n children,\n color,\n size = 's',\n icon,\n iconPosition = 'right',\n badge,\n tweakStyles,\n testId,\n data,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <span\n className={clsx(classes.root, classes[size], classes[color])}\n {...addDataAttributes(data, testId)}\n >\n {isReactNodeNotEmpty(children) && <span className={classes.text}>{children}</span>}\n {isReactNodeNotEmpty(icon) && (\n <span className={clsx(classes.icon, iconPosition === 'left' && classes.iconLeft)}>\n {renderIcon(icon)}\n </span>\n )}\n {isReactNodeNotEmpty(badge) && <span className={classes.badge}>{badge}</span>}\n </span>\n );\n};\n","import { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n addDataTestId,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { ISwitchSize, ISwitchState } from './types';\nimport { useStyles, ISwitchStyles } from './Switch.styles';\n\nexport interface ISwitchProps<V extends string> extends ICommonProps<ISwitchStyles> {\n children?: ReactNode;\n value: V;\n /** @default false */\n isChecked: boolean | undefined;\n /** @default false */\n isDisabled?: boolean;\n /** @default false */\n isInvalid?: boolean;\n /** @default 'right' */\n labelPosition?: 'left' | 'right';\n /** @default 'primary' */\n color?: 'primary' | 'secondary';\n size?: ISwitchSize;\n onChange: (state: ISwitchState<V>) => void;\n}\n\nexport const Switch = <V extends string>({\n isDisabled = false,\n isChecked = false,\n isInvalid = false,\n value,\n children,\n labelPosition = 'right',\n color = 'primary',\n size,\n data,\n tweakStyles,\n testId,\n onChange,\n}: ISwitchProps<V>): JSX.Element => {\n const classes = useStyles({ theme: tweakStyles });\n\n const handleChange = () => onChange({ name: value, isEnabled: !isChecked });\n\n return (\n <label\n className={clsx(classes.root, classes[color], isNotEmpty(size) && classes[size], {\n [classes.disabled]: isDisabled,\n [classes.checked]: isChecked,\n [classes.invalid]: isInvalid,\n })}\n {...addDataAttributes(data, testId)}\n >\n <span className={classes.switch}>\n <input\n type=\"checkbox\"\n name={value}\n className={classes.input}\n onChange={isDisabled ? undefined : handleChange}\n checked={isChecked}\n disabled={isDisabled}\n {...addDataTestId(testId, 'input')}\n />\n </span>\n {isReactNodeNotEmpty(children) && (\n <span\n className={clsx(\n classes.label,\n classes[labelPosition === 'left' ? 'labelLeft' : 'labelRight'],\n )}\n >\n {children}\n </span>\n )}\n </label>\n );\n};\n","import { FC } from 'react';\nimport clsx from 'clsx';\nimport { addDataAttributes } from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { TextWithTooltip } from '../TextWithTooltip';\nimport { useStyles, ITextWithInfoStyles } from './TextWithInfo.styles';\n\nexport interface ITextWithInfoProps extends ICommonProps<ITextWithInfoStyles> {\n text: string;\n /** @default false */\n isSelected?: boolean;\n textTooltip?: string;\n info?: {\n infoTooltip?: string;\n link?: string;\n };\n onClick: () => void;\n}\n\nexport const TextWithInfo: FC<ITextWithInfoProps> = ({\n text,\n isSelected = false,\n info,\n textTooltip,\n onClick,\n testId,\n data,\n tweakStyles,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n return (\n <div\n className={clsx(classes.root, isSelected && classes.selected)}\n {...addDataAttributes(data, testId)}\n >\n <div className={classes.container}>\n <div className={classes.text} onClick={onClick}>\n {textTooltip !== undefined ? (\n <TextWithTooltip tooltipText={textTooltip}>{text}</TextWithTooltip>\n ) : (\n text\n )}\n </div>\n {info && (\n <a className={classes.info} href={info.link} target=\"_blank\" rel=\"noopener noreferrer\">\n {info.infoTooltip !== undefined ? (\n <TextWithTooltip tooltipText={info.infoTooltip}>\n <Icon type=\"information\" />\n </TextWithTooltip>\n ) : (\n <Icon type=\"information\" />\n )}\n </a>\n )}\n </div>\n </div>\n );\n};\n","import { FC, ReactNode, useEffect } from 'react';\nimport clsx from 'clsx';\nimport {\n addDataAttributes,\n isEmpty,\n isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport { DEFAULT_TIMEOUT } from './constants';\nimport { IToasterType } from './types';\nimport { IToasterStyles, useStyles } from './Toaster.styles';\n\nexport interface IToasterProps extends ICommonProps<IToasterStyles> {\n /** @default 'error' */\n type?: IToasterType;\n title?: ReactNode;\n text?: ReactNode;\n children?: ReactNode;\n /**\n * Время автоматического закрытия тостера в миллисекундах\n * @default 7000\n */\n timeout?: number;\n /** @default false */\n hasCloseButton?: boolean;\n /** @default false */\n shouldCloseOnClick?: boolean;\n onClose?: () => void;\n onTimeEnd?: () => void;\n}\n\nexport const Toaster: FC<IToasterProps> = ({\n type = 'error',\n title,\n text,\n children,\n timeout = DEFAULT_TIMEOUT,\n hasCloseButton = false,\n shouldCloseOnClick = false,\n data,\n testId,\n tweakStyles,\n onClose,\n onTimeEnd,\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakCloseButtonStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakCloseButton',\n currentComponentName: 'Toaster',\n });\n\n useEffect(() => {\n if (!Number.isFinite(timeout) || isEmpty(onTimeEnd)) {\n return;\n }\n\n const timeoutId = window.setTimeout(() => onTimeEnd(), timeout);\n\n return () => window.clearTimeout(timeoutId);\n }, []);\n\n return (\n <div\n className={classes.root}\n onClick={shouldCloseOnClick ? onClose : undefined}\n {...addDataAttributes(data, testId)}\n >\n <div className={clsx(classes.iconContainer, classes[type])}>\n <Icon type={`status-${type}`} />\n </div>\n <div>\n {isReactNodeNotEmpty(title) && <div className={classes.title}>{title}</div>}\n {isReactNodeNotEmpty(text) && <div className={classes.text}>{text}</div>}\n {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}\n </div>\n {hasCloseButton && isNotEmpty(onClose) && (\n <div className={classes.close}>\n <IconButton\n view=\"cancel-light\"\n icon=\"close-window\"\n tweakStyles={tweakCloseButtonStyles}\n onClick={onClose}\n />\n </div>\n )}\n </div>\n );\n};\n","export const DEFAULT_TIMEOUT = 7 * 1000; // 7 seconds\n","import { FC } from 'react';\nimport { getTestId, isReactNodeNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { ITooltipProps, Tooltip } from '../Tooltip';\nimport { IWithPopupProps, WithPopup } from '../WithPopup';\nimport { IWithTooltipStyles, withPopupStyles } from './WithTooltip.styles';\n\nexport interface IWithTooltipProps\n extends Omit<\n IWithPopupProps,\n 'trigger' | 'children' | 'placement' | 'eventType' | 'isTriggerWrapped' | 'tweakStyles'\n >,\n ICommonProps<IWithTooltipStyles> {\n children: IWithPopupProps['trigger'];\n /** @default 'hover' */\n eventType?: IWithPopupProps['eventType'];\n /** @default 'top' */\n placement?: IWithPopupProps['placement'];\n tooltipText?: ITooltipProps['text'];\n /** @default 'tooltip' */\n tooltipView?: ITooltipProps['view'];\n /** @default 'info' */\n tooltipType?: ITooltipProps['type'];\n /** @default 'undefined' */\n tooltipSize?: ITooltipProps['size'];\n}\n\nexport const WithTooltip: FC<IWithTooltipProps> = ({\n children,\n eventType = 'hover',\n placement = 'top',\n tooltipText,\n tooltipView = 'tooltip',\n tooltipType = 'info',\n tooltipSize,\n isDisabled = false,\n popupData,\n tweakStyles,\n ...restProps\n}) => {\n const tweakWithPopupStyles = useTweakStyles({\n innerStyles: withPopupStyles,\n tweakStyles,\n className: 'tweakWithPopup',\n currentComponentName: 'WithTooltip',\n });\n\n const tweakTooltipStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakTooltip',\n currentComponentName: 'WithTooltip',\n });\n\n return (\n <WithPopup\n trigger={children}\n placement={placement}\n eventType={eventType}\n popupData={{ ...popupData, tooltipView }}\n isDisabled={isDisabled || !isReactNodeNotEmpty(tooltipText)}\n isTriggerWrapped\n tweakStyles={tweakWithPopupStyles}\n {...restProps}\n >\n <Tooltip\n view={tooltipView}\n type={tooltipType}\n text={tooltipText}\n size={tooltipSize}\n tweakStyles={tweakTooltipStyles}\n testId={getTestId(restProps.testId, 'tooltip')}\n />\n </WithPopup>\n );\n};\n","import { useMemo } from 'react';\nimport { isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';\n\nexport const useMerge = <T>(one?: T, two?: T): T | undefined =>\n useMemo(\n () => (isNotEmpty(one) && isNotEmpty(two) ? mergeStyles(one, two) : one ?? two),\n [one, two],\n );\n"],"names":["colors","FONT_MAIN","FONT_MEDIUM","FONT_LABEL","FONT_DISABLED","GREY_ACTIVE","BORDER_MAIN","BORDER_LIGHT","GREY_HOVER","GREY_FOCUS","GREY_DISABLED","GREY_BACKGROUND","CLASSIC_WHITE","RED_ACTIVE","RED_HOVER","RED_WARNING","RED_WARNING_LIGHT","RED_BACKGROUND","ORANGE_BACKGROUND","GREEN_BACKGROUND","BLUE_BACKGROUND","GREEN_FOCUS","ORANGE_FOCUS","dimensions","BORDER_RADIUS_LARGE","BORDER_RADIUS_MEDIUM","BORDER_RADIUS_STD","BORDER_RADIUS_SMALL","BORDER_RADIUS_EXTRA_SMALL","CONTROL","HEIGHT","PADDING","ICON_SIZE","ICON_INNER_SIZE","ICON_GAP","Z_INDEX","CONTROL_INVALID","CONTROL_FOCUS","helpers","withAngle","angleSize","position","distance","display","marginTop","boxShadow","border","borderRadius","content","top","left","right","width","height","borderLeft","borderRight","borderBottom","withScrollBar","boxSizing","overflow","minHeight","backgroundColor","backgroundClip","scrollbarWidth","scrollbarColor","animations","defaultTransition","slideUp","opacity","transform","transition","transitionProperty","common","ThemeContext","createContext","ThemeProvider","Provider","useTheme","useContext","mixStyles","tweakStyles","flat","filter","isObject","useMixedStyles","baseStyles","useMemo","useThemeComponentStyles","componentName","components","isNotEmpty","isTweakStyle","key","startsWith","areStylesNotEmpty","Object","keys","every","getTweakStylesCache","mergedStyles","cache","WeakMap","styles","idx","next","at","has","set","get","getNext","first","rest","isArrayNotEmpty","mergeStyles","tweakStylesCache","useStyles","createUseStyles","createThemedStyles","second","isString","process","env","NODE_ENV","invalidClasses","console","error","checkStyles","theme","themeStyles","data","resultStyles","useDidMountEffect","effect","dependencies","isMountedRef","useRef","useEffect","unmount","current","minWidthModifier","name","enabled","phase","requires","fn","state","popper","minWidth","rects","reference","elements","style","offsetWidth","phoneInfo","countryEn","countryRu","countryCode","phoneMask","dialCode","dialCodePriority","fullCodes","areaCodes","mimeTypes","aac","abw","arc","avi","azw","bin","bmp","bz","bz2","csh","css","csv","doc","docx","eot","epub","gz","gif","htm","html","ico","ics","jar","jpeg","jpg","js","json","jsonld","mid","mjs","mp3","mpeg","mpkg","odp","ods","odt","oga","ogv","ogx","opus","otf","png","pdf","php","ppt","pptx","rar","rtf","sh","svg","swf","tar","tif","tiff","ts","ttf","txt","vsd","wav","weba","webm","webp","woff","woff2","xhtml","xls","xlsx","xml","xul","zip","findCountryByCode","countriesList","find","info","findCountryIndexByCode","findIndex","getCountryTextByLocale","country","locale","toLowerCase","sortCountriesByLocale","sort","countryA","countryB","localeCompare","checkSearchStringInCountry","searchString","checkValue","trim","replace","split","map","part","some","v","getFullPhone","phone","phoneNumber","getCountryCodeFromPhone","phoneWithCode","isStringEmpty","matchedCountries","fullCode","length","highestPriorityCountries","a","b","getPhoneObjFromString","fullPhone","newCountryCode","slice","DEFAULT_PHONE_MASK","getPhoneMask","mask","countrySettings","dialCodeLength","areaAndPhoneMask","substring","repeat","transformToKebab","string","result","forEach","char","getParentNode","element","nodeName","document","parentNode","host","hasExactParent","parent","getStyleComputedProperty","nodeType","getComputedStyle","getScrollParent","body","ownerDocument","overflowX","overflowY","test","getNumberInRange","value","min","max","Infinity","Math","formatStringNumber","val","separator","parts","join","formatNumber","isNaN","String","removeStringFormat","stringToNumber","trimmed","num","Number","setCaretPosition","elem","caretPos","selectionStart","focus","setSelectionRange","isSpaceChar","match","getNumberLength","n","toString","genericMemo","memo","useDropdown","isOpen","onDropdownClose","referenceElement","dropdownElement","options","dependenciesForPositionUpdating","shouldUsePopper","shouldRenderInBody","shouldHideOnScroll","scrollParent","canBeFlipped","modifiers","placement","flipOptions","popperData","scrollParentEl","addEventListener","removeEventListener","usePopper","offset","fallbackPlacements","update","useLatestRef","ref","useLayoutEffect","useIntersectionRef","observerOptions","optionsRef","disconnect","observer","IntersectionObserver","isIntersecting","isDisabled","onIntersection","onIntersectionEnd","node","observe","useResizeRef","ResizeObserver","entry","onChange","onTargetChange","target","useIsMounted","isMounted","useCallback","useMergedRefs","refs","mergeRefs","checkElementParentsClassNames","className","classList","contains","parentElement","isElementOneOfParents","elToSearch","useOnClickOutsideWithRef","refOrGetter","handler","ignoreRef","useOnClickOutside","ignoreClassName","listener","event","isFunction","ignoreElem","isEmpty","useTweakStyles","innerStyles","currentComponentName","iconsMap","avatar","calendar","check","close","information","menu","minus","plus","search","root","alignItems","Icon","type","testId","classes","icon","icons","jsx","addDataAttributes","dangerouslySetInnerHTML","__html","renderIcon","minWidthRelativeToTrigger","size","apply","assign","floating","trigger","clickable","cursor","active","disabled","popup","zIndex","outline","arrow","animationEnd","animationStart","extend","visibility","WithPopup","children","middlewares","eventType","hoverDelay","popupOffset","arrowProps","popupData","shouldStopPropagation","isTriggerWrapped","shouldShowArrow","isMinWidthSameAsTrigger","hoverOptions","clickOptions","focusOptions","dismissOptions","transitionOptions","onToggle","setIsOpen","useState","isActive","arrowRef","handleToggle","stopPropagation","floatingStyles","context","useFloating","open","middleware","flip","fallbackAxisSideDirection","whileElementsMounted","autoUpdate","onOpenChange","hover","useHover","delay","handleClose","safePolygon","useFocus","click","useClick","dismiss","useDismiss","ancestorScroll","getFloatingProps","getReferenceProps","useInteractions","status","useTransitionStatus","duration","referenceProps","setReference","onClick","triggerElement","applyAction","triggerProps","jsxs","Fragment","clsx","FloatingPortal","setFloating","FloatingArrow","floatingContext","onClose","gap","fontSize","whiteSpace","padding","default","destructive","focused","disabledItem","spacer","withIconGap","paddingLeft","ITEM_HORIZONTAL_PADDING","flexShrink","flexGrow","chevron","ListItem","item","nestedItems","isFocused","shouldDrawSpacerAbove","shouldDrawSpacerBelow","view","addClickHandler","isReactNodeNotEmpty","listStyle","margin","textAlign","withPopupStyles","List","items","filteredItems","isHidden","i","itemProps","getTestId","itemOnClick","handleItemClick","account","accountName","accountNameOpened","accountChevron","accountChevronOpened","accountMenu","avatarIcon","marginRight","fullWidth","animationDelay","fadedDot","animationDuration","animationIterationCount","animationName","dot","DotsPreloader","DefaultPreloader","viewBox","xmlns","x1","y1","x2","y2","id","stopColor","stopOpacity","fill","d","stroke","strokeWidth","attributeName","attributeType","from","to","dur","begin","repeatCount","SvgPreloader","PreloaderIcon","preloaders","dots","logo","currentColor","color","ThemedPreloader","useCurrentColor","tweakDotsPreloaderStyles","tweakSvgPreloaderStyles","justifyContent","maxWidth","pointerEvents","primary","secondary","warning","text","custom","iconFromLeft","flexDirection","marginLeft","iconFromRight","onlyIcon","withIcon","s","letterSpacing","m","l","xl","inline","borderTopLeftRadius","borderBottomLeftRadius","loader","loading","dotsPreloaderStyles","tweakDotsPreloader","getPreloaderStyles","Button","forwardRef","isFullWidth","isInline","isLoading","shouldSkipTabNavigation","iconPosition","preloaderType","interactions","tweakPreloaderStyles","hasIcon","hasChildren","hasNoAction","tabIndex","checked","invalid","input","labelPositionLeft","Checkbox","isChecked","isSemiChecked","isInvalid","isReadonly","labelPosition","onSelect","hasAction","isSelected","readOnly","onKeyDown","getSelectKeyHandler","maxHeight","appearance","rgba","fontFamily","withMessages","horizontal","vertical","message","WithMessages","infoMessage","errorMessage","controlsDirection","shouldShowError","shouldShowInfo","addDataTestId","isControlWrapperIcon","iconItem","convertToControlWrapperIcon","iconComponent","controlWrapper","withValue","minContent","label","transformOrigin","activeLabel","requiredLabel","disabledLabel","wrapper","controls","startControls","paddingRight","iconInner","customIcon","startIcon","endIcon","activeIcon","clearIcon","withStartControls","borderBottomRightRadius","borderTopRightRadius","ControlWrapper","groupPlacement","isRequired","hasValue","onClear","startControlsWidth","setStartControlsWidth","startIcons","getArray","endIcons","hasStartIcons","hasEndIcons","hasClearButton","hasEndControls","startControlsRef","clientWidth","renderIconControl","shouldResetSize","iconType","index","iconProps","inputContent","outlineStyle","background","MozAppearance","WebkitAppearance","defaultWrapper","autoSizeWrapper","autoSized","withUnits","withLabel","fakeValue","units","alignSelf","focusedInput","disabledInput","invalidInput","InputBase","placeholder","autoComplete","inputMode","initialInputMode","isClearable","isAutoSized","maxLength","shouldFocusOnMount","shouldAlwaysShowPlaceholder","onPaste","onFocus","onBlur","maskPlaceholder","alwaysShowMask","beforeMaskedStateChange","inputProps","tweakControlWrapperStyles","setFocused","unitsWidth","setUnitsWidth","inputRef","mergedRef","includes","hasFocus","isArrayLikeNotEmpty","hasUnits","hasPlaceholder","isStringNotEmpty","unitsRef","props","currentTarget","async","InputMask","Input","tweakWithMessagesStyles","EMPTY_DATE_INPUT_VALUE","EMPTY_DATE_RANGE_INPUT_VALUE","DateInput","date","startDate","endDate","isRange","tweakInputStyles","nextState","selection","start","end","DatePickerBase","ReactDatePicker","handleClickOutside","constructor","super","this","handleCalendarClickOutside","doNothing","inputStyles","tweakControlWrapper","borderColor","SearchInput","ScrollIntoViewIfNeededDefaultProps","elementType","behavior","scrollMode","ScrollIntoViewIfNeeded","PureComponent","static","createRef","componentDidMount","handleScrollIntoViewIfNeeded","componentDidUpdate","isNowActive","scrollIntoViewIfNeeded","render","wrapperProps","createElement","DEFAULT_OPTION_INDEX","ALL_OPTION_INDEX","CELL_PADDING","withListHeader","paddingTop","withListFooter","paddingBottom","listHeader","listFooter","list","ROW_HEIGHT","cell","cellWithCheckbox","noMatchesLabel","defaultCell","checkboxStyles","SelectListItem","isMultiSelect","onOptionSelect","onToggleCheckbox","multiSelectContent","block","SelectList","focusedIndex","activeValue","defaultOptionLabel","loadingLabel","shouldScrollToList","areAllOptionsSelected","customListHeader","customListFooter","isOptionDisabled","allOptionsLabel","convertValueToString","convertValueToReactNode","convertValueToId","isHeaderNotEmpty","isFooterNotEmpty","optionsDisableMap","listOptions","option","activeOptionsIds","Set","opt","optionValue","defaultIsOptionDisabled","defaultConvertFunction","defaultCompareFunction","v1","v2","inputWrapper","listWrapper","withoutPopper","listWrapperInBody","activeArrow","counter","baseInputStyles","readonlyInputBaseStyles","readonlyInputStyles","readonlyMultiSelectStyles","getInputStyles","hasReadonlyInput","Select","header","footer","debounceTime","optionsMode","dropdownOptions","minSymbolsCountToOpenList","dropdownIcon","searchInput","onType","onOpen","compareValuesOnChange","optionsFilter","shouldRenderInList","shouldRenderSearchInputInList","searchInputProps","hasSearchInputInList","tweakSearchInputStyles","tweakSelectListStyles","isListOpen","setIsListOpen","areOptionsLoading","setAreOptionsLoading","hasDefaultOption","focusedListCellIndex","setFocusedListCellIndex","searchValue","setSearchValue","shouldShowDefaultOption","setShouldShowDefaultOption","strValue","shouldShowAllOption","filteredOptions","createFilter","availableOptions","shouldShowMultiSelectCounter","optionsIndexesForNavigation","push","concat","reduce","acc","cur","stringValue","showedStringValue","convertToId","getDefaultConvertToIdFunction","closeList","handleListClose","handleListOpen","handleChange","newValue","handleOptionSelect","blur","handleToggleOptionCheckbox","o","handleOnType","debounceHandleOnType","debounce","isImmediate","handleInputChange","hasEnoughSymbolsToSearch","handleBlur","relatedTarget","focusedCellIndex","searchInputEl","customHeader","listEl","attributes","curIndexInNavigation","code","indexToSelect","isThisValueAlreadySelected","valueIdToSelect","preventDefault","targetIndexInNavigation","Portal","container","btn","buttons","selectStyles","tweakSelectList","tweakInput","fontWeight","DatePickerHeader","months","prevMonthButtonDisabled","nextMonthButtonDisabled","changeYear","changeMonth","decreaseMonth","increaseMonth","tweakSelectStyles","years","Array","_","getYear","Date","getMonth","indexOf","PopperContainer","LocalesMap","ru","ruLocale","en","enLocale","getDateFormatter","dateFormat","format","getDateValueParser","inputValue","parse","areDatesEquals","date1","date2","isSameDay","day","dayInner","datepicker","DatePicker","selectedDate","minDate","maxDate","calendarStartDay","DEFAULT_DATE_FORMAT","monthsShown","strictParsing","fixedHeight","focusSelectedMonth","disabledKeyboardNavigation","shouldRenderPopperInBody","allowSameDay","shouldCloseOnSelect","showPreviousMonths","preventOpenOnFocus","popperModifiers","popperPlacement","todayButton","highlightDates","calendarContainer","dayClassName","customInput","CustomInput","customInputRef","renderCustomHeader","filterDate","onYearChange","onMonthChange","onCalendarOpen","onCalendarClose","onChangeDate","onChangeRange","tweakDateInputStyles","formatDate","parseDateValue","datePickerRef","componentRef","dateValue","setDateValue","setStart","startDateValue","setStartDateValue","setEnd","endDateValue","setEndDateValue","hasDateInputValue","dateInputProps","isDateInRange","isAfter","isBefore","handleChangeRange","setDateRangeValues","startValue","endValue","convertedStartDate","convertedEndDate","containerRef","placeholderText","showPopperArrow","popperClassName","calendarClassName","popperContainer","renderDayContents","baseProps","onChangeRaw","newStartDateValue","newStart","newEndDateValue","newEnd","isValid","handleChangeDateRangeInput","selected","selectsRange","LINK_REGEXP","button","textTransform","link","textDecoration","blockEvent","marginBottom","description","inputLabel","inset","dragged","fileList","flexWrap","columnGap","rowGap","FileInput","isDragAndDropDisabled","isReadOnly","isMultipleDisabled","accept","onAdd","isDragOver","setIsDragOver","handleAdd","files","handleDragStart","handleDragStop","dndHandlers","onDragOver","onDragEnter","onDragLeave","onDrop","dataTransfer","multiple","cancel","main","IconButton","restProps","tooltip","lineHeight","hint","Tooltip","TextWithTooltip","tooltipText","tooltipPosition","tooltipView","tooltipType","tooltipModifiers","tooltipOffsetOptions","tooltipSize","mouseEventType","tweakTooltipStyles","isTooltipVisible","setIsTooltipVisible","tooltipTimeout","setTooltipTimeout","hasDelay","clearTimeout","popperStyles","onMouseEnter","timeout","setTimeout","onMouseLeave","shouldShowTooltip","iconTypeMap","getFileExtensionByFilename","fileName","splitFileName","pop","getMimeTypeByFilename","ext","getFileIcon","mimeType","fileItemWrapper","fileIcon","textOverflow","fileNameContainer","preloader","metadata","actions","fileSize","themedPreloaderStyles","PERIODS","SelectLocales","clear","all","chosen","nothingFound","searchPlaceholder","FilterLocales","other","back","displayedFields","periods","THIS_MONTH","LAST_MONTH","THIS_YEAR","LAST_YEAR","CUSTOM","DEFAULT_PICKER_PROPS","PERIODS_GETTERS","today","startOfMonth","endOfMonth","sub","startOfYear","endOfYear","getLocale","custom2","merge","sortValues","arr","getPrevSpaces","NumberInput","canBeFloat","canBeNegative","defaultValue","precision","intPartPrecision","showedValue","setShowedValue","formatNumberWithDefault","isDeleteForwardAction","setIsDeleteForwardAction","setShowedValueWithDefault","oldValue","defaultCaretPos","numString","numberRegexp","RegExp","constructRegExp","hasDot","formattedValue","defaultPosition","isAdding","oldPrevSpaces","res","getNewCaretPosition","settings","settingsIcon","filterWithClearButton","clearButtonStyles","innerTextButtonStyles","gridTemplateColumns","autosize","userSelect","structuredClone","FilterInterval","labelName","withFieldNameInLabel","localeKey","fromInput","toInput","translates","tweakClearButtonStyles","toLocaleLowerCase","MultiSelectLocales","ITEM_HEIGHT","overscrollBehavior","labelChosen","withoutTopGap","panel","selectedItem","dropdownInput","searchInputStyles","MultiSelectList","isSearchEnabled","fetchOptions","isGroupingEnabled","getValueView","getValueId","getValueString","checkboxPosition","pageSize","searchMaxLength","tweakCheckboxStyles","keyCursorOn","setKeyCursorOn","allOptions","setAllOptions","setIsLoading","isLoadingOptionsOnScroll","setLoadingOptionsOnScroll","activePage","setActivePage","isMaxPage","setIsMaxPage","chosenValues","include","chosenValuesIds","unchosenOptions","handleSearchInputChange","response","changeSearchValue","checkboxValue","handleKeyDown","getIsValueChosen","handleLoadItemsOnScroll","page","prevState","initIntersectionObserver","entries","doFetchOptions","mainOptionsList","hasSelectedOptionsGroup","shouldShowNothingFoundMessage","shouldShowAllOptionsLabel","shouldShowPreloader","shouldShowOptionsList","lowerSearchValue","FilterMultiSelect","withClearButton","panelWithFooter","borderTop","wordBreak","FilterSelect","getSelectLocale","hasFooter","renderedItem","containerItem","btnRow","backButtonStyles","startDatePickerStyles","startDatePickerWithButtonStyles","endDatePickerStyles","endDatePickerWithButtonStyles","FilterWithDates","onStartBtnSubmit","onEndBtnSubmit","startPickerProps","endPickerProps","tweakBackButtonStyles","hasButtonsRow","tweakStartDatePickerStyles","tweakEndDatePickerStyles","isOpenFrom","setOpenFrom","isOpenTo","setOpenTo","dateLocale","enUS","isOpenCalendar","picker","filterSelectStyles","FilterWithPeriod","isPeriodPickerShown","setIsPeriodPickerShown","periodType","isDatePickerShown","setIsDatePickerShown","period","setPeriod","periodGetters","p","isArray","periodsList","getPeriodTranslate","refPeriodPicker","refDatePicker","newPeriod","handlePeriodChange","isDateOrEmpty","isDatePeriodValue","Filter","translatesLocaleKey","preparedValue","isPeriodValue","isMultiSelectValue","component","Component","warn","selectWrapper","selectBlock","selectLabel","chevronIcon","dropdown","FILTER_HEIGHT","FiltersPaneSearch","fields","field","hasClearSelectButton","isSelectSearchEnabled","isInputFocused","setIsInputFocused","refRoot","count","FilterValueView","getSelectedValueView","isMultiple","valueViewType","isDate","displayValue","getView","multiSelectValue","intervalValue","intervalValueFrom","intervalValueTo","intervals","hasFrom","hasTo","range","convertValue","getSelectedValue","rangeValue","rangeValueFrom","rangeValueTo","isContentNotEmpty","values","booleanItem","boolean","noValue","openNoValue","openWithValue","iconContainer","FilterWrapper","baseTweakStyles","tweakWrapperStyles","tweakWithPopupStyles","tweakFilterValueViewStyles","isBoolean","handleLabelClick","handleClearIconClick","hasClearIcon","customFlags","AB","OS","noFlag","Flag","countryFlagKey","toUpperCase","hasFlag","FlagComponent","Flags","CustomFlag","TableRenders","table","Root","Head","Body","Row","Header","Cell","divs","animation","bottom","Skeleton","hasHorizontalScrollBar","el","scrollWidth","formatCellContent","config","flexibleTableWrapper","borderCollapse","borderSpacing","scroll","head","loaderRow","loaderCell","headerRow","verticalAlign","headerSticky","headerSecond","nothingFoundRow","sticky","getTransition","skeleton","FlexibleTableCell","row","columnName","renderMode","isSecond","isSticky","isOldSticky","updateNestedComponent","valueComponentProps","cellAlign","cellVerticalAlign","shouldRenderDataId","shouldRenderComponent","onCellClick","isClickable","cellComponentProps","onSetNestedComponent","Table","editable","nestedComponent","FlexibleTableRow","columns","uniqueField","isFocusable","isFirstColumnSticky","rowAttributes","isExpandableRowComponentInitiallyOpen","rowRef","expandableRowComponent","onRowHover","onRowClick","tweakTableCellStyles","setNestedComponent","isEditable","isNestedComponentExpanded","cellKey","nestedComponentCellKey","rowData","fromEntries","attribute","closeNestedComponent","isExpandableComponentActive","isFocusedRow","isActiveRow","isRowNestedComponentExpanded","colSpan","docActions","neutral","inverse","counterWrapper","title","actionsWrapper","justifySelf","DocActions","checkBoxProps","order","disabledButton","errorButton","fixedPosition","innerOverlay","sideBar","overlay","modal","titleWithCloseButton","stickyFooterWrapper","stickyFooter","withoutFooter","withStickyFooter","footerWrapper","modalWrapper","closeButtonStyles","hasCircle","placeholderSmall","amount","indicator","arrowUp","indicatorDisabled","MultiSelectInput","required","listContainer","full","multiSelectListStyles","withText","withTitle","ok","searchContainer","searchIcon","flagList","listItem","selectedCountry","activeCountry","flag","countryName","emptyResult","PhoneInputCountryList","selectedCountryCode","sortedCountries","selectedCountryIdx","setCountriesList","lastListItemIdx","newSearchValue","newCountriesList","defaultKeyCursorOn","newSelectedCountryIdx","e","DEFAULT_VALUE","countrySelectContainer","disabledCountrySelect","up","invalidArrow","focusedBorder","invalidBorder","inputContainer","flex","flagListContainer","getSelectorLineStyle","activeElementData","SELECTOR_GAP","offsetLeft","optionWrapper","optionIcon","optionText","line","selector","gridAutoFlow","gridAutoColumns","SELECTOR_TOTAL_GAP","autoWidth","SMART_INPUT_REGEX_MAP","agencyName","surname","surnameRuEn","nameRuEn","email","digits","docNumber","benefitCert","CharactersMap","EmailCharactersMap","TransliterationMap","mapSymbols","str","regex","charactersMap","isTransliterationEnabled","symbol","mappedSymbol","SmartInput","smartType","regExp","isUpperCase","getUpperCaseIfNeeded","updateCaretPosition","clipboardData","getData","selectionEnd","mappedValue","newValueLength","rawValue","iconLeft","badge","xs","switch","labelLeft","labelRight","textarea","scrollPadding","scrollbarGutter","resize","gridTemplateRows","gridArea","overflowWrap","symbolsCount","symbolsCountError","symbolsCountActive","TextArea","counterPosition","hasCounter","shouldTrimAfterMaxLength","rows","textAreaProps","shouldShowCounter","counterString","hasLabel","autoFocus","bold","circle","reverseContent","preloaderStyles","TextButton","isBold","hasCircleUnderIcon","tweakListStyles","nameRef","dropdownRef","isMenuOpen","setIsMenuOpen","toggleMenu","CSSTransition","in","unmountOnExit","classNames","enter","enterActive","exit","exitActive","moreTitle","lessTitle","truncateIndex","isAlwaysOpen","isTooShort","linkText","textWithNoLink","shortText","lastIndexOf","href","rel","fileInfo","areActionsDisabled","shouldShowSize","itemSize","removeIcon","onRemove","tweakIconButtonStyles","hasRemoveButton","filesize","filtersConfig","enabledFilters","onChangeFilters","onSettingsButtonClick","tweakFilterWrapperStyles","filtersKeys","shouldShowClearButton","clearButton","isLast","filterKey","currentValue","filterWrapper","requiredFilledFilters","headerContent","enabledColumns","activeRows","isHorizontallyScrollable","isRowFocusable","infinityScrollConfig","infinityScrollConfigDeprecated","refForScroll","nothingFoundContent","shouldRenderHeader","onHeadClick","isRowInitiallyOpen","tweakTableRowStyles","scrollRef","getTableRowProps","getDataScrollAttributeSetter","setter","dataset","removeAttribute","setHasScrollBarAttribute","setIsScrolledAttribute","scrollLeft","onInfinityScroll","isEnabled","isLastPage","intersectionRef","shouldShowNothingFound","scrollContainer","scrollHandler","resizeHandler","window","activeRowsSet","titleAlign","indexMap","docActionsProps","mountOnEnter","step","isEditDisabled","isIncreaseDisabled","isDecreaseDisabled","isNumberInteger","isFooterSticky","buttonsAlign","hasCloseButton","hasOverlay","shouldCloseOnOverlayClick","shouldCloseOnEsc","shouldBlockScroll","tweakCloseButtonStyles","isClickOnOverlay","setIsClickOnOverlay","isModalOpen","handleEscClose","RemoveScroll","forwardProps","onMouseDown","onMouseUp","hasDefaultStateBackground","onMenuOpen","onMenuClose","isMenuShown","setIsMenuShown","isButtonDisabled","handleCloseMenu","isShown","corners","tweakMultiSelectListStyles","handleOnClose","renderTrigger","listSize","isArrayEmpty","hasText","hasTitle","isDefaultType","codeSearchPlaceholder","tweakCountryListStyles","isSomeFullCodeValid","isDialCodeValid","newPhoneInfo","groupName","htmlFor","hasSameOptionsWidth","optionsValues","elementsData","setElementsData","listRef","hasDuplicates","querySelectorAll","optionId","isDisabledOption","isActiveOption","textTooltip","infoTooltip","shouldCloseOnClick","onTimeEnd","isFinite","timeoutId","params","scrollHeight","scrollHeightWithElement","hidden","scrollHeightWithoutElement","isOffscreen","elRect","getBoundingClientRect","scrollParentRect","topOffset","clientHeight","one","two"],"mappings":"i4DAEaA,EAAS,CACpBC,UAAW,UACXC,YAAa,UACbC,WAAY,UACZC,cAAe,UACfC,YAAa,UACbC,YAAa,UACbC,aAAc,UACdC,WAAY,UACZC,WAAY,UACZC,cAAe,UACfC,gBAAiB,UACjBC,cAAe,UACfC,WAAY,UACZC,UAAW,UACXC,YAAa,UACbC,kBAAmB,UACnBC,eAAgB,UAChBC,kBAAmB,UACnBC,iBAAkB,UAClBC,gBAAiB,UAEjBC,YAAa,UACbC,aAAc,WAGHC,EAAa,CACxBC,oBAAqB,GACrBC,qBAAsB,GACtBC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAE3BC,QAAS,CACPC,OAAQ,GACRC,QAAS,GACTC,UAAW,GACXC,gBAAiB,GACjBC,SAAU,GAGZC,QAAS,CACPC,gBAAiB,EACjBC,cAAe,IAINC,EAAU,CACrBC,UAAW,CAACC,EAAY,EAAGC,EAA6B,OAAQC,EAAW,OAAA,CACzEC,QAAS,eACTF,SAAU,WACVG,UAAuB,EAAZJ,EAAgB,EAC3BK,UAAW,mCACXC,OAAQ,CAAC,QAAS,EAAG9C,EAAOM,aAC5ByC,aAAcxB,EAAWK,0BAEzB,WAAY,CACVoB,QAAS,KACTP,SAAU,WACVQ,KAAMT,EACNU,KAAmB,SAAbT,GAAuBC,EAC7BS,MAAoB,UAAbV,GAAwBC,EAC/BU,MAAO,EACPC,OAAQ,EACRC,WAAY,CAACd,EAAW,QAAS,eACjCe,YAAa,CAACf,EAAW,QAAS,eAClCgB,aAAc,CAAChB,EAAW,QAASxC,EAAOM,cAG5C,UAAW,CACT0C,QAAS,KACTP,SAAU,WACVQ,IAAkB,EAAZT,EACNU,KAAmB,SAAbT,GAAuBC,EAAW,EACxCS,MAAoB,UAAbV,GAAwBC,EAAW,EAC1CU,MAAO,EACPC,OAAQ,EACRC,WAAY,CAACd,EAAY,EAAG,QAAS,eACrCe,YAAa,CAACf,EAAY,EAAG,QAAS,eACtCgB,aAAc,CAAChB,EAAY,EAAG,QAASxC,EAAOY,kBAIlD6C,cAAe,CACbC,UAAW,aACXC,SAAU,OAGV,0CAA2C,CACzC,2BAA4B,OAC5B,4BAA6B,OAE7B,uBAAwB,CACtBP,MAAO,gCACPC,OAAQ,iCAER,UAAW,CACTD,MAAO,EACPQ,UAAW,GACXd,OAAQ,CAAC,EAAG,QAAS,eACrBC,aAAc,EACdc,gBAAiB7D,EAAOM,YACxBwD,eAAgB,cAEhB,UAAW,CACTD,gBAAiB7D,EAAOK,cAI5B,gBAAiB,CACfwD,gBAAiB,eAGnB,WAAY,CACVA,gBAAiB,iBAMvB,8CAA+C,CAC7CE,eAAgB,OAChBC,eAAgB,GAAGhE,EAAOM,6BASnB2D,EAAa,CACxBC,kBAAmB,oBACnBC,QAAS,CACP,iBAAkB,CAChBC,QAAS,EACTC,UAAW,oBAGb,wBAAyB,CACvBD,QAAS,EACTC,UAAW,kBACXC,WAAY,oBACZC,mBAAoB,sBAGtB,uBAAwB,CACtBH,QAAS,EACTC,UAAW,mBAGb,gBAAiB,CACfD,QAAS,EACTC,UAAW,mBACXC,WAAY,oBACZC,mBAAoB,wBAYbC,EAA4B,CACvCP,aACAjE,SACAuB,aACAe,WCzKWmC,EAAeC,EAAAA,cAA2BF,GAE1CG,EAAgBF,EAAaG,SAE7BC,EAAW,IAAmBC,EAAAA,WAAWL,GCJzCM,EAAY,IAAOC,IAC9BA,EAAYC,OAAOC,OAAOC,EAAAA,UAEfC,EAAiB,CAC5BC,EACAL,IAEAM,UAAQ,IAAMP,EAAUM,EAAYL,GAAc,CAACK,EAAYL,ICCpDO,EACXC,IAEA,MAAMC,WAAEA,GAAeZ,IACvB,OAAOa,EAAAA,WAAWF,GAAkBC,IAAaD,QAA2B,GAGxEG,EAAgBC,GAAyBA,EAAIC,WAAW,SAExDC,EAAwBd,GAC5BU,EAAAA,WAAWV,KAAiBe,OAAOC,KAAKhB,GAAaiB,MAAMN,GAavDO,EAAsB,KAC1B,IAAIC,EACJ,MAAMC,MAAYC,QAUlB,MAAO,CAACC,EAAQC,EAAM,KACpB,MAAMC,EAAOF,EAAOG,GAAGF,GACvB,GAAIb,EAAAA,WAAWc,GACb,MAXY,CAACA,IACVJ,EAAMM,IAAIF,IACbJ,EAAMO,IAAIH,EAAMN,KAGXE,EAAMQ,IAAIJ,IAMRK,CAAQL,EAARK,CAAcP,EAAQC,EAAM,GAGrC,IAAKb,EAAAA,WAAWS,GAAe,CAC7B,MAAOW,KAAUC,GAAQT,EACzBH,EAAea,EAAAA,gBAAgBD,GAAQE,EAAAA,YAAYH,KAAUC,GAAQD,CACvE,CAEA,OAAOX,IAILe,EAAmBhB,IACnBiB,EAAYC,EAAAA,gBAAyBpC,GAAgBA,GAE9CqC,EAEQ,CAACP,EAAOQ,KAC3B,MAAM9B,EAAgB+B,EAAAA,SAAST,GAASA,OAAQ,EAC1CR,EAASgB,GAAWR,EAM1B,MAJ6B,eAAzBU,QAAQC,IAAIC,UA/CE,EAACpB,EAAyBd,EAAgB,oBAC5D,MAAMmC,EAAiB5B,OAAOC,KAAKM,GAAQpB,OAAOS,GAE9CqB,EAAAA,gBAAgBW,IAClBC,QAAQC,MACN,GAAGrC,8DAA0EmC,MA2C/EG,CAAYxB,EAAQd,GAGf,EAAGuC,QAAO/C,cAAc+C,MAC7B,MAAMC,EAAczC,EAAuCC,GAErDyC,EAAO3C,EAAAA,QAAQ,KACnB,MAAM4C,EAAenD,EAAUuB,EAAQ0B,EAAahD,GAAaE,OAAOY,GACxE,MAAO,CAAEiC,MAAOb,EAAiBgB,KAChC,CAACF,EAAahD,IAEjB,OAAOmC,EAAUc,KCjFRE,EAAoB,CAACC,EAAwBC,KACxD,MAAMC,EAAeC,EAAAA,QAAO,GAC5BC,EAAAA,UAAU,KACR,IAAIC,EAMJ,OALIH,EAAaI,QACfD,EAAUL,IAEVE,EAAaI,SAAU,EAElB,UACW,IAAZD,GACFA,MAGHJ,ICdQM,EAAgD,CAC3DC,KAAM,WACNC,SAAS,EACTC,MAAO,cACPC,SAAU,CAAC,iBACXC,GAAI,EAAGC,YACLA,EAAM3C,OAAO4C,OAAOC,SAAW,GAAGF,EAAMG,MAAMC,UAAUjG,WAE1DgF,OAAQ,EAAGa,YACTA,EAAMK,SAASJ,OAAOK,MAAMJ,SAAW,GACpCF,EAAMK,SAASD,UAA0BG,kBCVnCC,EAA0B,CACrC,CACEC,UAAW,WACXC,UAAW,UACXC,YAAa,KACbC,UAAW,kBACXC,SAAU,IACVC,iBAAkB,EAClBC,UAAW,CAAC,MAEd,CACEN,UAAW,cACXC,UAAW,aACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,SACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,sBACXC,UAAW,oBACXC,YAAa,KACbE,SAAU,OACVE,UAAW,CAAC,SAEd,CACEN,UAAW,YACXC,UAAW,YACXC,YAAa,KACbE,SAAU,KACVD,UAAW,gBACXG,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,YACXC,UAAW,YACXC,YAAa,KACbE,SAAU,KACVD,UAAW,iBACXE,iBAAkB,EAClBE,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MAC7DD,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,SAEjF,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,aACXC,UAAW,cACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,SACXC,YAAa,KACbE,SAAU,OACVE,UAAW,CAAC,SAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,aACXC,UAAW,YACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,OACVE,UAAW,CAAC,SAEd,CACEN,UAAW,UACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVD,UAAW,iBACXG,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,KACVD,UAAW,eACXG,UAAW,CAAC,OAEd,CACEN,UAAW,SACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,yBACXC,UAAW,uBACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,WACXC,YAAa,KACbE,SAAU,KACVD,UAAW,iBACXG,UAAW,CAAC,OAEd,CACEN,UAAW,iCACXC,UAAW,2CACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,oBACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,eACXC,UAAW,eACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,SACXC,YAAa,KACbE,SAAU,IACVD,UAAW,iBACXE,iBAAkB,EAClBE,UAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFD,UAAW,CACT,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAGJ,CACEN,UAAW,aACXC,UAAW,aACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,wBACXC,UAAW,gCACXC,YAAa,KACbE,SAAU,MACVC,iBAAkB,EAClBC,UAAW,CAAC,QAEd,CACEN,UAAW,2BACXC,UAAW,oCACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,OACXC,UAAW,MACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,QACXC,UAAW,OACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,KACVD,UAAW,eACXG,UAAW,CAAC,OAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,SACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,wBACXC,UAAW,mBACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,aACXC,UAAW,aACXC,YAAa,KACbE,SAAU,MACVD,UAAW,YACXG,UAAW,CAAC,QAEd,CACEN,UAAW,gBACXC,UAAW,cACXC,YAAa,KACbE,SAAU,MACVD,UAAW,cACXG,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,OACXC,UAAW,OACXC,YAAa,KACbE,SAAU,KACV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cACXG,UAAW,CAAC,OAEd,CACEN,UAAW,gBACXC,UAAW,oBACXC,YAAa,KACbE,SAAU,IACVD,UAAW,iBACXE,iBAAkB,EAClBE,UAAW,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFD,UAAW,CACT,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,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"}