@true-engineering/true-react-common-ui-kit 4.0.0-alpha74 → 4.0.0-alpha75

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-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/constants.ts","../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/FiltersPane/FiltersPane.styles.ts","../src/components/FiltersPane/components/FilterDateSingle/FilterDateSingle.styles.ts","../src/components/FiltersPane/components/FilterDateSingle/FilterDateSingle.tsx","../src/components/NumberInput/helpers.ts","../src/components/NumberInput/NumberInput.tsx","../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<T extends Element> {\n /** @default false */\n isDisabled?: boolean;\n onChange?: (entry: ResizeObserverEntry) => void;\n onTargetChange?: (target: T) => void;\n}\n\nexport const useResizeRef = <T extends Element>(options: IResizeRefOptions<T>): RefCallback<T> => {\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 as T);\n }\n });\n\n const observerRef: RefCallback<T> = (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({ 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 triggerData: IDataAttributes = { popupOpen: isActive, ...data };\n\n const triggerElement = applyAction(trigger, {\n referenceProps: !isTriggerWrapped ? referenceProps : undefined,\n triggerProps: {\n isActive,\n isDisabled,\n ...(!isTriggerWrapped && { data: triggerData, 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(triggerData, 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({ 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({ 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 { ITweakStylesProps } from '../../../../types';\nimport { useStyles, IDotsPreloaderStyles } from './DotsPreloader.styles';\n\nexport type IDotsPreloaderProps = ITweakStylesProps<IDotsPreloaderStyles>;\n\nexport const DotsPreloader: FC<IDotsPreloaderProps> = ({ tweakStyles }) => {\n const classes = useStyles({ 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 { ITweakStylesProps } from '../../../../types';\nimport { IPreloaderSvgType } from '../../types';\nimport { DefaultPreloader } from '../DefaultPreloader';\nimport { ISvgPreloaderStyles, useStyles } from './SvgPreloader.styles';\n\nexport interface ISvgPreloaderProps extends ITweakStylesProps<ISvgPreloaderStyles> {\n type: IPreloaderSvgType;\n}\n\nexport const SvgPreloader: FC<ISvgPreloaderProps> = ({ type = 'default', tweakStyles }) => {\n const classes = useStyles({ 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({ 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({ 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({ 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({ 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({ tweakStyles });\n\n const [startControlsWidth, setStartControlsWidth] = useState<number>();\n const [endControlsWidth, setEndControlsWidth] = 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 endControlsRef = useResizeRef({\n onTargetChange: (target) => setEndControlsWidth(target.clientWidth),\n });\n\n const renderIconControl = (\n {\n key,\n iconComponent,\n onClick,\n shouldResetSize = false,\n isActiveIcon = isNotEmpty(onClick),\n ...iconContainerProps\n }: 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 && isActiveIcon,\n [classes.customIcon]: shouldResetSize,\n })}\n {...addClickHandler(onClick, !isDisabled)}\n {...addDataTestId(testId, `${iconType}-icon`)}\n {...iconContainerProps}\n >\n <div className={classes.iconInner}>{renderIcon(iconComponent)}</div>\n </div>\n );\n\n const style = {\n '--start-controls-width': hasStartIcons ? `${startControlsWidth}px` : undefined,\n '--end-controls-width': hasEndControls ? `${endControlsWidth}px` : undefined,\n } as CSSProperties;\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={style}\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} ref={endControlsRef}>\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({ 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 { IReplaceTweakStylesProps } 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<\n IReplaceTweakStylesProps<IInputProps, IDateInputStyles>,\n 'value' | 'beforeMaskedStateChange' | 'onChange'\n > {\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({ 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 { IReplaceTweakStylesProps } from '../../types';\nimport { IInputProps, Input } from '../Input';\nimport { inputStyles, ISearchInputStyles } from './SearchInput.styles';\n\nexport type ISearchInputProps = Omit<\n IReplaceTweakStylesProps<IInputProps, ISearchInputStyles>,\n 'type' | 'label' | 'isInvalid' | 'errorMessage' | 'isActive' | 'startIcon'\n>;\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({ 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 { IDropdownWithPopperOptions, IReplaceTweakStylesProps } from '../../types';\nimport { IControlWrapperIcon } from '../ControlWrapper';\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<\n IReplaceTweakStylesProps<IInputProps, ISelectStyles>,\n 'value' | 'onChange' | 'onBlur' | 'type'\n > {\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 | null;\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({ 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 endIcon={[\n isMultiSelect && shouldShowMultiSelectCounter\n ? ({\n key: 'counter',\n iconComponent: <div className={classes.counter}>(+{value.length - 1})</div>,\n shouldResetSize: true,\n } satisfies IControlWrapperIcon)\n : undefined,\n\n ...getArray(endIcon),\n\n isNotEmpty(dropdownIcon)\n ? ({\n key: 'arrow',\n onClick: onArrowClick,\n tabIndex: undefined,\n iconComponent: (\n <div className={clsx(classes.arrow, { [classes.activeArrow]: isOpen })}>\n {renderIcon(dropdownIcon)}\n </div>\n ),\n } satisfies IControlWrapperIcon)\n : undefined,\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 { getYear, Month } from 'date-fns';\nimport { indexMap } from '@true-engineering/true-react-platform-helpers';\n\nexport const MONTH_SELECT_OPTIONS = indexMap(12, (idx) => idx as Month);\nexport const YEARS_SELECT_OPTIONS = indexMap(41, (idx) => getYear(new Date()) - 30 + idx);\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 } from 'react';\nimport { ReactDatePickerCustomHeaderProps as BaseProps } from 'react-datepicker';\nimport { getMonth, getYear, Month } from 'date-fns';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ITweakStylesProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { Select } from '../../../Select';\nimport { MONTH_SELECT_OPTIONS, YEARS_SELECT_OPTIONS } from './constants';\nimport { IDatePickerHeaderStyles, selectStyles, useStyles } from './DatePickerHeader.styles';\n\nexport interface IDatePickerHeaderProps\n extends BaseProps,\n ITweakStylesProps<IDatePickerHeaderStyles> {\n getMonthSelectString: (value: Month) => string;\n}\n\nexport const DatePickerHeader: FC<IDatePickerHeaderProps> = ({\n date,\n getMonthSelectString,\n tweakStyles,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n changeYear,\n changeMonth,\n decreaseMonth,\n increaseMonth,\n}) => {\n const classes = useStyles({ tweakStyles });\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: selectStyles,\n tweakStyles,\n className: 'tweakSelect',\n currentComponentName: 'DatePickerHeader',\n });\n\n return (\n <div className={classes.header}>\n <Select\n value={getMonth(date) as Month}\n options={MONTH_SELECT_OPTIONS}\n convertValueToString={getMonthSelectString}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => isNotEmpty(value) && changeMonth(value)}\n />\n <Select\n value={getYear(date)}\n options={YEARS_SELECT_OPTIONS}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => isNotEmpty(value) && changeYear(value)}\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 useCallback,\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, Month } from 'date-fns';\nimport {\n addDataAttributes,\n getArray,\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 { ITweakStylesProps } 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\n extends IDatePickerBaseProps,\n ITweakStylesProps<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 popperProps,\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({ 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 endIcon =\n isClearable && hasDateInputValue\n ? inputProps.endIcon\n : getArray(inputProps.endIcon).concat('calendar');\n\n const dateInputProps: IDateInputProps = {\n ...inputProps,\n isRange,\n isDisabled,\n isClearable,\n isActive: isOpen,\n endIcon,\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 const resolvedLocale = isString(locale) ? LocalesMap[locale] : locale;\n\n const getLocalizedMonth = useCallback(\n (month: Month) => {\n if (isNotEmpty(months?.[month])) {\n return months[month];\n }\n const localizedMonth = resolvedLocale.localize.month(month);\n return localizedMonth.charAt(0).toUpperCase().concat(localizedMonth.slice(1));\n },\n [resolvedLocale, months],\n );\n\n return (\n <div className={classes.root} {...addDataAttributes(data)}>\n <DatePickerBase\n ref={componentRef}\n minDate={minDate}\n maxDate={maxDate}\n locale={resolvedLocale}\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 popperProps={popperProps}\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 ??\n ((baseProps) => (\n <DatePickerHeader {...baseProps} getMonthSelectString={getLocalizedMonth} />\n ))\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({ 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({ 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({ 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({ 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 date: 'Дата',\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 date: 'Date',\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 { 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 { IDatePickerStyles } from '../../../DatePicker';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterDateSingle', {\n root: {\n width: 312,\n background: colors.CLASSIC_WHITE,\n position: 'relative',\n zIndex: 20,\n },\n\n container: {\n padding: [8, 20],\n },\n\n buttons: {\n display: 'flex',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n padding: 8,\n },\n});\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport type IFilterDateSingleStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakDatePicker: IDatePickerStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { FC, useMemo, useRef } from 'react';\nimport { enUS, ru } from 'date-fns/locale';\nimport { addDataAttributes, getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { DatePicker, IDatePickerProps } from '../../../DatePicker';\nimport { getLocale } from '../../helpers';\nimport { IFilterLocaleKey, IPartialFilterLocale } from '../../types';\nimport { clearButtonStyles, IFilterDateSingleStyles, useStyles } from './FilterDateSingle.styles';\n\nexport interface IFilterDateSingleProps\n extends ICommonProps<IFilterDateSingleStyles>,\n Partial<\n Pick<\n IDatePickerProps,\n 'label' | 'minDate' | 'maxDate' | 'calendarStartDay' | 'popperModifiers' | 'popperPlacement'\n >\n > {\n value?: Date | null;\n locale?: IPartialFilterLocale;\n localeKey?: IFilterLocaleKey;\n isClearable?: boolean;\n onChange: (value: Date | null) => void;\n onClose?: () => void;\n onEndBtnSubmit: () => void;\n}\n\nexport const FilterDateSingle: FC<IFilterDateSingleProps> = ({\n value,\n label,\n locale,\n localeKey,\n isClearable,\n tweakStyles,\n onChange,\n onClose,\n onEndBtnSubmit,\n testId,\n data,\n ...props\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterDateSingle',\n });\n\n const tweakDatePickerStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakDatePicker',\n currentComponentName: 'FilterDateSingle',\n });\n\n const popperTargetRef = useRef<HTMLDivElement>(null);\n\n const dateLocale = localeKey === 'ru' ? ru : enUS;\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const handleClear = () => {\n onEndBtnSubmit();\n };\n\n return (\n <div className={classes.root} ref={popperTargetRef} {...addDataAttributes(data, testId)}>\n <div className={classes.container}>\n <DatePicker\n label={label ?? translates.date}\n locale={dateLocale}\n months={translates.months}\n selectedDate={value}\n onChangeDate={(date) => {\n onChange(date);\n onClose?.();\n }}\n tweakStyles={tweakDatePickerStyles}\n popperProps={{ elements: { reference: popperTargetRef?.current } }}\n {...props}\n />\n </div>\n\n <div className={classes.buttons}>\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 </div>\n </div>\n );\n};\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, 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({ 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({ 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({ 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: 312,\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\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport const backButtonStyles = innerTextButtonStyles;\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 } from 'react';\nimport { isAfter, isBefore } from 'date-fns';\nimport { enUS, ru } from 'date-fns/locale';\nimport { getTestId, addDataAttributes } 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 IFilterWithDatesStyles,\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({ 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 tweakStartDatePickerStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakStartDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const tweakEndDatePickerStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakEndDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const popperTargetRef = 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\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} ref={popperTargetRef} {...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 popperProps={{ elements: { reference: popperTargetRef?.current } }}\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 popperProps={{ elements: { reference: popperTargetRef?.current } }}\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 </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({ 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);\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\nexport const 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 { FilterDateSingle } from '../FilterDateSingle';\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 { isDateOrEmpty, 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 === 'datePickerSingle') {\n const preparedValue = isDateOrEmpty(value) ? value : undefined;\n\n return (\n <FilterDateSingle\n value={preparedValue}\n onChange={onChange}\n onClose={onClose}\n onEndBtnSubmit={() => onChange(undefined)}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'datePicker')}\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({ 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 { ReactNode, useMemo } from 'react';\nimport { format } from 'date-fns';\nimport {\n isArrayNotEmpty,\n isNotEmpty,\n isObject,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ITweakStylesProps } from '../../../../types';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\nimport { getLocale } from '../../helpers';\nimport { IDateRangeConfigItem, 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 Pick<IFilterWrapperProps<Values, Key>, 'value' | 'filter' | 'localeKey' | 'locale'>,\n ITweakStylesProps<IFilterValueViewStyles> {\n value: Values[Key];\n}\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>): ReactNode {\n const classes = useStyles({ 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 (isNotEmpty(filter.getSelectedValueView)) {\n return <span className={classes.text}>{filter.getSelectedValueView(value)}</span>;\n }\n\n const displayValue = (v: unknown): string => {\n if (!isNotEmpty(v)) {\n return '';\n }\n\n if (v instanceof Date) {\n const { dateFormat = DEFAULT_DATE_FORMAT } = filter as IDateRangeConfigItem<unknown>;\n return format(v, dateFormat);\n }\n\n if (!isObject(v)) {\n return String(v);\n }\n\n if ('value' in v && isNotEmpty(v.value)) {\n return String(v.value);\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 ?? displayValue;\n return <span className={classes.text}>{getView(value)}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getArrayView = (values: unknown, getView: (_: any) => ReactNode = displayValue) => {\n if (!Array.isArray(values) || !isArrayNotEmpty(values)) {\n return null;\n }\n\n const [first, ...rest] = values;\n return (\n <>\n <span className={classes.text}>{getView(first)}</span>\n {isArrayNotEmpty(rest) && <span className={classes.count}> (+{rest.length})</span>}\n </>\n );\n };\n\n if (filter.type === 'multiSelect') {\n const { include } = value as Partial<IMultiSelectListValues<unknown>>;\n return getArrayView(include, filter.getValueView);\n }\n\n const isMultiple = filter.type === 'custom' && filter.valueViewType === 'multiple';\n if (isMultiple) {\n return getArrayView(value, filter.getSelectedValue);\n }\n\n const isDateRange = filter.type === 'dateRange' || filter.type === 'dateRangeWithoutPeriod';\n if (isDateRange) {\n const { from, to, periodType = 'CUSTOM' } = value as Partial<IPeriod>;\n\n if (periodType !== 'CUSTOM') {\n return <span className={classes.text}>{translates.periods[periodType] ?? periodType}</span>;\n }\n\n const hasFrom = isNotEmpty(from);\n const hasTo = isNotEmpty(to);\n const range: string[] = [];\n if (hasFrom && hasTo) {\n range.push(displayValue(from), '—', displayValue(to));\n } else if (hasFrom) {\n range.push(translates.from.toLowerCase(), displayValue(from));\n } else if (hasTo) {\n range.push(translates.to.toLowerCase(), displayValue(to));\n } else {\n return null;\n }\n\n return <span className={classes.text}>{range.join(' ')}</span>;\n }\n\n const isRange = filter.type === 'custom' && filter.valueViewType === 'range';\n if (isRange || filter.type === 'interval') {\n if (!Array.isArray(value)) {\n return null;\n }\n\n const [valueFrom, valueTo] = value;\n const range: string[] = [];\n if (isNotEmpty(valueFrom)) {\n range.push(translates.from.toLowerCase(), displayValue(valueFrom));\n }\n if (isNotEmpty(valueTo)) {\n range.push(translates.to.toLowerCase(), displayValue(valueTo));\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 = <T>(value: T): value is NonNullable<T> => {\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 { addDataAttributes } 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({ 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 && hasValue && (\n <div className={classes.value}>\n <FilterValueView\n value={value}\n filter={filter}\n locale={locale}\n localeKey={localeKey}\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 { ITweakStylesProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { customFlags } from './customFlags';\nimport { IFlagStyles, useStyles } from './Flag.styles';\n\nexport interface IFlagProps extends ITweakStylesProps<IFlagStyles> {\n /** @default '' */\n countryCode?: string;\n}\n\nexport const Flag: FC<IFlagProps> = ({ countryCode = '', tweakStyles }) => {\n const classes = useStyles({ 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 { ITweakStylesProps } from '../../types';\nimport { ISkeletonStyles, useStyles } from './Skeleton.styles';\n\nexport interface ISkeletonProps extends ITweakStylesProps<ISkeletonStyles> {\n height?: CSSProperties['height'];\n}\n\nexport const Skeleton: FC<ISkeletonProps> = ({ height, tweakStyles }) => {\n const classes = useStyles({ 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 { ITweakStylesProps } 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 ITweakStylesProps<IFlexibleTableCellStyles>,\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({ 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({ 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 { IReplaceTweakStylesProps } from '../../../../types';\nimport { Checkbox, ICheckboxProps } from '../../../Checkbox';\nimport { IDocActionsView } from './types';\nimport { IDocActionsStyles, useStyles } from './DocActions.styles';\n\nexport interface IDocActionsProps\n extends IReplaceTweakStylesProps<ICheckboxProps<never>, 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({ 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 { ITweakStylesProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { useStyles, IMultiSelectInputStyles } from './MultiSelectInput.styles';\n\nexport interface IMultiSelectInputProps<Value> extends ITweakStylesProps<IMultiSelectInputStyles> {\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({ 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 { ITweakStylesProps } 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 ITweakStylesProps<IPhoneInputCountryListStyles> {\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({ 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 { ITweakStyles, createThemedStyles, animations } from '../../theme';\n\nexport const useStyles = createThemedStyles('Selector', {\n selector: {\n display: 'grid',\n gridAutoFlow: 'column',\n gridAutoColumns: 'auto',\n boxSizing: 'border-box',\n position: 'relative',\n\n '&:has($active)::before': {\n content: '\"\"',\n position: 'absolute',\n transition: animations.defaultTransition,\n transitionProperty: 'left, width',\n width: 'var(--active-element-width)',\n height: 'var(--active-element-height)',\n top: 'var(--active-element-top)',\n left: 'var(--active-element-left)',\n },\n },\n\n autoWidth: {\n gridAutoColumns: '1fr',\n },\n\n required: {},\n\n invalid: {},\n\n option: {\n appearance: 'none',\n background: 'none',\n border: 'none',\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1,\n\n '$iconFromRight &': {\n flexDirection: 'row-reverse',\n },\n },\n\n active: {},\n\n disabled: {},\n\n optionIcon: {},\n\n optionText: {},\n\n iconFromRight: {},\n\n s: {},\n\n m: {},\n\n l: {},\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({ 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({ 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({ 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({ 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({ 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({ 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({ 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({ 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({ 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={\n isDisabled ||\n filter?.isDisabled ||\n filter?.requiredFilledFilters?.some((item) => !values[item])\n }\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({ 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 { IReplaceTweakStylesProps } 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<\n IReplaceTweakStylesProps<INumberInputProps, IIncrementInputStyles>,\n 'canBeFloat' | 'precision'\n > {\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({ 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({ 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({ 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({ 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 renderTrigger,\n listSize,\n tweakStyles,\n ...rest\n}) => {\n const classes = useStyles({ 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(triggerProps.data, triggerProps.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 isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { 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?: ReactNode;\n title?: ReactNode;\n /** @default 's' */\n size?: 's' | 'm' | 'l';\n icon?: IIcon | null;\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 = type !== 'custom' ? `status-${type}` : undefined,\n tweakStyles,\n}) => {\n const classes = useStyles({ tweakStyles });\n\n const hasText = isReactNodeNotEmpty(text);\n const hasTitle = isReactNodeNotEmpty(title);\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 {isNotEmpty(icon) && <div className={classes.icon}>{renderIcon(icon)}</div>}\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 { IReplaceTweakStylesProps } 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 IReplaceTweakStylesProps<IInputProps, IPhoneInputStyles>,\n 'value' | 'onChange' | 'type' | 'mask' | 'units' | 'placeholder'\n > {\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({ 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({ 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 clsx from 'clsx';\nimport {\n addDataTestId,\n addDataAttributes,\n isReactNodeNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useResizeRef } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { renderIcon } from '../Icon';\nimport { ISelectorOption, ISelectorValue } from './types';\nimport { 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({ tweakStyles });\n\n const updateVariables = (active: HTMLElement | null): void => {\n if (isNotEmpty(active?.parentElement)) {\n active.parentElement.style.setProperty('--active-element-width', `${active.clientWidth}px`);\n active.parentElement.style.setProperty('--active-element-height', `${active.clientHeight}px`);\n active.parentElement.style.setProperty('--active-element-left', `${active.offsetLeft}px`);\n active.parentElement.style.setProperty('--active-element-top', `${active.offsetTop}px`);\n }\n };\n\n const resizeRef = useResizeRef<HTMLDivElement>({\n onTargetChange: (target) => updateVariables(target.querySelector(`.${classes.active}`)),\n });\n\n return (\n <div\n ref={resizeRef}\n className={clsx(classes.selector, classes[size], {\n [classes.iconFromRight]: iconPosition === 'right',\n [classes.invalid]: isInvalid,\n [classes.required]: isRequired,\n [classes.autoWidth]: hasSameOptionsWidth,\n })}\n {...addDataAttributes(data, testId)}\n >\n {options.map((option) => {\n const optionId = String(option.value);\n const isDisabledOption = option.isDisabled || isDisabled;\n const isActiveOption = option.value === value;\n\n return (\n <button\n ref={isActiveOption ? updateVariables : undefined}\n key={optionId}\n type=\"button\"\n className={clsx(classes.option, {\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 );\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({ 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({ 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({ 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({ 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 { IReplaceTweakStylesProps } 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 IReplaceTweakStylesProps<IWithPopupProps, IWithTooltipStyles>,\n 'trigger' | 'children' | 'placement' | 'eventType' | 'isTriggerWrapped'\n > {\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","triggerData","popupOpen","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","endControlsWidth","setEndControlsWidth","startIcons","getArray","endIcons","hasStartIcons","hasEndIcons","hasClearButton","hasEndControls","startControlsRef","clientWidth","endControlsRef","renderIconControl","shouldResetSize","isActiveIcon","iconContainerProps","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","MONTH_SELECT_OPTIONS","indexMap","YEARS_SELECT_OPTIONS","getYear","Date","btn","buttons","selectStyles","tweakSelectList","tweakInput","fontWeight","DatePickerHeader","getMonthSelectString","prevMonthButtonDisabled","nextMonthButtonDisabled","changeYear","changeMonth","decreaseMonth","increaseMonth","tweakSelectStyles","getMonth","PopperContainer","LocalesMap","ru","ruLocale","en","enLocale","getDateFormatter","dateFormat","format","getDateValueParser","inputValue","parse","areDatesEquals","date1","date2","isSameDay","day","dayInner","datepicker","DatePicker","selectedDate","minDate","maxDate","months","calendarStartDay","DEFAULT_DATE_FORMAT","monthsShown","strictParsing","fixedHeight","focusSelectedMonth","disabledKeyboardNavigation","shouldRenderPopperInBody","allowSameDay","shouldCloseOnSelect","showPreviousMonths","preventOpenOnFocus","popperModifiers","popperPlacement","popperProps","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","resolvedLocale","getLocalizedMonth","month","localizedMonth","localize","charAt","toUpperCase","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","years","getLocale","custom2","merge","sortValues","arr","settings","settingsIcon","filterWithClearButton","clearButtonStyles","innerTextButtonStyles","structuredClone","FilterDateSingle","localeKey","onEndBtnSubmit","tweakClearButtonStyles","tweakDatePickerStyles","popperTargetRef","dateLocale","enUS","translates","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","gridTemplateColumns","autosize","userSelect","FilterInterval","labelName","withFieldNameInLabel","fromInput","toInput","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","FilterWithDates","onStartBtnSubmit","startPickerProps","endPickerProps","tweakBackButtonStyles","tweakStartDatePickerStyles","tweakEndDatePickerStyles","picker","filterSelectStyles","FilterWithPeriod","isPeriodPickerShown","setIsPeriodPickerShown","periodType","isDatePickerShown","setIsDatePickerShown","period","setPeriod","periodGetters","p","Array","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","displayValue","getView","getArrayView","values","valueViewType","getSelectedValue","hasFrom","hasTo","range","valueFrom","valueTo","isContentNotEmpty","booleanItem","boolean","noValue","openNoValue","openWithValue","iconContainer","FilterWrapper","baseTweakStyles","tweakWrapperStyles","tweakWithPopupStyles","tweakFilterValueViewStyles","isBoolean","handleLabelClick","handleClearIconClick","hasClearIcon","customFlags","AB","OS","noFlag","Flag","countryFlagKey","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","selector","gridAutoFlow","gridAutoColumns","autoWidth","optionIcon","optionText","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","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","codeSearchPlaceholder","tweakCountryListStyles","isSomeFullCodeValid","isDialCodeValid","newPhoneInfo","groupName","htmlFor","hasSameOptionsWidth","updateVariables","setProperty","clientHeight","offsetLeft","offsetTop","resizeRef","querySelector","optionId","isDisabledOption","isActiveOption","textTooltip","infoTooltip","shouldCloseOnClick","onTimeEnd","isFinite","timeoutId","params","scrollHeight","scrollHeightWithElement","hidden","scrollHeightWithoutElement","isOffscreen","elRect","getBoundingClientRect","scrollParentRect","topOffset","one","two"],"mappings":"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AAC,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/constants.ts","../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/FiltersPane/FiltersPane.styles.ts","../src/components/FiltersPane/components/FilterDateSingle/FilterDateSingle.styles.ts","../src/components/FiltersPane/components/FilterDateSingle/FilterDateSingle.tsx","../src/components/NumberInput/helpers.ts","../src/components/NumberInput/NumberInput.tsx","../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<T extends Element> {\n /** @default false */\n isDisabled?: boolean;\n onChange?: (entry: ResizeObserverEntry) => void;\n onTargetChange?: (target: T) => void;\n}\n\nexport const useResizeRef = <T extends Element>(options: IResizeRefOptions<T>): RefCallback<T> => {\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 as T);\n }\n });\n\n const observerRef: RefCallback<T> = (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({ 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 triggerData: IDataAttributes = { popupOpen: isActive, ...data };\n\n const triggerElement = applyAction(trigger, {\n referenceProps: !isTriggerWrapped ? referenceProps : undefined,\n triggerProps: {\n isActive,\n isDisabled,\n ...(!isTriggerWrapped && { data: triggerData, 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(triggerData, 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({ 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({ 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 { ITweakStylesProps } from '../../../../types';\nimport { useStyles, IDotsPreloaderStyles } from './DotsPreloader.styles';\n\nexport type IDotsPreloaderProps = ITweakStylesProps<IDotsPreloaderStyles>;\n\nexport const DotsPreloader: FC<IDotsPreloaderProps> = ({ tweakStyles }) => {\n const classes = useStyles({ 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 { ITweakStylesProps } from '../../../../types';\nimport { IPreloaderSvgType } from '../../types';\nimport { DefaultPreloader } from '../DefaultPreloader';\nimport { ISvgPreloaderStyles, useStyles } from './SvgPreloader.styles';\n\nexport interface ISvgPreloaderProps extends ITweakStylesProps<ISvgPreloaderStyles> {\n type: IPreloaderSvgType;\n}\n\nexport const SvgPreloader: FC<ISvgPreloaderProps> = ({ type = 'default', tweakStyles }) => {\n const classes = useStyles({ 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({ 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({ 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({ 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({ 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({ tweakStyles });\n\n const [startControlsWidth, setStartControlsWidth] = useState<number>();\n const [endControlsWidth, setEndControlsWidth] = 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 endControlsRef = useResizeRef({\n onTargetChange: (target) => setEndControlsWidth(target.clientWidth),\n });\n\n const renderIconControl = (\n {\n key,\n iconComponent,\n onClick,\n shouldResetSize = false,\n isActiveIcon = isNotEmpty(onClick),\n ...iconContainerProps\n }: 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 && isActiveIcon,\n [classes.customIcon]: shouldResetSize,\n })}\n {...addClickHandler(onClick, !isDisabled)}\n {...addDataTestId(testId, `${iconType}-icon`)}\n {...iconContainerProps}\n >\n <div className={classes.iconInner}>{renderIcon(iconComponent)}</div>\n </div>\n );\n\n const style = {\n '--start-controls-width': hasStartIcons ? `${startControlsWidth}px` : undefined,\n '--end-controls-width': hasEndControls ? `${endControlsWidth}px` : undefined,\n } as CSSProperties;\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={style}\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} ref={endControlsRef}>\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({ 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 { IReplaceTweakStylesProps } 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<\n IReplaceTweakStylesProps<IInputProps, IDateInputStyles>,\n 'value' | 'beforeMaskedStateChange' | 'onChange'\n > {\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({ 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 { IReplaceTweakStylesProps } from '../../types';\nimport { IInputProps, Input } from '../Input';\nimport { inputStyles, ISearchInputStyles } from './SearchInput.styles';\n\nexport type ISearchInputProps = Omit<\n IReplaceTweakStylesProps<IInputProps, ISearchInputStyles>,\n 'type' | 'label' | 'isInvalid' | 'errorMessage' | 'isActive' | 'startIcon'\n>;\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({ 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 { IDropdownWithPopperOptions, IReplaceTweakStylesProps } from '../../types';\nimport { IControlWrapperIcon } from '../ControlWrapper';\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<\n IReplaceTweakStylesProps<IInputProps, ISelectStyles>,\n 'value' | 'onChange' | 'onBlur' | 'type'\n > {\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 | null;\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({ 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 endIcon={[\n isMultiSelect && shouldShowMultiSelectCounter\n ? ({\n key: 'counter',\n iconComponent: <div className={classes.counter}>(+{value.length - 1})</div>,\n shouldResetSize: true,\n } satisfies IControlWrapperIcon)\n : undefined,\n\n ...getArray(endIcon),\n\n isNotEmpty(dropdownIcon)\n ? ({\n key: 'arrow',\n onClick: onArrowClick,\n tabIndex: undefined,\n iconComponent: (\n <div className={clsx(classes.arrow, { [classes.activeArrow]: isOpen })}>\n {renderIcon(dropdownIcon)}\n </div>\n ),\n } satisfies IControlWrapperIcon)\n : undefined,\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 { getYear, Month } from 'date-fns';\nimport { indexMap } from '@true-engineering/true-react-platform-helpers';\n\nexport const MONTH_SELECT_OPTIONS = indexMap(12, (idx) => idx as Month);\nexport const YEARS_SELECT_OPTIONS = indexMap(41, (idx) => getYear(new Date()) - 30 + idx);\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 } from 'react';\nimport { ReactDatePickerCustomHeaderProps as BaseProps } from 'react-datepicker';\nimport { getMonth, getYear, Month } from 'date-fns';\nimport { isNotEmpty } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ITweakStylesProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { Select } from '../../../Select';\nimport { MONTH_SELECT_OPTIONS, YEARS_SELECT_OPTIONS } from './constants';\nimport { IDatePickerHeaderStyles, selectStyles, useStyles } from './DatePickerHeader.styles';\n\nexport interface IDatePickerHeaderProps\n extends BaseProps,\n ITweakStylesProps<IDatePickerHeaderStyles> {\n getMonthSelectString: (value: Month) => string;\n}\n\nexport const DatePickerHeader: FC<IDatePickerHeaderProps> = ({\n date,\n getMonthSelectString,\n tweakStyles,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n changeYear,\n changeMonth,\n decreaseMonth,\n increaseMonth,\n}) => {\n const classes = useStyles({ tweakStyles });\n\n const tweakSelectStyles = useTweakStyles({\n innerStyles: selectStyles,\n tweakStyles,\n className: 'tweakSelect',\n currentComponentName: 'DatePickerHeader',\n });\n\n return (\n <div className={classes.header}>\n <Select\n value={getMonth(date) as Month}\n options={MONTH_SELECT_OPTIONS}\n convertValueToString={getMonthSelectString}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => isNotEmpty(value) && changeMonth(value)}\n />\n <Select\n value={getYear(date)}\n options={YEARS_SELECT_OPTIONS}\n dropdownIcon=\"chevron-down-small\"\n isAutoSized\n tweakStyles={tweakSelectStyles}\n onChange={(value) => isNotEmpty(value) && changeYear(value)}\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 useCallback,\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, Month } from 'date-fns';\nimport {\n addDataAttributes,\n getArray,\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 { ITweakStylesProps } 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\n extends IDatePickerBaseProps,\n ITweakStylesProps<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 popperProps,\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({ 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 endIcon =\n isClearable && hasDateInputValue\n ? inputProps.endIcon\n : getArray(inputProps.endIcon).concat('calendar');\n\n const dateInputProps: IDateInputProps = {\n ...inputProps,\n isRange,\n isDisabled,\n isClearable,\n isActive: isOpen,\n endIcon,\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 const resolvedLocale = isString(locale) ? LocalesMap[locale] : locale;\n\n const getLocalizedMonth = useCallback(\n (month: Month) => {\n if (isNotEmpty(months?.[month])) {\n return months[month];\n }\n const localizedMonth = resolvedLocale.localize.month(month);\n return localizedMonth.charAt(0).toUpperCase().concat(localizedMonth.slice(1));\n },\n [resolvedLocale, months],\n );\n\n return (\n <div className={classes.root} {...addDataAttributes(data)}>\n <DatePickerBase\n ref={componentRef}\n minDate={minDate}\n maxDate={maxDate}\n locale={resolvedLocale}\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 popperProps={popperProps}\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 ??\n ((baseProps) => (\n <DatePickerHeader {...baseProps} getMonthSelectString={getLocalizedMonth} />\n ))\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({ 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({ 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({ 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({ 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 date: 'Дата',\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 date: 'Date',\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 { 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 { IDatePickerStyles } from '../../../DatePicker';\nimport { innerTextButtonStyles } from '../../FiltersPane.styles';\n\nexport const useStyles = createThemedStyles('FilterDateSingle', {\n root: {\n width: 312,\n background: colors.CLASSIC_WHITE,\n position: 'relative',\n zIndex: 20,\n },\n\n container: {\n padding: [8, 20],\n },\n\n buttons: {\n display: 'flex',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n padding: 8,\n },\n});\n\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport type IFilterDateSingleStyles = ITweakStyles<\n typeof useStyles,\n {\n tweakDatePicker: IDatePickerStyles;\n tweakClearButton: IButtonStyles;\n }\n>;\n","import { FC, useMemo, useRef } from 'react';\nimport { enUS, ru } from 'date-fns/locale';\nimport { addDataAttributes, getTestId } from '@true-engineering/true-react-platform-helpers';\nimport { useTweakStyles } from '../../../../hooks';\nimport { ICommonProps } from '../../../../types';\nimport { Button } from '../../../Button';\nimport { DatePicker, IDatePickerProps } from '../../../DatePicker';\nimport { getLocale } from '../../helpers';\nimport { IFilterLocaleKey, IPartialFilterLocale } from '../../types';\nimport { clearButtonStyles, IFilterDateSingleStyles, useStyles } from './FilterDateSingle.styles';\n\nexport interface IFilterDateSingleProps\n extends ICommonProps<IFilterDateSingleStyles>,\n Partial<\n Pick<\n IDatePickerProps,\n | 'label'\n | 'minDate'\n | 'maxDate'\n | 'calendarStartDay'\n | 'popperModifiers'\n | 'popperPlacement'\n | 'customInput'\n >\n > {\n value?: Date | null;\n locale?: IPartialFilterLocale;\n localeKey?: IFilterLocaleKey;\n isClearable?: boolean;\n onChange: (value: Date | null) => void;\n onClose?: () => void;\n onEndBtnSubmit: () => void;\n}\n\nexport const FilterDateSingle: FC<IFilterDateSingleProps> = ({\n value,\n label,\n locale,\n localeKey,\n isClearable,\n tweakStyles,\n onChange,\n onClose,\n onEndBtnSubmit,\n testId,\n data,\n ...props\n}) => {\n const classes = useStyles({ theme: tweakStyles });\n\n const tweakClearButtonStyles = useTweakStyles({\n innerStyles: clearButtonStyles,\n tweakStyles,\n className: 'tweakClearButton',\n currentComponentName: 'FilterDateSingle',\n });\n\n const tweakDatePickerStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakDatePicker',\n currentComponentName: 'FilterDateSingle',\n });\n\n const popperTargetRef = useRef<HTMLDivElement>(null);\n\n const dateLocale = localeKey === 'ru' ? ru : enUS;\n const translates = useMemo(() => getLocale(localeKey, locale), [localeKey, locale]);\n\n const handleClear = () => {\n onEndBtnSubmit();\n };\n\n return (\n <div className={classes.root} ref={popperTargetRef} {...addDataAttributes(data, testId)}>\n <div className={classes.container}>\n <DatePicker\n label={label ?? translates.date}\n locale={dateLocale}\n months={translates.months}\n selectedDate={value}\n onChangeDate={(date) => {\n onChange(date);\n onClose?.();\n }}\n tweakStyles={tweakDatePickerStyles}\n popperProps={{ elements: { reference: popperTargetRef?.current } }}\n {...props}\n />\n </div>\n\n <div className={classes.buttons}>\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 </div>\n </div>\n );\n};\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, 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({ 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({ 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({ 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: 312,\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\nexport const clearButtonStyles = structuredClone(innerTextButtonStyles);\n\nexport const backButtonStyles = innerTextButtonStyles;\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 } from 'react';\nimport { isAfter, isBefore } from 'date-fns';\nimport { enUS, ru } from 'date-fns/locale';\nimport { getTestId, addDataAttributes } 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 IFilterWithDatesStyles,\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({ 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 tweakStartDatePickerStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakStartDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const tweakEndDatePickerStyles = useTweakStyles({\n tweakStyles,\n className: 'tweakEndDatePicker',\n currentComponentName: 'FilterWithDates',\n });\n\n const popperTargetRef = 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\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} ref={popperTargetRef} {...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 popperProps={{ elements: { reference: popperTargetRef?.current } }}\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 popperProps={{ elements: { reference: popperTargetRef?.current } }}\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 </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({ 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);\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\nexport const 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 { FilterDateSingle } from '../FilterDateSingle';\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 { isDateOrEmpty, 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 === 'datePickerSingle') {\n const preparedValue = isDateOrEmpty(value) ? value : undefined;\n\n return (\n <FilterDateSingle\n value={preparedValue}\n onChange={onChange}\n onClose={onClose}\n onEndBtnSubmit={() => onChange(undefined)}\n localeKey={translatesLocaleKey}\n locale={translates}\n testId={getTestId(testId, 'datePicker')}\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({ 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 { ReactNode, useMemo } from 'react';\nimport { format } from 'date-fns';\nimport {\n isArrayNotEmpty,\n isNotEmpty,\n isObject,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ITweakStylesProps } from '../../../../types';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\nimport { getLocale } from '../../helpers';\nimport { IDateRangeConfigItem, 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 Pick<IFilterWrapperProps<Values, Key>, 'value' | 'filter' | 'localeKey' | 'locale'>,\n ITweakStylesProps<IFilterValueViewStyles> {\n value: Values[Key];\n}\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>): ReactNode {\n const classes = useStyles({ 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 (isNotEmpty(filter.getSelectedValueView)) {\n return <span className={classes.text}>{filter.getSelectedValueView(value)}</span>;\n }\n\n const displayValue = (v: unknown): string => {\n if (!isNotEmpty(v)) {\n return '';\n }\n\n if (v instanceof Date) {\n const { dateFormat = DEFAULT_DATE_FORMAT } = filter as IDateRangeConfigItem<unknown>;\n return format(v, dateFormat);\n }\n\n if (!isObject(v)) {\n return String(v);\n }\n\n if ('value' in v && isNotEmpty(v.value)) {\n return String(v.value);\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 ?? displayValue;\n return <span className={classes.text}>{getView(value)}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getArrayView = (values: unknown, getView: (_: any) => ReactNode = displayValue) => {\n if (!Array.isArray(values) || !isArrayNotEmpty(values)) {\n return null;\n }\n\n const [first, ...rest] = values;\n return (\n <>\n <span className={classes.text}>{getView(first)}</span>\n {isArrayNotEmpty(rest) && <span className={classes.count}> (+{rest.length})</span>}\n </>\n );\n };\n\n if (filter.type === 'multiSelect') {\n const { include } = value as Partial<IMultiSelectListValues<unknown>>;\n return getArrayView(include, filter.getValueView);\n }\n\n const isMultiple = filter.type === 'custom' && filter.valueViewType === 'multiple';\n if (isMultiple) {\n return getArrayView(value, filter.getSelectedValue);\n }\n\n const isDateRange = filter.type === 'dateRange' || filter.type === 'dateRangeWithoutPeriod';\n if (isDateRange) {\n const { from, to, periodType = 'CUSTOM' } = value as Partial<IPeriod>;\n\n if (periodType !== 'CUSTOM') {\n return <span className={classes.text}>{translates.periods[periodType] ?? periodType}</span>;\n }\n\n const hasFrom = isNotEmpty(from);\n const hasTo = isNotEmpty(to);\n const range: string[] = [];\n if (hasFrom && hasTo) {\n range.push(displayValue(from), '—', displayValue(to));\n } else if (hasFrom) {\n range.push(translates.from.toLowerCase(), displayValue(from));\n } else if (hasTo) {\n range.push(translates.to.toLowerCase(), displayValue(to));\n } else {\n return null;\n }\n\n return <span className={classes.text}>{range.join(' ')}</span>;\n }\n\n const isRange = filter.type === 'custom' && filter.valueViewType === 'range';\n if (isRange || filter.type === 'interval') {\n if (!Array.isArray(value)) {\n return null;\n }\n\n const [valueFrom, valueTo] = value;\n const range: string[] = [];\n if (isNotEmpty(valueFrom)) {\n range.push(translates.from.toLowerCase(), displayValue(valueFrom));\n }\n if (isNotEmpty(valueTo)) {\n range.push(translates.to.toLowerCase(), displayValue(valueTo));\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 = <T>(value: T): value is NonNullable<T> => {\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 { addDataAttributes } 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({ 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 && hasValue && (\n <div className={classes.value}>\n <FilterValueView\n value={value}\n filter={filter}\n locale={locale}\n localeKey={localeKey}\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 { ITweakStylesProps } from '../../types';\nimport { Icon } from '../Icon';\nimport { customFlags } from './customFlags';\nimport { IFlagStyles, useStyles } from './Flag.styles';\n\nexport interface IFlagProps extends ITweakStylesProps<IFlagStyles> {\n /** @default '' */\n countryCode?: string;\n}\n\nexport const Flag: FC<IFlagProps> = ({ countryCode = '', tweakStyles }) => {\n const classes = useStyles({ 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 { ITweakStylesProps } from '../../types';\nimport { ISkeletonStyles, useStyles } from './Skeleton.styles';\n\nexport interface ISkeletonProps extends ITweakStylesProps<ISkeletonStyles> {\n height?: CSSProperties['height'];\n}\n\nexport const Skeleton: FC<ISkeletonProps> = ({ height, tweakStyles }) => {\n const classes = useStyles({ 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 { ITweakStylesProps } 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 ITweakStylesProps<IFlexibleTableCellStyles>,\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({ 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({ 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 { IReplaceTweakStylesProps } from '../../../../types';\nimport { Checkbox, ICheckboxProps } from '../../../Checkbox';\nimport { IDocActionsView } from './types';\nimport { IDocActionsStyles, useStyles } from './DocActions.styles';\n\nexport interface IDocActionsProps\n extends IReplaceTweakStylesProps<ICheckboxProps<never>, 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({ 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 { ITweakStylesProps } from '../../../../types';\nimport { Icon } from '../../../Icon';\nimport { IMultiSelectListValues } from '../../../MultiSelectList';\nimport { useStyles, IMultiSelectInputStyles } from './MultiSelectInput.styles';\n\nexport interface IMultiSelectInputProps<Value> extends ITweakStylesProps<IMultiSelectInputStyles> {\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({ 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 { ITweakStylesProps } 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 ITweakStylesProps<IPhoneInputCountryListStyles> {\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({ 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 { ITweakStyles, createThemedStyles, animations } from '../../theme';\n\nexport const useStyles = createThemedStyles('Selector', {\n selector: {\n display: 'grid',\n gridAutoFlow: 'column',\n gridAutoColumns: 'auto',\n boxSizing: 'border-box',\n position: 'relative',\n\n '&:has($active)::before': {\n content: '\"\"',\n position: 'absolute',\n transition: animations.defaultTransition,\n transitionProperty: 'left, width',\n width: 'var(--active-element-width)',\n height: 'var(--active-element-height)',\n top: 'var(--active-element-top)',\n left: 'var(--active-element-left)',\n },\n },\n\n autoWidth: {\n gridAutoColumns: '1fr',\n },\n\n required: {},\n\n invalid: {},\n\n option: {\n appearance: 'none',\n background: 'none',\n border: 'none',\n\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1,\n\n '$iconFromRight &': {\n flexDirection: 'row-reverse',\n },\n },\n\n active: {},\n\n disabled: {},\n\n optionIcon: {},\n\n optionText: {},\n\n iconFromRight: {},\n\n s: {},\n\n m: {},\n\n l: {},\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({ 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({ 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({ 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({ 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({ 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({ 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({ 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({ 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({ 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={\n isDisabled ||\n filter?.isDisabled ||\n filter?.requiredFilledFilters?.some((item) => !values[item])\n }\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({ 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 { IReplaceTweakStylesProps } 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<\n IReplaceTweakStylesProps<INumberInputProps, IIncrementInputStyles>,\n 'canBeFloat' | 'precision'\n > {\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({ 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({ 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({ 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({ 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 renderTrigger,\n listSize,\n tweakStyles,\n ...rest\n}) => {\n const classes = useStyles({ 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(triggerProps.data, triggerProps.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 isNotEmpty,\n isReactNodeNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { ICommonProps } from '../../types';\nimport { 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?: ReactNode;\n title?: ReactNode;\n /** @default 's' */\n size?: 's' | 'm' | 'l';\n icon?: IIcon | null;\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 = type !== 'custom' ? `status-${type}` : undefined,\n tweakStyles,\n}) => {\n const classes = useStyles({ tweakStyles });\n\n const hasText = isReactNodeNotEmpty(text);\n const hasTitle = isReactNodeNotEmpty(title);\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 {isNotEmpty(icon) && <div className={classes.icon}>{renderIcon(icon)}</div>}\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 { IReplaceTweakStylesProps } 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 IReplaceTweakStylesProps<IInputProps, IPhoneInputStyles>,\n 'value' | 'onChange' | 'type' | 'mask' | 'units' | 'placeholder'\n > {\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({ 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({ 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 clsx from 'clsx';\nimport {\n addDataTestId,\n addDataAttributes,\n isReactNodeNotEmpty,\n isNotEmpty,\n} from '@true-engineering/true-react-platform-helpers';\nimport { useResizeRef } from '../../hooks';\nimport { ICommonProps } from '../../types';\nimport { renderIcon } from '../Icon';\nimport { ISelectorOption, ISelectorValue } from './types';\nimport { 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({ tweakStyles });\n\n const updateVariables = (active: HTMLElement | null): void => {\n if (isNotEmpty(active?.parentElement)) {\n active.parentElement.style.setProperty('--active-element-width', `${active.clientWidth}px`);\n active.parentElement.style.setProperty('--active-element-height', `${active.clientHeight}px`);\n active.parentElement.style.setProperty('--active-element-left', `${active.offsetLeft}px`);\n active.parentElement.style.setProperty('--active-element-top', `${active.offsetTop}px`);\n }\n };\n\n const resizeRef = useResizeRef<HTMLDivElement>({\n onTargetChange: (target) => updateVariables(target.querySelector(`.${classes.active}`)),\n });\n\n return (\n <div\n ref={resizeRef}\n className={clsx(classes.selector, classes[size], {\n [classes.iconFromRight]: iconPosition === 'right',\n [classes.invalid]: isInvalid,\n [classes.required]: isRequired,\n [classes.autoWidth]: hasSameOptionsWidth,\n })}\n {...addDataAttributes(data, testId)}\n >\n {options.map((option) => {\n const optionId = String(option.value);\n const isDisabledOption = option.isDisabled || isDisabled;\n const isActiveOption = option.value === value;\n\n return (\n <button\n ref={isActiveOption ? updateVariables : undefined}\n key={optionId}\n type=\"button\"\n className={clsx(classes.option, {\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 );\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({ 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({ 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({ 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({ 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 { IReplaceTweakStylesProps } 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 IReplaceTweakStylesProps<IWithPopupProps, IWithTooltipStyles>,\n 'trigger' | 'children' | 'placement' | 'eventType' | 'isTriggerWrapped'\n > {\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","triggerData","popupOpen","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","endControlsWidth","setEndControlsWidth","startIcons","getArray","endIcons","hasStartIcons","hasEndIcons","hasClearButton","hasEndControls","startControlsRef","clientWidth","endControlsRef","renderIconControl","shouldResetSize","isActiveIcon","iconContainerProps","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","MONTH_SELECT_OPTIONS","indexMap","YEARS_SELECT_OPTIONS","getYear","Date","btn","buttons","selectStyles","tweakSelectList","tweakInput","fontWeight","DatePickerHeader","getMonthSelectString","prevMonthButtonDisabled","nextMonthButtonDisabled","changeYear","changeMonth","decreaseMonth","increaseMonth","tweakSelectStyles","getMonth","PopperContainer","LocalesMap","ru","ruLocale","en","enLocale","getDateFormatter","dateFormat","format","getDateValueParser","inputValue","parse","areDatesEquals","date1","date2","isSameDay","day","dayInner","datepicker","DatePicker","selectedDate","minDate","maxDate","months","calendarStartDay","DEFAULT_DATE_FORMAT","monthsShown","strictParsing","fixedHeight","focusSelectedMonth","disabledKeyboardNavigation","shouldRenderPopperInBody","allowSameDay","shouldCloseOnSelect","showPreviousMonths","preventOpenOnFocus","popperModifiers","popperPlacement","popperProps","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","resolvedLocale","getLocalizedMonth","month","localizedMonth","localize","charAt","toUpperCase","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","years","getLocale","custom2","merge","sortValues","arr","settings","settingsIcon","filterWithClearButton","clearButtonStyles","innerTextButtonStyles","structuredClone","FilterDateSingle","localeKey","onEndBtnSubmit","tweakClearButtonStyles","tweakDatePickerStyles","popperTargetRef","dateLocale","enUS","translates","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","gridTemplateColumns","autosize","userSelect","FilterInterval","labelName","withFieldNameInLabel","fromInput","toInput","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","FilterWithDates","onStartBtnSubmit","startPickerProps","endPickerProps","tweakBackButtonStyles","tweakStartDatePickerStyles","tweakEndDatePickerStyles","picker","filterSelectStyles","FilterWithPeriod","isPeriodPickerShown","setIsPeriodPickerShown","periodType","isDatePickerShown","setIsDatePickerShown","period","setPeriod","periodGetters","p","Array","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","displayValue","getView","getArrayView","values","valueViewType","getSelectedValue","hasFrom","hasTo","range","valueFrom","valueTo","isContentNotEmpty","booleanItem","boolean","noValue","openNoValue","openWithValue","iconContainer","FilterWrapper","baseTweakStyles","tweakWrapperStyles","tweakWithPopupStyles","tweakFilterValueViewStyles","isBoolean","handleLabelClick","handleClearIconClick","hasClearIcon","customFlags","AB","OS","noFlag","Flag","countryFlagKey","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","selector","gridAutoFlow","gridAutoColumns","autoWidth","optionIcon","optionText","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","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","codeSearchPlaceholder","tweakCountryListStyles","isSomeFullCodeValid","isDialCodeValid","newPhoneInfo","groupName","htmlFor","hasSameOptionsWidth","updateVariables","setProperty","clientHeight","offsetLeft","offsetTop","resizeRef","querySelector","optionId","isDisabledOption","isActiveOption","textTooltip","infoTooltip","shouldCloseOnClick","onTimeEnd","isFinite","timeoutId","params","scrollHeight","scrollHeightWithElement","hidden","scrollHeightWithoutElement","isOffscreen","elRect","getBoundingClientRect","scrollParentRect","topOffset","one","two"],"mappings":"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AAC,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,OACA,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,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,aACXC,UAAW,aACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,eACXC,UAAW,UACXC,YAAa,KACbE,SAAU,KACVD,UAAW,eACXE,iBAAkB,EAClBC,UAAW,CAAC,OAEd,CACEN,UAAW,YACXC,UAAW,YACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,UACXC,UAAW,UACXC,YAAa,KACbE,SAAU,KACVE,UAAW,CAAC,OAEd,CACEN,UAAW,QACXC,UAAW,QACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,SACXC,UAAW,SACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,QAEd,CACEN,UAAW,WACXC,UAAW,WACXC,YAAa,KACbE,SAAU,MACVE,UAAW,CAAC,SCnlEHE,EAAY,CACvBC,IAAK,YACLC,IAAK,wBACLC,IAAK,wBACLC,IAAK,kBACLC,IAAK,+BACLC,IAAK,2BACLC,IAAK,YACLC,GAAI,qBACJC,IAAK,sBACLC,IAAK,oBACLC,IAAK,WACLC,IAAK,WACLC,IAAK,qBACLC,KAAM,0EACNC,IAAK,gCACLC,KAAM,uBACNC,GAAI,mBACJC,IAAK,YACLC,IAAK,YACLC,KAAM,YACNC,IAAK,2BACLC,IAAK,gBACLC,IAAK,2BACLC,KAAM,aACNC,IAAK,aACLC,GAAI,kBACJC,KAAM,mBACNC,OAAQ,sBACRC,IAAK,QACLC,IAAK,kBACLC,IAAK,aACLC,KAAM,aACNC,KAAM,sCACNC,IAAK,kDACLC,IAAK,iDACLC,IAAK,0CACLC,IAAK,YACLC,IAAK,YACLC,IAAK,kBACLC,KAAM,aACNC,IAAK,WACLC,IAAK,YACLC,IAAK,kBACLC,IAAK,kBACLC,IAAK,gCACLC,KAAM,4EACNC,IAAK,sBACLC,IAAK,kBACLC,GAAI,mBACJC,IAAK,gBACLC,IAAK,gCACLC,IAAK,oBACLC,IAAK,aACLC,KAAM,aACNC,GAAI,aACJC,IAAK,WACLC,IAAK,aACLC,IAAK,wBACLC,IAAK,YACLC,KAAM,aACNC,KAAM,aACNC,KAAM,aACNC,KAAM,YACNC,MAAO,aACPC,MAAO,wBACPC,IAAK,2BACLC,KAAM,oEACNC,IAAK,MACLC,IAAK,kCACLC,IAAK,kBACL,MAAO,aACP,MAAO,cACP,KAAM,+BCrEKC,EAAoB,CAC/B7E,EACA8E,EAAgBjF,IAEhB/D,EAAAA,WAAWkE,GACP8E,EAAcC,KAAMC,GAASA,EAAKhF,cAAgBA,QAClD,EAEOiF,EAAyB,CAACjF,EAAsB8E,EAAgBjF,IAC3E/D,EAAAA,WAAWkE,GACP8E,EAAcI,UAAWF,GAASA,EAAKhF,cAAgBA,IACvD,EAEOmF,EAAyB,CAACC,EAAqBC,IACjC,OAAzBA,EAAOC,cAAyBF,EAAQrF,UAAYqF,EAAQtF,UAKjDyF,EAAwB,CAACT,EAA6BO,IACjEP,EAAcU,KAAK,CAACC,EAAUC,IAC5BP,EAAuBM,EAAUJ,GAAQM,cACvCR,EAAuBO,EAAUL,KAI1BO,EAA6B,CAACR,EAAqBS,KAC9D,MAAMC,EAAaD,EAAaP,cAAcS,OAAOC,QAAQ,IAAK,IAUlE,MARuB,CACrBZ,EAAQrF,UACRqF,EAAQtF,aACLsF,EAAQrF,UAAUkG,MAAM,QACxBb,EAAQtF,UAAUmG,MAAM,KAC3Bb,EAAQlF,UACRgG,IAAKC,GAASA,EAAKb,eAECc,KAAMC,GAAMA,EAAEpK,WAAW6J,KAGpCQ,EAAgBC,IAC1BA,GAAOrG,UAAY,KAAOqG,GAAOC,aAAe,IAEtCC,EAA2BC,IACtC,GAAIC,EAAAA,cAAcD,GAChB,OAIF,MAAME,EAAmB/G,EAAUvE,OAAQ0J,GACzCA,EAAK5E,UAAUgG,KAAMS,GAAaH,EAAczK,WAAW4K,KAI7D,GAAgC,IAA5BD,EAAiBE,OACnB,OAAOF,EAAiB,GAAG5G,YAI7B,MAAM+G,EAA2BlH,EAC9BvE,OAAQ0J,GAAS0B,EAAczK,WAAW+I,EAAK9E,WAC/CsF,KAAK,CAACwB,EAAGC,KAAOD,EAAE7G,kBAAoB,MAAS8G,EAAE9G,kBAAoB,MAExE,OAAO4G,EAAyBlK,GAAG,IAAImD,aAG5BkH,EAAwB,CAACC,EAAmBnH,KACvD,MAAMoH,EAAiBpH,GAAeyG,EAAwBU,GACxDjH,EAAW2E,EAAkBuC,IAAiBlH,SAGpD,MAAO,CAAEA,WAAUsG,YAFCW,EAAUE,MAAMnH,GAAU4G,QAEd9G,YAAaoH,IAGlCE,EAAqB,yBAErBC,GAAgBvH,IAC3B,IAAIwH,EAAOF,EACX,GAAIxL,EAAAA,WAAWkE,GAAc,CAC3B,MAAMyH,EAAkB5C,EAAkB7E,GAE1C,QAAwB,IAApByH,EAA+B,CACjC,MAAMC,EAAiBD,EAAgBvH,SAAS4G,OAC1Ca,EACJF,EAAgBxH,WAAauH,EAAKI,UAAU,EAAGJ,EAAKV,OAASY,GAC/DF,EAAO,KAAK,IAAIK,OAAOH,MAAmBC,GAC5C,CACF,CAEA,OAAOH,GClFIM,GAAoBC,IAC/B,IAAIC,EAAS,GASb,OARAD,EAAO9B,MAAM,IAAIgC,QAASC,IACpBA,EAAK5C,gBAAkB4C,EACzBF,GAAUE,EAEVF,GAAU,IAAIE,EAAK5C,kBAIhB0C,GAGIG,GAAiBC,GACP,SAArBA,EAAQC,UAAuBD,IAAYE,SACtCF,EACAA,EAAQG,YAA2BH,EAAuBI,KAEpDC,GAAiB,CAACL,EAAkBM,KAC/C,GAAIN,IAAYM,EACd,OAAO,EAGT,MAAMH,EAAaJ,GAAcC,GAEjC,OAAIG,IAAeH,GAIZK,GAAeF,EAAYG,IAGvBC,GAA4BP,GAClB,IAArBA,EAAQQ,SAAiB,CAAA,EAAKC,iBAAiBT,EAAS,MAE7CU,GAAmBV,IAC9B,IAAKA,EACH,OAAOE,SAASS,KAGlB,OAAQX,EAAQC,UACd,IAAK,OACL,IAAK,OACH,OAAQD,EAAoBY,cAAcD,KAC5C,IAAK,YACH,OAAQX,EAAqBW,KAGjC,MAAMhP,SAAEA,YAAUkP,EAAAC,UAAWA,GAAcP,GAAyBP,IAAuB,CAAA,EAC3F,MAAI,wBAAwBe,MAAMpP,GAAY,KAAOmP,GAAa,KAAOD,GAAa,KAC7Eb,EAEFU,GAAgBX,GAAcC,KA0B1BgB,GAAmB,CAACC,EAAeC,OAAiBC,EAAMC,MACrEC,KAAKH,IAAIC,EAAKE,KAAKF,IAAID,EAAKD,IAIjBK,GAAqB,CAChCC,EACAC,EAJkC,OAMlC,QAAY,IAARD,EACF,MAAO,GAET,MAAME,EAAQF,EAAI1D,MAAM,KAOxB,OALA4D,EAAM,GAAKA,EAAM,GAEd7D,QAAQ,YAAa,IAErBA,QAAQ,wBAAyB4D,IAC5BC,EAAM,IAAM,IAAI/C,OAAS,EAAI+C,EAAMC,KAAK,KAAOD,EAAM,IAGlDE,GAAe,CAACJ,EAAcC,EAnBP,WAoBtB,IAARD,GAAqBK,MAAML,GACtB,GAEFD,GAAmBO,OAAON,GAAMC,GAG5BM,GAAsBP,IAChCA,GAAO,IAAI3D,QAAQ,IAAK,KAAKA,QAAQ,MAAO,IAElCmE,GAAkBR,IAC7B,MAAMS,EAAUF,GAAmBP,GACnC,GAAgB,KAAZS,EACF,OAEF,MAAMC,EAAMC,OAAOF,GACnB,OAAOJ,MAAMK,QAAO,EAAYA,GAGrBE,GAAmB,CAACC,EAAwBC,KACtC,OAAbA,GAA8B,OAATD,IAGrBA,EAAKE,gBACPF,EAAKG,QACLH,EAAKI,kBAAkBH,EAAUA,IAEjCD,EAAKG,UAIIE,GAAe3C,QACjB,IAATA,GAA2C,OAArBA,EAAK4C,MAAM,MAEtBC,GAAmBC,QACxB,IAANA,GAAmBhB,MAAMgB,GAAK,EAAIA,EAAEC,WAAWnE,OAmBpCoE,GAAcC,EAAAA,KChKdC,GAAc,EACzBC,SACAC,kBACAC,mBACAC,kBACAC,UACAC,kCAAkC,OASlC,MAAMC,gBACJA,GAAkB,EAAAC,mBAClBA,GAAqB,EAAAC,mBACrBA,GAAqB,EAAAC,aACrBA,EAAe,WAAAC,aACfA,GAAe,EAAAC,UACfA,EAAY,GAAAC,UACZA,EAAY,eAAAC,YACZA,GACET,GAAW,CAAA,EAoBf,IAAIU,EAiCJ,OAnDAvN,EAAAA,UAAU,KACR,IAAKiN,IAAuBR,EAC1B,OAGF,MAAMe,EACa,SAAjBN,EACIhD,GAAgByC,GACC,aAAjBO,EACAxD,SACAwD,EAGN,OAFAM,EAAeC,iBAAiB,SAAUf,GAEnC,KACLc,EAAeE,oBAAoB,SAAUhB,KAE9C,CAACO,EAAoBR,IAGpBM,IAGFQ,EAAaI,EAAUhB,EAAkBC,EAAiB,CACxDvM,QAASoM,EACTY,YACAD,UAAW,IACLJ,EAAqB,CAAC7M,GAAoB,GAC9C,CACEC,KAAM,SACNyM,QAAS,CACPe,OAAQ,CAAC,EAAG,KAGhB,CACExN,KAAM,OACNyM,QAAS,CACPgB,mBAAoBV,EAAe,CAAC,eAAgB,aAAe,CAAC,mBACjEG,OAGJF,MAKTpN,EAAAA,UAAU,KACuC,IAA3C8M,EAAgC5E,QAClCqF,GAAYO,UAEbhB,GAEIS,GChFIQ,GAAmBtD,IAC9B,MAAMuD,EAAMjO,EAAAA,OAAO0K,GAMnB,OAJAwD,EAAAA,gBAAgB,KACdD,EAAI9N,QAAUuK,IAGTuD,GCGIE,GAAqB,EAChCC,qBACGtB,MAEH,MAAMuB,EAAaL,GAAalB,IAE1BmB,IAAEA,EAAAK,WAAKA,GAAevR,EAAAA,QAAQ,KAClC,MAAMwR,EAAW,IAAIC,qBAAqB,GAAIC,sBAC5C,MAAMtO,QAAEA,GAAYkO,EAChBlO,GAASuO,aAGTD,EACFtO,GAASwO,mBAETxO,GAASyO,wBAEVR,GASH,MAAO,CACLH,IARyCY,IACzCN,EAASD,aACLnR,EAAAA,WAAW0R,IACbN,EAASO,QAAQD,IAMnBP,WAAY,IAAMC,EAASD,eAE5B,CAACD,EAAYD,IAIhB,OAFAnO,EAAAA,UAAU,IAAMqO,EAAY,CAACA,IAEtBL,GCnCIc,GAAmCjC,IAC9C,MAAMuB,EAAaL,GAAalB,IAE1BmB,IAAEA,EAAAK,WAAKA,GAAevR,EAAAA,QAAQ,KAClC,MAAMwR,EAAW,IAAIS,eAAe,EAAEC,MACpC,MAAM9O,QAAEA,GAAYkO,EACflO,EAAQuO,aACXvO,EAAQ+O,WAAWD,GACnB9O,EAAQgP,iBAAiBF,EAAMG,WAgBnC,MAAO,CAAEnB,IAZ4BY,IACnCN,EAASD,aACJnR,EAAAA,WAAW0R,KAIhBN,EAASO,QAAQD,GACZR,EAAWlO,QAAQuO,YACtBL,EAAWlO,QAAQgP,iBAAiBN,KAIbP,WAAY,IAAMC,EAASD,eACrD,CAACD,IAIJ,OAFApO,EAAAA,UAAU,IAAMqO,EAAY,CAACA,IAEtBL,GCtCIoB,GAAe,KAC1B,MAAMC,EAAYtP,EAAAA,QAAO,GAUzB,OARAC,EAAAA,UAAU,KACRqP,EAAUnP,SAAU,EAEb,KACLmP,EAAUnP,SAAU,IAErB,IAEIoP,cAAY,IAAMD,EAAUnP,QAAS,KCVjCqP,GAAmCC,GAAS1S,EAAAA,QAAQ,IAAM2S,EAAAA,UAAUD,GAAOA,GCC3EE,GAAgC,CAAClG,EAAsBmG,MAC9DnG,EAAQoG,UAAUC,SAASF,IAI3BnG,IAAYE,SAASS,SAIrBX,EAAQsG,eACHJ,GAA8BlG,EAAQsG,cAAeH,IAMnDI,GAAwB,CAACvG,EAAsBwG,IACtDxG,IAAYwG,GAIZxG,IAAYE,SAASS,SAIrBX,EAAQsG,eACHC,GAAsBvG,EAAQsG,cAAeE,IAMjD,SAASC,GACdC,EACAC,EACAC,GAEAC,GAAkBH,EAAaC,OAAS,EAAWC,EACrD,CAEO,SAASC,GACdH,EACAC,EACAG,EACAF,GAEA,MAAMhC,EAAaL,GAAa,CAAEmC,cAAaE,YAAWE,kBAAiBH,YAE3EnQ,EAAAA,UAAU,KACR,MAAMuQ,EAAYC,IAChB,MAAM3D,EAAUuB,EAAWlO,QAErB0L,EAAO6E,aAAW5D,EAAQqD,aAC5BrD,EAAQqD,cACRrD,EAAQqD,aAAahQ,QACnBwQ,EAAa7D,EAAQuD,WAAWlQ,QAChCiP,EAASqB,EAAMrB,OAGnBwB,EAAAA,QAAQ/E,IAERA,EAAKiE,SAASV,IACbjS,EAAAA,WAAW2P,EAAQyD,kBAClBZ,GAA8BP,EAAQtC,EAAQyD,kBAC/CpT,aAAWwT,IAAeX,GAAsBZ,EAAQuB,IAK3D7D,EAAQsD,QAAQK,IAMlB,OAHA9G,SAAS+D,iBAAiB,YAAa8C,GACvC7G,SAAS+D,iBAAiB,aAAc8C,GAEjC,KACL7G,SAASgE,oBAAoB,YAAa6C,GAC1C7G,SAASgE,oBAAoB,aAAc6C,KAE5C,CAACnC,GACN,CC9EO,MAAMwC,GAAiB,EAC5BC,cACArU,cACAmT,YACAmB,2BAqBA,MAAMtR,EAAczC,EAAoC+T,GAExD,OAAOhU,EAAAA,QACL,IACEP,EACEsU,EACAtU,EAAUiD,EAAahD,GAAa8K,IAAKvG,GAAUA,EAAM4O,KAE7D,CAACkB,EAAalB,EAAWnQ,EAAahD,KCR7BuU,GAAW,CACtBC,OChCa,k7CDiCbC,SEjCa,+YFkCbC,MGlCa,2THmCb,qBInCa,ogBJoCb,eKpCa,6fLqCb,eMrCa,+fNsCb,gBOtCa,+fPuCb,cQvCa,qkBRwCb,eSxCa,0STyCbC,MUzCa,miBV0Cb,aW1Ca,uvBX2Cb,aY3Ca,woCZ4Cb,aa5Ca,6jCb6Cb,Wc7Ca,wgDd8Cb,Ye9Ca,6vBf+Cb,WgB/Ca,oxDhBgDb,WiBhDa,4sDjBiDbzU,OkBjDa,4flBkDb0U,YmBlDa,wjBnBmDbC,KoBnDa,u3CpBoDbC,MqBpDa,gPrBqDbC,KsBrDa,yRtBsDbC,OuBtDa,icvBuDb,ewBvDa,qaxBwDb,cyBxDa,qezByDb,gB0BzDa,wsB1B0Db,Y2B1Da,0hB3B2Db,iB4B3Da,oe5B4Db,Y6B5Da,qeCEF7S,GAAYE,EAAmB,OAAQ,CAClD4S,KAAM,CACJtX,QAAS,OACTuX,WAAY,YCOHC,GAAuB,EAAGC,OAAMnS,OAAMoS,SAAQrV,kBACzD,MAAMsV,EAAUnT,GAAU,CAAEnC,gBACtB+C,EAAQlD,IAER0V,EAAOxS,EAAMyS,QAAQJ,IAASb,GAASa,GAE7C,OAAIjB,EAAAA,QAAQoB,IACV3S,QAAQC,MAAM,UAAUuS,mBACjB,MAIPK,EAAAA,IAAC,MAAA,CACCtC,UAAWmC,EAAQL,QACfS,EAAAA,kBAAkBzS,EAAMoS,GAC5BM,wBAAyB,CAAEC,OAAQL,MCvB5BM,GAAcN,GACT,iBAATA,EAAoBE,MAACN,GAAA,CAAKC,KAAMG,IAAWA,ECHvCO,GAAwCC,EAAAA,KAAK,CACxD,KAAAC,EAAM5R,MAAEA,EAAAE,SAAOA,IACbvD,OAAOkV,OAAO3R,EAAS4R,SAAS3R,MAAO,CACrCJ,SAAU,GAAGC,EAAMC,UAAUjG,WAEjC,ICLW+D,GAAYE,EAAmB,YAAa,CACvD8T,QAAS,CACP/X,MAAO,eAGTgY,UAAW,CACTC,OAAQ,WAGVC,OAAQ,CAAA,EAERC,SAAU,CACRF,OAAQ,QAGVG,MAAO,CACLC,OAAQ,EACRC,QAAS,QAGXC,MAAO,CAAA,EAEPC,aAAc,CAAA,EAEdC,eAAgB,CAAA,EAEhB,mBAAoB,CAClBC,OAAQ,gBAGV,gBAAiB,CACfA,OAAQ,kBAGV,iBAAkB,CAChBC,WAAY,SACZD,OAAQ,gBAGV,qBAAsB,CACpBA,OAAQ,kBC6CCE,GAAiC,EAC5Cb,UACAc,WACAC,cAAc,GACdC,YAAY,QACZtG,aAA0B,UAAdsG,EAAwB,aAAe,OACnDC,aAAa,EACbC,cC9F4B,ED+F5BC,aACAC,YACAC,wBAAsC,UAAdL,EACxB1G,sBAAqB,EACrBD,sBAAqB,EACrBG,gBAAe,EACf8G,mBAAiC,UAAdN,EACnBlF,cAAa,EACbyF,mBAAkB,EAClBC,2BAA0B,EAC1BC,eACAC,eACAC,eACAC,iBACAC,oBACAhY,cACAiD,OACAoS,SACA4C,eAEA,MAAM3C,EAAUnT,GAAU,CAAEY,MAAO/C,KAE5BiQ,EAAQiI,GAAaC,EAAAA,UAAS,GAC/BC,EAAWnI,IAAWgC,EAEtBoG,EAAW9U,EAAAA,OAAsB,MAEjC+U,EAAe,CAAC9W,EAAewS,KACnCA,GAAOuE,kBACPN,IAAWzW,EAAMwS,GACjBkE,EAAU1W,KAONwR,KAAEA,EAAAwF,eAAMA,EAAAC,QAAgBA,GAAYC,EAAAA,YAAY,CACpDC,KAAMP,EACNQ,WAAY,CACVxH,EAAAA,OAAOiG,GACP1G,GAAgBkI,EAAAA,KAAK,CAAEC,0BAA2B,UAClDnB,GAA2B7B,MACxBoB,EACHQ,GAAmBf,EAAAA,MAAM,CAAE3J,QAASqL,KAEtCU,qBAAsBC,EAAAA,WACtBnI,YACAoI,aAAcX,IAGVY,EAAQC,EAAAA,SAASV,EAAS,CAC9B5U,QAAuB,UAAdsT,EACTiC,MAAO,CAAET,KAAMvB,EAAYzC,MAAO,GAClC0E,YAAaC,EAAAA,iBACV1B,IAGCrI,EAAQgK,EAAAA,SAASd,EAAS,CAAE5U,QAAuB,UAAdsT,KAA0BW,IAE/D0B,EAAQC,EAAAA,SAAShB,EAAS,CAAE5U,QAAuB,UAAdsT,KAA0BU,IAE/D6B,EAAUC,EAAAA,WAAWlB,EAAS,CAClC5U,QAAuB,UAAdsT,EACTyC,eAAgBnJ,KACbsH,KAGC8B,iBAAEA,EAAAC,kBAAkBA,GAAsBC,EAAAA,gBAAgB,CAACb,EAAOM,EAAOjK,EAAOmK,KAEhF7G,UAAEA,EAAAmH,OAAWA,GAAWC,EAAAA,oBAAoBxB,EAAS,CACzDyB,SAAU,CAAEvF,MAAO,QAChBqD,IAGCmC,EAAkCL,EAAkB,CACxDtI,IAAKwB,EAAKoH,gBACN5C,GAAyB,CAC3B6C,QAAS9B,EAAAA,mBAIP+B,EAA+B,CAAEC,UAAWnC,KAAanV,GAEzDuX,EAAiBC,EAAAA,YAAYtE,EAAS,CAC1CgE,eAAiB1C,OAAoC,EAAjB0C,EACpCO,aAAc,CACZtC,WACAnG,iBACKwF,GAAoB,CAAExU,KAAMqX,EAAajF,YAAW8E,MAI7D,OACEQ,EAAAA,KAAAC,WAAA,CACG3D,SAAA,CAAAQ,EACChC,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQa,QAAS,CAC/B,CAACb,EAAQc,WAA0B,UAAde,EACrB,CAAC7B,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQgB,QAAS8B,OAEhB+B,KACAzE,EAAAA,kBAAkB4E,EAAajF,GAElC4B,SAAAuD,IAGHA,EAED3H,GACC4C,EAAAA,IAACqF,EAAAA,eAAA,CACC7F,KAAMzE,EAAqBtD,SAASS,KAAQqF,EAAK3O,UAAUX,QAE3DuT,SAAAxB,EAAAA,IAAC,MAAA,CACCjE,IAAKwB,EAAK+H,YACVxW,MAAOiU,EACPrF,UAAWmC,EAAQkB,SACfqD,OACAnE,oBAAkB6B,EAAWlC,EAAQ,SAEzC4B,gBAAC,MAAA,CAAI9D,UAAWmC,EAAQ,YAAY0E,KACjC/C,SAAA,CAAAS,GACCjC,EAAAA,IAACuF,EAAAA,cAAA,IACK1D,EACJ9F,IAAK6G,EACLI,UACAtF,UAAWmC,EAAQqB,QAGtB8D,EAAAA,YAAYxD,EAAU,CAAEgE,gBAAiBxC,EAASyC,QAjG1ClH,IACnBsE,GAAa,EAAOtE,iBE1HX7R,GAAYE,EAAmB,WAAY,CACtD4S,KAAM,CACJtX,QAAS,OACTuX,WAAY,SACZiG,IANa,GAObzc,UAAW,aACX0c,SAAU,GACVC,WAAY,SACZzc,UAAW,GACX0c,QAAS,CAAC,EAbkB,IAc5Bhc,WAAYL,EAAWC,kBACvBK,mBAAoB,mBACpB8W,OAAQ,WAGVkF,QAAS,CAAA,EAETC,YAAa,CAAA,EAEbC,QAAS,CAAA,EAETC,aAAc,CACZrF,OAAQ,WAGVsF,OAAQ,CACNtd,OAAQ,EACRQ,gBAAiB7D,EAAOO,cAG1BqgB,YAAa,CACXC,YAAaC,IAGfvG,KAAM,CACJnX,MAtCc,GAuCdC,OAvCc,GAwCd0d,WAAY,GAGd/d,QAAS,CACPge,SAAU,GAGZC,QAAS,CAAA,ICvBEC,GAA+B,EAC1C3G,OACA4G,OACAC,cACArG,OACAQ,SAAUtE,EACVoK,YACAC,wBACAC,wBACAlH,SACArV,cACAwc,OAAO,UACPZ,cACA3Y,OACAoX,cAEA,MAAM/E,EAAUnT,GAAU,CAAEnC,gBAE5B,OACE2a,EAAAA,KAAAC,WAAA,CACG3D,SAAA,CAAAqF,KAAyB7G,IAAC,MAAA,CAAItC,UAAWmC,EAAQqG,SAClDhB,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQkH,GAAO9b,EAAAA,WAAWqV,IAAST,EAAQS,GAAO,CAC9E,CAACT,EAAQoG,cAAezJ,EACxB,CAACqD,EAAQsG,aAAcA,EACvB,CAACtG,EAAQmG,SAAUY,OAEjBI,EAAAA,gBAAgBpC,GAAUpI,MAC1ByD,EAAAA,kBAAkB,IAAKzS,EAAMsT,WAAUtE,QAAoB,GAAaoD,GAE3E4B,SAAA,CAAAyF,EAAAA,oBAAoBnH,MAASE,IAAC,OAAA,CAAKtC,UAAWmC,EAAQC,KAAO0B,SAAApB,GAAWN,KACzEE,EAAAA,IAAC,OAAA,CAAKtC,UAAWmC,EAAQtX,QAAUiZ,SAAAkF,IAClCna,EAAAA,gBAAgBoa,IACf3G,EAAAA,IAAC,OAAA,CAAKtC,UAAW0H,EAAKvF,EAAQC,KAAMD,EAAQ2G,SAC1ChF,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,uBAIhBmH,KAAyB9G,IAAC,MAAA,CAAItC,UAAWmC,EAAQqG,aC9D3CxZ,GAAYE,EAAmB,OAAQ,CAClD4S,KAAM,CACJ9Q,SAAU,IACVtF,gBAAiB7D,EAAOY,cACxB0f,QAAS,CAAC,EAAG,GACbqB,UAAW,OACXC,OAAQ,EACRC,UAAW,QAGbT,YAAa,CACXxe,WAAW,EACXie,YAAa,KAIJiB,GAAoC,CAC/C3G,QAAS,CACP/X,MAAO,SCFE2e,GAAuB,EAAGC,QAAOjH,OAAMV,SAAQpS,OAAMjD,cAAaqa,cAC7E,MAAM/E,EAAUnT,GAAU,CAAEnC,gBAYtBid,EAAgBD,EAAM9c,OAAO,EAAGgd,eAAgBA,GAEtD,OACEzH,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQL,KAAMvU,EAAAA,WAAWqV,IAAST,EAAQS,OACtDL,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAAgG,EAAcnS,IAAI,CAACqR,EAAMgB,KACxB,MAAMC,EAA4B,CAChC/H,OAAQgI,EAAAA,UAAUhI,EAAQ,QAAQ8H,KAClCpH,UACGoG,EACHG,sBAAuBH,EAAKG,uBAA+B,IAANa,EACrDZ,sBAAuBJ,EAAKI,uBAAyBY,IAAMH,EAAMtR,OAAS,EAC1E2O,QAAUrG,GAxBM,EACtBA,GACEqG,QAASiD,MAEP5c,EAAAA,WAAW4c,KACbA,EAAYtJ,GACZqG,IAAUrG,KAkBcuJ,CAAgBvJ,EAAOmI,IAG7C,OACE1G,EAAAA,IAACmF,EAAAA,SAAA,CACE3D,SAAAjV,EAAAA,gBAAgBma,EAAKC,aACpB3G,EAAAA,IAACuB,GAAA,CACCG,UAAU,QACVnX,YAAa8c,GACbjM,UAAU,cACVwG,YAAa,EACb7G,oBAAoB,EACpB2F,QAAS,EAAGuE,kBACVjF,MAACyG,GAAA,IAAakB,EAAWf,UAAW3B,EAAatC,WAGnDnB,WAAAxB,IAAC,MAAA,CAAItC,UAAWmC,EAAQ8G,YACtBnF,SAAAxB,EAAAA,IAACsH,GAAA,CAAKC,MAAOb,EAAKC,YAAarG,OAAYsE,gBAI/C5E,EAAAA,IAACyG,GAAA,IAAakB,KAjBHD,QChDZhb,GAAYE,EAAmB,cAAe,CACzD4S,KAAM,CACJtX,QAAS,QAGX6f,QAAS,CACP7f,QAAS,OACTF,SAAU,WACVyX,WAAY,SACZmB,OAAQ,WAGVoH,YAAa,CACXb,OAAQ,CAAC,EAAG,EAAG,EAAG,IAClBxB,SAAU,GACV9b,WAAYL,EAAWC,kBACvBK,mBAAoB,SAGtBme,kBAAmB,CAAA,EAEnBC,eAAgB,CACdvf,MAAO,GACPC,OAAQ,GACRiB,WAAYL,EAAWC,kBACvBK,mBAAoB,oBAGtBqe,qBAAsB,CACpBve,UAAW,kBAGbwe,YAAa,CACXpgB,SAAU,WACVgZ,OAAQ,GACRxY,IAAK,OACLE,MAAO,EACPP,UAAW,GAGbkgB,WAAY,CACV1f,MAAO,GACPC,OAAQ,OAGPY,EAAWE,UC9CHgD,GAAYE,EAAmB,YAAa,CACvD4S,KAAM,CACJtX,QAAS,OACTuX,WAAY,SACZoG,QAAS,WACTjd,OAAQ,GACRgY,OAAQ,UACRK,QAAS,OACTpX,WAAY,2DACZ8b,SAAU,GAEV,UAAW,CACT9b,WAAY,6DAIhBiX,SAAU,CACRF,OAAQ,WAGVd,KAAM,CACJnX,MAAO,GACPT,QAAS,eACTogB,YAAa,GAGfC,UAAW,CACT5f,MAAO,UC3BE+D,GAAYE,EAAmB,gBAAiB,CAC3D4S,KAAM,CACJtX,QAAS,OACTwd,IAAK,EACL,aAAc,MAEd,sBAAuB,CACrBnd,QAAS,KACT8Y,OAAQ,YAGV,YAAa,CACXmH,eAAgB,KAGlB,WAAY,CACVA,eAAgB,UAMpB,uBAAwB,CACtB,KAAM,CACJ7e,QAAS,IAEX,MAAO,CACLA,QAAS,GAEX,OAAQ,CACNA,QAAS,KAKb8e,SAAU,CACRvgB,QAAS,QACTwgB,kBAAmB,IACnBC,wBAAyB,WACzBC,cAAe,aACftgB,aAAc,MACdK,MAAO,kBACPC,OAAQ,kBACRQ,gBAAiB,gBAGnByf,IAAK,CACHxH,OAAQ,WACRmH,eAAgB,WC5CPM,GAAyC,EAAGve,kBACvD,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAE5B,SACEyV,IAAC,MAAA,CAAItC,UAAWmC,EAAQL,KACtBgC,eAAC,OAAA,CAAK9D,UAAWmC,EAAQgJ,SCTlBE,GAAuB,IAClC7D,EAAAA,KAAC,MAAA,CAAIvc,MAAM,OAAOC,OAAO,OAAOogB,QAAQ,YAAYC,MAAM,6BACxDzH,SAAA,GAAAxB,IAAC,OAAA,CACCwB,SAAA0D,EAAAA,KAAC,iBAAA,CAAegE,GAAG,SAASC,GAAG,KAAKC,GAAG,UAAUC,GAAG,UAAUC,GAAG,IAC/D9H,SAAA,CAAAxB,MAAC,QAAKuJ,UAAU,eAAeC,YAAY,IAAI7N,OAAO,aACrD,OAAA,CAAK4N,UAAU,eAAeC,YAAY,OAAO7N,OAAO,YACzDqE,EAAAA,IAAC,OAAA,CAAKuJ,UAAU,eAAe5N,OAAO,cAG1CqE,EAAAA,IAAC,IAAA,CAAEpW,UAAU,iBAAiB6f,KAAK,OACjCjI,SAAAxB,EAAAA,IAAC,OAAA,CAAK0J,EAAE,8BAA8BC,OAAO,UAAUC,YAAY,IACjEpI,SAAAxB,EAAAA,IAAC,mBAAA,CACCiJ,MAAM,6BACNY,cAAc,YACdC,cAAc,MACdnK,KAAK,SACLoK,KAAK,UACLC,GAAG,YACHC,IAAI,KACJC,MAAM,KACNC,YAAY,aACZV,KAAK,kBCrBF/c,GAAYE,EAAmB,eAAgB,CAC1D4S,KAAM,CACJtX,QAAS,OACTS,MAAO,OACPC,OAAQ,UCKCwhB,GAAuC,EAAGzK,OAAO,UAAWpV,kBACvE,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtB+C,EAAQlD,IACRigB,EAAgB/c,EAAMgd,aAAa3K,IAASoJ,GAGlD,MAF6C,iBAAlBsB,EAGzBrK,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQL,KAAMU,wBAAyB,CAAEC,OAAQkK,WAEhEA,EAAA,KClBQ3d,GAAYE,EAAmB,kBAAmB,CAC7D4S,KAAM,CACJtX,QAAS,QAGXqiB,KAAM,CAAA,EAENzE,QAAS,CAAA,EAET0E,KAAM,CAAA,EAENC,aAAc,CACZC,MAAO,kBCCEC,GAA6C,EACxDhL,OAAO,UACPiL,mBAAkB,EAClBpd,OACAoS,SACArV,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtBsgB,EAA2BlM,GAAe,CAC9CpU,cACAmT,UAAW,qBACXmB,qBAAsB,oBAGlBiM,EAA0BnM,GAAe,CAC7CpU,cACAmT,UAAW,oBACXmB,qBAAsB,oBAGxB,OACEmB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQF,GAAO,CAC3C,CAACE,EAAQ4K,cAAeG,OAEtB3K,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAS,SAAT7B,IACCK,IAAC8I,GAAA,CAAcve,YAAasgB,MAE5B7K,IAACoK,GAAA,CAAazK,OAAYpV,YAAaugB,OC3ClCpe,GAAYE,EAAmB,SAAU,CACpD4S,KAAM,CACJtX,QAAS,OACT6iB,eAAgB,SAChBtL,WAAY,SACZmB,OAAQ,UACRK,QAAS,OACThY,UAAW,aACXY,WAAYL,EAAWC,kBACvBK,mBAAoB,oDACpBkhB,SAAU,OACV3iB,OAAQ,CAAC,EAAG,QAAS,eACrBL,SAAU,WACVI,UAAW,OAEX,cAAe,CACbwY,OAAQ,UACRqK,cAAe,SAInBC,QAAS,CAAA,EACTC,UAAW,CAAA,EACXlK,QAAS,CAAA,EACTmK,QAAS,CAAA,EACTrF,YAAa,CAAA,EACbsF,KAAM,CAAA,EACNC,OAAQ,CAAA,EAER9J,SAAU,CAAA,EAEV1B,KAAM,CACJnX,MAAO,GACPC,OAAQ,GACR0d,WAAY,GAGdiF,aAAc,CACZC,cAAe,MACf9F,IAAK,EAEL,UAAW,CACT+F,YAAY,IAIhBC,cAAe,CACbF,cAAe,cACf9F,IAAK,EAEL,UAAW,CACT4C,aAAa,IAIjBqD,SAAU,CAAA,EAEVC,SAAU,CAAA,EAEVC,EAAG,CACDhG,QAAS,CAAC,EAAG,IACbjd,OAAQ,GACR+c,SAAU,GACVmG,cAAe,IAEf,aAAc,CACZjG,QAAS,EACTld,MAAO,IAGT,UAAW,CACTA,MAAO,GACPC,OAAQ,IAGV,kBAAmB,CACjB8c,IAAK,GAGP,mBAAoB,CAClBA,IAAK,IAITqG,EAAG,CACDlG,QAAS,CAAC,EAAG,IACbjd,OAAQ,GACR+c,SAAU,GAEV,kBAAmB,CACjBD,IAAK,GAGP,mBAAoB,CAClBA,IAAK,GAGP,aAAc,CACZG,QAAS,EACTld,MAAO,KAIXqjB,EAAG,CACDnG,QAAS,CAAC,EAAG,IACbjd,OAAQ,GACR+c,SAAU,GAEV,kBAAmB,CACjBD,IAAK,GAGP,mBAAoB,CAClBA,IAAK,GAGP,aAAc,CACZG,QAAS,EACTld,MAAO,KAIXsjB,GAAI,CACFpG,QAAS,CAAC,EAAG,IACbjd,OAAQ,GACR+c,SAAU,GAEV,aAAc,CACZE,QAAS,EACTld,MAAO,IAGT,kBAAmB,CACjB+c,IAAK,GAGP,mBAAoB,CAClBA,IAAK,IAIT6C,UAAW,CACT7Z,SAAU,OACV/F,MAAO,QAGTujB,OAAQ,CACNC,oBAAqB,EACrBC,uBAAwB,GAG1BvL,OAAQ,CAAA,EAERtY,QAAS,CACPL,QAAS,OACTuX,WAAY,SACZ7W,OAAQ,QAGVyjB,OAAQ,CACNnkB,QAAS,OACTF,SAAU,WACVS,KAAM,MACND,IAAK,MACLoB,UAAW,yBAGb0iB,QAAS,CACP,aAAc,CACZhL,WAAY,UAGd,YAAa,CACXpZ,QAAS,UAIb4Y,SAAU,CAAA,IAGNyL,GAA8C,CAClDC,mBAAoB,CAClB/D,SAAU,CACR9f,MAAO,EACPC,OAAQ,KAKD6jB,GAAsBnM,GACxB,MAATA,GAAyB,MAATA,EAAeiM,QAAsB,EChJ1CG,GAASC,EAAAA,WAA4C,UAChEhN,KACEA,EAAO,SAAA6B,SACPA,EAAAlB,KACAA,EAAO,IAAAyG,KACPA,EAAO,UAAA6F,YACPA,GAAc,EAAAC,SACdA,GAAW,EAAArQ,WACXA,GAAa,EAAAmG,SACbA,GAAW,EAAAmK,UACXA,GAAY,EAAAC,wBACZA,GAA0B,EAAAvf,KAC1BA,EAAAoS,OACAA,EAAArV,YACAA,EAAAuV,KACAA,EAAAkN,aACAA,EAAe,OAAAC,cACfA,EAAgB,UACbC,GAELnR,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtB4iB,EAAuBxO,GAAe,CAC1CC,YAAa6N,GAAmBnM,GAChC/V,cACAmT,UAAW,iBACXmB,qBAAsB,WAGlBuO,EAAUnG,EAAAA,oBAAoBnH,GAC9BuN,EAAcpG,EAAAA,oBAAoBzF,GAClC8L,EAAc9Q,GAAcsQ,EAElC,OACE5H,EAAAA,KAAC,SAAA,CACCnJ,MACA4D,OACAjC,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQS,GAAOT,EAAQkH,GAAO,CAC1D,CAAClH,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQ0I,WAAYqE,EACrB,CAAC/M,EAAQqM,QAASW,EAClB,CAAChN,EAAQgB,QAAS8B,EAClB,CAAC9C,EAAQyM,SAAUQ,EACnB,CAACjN,EAAQ8L,UAAWyB,IAAYC,IAElCE,SAAUR,GAA0B,OAAK,EACzCjM,SAAUwM,KACNJ,KACAjN,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAA0D,EAAAA,KAAC,OAAA,CACCxH,UAAW0H,EAAKvF,EAAQtX,QAAS,CAC/B,CAACsX,EAAQ6L,eAAgB2B,GAAeD,GAA4B,UAAjBJ,EACnD,CAACnN,EAAQ0L,cAAe8B,GAAeD,GAA4B,SAAjBJ,IAGnDxL,SAAA,CAAA4L,GACCpN,EAAAA,IAAC,OAAA,CAAKtC,UAAWmC,EAAQC,KAAO0B,+BAAoB1B,IAASM,GAAWN,KAEzEuN,GACCrN,EAAAA,IAAC,OAAA,CAAKtC,UAAW0H,EAAKvF,EAAQ2B,SAAU4L,GAAWvN,EAAQ+L,UAAYpK,gBAI1EsL,KACC9M,IAAC,OAAA,CAAKtC,UAAWmC,EAAQwM,OACvB7K,SAAAxB,EAAAA,IAAC2K,GAAA,CACChL,KAAMsN,EACNrC,iBAAe,EACfrgB,YAAa4iB,QAMzB,GC5HazgB,GAAYE,EAAmB,WAAY,CACtD4S,KAAM,CACJxX,SAAU,WACV4Y,OAAQ,UACR1Y,QAAS,OACTuX,WAAY,SACZiG,IAAK,GACL/c,MAAO,eAGT6kB,QAAS,CAAA,EAETC,QAAS,CAAA,EAET3M,SAAU,CACRF,OAAQ,UACRqK,cAAe,QAGjByC,MAAO,CACL/kB,MAAO,EACPC,OAAQ,EACRZ,SAAU,WACV2B,QAAS,GAGX6X,SAAU,CACRtZ,QAAS,OACTuX,WAAY,UAGdR,MAAO,CACLtW,MAAO,GACPC,OAAQ,GACRN,aAAc,EACdge,WAAY,EACZpe,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChB9hB,UAAW,cAGb0kB,kBAAmB,CACjBnC,cAAe,iBCXZ,SAASoC,IAAYpV,MAC1BA,EAAAgJ,SACAA,EAAAlB,KACAA,EAAAuN,UACAA,GAAY,EAAAC,cACZA,GAAgB,EAAAC,UAChBA,GAAY,EAAAvR,WACZA,GAAa,EAAAwR,WACbA,GAAa,EAAAC,cACbA,EAAgB,QAAAzgB,KAChBA,EAAAoS,OACAA,EAAArV,YACAA,EAAA2jB,SACAA,IAEA,MAAMrO,EAAUnT,GAAU,CAAEnC,gBAEtB4jB,GAAa3R,IAAewR,EAC5BI,EAAaP,GAAaC,EAE1BtL,EAAYjE,GAChB2P,IAAW,CAAE1V,QAAO4V,YAAaA,GAAc7P,GAEjD,OACE2G,EAAAA,KAAC,QAAA,CACCxH,UAAW0H,EAAKvF,EAAQL,KAAMvU,EAAAA,WAAWqV,IAAST,EAAQS,GAAO,CAC/D,CAACT,EAAQ2N,SAAUY,EACnB,CAACvO,EAAQ4N,SAAUM,EACnB,CAAClO,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQ8N,mBAAsC,SAAlBM,OAE3BhO,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAAxB,EAAAA,IAAC,QAAA,CACCtC,UAAWmC,EAAQ6N,MACnB/N,KAAK,WACL6N,QAASY,EACTtN,SAAUtE,EACV6R,SAAUL,KACLG,GAAa,CAChBnR,SAAUwF,EACV8L,UAAWC,EAAAA,oBAAoB/L,QAGnCxC,IAAC,MAAA,CAAItC,UAAWmC,EAAQZ,MACrBuC,SAAA4M,KAAcpO,IAACN,GAAA,CAAKC,KAAMmO,EAAgB,QAAU,YAEtD7G,sBAAoBzF,IAAaxB,MAAC,OAAItC,UAAWmC,EAAQ2B,SAAWA,eAG3E,CClFO,MAAM9U,GAAYE,EAAmB,cAAe,CACzD4S,KAAM,CACJ7W,MAAO,GACPC,OAAQ,GACRoiB,SAAU,OACVwD,UAAW,OACX3I,QAAS,EACT6E,MAAOnlB,EAAOE,YACd4C,OAAQ,EACRC,aAAc,MACdmmB,WAAY,OACZrlB,gBAAiB,cACjBwX,OAAQ,UACR/W,WAAYL,EAAWC,kBACvBK,mBAAoB,mBAEpB,UAAW,CACTV,gBAAiBslB,EAAKnpB,EAAOM,YAAa,KAG5C,UAAW,CACTuD,gBAAiB7D,EAAOS,YAG1B,WAAY,CACVoD,gBAAiBslB,EAAKnpB,EAAOI,cAAe,QC1BrC+G,GAAYE,EAAmB,cAAe,CACzD,qBAAsB,CACpB+hB,WAAY,oBACZjE,MAAOnlB,EAAOC,UACdqgB,QAAS,EACTsB,OAAQ,GAGV,UAAW,CAAA,EAEX3H,KAAM,CAAA,ICVK9S,GAAYE,EAAmB,eAAgB,CAC1DgiB,aAAc,CACZ1mB,QAAS,OACTsjB,cAAe,SACf7iB,MAAO,OACPX,SAAU,YAGZoF,MAAO,CACLsd,MAAO,OAGTvW,KAAM,CACJuW,MAAO,QAGTmE,WAAY,CACV3mB,QAAS,OAET,QAAS,CACPqe,SAAU,EAEV,sBAAuB,CACrBkF,YAAY,KAKlBqD,SAAU,CACR5mB,QAAS,OACTsjB,cAAe,SAEf,0BAA2B,CACzBrjB,WAAW,IAIf4mB,QAAS,CACPpJ,SAAU,IAGZnE,SAAU,CAAA,IC1BCwN,GAAerC,EAAAA,WAA+C,UACzEnL,SAAEA,EAAAyN,YAAUA,EAAAC,aAAaA,EAAAC,kBAAcA,EAAA5kB,YAAmBA,EAAAqV,OAAaA,EAAApS,KAAQA,GAC/EuO,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtB6kB,EAAkBnI,EAAAA,oBAAoBiI,GACtCG,EAAiBpI,EAAAA,oBAAoBgI,KAAiBG,EAE5D,OACElK,EAAAA,KAAC,MAAA,CACCnJ,MACA2B,UAAWmC,EAAQ+O,aACnB,iBAAcQ,QAAyB,KACnCnP,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAA,CAAAyF,EAAAA,oBAAoBzF,IACnBxB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQ2B,SAAU,CAChC,CAAC3B,EAAQgP,YAAmC,eAAtBM,EACtB,CAACtP,EAAQiP,UAAiC,aAAtBK,IAGrB3N,cAGH4N,GAAmBC,IACnBnK,OAAC,MAAA,CAAIxH,UAAWmC,EAAQkP,QACrBvN,SAAA,CAAA4N,GACCpP,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQzS,SAAWkiB,EAAAA,cAAc1P,EAAQ,SACtD4B,SAAA0N,IAGJG,GACCrP,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ1L,QAAUmb,EAAAA,cAAc1P,EAAQ,QACrD4B,SAAAyN,SAOf,GCvDaM,GACXC,GACoC9kB,EAAAA,SAAS8kB,IAAa,kBAAmBA,EAElEC,GACXD,GACyBD,GAAqBC,GAAYA,EAAW,CAAEE,cAAeF,ICNlFpoB,QAAEA,GAAAM,QAASA,IAAYZ,EAEhB4F,GAAYE,EAAmB,iBAAkB,CAC5D+iB,eAAgB,CACd,mBAAuBvoB,GAAQC,OAAS,EAApB,KACpB,oBAAqB,GAAGD,GAAQE,YAChC,cAAe,GAAGF,GAAQG,cAC1B,oBAAqB,GAAGH,GAAQI,oBAChC,aAAc,GAAGJ,GAAQK,aACzBS,QAAS,OACTS,MAAO,OACPS,gBAAiB,QACjBpB,SAAU,WACVK,OAAQ,CAAC,QAAS,EAAG,QACrBC,aAAc,EACdW,UAAW,aACX+X,OAAQ,GAGVF,SAAU,CAAA,EAEVkF,QAAS,CACPhe,SAAU,WACVgZ,OAAQtZ,GAAQE,eAGlB6lB,QAAS,CACPzM,OAAQtZ,GAAQC,iBAGlBioB,UAAW,CAAA,EAEXtD,QAAS,CAAA,EAETuD,WAAY,CACVlnB,MAAO,eAGTmnB,MAAO,CACL9nB,SAAU,WACVijB,cAAe,OACfxiB,KAAM,yBACND,IAAK,kCACLunB,gBAAiB,WACjBnmB,UAAW,mBACXC,WAAYL,EAAWC,kBACvBK,mBAAoB,mBACpB6b,SAAU,GACV3E,OAAQ,GAGVgP,YAAa,CAAA,EAEbC,cAAe,CACb,UAAW,CACT1nB,QAAS,KACTL,QAAS,QACTF,SAAU,WACVQ,IAAK,EACLE,OAAO,EACPC,MAAO,EACPC,OAAQ,EACRN,aAAc,MACdc,gBAAiB,WAIrB8mB,cAAe,CAAA,EAEfC,QAAS,CACPjoB,QAAS,OACTqe,SAAU,EACV7X,SAAU,EACV0Y,UAAW,QAGbgJ,SAAU,CACRloB,QAAS,OACTujB,WAAY,OACZnF,WAAY,GAGd+J,cAAe,CACbjK,YAAa,0BAGftG,KAAM,CACJ5X,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChBrc,SAAU,mBACV/F,MAAO,mBACPC,OAAQ,OACR0d,WAAY,EACZ1F,OAAQ,UAER,eAAgB,CACd0P,aAAc,IAIlBC,UAAW,CACT5nB,MAAO,0BAGT6nB,WAAY,CACV7nB,MAAO,QAEP,eAAgB,CACdA,MAAO,UAIX8nB,UAAW,CAAA,EAEXC,QAAS,CAAA,EAETC,WAAY,CACV/P,OAAQ,UACRK,QAAS,QAGX2P,UAAW,CACT,eAAgB,CACdjoB,MAAO,2BAIX0jB,OAAQ,CACN,eAAgB,CACd1jB,MAAO,2BAIXkoB,kBAAmB,CAAA,EAGnB,gBAAiB,CACfzE,uBAAwB,EACxB0E,wBAAyB,GAG3B,mBAAoB,CAClB3E,oBAAqB,EACrB4E,qBAAsB,GAGxB,qBAAsB,CACpBA,qBAAsB,EACtB3E,uBAAwB,EACxB0E,wBAAyB,GAG3B,sBAAuB,CACrB3E,oBAAqB,EACrBC,uBAAwB,EACxB0E,wBAAyB,GAG3B,wBAAyB,CACvB3E,oBAAqB,EACrB4E,qBAAsB,EACtBD,wBAAyB,GAG3B,yBAA0B,CACxB3E,oBAAqB,EACrB4E,qBAAsB,EACtB3E,uBAAwB,GAG1B,iBAAkB,CAChB2E,qBAAsB,EACtBD,wBAAyB,GAG3B,kBAAmB,CACjB3E,oBAAqB,EACrBC,uBAAwB,GAG1B,mBAAoB,CAClB9jB,aAAc,KC1IL0oB,GAA2C,EACtDlB,QACAhQ,OACA2Q,YACAC,UAAU5Q,EACVmR,iBACAlD,YACAnH,YACAsK,aACApE,YACAF,cACAjK,WACAnG,aACA2U,WACA7Q,OACAV,SACA4B,WACAjX,cACAiD,OACA4jB,cAEA,MAAMvR,EAAUnT,GAAU,CAAEnC,iBAErB8mB,EAAoBC,GAAyB5O,cAC7C6O,EAAkBC,GAAuB9O,aAE1C+O,EAAaC,EAAAA,SAASjB,GAAWpb,IAAIoa,IACrCkC,EAAWD,EAAAA,SAAShB,GAASrb,IAAIoa,IAEjCmC,EAAgBrlB,EAAAA,gBAAgBklB,GAChCI,GAAe/E,GAAavgB,EAAAA,gBAAgBolB,GAC5CG,GAAkBtV,IAAesQ,GAAaqE,GAAYlmB,EAAAA,WAAWmmB,GACrEW,EAAiBF,GAAeC,GAAkBhF,EAElDK,EAAuBxO,GAAe,CAC1CpU,cACAmT,UAAW,iBACXmB,qBAAsB,mBAGlBmT,EAAmBnV,GAAa,CACpCI,eAAiBC,GAAWoU,EAAsBpU,EAAO+U,eAGrDC,EAAiBrV,GAAa,CAClCI,eAAiBC,GAAWsU,EAAoBtU,EAAO+U,eAGnDE,EAAoB,EAEtBhnB,MACAukB,gBACA9K,UACAwN,mBAAkB,EAClBC,eAAepnB,EAAAA,WAAW2Z,MACvB0N,GAELC,EACAC,IAEAxS,EAAAA,IAAC,MAAA,CAECtC,UAAW0H,EAAKvF,EAAQC,KAAMD,EAAQ,GAAG0S,SAAiB,CACxD,CAAC1S,EAAQ8Q,aAAcnU,GAAc6V,EACrC,CAACxS,EAAQ2Q,YAAa4B,OAEpBpL,EAAAA,gBAAgBpC,GAAUpI,MAC1B8S,EAAAA,cAAc1P,EAAQ,GAAG2S,aACzBD,EAEJ9Q,eAAC,MAAA,CAAI9D,UAAWmC,EAAQ0Q,UAAY/O,SAAApB,GAAWsP,MAT1CvkB,GAAOqnB,GAaV1jB,EAAQ,CACZ,yBAA0B8iB,EAAgB,GAAGP,WAAyB,EACtE,uBAAwBU,EAAiB,GAAGR,WAAuB,GAGrE,OACErM,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EACTvF,EAAQ8P,eACR1kB,EAAAA,WAAWgmB,IAAmBpR,EAAQ,aAAaoR,KACnDhmB,EAAAA,WAAWqV,IAAST,EAAQS,GAC5B,CACE,CAACT,EAAQ4N,SAAUM,EACnB,CAAClO,EAAQmG,SAAUY,EACnB,CAAC/G,EAAQ+P,WAAYuB,EACrB,CAACtR,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQyM,SAAUQ,EACnB,CAACjN,EAAQgQ,aAAcjD,EACvB,CAAC/M,EAAQgR,mBAAoBe,IAGjC9iB,WACImR,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAA,CAAAyF,EAAAA,oBAAoB6I,IACnB9P,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQiQ,MAAO,CAC7B,CAACjQ,EAAQoQ,eAAgBiB,EACzB,CAACrR,EAAQqQ,eAAgB1T,EACzB,CAACqD,EAAQmQ,aAAcpJ,GAAauK,GAAYxO,IAGjDnB,SAAAsO,MAGL5K,KAAC,MAAA,CAAIxH,UAAWmC,EAAQsQ,QACrB3O,SAAA,CAAAoQ,GACC5R,EAAAA,IAAC,OAAItC,UAAW0H,EAAKvF,EAAQuQ,SAAUvQ,EAAQwQ,eAAgBtU,IAAKiW,EACjExQ,SAAAiQ,EAAWpc,IAAI,CAACod,EAAWD,IAAUL,EAAkBM,EAAW,QAASD,MAI/EhR,EAEAuQ,GACC7M,EAAAA,KAAC,MAAA,CAAIxH,UAAWmC,EAAQuQ,SAAUrU,IAAKmW,EACpC1Q,SAAA,CAAAsQ,GACCK,EAAkB,CAAEzC,cAAe,QAAS9K,QAASwM,GAAW,SAEjES,GACCF,EAAStc,IAAI,CAACod,EAAWD,IAAUL,EAAkBM,EAAW,MAAOD,IAExE1F,GACC9M,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQC,KAAMD,EAAQwM,WAClCiD,EAAAA,cAAc1P,EAAQ,WAE1B4B,SAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQ0Q,UACtB/O,SAAAxB,EAAAA,IAAC2K,GAAA,CAAgBpgB,YAAa4iB,kBC9KnCzgB,GAAYE,EAAmB,QAAS,CACnD8lB,aAAc,CACZ9pB,OAAQ,wBACRid,QAAS,CAAC,EAAG,0BACbF,SAAU,GACVgJ,WAAY,WAGdjB,MAAO,CACLrM,OAAQ,eACR1Y,MAAO,OACPsY,QAAS,OACT0R,aAAc,OACd1pB,UAAW,aACXZ,OAAQ,OACRuqB,WAAY,OACZlI,MAAO,QAEP,cAAe,CACb9J,OAAQ,WAGV,iBAAkB,CAChBjX,QAAS,GAGX,iCAAkC,CAChCyd,UAAW,QAGbyL,cAAe,YACf,iGACE,CACE3qB,QAAS,OACT4qB,iBAAkB,OAClB3L,OAAQ,IAId4L,eAAgB,CACd7qB,QAAS,OACTqe,SAAU,GAGZyM,gBAAiB,CACfhrB,SAAU,WACV0G,SAAU,EACVsS,OAAQ,GAGViS,UAAW,CACTjrB,SAAU,WACVQ,IAAK,EACLC,KAAM,EACNG,OAAQ,QAGVsqB,UAAW,CACT7R,OAAQ,YACRiP,aAAc,uCAEd,iBAAkB,CAChBA,aAhEqB,IAoEzB6C,UAAW,CAAA,EAEXvD,UAAW,CAAA,EAEXwD,UAAW,CACT/R,OAAQ,eACRC,WAAY,SACZ0J,SAAU,OACV9hB,SAAU,SACVwF,SAAU,EACVkX,WAAY,UAGdyN,MAAO,CACLC,UAAW,SACXhD,aAAc,0BAGhBiD,aAAc,CAAA,EAEdC,cAAe,CAAA,EAEfC,aAAc,CAAA,IC9BHC,GAAY/G,EAAAA,WAA8C,UACrEnU,MACEA,EAAQ,GAAAmb,YACRA,EAAA7D,MACAA,EAAAnQ,KACAA,EAAO,OAAAnD,WACPA,EAAAoX,aACAA,EACAC,UAAWC,EAAA9F,WACXA,EAAAD,UACAA,EAAApL,SACAA,EAAAoR,YACAA,EAAAC,YACAA,EAAA7lB,KACAA,EAAA5D,YACAA,EAAA0pB,UACAA,EAAAC,mBACAA,EAAAb,MACAA,EAAAzT,OACAA,EAAA2N,SACAA,EAAA4G,4BACAA,EAAAnX,SACAA,EAAAoX,QACAA,EAAAC,QACAA,EAAAC,OACAA,EAAAhG,UACAA,EAAA3X,KAEAA,EAAA4d,gBACAA,EAAAC,eACAA,EAAAC,wBACAA,EAAAjnB,KAEAA,EAAAyjB,eACAA,EAAAR,UACAA,EAAA3Q,KACAA,EAAA4Q,QACAA,EAAU5Q,EAAAgN,UACVA,EAAAoE,WACAA,EAAA5Q,KACAA,EAAAkB,SACAA,KACGkT,GAEL3Y,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtBoqB,EAA4BhW,GAAe,CAC/CpU,cACAmT,UAAW,sBACXmB,qBAAsB,WAGjB+H,EAAWgO,GAAclS,EAAAA,UAAS,IAClCmS,EAAYC,GAAiBpS,aAE9BqS,EAAWjnB,EAAAA,OAAyB,MACpCknB,EAAY1X,GAAc,CAACvB,EAAKgZ,IAGhClB,EACJC,IACC,CAAC,QAAS,MAAO,OAAOmB,SAAStV,GAASA,OAAmC,GAE1EuV,GAAWtO,GAAajE,EACxBwO,GAAWgE,EAAAA,oBAAoB3c,GAC/B4c,GAAWnO,EAAAA,oBAAoBoM,GAC/BgC,KACFpO,sBAAoB6I,IAAUoF,IAAYf,IAC5CmB,EAAAA,iBAAiB3B,GAuBb4B,GAAW1Y,GAAa,CAC5BI,eAAiBC,GAAW4X,EAAc5X,EAAO+U,eAG7CuD,GAA+C,CACnD9X,UAAW0H,EAAKvF,EAAQ6N,MAAO,CAC7B,CAAC7N,EAAQqT,WAAYkC,GACrB,CAACvV,EAAQ+P,WAAYuB,GACrB,CAACtR,EAAQsT,WAAYlM,EAAAA,oBAAoB6I,GACzC,CAACjQ,EAAQoT,WAAYe,EACrB,CAACnU,EAAQ0T,cAAe3M,EACxB,CAAC/G,EAAQ2T,eAAgBhX,EACzB,CAACqD,EAAQ4T,cAAe1F,IAE1Bjf,MACEsmB,IAAYjE,GAAY,CAAE,gBAAiB,GAAG0D,YAAqC,EACrFrc,QACAmH,OACAiU,eACAC,YACA/S,SAAUtE,EACVmX,YAAa0B,GAAiB1B,OAAc,EAC5CxlB,OACA8lB,YACA5F,SAAUL,EACVT,WACAe,YACA8F,UACAC,QA7CmB9V,IACnBqW,GAAW,GACXP,IAAU9V,IA4CV+V,OAzCkB/V,IAClBqW,GAAW,GACXN,IAAS/V,IAwCTvB,SAnDoBuB,IACpBvB,EAASuB,EAAMkX,cAAcjd,MAAO+F,EAAO,cAmDxC+Q,EAAAA,cAAc1P,MACd8U,GAUL,OAPA3mB,EAAAA,UAAU,KAEJmmB,GACFa,EAAS9mB,SAAS6L,SAEnB,CAACoa,IAGFhP,EAAAA,KAAC8L,GAAA,CACClB,QACAtT,aACAoK,UAAWsO,GACXvS,SAAU0S,GACVtH,YACAoD,YACAvE,aAAcoH,EACdzpB,YAAaoqB,EACbvD,QAAS2C,GAAe5C,GA1DHuE,MAAOnX,UAExBvB,EAAS,GAAIuB,EAAO,SAC1BwW,EAAS9mB,SAAS6L,cAuDsC,EACtDtM,OACAyjB,iBACAR,YACAC,UACA5D,YACAoE,aACA5Q,OAEAkB,SAAA,CAAA0D,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQkT,eAAgB,CACtC,CAAClT,EAAQmT,iBAAkBoC,IAAYpB,IAGxCxS,SAAA,CAAAvW,EAAAA,WAAW0L,GACVqJ,EAAAA,IAAC2V,EAAA,CACC5Z,IAAKiZ,EACLre,OACA4d,kBACAC,iBACAC,6BACIe,OAGNxV,IAAC,QAAA,CAAMjE,IAAKiZ,KAAeQ,MAG3BJ,IAAYpB,IAAgBhU,EAAAA,IAAC,OAAItC,UAAWmC,EAAQuT,UAAY5R,SAAAhJ,IACjE4c,IAAYjE,IACXnR,MAAC,MAAA,CAAItC,UAAWmC,EAAQwT,MAAOtX,IAAKwZ,GACjC/T,SAAA6R,OAIN7R,IAGP,GC5OaoU,GAAQjJ,EAAAA,WAA0C,UAC7DsC,YAAEA,EAAAC,aAAaA,EAAAnB,UAAcA,EAAAnO,OAAWA,EAAArV,YAAQA,KAAgBmqB,GAChE3Y,GAEA,MAAM8Z,EAA0BlX,GAAe,CAC7CpU,cACAmT,UAAW,oBACXmB,qBAAsB,UAGxB,OACEmB,EAAAA,IAACgP,GAAA,CACCE,eACAD,cACArP,OAAQgI,EAAAA,UAAUhI,EAAQ,WAC1BrV,YAAasrB,EAEbrU,SAAAxB,EAAAA,IAAC0T,GAAA,IACKgB,EACJ3Y,MACA6D,SACArV,cACAwjB,eAIR,GCpCa+H,GAAyB,aACzBC,GAA+B,GAAGD,QAA4BA,KCE9DppB,GAAYE,EAAmB,YAAa,CACvD4S,KAAM,CACJ7W,MAAO,OACPC,OAAQ,OACRgY,OAAQ,UACR5Y,SAAU,cCkBDguB,GAAYrJ,EAAAA,WAA8C,UACrEsJ,KACEA,EAAAC,UACAA,EAAY,GAAAC,QACZA,EAAU,GAAAxf,KACVA,EAAA+G,UACAA,EAAAiW,YACAA,EAAAnmB,KACAA,EAAA4oB,QACAA,GAAU,EAAA7rB,YACVA,EAAAqa,QACAA,EAAA5H,SACAA,KACG0X,GAEL3Y,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtB8rB,EAAmB1X,GAAe,CACtCpU,cACAmT,UAAW,aACXmB,qBAAsB,cAwBxB,SACEmB,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQL,KAAM9B,MAAgBuC,EAAAA,kBAAkBzS,GAAOoX,UAC1EpD,SAAAxB,EAAAA,IAAC4V,GAAA,IACKlB,EACJ3Y,MACAvD,MAAO4d,EAAU,GAAGF,IAAYC,IAAYF,EAC5Ctf,KAAMA,IAASyf,EAAU,0BAA4B,cACrDzC,YACEA,IAAgByC,EAAUL,GAA+BD,IAE3DvrB,YAAa8rB,EACbrZ,SApBwC,CAACxE,EAAO+F,KAEjC,UAAfA,EAAMoB,OAEPpB,EAAwCrB,OAAO1E,MAAQ,IAE1DwE,IAAWuB,EAAO/F,IAedic,wBAjCkE,EAAG6B,eAIvEA,EAAU9d,QAAUsd,IACpBQ,EAAU9d,QAAUud,GAEb,CAAEvd,MAAO,GAAI+d,UAAW,CAAEC,MAAO,EAAGC,IAAK,IAE3CH,KA4BX,GCrFO,MAAMI,WAAuBC,EAC3BC,mBAEP,WAAAC,CAAYrB,GACVsB,MAAMtB,GACNuB,KAAKH,mBAAqBG,KAAKC,2BAG/BD,KAAKC,2BAA6BC,EAAAA,SACpC,ECVK,MAAMC,GAA4B,CACvCC,oBAAqB,CACnB9G,cAAe,CACbroB,SAAU,WACVS,KAAM,EACND,IAAK,EACLI,OAAQ,OACRqiB,cAAe,QAGjB0E,eAAgB,CACdyH,YAAa,gBAIjB1E,aAAc,CACZtM,YAAa,+DCPJiR,GAAc1K,EAAAA,WAAgD,UACzEoH,YAAEA,GAAc,EAAAxpB,YAAMA,KAAgBirB,GACtCzZ,GAEA,MAAMsa,EAAmB1X,GAAe,CACtCC,YAAasY,GACb3sB,cACAmT,UAAW,aACXmB,qBAAsB,gBAGxB,OACEmB,EAAAA,IAAC4V,GAAA,CACC7Z,MACA0U,UAAU,SACVsD,cACAxpB,YAAa8rB,KACTb,GAGV,GC3Ba8B,GAAmE,CAC9EzW,QAAQ,EACR0W,YAJsD,MAKtD3c,QAAS,CACP4c,SAAU,SACVC,WAAY,cCaT,MAAMC,WAA+BC,EAAAA,cAC1CC,oBAA2DN,GAE3D3a,KAA+Bkb,EAAAA,YAE/B,iBAAAC,GACE,MAAMjX,OAAEA,GAAWkW,KAAKvB,MACpB3U,GACFkW,KAAKgB,8BAET,CAEA,kBAAAC,EAAmBnX,OAAEA,IACnB,MAAQA,OAAQoX,GAAgBlB,KAAKvB,OAChC3U,GAAUoX,GACblB,KAAKgB,8BAET,CAEAA,6BAA+B,KAC7B,MAAMnd,QAAEA,GAAYmc,KAAKvB,OACjBvnB,QAAS0O,GAASoa,KAAKpa,KAE3BA,GACFub,EAAuBvb,EAAM/B,IAIjC,MAAAud,GACE,MAAMtX,OAAEA,cAAQ0W,EAAA/V,SAAaA,EAAA5G,QAAUA,KAAYwd,GAAiBrB,KAAKvB,MAEzE,OAAO6C,EAAAA,cACLd,GDpDkD,MCqDlD,CAAExb,IAAKgb,KAAKpa,QAASyb,GACrB5W,EAEJ,EC1DK,MAAM8W,IAAuB,EACvBC,IAAmB,ECInBC,GAAe,CAAC,GAAI,IAEpB9rB,GAAYE,EAAmB,aAAc,CACxD4S,KAAM,CACJlX,aAAcxB,EAAWI,oBACzBkB,UAAW,wCACXa,UAAW,aACX4c,QAAS,CARoB,GAQA,GAC7BF,SAAU,GACVzc,SAAU,UAGZuvB,eAAgB,CACdC,WAAY,GAGdC,eAAgB,CACdC,cAAe,GAGjBC,WAAY,CAAA,EAEZC,WAAY,CAAA,EAEZC,KAAM,CACJnwB,OAAQ,OACR4lB,UAAWwK,IACXpY,OAAQ,UACRxX,gBAAiB7D,EAAOY,iBAErB0B,EAAQmB,eAGbiwB,KAAM,CACJ/wB,QAAS,OACT0Y,OAAQ,UACRzX,UAtCsB,GAuCtBR,MAAO,OACPkd,QAAS2S,GACT/Y,WAAY,SACZxW,UAAW,aACX0c,SAAU,IAGZuT,iBAAkB,CAChBrT,QAAS,GAGXsT,eAAgB,CACdlO,cAAe,QAGjBjF,QAAS,CAAA,EAETnF,OAAQ,CAAA,EAERC,SAAU,CACRF,OAAQ,WAGV0L,QAAS,CACP1L,OAAQ,UACRqK,cAAe,QAGjBmO,YAAa,CAAA,ICnEFC,GAAkC,CAC7C7Z,KAAM,CACJqG,QAAS2S,GACT7vB,MAAO,QAGT+kB,MAAO,CAELxlB,QAAS,SCqBAoxB,GAA2C,EACtDzZ,UACA2S,QACA1E,gBACAtR,aACAmG,WACAnB,WACAoF,YACA2S,gBACA/rB,OACAgsB,iBACAC,uBAEA,MAAMC,EAAqBH,GACzBvZ,EAAAA,IAAC4N,GAAA,CACCC,UAAWlL,GAAYmL,EACvBA,gBACAtR,aACAjS,YAAa8uB,GACbnL,SAAU,EAAGE,cAAc7P,IAAUkb,EAAiBjH,EAAOpE,EAAY7P,GAExEiD,aAIL,OACExB,EAAAA,IAAC0X,GAAA,CACC7W,OAAQ+F,EACRhM,QAAS,CAAE+e,MAAO,WAClBjc,UAAW0H,EAAKvF,EAAQoZ,KAAM,CAC5B,CAACpZ,EAAQqZ,kBAAmBK,EAC5B,CAAC1Z,EAAQmG,SAAUY,EACnB,CAAC/G,EAAQgB,QAAS8B,IAAa4W,EAC/B,CAAC1Z,EAAQiB,UAAWtE,OAElByD,oBAAkB,CACpBa,SAAUtE,EACVqE,OAAQ8B,EACRqD,QAASY,KACNpZ,IAELoX,QAAUpI,GAAe+c,OAA0D,EAAzChb,GAAUib,EAAehH,EAAOjU,GAEzEiD,WAAgBkY,EAAqBlY,KCtCrC,SAASoY,IAAkBhf,QAChCA,EAAAif,aACAA,EAAAvZ,KACAA,EAAAwZ,YACAA,EAAAC,mBACAA,EAAAZ,eACAA,EAAiB,wBAAArM,UACjBA,EAAAkN,aACAA,EAAe,cAAAzvB,YACfA,EAAAqV,OACAA,EAAAqa,mBACAA,GAAqB,EAAAC,sBACrBA,EAAAC,iBACAA,EAAAC,iBACAA,EAAAb,cACAA,EAAAc,iBACAA,EAAAC,gBACAA,EAAAd,eACAA,EAAAC,iBACAA,EAAAc,qBACAA,EAAAC,wBACAA,EAA0BD,EAAAE,iBAC1BA,IAEA,MAAM5a,EAAUnT,GAAU,CAAEnC,gBAEtBmwB,EAAmBzT,EAAAA,oBAAoBkT,GACvCQ,EAAmB1T,EAAAA,oBAAoBmT,GAEvCQ,EAAoB/vB,EAAAA,QACxB,IAAM+P,EAAQvF,IAAIglB,GAClB,CAACzf,EAASyf,IAGNQ,EAAchwB,EAAAA,QAClB,IAAM+P,EAAQvF,IAAI,CAACylB,EAAQtI,IAAUgI,EAAwBM,EAAQF,EAAkBpI,KACvF,CAAC5X,EAAS4f,EAAyBI,IAG/BG,EAAmBlwB,EAAAA,QACvB,IAAM,IAAImwB,IAAKtJ,EAAAA,SAASoI,GAAyBzkB,IAAIolB,IACrD,CAACX,EAAaW,IAGhB,OACEvV,EAAAA,KAACwS,GAAA,CACC7W,OAAQoZ,IAAuBV,EAC/B7b,UAAW0H,EAAKvF,EAAQL,KAAMvU,EAAAA,WAAWqV,IAAST,EAAQS,GAAO,CAC/D,CAACT,EAAQ4Y,gBAAiBiC,EAC1B,CAAC7a,EAAQ8Y,gBAAiBgC,IAG3BnZ,SAAA,CAAAkZ,GAAoB1a,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQgZ,WAAarX,SAAA2Y,MAC1Dna,IAAC,OAAItC,UAAWmC,EAAQkZ,QAAUzJ,gBAAc1P,GAAS2N,UAAU,EAChE/L,WACCxB,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQoZ,KAAMpZ,EAAQyM,SAAW9K,SAAAwY,IAEtD9U,EAAAA,KAAAC,EAAAA,SAAA,CACG3D,SAAA,CAAAyF,EAAAA,oBAAoB8S,IACnB/Z,EAAAA,IAAC0X,GAAA,CACC7W,OAAQgZ,IAAiBvB,GACzB1d,QAAS,CAAE+e,MAAO,WAClBjc,UAAW0H,EACTvF,EAAQoZ,KACRpZ,EAAQuZ,YACRS,IAAiBvB,IAAwBzY,EAAQmG,SAEnDpB,QAAUrG,GAAUib,EAAelB,GAAsB/Z,GAExDiD,SAAAuY,IAGJ9S,EAAAA,oBAAoBqT,IACnBta,EAAAA,IAACsZ,GAAA,CACCzZ,UACA2S,MAAO+F,GACPzK,cAAeiN,EAAiBza,KAAO,IAAM4Z,EAC7CvX,SAAUuX,EACVtT,UAAWiT,IAAiBtB,GAC5BgB,gBACAC,iBACAC,mBAECjY,SAAA8Y,IAGJO,EAAYxlB,IAAI,CAAC4lB,EAAKvT,KACrB,MAAMwT,EAActgB,EAAQ8M,GACtB4B,EAAKmR,EAAiBS,GACtBtU,EAAYiT,IAAiBnS,EAC7B/E,EAAWoY,EAAiB9uB,IAAIqd,GAEhC9M,EAAaoe,EAAkBlT,GAErC,OACE1H,EAAAA,IAACsZ,GAAA,CAECzZ,UACA2S,MAAO9K,EACPlL,aACAmG,WACAiE,YACA2S,gBACAC,iBACAC,mBACAjsB,KAAM,CAAE8b,MAEP9H,SAAAyZ,GAXIvT,KAea,IAAvBmT,EAAY5kB,QACX+J,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQoZ,KAAMpZ,EAAQsZ,gBAAkB3X,SAAA2X,SAKpEwB,GAAoB3a,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQiZ,WAAatX,SAAA4Y,MAGhE,CC3JO,MAAMe,GAAkCL,GAC3B,iBAAXA,GACI,OAAXA,IACEA,GAAqCte,aAAc,GAE1C4e,GAA0B5lB,QAC/B,IAANA,OAAkB,EAAY4D,OAAO5D,GAE1B6lB,GAAyB,CAAQC,EAAWC,IAAuBD,IAAOC,GCHjF7zB,QAAEA,IAAYZ,EAEP4F,GAAYE,EAAmB,SAAU,CACpD4S,KAAM,CACJ7W,MAAO,OACPX,SAAU,WACViB,UAAW,cAGbuyB,aAAc,CACZ7yB,MAAO,OACPiY,OAAQ,QAGV6a,YAAa,CACXhzB,MAAM,EACNuY,OAAQ,EACRrY,MAAO,cACP+F,SAAU,oBAGZgtB,cAAe,CACb1zB,SAAU,WACVQ,IAAK,OACLkwB,WAAY,GAGdiD,kBAAmB,CACjBjtB,SAAU,OACV/F,MAAO,OACPqiB,SAAU,eAGZ9J,MAAO,CACLvY,MAAO,+BACPC,OAAQ,+BACRgY,OAAQ,UACR/W,WAAYL,EAAWC,kBACvBK,mBAAoB,YACpBkX,OAAQtZ,GAAQE,cAAgB,GAGlCg0B,YAAa,CACXhyB,UAAW,kBAGbkX,SAAU,CACR,WAAY,CACVF,OAAQ,YAIZib,QAAS,CAAA,IAGLC,GAAgC,CACpCpO,MAAO,CACL,cAAe,CACb9M,OAAQ,aAKRmb,GAAwC,CAC5CrO,MAAO,CACL9M,OAAQ,YAICob,GAAsBxvB,EAAAA,YAAYsvB,GAAiBC,IACnDE,GAA4BzvB,EAAAA,YAAYsvB,GAAiBC,IAEzDG,GAAiB,EAC5BC,mBACA5C,mBAKI4C,GAAoB5C,EACf0C,GAELE,IAAqB5C,EAChByC,GAEFF,GCaF,SAASM,GACd5G,GAEA,MAAM5a,QACJA,EAAA2e,cACAA,EAAA/gB,MACAA,EAAA6jB,OACAA,EAAAC,OACAA,EAAAvC,mBACAA,EAAAO,gBACAA,EAAAiC,aACAA,EAAe,IAAAC,YACfA,EAAc,SAAArD,eACdA,EAAAa,aACAA,EAAAzvB,YACAA,EAAAqV,OACAA,EAAA+C,SACAA,EAAAqL,WACAA,EAAAxR,WACAA,EAAAigB,gBACAA,EAAAC,0BACAA,EAA4B,EAAAC,aAC5BA,EAAe,eAAA1C,mBACfA,GAAqB,EAAA2C,YACrBA,EAAA9c,KACAA,EAAA4Q,QACAA,EAAU5Q,EAAA9C,SACVA,EAAAqX,QACAA,EAAAC,OACAA,EAAAuI,OACAA,EAAAC,OACAA,EAAAzC,iBACAA,EAAmBc,GAAA4B,sBACnBA,EAAwB1B,GAAAd,qBACxBA,EAAuBa,GAAAA,iBACvBX,EAAAD,wBACAA,EAAAwC,cACAA,EAAA/N,YACAA,EAAAC,aACAA,EAAA5O,KACAA,KACGoU,GACDc,EACE3V,EAAUnT,GAAU,CAAEnC,iBAEpB0yB,mBAAoBC,GAAgC,KAAUC,GACpEP,GAAe,CAAA,EACXQ,EAAuC,WAAhBZ,GAA4BU,EACnDf,EAAmBnO,GAA8B,WAAhBwO,GAA4BU,EAE7DrH,EAA0BlX,GAAe,CAC7CpU,cACAmT,UAAW,oBACXmB,qBAAsB,WAGlBwX,EAAmB1X,GAAe,CACtCC,YAAasd,GAAe,CAAEC,mBAAkB5C,kBAChDhvB,cACAmT,UAAW,aACXmB,qBAAsB,WAGlBwe,EAAyB1e,GAAe,CAC5CpU,cACAmT,UAAW,mBACXmB,qBAAsB,WAGlBye,EAAwB3e,GAAe,CAC3CpU,cACAmT,UAAW,kBACXmB,qBAAsB,WAGlBzB,GAAYD,MACXogB,GAAYC,IAAiB9a,EAAAA,UAAS,IACtC+a,GAAmBC,IAAwBhb,EAAAA,UAAS,GACrDib,GAAmB1W,EAAAA,oBAAoB8S,IAEtC6D,GAAsBC,IAA2Bnb,EAAAA,SAAS4V,KAC1DwF,GAAaC,IAAkBrb,EAAAA,SAAS,KAGxCsb,GAAyBC,IAA8Bvb,EAAAA,UAAS,GAEjElD,GAAO1R,EAAAA,OAAuB,MAC9B0tB,GAAe1tB,EAAAA,OAAuB,MACtCirB,GAAOjrB,EAAAA,OAAuB,MAC9B4f,GAAQ5f,EAAAA,OAAyB,MAEjCowB,GAAW3E,EAAgB/gB,IAAQ,GAAKA,EACxC2lB,GACJ5E,GAAiBjE,EAAAA,iBAAiBgF,IAAoC,KAAhBwD,GAElDM,GAAkBvzB,EAAAA,QAAQ,KAC9B,GAAoB,WAAhB2xB,EACF,OAAO5hB,EAMT,OAFEoiB,GAAiBqB,EAAAA,aAAqBvD,GAAW,CAACP,EAAqBO,IAAW,MAEtElgB,EAAoBkjB,KACjC,CAACd,EAAepiB,EAAS2f,EAAsBuD,GAAatB,IAEzD8B,GAAmBzzB,EAAAA,QACvB,IAAM+P,EAAQnQ,OAAQqwB,IAAYT,EAAiBS,IACnD,CAAClgB,EAASyf,IAGNH,GAAwBX,GAAiB/gB,GAAOvC,SAAWqoB,GAAiBroB,OAC5EsoB,GACJhF,GAAiBtuB,aAAWuN,IAAUA,EAAMvC,OAAS,IAAMikB,GAEvDsE,GAA8B3zB,EAAAA,QAAQ,KAC1C,MAAMsM,EAAmB,GAOzB,OANI6mB,IAA2BL,IAC7BxmB,EAAOsnB,KAAKnG,IAEV6F,IACFhnB,EAAOsnB,KAAKlG,IAEPphB,EAAOunB,OACZN,GAAgBO,OAAO,CAACC,EAAKC,EAAKnX,KAC3B2S,EAAiBwE,IACpBD,EAAIH,KAAK/W,GAEJkX,GACN,MAEJ,CACDR,GACAT,GACAtD,EACA8D,GACAH,KAGIc,GAAc7zB,EAAAA,WAAWizB,IAAY3D,EAAqB2D,SAAY,EAEtEa,GACJ7E,IAAyBjvB,EAAAA,WAAWqvB,GAAmBA,EAAkBwE,GAErEE,GAAc3hB,EAAAA,YACjB7H,IAAcilB,GF7OjB,CACEF,GAED/hB,GACCvN,EAAAA,WAAYuN,GAA2B8Q,IACnClQ,OAAQZ,EAA0B8Q,IAClCiR,EAAqB/hB,GEuOUymB,CAA8B1E,IAAuB/kB,GACxF,CAACilB,EAAkBF,IAGf2E,GAAY7hB,EAAAA,YAAY,KAC5BmgB,IAAc,GACdO,GAAe,IACfE,IAA2B,IAC1B,CAACxB,GAAiB3hB,kBAEfqkB,GAAkB9hB,EAAAA,YACrBkB,IACMgf,KAIL2B,KACA5K,IAAS/V,KAEX,CAACgf,GAAY2B,GAAW5K,IAGpB8K,GAAiB,KAChBpR,GAAeuP,IAClBC,IAAc,IAaZ6B,GAAehiB,EAAAA,YACnB,CAACiiB,EAA2D/gB,KAErDwe,EAAsBvkB,EAAgB8mB,IACzCtiB,EAASsiB,EAA+D/gB,IAG5E,CAAC/F,EAAOukB,EAAuB/f,IAG3BuiB,GAAqBliB,EAAAA,YACzB,CAACmV,EAAejU,KACd8gB,GAAa7M,IAAU8F,QAAuB,EAAY8F,GAAgB5L,GAAQjU,GAClF4gB,GAAgB5gB,GAChBmP,GAAMzf,SAASuxB,QAEjB,CAACH,GAAcF,GAAiBf,KAI5BqB,GAA6BpiB,EAAAA,YACjC,CAACmV,EAAepE,EAAqB7P,KACnC,IAAKgb,EACH,OAIF,GAAI/G,IAAU8F,IAAyB9F,IAAU+F,KAAqBnK,EAEpE,YADAiR,QAAa,EAAW9gB,GAG1B,GAAIiU,IAAU+F,IAAoBnK,EAEhC,YADAiR,GAAaf,GAAiD/f,GAGhE,MAAMuc,EAASsD,GAAgB5L,GAC/B6M,GACEjR,EAAA,IAEU5V,GAAS,GAAKsiB,GAEpBtiB,GAAO/N,OAAQi1B,GAAMV,GAAYU,KAAOV,GAAYlE,IACxDvc,IAGJ,CAACgb,EAAe6E,GAAiBiB,GAAc7mB,EAAO8lB,GAAkBU,KAGpEW,GAAetiB,EAAAA,YACnBqY,MAAOlgB,SACU,IAAXqnB,IAGAzf,MACFsgB,IAAqB,SAEjBb,EAAOrnB,GACT4H,MACFsgB,IAAqB,GAEH,YAAhBlB,GACFyB,GAAiC,KAANzoB,KAG/B,CAAC4H,GAAWyf,EAAQL,IAGhBoD,GAAuB/0B,EAAAA,QAC3B,IAAMg1B,EAAAA,SAASF,GAAcpD,EAAc,CAAEuD,YAA8B,IAAjBvD,IAC1D,CAACoD,GAAcpD,IAGXwD,GAAoB,CAACvqB,EAAW+I,UACrB,IAAXse,GACF+C,GAAqBpqB,GAGH,YAAhBgnB,GACFyB,GAAiC,KAANzoB,GAGnB,KAANA,GAAa4nB,GACfiC,QAAa,EAAW9gB,GAG1Bwf,GAAevoB,IAwEjBwI,GAAyB+a,GAAMoG,GAAiB3D,IAEhD,MAAMwE,GAA2BlC,GAAY5oB,OAAOe,QAAUymB,EAExDliB,GAEJ+iB,KAGCa,GAAgBnoB,OAAS,QAEA,IAAvB8jB,IAAqCiG,IAEtCtL,EAAW5H,gBAEQ,IAAnBqM,GAEAiE,KAEe,WAAhBZ,GAA4BwD,IAEzBC,GAAc1hB,IAGlB,GAAIgf,KAAe/iB,GAEjB,YADA2kB,GAAgB5gB,GAIlB,IACGtT,EAAAA,WAAWsT,EAAM2hB,iBACjBj1B,EAAAA,WAAW8tB,GAAK9qB,WAChBhD,EAAAA,WAAWuwB,GAAavtB,SAEzB,OAIA2J,GAAe2G,EAAM2hB,cAAenH,GAAK9qB,UACzC2J,GAAe2G,EAAM2hB,cAAe1E,GAAavtB,UAIjDkxB,GAAgB5gB,KAKdzD,gBACJA,IAAkB,EAAAC,mBAClBA,IAAqB,EAAAC,mBACrBA,IAAqB,GACnByhB,GAAmB,CAAA,EAEjBnhB,GAAaf,GAAY,CAC7BC,UACAC,gBAAiB0kB,GACjBzkB,iBAAkB8gB,GAAavtB,QAC/B0M,gBAAiBoe,GAAK9qB,QACtB2M,QAAS6hB,EACT5hB,gCAAiC,CAAC6Z,EAAW5H,UAAWsR,GAAgBnoB,UAG1ElI,EAAAA,UAAU,KACR,MAAMoyB,EAAmBl1B,EAAAA,WAAWizB,IAChCM,GAA4BtqB,KAAMse,IAChC,MAAMsI,EAASsD,GAAgB5L,GAC/B,OAAOvnB,EAAAA,WAAW6vB,IAAWkE,GAAYlE,KAAYkE,GAAYd,WAEnE,EAEJL,GAAwBsC,GAAoB3B,GAA4B,KACvE,CAACN,GAAUE,GAAiBI,GAA6BQ,KAE5DjxB,EAAAA,UAAU,KACJyM,IACFsiB,OAED,CAACtiB,KAEJ,MAAM4lB,GAAgBhD,GACpBpd,EAAAA,IAACqX,GAAA,CACC/W,OACA9H,MAAOslB,GACP9gB,SAAU+iB,GACVx1B,YAAa8yB,EACb1J,YAAY,WACRwJ,IAMFkD,IAAgBpZ,sBAAoBmZ,KAAkBnZ,EAAAA,oBAAoBoV,KAC9EnX,EAAAA,KAAAC,WAAA,CACG3D,SAAA,CAAA4e,GACA/D,KAICiE,GACJtgB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQ4b,YAAa,CACnC,CAAC5b,EAAQ6b,gBAAiB5gB,GAC1B,CAAC+E,EAAQ8b,mBAAoB5gB,KAE/BgB,IAAKgd,GACLjqB,MAAOwM,IAAYzP,OAAO4C,OAC1B8e,SAAU,EACV+G,OAAQ2L,MACJ3kB,IAAYilB,WAAW9xB,OAE1B+S,SAAAhH,IACCwF,EAAAA,IAAC4Z,GAAA,CACChf,QAASwjB,GACT9d,OACAyZ,mBAAoB4D,IAAoBK,IAA2BjE,EACnEO,gBAAiB6D,IAAuB7D,EACxCJ,yBACAC,iBAAkBkG,GAClBjG,iBAAkBpV,EAAAA,YAAYsX,EAAQ,CAAE8B,qBACxCjF,iBACAU,aAAc+D,GACd9D,YAAathB,EACbsU,UAAW4H,EAAW5H,UACtBkN,eACAzvB,YAAa+yB,EACb1d,OAAQgI,EAAAA,UAAUhI,EAAQ,QAC1B2Z,gBAEAU,mBAAoBA,IAAuBnf,KAAoBE,GAC/Dqf,mBACAE,uBACAC,0BACAC,iBAAkBuE,GAClBxF,eAAgB+F,GAChB9F,iBAAkBgG,OAM1B,OACEzf,EAAAA,IAACgP,GAAA,CACCE,eACAD,cACA1kB,YAAasrB,EACbjW,OAAQgI,EAAAA,UAAUhI,EAAQ,WAE1B4B,SAAA0D,EAAAA,KAAC,OAAIxH,UAAWmC,EAAQL,KAAM8O,UA1NX/P,IACrB,IAAKgf,GACH,OAGFhf,EAAMuE,kBACN,MAAM0d,EAAuBhC,GAA4BnqB,UACtDme,GAAUA,IAAUoL,IAGvB,OAAQrf,EAAMkiB,MACZ,IAAK,QACL,IAAK,cAAe,CAClB,IAAIC,EAAgB9C,GAQpB,GAJI8C,IAAkBpI,IAAmD,IAA3B8F,GAAgBnoB,SAC5DyqB,EAAgB,GAGdnH,EAAe,CACjB,IAAIoH,EACJ,GAAID,IAAkBnI,GACpBoI,EAA6BzG,OACxB,CAEL,MAAMY,EAASsD,GAAgBsC,GACzBE,EAAkB5B,GAAYlE,GACpC6F,EACEnoB,GAAOjD,KAAM0lB,GAAQ+D,GAAY/D,KAAS2F,KAAoB,CAClE,CACAnB,GAA2BiB,GAAgBC,EAA4BpiB,EACzE,MACEghB,GAAmBmB,EAAeniB,GAEpC,KACF,CAEA,IAAK,YAAa,CAEhBA,EAAMsiB,iBACN,MAAMC,GACHN,EAAuB,GAAKhC,GAA4BvoB,OAC3D4nB,GAAwBW,GAA4BsC,IACpD,KACF,CAEA,IAAK,UAAW,CAEdviB,EAAMsiB,iBACN,MAAMC,GACHN,EAAuB,EAAIhC,GAA4BvoB,QACxDuoB,GAA4BvoB,OAC9B4nB,GAAwBW,GAA4BsC,IACpD,KACF,IAkKwD/kB,IAAKyD,GAC3DgC,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQ2b,aAAchf,GAAcqD,EAAQiB,UAC5D8D,QAASpI,GAAcwR,OAAa,EAzTtB,KACpBoR,MAyTMrjB,IAAKyf,GAELha,SAAAxB,EAAAA,IAAC0T,GAAA,CACClb,MACkB,KAAhBslB,IAAuBZ,EAA8C6B,GAAdjB,GAEzDxd,OACAtD,SAAU+iB,GACVpd,SAAU4a,IAAc5a,EACxBqL,WAAYmO,EACZ9H,QAzUW9V,IACnB8V,IAAU9V,GACV6gB,MAwUQ9K,OAAQ2L,GACRzjB,aACAT,IAAK2R,GACLZ,UAAW2Q,GACXlzB,YAAa8rB,EACbzW,SACA8Q,QAAS,CACP6I,GAAiBgF,GACZ,CACCpzB,IAAK,UACLukB,gBAAexK,KAAC,MAAA,CAAIxH,UAAWmC,EAAQgc,QAASra,SAAA,CAAA,KAAGhJ,EAAMvC,OAAS,EAAE,OACpEmc,iBAAiB,QAEnB,KAEDV,EAAAA,SAAShB,GAEZzlB,EAAAA,WAAW0xB,GACN,CACCxxB,IAAK,QACLyZ,QAjMG,KACf2Y,IACF7P,GAAMzf,SAASuxB,OACfN,MAEAxR,GAAMzf,SAAS6L,SA6LDyT,cAAU,EACVmC,gBACE1P,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQqB,MAAO,CAAE,CAACrB,EAAQ+b,aAAcphB,KAC1DgH,SAAApB,GAAWuc,WAIlB,GACJlyB,OAAOQ,EAAAA,eACLypB,MAGP5Z,GACCkF,EAAAA,IAAC+gB,SAAA,CAAOC,UAAWjmB,GAAqBtD,SAASS,KAAOsjB,GAAavtB,QACnEuT,2BAAGA,SAAA8e,OAGLtgB,MAAAmF,EAAAA,SAAA,CAAG3D,aAAU8e,SAKvB,CCxoBO,MAAMW,GAAuBC,EAAAA,SAAS,GAAKp1B,GAAQA,GAC7Cq1B,GAAuBD,EAAAA,SAAS,GAAKp1B,GAAQs1B,UAAQ,IAAIC,MAAU,GAAKv1B,GCDxEY,GAAYE,EAAmB,mBAAoB,CAC9D00B,IAAK,CACH34B,MAAO,GACPC,OAAQ,GACRid,QAAS,EACT5c,UAAW,aACXZ,OAAQ,OACR4Y,QAAS,OACTL,OAAQ,UACR6K,WAAY,GAGd4Q,OAAQ,CACNlV,OAAQ,EACRjf,QAAS,OACTuX,WAAY,UAGd8hB,QAAS,CACPjb,WAAY,EACZmF,WAAY,UAIH+V,GAA8B,CACzCC,gBAAiB,CACfxI,KAAM,CACJtT,SAAU,GACVxc,UAAW,KAIfu4B,WAAY,CACVvK,oBAAqB,CACnBxH,eAAgB,CACd,mBAAoB,OACpBtnB,OAAQ,SAIZqqB,aAAc,CACZ/M,SAAU,GACVgc,WAAY,UC5BLC,GAA+C,EAC1D3L,OACA4L,uBACAt3B,cACAu3B,0BACAC,0BACAC,aACAC,cACAC,gBACAC,oBAEA,MAAMtiB,EAAUnT,GAAU,CAAEnC,gBAEtB63B,EAAoBzjB,GAAe,CACvCC,YAAa4iB,GACbj3B,cACAmT,UAAW,cACXmB,qBAAsB,qBAGxB,SACEqG,KAAC,MAAA,CAAIxH,UAAWmC,EAAQwc,OACtB7a,SAAA,CAAAxB,EAAAA,IAACoc,GAAA,CACC5jB,MAAO6pB,EAAAA,SAASpM,GAChBrb,QAASqmB,GACT1G,qBAAsBsH,EACtBlF,aAAa,qBACb3I,aAAW,EACXzpB,YAAa63B,EACbplB,SAAWxE,GAAUvN,EAAAA,WAAWuN,IAAUypB,EAAYzpB,KAExDwH,EAAAA,IAACoc,GAAA,CACC5jB,MAAO4oB,EAAAA,QAAQnL,GACfrb,QAASumB,GACTxE,aAAa,qBACb3I,aAAW,EACXzpB,YAAa63B,EACbplB,SAAWxE,GAAUvN,EAAAA,WAAWuN,IAAUwpB,EAAWxpB,OAGvD0M,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ0hB,QACtB/f,SAAA,CAAAxB,EAAAA,IAAC,SAAA,CACCL,KAAK,SACLjC,UAAWmC,EAAQyhB,IACnBxgB,SAAUghB,EACVld,QAASsd,EAET1gB,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,mBAGbK,EAAAA,IAAC,SAAA,CACCL,KAAK,SACLjC,UAAWmC,EAAQyhB,IACnBxgB,SAAUihB,EACVnd,QAASud,EAET3gB,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,2BCtER2iB,GAA0C9M,GACrDxV,EAAAA,IAACqF,EAAAA,gBAAe7F,KAAM/H,SAASS,QAAUsd,ICE9B+M,GAAa,CACxBC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,MCAOC,GACVC,GACA5M,GACChrB,EAAAA,WAAWgrB,GAAQ6M,SAAO7M,EAAM4M,GAAc,GAErCE,GACVF,GACArqB,IACC,MAAMwqB,EAAaxqB,IAAUsd,GAAyB,GAAKtd,EAC3D,OAAO8c,EAAAA,iBAAiB0N,GAAcC,EAAAA,MAAMzqB,EAAOqqB,EAAY,IAAIxB,MAAU,MAGpE6B,GAAiB,CAACC,EAAqBC,IACjD1kB,EAAAA,QAAQykB,IAAUzkB,EAAAA,QAAQ0kB,IAC1Bn4B,EAAAA,WAAWk4B,IAAUl4B,aAAWm4B,IAAUC,EAAAA,UAAUF,EAAOC,GCnBjD12B,GAAYE,EAAmB,aAAc,CACxD4S,KAAM,CACJ7W,MAAO,OACPC,OAAQ,QAGV06B,IAAK,CAAA,EAELC,SAAU,CAAA,EAEVC,WAAY,CAAA,EAEZ/0B,OAAQ,CACNuS,OAAQ,GAER,8BAA+B,CAC7B0X,WAAY,GAGd,2BAA4B,CAC1BE,cAAe,GAGjB,4BAA6B,CAC3BtI,aAAc,GAGhB,6BAA8B,CAC5BlK,YAAa,MC4BNqd,GAAa9W,EAAAA,WAA8C,UACtEnf,KACEA,EAAAk2B,aACAA,EAAe,KAAAC,QACfA,EAAAC,QACAA,EAAAzN,QACAA,EAAU,KAAAD,UACVA,EAAY,KACZ1hB,OAAAA,EAAAA,OACAqvB,EAAAC,iBACAA,EAAmB,EAAAjB,WACnBA,EHpE+B,aGoElBkB,YACbC,EAAArQ,YACAA,EAAAyC,QACAA,GAAU,EAAAvJ,SACVA,GAAW,EAAArQ,WACXA,EAAAuX,YACAA,EAAAkQ,cACAA,EAAAC,YACAA,EAAAC,mBACAA,EAAAC,2BACAA,EAAAC,yBACAA,GAA2B,EAAAC,aAC3BA,GAAe,EAAAC,oBACfA,EAAAC,mBACAA,EAAAC,mBACAA,EAAAC,gBACAA,EAAkB,GAAAC,gBAClBA,EAAkB,eAAAC,YAClBA,EAAAC,YACAA,EAAAC,eACAA,EAAAC,kBACAA,EAAAC,aACAA,EACAC,YAAaC,EAAclP,GAAAmP,eAC3BA,EAAAC,mBACAA,EAAAC,WACAA,EAAAC,aACAA,EAAAC,cACAA,EAAAC,eACAA,EAAAC,gBACAA,EAAAC,aACAA,EAAAC,cACAA,EAAArR,OACAA,EAAAD,QACAA,EAAA/F,UACAA,EAAA/jB,YACAA,KACGmqB,GAEL3Y,GAEA,MAAM8D,GAAUnT,GAAU,CAAEnC,gBAEtBq7B,GAAuBjnB,GAAe,CAC1CpU,cACAmT,UAAW,iBACXmB,qBAAsB,gBAGlBgnB,WAAEA,GAAAC,eAAYA,IAAmBj7B,EAAAA,QACrC,KAAA,CACEg7B,WAAYjD,GAAiBC,GAC7BiD,eAAgB/C,GAAmBF,KAErC,CAACA,IAGGkD,GAAgBj4B,EAAAA,SAEhBk4B,GAAe1oB,GAAc,CAACvB,EAAKgqB,MAElCvrB,GAAQiI,IAAaC,EAAAA,UAAS,IAE9BujB,GAAWC,IAAgBxjB,EAAAA,SAASmjB,GAAWnC,KAE/ClN,GAAO2P,IAAYzjB,EAAAA,SAASwT,IAC5BkQ,GAAgBC,IAAqB3jB,EAAAA,SAASmjB,GAAW3P,KACzDO,GAAK6P,IAAU5jB,EAAAA,SAASyT,IACxBoQ,GAAcC,IAAmB9jB,EAAAA,SAASmjB,GAAW1P,IAEtDsQ,GAAoBrQ,EACtBd,EAAAA,iBAAiB8Q,KAAmB9Q,EAAAA,iBAAiBiR,IACrDjR,EAAAA,iBAAiB2Q,IAEfvV,GACJqD,GAAe0S,GACX/R,EAAWhE,QACXgB,EAAAA,SAASgD,EAAWhE,SAASgO,OAAO,YAEpCgI,GAAkC,IACnChS,EACH0B,UACA5Z,aACAuX,cACApR,SAAUnI,GACVkW,WACAnmB,YAAaq7B,MACTxP,EAAU,CAAEF,UAAWkQ,GAAgBjQ,QAASoQ,IAAiB,CAAEtQ,KAAMgQ,KAOzEU,GAAiB1Q,IACpBvX,EAAAA,QAAQilB,IAAYiD,UAAQ3Q,EAAM0N,MAAcjlB,EAAAA,QAAQklB,IAAYiD,EAAAA,SAAS5Q,EAAM2N,IAMhFkD,GAAoB,CAACtuB,EAAe+F,MAEtC+lB,GACCpB,GAAe1qB,IAAQ,GAAI0d,IAC3BgN,GAAe1qB,IAAQ,GAAI2d,KAE5BgQ,GAAS3tB,IAAQ,IAAM,MACvB8tB,GAAO9tB,IAAQ,IAAM,MACrBmtB,IAAgBntB,EAAO+F,KA+CrBwoB,GAAqB,CAACC,EAA0B,KAAMC,EAAwB,QAClF,IAAIC,EAAqBrB,GAAWmB,GACpC,MAAMG,EAAmBtB,GAAWoB,GACT,KAAvBC,GAAkD,KAArBC,IAE/BD,EAAqBpR,IAGvBqQ,GAASa,GACTX,GAAkBa,GAClBZ,GAAOW,GACPT,GAAgBW,IAyBlBp5B,EAAAA,UAAU,KACRm4B,GAAaL,GAAWnC,IACxBqD,GAAmB7Q,EAAWC,IAC7B,CAACuN,EAAcxN,EAAWC,IAK7B/X,GACE,IAAM2nB,GAAc93B,SAAS+Q,UAAUooB,cAAcn5B,QACpDsQ,GAAUwnB,GAAc93B,SAAS2oB,mBAAmBrY,GH5Qf,0CGgRxC,MAAM8oB,GAAiBv6B,EAAAA,SAAS0H,GAAU+tB,GAAW/tB,GAAUA,EAEzD8yB,GAAoBjqB,EAAAA,YACvBkqB,IACC,GAAIt8B,aAAW44B,IAAS0D,IACtB,OAAO1D,EAAO0D,GAEhB,MAAMC,EAAiBH,GAAeI,SAASF,MAAMA,GACrD,OAAOC,EAAeE,OAAO,GAAGC,cAAcjJ,OAAO8I,EAAehxB,MAAM,KAE5E,CAAC6wB,GAAgBxD,IAGnB,OACE7jB,MAAC,OAAItC,UAAWmC,GAAQL,QAAUS,oBAAkBzS,GAClDgU,SAAAxB,EAAAA,IAAC0W,GAAA,CACC3a,IAAKiqB,GACLrC,UACAC,UACApvB,OAAQ6yB,GACRxE,aACA+E,gBAAiBjU,EACjBmQ,mBACA5X,OAAQW,EACR/L,SAAUtE,EACV0nB,cACAM,qBACAL,qBACAH,cACAM,eACAuD,iBAAiB,EACjBC,gBAAiBjoB,GAAQpR,OACzBs5B,kBAAmBloB,GAAQ2jB,WAC3BwB,aAAexvB,GAAM4P,EAAKvF,GAAQyjB,IAAK0B,IAAexvB,IACtD4uB,6BACA4D,gBAAiB3D,EAA2B/B,QAAkB,EAG9DoC,gBAAiB,CAAC/oB,EAAAA,QAAO,OAAS+oB,GAClCE,cACAD,kBACAV,gBACAQ,qBACAF,sBACAY,iBACAF,YAAajlB,EAAAA,IAACklB,EAAA,IAAgBwB,KAC9BuB,kBAAoB3E,GAAQtjB,EAAAA,IAAC,OAAItC,UAAWmC,GAAQ0jB,SAAW/hB,SAAA8hB,IAC/D8B,mBACEA,GAAA,CACE8C,SACCtG,GAAA,IAAqBsG,EAAWrG,qBAAsByF,MAG3DzC,cACAC,iBACAC,oBACAM,aACAC,eACAC,gBACAlR,UACA/F,YACAkX,eA3FqB,KACzB/iB,IAAU,GACV+iB,OA0FIC,gBAvFsB,KAC1BhjB,IAAU,GACN2T,GACF0Q,GAAkB,CAACtQ,GAAOC,KAC1BsQ,GAAmBvQ,GAAOC,KAE1ByP,GAAaL,GAAWnC,IAE1B+B,OAgFI0C,YAAa,CAACC,EAAG5vB,UAGD,IAAVA,IAGA4d,EAjKuB,CAAC5d,IAClC,MAAM6vB,EAAoB7vB,EAAMhC,MAAM,EAAG,IACzC,IAAI8xB,EAAWxC,GAAeuC,GAC9B,MAAME,EAAkB/vB,EAAMhC,MAAM,IACpC,IAAIgyB,EAAS1C,GAAeyC,IAGzBt9B,aAAWq9B,KAAcG,EAAAA,QAAQH,IACjCr9B,EAAAA,WAAWq9B,KAAc3B,GAAc2B,MAExCA,EAAW9R,KAIVvrB,aAAWu9B,KAAYC,EAAAA,QAAQD,IAC/Bv9B,EAAAA,WAAWu9B,KAAY7B,GAAc6B,MAEtCA,EAAS/R,KAMR/X,UAAQ4pB,IAAaG,EAAAA,QAAQD,IAE7BC,UAAQH,IAAaG,UAAQD,IAAW5B,UAAQ0B,EAAWE,MAE5DF,EAAWE,EACXA,EAAS,MAGXnC,GAAkBgC,GAClBlC,GAASmC,GACT9B,GAAgB+B,GAChBjC,GAAOkC,IAgICE,CAA2BlwB,GAE3B0tB,GAAa1tB,QAGZ4d,EACD,CACEF,UAAWM,GACXL,QAASM,GACTkS,SAAUnS,GACVoS,cAAc,EACdtU,OArHsB/V,IAChC+V,IAAS/V,GACTuoB,GAAkB,CAACtQ,GAAOC,IAAMlY,GAChCwoB,GAAmBvQ,GAAOC,KAmHhBzZ,SAAU8pB,IAEZ,CACE6B,SAAUjF,EACVpP,OA7IiB/V,IAC3B+V,IAAS/V,GACT2nB,GAAaL,GAAWnC,KA4Id1mB,SA3Ma,CAACxE,EAAoB+F,KAC5CmnB,IAAeltB,EAAO+F,QA+M1B,GChXasqB,GAAc,2BCEdn8B,GAAYE,EAAmB,cAAe,CACzD4S,KAAM,CAAA,EAENspB,OAAQ,CACNloB,OAAQ,UACR1Y,QAAS,eACTwiB,MAAOnlB,EAAOE,YACd0C,UAAW,GACX4gC,cAAe,aACfhgC,aAAc,CAAC,EAAG,SAAUxD,EAAOE,aAEnC,UAAW,CACTilB,MAAOnlB,EAAOC,YAIlBwjC,KAAM,CACJte,MAAOnlB,EAAOE,YACdwjC,eAAgB,OAChBlgC,aAAc,CAAC,EAAG,SAAUxD,EAAOE,aAEnC,UAAW,CACTilB,MAAOnlB,EAAOC,cCtBP0jC,GAAc3qB,IACzBA,EAAMsiB,iBACNtiB,EAAMuE,mBCFKpW,GAAYE,EAAmB,YAAa,CACvD4S,KAAM,CACJtX,QAAS,OACTsjB,cAAe,SACf7iB,MAAO,QAGTmnB,MAAO,CACL9nB,SAAU,WACVW,MAAO,cACPgd,SAAU,GACVwjB,aAAc,IAGhBlZ,cAAe,CACb,UAAW,CACT1nB,QAAS,KACTP,SAAU,WACVU,OAAO,EACPF,IAAK,EACLoB,UAAW,qBACXjB,MAAO,EACPC,OAAQ,EACRN,aAAc,QAIlB8gC,YAAa,CACXD,aAAc,EACdxjB,SAAU,IAGZ0F,KAAM,CACJxF,QAAS,CAAC,GAAI,IAGhB2V,aAAc,CACZxzB,SAAU,WACVE,QAAS,OACTsjB,cAAe,SACf/L,WAAY,SACZxW,UAAW,aACXkgC,aAAc,EACdt/B,WAAYL,EAAWC,kBACvBK,mBAAoB,2BAGtBu/B,WAAY,CACVrhC,SAAU,WACVshC,MAAO,EACP1oB,OAAQ,UAER,UAAW,CACTjX,QAAS,EACThB,MAAO,EACPC,OAAQ,EACRoY,QAAQ,IAIZuoB,QAAS,CAAA,EAET1oB,OAAQ,CAAA,EAERC,SAAU,CACRF,OAAQ,cACRqK,cAAe,QAGjBue,SAAU,CACRthC,QAAS,OACTuhC,SAAU,OACVC,UAAW,EACXC,OAAQ,MClCCC,GAAYjd,EAAAA,WAA8C,UACrE6c,SACEA,EAAA1Z,MACAA,EAAAzE,KACAA,EAAA+d,YACAA,EAAAS,sBACAA,GAAwB,EAAA3Y,WACxBA,GAAa,EAAA4Y,WACbA,GAAa,EAAAC,mBACbA,GAAqB,EAAAvtB,WACrBA,GAAa,EAAAmG,SACbA,GAAW,EAAAqnB,OACXA,EAAAC,MACAA,EAAArqB,OACAA,EAAArV,YACAA,EAAAiD,KACAA,GAEFuO,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,iBAErB2/B,EAAYC,GAAiBznB,EAAAA,UAAS,GAEvC0nB,EAAaC,IACb7tB,GAAckC,EAAAA,QAAQ2rB,IAA4B,IAAlBA,GAAOp0B,QAI3Cg0B,IAAQ,IAAII,KAGRC,EAAqD/rB,IACzD2qB,GAAW3qB,GACX4rB,GAAc,IAGVI,EAAoDhsB,IACxD2qB,GAAW3qB,GACX4rB,GAAc,IAaVK,EACHX,GAA0BrtB,OAOvB,EANA,CACEiuB,WAAYH,EACZI,YAAaJ,EACbK,YAAaJ,EACbK,OAhB8CrsB,IACpDgsB,EAAehsB,GAEf6rB,EAAU7rB,EAAMssB,aAAaR,SAiB/B,OACEnlB,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACvD4B,SAAA,CAAAyF,EAAAA,oBAAoB6I,MACnB9P,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQiQ,MAAO,CAAE,CAACjQ,EAAQoQ,eAAgBiB,IAAgB1P,SAAAsO,KAE/Ega,GACA5kB,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQ2b,aAAc,CACpC,CAAC3b,EAAQ0pB,SAAUW,EACnB,CAACrqB,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQgB,QAAS8B,OAEhB6nB,EAEHhpB,SAAA,CAAAyF,EAAAA,oBAAoBoE,IAASrL,EAAAA,IAAC,OAAItC,UAAWmC,EAAQwL,KAAO7J,SAAA6J,IAC7DrL,EAAAA,IAAC,QAAA,CAAMtC,UAAWmC,EAAQwpB,WACxB7nB,SAAAxB,EAAAA,IAAC,QAAA,CACCjE,MACA4D,KAAK,OACLnH,MAAM,GACNwE,SAlCoDuB,IAC9D6rB,EAAU7rB,EAAMrB,OAAOmtB,QAkCbS,UAAWf,EACXjpB,SAAUtE,EACVwtB,YACI1a,EAAAA,cAAc1P,EAAQ,gBAMjCqH,EAAAA,oBAAoBmiB,IAAgBppB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQupB,YAAc5nB,SAAA4nB,IAE3EppB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ2pB,SAAWhoB,SAAAgoB,MAGzC,GCxIa98B,GAAYE,EAAmB,aAAc,CACxD4S,KAAM,CACJtX,QAAS,OACT6iB,eAAgB,SAChBtL,WAAY,SACZmB,OAAQ,UACRK,QAAS,OACThY,UAAW,aACXY,WAAYL,EAAWC,kBACvBK,mBAAoB,6DACpBzB,OAAQ,OACRL,SAAU,WACVI,UAAW,OACXE,aAAc,MACdsqB,WAAY,OACZ/M,QAAS,EACTS,WAAY,EAEZ,aAAc,CACZjF,OAAQ,YAGV,WAAY,CACVA,OAAQ,UAGV1Y,MAAO,0BACPC,OAAQ,0BACR,0BAA2B,QAG7B,eAAgB,CAAA,EAEhBmiC,OAAQ,CAAA,EAERC,KAAM,CAAA,EAEN1f,OAAQ,CAAA,EAERzK,OAAQ,CAAA,EAERC,SAAU,CACRF,OAAQ,cACRqK,cAAe,QAGjBqB,QAAS,CACP,YAAa,CACXpkB,QAAS,UAIb4X,KAAM,CACJ5X,QAAS,OACTuX,WAAY,SACZ9W,MAAO,+BACPC,OAAQ,gCAGVyjB,OAAQ,CACNnkB,QAAS,OACTF,SAAU,WACVS,KAAM,MACND,IAAK,MACLoB,UAAW,wBAEXjB,MAAO,+BACPC,OAAQ,gCAGVijB,EAAG,CACD,qBAAsB,QAGxBE,EAAG,CACD,qBAAsB,QAGxBC,EAAG,CACD,qBAAsB,UCxDbif,GAAate,EAAAA,WAAgD,UACxE7M,KACEA,EAAAQ,KACAA,EAAO,IAAAyG,KACPA,EAAO,eAAAvK,WACPA,GAAa,EAAAmG,SACbA,GAAW,EAAAmK,UACXA,GAAY,EAAAnN,KACZA,EAAO,SAAAC,OACPA,EAAArV,YACAA,EAAAiD,KACAA,EAAAoX,QACAA,KACGsmB,GAELnvB,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtB+iB,EAAc9Q,GAAcsQ,EAElC,OACE9M,EAAAA,IAAC,SAAA,CACCjE,MACA2B,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQkH,GAAOlH,EAAQS,GAAO,CAC1D,CAACT,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQgB,QAAS8B,EAClB,CAAC9C,EAAQyM,SAAUQ,IAErBnN,OACAmB,SAAUtE,EACVoI,QAAS0I,OAAc,EAAY1I,KAC/BsmB,KACAjrB,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAAsL,QACE,OAAA,CAAKpP,UAAWmC,EAAQwM,OACvB7K,SAAAxB,EAAAA,IAAC2K,IAAgBhL,KAAK,UAAUiL,iBAAe,QAGjD5K,IAAC,OAAA,CAAKtC,UAAWmC,EAAQC,KAAO0B,SAAApB,GAAWN,MAInD,GCjEapT,GAAYE,EAAmB,UAAW,CACrD4S,KAAM,CACJtX,QAAS,eACTe,UAAW,cAGbkiC,QAAS,CACPxlB,SAAU,GACVE,QAAS,CAAC,GAAI,IACdiG,cAAe,IACf1iB,gBAAiB7D,EAAOY,cACxBukB,MAAOnlB,EAAOC,UACd4C,UAAW,WAAWsmB,EAAKnpB,EAAOC,UAAW,mBAAoBkpB,EAC/DnpB,EAAOC,UACP,yBACoBkpB,EAAKnpB,EAAOC,UAAW,MAC7C8C,aAAc,GACd8iC,WAAY,IACZpgB,SAAU,KAGZqgB,KAAM,CACJzlB,WAAY,SACZD,SAAU,GACVE,QAAS,CAAC,EAAG,IACbvd,aAAcxB,EAAWI,oBACzBkC,gBAAiB7D,EAAOE,YACxBilB,MAAOnlB,EAAOY,cACd2lB,cAAe,IAGjBR,OAAQ,CAAA,EAERnX,KAAM,CAAA,EAEN/G,MAAO,CACL,YAAa,CACXhE,gBAAiB7D,EAAOe,YACxBokB,MAAOnlB,EAAOY,eAGhB,SAAU,CACRiD,gBAAiB7D,EAAOe,gBC7BjBglC,GAA6B,EACxCjgB,OACAtE,OAAO,UACPpH,OAAO,OACPW,OACA9S,OACAoS,SACArV,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAE5B,OACEyV,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EACTvF,EAAQL,KACRK,EAAQkH,GACRlH,EAAQF,GACR1U,aAAWqV,IAAST,EAAQS,OAE1BL,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAA6J,KCnCM3e,GAAYE,EAAmB,kBAAmB,CAC7D4S,KAAM,CACJxX,SAAU,YAGZmjC,QAAS,CACPnqB,OAAQ,MAGVL,UAAW,CACTC,OAAQ,aCqBC2qB,GAA6C,EACxD/pB,WACAgqB,cACAC,kBAAkB,MAClBC,cAAc,UACdC,cAAc,OACdC,mBAAmB,GACnBC,uBACAC,cACAtvB,cAAa,EACbzB,sBAAqB,EACrBgxB,iBAAiB,QACjBpqB,aACA/B,SACApS,OACAjD,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtByhC,EAAqBrtB,GAAe,CACxCpU,cACAmT,UAAW,eACXmB,qBAAsB,qBAGjBotB,EAAkBC,GAAuBxpB,EAAAA,UAAS,IAClDypB,EAAgBC,GAAqB1pB,aAEtClD,EAAO1R,EAAAA,OAAuB,MAC9Bq9B,EAAUr9B,EAAAA,OAAuB,MAEjCu+B,OAA0B,IAAf1qB,EAqBjB5T,EAAAA,UAAU,IAAM,IAAMu+B,aAAaH,GAAiB,IAEpD,MAAQtgC,OAAQ0gC,EAAAhM,WAAcA,GAAe7kB,EAAU8D,EAAKvR,QAASk9B,EAAQl9B,QAAS,CACpFG,QAAS69B,EACT7wB,UAAWqwB,EACXtwB,UAAW,CACT,CACEhN,KAAM,SACNyM,QAAS,CACPe,OAAQ,CAAC,EAAG,MACTkwB,OAGJD,KAIP5tB,GACEmtB,EACA,KACyB,UAAnBY,GACFG,GAAoB,IAGxB1sB,GAGF,MAAMgW,EACe,UAAnBuW,EACI,CACEnnB,QAAS,IAAMsnB,GAAoB,IAErC,CACEM,aApDiB,KACvB,GAAIH,EAAU,CACZ,MAAMI,EAAUC,WAAW,KACzBR,GAAoB,IACnBvqB,GAEHyqB,EAAkBK,EACpB,MACEP,GAAoB,IA6ChBS,aAzCiB,KACnBN,GACFC,aAAaH,GAEfD,GAAoB,KAwChBU,EAAoBpB,UAAsDhvB,EAEhF,OACE0I,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EACTvF,EAAQL,KACW,UAAnBusB,GAA8Ba,GAAqB/sB,EAAQc,cAExDisB,EAAoBpX,OAAQ,KAC7BvV,EAAAA,kBAAkBzS,EAAMoS,GAC5B7D,IAAKyD,EAEJgC,SAAA,CAAAorB,SACE7L,SAAA,CAAOC,UAAWjmB,EAAqBtD,SAASS,KAAOsH,EAAKvR,QAC3DuT,SAAAxB,EAAAA,IAAC,MAAA,CACCtC,UAAWmC,EAAQsrB,QACnBr8B,MAAOy9B,EAAa99B,UAChB8xB,EAAW9xB,OACfsN,IAAKovB,EAEL3pB,SAAAxB,EAAAA,IAACsrB,GAAA,CACCvkB,KAAM2kB,EACN/rB,KAAMgsB,EACNtgB,KAAMmgB,EACNlrB,KAAMwrB,EACNvhC,YAAayhC,QAKpBxqB,MCpJMqrB,GAAyC,CACpD,CAACp9B,EAAUkE,KAAM,aACjB,CAAClE,EAAUmE,MAAO,aAClB,CAACnE,EAAUwB,MAAO,aAClB,CAACxB,EAAU0C,KAAM,aACjB,CAAC1C,EAAU2C,KAAM,WACjB,CAAC3C,EAAUa,KAAM,YACjB,CAACb,EAAUc,MAAO,YAClB,CAACd,EAAUoE,KAAM,WACjB,CAACpE,EAAUsE,KAAM,YCRN+4B,GAA8BC,IACzC,MAAMC,EAAgBD,EAAS33B,MAAM,KACrC,OAAO43B,EAAc/2B,OAAS,EAAI+2B,EAAcC,WAAQ,GAG7CC,GAAyBH,IACpC,MAAMI,EAAML,GAA2BC,GACvC,OAAO9hC,EAAAA,WAAWkiC,GAAO19B,EAAU09B,QAAoB,GAG5CC,GAAc,EAAGztB,OAAMxR,WAClC,GAAIlD,aAAW0U,IAASA,KAAQktB,GAC9B,OAAOA,GAAYltB,GAGrB,MAAM0tB,EAAWH,GAAsB/+B,GACvC,OAAIlD,aAAWoiC,IAAaA,KAAYR,GAC/BA,GAAYQ,GDpBqB,cEE/B3gC,GAAYE,EAAmB,WAAY,CACtD4S,KAAM,CACJtX,QAAS,OACTsjB,cAAe,SACf9F,IAAK,GAGP4nB,gBAAiB,CACfplC,QAAS,OACTwd,IAAK,GACL/c,MAAO,OACPiY,OAAQ,UACR3X,UAAW,aACXY,WAAYL,EAAWC,kBACvBK,mBAAoB,qDAGtBiiB,EAAG,CACD,oBAAqB,CACnBlG,QAAS,CAAC,GAAI,GAAI,GAAI,KAGxB,cAAe,QAGjBmG,EAAG,CACD,oBAAqB,CACnBnG,QAAS,CAAC,GAAI,KAGhB,cAAe,QAGjB0nB,SAAU,CACRviB,SAAU,mBACVwD,UAAW,oBAGbue,SAAU,CACRnnB,WAAY,SACZ1c,SAAU,SACVskC,aAAc,WACd7nB,SAAU,IAGZ8nB,kBAAmB,CACjBvkC,SAAU,SACVof,YAAa,QAGfolB,UAAW,CACTxlC,QAAS,OACTif,OAAQ,GAGV,iBAAkB,CAChBxe,MAAO,GACPR,UAAW,IAGb,oBAAqB,CACnBQ,MAAO,GACPC,OAAQ,IAGV,iBAAkB,CAChBD,MAAO,GACPC,OAAQ,IAGV+kC,SAAU,CACRzlC,QAAS,OACTsjB,cAAe,SACf9F,IAAK,EACLC,SAAU,IAGZioB,QAAS,CACP1lC,QAAS,OACToe,WAAY,EACZa,QAAQ,GAGV0mB,SAAU,CAAA,EAEVvR,OAAQ,CAAA,EAERlvB,MAAO,CACLuY,SAAU,IAGZxR,KAAM,CACJwR,SAAU,IAGZ7E,SAAU,CACRF,OAAQ,iBAICktB,GAAgD,CAC3DthB,mBAAoB,CAClBhN,KAAM,CACJkG,IAAK,EACL,aAAc,SCpGPqoB,GAAU,CAAC,aAAc,aAAc,YAAa,YAAa,UAEjEC,GAA+C,CAC1DxL,GAAI,CACFyL,MAAO,WACPC,IAAK,MACLC,OAAQ,YACRC,aAAc,oBACdC,kBAAmB,SAGrB3L,GAAI,CACFuL,MAAO,QACPC,IAAK,MACLC,OAAQ,SACRC,aAAc,gBACdC,kBAAmB,WAIVC,GAA+C,CAC1D9L,GAAI,CACFyL,MAAO,WACPC,IAAK,MACLK,MAAO,YACPJ,OAAQ,YACRC,aAAc,aACdrkB,KAAM,KACNC,GAAI,KACJwkB,KAAM,QACNvY,KAAM,OACNoY,kBAAmB,QACnBI,gBAAiB,kBACjB5K,OAAQ,CACN,SACA,UACA,OACA,SACA,MACA,OACA,OACA,SACA,WACA,UACA,SACA,WAEF6K,QAAS,CACPC,WAAY,aACZC,WAAY,gBACZC,UAAW,WACXC,UAAW,cACXC,OAAQ,kBAIZrM,GAAI,CACFuL,MAAO,QACPC,IAAK,MACLK,MAAO,SACPJ,OAAQ,SACRC,aAAc,gBACdrkB,KAAM,OACNC,GAAI,KACJwkB,KAAM,OACNvY,KAAM,OACNoY,kBAAmB,SACnBI,gBAAiB,mBACjB5K,OAAQ,CACN,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEF6K,QAAS,CACPC,WAAY,aACZC,WAAY,iBACZC,UAAW,YACXC,UAAW,gBACXC,OAAQ,YASDhL,GAAsB,aAEtBiL,GAAuB,CAAA,EAEvBC,GAAiD,CAC5DN,WAAY,KACV,MAAMO,MAAY7N,KAClB,MAAO,CACLtX,KAAMolB,EAAAA,aAAaD,GACnBllB,GAAIolB,EAAAA,WAAWF,KAGnBN,WAAY,KACV,MAAMtL,EAAM+L,EAAAA,IAAI,IAAIhO,KAAQ,CAAEwC,OAAQ,IACtC,MAAO,CACL9Z,KAAMolB,EAAAA,aAAa7L,GACnBtZ,GAAIolB,EAAAA,WAAW9L,KAGnBuL,UAAW,KACT,MAAMK,MAAY7N,KAClB,MAAO,CACLtX,KAAMulB,EAAAA,YAAYJ,GAClBllB,GAAIulB,EAAAA,UAAUL,KAGlBJ,UAAW,KACT,MAAMxL,EAAM+L,EAAAA,IAAI,IAAIhO,KAAQ,CAAEmO,MAAO,IACrC,MAAO,CACLzlB,KAAMulB,EAAAA,YAAYhM,GAClBtZ,GAAIulB,EAAAA,UAAUjM,MC7HPmM,GAAY,CACvBtkC,ED0F8C,KCzF9CmgB,EACAokB,IACkBC,EAAAA,MAAMrB,GAAcnjC,GAAMmgB,EAAQokB,GAQzCE,GAAcC,GACzBA,EAAI5a,cAAS,GAAa4a,EAAOA,EAAiBl7B,KAAK,CAACwB,EAAGC,IAAOD,EAAIC,KAAS,GAEpEglB,GAA0BtiB,GAAyBM,OAAON,GCnB1DpM,GAAYE,EAAmB,cAAe,CACzD4S,KAAM,CACJtX,QAAS,OACTuhC,SAAU,OACV/jB,IAAK,EACL/c,MAAO,QAGTmnC,SAAU,CACR5nC,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChBziB,aAAc,GACdW,UAAW,aACXN,MAAO,GACPC,OAjByB,GAkBzBgY,OAAQ,UACR/W,WAAYL,EAAWC,kBACvBK,mBAAoB,oBAGtBimC,aAAc,CACZpnC,MAAO,GACPC,OAAQ,IAGVqlC,MAAO,CACL/lC,QAAS,OACTuX,WAAY,SACZ7W,OA/ByB,IAkC3BonC,sBAAuB,CACrB9nC,QAAS,OACTwd,IAAK,GACLhX,SAAU,KAIDuhC,GAAmC,CAC9CpkB,EAAG,CACDzF,YAAa,EACbkK,aAAc,EACd5hB,SAAU,SAGZ2c,KAAM,CACJuH,WAAY,OACZlI,MAAOnlB,EAAOK,YAEd,mBAAoB,CAClB8kB,MAAOnlB,EAAOE,aAGhB,WAAY,CACVilB,MAAOnlB,EAAOC,WAGhB,6BAA8B,CAC5BotB,WAAY,OACZwE,YAAa,iBAKN8Y,GAAuC,CAClD7kB,KAAM,CACJX,MAAOnlB,EAAOK,YAEd,mBAAoB,CAClB8kB,MAAOnlB,EAAOE,aAGhB,WAAY,CACVilB,MAAOnlB,EAAOE,eC3EPiH,GAAYE,EAAmB,mBAAoB,CAC9D4S,KAAM,CACJ7W,MAAO,IACPiqB,WAAYrtB,EAAOY,cACnB6B,SAAU,WACVgZ,OAAQ,IAGVggB,UAAW,CACTnb,QAAS,CAAC,EAAG,KAGf0b,QAAS,CACPr5B,QAAS,OACTsjB,cAAe,cACfT,eAAgB,gBAChBlF,QAAS,KAIAoqB,GAAoBE,gBAAgBD,ICSpCE,GAA+C,EAC1D53B,QACAsX,QAAAtb,OACAA,EACA67B,YACAtc,cACAxpB,cACAyS,WACAyI,UACA6qB,iBACA1wB,SACApS,UACGgoB,MAEH,MAAM3V,EAAUnT,GAAU,CAAEY,MAAO/C,IAE7BgmC,EAAyB5xB,GAAe,CAC5CC,YAAaqxB,GACb1lC,cACAmT,UAAW,mBACXmB,qBAAsB,qBAGlB2xB,EAAwB7xB,GAAe,CAC3CpU,cACAmT,UAAW,kBACXmB,qBAAsB,qBAGlB4xB,EAAkB3iC,EAAAA,OAAuB,MAEzC4iC,EAA2B,OAAdL,EAAqB7N,EAAAA,GAAKmO,EAAAA,KACvCC,EAAa/lC,UAAQ,IAAM4kC,GAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,IAM3E,OACE0Q,EAAAA,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KAAMzD,IAAK00B,KAAqBxwB,EAAAA,kBAAkBzS,EAAMoS,GAC9E4B,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQmhB,UACtBxf,SAAAxB,EAAAA,IAACyjB,GAAA,CACC3T,MAAOA,GAAS8gB,EAAW3a,KAC3BzhB,OAAQk8B,EACR7M,OAAQ+M,EAAW/M,OACnBH,aAAclrB,EACdktB,aAAezP,IACbjZ,EAASiZ,GACTxQ,OAEFlb,YAAaimC,EACb5L,YAAa,CAAE/1B,SAAU,CAAED,UAAW6hC,GAAiBxiC,aACnDunB,YAIP,MAAA,CAAI9X,UAAWmC,EAAQ0hB,QACrB/f,SAAAuS,SACE,MAAA,CACCvS,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QA1BQ,KAClB0rB,KA0BUhwB,KAAK,IACLyG,KAAK,OACLnH,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BgN,aAAW,EACXriB,YAAagmC,EAEZ/uB,SAAAovB,EAAW3C,gBCjGpB4C,GAAgB,CAAC/3B,EAAa9Q,IAClC8Q,EAAItC,MAAM,EAAGxO,GAAUoN,MAAM,IAAI3K,OAAOuP,IAAa/D,OCyB1C66B,GAAcnkB,EAAAA,WAAgD,UACzEnU,MACEA,EAAAu4B,WACAA,GAAa,EAAAC,cACbA,GAAgB,EAAAC,aAChBA,EAAAC,UACAA,EAAY,EAAAC,iBACZA,EAAmB,EAAAn0B,SACnBA,EAAAsX,OACAA,EAAA7b,IACAA,EAAAC,IACAA,KACG8c,GAELzZ,GAEA,MAAOq1B,EAAaC,GAAkB3uB,EAAAA,SAAS,IDlBV,EACrClK,EACAy4B,KAEA,MAAMn4B,EAAMI,GAAaV,GACzB,OAAO8c,EAAAA,iBAAiBxc,GAAOA,EAAMI,GAAa+3B,ICchDK,CAAwB94B,EAAOy4B,KAI1BM,EAAuBC,GAA4B9uB,EAAAA,UAAS,GAM7D+uB,EAA6Bj8B,IACjC67B,EAAe/b,EAAAA,iBAAiB9f,GAAKA,EAAI0D,GAAa+3B,KA+DxD,OARAvjC,EAAkB,UACF,IAAV8K,EACFi5B,EAA0Bv4B,GAAaV,IAEvC64B,EAAen4B,GAAaV,KAE7B,CAACA,IAGFwH,EAAAA,IAAC4V,GAAA,CACCpd,MAAO44B,EACPp0B,SA/DiB0Y,MAAOsN,EAAoBzkB,KAC9C,MAAMmzB,EAAWN,EACXl0B,EAASqB,EAAMrB,OACfy0B,EAAkBz0B,EAAOrD,gBAAkB,EAC3C+3B,EAAYv4B,GAAmB2pB,GAErC,GAAkB,KAAd4O,EAIF,OAHA50B,OAAS,QAETq0B,EAAe,IAIjB,MAAMQ,EAAe,IAAIC,ODtCE,GAC7Bf,aACAC,gBACAG,mBACAD,eASO,IAAIF,EAFU,SAEqB,WAJhBG,KAIgCJ,EAHxC,aAAaG,OAGoD,MC0B/Ea,CAAgB,CACdb,YACAC,mBACAH,gBACAD,gBAIJ,IAAKc,EAAav5B,KAAKs5B,GAGrB,aAFMP,EAAeK,QACrBh4B,GAAiBwD,EAAQy0B,EAAkB,GAI7C,MAAMK,EAASjB,GAAc,oBAAoBz4B,KAAK0qB,GAChDiP,EAAiBp5B,GAAmB+4B,GACpCtS,EAAW0S,EAAS,GAAGC,KAAoBA,QAC3CZ,EAAe/R,GACrB5lB,GACEwD,EDvF6B,EACjCg1B,EACAR,EACApS,EACAiS,KAEA,GAAIG,IAAapS,EACf,OAAOiS,EAAwBW,EAAkB,EAAIA,EAGvD,MAAMC,EAAW7S,EAASrpB,OAASy7B,EAASz7B,OACtCm8B,EAAgBvB,GAAca,EAAUQ,GAAmBC,EAAW,EAAI,IAG1EE,EAAMH,GAFUrB,GAAcvR,EAAU4S,GACjBE,GAE7B,OAAIC,GAAO,EACF,EAEFA,GAAOr4B,GAAYslB,EAAS+S,EAAM,IAAM,EAAI,ICsE/CC,CAAoBX,EAAiBD,EAAUpS,EAAUiS,KA8BzDjd,OA1BgB/V,IAClB,MAAMzF,EAAMyF,EAAMkX,cAAcjd,MAC1BgB,EAAMF,GAAeR,GACrBwmB,OAAmB,IAAR9lB,EAAoBjB,GAAiBiB,EAAKf,EAAKC,QAAO,EACnE4mB,IAAa9mB,EACfwE,EAASsiB,GAETmS,EAA0Bv4B,GAAaV,SAE1B,IAAX8b,GACFA,EAAO/V,IAiBP+P,UAzEmB/P,IACrBizB,EAAuC,WAAdjzB,EAAMpT,MAyE7B4Q,SACIyZ,GAGV,GC9Ha9oB,GAAYE,EAAmB,iBAAkB,CAC5D4S,KAAM,CACJqG,QAAS,EACT+M,WAAYrtB,EAAOY,eAGrBq1B,aAAc,CACZ3V,QAAS,CAAC,EAAG,IACb3d,QAAS,OACTqqC,oBAAqB,iBACrB7sB,IAAK,GACLyjB,aAAc,IAGhBqJ,SAAU,CACR9jC,SAAU,IACV9F,OAAQ,EACRe,QAAS,EACT2mB,aAAc,GACd3K,SAAU,GACVC,WAAY,MACZ6sB,WAAY,OACZxnB,cAAe,QAGjBgjB,MAAO,CACL/lC,QAAS,OACT6iB,eAAgB,cAIPmM,GAA4B,CACvCxJ,MAAO,CACLhf,SAAU,KAGZyoB,oBAAqB,CACnBrX,KAAM,CACJ+F,QAAS,EACTld,MAAO,GAEP,eAAgB,CACd2nB,aAAc,MAMT2f,GAAoBE,gBAAgBD,IC1BpCwC,GAA2C,EACtDllC,OACAjD,cACAiO,QACAm6B,YACAC,uBACAvC,YACA77B,OAAAA,EACAu8B,aACA/zB,WACA61B,YACAC,UACAlzB,aAEA,MAAMC,EAAUnT,GAAU,CAAEnC,gBAEtBqmC,EAAa/lC,UAAQ,IAAM4kC,GAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,IAsBrE6hB,EAAmB1X,GAAe,CACtCC,YAAasY,GACb3sB,cACAmT,UAAW,aACXmB,qBAAsB,mBAGlB0xB,EAAyB5xB,GAAe,CAC5CC,YAAaqxB,GACb1lC,cACAmT,UAAW,mBACXmB,qBAAsB,mBAGxB,OACEqG,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACxD4B,SAAA,GAAA0D,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ2b,aACtBha,SAAA,CAAA0D,OAAC,MAAA,CACC1D,SAAA,CAAAxB,EAAAA,IAAC8wB,GAAA,CACC9zB,SAnCgBxH,IAKxBwH,OAJU,IAANxH,QAAkC,IAAfgD,IAAQ,GAItBo3B,GAAW,CAACp6B,EAAGgD,IAAQ,UAHrB,IAkCHA,MAAOA,IAAQ,GACfsX,MACE8iB,EACI,GAAGD,KAAa/B,EAAW7mB,KAAKgpB,sBAChCnC,EAAW7mB,KAEjBgnB,aACAhd,aAAW,EACXxpB,YAAa8rB,EACbzW,OAAQgI,EAAAA,UAAUhI,EAAQ,YACtBizB,IAELD,KACC1tB,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ2yB,SACrBhxB,SAAA,CAAAmxB,EAAU,IAAO/B,EAAW7mB,kBAIlC,MAAA,CACCvI,SAAA,CAAAxB,EAAAA,IAAC8wB,GAAA,CACC9zB,SAhDcxH,IAKtBwH,OAJU,IAANxH,QAAkC,IAAfgD,IAAQ,GAItBo3B,GAAW,CAACp3B,IAAQ,GAAIhD,SAHtB,IA+CHgD,MAAOA,IAAQ,GACfsX,MACE8iB,EACI,GAAGD,KAAa/B,EAAW5mB,GAAG+oB,sBAC9BnC,EAAW5mB,GAEjB+mB,aACAhd,aAAW,EACXxpB,YAAa8rB,EACbzW,OAAQgI,EAAAA,UAAUhI,EAAQ,UACtBkzB,IAELF,KACC1tB,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ2yB,SACrBhxB,SAAA,CAAAmxB,EAAU,IAAO/B,EAAW5mB,YAKrChK,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQouB,MACtBzsB,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QAlFY,KAClB5H,OAAS,IAkFHsD,KAAK,IACLyG,KAAK,OACLnH,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BrV,YAAagmC,EAEZ/uB,SAAAovB,EAAW3C,cCnIT+E,GAAyD,CACpExQ,GAAI,CACFyL,MAAO,WACPC,IAAK,MACLC,OAAQ,YACRC,aAAc,aACdC,kBAAmB,SAGrB3L,GAAI,CACFuL,MAAO,QACPC,IAAK,MACLC,OAAQ,SACRC,aAAc,gBACdC,kBAAmB,WCZVjT,GAA0BtiB,GAAyBM,OAAON,GCI1DpM,GAAYE,EAAmB,kBAAmB,CAC7D4S,KAAM,CACJ7W,MAAO,IACPiqB,WAAYrtB,EAAOY,eAGrB4yB,KAAM,CACJL,WATY,GAUZlK,UAAWykB,IACXC,mBAAoB,aACjBrrC,EAAQmB,eAGb8mB,MAAO,CACL7mB,UAAW,aACX0c,SAAU,GACVE,QAAS,CAAC,GAAI,IACd4sB,WAAY,OACZvqC,QAAS,OACTuX,WAAY,SACZiL,MAAOnlB,EAAOG,YAGhBytC,YAAa,CACXxR,WAAY,OACZjX,MAAOnlB,EAAOC,UACdqgB,QAAS,CAAC,EAAG,GAAI,KAGnButB,cAAe,CACb1a,WAAY,GAGdhS,KAAM,CACJzd,UAAW,aACX4c,QAAS,EACTmF,SAAU,OACVrF,SAAU,IAGZmV,OAAQ,CACN5yB,QAAS,eACTuqC,WAAY,OACZznB,SAAU,OACV9hB,SAAU,SACV0c,WAAY,SACZ4nB,aAAc,YAGhB6F,MAAO,CACLnrC,QAAS,OACT2d,QAAS,CAAC,EAAG,EAAG,IAGlBooB,MAAO,CACLxiB,WAAY,QAGd6nB,aAAc,CAAA,EAEd5F,UAAW,CACT/kC,MAAO,GACPC,OAjEgB,GAkEhBue,OAAQ,OACRjf,QAAS,OACTuX,WAAY,SACZsL,eAAgB,UAGlBwoB,cAAe,CACbxqC,aAAc,CAAC,EAAG,QAASxD,EAAOM,cAGpCuoC,aAAc,CACZlmC,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChB3D,UAAW,SACXvB,QAAS,GACTF,SAAU,MAID6tB,GAAwC,CACnD9R,WAAY,CACVvK,oBAAqB,CACnBxH,eAAgB,CACd,mBAAoB,OACpBvmB,gBAAiB,cACjBf,OAAQ,WAMHgxB,GAAkC,CAC7C7Z,KAAM,CACJqG,QAAS,CAAC,GAAI,IACd5c,UAAW,aACXN,MAAO,QAGT6Y,SAAU,CACR8G,YAAa,OACbpf,SAAU,WAID+mC,GAAmC,CAC9C5kB,KAAM,CACJX,MAAOnlB,EAAOK,YAEd,mBAAoB,CAClB8kB,MAAOnlB,EAAOE,aAGhB,WAAY,CACVilB,MAAOnlB,EAAOE,eC7Eb,SAASguC,IAA+Ej7B,MAC7FA,EAAAjO,YACAA,EAAAiD,KACAA,EAAAkmC,gBACAA,GAAkB,EAAArD,UAClBA,EHjCmD,KGkCnD77B,OAAAA,EAASw+B,GAAmB3C,GAASrzB,SACrCA,EAAAyI,QACAA,EAAA7K,QACAA,EAAA+4B,aACAA,EAAAC,kBACAA,EAAoBF,EAAAG,aACpBA,EAAezY,GAAA0Y,WACfA,EAAa1Y,GAAA2Y,eACbA,EAAiB3Y,GAAA4Y,iBACjBA,EAAmB,OAAAC,SACnBA,EAAAC,gBACAA,EAAAt0B,OACAA,IAEA,MAAMxC,EAAYD,KACZ0C,EAAUnT,GAAU,CAAEnC,gBAEtB4pC,EAAsBx1B,GAAe,CACzCC,YAAaya,GACb9uB,cACAmT,UAAW,gBACXmB,qBAAsB,oBAGlBwe,EAAyB1e,GAAe,CAC5CC,YAAa40B,GACbjpC,cACAmT,UAAW,mBACXmB,qBAAsB,oBAGlB0xB,EAAyB5xB,GAAe,CAC5CC,YAAaqxB,GACb1lC,cACAmT,UAAW,mBACXmB,qBAAsB,qBAGjBu1B,EAAaC,GAAkB3xB,EAAAA,SAAS,IACxCob,EAAaC,GAAkBrb,EAAAA,SAAS,KAExC4xB,EAAYC,GAAiB7xB,EAAAA,SAAmB,KAEhDoK,EAAW0nB,GAAgB9xB,EAAAA,UAAS,IACpC+xB,EAA0BC,GAA6BhyB,EAAAA,UAAS,IAEhEiyB,EAAYC,GAAiBlyB,EAAAA,SAAS,IACtCmyB,EAAWC,GAAgBpyB,EAAAA,UAAS,GAErCrG,EAAWvO,EAAAA,SAEXinC,EAAev8B,GAAOw8B,QAEtBpE,EAAa/lC,UAAQ,IFrGJ,EACvBM,EDamD,KCZnDmgB,EACAokB,IACuBC,EAAAA,MAAMqD,GAAmB7nC,GAAMmgB,EAAQokB,GEiG7BD,CAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,IACrEygC,EAAkBpqC,UAAQ,IAAMkqC,GAAc1/B,IAAIy+B,GAAa,CAACA,EAAYiB,IAE5EG,EAAkBrqC,EAAAA,QACtB,IAAMypC,EAAW7pC,OAAQ+K,IAAOy/B,GAAiBhgB,SAAS6e,EAAWt+B,KACrE,CAACs+B,EAAYQ,EAAYW,IAGrBE,EAA0B93B,EAAAA,YAC9BqY,MAAOsN,IACL,QAAqB,IAAjB2Q,EAAJ,CAGAa,GAAa,GAEb,IACE,MAAMY,QAAiBzB,EAAa3Q,GAAY9tB,QAAU,IACtDkI,UAA4B,IAAbg4B,IACjBb,EAAca,GACdR,EAAc,GACdE,EACsB,IAApBM,EAASn/B,aAA8B,IAAbg+B,GAA0BmB,EAASn/B,OAASg+B,GAG5E,CAAA,QACM72B,KACFo3B,GAAa,EAEjB,CAhBA,GAkBF,CAACb,EAAcM,IAGXoB,EAAoBh4B,EAAAA,YAAYwiB,EAAAA,SAASsV,GAA0B,CACvEA,IAmBF,MAeMjnB,EAA+C,EAAG1V,MAAO88B,EAAelnB,iBAfpD,IAACtV,EAgBrB7N,EAAAA,WAAWqqC,KAfI,KADMx8B,EAkBrBsV,EACI,IAAK2mB,GAAgB,GAAKO,GAC1BP,GAActqC,OAAQ+K,GAAMs+B,EAAWt+B,KAAOs+B,EAAWwB,KAAmB,IAnB5Er/B,OAKR+G,EAAS,CACPg4B,QAASl8B,IALTkE,OAAS,KAuBPu4B,EAAiBh3B,IAkBrB,GAhBmB,WAAfA,EAAMkiB,OACRzjB,EAASxE,GACLiN,GACFA,KAGe,cAAflH,EAAMkiB,MACJ2T,EAAcc,EAAgBj/B,QAAUuC,GAAOw8B,QAAQ/+B,QAAU,GAAK,GACxEo+B,EAAeD,EAAc,GAGd,YAAf71B,EAAMkiB,MACJ2T,GAAe,GACjBC,EAAeD,EAAc,GAGd,UAAf71B,EAAMkiB,KAAkB,CAC1B,QACmC,IAAjCyU,EAAgBd,UACL,IAAV57B,GAAgD,IAAzBA,EAAMw8B,QAAQ/+B,QAEtC,YAEY,IAAVuC,EACE47B,EAAc57B,EAAMw8B,QAAQ/+B,OAC9B+G,EAAS,IACJxE,EACHw8B,QACEx8B,EAAMw8B,QAAQvqC,OACXqO,GAAQg7B,EAAWh7B,KAASg7B,EAAWt7B,EAAMw8B,QAAQZ,MACnD,KAGTp3B,EAAS,IACJxE,EACHw8B,QAAS,IAAIx8B,EAAMw8B,QAASE,EAAgBd,EAAc57B,EAAMw8B,QAAQ/+B,WAI5E+G,EAAS,CACPg4B,QAAS,CAACE,EAAgBd,KAGhC,GAGIoB,EAAoBlsB,GAAeyrB,GAAcx/B,KAAMC,GAAMs+B,EAAWt+B,KAAO8T,GAE/EmsB,EAA0Bp4B,EAAAA,YAC9BqY,MAAOsN,EAAqB0S,KAC1B,QAAqB,IAAjB/B,EAAJ,CAIAe,GAA0B,GAE1B,IACE,MAAMU,QAAiBzB,EAAa3Q,GAAc,GAAI0S,GAAQ,GAC1Dt4B,MACEg4B,EAASn/B,OAAS,GACpBs+B,EAAeoB,GAAc,IAAIA,KAAcP,KAEzB,IAApBA,EAASn/B,aAA8B,IAAbg+B,GAA0BmB,EAASn/B,OAASg+B,IACxEa,GAAa,GAGnB,CAAA,QACM13B,KACFs3B,GAA0B,EAE9B,CAlBA,GAoBF,CAACf,EAAcG,IAGX8B,EAA2Bv4B,EAAAA,YAC9BV,IACK83B,GAA4BI,IAI5Bx4B,EAASpO,SACXoO,EAASpO,QAAQmO,aAGnBC,EAASpO,QAAU,IAAIqO,qBAAqBoZ,MAAOmgB,IAC7CA,EAAQ,GAAGt5B,uBACPk5B,EAAwB3X,EAAa6W,EAAa,GACpDv3B,KACFw3B,EAAee,GAAcA,EAAY,MAK3Ch5B,GACFN,EAASpO,QAAQ2O,QAAQD,KAG7B,CAACg4B,EAAYc,EAAyBhB,EAA0BI,EAAW/W,IAG7E/vB,EAAAA,UAAU,KACR,QAAqB,IAAjB4lC,EAEF,YADAY,EAAc35B,GAAW,IAIJ8a,WACrB8e,GAAa,GAEb,IACE,MAAMY,QAAiBzB,EAAa,SACnB,IAAbyB,GAA0Bh4B,OACJ,IAApBg4B,EAASn/B,aAA8B,IAAbg+B,GAA0BmB,EAASn/B,OAASg+B,IACxEa,GAAa,GAEfP,EAAca,GAElB,CAAA,QACMh4B,KACFo3B,GAAa,EAEjB,GAEFsB,IACC,IAEH/nC,EAAAA,UAAU,KACR0J,SAAS+D,iBAAiB,UAAW+5B,GAAe,GAE7C,KACL99B,SAASgE,oBAAoB,UAAW85B,GAAe,MAI3D,MAAMQ,GAAkBnC,EAAoBsB,EAAkBZ,EAExD0B,GAA0BpC,GAAqBrnC,EAAAA,gBAAgBwoC,GAE/DkB,IAAiCnpB,IAAcvgB,EAAAA,gBAAgB+nC,GAE/D4B,GACJF,KAA4BzpC,EAAAA,gBAAgB2oC,KAAqB3oC,EAAAA,gBAAgB+nC,IAE7E6B,GAAsBrpB,GAAa2nB,EAEnC2B,IACHtpB,IAAcvgB,EAAAA,gBAAgB+nC,IAAe/nC,EAAAA,gBAAgBwoC,IAEhE,OACE7vB,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACvD4B,SAAA,CAAAkyB,KACC1zB,IAAC,MAAA,CAAItC,UAAWmC,EAAQ0zB,cACtB/xB,SAAAxB,EAAAA,IAACqX,GAAA,CACC7e,MAAOslB,EACPnK,YAAaid,EAAWvC,kBACxBrxB,SAvMV,SAAwBgmB,GAGtB,GAFAjF,EAAeiF,QAEM,IAAjB2Q,GACF,QAAgB,IAAZ/4B,EAAuB,CACzB,MAAMy7B,EAAmBrT,EAAWvuB,cACpC8/B,EACE35B,EAAQnQ,OAAQi1B,GAAMqU,EAAerU,GAAGjrB,cAAcwgB,SAASohB,IAEnE,OAEA7B,GAAa,GACba,EAAkBrS,EAEtB,EA0LUz4B,YAAa8yB,EACbpJ,UAAWigB,EACXt0B,OAAQgI,EAAAA,UAAUhI,EAAQ,UAC1BsU,oBAAkB,MAIvBkiB,IACClxB,EAAAA,KAAC,MAAA,CAAIxH,UAAWmC,EAAQkZ,QAAUzJ,gBAAc1P,EAAQ,QAErD4B,SAAA,CAAAw0B,IACC9wB,EAAAA,KAAAC,WAAA,CACE3D,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EACTvF,EAAQiQ,MACRjQ,EAAQszB,aACPO,GAAmB7zB,EAAQuzB,eAG7B5xB,SAAAovB,EAAWzC,SAEb4G,GAAc1/B,IAAKyD,IAClB,MAAMwQ,EAAKwqB,EAAWh7B,GAChBiO,EAAO8sB,EAAa/6B,GAE1B,OACEkH,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EACTvF,EAAQ6G,MAKVlF,SAAAxB,EAAAA,IAAC4N,GAAA,CACCM,WACAL,WAAS,EACTrV,MAAOM,EACPvO,YAAa4pC,EACblmB,cAAoC,SAArB+lB,EAA8B,QAAU,OACvDxmC,KAAM,CAAE8b,MAER9H,SAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQib,UAAY7a,EAAAA,kBAAkB,CAAE6a,OAAQxR,IAC7D9H,SAAAuF,OAXAuC,SAoBbwD,GACA5H,EAAAA,KAAAC,EAAAA,SAAA,CAEG3D,SAAA,CAAA00B,UAA8B,MAAA,CAAIx4B,UAAWmC,EAAQiQ,MAAQtO,WAAW0sB,MAExE6H,GAAgB1gC,IAAI,CAACyD,EAAK0Z,KACzB,MAAMlJ,EAAKwqB,EAAWh7B,GAChBiO,EAAO8sB,EAAa/6B,GAE1B,OACEkH,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EACTvF,EAAQ6G,MAIV3K,IACEg6B,GAAgB9/B,OAAS,IAAMuc,EAAQojB,OAA2B,EAIpEp0B,SAAAxB,EAAAA,IAAC4N,GAAA,CACCM,WACAL,UAAW2nB,EAAiBlsB,GAC5B9Q,MAAOM,EACPvO,YAAa4pC,EACblmB,cAAoC,SAArB+lB,EAA8B,QAAU,OACvDxmC,KAAM,CAAE8b,MAER9H,SAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQib,UAAY7a,EAAAA,kBAAkB,CAAE6a,OAAQxR,IAC7D9H,SAAAuF,OAXAuC,WAuBlB6sB,IACCn2B,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ6tB,UACtBlsB,SAAAxB,EAAAA,IAAC2K,GAAA,CAAgBhL,KAAK,WAKzBs2B,IACCj2B,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQuuB,aAAe5sB,WAAW4sB,iBAIpDpuB,IAAC,OAAItC,UAAWmC,EAAQwzB,MACtB7xB,SAAAxB,MAAC,MAAA,CAAItC,UAAWmC,EAAQouB,MACtBzsB,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QAzRU,KAClB5H,OAAS,IAyRDsD,KAAK,IACLyG,KAAK,OACLnH,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BrV,YAAagmC,EAEZ/uB,SAAAovB,EAAW3C,cAMxB,CC3cO,SAASqI,GACd9gB,GAEA,aAAQie,GAAA,IAAoBje,GAC9B,CCJA,MAGa9oB,GAAYE,EAAmB,eAAgB,CAC1D4S,KAAM,CACJ7W,MAAO,IACPiqB,WAAYrtB,EAAOY,eAGrB4yB,KAAM,CACJL,WATa,GAUb7S,QAAS,CAVI,GAUO,GACpB2I,UAAWykB,IACXC,mBAAoB,aACjBrrC,EAAQmB,eAGb8mB,MAAO,CACL7mB,UAAW,aACX0c,SAAU,GACVE,QAAS,CAAC,GAAI,IACd4sB,WAAY,OACZvqC,QAAS,OACTuX,WAAY,SACZiL,MAAOnlB,EAAOG,YAGhBytC,YAAa,CACXxR,WAAY,OACZjX,MAAOnlB,EAAOC,UACdqgB,QAAS,CAAC,EAAG,GAAI,KAGnButB,cAAe,CACb1a,WAAY,GAGd6d,gBAAiB,CACf3d,cAAe,EACfpK,UAAWykB,KAGbvsB,KAAM,CACJxe,QAAS,OACTuX,WAAY,SACZsL,eAAgB,gBAChBlF,QAAS,CAAC,GAAI,IACdmF,SAAU,OACVpK,OAAQ,UACR+E,SAAU,GACVxc,UAlDgB,GAmDhBU,WAAYL,EAAWC,kBACvBK,mBAAoB,mBACpBb,UAAW,cAGb6xB,OAAQ,CACN5yB,QAAS,eACTuqC,WAAY,OACZ9pC,MAAO,OACPO,SAAU,SACV0c,WAAY,SACZ4nB,aAAc,YAGhB1tB,KAAM,CACJnX,MAAO,GACPC,OAAQ,GACR0f,YAAa,EACbgL,UAAW,SACXhN,WAAY,GAGd+sB,MAAO,CACLnrC,QAAS,OACT2d,QAAS,CAAC,EAAG,EAAG,GAChBH,IAAK,GAGP8wB,gBAAiB,CACfC,UAAW,CAAC,EAAG,QAASlxC,EAAOM,aAC/BggB,QAAS,CAAC,EAAG,KAGfyW,OAAQ,CACNoa,UAAW,aACXpjB,UAAW,UAGb2a,MAAO,CACLxiB,WAAY,OACZ6H,UAAW,UAGboa,UAAW,CACT/kC,MAAO,GACPC,OAhGgB,GAiGhBue,OAAQ,OACRjf,QAAS,OACTuX,WAAY,SACZsL,eAAgB,UAGlBwoB,cAAe,CACbxqC,aAAc,CAAC,EAAG,QAASxD,EAAOM,cAGpCuoC,aAAc,CACZlmC,QAAS,OACTuX,WAAY,SACZ2H,UAAW,SACXvB,QAAS,GACTF,SAAU,MAID6tB,GAAwC,CACnD9R,WAAY,CACVvK,oBAAqB,CACnBxH,eAAgB,CACd,mBAAoB,OACpBvmB,gBAAiB,cACjBf,OAAQ,WAMH4nC,GAAoBE,gBAAgBD,IChF1C,SAASyG,IAAoBnpC,KAClCA,EAAAjD,YACAA,EAAAiO,MACAA,EAAAk7B,gBACAA,GAAkB,EAAAE,kBAClBA,GAAoB,EAAAvD,UACpBA,EACA77B,OAAAA,EAAAA,SACAwI,EAAAyI,QACAA,EAAA7K,QACAA,EAAA+4B,aACAA,EAAArX,OACAA,EAAAuX,aACAA,EAAezY,GAAAA,WACf0Y,EAAa1Y,GAAAA,eACb2Y,EAAiB3Y,GAAAA,eACjBtJ,GAAiB,EAAAlS,OACjBA,IAEA,MAAMC,EAAUnT,GAAU,CAAEnC,gBAEtB8yB,EAAyB1e,GAAe,CAC5CC,YAAa40B,GACbjpC,cACAmT,UAAW,mBACXmB,qBAAsB,iBAGlB0xB,EAAyB5xB,GAAe,CAC5CC,YAAaqxB,GACb1lC,cACAmT,UAAW,mBACXmB,qBAAsB,iBAGlBzB,EAAYD,KAEZyzB,EAAa/lC,UAAQ,Id1EE,EAC7BM,EDsFqD,KCrFrDmgB,EACAokB,IACkBC,EAAAA,MAAM3B,GAAc7iC,GAAMmgB,EAAQokB,GcsEnBkH,CAAgBvG,EAAW77B,GAAS,CAAC67B,EAAW77B,IAE3E6H,EAAWvO,EAAAA,UAEVgwB,EAAaC,GAAkBrb,EAAAA,SAAS,KACxC4xB,EAAYC,GAAiB7xB,EAAAA,SAAkB,KAE/CiyB,EAAYC,GAAiBlyB,EAAAA,SAAS,IACtCmyB,EAAWC,GAAgBpyB,EAAAA,UAAS,IACpCoK,EAAW0nB,GAAgB9xB,EAAAA,UAAS,IACpC+xB,EAA0BC,GAA6BhyB,EAAAA,UAAS,GAEjEyzB,EAAsBrpB,GAAa2nB,EACnCoC,EAAY5vB,EAAAA,oBAAoBqV,GAEhC6Y,EAA0B93B,EAAAA,YAC9BqY,MAAOsN,IACL,QAAqB,IAAjB2Q,EAAJ,CAGAa,GAAa,GAEb,IACE,MAAMY,QAAiBzB,EAAa3Q,GAAY9tB,QAAU,IACtDkI,UAA4B,IAAbg4B,IACjBb,EAAca,GACdR,EAAc,GACdE,GAAa,GAEjB,CAAA,QACM13B,KACFo3B,GAAa,EAEjB,CAdA,GAgBF,CAACb,IAGG0B,EAAoBxqC,EAAAA,QACxB,IAAMg1B,EAAAA,SAASsV,GACf,CAACA,IAiBG9V,EAAgBvmB,IACpBkE,EAASlE,GACT2M,OAWIgwB,EAA0Bp4B,EAAAA,YAC9BqY,MAAOsN,EAAqB0S,KAC1B,QAAqB,IAAjB/B,EAAJ,CAIAe,GAA0B,GAE1B,IACE,MAAMU,QAAiBzB,EAAa3Q,GAAY9tB,QAAU,GAAIwgC,GAAQ,GAElEt4B,MACEg4B,EAASn/B,OAAS,EACpBs+B,EAAeoB,GAAc,IAAIA,KAAcP,IAE/CN,GAAa,GAGnB,CAAA,QACM13B,KACFs3B,GAA0B,EAE9B,CAlBA,GAoBF,CAACf,IAGGiC,EAA2Bv4B,EAAAA,YAC9BV,IACK83B,GAA4BI,IAI5Bx4B,EAASpO,SACXoO,EAASpO,QAAQmO,aAGnBC,EAASpO,QAAU,IAAIqO,qBAAqBoZ,MAAOmgB,IAC7CA,EAAQ,GAAGt5B,uBACPk5B,EAAwB3X,EAAa6W,EAAa,GACpDv3B,KACFw3B,EAAee,GAAcA,EAAY,MAK3Ch5B,GACFN,EAASpO,QAAQ2O,QAAQD,KAG7B,CAACg4B,EAAYc,EAAyBhB,EAA0BI,EAAW/W,IAwB7E,OArBA/vB,EAAAA,UAAU,KACR,QAAqB,IAAjB4lC,EAEF,YADAY,EAAc35B,GAAW,IAIJ8a,WACrB8e,GAAa,GAEb,IACE,MAAMY,QAAiBzB,EAAa,SACnB,IAAbyB,GAA0Bh4B,KAC5Bm3B,EAAca,EAElB,CAAA,QACEZ,GAAa,EACf,GAEFsB,IACC,IAGD5wB,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACvD4B,SAAA,CAAAkyB,KACC1zB,IAAC,MAAA,CAAItC,UAAWmC,EAAQ0zB,cACtB/xB,SAAAxB,EAAAA,IAACqX,GAAA,CACC7e,MAAOslB,EACPnK,YAAaid,EAAWvC,kBACxBrxB,SA5GcgmB,IAEtB,GADAjF,EAAeiF,QACM,IAAjB2Q,GACF,QAAgB,IAAZ/4B,EAAuB,CACzB,MAAMy7B,EAAmBrT,EAAWvuB,cACpC8/B,EACE35B,EAAQnQ,OAAQi1B,GAAMqU,EAAerU,GAAGjrB,cAAcwgB,SAASohB,IAEnE,OAEAhB,EAAkBrS,IAmGZz4B,YAAa8yB,EACbzd,OAAQgI,EAAAA,UAAUhI,EAAQ,UAC1BsU,oBAAkB,OAKtBpH,GACA5H,EAAAA,KAAAC,EAAAA,SAAA,CACG3D,SAAA,CAAAjV,EAAAA,gBAAgB+nC,IACfpvB,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQkZ,KAAM,CAAE,CAAClZ,EAAQ02B,iBAAkBzkB,OACvDxC,EAAAA,cAAc1P,EAAQ,QAEzB4B,SAAA,CAAAoyB,GAAqB3oC,EAAAA,WAAWuN,MAC/B0M,KAAAC,EAAAA,SAAA,CACE3D,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQiQ,MAAOjQ,EAAQszB,YAAa,CAClD,CAACtzB,EAAQuzB,gBAAiBM,IAG3BlyB,SAAAovB,EAAWzC,SAEdjpB,EAAAA,KAAC,OAAIxH,UAAWmC,EAAQ6G,KAAM9B,QAAS,IAAMya,OAAa,GACxD7d,SAAA,CAAAxB,MAAC,OAAItC,UAAWmC,EAAQib,OAAStZ,SAAAqyB,EAAar7B,OAC9CwH,IAAC,OAAItC,UAAWmC,EAAQC,KACtB0B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,qBAGd,MAAA,CAAIjC,UAAWmC,EAAQiQ,MAAQtO,WAAW0sB,SAG9CoG,EAAWj/B,IAAI,CAACqR,EAAM8L,KACrB,MAAM7P,EAAW1X,EAAAA,WAAWuN,IAAUs7B,EAAWt7B,KAAWs7B,EAAWptB,GACvE,GAAIktB,GAAqBjxB,EACvB,OAAO,KAET,MAAM2G,EAAKwqB,EAAWptB,GAChBK,EAAO8sB,EAAantB,GAEpBowB,EACJ5xB,EAAAA,KAAC,MAAA,CAECxH,UAAWmC,EAAQ6G,KACnB3K,IACEu4B,EAAWr+B,OAAS,IAAMuc,QAA0B,IAAjBmhB,EAC/BiC,OACA,EAENhxB,QAAS,IAAMya,EAAa3Y,GAE5BlF,SAAA,GAAAxB,IAAC,MAAA,CAAItC,UAAWmC,EAAQib,UAAY7a,EAAAA,kBAAkB,CAAEqJ,KAAIwR,OAAQxR,IACjE9H,SAAAuF,IAEFpE,GACC3C,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQC,KACtB0B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,cAdV2J,GAoBT,YAAgB,IAAZ1O,GAAyC,KAAhBkjB,EAEzB9d,EAAAA,IAAC0X,GAAA,CAAgC7W,OAAQ8B,EACtCnB,YAD0B8H,GAKxBwtB,OAOdX,GACCn2B,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ6tB,UACtBlsB,SAAAxB,EAAAA,IAAC2K,GAAA,CAAgBhL,KAAK,YAKxBpT,kBAAgB+nC,IAChBt0B,EAAAA,IAAC,OAAItC,UAAWmC,EAAQuuB,aAAe5sB,SAAAovB,EAAWxC,gBAIlDtc,GAAkB+kB,IAClB3xB,EAAAA,KAAC,MAAA,CAAIxH,UAAW0H,EAAKvF,EAAQwzB,MAAO,CAAE,CAACxzB,EAAQ22B,iBAAkBK,IAC9Dr1B,SAAA,CAAAq1B,GAAa72B,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQyc,OAAS9a,SAAA8a,IAE9CxK,KACC9R,IAAC,MAAA,CAAItC,UAAWmC,EAAQouB,MACtBzsB,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QAzLE,UACF,IAAZhK,GACF25B,EAAc35B,GAEhBykB,OAAa,GACbtB,EAAe,KAqLCzd,KAAK,IACLyG,KAAK,OACLnH,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BrV,YAAagmC,EAEZ/uB,SAAAovB,EAAW3C,gBASzBnhB,GACC9M,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ6tB,UACtBlsB,SAAAxB,EAAAA,IAAC2K,GAAA,CAAgBhL,KAAK,aAKhC,CClWO,MAAMjT,GAAYE,EAAmB,kBAAmB,CAC7D4S,KAAM,CACJ7W,MAAO,IACPiqB,WAAYrtB,EAAOY,cACnB6B,SAAU,WACVgZ,OAAQ,IAGVggB,UAAW,CACT94B,QAAS,OACTwd,IAAK,GACLG,QAAS,CAAC,EAAG,KAGfkxB,cAAe,CACbpuC,MAAO,MACPC,OAAQ,IAGVouC,OAAQ,CACN9uC,QAAS,OACTsjB,cAAe,cACfT,eAAgB,gBAChBlF,QAAS,KAIAoqB,GAAoBE,gBAAgBD,IAEpC+G,GAAmB/G,GCCnBgH,GAA6C,EACxD1+B,QACAwE,WACAqzB,YAAA77B,OACAA,EACA2iC,mBACA7G,iBACA9iC,OACAjD,cACAqV,SACAw3B,mBAAmBpI,GACnBqI,iBAAiBrI,GACjBjb,eAAc,MAEd,MAAMlU,EAAUnT,GAAU,CAAEnC,gBAEtBgmC,EAAyB5xB,GAAe,CAC5CC,YAAaqxB,GACb1lC,cACAmT,UAAW,mBACXmB,qBAAsB,oBAGlBy4B,EAAwB34B,GAAe,CAC3CC,YAAaq4B,GACb1sC,cACAmT,UAAW,kBACXmB,qBAAsB,oBAGlB04B,EAA6B54B,GAAe,CAChDpU,cACAmT,UAAW,uBACXmB,qBAAsB,oBAGlB24B,EAA2B74B,GAAe,CAC9CpU,cACAmT,UAAW,qBACXmB,qBAAsB,oBAGlB4xB,EAAkB3iC,EAAAA,OAAuB,MAEzC4iC,EAA2B,OAAdL,EAAqB7N,EAAAA,GAAKmO,EAAAA,KAEvCC,EAAa/lC,UAAQ,IAAM4kC,GAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,IAwB3E,OACE0Q,EAAAA,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KAAMzD,IAAK00B,KAAqBxwB,EAAAA,kBAAkBzS,EAAMoS,GAC9E4B,SAAA,GAAA0D,KAAC,MAAA,CAAIxH,UAAWmC,EAAQmhB,UACtBxf,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQk3B,cACtBv1B,SAAAxB,EAAAA,IAACyjB,GAAA,CACCC,aAAclrB,GAAOuR,KACrB6Z,QAASprB,GAAOwR,SAAM,EACtB8F,MAAO8gB,EAAW7mB,KAClB8Z,OAAQ+M,EAAW/M,OACnBrvB,OAAQk8B,EACRhL,aA5BgB5sB,IAEZ,OAARA,QAA0B,IAAVN,GAAoC,OAAbA,EAAMwR,IAAe4c,EAAAA,QAAQ9tB,EAAKN,EAAMwR,IACjFhN,EAAS,CAAE+M,KAAMvR,EAAMwR,GAAIA,GAAIlR,IAE/BkE,EAAS,CAAE+M,KAAMjR,EAAKkR,GAAIxR,GAAOwR,IAAM,QAwBjCzf,YAAagtC,EACb33B,OAAQgI,EAAAA,UAAUhI,EAAQ,QAC1BmU,cACA6Q,YAAa,CAAE/1B,SAAU,CAAED,UAAW6hC,GAAiBxiC,aACnDmpC,MAGRp3B,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQk3B,cACtBv1B,SAAAxB,EAAAA,IAACyjB,GAAA,CACCC,aAAclrB,GAAOwR,GACrB8F,MAAO8gB,EAAW5mB,GAClB6Z,OAAQ+M,EAAW/M,OACnBF,QAASnrB,GAAOuR,WAAQ,EACxBvV,OAAQk8B,EACRhL,aAlCc5sB,IAEV,OAARA,QAA0B,IAAVN,GAAsC,OAAfA,EAAMuR,MAAiB8c,EAAAA,SAAS/tB,EAAKN,EAAMuR,MACpF/M,EAAS,CAAE+M,KAAMjR,EAAKkR,GAAIxR,EAAMuR,OAEhC/M,EAAS,CAAE+M,KAAMvR,GAAOuR,MAAQ,KAAMC,GAAIlR,KA8BpCvO,YAAaitC,EACb53B,OAAQgI,EAAAA,UAAUhI,EAAQ,MAC1BmU,cACA6Q,YAAa,CAAE/1B,SAAU,CAAED,UAAW6hC,GAAiBxiC,aACnDopC,WAKVnyB,KAAC,MAAA,CAAIxH,UAAWmC,EAAQm3B,OACrBx1B,SAAA,CAAAuS,SACE,MAAA,CACCvS,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QA7DQ,KAClB0rB,KA6DUhwB,KAAK,IACLyG,KAAK,OACLnH,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BgN,aAAW,EACXriB,YAAagmC,EAEZ/uB,SAAAovB,EAAW3C,UAKjBkJ,SACE,MAAA,CACC31B,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QAASuyB,EACT72B,KAAK,IACLyG,KAAK,OACL6F,aAAW,EACXriB,YAAa+sC,EAEZ91B,SAAAovB,EAAWpC,gBClKb9hC,GAAYE,EAAmB,mBAAoB,CAC9D4S,KAAM,CAAA,EAENwrB,KAAM,CAAA,EAENyM,OAAQ,CAAA,IAGGC,GAA0C,CACrD3e,KAAM,CACJvK,UAAW,SCcFmpB,GAA+C,EAC1Dn/B,QACA63B,YACA77B,OAAAA,EACAwI,WACAyI,UACAipB,UACAnkC,cACAqV,aAEA,MAAMC,EAAUnT,GAAU,CAAEnC,gBAEtBqmC,EAAa/lC,UAAQ,IAAM4kC,GAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,KAEpEojC,EAAqBC,GAA0Bn1B,EAAAA,SAA+B,WAAtBlK,GAAOs/B,aAE/DC,EAAmBC,GAAwBt1B,EAAAA,SAA+B,WAAtBlK,GAAOs/B,aAE3DG,EAAQC,GAAax1B,EAAAA,SAASlK,GAE/B2/B,EAAgBttC,EAAAA,QAAQ,KAC5B,MAAMsM,EAAwC,IAAK83B,IAMnD,OALAP,GAASt3B,QAASghC,IACZC,MAAMC,QAAQF,KAChBjhC,EAAOihC,EAAE,IAAMA,EAAE,MAGdjhC,GACN,CAACu3B,IAEE6J,EAAc1tC,EAAAA,QAAQ,SACV,IAAZ6jC,EACK,IAAIX,IAENW,EAAQr5B,IAAK+iC,GAAOC,MAAMC,QAAQF,GAAKA,EAAE,GAAKA,GACpD,CAAC1J,IAEE8J,EAAqBn7B,EAAAA,YACxBvE,GAAgB83B,EAAWlC,QAAQ51B,IAAQA,EAC5C,CAAC83B,EAAWlC,UA4BR+J,EAAkB3qC,EAAAA,OAAuB,MACzC4qC,EAAgB5qC,EAAAA,OAAuB,MAwB7CsQ,GAAkBs6B,EAAe,KAC1BT,GAAQluB,MAASkuB,GAAQjuB,IAC5BkuB,OAAU,GAEZF,GAAqB,KAGvBjqC,EAAAA,UAAU,KACRmqC,EAAU1/B,IACT,CAACA,EAAOA,GAAOuR,KAAMvR,GAAOwR,GAAIxR,GAAOs/B,aAE1C,MAAM1V,EAAoBzjB,GAAe,CACvCC,YAAa84B,GACbntC,cACAmT,UAAW,oBACXmB,qBAAsB,qBAGxB,SACEqG,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KACrBgC,SAAA,CAAAo2B,SACE,MAAA,CAAIl6B,UAAWmC,EAAQmrB,KAAMjvB,IAAK08B,EACjCj3B,SAAAxB,EAAAA,IAAC22B,GAAA,CACC/7B,QAAS29B,EACT//B,MAAOy/B,GAAQH,WACf96B,SA/CclE,SACV,IAARA,EA7BqB,CAACg/B,IAC1B,IAAI/tB,EAAO,KACPC,EAAK,KAET,GAAI8tB,KAAcK,EAAe,CAC/B,MAAMQ,EAAYR,EAAcL,KAChC/tB,EAAO4uB,EAAU5uB,KACjBC,EAAK2uB,EAAU3uB,EACjB,CAEA,MAAMouB,EAAI,CAAEruB,OAAMC,KAAI8tB,cACtBI,EAAUE,GAES,WAAfN,EACFE,GAAqB,SAEL,IAAZvyB,GACFA,IAEFzI,EAASo7B,IAGXP,GAAuB,IAQrBe,CAAmB9/B,IAEnBkE,OAAS,QACO,IAAZyI,GACFA,MA0CI4qB,YACA77B,OAAQo8B,EACRrmC,YAAa63B,EACbyR,aAAc2E,EACd54B,OAAQgI,EAAAA,UAAUhI,EAAQ,cAI/Bm4B,GACC/3B,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ43B,OAAQ17B,IAAK28B,EACnCl3B,SAAAxB,EAAAA,IAACk3B,GAAA,CACCC,iBAAkB,KAChBa,GAAqB,GACrBH,GAAuB,IAEzBvH,eAAgB,KACdtzB,OAAS,GACTg7B,GAAqB,QACL,IAAZvyB,GACFA,KAGJjN,MAAOy/B,EACPj7B,SA5DsBlE,IAC1BA,EAAIiR,MAAQjR,EAAIkR,GAClBhN,EAAS,IACJlE,EACHg/B,WAAY,WAGd96B,OAAS,IAsDHqzB,YACA77B,OAAQo8B,EACRhxB,OAAQgI,EAAAA,UAAUhI,EAAQ,iBCxKzBi5B,GAAiBrgC,GAC5BkG,EAAAA,QAAQlG,IAAUA,aAAiB6oB,KAGxByX,GAAqBtgC,GAChCqgC,GAAcrgC,GAAOuR,OAAS8uB,GAAcrgC,GAAOwR,ICU9C,SAAS+uB,GACdvjB,GAEA,MAAQ/qB,OAAAA,EAAAA,MAAQ+N,EAAAwE,SAAOA,EAAAyI,QAAUA,YAAS4qB,EAAW77B,OAAAA,EAAAA,OAAQoL,GAAW4V,EAClEwjB,EAAsBvuC,EAAO4lC,WAAaA,EAC1CO,EAAa/lC,EAAAA,QACjB,IAAM4kC,GAAUuJ,EAAqBxkC,EAAQ/J,EAAO+J,QACpD,CAACwkC,EAAqBxkC,EAAQ/J,EAAO+J,SAGvC,GAAoB,WAAhB/J,EAAOkV,KACT,OACEK,EAAAA,IAAC22B,GAAA,CACCn+B,QACAwE,WACAyI,UACA4qB,UAAW2I,EACXxkC,OAAQo8B,EACRhxB,OAAQgI,EAAAA,UAAUhI,EAAQ,aACtBnV,IAKV,GAAoB,cAAhBA,EAAOkV,KAAsB,CAC/B,MAAMs5B,EDhCmB,CAACzgC,GAC5B1L,EAAAA,SAAS0L,GAAOs/B,aAAegB,GAAkBtgC,GC+BzB0gC,CAAc1gC,GAAS,IAAKA,QAAU,EAE5D,OACEwH,EAAAA,IAAC23B,GAAA,CACCn/B,MAAOygC,EACPj8B,WACAyI,UACA4qB,UAAW2I,EACXxkC,OAAQo8B,EACRhxB,OAAQgI,EAAAA,UAAUhI,EAAQ,aACtBnV,GAGV,CAEA,GAAoB,2BAAhBA,EAAOkV,KAAmC,CAC5C,MAAMs5B,EAAgBH,GAAkBtgC,GAASA,OAAQ,EAEzD,OACEwH,EAAAA,IAACk3B,GAAA,CACC1+B,MAAOygC,EACPj8B,SAAWxH,GAAMwH,EAAS,IAAKxH,EAAGsiC,WAAY,WAC9CxH,eAAgB,IAAMtzB,OAAS,GAC/BqzB,UAAW2I,EACXxkC,OAAQo8B,EACRhxB,OAAQgI,EAAAA,UAAUhI,EAAQ,YACtBnV,GAGV,CAEA,GAAoB,qBAAhBA,EAAOkV,KAA6B,CACtC,MAAMs5B,EAAgBJ,GAAcrgC,GAASA,OAAQ,EAErD,OACEwH,EAAAA,IAACowB,GAAA,CACC53B,MAAOygC,EACPj8B,WACAyI,UACA6qB,eAAgB,IAAMtzB,OAAS,GAC/BqzB,UAAW2I,EACXxkC,OAAQo8B,EACRhxB,OAAQgI,EAAAA,UAAUhI,EAAQ,iBACtBnV,GAGV,CAEA,GAAoB,gBAAhBA,EAAOkV,KAAwB,CACjC,MAAMs5B,ED9EwB,CAEhCzgC,GACyC6/B,MAAMC,QAAQ9/B,GAAOw8B,SC2EtCmE,CAAwB3gC,GAASA,OAAQ,EAE/D,OACEwH,EAAAA,IAACs2B,GAAA,CACC99B,MAAOygC,EACPj8B,WACAyI,UACA4qB,UAAW2I,EACXxkC,OAAQo8B,EACRhxB,OAAQgI,EAAAA,UAAUhI,EAAQ,kBACtBnV,GAGV,CAEA,GAAoB,aAAhBA,EAAOkV,KAAqB,CAC9B,MAAMs5B,EAAgBZ,MAAMC,QAAQ9/B,GAAUA,OAAqB,EAEnE,OACEwH,EAAAA,IAAC0yB,GAAA,CACCl6B,MAAOygC,EACPj8B,WACAqzB,UAAW2I,EACXxkC,OAAQo8B,EACR+B,UAAWloC,EAAO0D,KAClByR,OAAQgI,EAAAA,UAAUhI,EAAQ,eACtBnV,GAGV,CAEA,GAAoB,WAAhBA,EAAOkV,MAAqBlV,EAAO2uC,UAAW,CAChD,MAAMC,EAAY5uC,EAAO2uC,UAEzB,OAAOp5B,MAACq5B,MAAc7jB,EAAO/qB,OAAAA,EAAgBmV,OAAQgI,YAAUhI,EAAQ,aACzE,CASA,MAPoB,YAAhBnV,EAAOkV,MACTxS,QAAQmsC,KACN,iBAAiB7uC,EAAO0D,kCACxB,iCAIG,IACT,CC7HO,MAAMzB,GAAYE,EAAmB,oBAAqB,CAC/D4S,KAAM,CACJtX,QAAS,OACTF,SAAU,WACVoB,gBAAiBslB,EAAKnpB,EAAOM,YAAa,IAC1CwC,OAAQ,CAAC,EAAG,cAAe,SAC3BC,aAAc,GACdgoB,aAAc,EACdzmB,WAAYL,EAAWC,kBACvBK,mBAAoB,kCAGtBkc,QAAS,CACP5c,gBAAiB7D,EAAOY,cACxBixB,YAAa7xB,EAAOM,aAGtBib,SAAU,CACR,iBAAkB,CAChBF,OAAQ,YAIZuQ,SAAU,CACR/nB,gBAAiB7D,EAAOY,cACxBixB,YAAa7xB,EAAOM,aAGtB0zC,cAAe,CACbvxC,SAAU,WACVE,QAAS,OACToe,WAAY,GAGdkzB,YAAa,CACXtxC,QAAS,OACTuX,WAAY,SACZiG,IAAK,EACL9E,OAAQ,UACRhY,OAAQ,QAGV6wC,YAAa,CACXnzB,WAAY,EACZX,SAAU,GACV8sB,WAAY,QAGdiH,YAAa,CACXpzB,WAAY,EACZ3d,MAAO,GACPC,OAAQ,GACR0f,YAAa,EACbze,WAAY,qBACZF,QAAS,IAGXuZ,KAAM,CACJtZ,UAAW,kBAGb+vC,SAAU,CACR3xC,SAAU,WACVQ,IAAKoxC,GACLlxC,MAAO,EACPsY,OAAQ,GACRtS,SAAU,IACVvG,UAAW,EACXG,aAAcxB,EAAWI,oBACzBkC,gBAAiB7D,EAAOY,cACxB+C,SAAU,UAGZqqC,cAAe,CACbxqC,aAAc,CAAC,EAAG,QAASxD,EAAOM,cAGpCgb,OAAQ,CACN8gB,WAAY,UAIH6R,GAAwC,CACnD9R,WAAY,CACVvK,oBAAqB,CACnBxH,eAAgB,CACd,mBAAoB,OACpBvmB,gBAAiB,cACjBf,OAAQ,OACRqG,SAAU,KAGZsX,QAAS,CACP5c,gBAAiB,cACjBf,OAAQ,WAMHm5B,GAA8B,CACzChiB,KAAM,CACJlX,aAAc,EACd8jB,uBAAwB,EACxB0E,wBAAyB,EACzB1oB,UAAW,OACXO,MAAO,SC7EJ,SAASkxC,IAAyBrhC,MACvCA,EAAAshC,OACAA,EAAS,GAAAC,MACTA,EAAA/8B,SACAA,EAAAqzB,UACAA,EACA77B,OAAAA,EAAAA,WACAs/B,EAAAD,aACAA,EAAAE,eACAA,EAAAiG,qBACAA,EAAAx9B,WACAA,GAAa,EAAAy9B,sBACbA,GAAwB,EAAAjmB,YACxBA,GAAc,EAAAC,UACdA,EAAAzmB,KACAA,EAAAjD,YACAA,EAAAqV,OACAA,IAEA,MAAMC,EAAUnT,GAAU,CAAEnC,gBAEtB8yB,EAAyB1e,GAAe,CAC5CC,YAAa40B,GACbjpC,cACAmT,UAAW,mBACXmB,qBAAsB,sBAGlBujB,EAAoBzjB,GAAe,CACvCC,YAAa4iB,GACbj3B,cACAmT,UAAW,cACXmB,qBAAsB,uBAGjBq7B,EAAgBC,GAAqBz3B,EAAAA,UAAS,IAC9ClI,EAAQiI,GAAaC,EAAAA,UAAS,GAE/B03B,EAAUtsC,EAAAA,OAA8B,MAExC8iC,EAAa/lC,UAAQ,IAAM4kC,GAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,IAE3E4J,GAAkBg8B,EAAS,IAAM33B,GAAU,IAiB3C,OACEyC,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQL,KAAM,CAC5B,CAACK,EAAQmG,SAAUk0B,EACnB,CAACr6B,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQsR,UAAWgE,EAAAA,oBAAoB3c,KAE1CuD,IAAKq+B,KACDn6B,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAAxB,EAAAA,IAACqX,GAAA,CACC7e,QACAwE,SA3BsBxH,IAC1BwH,EAAS,CACPxE,MAAOhD,EACPukC,WAyBEpmB,YAAaid,EAAWvC,kBACxB9jC,YAAa8yB,EACbhJ,QAAS,IAAM8lB,GAAkB,GACjC7lB,OAAQ,IAAM6lB,GAAkB,GAChCv6B,OAAQgI,EAAAA,UAAUhI,EAAQ,SAC1BqU,YACAzX,aACAwX,kBAGF9O,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ05B,cAErB/3B,SAAA,CAAAjV,EAAAA,gBAAgButC,IACf50B,EAAAA,KAAC,MAAA,CACCxH,UAAWmC,EAAQ25B,YACnB50B,QAAUpI,OAAwC,EAA3B,IAAMiG,GAAWjI,MACpC8U,EAAAA,cAAc1P,EAAQ,UAE1B4B,SAAA,CAAAxB,MAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQ45B,YAAa,CAAE,CAAC55B,EAAQgB,QAAS5V,EAAAA,WAAW8uC,KACtEv4B,SAAAvW,EAAAA,WAAW8uC,GAASlG,IAAekG,GAASnJ,EAAWnC,kBAE1DzuB,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQ65B,YAAal/B,GAAUqF,EAAQqD,MAC1D1B,eAAC9B,GAAA,CAAKC,KAAK,sBAKhBnF,KACCwF,IAAC,MAAA,CAAItC,UAAWmC,EAAQ85B,SACtBn4B,SAAAxB,EAAAA,IAAC22B,GAAA,CACCpsC,YAAa63B,EACb5pB,MAAOuhC,EACPn/B,QAASk/B,EACTjG,eACAC,aACAC,iBACA1D,YACA77B,OAAQo8B,EACR5zB,SA3DgBxH,IAC1BwH,EAAS,CACPxE,QACAuhC,MAAOvkC,IAETiN,GAAU,IAuDAixB,gBAAiBuG,EACjBnoB,eAAgBkoB,EAChBp6B,OAAQgI,EAAAA,UAAUhI,EAAQ,qBAOxC,CC/JO,MAAMlT,GAAYE,EAAmB,kBAAmB,CAC7Dye,KAAM,CACJniB,SAAU,SACVskC,aAAc,WACd5nB,WAAY,UAGdy0B,MAAO,CACLz0B,WAAY,SCWT,SAAS00B,IAAkF9hC,MAChGA,EACA/N,OAAAA,EACA+J,OAAAA,EAAAA,UACA67B,EAAA9lC,YACAA,IAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtByuC,EAAsBvuC,EAAO4lC,WAAaA,EAC1CO,EAAa/lC,EAAAA,QACjB,IAAM4kC,GAAUuJ,EAAqBxkC,EAAQ/J,EAAO+J,QACpD,CAACwkC,EAAqBxkC,EAAQ/J,EAAO+J,SAGvC,GAAIvJ,EAAAA,WAAWR,EAAO8vC,sBACpB,OAAOv6B,MAAC,QAAKtC,UAAWmC,EAAQwL,KAAO7J,SAAA/W,EAAO8vC,qBAAqB/hC,KAGrE,MAAMgiC,EAAgBhlC,IACpB,IAAKvK,EAAAA,WAAWuK,GACd,MAAO,GAGT,GAAIA,aAAa6rB,KAAM,CACrB,MAAMwB,WAAEA,EAAakB,IAAwBt5B,EAC7C,OAAOq4B,EAAAA,OAAOttB,EAAGqtB,EACnB,CAEA,OAAKn4B,EAAAA,SAAS8K,GAIV,UAAWA,GAAKvK,EAAAA,WAAWuK,EAAEgD,OACxBY,OAAO5D,EAAEgD,QAGlBrL,QAAQmsC,KACN,kCAAkC7uC,EAAO0D,0GACzC,oCAGK,IAZEiL,OAAO5D,IAelB,GAAoB,WAAhB/K,EAAOkV,KAAmB,CAC5B,MAAM86B,EAAUhwC,EAAOopC,cAAgB2G,EACvC,aAAQ,OAAA,CAAK98B,UAAWmC,EAAQwL,KAAO7J,SAAAi5B,EAAQjiC,IACjD,CAGA,MAAMkiC,EAAe,CAACC,EAAiBF,EAAiCD,KACtE,IAAKnC,MAAMC,QAAQqC,KAAYpuC,EAAAA,gBAAgBouC,GAC7C,OAAO,KAGT,MAAOtuC,KAAUC,GAAQquC,EACzB,OACEz1B,EAAAA,KAAAC,WAAA,CACE3D,SAAA,CAAAxB,MAAC,QAAKtC,UAAWmC,EAAQwL,KAAO7J,SAAAi5B,EAAQpuC,KACvCE,kBAAgBD,WAAU,OAAA,CAAKoR,UAAWmC,EAAQw6B,MAAO74B,SAAA,CAAA,MAAIlV,EAAK2J,OAAO,WAKhF,GAAoB,gBAAhBxL,EAAOkV,KAAwB,CACjC,MAAMq1B,QAAEA,GAAYx8B,EACpB,OAAOkiC,EAAa1F,EAASvqC,EAAOopC,aACtC,CAGA,GADmC,WAAhBppC,EAAOkV,MAA8C,aAAzBlV,EAAOmwC,cAEpD,OAAOF,EAAaliC,EAAO/N,EAAOowC,kBAIpC,GADoC,cAAhBpwC,EAAOkV,MAAwC,2BAAhBlV,EAAOkV,KACzC,CACf,MAAMoK,KAAEA,EAAAC,GAAMA,EAAA8tB,WAAIA,EAAa,UAAat/B,EAE5C,GAAmB,WAAfs/B,EACF,OAAO93B,MAAC,QAAKtC,UAAWmC,EAAQwL,KAAO7J,SAAAovB,EAAWlC,QAAQoJ,IAAeA,IAG3E,MAAMgD,EAAU7vC,EAAAA,WAAW8e,GACrBgxB,EAAQ9vC,EAAAA,WAAW+e,GACnBgxB,EAAkB,GACxB,GAAIF,GAAWC,EACbC,EAAMvc,KAAK+b,EAAazwB,GAAO,IAAKywB,EAAaxwB,YACxC8wB,EACTE,EAAMvc,KAAKmS,EAAW7mB,KAAKtV,cAAe+lC,EAAazwB,aAC9CgxB,EAGT,OAAO,KAFPC,EAAMvc,KAAKmS,EAAW5mB,GAAGvV,cAAe+lC,EAAaxwB,GAGvD,CAEA,OAAOhK,MAAC,QAAKtC,UAAWmC,EAAQwL,KAAO7J,SAAAw5B,EAAM/hC,KAAK,MACpD,CAGA,GADgC,WAAhBxO,EAAOkV,MAA8C,UAAzBlV,EAAOmwC,eACpB,aAAhBnwC,EAAOkV,KAAqB,CACzC,IAAK04B,MAAMC,QAAQ9/B,GACjB,OAAO,KAGT,MAAOyiC,EAAWC,GAAW1iC,EACvBwiC,EAAkB,GAQxB,OAPI/vC,EAAAA,WAAWgwC,IACbD,EAAMvc,KAAKmS,EAAW7mB,KAAKtV,cAAe+lC,EAAaS,IAErDhwC,EAAAA,WAAWiwC,IACbF,EAAMvc,KAAKmS,EAAW5mB,GAAGvV,cAAe+lC,EAAaU,IAGhDl7B,MAAC,QAAKtC,UAAWmC,EAAQwL,KAAO7J,SAAAw5B,EAAM/hC,KAAK,MACpD,CAEA,aAAQ,OAAA,CAAKyE,UAAWmC,EAAQwL,KAAO7J,SAAAg5B,EAAahiC,IACtD,CCzIO,MAAM2iC,GAAwB3iC,GAC/B6/B,MAAMC,QAAQ9/B,GACTA,EAAMjD,KAAK4lC,IAEhBzwC,EAAAA,SAAS8N,GACJlN,OAAOqvC,OAAOniC,GAAOjD,KAAK4lC,IAEd,kBAAV3iC,EACFA,EAEFvN,EAAAA,WAAWuN,GCPP9L,GAAYE,EAAmB,gBAAiB,CAC3D4S,KAAM,CACJxX,SAAU,WACV6B,WAAYL,EAAWC,kBACvBK,mBAAoB,iCACpBzB,OAAQ,CAAC,EAAG,QAAS9C,EAAOM,aAC5ByC,aAAc,GACdW,UAAW,aACXL,OzBTyB,GyBUzB8F,SAAU,GAGZgY,KAAM,CACJxe,QAAS,OACT2d,QAAS,CAAC,EAAG,EAAG,EAAG,IACnBjF,OAAQ,WAGVw6B,YAAa,CACXv1B,QAAS,GAGX1X,KAAM,CACJwX,SAAU,GACVylB,WAAY,OACZxlB,WAAY,UAGdy1B,QAAS,CACPx1B,QAAS,CAAC,EAAG,KAGfy1B,QAAS,CAAA,EAETC,YAAa,CAAA,EAEbC,cAAe,CAAA,EAEf16B,SAAU,CACR,YAAa,CACXF,OAAQ,YAIZgP,UAAW,CAAA,EAEX6rB,cAAe,CACb9yC,MAAO,GACPC,OAAQ,GACRiB,WAAY,4BACZypB,UAAW,SACX7H,WAAY,EACZnD,YAAa,EACbhC,WAAY,GAGdozB,YAAa,CAAA,EAEb9oB,UAAW,CAAA,EAEX1N,KAAM,CACJtZ,UAAW,kBAGb+vC,SAAU,CACR3xC,SAAU,WACVgZ,OAAQ,GACR7Y,UAAW,EACXE,OAAQ,CAAC,EAAG9C,EAAOM,YAAa,UAGlC4C,KAAM,CACJA,KAAM,GAGRC,MAAO,CACLA,MAAO,GAGT8P,MAAO,CACL8a,UAAW,SACX3N,SAAU,GACVylB,WAAY,OACZjkB,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBwa,WAAY,OACZz5B,QAAS,OACTwG,SAAU,KClEP,SAASgtC,IACdjxC,OAAAA,EAAAA,MACA+N,EAAAgE,WACAA,EACAhI,OAAAA,EAAAA,UACA67B,EAAA7iC,KACAA,EAAAoS,OACAA,EACArV,YAAaoxC,EAAA3+B,SACbA,IAEA,MAAMzS,EAAcI,EAAegxC,EAAiBlxC,EAAOmxC,oBACrD/7B,EAAUnT,GAAU,CAAEnC,gBAEtBsxC,EAAuBl9B,GAAe,CAC1CpU,cACAmT,UAAW,iBACXmB,qBAAsB,kBAGlBi9B,EAA6Bn9B,GAAe,CAChDpU,cACAmT,UAAW,iBACXmB,qBAAsB,kBAGxB,GAAIpU,EAAOoiB,SACT,OACE7M,EAAAA,IAAC+4B,GAAA,CACCvgC,QACA/N,OAAAA,EACA4lC,YACA77B,OAAAA,EACAwI,WACA4C,WAKN,MAAMm8B,EAA4B,YAAhBtxC,EAAOkV,KAEnBq8B,EAAmB,KACnBD,GACF/+B,GAAUxE,IAGRyjC,EAA2D19B,IAC/DA,EAAMuE,kBACN9F,OAAS,IAGLmU,EAAWgqB,GAAkB3iC,GAC7B0jC,GAAgBzxC,EAAOspB,cAAe,IAAU5C,EAEtD,OACEnR,EAAAA,IAACuB,GAAA,CACCnG,UAAU,eACVF,cAAY,EACZsB,WAAYu/B,GAAav/B,EACzBjS,YAAasxC,EACbn7B,QAAS,EAAGuE,cAAgBtC,YAAY+B,oBACtC1E,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQL,KAAM,CAC5B,CAACK,EAAQy7B,UAAWnqB,EACpB,CAACtR,EAAQ07B,aAAc54B,IAAawO,EACpC,CAACtR,EAAQ+P,YAAajN,GAAYwO,EAClC,CAACtR,EAAQ27B,eAAgB74B,GAAYwO,EACrC,CAACtR,EAAQw7B,SAAUU,EACnB,CAACl8B,EAAQiB,UAAWtE,OAElByD,EAAAA,kBAAkBzS,EAAMoS,MACxB8E,EAEJlD,SAAA0D,EAAAA,KAAC,MAAA,CACCN,QAASo3B,EACTt+B,UAAW0H,EAAKvF,EAAQ6G,KAAM,CAAE,CAAC7G,EAAQu7B,aAAcW,IAEvDv6B,SAAA,CAAAxB,MAAC,MAAA,CAAItC,UAAWmC,EAAQ1R,KAAOqT,WAAOrT,QACpC4tC,GAAa5qB,SACZ,MAAA,CAAIzT,UAAWmC,EAAQrH,MACtBgJ,SAAAxB,EAAAA,IAACs6B,GAAA,CACC9hC,QACA/N,OAAAA,EACA+J,OAAAA,EACA67B,YACA9lC,YAAauxC,OAIjBC,IAAcG,GACdl8B,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQ47B,cAAe57B,EAAQ65B,YAAa,CAC1D,CAAC75B,EAAQqD,MAAOP,IAGlBnB,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,mBAGdu8B,GACCl8B,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQ47B,cAAe57B,EAAQ+Q,WAC/ChM,QAASq3B,EAETz6B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,uBAOpB6B,SAAA,EAAGiE,aACFzF,EAAAA,IAAC+4B,GAAA,CACCvgC,QACA/N,OAAAA,EACA+J,OAAAA,EACA67B,YACA5qB,UACAzI,WACA4C,YAKV,CCpJA,MCGau8B,GAAc,CAIzBC,GDPa,ysBCWbC,GCXa,mMCEF3vC,GAAYE,EAAmB,OAAQ,CAClD4S,KAAM,CACJtX,QAAS,OACTS,MAAO,OACPC,OAAQ,OACRK,UAAW,aAGXZ,OAAQ,CAAC,EAAG,QAAS9C,EAAOM,aAC5ByC,aAAc,GAGhBg0C,OAAQ,CACN3zC,MAAO,GACP+hB,MAAOnlB,EAAOE,eCHL82C,GAAuB,EAAGptC,cAAc,GAAI5E,kBACvD,MAAMsV,EAAUnT,GAAU,CAAEnC,gBACtBiyC,EAAiBrtC,EAAYw4B,cAInC,GAFyB8U,EAAAA,QAAQD,GAEX,CACpB,MAAME,EAAgBC,EAAMH,GAC5B,aACG,MAAA,CAAI9+B,UAAWmC,EAAQL,KACtBgC,SAAAxB,EAAAA,IAAC08B,OAGP,CAEA,MAAME,EAAaT,GAAYK,GAE/B,YAAmB,IAAfI,EACK58B,MAAC,OAAItC,UAAWmC,EAAQL,KAAMU,wBAAyB,CAAEC,OAAQy8B,OAIxE58B,IAAC,OAAItC,UAAWmC,EAAQy8B,OACtB96B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,aChCJk9B,GAAe,CAC1BC,MAAO,CAAEC,KAAM,QAASC,KAAM,QAASC,KAAM,QAASC,IAAK,KAAMC,OAAQ,KAAMC,KAAM,MACrFC,KAAM,CAAEN,KAAM,MAAOC,KAAM,MAAOC,KAAM,MAAOC,IAAK,MAAOC,OAAQ,MAAOC,KAAM,QCHrE1wC,GAAYE,EAAmB,WAAY,CACtD4S,KAAM,CACJtX,QAAS,OACTS,MAAO,OACPC,OAAQ,OACRQ,gBAAiBslB,EAAKnpB,EAAOU,cAAe,IAC5C+B,SAAU,WACVM,aAAc,EACdY,SAAU,SACV,qBAAsB,wCAEtB,WAAY,CACVX,QAAS,KACT+0C,UAAW,sCACX1qB,WAAY,uCAAuClE,EACjDnpB,EAAOW,gBACP,qBAEF8B,SAAU,WACV4B,UAAW,oBACX2zC,OAAQ,EACR90C,KAAM,EACNC,MAAO,EACPF,IAAK,IAIT,sBAAuB,CACrB,KAAM,CACJoB,UAAW,qBAGb,MAAO,CACLA,UAAW,oBAGb,OAAQ,CACNA,UAAW,uBChCJ4zC,GAA+B,EAAG50C,SAAQ2B,kBACrD,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAC5B,OAAOyV,EAAAA,IAAC,OAAItC,UAAWmC,EAAQL,KAAM1Q,MAAO,CAAElG,aCLnC60C,GAA0BC,GACrCzyC,aAAWyyC,IAAOA,EAAGC,cAAgBD,EAAGzrB,YAE7B2rB,GAAoB,CAI/BplC,EACAqlC,IAEArlC,aAAiB6oB,KAAOyB,EAAAA,OAAOtqB,EAAOqlC,GAAQhb,YHbb,cGakDzpB,OAAOZ,GCT/E9L,GAAYE,EAAmB,gBAAiB,CAC3DkxC,qBAAsB,CAAA,EAEtBt+B,KAAM,CACJ7W,MAAO,OACPX,SAAU,WACV+1C,eAAgB,WAChBC,cAAe,GAGjBC,OAAQ,IACHp2C,EAAQmB,cAMXwlB,UAAW,QAGb0vB,KAAM,CAAA,EAENhmC,KAAM,CAAA,EAENimC,UAAW,CAAA,EAEXC,WAAY,CAAA,EAEZ/xB,OAAQ,CACNrkB,SAAU,SACVS,KAAM,EACNuiB,SAAU,QACVpiB,OAAQ,GACRV,QAAS,OACT6iB,eAAgB,SAChBtL,WAAY,UAGd4+B,UAAW,CACTr2C,SAAU,WACVs2C,cAAe,UAGjBjiB,OAAQ,CACNr0B,SAAU,SACViB,UAAW,cACXT,IAAK,EACLwY,OAAQ,GACR2E,SAAU,GACVgc,WAAY,SACZ9b,QAAS,CAAC,EAAG,EAAG,GAAI,IAGtB04B,aAAc,CACZv9B,OAAQ,GACRvY,KAAM,EACN2d,YAAa,GACbkK,aAAc,GAEd,YAAa,CACX/nB,QAAS,KACTL,QAAS,QACTS,MAAO,OACPC,OAAQ,OACRZ,SAAU,WACVS,KAAM,EACND,IAAK,EACLoqB,WAAY,cACZ3H,cAAe,OACfjK,OAAQ,EACRnX,WAAYL,EAAWC,kBACvBK,mBAAoB,aAEpB,oBAAqB,CACnB1B,UAAW,kCAIf,WAAY,CACVG,QAAS,KACTL,QAAS,QACTS,MAnF+B,GAoF/BC,OAAQ,OACRZ,SAAU,WACVS,KAAM,OACND,IAAK,EACLoqB,WAAY,0BAA0BrtB,EAAOY,kBAAkBuoB,EAC7DnpB,EAAOY,cACP,MAEF6a,OAAQ,IAKZw9B,aAAc,CACZp4B,YAlGiC,IAqGnCq4B,gBAAiB,CAAA,EAEjBrQ,aAAc,CAAA,ICvGH1hC,GAAYE,EAAmB,oBAAqB,CAC/D4S,KAAM,CACJxX,SAAU,WACViB,UAAW,cACX4c,QAAS,CAAC,GAAI,GACdF,SAAU,GACVylB,WAAY,KACZpqB,OAAQ,EACRs9B,cAAe,OAGjBI,OAAQ,CACN19B,OAAQ,GACRoF,YAAa,GACbkK,aAAc,GACd7nB,KAAM,KACHk2C,EAAAA,cAAc,CAAC,eAElB,oBAAqB,CACnBv2C,UAAW,kCAKfyE,OAAQ,CACNuZ,YDzBiC,IC4BnCkG,QAAS,CAAA,EAETsyB,SAAU,CACRh2C,OAAQ,IAGV+X,UAAW,CACTC,OAAQ,aCDL,SAASi+B,IAGdC,IACAA,EAAAC,WACAA,EAAAlB,OACAA,EAAAmB,WACAA,EAAAC,SACAA,EACAC,SAAUC,EAAAryB,UACVA,EAAAsyB,sBACAA,EAAA70C,YACAA,KACG80C,IAEH,MAAMx/B,EAAUnT,GAAU,CAAEnC,gBAEtBiO,EAAQsmC,EAAIC,IAEZ3F,UACJA,EAAYwE,GAAkBplC,EAAOqlC,EAAOkB,IAAWp2C,MACvDA,EAAAqiB,SACAA,EAAAtc,SACAA,EAAAjG,KACAA,EAAAC,MACAA,EAAAV,SACAA,EAAAs3C,UACAA,EAAAC,kBACAA,EAAAC,mBACAA,EAAAC,sBACAA,EAAwBx0C,EAAAA,WAAAA,YACxBy0C,GACE7B,EAAOkB,IAAe,CAAA,EAEpBG,EAAWC,GAA4B,WAAbn3C,EAC1B23C,GAAe7yB,GAAa7hB,EAAAA,WAAWy0C,GAEvCE,EAAgE,IACjEP,EACHQ,qBAAsBxiC,EAAAA,YACnBV,GAASyiC,EAAsBziC,EAAMoiC,GACtC,CAACA,EAAYK,IAEf5mC,QACAsmC,OAGIgB,EAAQjD,GAAamC,GAE3B,OACEh/B,EAAAA,IAAC8/B,EAAM1C,KAAN,CACC1/B,UAAW0H,EAAKvF,EAAQL,KAAM,CAC5B,CAACK,EAAQ6+B,QAASQ,EAClB,CAACr/B,EAAQhT,QAASoyC,EAClB,CAACp/B,EAAQyM,SAAUQ,EACnB,CAACjN,EAAQc,WAAYg/B,IAEvB7wC,MAAO,CACLsY,UAAWk4B,EACXt3C,SAAUk3C,EAAW,SAAWl3C,EAChCW,QACAqiB,WACAtc,WACAhG,QACAD,OACA61C,cAAeiB,GAEjB36B,QAAS+6B,EAAephC,GAAUmhC,IAAcnhC,EAAOqhC,QAAsB,KACzE3/B,EAAAA,kBAAkB,CAAEqJ,GAAIk2B,EAAqBT,OAAa,IAE7Dv9B,WACCxB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ++B,SACtBp9B,eAACg8B,GAAA,CAAA,KAGHx4B,EAAAA,YAAYy6B,EAAuBjnC,EAAOsmC,EAAKC,IAC/C/5B,cAAYo0B,EAAWwG,IAI/B,CCnHO,MAAMlzC,GAAYE,EAAmB,mBAAoB,CAC9D4S,KAAM,CACJxX,SAAU,YAGZ6Y,OAAQ,CAAA,EAERk/B,SAAU,CACRn/B,OAAQ,WAGVD,UAAW,CACTC,OAAQ,WAGVo/B,gBAAiB,CAAA,ICgCNC,GAAmB5lC,GAAY,UAI1CqM,KACAA,EAAAm3B,OACAA,EAAAqC,QACAA,EAAAC,YACAA,EAAAnB,WACAA,EAAAr8B,SACAA,GAAW,EAAAy9B,YACXA,GAAc,EAAAC,oBACdA,GAAsB,EAAAvzB,UACtBA,GAAY,EAAAwzB,cACZA,EAAAC,sCACAA,GAAwC,EAAAC,OACxCA,EAAAj2C,YACAA,EAAAk2C,uBACAA,EAAAC,WACAA,EAAAC,WACAA,IAEA,MAAM9gC,EAAUnT,GAAU,CAAEnC,gBAEtBq2C,EAAuBjiC,GAAe,CAC1CpU,cACAmT,UAAW,iBACXmB,qBAAsB,sBAGjB+H,EAAWgO,GAAclS,EAAAA,UAAS,IAClCs9B,EAAiBa,GAAsBn+B,EAAAA,SAAsC,KAAA,CAClFlI,OAAQ+lC,KAGJO,GAAch0B,IAAc7hB,EAAAA,WAAW01C,IAAe11C,EAAAA,WAAWy1C,IACjEf,GAAe7yB,IAAc7hB,EAAAA,WAAW01C,IAAe11C,EAAAA,WAAWw1C,KAEhEjmC,OAAQumC,EAA2BC,QAASC,GAA2BjB,EAIzEkB,EAA2B51C,OAAO61C,YACtCb,GAAejrC,IAAK+rC,GAAc,CAACA,EAAW16B,EAAK06B,MAAgB,IAoB/DC,EAAuB,KAC3BR,EAAmB,CAAErmC,QAAQ,KAGzB4kC,EAAwB/hC,EAAAA,YAAY,CAAC+7B,EAAsB4H,KAC3DtiC,EAAAA,QAAQ06B,GACViI,IAEAR,EAAmB,CAAErmC,QAAQ,EAAM4+B,YAAW4H,aAE/C,IAiBGlB,EAAQjD,GAAamC,GAE3B,OACE95B,EAAAA,KAAAC,WAAA,CACE3D,SAAA,CAAAxB,EAAAA,IAAC8/B,EAAM5C,IAAN,CACCnhC,IAAKykC,EACL9iC,UAAW0H,EAAKvF,EAAQL,KAAM,CAC5B,CAACK,EAAQgB,QAAS8B,EAClB,CAAC9C,EAAQkgC,UAAWe,EACpB,CAACjhC,EAAQc,WAAYg/B,QAEjB7yB,GAAa,CACjBlI,QA3Be,KACjB3Z,EAAAA,WAAWk1C,IACbQ,IAAaj6B,EAAKy5B,IAEhBzhC,EAAAA,QAAQ+hC,KAIPM,EAEMriC,UAAQuiC,IACjBI,IAFAR,EAAmB,CAAErmC,QAAQ,MAmBzBgyB,aAzDkBjuB,IACpBtT,EAAAA,WAAWk1C,IAAgBl1C,EAAAA,WAAWy1C,KACxCniC,EAAMuE,kBACN49B,EAAWh6B,EAAKy5B,KAEdC,GACFxrB,GAAW,IAoDP+X,aAhDiB,KACvB+T,SAAa,GACTN,GACFxrB,GAAW,QA+CL3U,oBAAkB,IACjBihC,EACHrgC,SAAQ8B,QAAkB,EAC1Bo9B,WAAUe,QAAoB,EAC9BQ,8BAA6BP,QAAmC,IAGjEv/B,SAAA0+B,EAAQ7qC,IAAI,CAAClK,EAAKuc,IACjB1H,EAAAA,IAAC6+B,GAAA,CAECK,SAAUmB,GAA6B,IAAN34B,EACjCu3B,SAAUoB,GAA6B,IAAN34B,EACjCoF,YACAgyB,IAAKp4B,EACLm3B,SACAkB,WAAY5zC,EACZZ,YAAaq2C,EACb5B,aACAuC,aAAc36B,EACd46B,YAAa7+B,EACbo+B,0BAA2BA,GAA6BE,IAA2B91C,EACnFs2C,6BACEV,GAA6BriC,EAAAA,QAAQuiC,GAEvC7B,yBAfKj0C,MAoBV41C,GACC/gC,EAAAA,IAAC8/B,EAAM5C,IAAN,CAAUx/B,UAAWmC,EAAQL,KAC5BgC,SAAAxB,EAAAA,IAAC8/B,EAAM1C,KAAN,CAAW1/B,UAAWmC,EAAQmgC,gBAAiB0B,QAASxB,EAAQjqC,OAC9DuL,SAAAw+B,EAAgB5G,WACfqH,IAAyB/5B,GAAM,EAAM26B,SAMnD,GChMO,MAAM30C,GAAYE,EAAmB,aAAc,CACxD+0C,WAAY,CACVz5C,QAAS,OACTuX,WAAY,SACZ8yB,oBAAqB,mBAGvBqP,QAAS,CAAA,EAETC,QAAS,CAAA,EAETC,eAAgB,CAAA,EAEhBC,MAAO,CAAA,EAEPC,eAAgB,CACdC,YAAa,SCHJC,GAAmC,EAC9CH,QACAh7B,OAAO,UACPvF,WACAjX,iBACG43C,MAEH,MAAMtiC,EAAUnT,GAAU,CAAEnC,gBAEtB4pC,EAAsBx1B,GAAe,CACzCpU,cACAmT,UAAW,gBACXmB,qBAAsB,eAGxB,OACEqG,OAAC,OAAIxH,UAAW0H,EAAKvF,EAAQ8hC,WAAY9hC,EAAQkH,IAC/CvF,SAAA,CAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQiiC,eACtBtgC,SAAAxB,MAAC4N,IAASrjB,YAAa4pC,KAAyBgO,EAC9C3gC,eAAC,OAAA,CAAK9D,UAAWmC,EAAQkiC,MAAQvgC,SAAAugC,QAGrC/hC,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQmiC,eAAiBxgC,iBClClC9U,GAAYC,EAAAA,gBAAgB,IACpCnD,EAAWE,UCFHwtB,GAA4B,CACvCC,oBAAqB,CACnBxH,eAAgB,CACd,4BAA6B,OAC7B,0BAA2B,MAC3B,6BAA8B,MAC9B,+BAAgC,UAKzBjjB,GAAYE,EAAmB,iBAAkB,CAC5D20B,QAAS,CACPr5B,QAAS,OACTsjB,cAAe,SACf5iB,OAAQ,mDACRue,OAAQ,kCACRzB,IAAK,+BACLY,WAAY,EACZ87B,MAAO,IAEPphC,OAAQla,EAAWY,QAAQE,cAAgB,GAG7CkhC,OAAQ,CACN5gC,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChBpiB,MAAO,iCACP4d,SAAU,EAEV3F,OAAQ,UACRvY,OAAQ,OACR4Y,QAAS,OACTyJ,MAAOnlB,EAAOE,YACd2D,gBAAiB7D,EAAOW,gBACxB2D,WAAYL,EAAWC,kBACvBK,mBAAoB,0BAEpB,mBAAoB,CAClBV,gBAAiB7D,EAAOQ,YAG1B,WAAY,CACVqD,gBAAiB7D,EAAOK,cAI5By8C,eAAgB,CACdzhC,OAAQ,UACR8J,MAAOnlB,EAAOI,cACdyD,gBAAiB7D,EAAOY,cAExB,UAAW,CACTiD,gBAAiB7D,EAAOY,gBAI5Bm8C,YAAa,CAAA,EAEbxiC,KAAM,CACJnX,MAAO,oCACPC,OAAQ,uCCpDC8D,GAAYE,EAAmB,QAAS,CACnD4S,KAAM,CAAA,EAEN+iC,cAAe,CACbv6C,SAAU,QACVQ,IAAK,EACLE,MAAO,EACP60C,OAAQ,EACR90C,KAAM,EACNuY,OAAQ,IACR5I,UAAW,SACX,6BAA8B,QAE9B,kBAAmB,CACjBlQ,QAAS,OACTS,MAAO,OACPQ,UAAW,OACXF,UAAW,eAIfu5C,aAAc,CAAA,EAEdC,QAAS,CACP,WAAY,CACVn6C,aAAc,EACd6e,OAAQ,EACRhe,UAAW,SAIf,kBAAmB,CAAA,EAEnB,gBAAiB,CAAA,EAEjB,iBAAkB,CAChB4hB,eAAgB,YAGlB,kBAAmB,CACjBlF,QAAS,CAjDoB,GAiDO,KAGtC68B,QAAS,CACPt5C,gBAAiBslB,EAAKnpB,EAAOM,YAAa,KAG5C88C,MAAO,CACLv5C,gBAAiB7D,EAAOY,cACxBmC,aAAcxB,EAAWC,oBACzBqB,UAAW,mBAAmBsmB,EAAKnpB,EAAOC,UAAW,sBAAuBkpB,EAC1EnpB,EAAOC,UACP,mBACckpB,EAAKnpB,EAAOC,UAAW,OACvC2hB,OAAQ,OACRnf,SAAU,WAEVgjB,SAAU,QAGZ+2B,MAAO,CACLp8B,SAAU,GACVylB,WAAY,IACZjjC,UAAW,GAGby6C,qBAAsB,CACpBtyB,aAAc,IAGhBpR,MAAO,CACLlX,SAAU,YAGZO,QAAS,CAAA,EAET+zB,OAAQ,CACNp0B,QAAS,OACTwd,IAAK,IAGPm9B,oBAAqB,CACnB76C,SAAU,SACVu1C,OAAQ,EACRp1C,UAAW,OACX6Y,OAAQ,GAGV8hC,aAAc,CACZrM,UAAW,CAAC,EAAG,QAASlxC,EAAOO,cAC/B+f,QAAS,CAAC,GAAI,IACduG,uBAAwBtlB,EAAWC,oBACnC+pB,wBAAyBhqB,EAAWC,oBACpCqC,gBAAiB7D,EAAOY,eAG1B,eAAgB,CACd4kB,eAAgB,cAGlB,iBAAkB,CAChBA,eAAgB,UAGlB,gBAAiB,CACfA,eAAgB,YAGlBg4B,cAAe,CAAA,EAEfC,iBAAkB,CAChB96C,QAAS,OACTsjB,cAAe,SAEf,aAAc,CACZxjB,SAAU,WACVgZ,OAAQ,IAIZiiC,cAAe,CAAA,EAEfj3B,EAAG,CACD,WAAY,CACVnG,QAAS,CAAC,GAnImB,IAoI7BF,SAAU,GACVhd,MAAO,IAEP,qBAAsB,CACpBiwB,cAAe,IAInB,mBAAoB,CAClBA,cAAe,IAGjB,WAAY,CACVjT,SAAU,GACVwjB,aAAc,IAGhB,WAAY,CACVzgC,MAAO,GACPF,IAAK,IAGP,mBAAoB,CAClBkwB,WAAY,IAGd,kBAAmB,CACjBtS,YA/J6B,GAgK7BkK,aAhK6B,GAiK7B7E,YAjK6B,GAkK7BnD,aAlK6B,KAsKjCyD,EAAG,CACD,WAAY,CACVlG,QAAS,CAAC,GAvKmB,IAwK7Bld,MAAO,IAEP,qBAAsB,CACpBiwB,cAAe,IAInB,mBAAoB,CAClBA,cAAe,IAGjB,WAAY,CACVjT,SAAU,GACVwjB,aAAc,IAGhB,WAAY,CACVzgC,MAAO,GACPF,IAAK,IAGP,mBAAoB,CAClBkwB,WAAY,IAGd,kBAAmB,CACjBtS,YAlM6B,GAmM7BkK,aAnM6B,GAoM7B7E,YApM6B,GAqM7BnD,aArM6B,KAyMjCuD,EAAG,CACD,WAAY,CACVhG,QAAS,CAAC,GA1MmB,IA2M7BF,SAAU,GACVhd,MAAO,IAEP,qBAAsB,CACpBiwB,cAAe,IAInB,mBAAoB,CAClBA,cAAe,IAGjB,WAAY,CACVjT,SAAU,GACVwjB,aAAc,IAGhB,WAAY,CACVzgC,MAAO,GACPF,IAAK,IAGP,mBAAoB,CAClBkwB,WAAY,IAGd,kBAAmB,CACjBtS,YAtO6B,GAuO7BkK,aAvO6B,GAwO7B7E,YAxO6B,GAyO7BnD,aAzO6B,KA6OjC46B,aAAc,CACZh7C,QAAS,OACTS,MAAO,QAKTwY,aAAc,CACZ,WAAY,CACVxX,QAAS,GAGX,4BAA6B,CAC3BC,UAAW,oBAGb,2BAA4B,CAC1BA,UAAW,oBAGb,0BAA2B,CACzBA,UAAW,qBAGb,aAAc,CACZD,QAAS,IAIbyX,eAAgB,CACd,WAAY,CACVzX,QAAS,EACTE,WAAY,aACZC,mBAAoB,sBAGtB,4BAA6B,CAC3BF,UAAW,iBAGb,2BAA4B,CAC1BA,UAAW,iBAGb,0BAA2B,CACzBA,UAAW,iBAGb,aAAc,CACZD,QAAS,EACTE,WAAY,sBAIhB,cAAe,CAAEwX,OAAQ,gBACzB,qBAAsB,CAAEA,OAAQ,kBAChC,aAAc,CAAEA,OAAQ,kBACxB,oBAAqB,CAAEA,OAAQ,kBAGpB8hC,GAAuC,CAClDp3B,EAAG,CACDpjB,MAzS4B,GA0S5BC,OA1S4B,IA6S9BkX,KAAM,CACJnX,MA7SiC,GA8SjCC,OA9SiC,KCPxB8D,GAAYE,EAAmB,WAAY,CACtD4S,KAAM,CACJxX,SAAU,YAGZo7C,UAAW,CAAA,EAEXta,OAAQ,CACN5gC,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChBpiB,MAAO,GACPC,OAAQ,GACRQ,gBAAiB,cACjBshB,MAAOnlB,EAAOE,YACdogB,QAAS,EACTvd,aAAc,MACdD,OAAQ,OACRuY,OAAQ,UACR/W,WAAYL,EAAWC,kBACvBK,mBAAoB,mBAEpB,cAAe,CACbV,gBAAiBslB,EAAKnpB,EAAOQ,WAAY,KAG3C,UAAW,CACTqD,gBAAiBslB,EAAKnpB,EAAOM,YAAa,KAG5C,UAAW,CACTuD,gBAAiBslB,EAAKnpB,EAAOI,cAAe,KAG9C,qBAAsB,CACpByD,gBAAiBslB,EAAKnpB,EAAOI,cAAe,KAG9C,aAAc,CACZyD,gBAAiBslB,EAAKnpB,EAAOS,WAAY,IACzC0kB,MAAOnlB,EAAOM,cAIlBia,KAAM,CACJnX,MAAO,GACPC,OAAQ,IAGViY,OAAQ,CAAA,EAERC,SAAU,CACRF,OAAQ,WAGVxB,KAAM,CACJpX,SAAU,WACVgZ,OAAQ,EACRxY,IAAK,OACLE,MAAO,EACPP,UAAW,KC9DFuE,GAAYE,EAAmB,mBAAoB,CAC9D4S,KAAM,CACJtX,QAAS,OACT6iB,eAAgB,SAChBS,cAAe,SACf5iB,OAAQ,OACRid,QAAS,CAAC,EAAG,IACb3c,SAAU,SACV0c,WAAY,UAGd+N,YAAa,CACXhO,SAAU,GACV8sB,WAAY,QAGd4Q,iBAAkB,CAChB19B,SAAU,GACVwjB,aAAc,EACdnhC,SAAU,YAGZ2yC,OAAQ,CACNhyC,MAAO,QAGT6P,MAAO,CACL7P,MAAO,oBACPO,SAAU,SACVskC,aAAc,YAGhB8V,OAAQ,CACNr6C,UAAW,aACXjB,SAAU,WACVQ,IAAK,mBACLE,MAAO,GACPE,OAAQ,GACR8F,SAAU,GACViX,SAAU,GACVylB,WAAY,OACZhkB,UAAW,SACXvB,QAAS,CAAC,EAAG,IAGf09B,UAAW,CACTv7C,SAAU,WACVQ,IAAK,EACLE,MAAO,EACPE,OAAQ,OACRD,MAAO,GACPL,aAAc,EACdJ,QAAS,OACTuX,WAAY,SACZsL,eAAgB,UAGlB7J,MAAO,CACLvY,MAAO,GACPC,OAAQ,GACRiB,WAAY,sBAGd25C,QAAS,CACP55C,UAAW,kBAGb65C,kBAAmB,CAAA,ICtDd,SAASC,IACdlrC,MAAOhD,EAAAgF,OACPA,EAAAgC,WACAA,GAAa,EAAAmX,YACbA,EAAc,GAAAppB,YACdA,EAAAiY,SACAA,IAEA,MAAM3C,EAAUnT,GAAU,CAAEnC,gBAEtBiO,EAAQhD,GAAGw/B,QAEjB,OACE9vB,EAAAA,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KAAMoF,QAAS,KAAOpI,GAAcgG,GAAUhI,GAElEgH,SAAA,OAAU,IAAVhJ,GAAwBA,GAA0B,IAAjBA,EAAMvC,eACtC,MAAA,CAAIyH,UAAWmC,EAAQ8T,YAAcnS,SAAAmS,SAG7B,IAAVnb,GAAuBA,EAAMvC,OAAS,UACrCkP,EAAAA,SAAA,CACE3D,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQ8T,YAAa9T,EAAQwjC,kBAAoB7hC,SAAAmS,MACtEzO,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ86B,OACtBn5B,SAAA,CAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQrH,MAAQgJ,SAAAhJ,EAAMS,KAAK,cAC1C,MAAA,CAAIyE,UAAWmC,EAAQyjC,OAAS9hC,WAAMvL,iBAK7C+J,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQ0jC,UAAW/mC,GAAcqD,EAAQ4jC,mBAC5DjiC,SAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQqB,MAAO1G,GAAUqF,EAAQ2jC,SACpDhiC,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,uBAKrB,CChDO,MAAMjT,GAAYE,EAAmB,cAAe,CACzD4S,KAAM,CACJxX,SAAU,WACViB,UAAW,aACXL,OAAQ,OACRD,MAAO,OACPiY,OAAQ,UACR+E,SAAU,IAGZg+B,SAAU,CACR,WAAY,CACVp7C,QAAS,KACTP,SAAU,WACVS,MAAM,GACND,IAAK,MACLoB,UAAW,qBACXjB,MAAO,EACPC,OAAQ,EACRN,aAAc,QAIlBwY,SAAU,CACRF,OAAQ,WAGVgjC,cAAe,CACb57C,SAAU,WACVQ,IAAK,mBACLC,MAAM,EACNC,OAAO,EACPsY,OAAQ,GAGVyM,QAAS,CAAA,EAETvK,KAAM,CAAA,EAEN2gC,KAAM,CAAA,EAENp7C,KAAM,CAAA,EAENC,MAAO,CAAA,IAGIo7C,GAAgD,CAC3DtkC,KAAM,CACJ7W,MAAO,SCjDJ,MAAM+D,GAAYE,EAAmB,eAAgB,CAC1D4S,KAAM,CACJtX,QAAS,QAGXgkB,OAAQ,CACNvjB,MAAO,eAGTmX,KAAM,CACJnX,MAAO,GACPC,OAAQ,GACR0f,YAAa,GACbhC,WAAY,GAGdpO,KAAM,CACJqO,SAAU,GAGZw7B,MAAO,CACL75C,QAAS,QACTy5B,WAAY,QAGdtW,KAAM,CACJnjB,QAAS,SAGXK,QAAS,CAAA,EAETsjB,EAAG,CAAA,EAEHE,EAAG,CAAA,EAEHC,EAAG,CAAA,EAEH+3B,SAAU,CAAA,EAEVC,UAAW,CAAA,EAEX52C,MAAO,CAAA,EAEP+G,KAAM,CAAA,EAENiX,QAAS,CAAA,EAET64B,GAAI,CAAA,EAEJ,SAAU,CAAA,EAEV34B,OAAQ,CAAA,IC/CG5e,GAAYE,EAAmB,wBAAyB,CACnE4S,KAAM,CACJlX,aAAcxB,EAAWI,oBACzBkC,gBAAiB7D,EAAOY,cACxBkC,OAAQ,CAAC,EAAG,QAAS9C,EAAOM,aAC5BuC,UAAW,mCACXc,SAAU,UAGZg7C,gBAAiB,CACfv7C,MAAO,OACPC,OAAQ9B,EAAWM,QAAQC,OAC3Ba,QAAS,OACTuX,WAAY,SACZxW,UAAW,aACX4c,QAAS,CAAC,EAAG,EAAG,EAAG,IACnB9c,aAAc,CAAC,EAAG,QAASxD,EAAOM,cAGpCia,KAAM,CACJnX,MAAO,GACPC,OAAQ,IAGVu7C,WAAY,CACV9iC,OAAQ,OACRqJ,MAAOnlB,EAAOG,WACd4gB,WAAY,GAGd89B,SAAU,CACR51B,UAAWwK,IACXnT,QAAS,CAlCQ,GAkCO,MACrBhe,EAAQmB,eAGbq7C,SAAU,CACRz7C,OAxCe,GAyCfid,QAAS,CAAC,GAAI,IACd3d,QAAS,OACTuX,WAAY,SACZmB,OAAQ,UACR+E,SAAU,GACVylB,WAAY,OACZtf,cAAe,IACflG,WAAY,SACZ3c,UAAW,cAGbq7C,gBAAiB,CACfl7C,gBAAiB7D,EAAOW,iBAG1Bq+C,cAAe,CACbn7C,gBAAiB7D,EAAOS,YAG1Bw+C,KAAM,CACJ77C,MAAO,GACPC,OAAQ,GACR0d,WAAY,GAGdm+B,YAAa,CACX/5B,MAAOnlB,EAAOC,UACd4S,UAAW,SACXo1B,aAAc,WACdrmB,OAAQ,CAAC,EAAG,EAAG,EAAG,KAGpB9X,SAAU,CACRqb,MAAOnlB,EAAOK,aAGhB8+C,YAAa,CACXh6B,MAAOnlB,EAAOG,WACdmgB,QAAS,CAAC,EAAG,OAIJqR,GAA4B,CACvCC,oBAAqB,CACnBxH,eAAgB,CACdtnB,OAAQ,OACRO,OAAQ,sCAIZ8kB,MAAO,CACL/H,SAAU,GACVylB,WAAY,OACZtf,cAAe,MCjEN64B,GAAyD,EACpEnwC,OAAAA,EACAmf,cACAixB,sBACA1lB,YACA/F,iBACAnc,WACAzS,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtB8rB,EAAmB1X,GAAe,CACtCC,YAAasY,GACb3sB,cACAmT,UAAW,aACXmB,qBAAsB,0BAGlBgmC,EAAkBh6C,EAAAA,QAAQ,IAAM6J,EAAsB1F,EAAWwF,GAAS,CAACA,IAE3EswC,EAAqB1wC,EAAuBwwC,EAAqBC,IAEhE/mB,EAAaC,GAAkBrb,EAAAA,SAAS,KACxCzO,EAAe8wC,GAAoBriC,EAAAA,SAASmiC,IAC5CzQ,EAAaC,GAAkB3xB,EAAAA,cACpCoiC,EAA4BA,EAAqB,GAgB7CvP,EAAiBh3B,IACrB,MAAMymC,EAAkB/wC,EAAcgC,OAAS,EAE5B,WAAfsI,EAAMkiB,MAAoC,QAAfliB,EAAMkiB,MACnCvB,IAGiB,cAAf3gB,EAAMkiB,OAA4C,IAApBukB,IAEhCzmC,EAAMsiB,iBACNwT,EAAeD,EAAc4Q,EAAkB5Q,EAAc,EAAI,IAGhD,YAAf71B,EAAMkiB,OAA0C,IAApBukB,IAE9BzmC,EAAMsiB,iBACNwT,EAAeD,EAAc,EAAIA,EAAc,EAAI4Q,IAGlC,UAAfzmC,EAAMkiB,MAAmC,gBAAfliB,EAAMkiB,OACL,IAAzBxsB,EAAcgC,OAChBipB,IACSkV,GAAe,GACxBp3B,EAAS/I,EAAcmgC,GAAc71B,KAa3C,OARAxQ,EAAAA,UAAU,KACR0J,SAAS+D,iBAAiB,UAAW+5B,GAAe,GAE7C,KACL99B,SAASgE,oBAAoB,UAAW85B,GAAe,QAKzDrwB,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KACtBgC,SAAA,GAAA0D,KAAC,MAAA,CAAIxH,UAAWmC,EAAQqkC,gBACtB1iC,SAAA,GAAAxB,IAAC,MAAA,CAAItC,UAAWmC,EAAQskC,WACtB3iC,eAAC9B,GAAA,CAAKC,KAAK,aAEbK,EAAAA,IAAC4V,GAAA,CACCpd,MAAOslB,EACPnK,cACA3W,SA1DoBioC,IAC1B,MAAMC,EAAmBL,EAAgBp6C,OAAQ8J,GAC/CQ,EAA2BR,EAAS0wC,IAGhCE,EAAqBD,EAAiBjvC,OAAS,EAAI,GAAI,EACvDmvC,EAAwBhxC,EAAuBwwC,EAAqBM,GAE1EH,EAAiBG,GACjBnnB,EAAeknB,GACf5Q,GAAyC,IAA1B+Q,EAA+BA,EAAwBD,IAiDhE56C,YAAa8rB,EACbtC,aAAW,EACXG,oBAAkB,SAGtBhP,KAAC,MAAA,CAAIxH,UAAWmC,EAAQukC,SACrB5iC,SAAA,CAAAvN,EAAcoB,IAAI,CAACd,EAASie,IAC3BxS,EAAAA,IAAC0X,GAAA,CAEC7W,OAAQuzB,IAAgB5hB,EACxB5X,QAAS,CAAE+e,MAAO,WAElBnY,SAAA0D,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQwkC,SAAU,CAChC,CAACxkC,EAAQ0kC,eAAgBO,IAAuBtyB,EAChD,CAAC3S,EAAQykC,iBAAkBlQ,IAAgB5hB,IAE7Cga,aAAc,IAAM6H,EAAe7hB,GACnC5N,QAAUygC,GAAMroC,EAASzI,EAAS8wC,GAElC7jC,SAAA,GAAAxB,IAAC,MAAA,CAAItC,UAAWmC,EAAQ2kC,KACtBhjC,eAAC+6B,GAAA,CAAKptC,YAAaoF,EAAQpF,gBAE7B6Q,EAAAA,IAAC,OAAItC,UAAWmC,EAAQ4kC,YAAcjjC,SAAAlN,EAAuBC,EAASC,KACtEwL,EAAAA,IAAC,OAAItC,UAAWmC,EAAQxQ,SAAWmS,SAAA,IAAIjN,EAAQlF,iBAhB5CkF,EAAQpF,cAoBS,IAAzB8E,EAAcgC,QAAgB+J,EAAAA,IAAC,OAAItC,UAAWmC,EAAQ6kC,YAAcljC,SAAA2X,WCjJhEmsB,GAA6B,CAAE3vC,YAAa,GAAItG,SAAU,ICI1D3C,GAAYE,EAAmB,aAAc,CACxD4S,KAAM,CACJ7W,MAAO,OACPX,SAAU,WACViB,UAAW,aACX+X,OAAQ,GAGVukC,uBAAwB,CACtBv9C,SAAU,WACVS,KAAM,EACND,IAAK,EACLG,MAdyB,GAezBC,OAAQ9B,EAAWM,QAAQC,OAAS,EACpCa,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChBjiB,YAAa,CAAC,QAAS,EAAGvD,EAAOM,aACjCgE,WAAY,4BACZ+W,OAAQ,UACRI,OAAQla,EAAWY,QAAQE,cAAgB,GAG7C49C,sBAAuB,CACrB5kC,OAAQ,WAGV4jC,KAAM,CACJ77C,MAAO,GACPC,OAAQ,IAGVsY,MAAO,CACLvY,MAAO,GACP+hB,MAAOnlB,EAAOK,YACd6lB,WAAY,EACZ5hB,WAAY,sBAGd47C,GAAI,CACF77C,UAAW,kBAGb87C,aAAc,CACZh7B,MAAOnlB,EAAOe,aAGhBq/C,cAAe,CAAA,EAEfC,cAAe,CACbxuB,YAAa7xB,EAAOe,aAGtBu/C,eAAgB,CACd79C,SAAU,WACV89C,KAAM,GAGRC,kBAAmB,CACjB/9C,SAAU,WACVW,MAAO,OACPH,IAAK1B,EAAWM,QAAQC,OAAS,EACjCoB,MAAM,EACNuY,OAAQ,KAICkW,GAA4B,CACvCC,oBAAqB,CACnBxH,eAAgB,CACdvJ,YAxEuB,IA2EzB0J,MAAO,CACLrE,WA5EuB,MCDhB/e,GAAYE,EAAmB,cAAe,CACzD8gB,MAAO,CACLe,WAAY,OACZ7N,OAAQ,UACRtY,aAAc,MACdK,MAAO,GACPC,OAAQ,GACRqY,QAAS,OACTpX,WAAY,uBACZsd,OAAQ,EACR9e,OAAQ,CAAC,EAAG,QAAS,QAErB,YAAa,CACXA,OAAQ,CAAC,EAAG,QAAS,UAIzBynB,MAAO,CACL5nB,QAAS,OACTuX,WAAY,SACZmB,OAAQ,WAGVrY,QAAS,CACPkjB,WAAY,GAGdjP,WAAY,CACVoE,OAAQ,WAGVmN,UAAW,CAAA,IChCN,MAAMrhB,GAAYE,EAAmB,WAAY,CACtDo5C,SAAU,CACR99C,QAAS,OACT+9C,aAAc,SACdC,gBAAiB,OACjBj9C,UAAW,aACXjB,SAAU,WAEV,yBAA0B,CACxBO,QAAS,KACTP,SAAU,WACV6B,WAAYL,EAAWC,kBACvBK,mBAAoB,cACpBnB,MAAO,8BACPC,OAAQ,+BACRJ,IAAK,4BACLC,KAAM,+BAIV09C,UAAW,CACTD,gBAAiB,OAGnBvC,SAAU,CAAA,EAEVl2B,QAAS,CAAA,EAETqN,OAAQ,CACNrM,WAAY,OACZmE,WAAY,OACZvqB,OAAQ,OAERH,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChB/J,OAAQ,EAER,mBAAoB,CAClBwK,cAAe,gBAInB3K,OAAQ,CAAA,EAERC,SAAU,CAAA,EAEVslC,WAAY,CAAA,EAEZC,WAAY,CAAA,EAEZ36B,cAAe,CAAA,EAEfG,EAAG,CAAA,EAEHE,EAAG,CAAA,EAEHC,EAAG,CAAA,ICzDE,MAAMs6B,GAAwB,CACnCxgC,QAAS,KACTygC,WAAY,qBACZC,QAAS,kBACTr4C,KAAM,qBACNs4C,YAAa,wBACbC,SAAU,2BACVC,MAAO,yBACPC,OAAQ,YACRC,UAAW,kBACXC,YAAa,oBAGFC,GAAgC,CAC3C,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KAGQC,GAAqC,IAC7CD,GACH,IAAK,KAGME,GAAqC,CAChD,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,OACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,GACH,IAAG,IACH,IAAG,KACH,IAAG,KCvFQC,GAAa,CACxBC,EACAC,EACAC,EACAC,IAEAH,EACG/xC,MAAM,IACNC,IAAKkyC,IACJ,GAAIH,EAAM9uC,KAAKivC,GACb,OAAOA,EAET,IAAKD,EACH,MAAO,GAGT,MAAME,EAAeH,EAAcE,EAAO9yC,gBAAkB8yC,EAGtDpwC,EADcowC,EAAO5f,gBAAkB4f,EAChBC,EAAa7f,cAAgB6f,EAE1D,OAAOJ,EAAM9uC,KAAKnB,GAAUA,EAAS,KAEtC8B,KAAK,ICGGwuC,GAAa96B,EAAAA,WAA+C,UACvEnU,MACEA,EAAQ,GAAAkvC,UACRA,EAAY,UAAAC,OACZA,EAAA1zB,UACAA,EAAA2zB,YACAA,GAAc,EAAAN,yBACdA,GAA2B,EAAAtqC,SAC3BA,KACG1Q,GAELyP,GAEA,MAAMgZ,EAAWjnB,EAAAA,OAAyB,MACpCknB,EAAY1X,GAAc,CAACvB,EAAKgZ,IAEhCqyB,EAAQO,GAAUrB,GAAsBoB,GAExCG,EAAwBV,GAAiBS,EAAcT,EAAIxf,cAAgBwf,EAE3EW,EAAsB,CAAC9/C,EAAyBs3B,KACpD,MAAM5R,EAAQqH,EAAS9mB,QACnBhD,EAAAA,WAAWyiB,IAAyB,UAAfA,EAAM/N,OAE7B+N,EAAMlV,MAAQ8mB,EACd5R,EAAM3T,kBAAkB/R,EAAUA,KAkDtC,OACEgY,EAAAA,IAAC4V,GAAA,IACKtpB,EACJyP,IAAKiZ,EACLxc,QACAyb,YACAG,QAnCgBsB,MAAOnX,IACzBA,EAAMsiB,iBAEN,MAAMsmB,EAAM5oC,EAAMwpC,cAAcC,QAAQ,cAAc5yC,MAAM,IAAI6D,KAAK,IAE/DyU,EAAQnP,EAAMkX,cACd5b,EAAiB6T,EAAM7T,gBAAkB,EACzCouC,EAAev6B,EAAMu6B,cAAgB,EAErCxf,EAAU2e,EAAM9uC,KAAK6uC,GAE3B,IAAIe,EAAczf,EACd0e,EACAD,GAAWC,EAAKC,EAAOH,GAAoBK,GAE/C,MAAMa,EAAiBD,EAAYjyC,OAASuC,EAAMvC,QAAUgyC,EAAepuC,GAEvE5O,EAAAA,WAAWgpB,IAAcA,GAAa,GAAKk0B,EAAiBl0B,IAC9Di0B,EAAcA,EAAYnxC,UAAU,EAAGmxC,EAAYjyC,QAAUkyC,EAAiBl0B,KAGhF,MAAMqL,EAAWuoB,EACf,GAAGrvC,EAAMzB,UAAU,EAAG8C,KAAkBquC,IAAc1vC,EAAMzB,UAAUkxC,MAGxEjrC,EAASsiB,EAAU,CAAE8oB,SAAUjB,EAAK1e,WAAWlqB,GAC/CupC,EAAoBjuC,EAAiBquC,EAAYjyC,OAAQqpB,IAUvDtiB,SArDiB0Y,MAAOyxB,EAAa5oC,KACvC,MAAMkqB,EAAU2e,EAAM9uC,KAAK6uC,GAGrB7nB,EAAWuoB,EACfpf,EAAU0e,EAAMD,GAAWC,EAAKC,EAFE,UAAdM,EAAwBV,GAAqBD,GAEXO,IAGxDtqC,EAASsiB,EAAU,CAAE8oB,SAAUjB,EAAK1e,WAAWlqB,GAE/C,MAAMmP,EAAQqH,EAAS9mB,QACvB,GAAIhD,EAAAA,WAAWyiB,GAAQ,CACrB,MAAM8I,EAAQ9I,EAAM7T,eACpBiuC,EAAoBppC,EAAAA,QAAQ8X,IAAU8I,IAAa9mB,EAAQge,EAAQA,EAAQ,EAAG8I,EAChF,IA0CJ,GC9Ga5yB,GAAYE,EAAmB,SAAU,CACpD4S,KAAM,CACJtX,QAAS,cACTo2C,cAAe,SACf5zB,MAAO,sBACPthB,gBAAiB,2BACjBT,MAAO,cACP8W,WAAY,SAEZ,QAAS,CACP6G,WAAY,IAIhBxG,KAAM,CACJ,UAAW,CACT5X,QAAS,iBAIbmgD,SAAU,CACRjG,OAAO,GAGT/2B,KAAM,CAAA,EAENi9B,MAAO,CACL59B,MAAOnlB,EAAOY,cACdiD,gBAAiB,uBAGnBm/C,GAAI,CACF1iC,QAAS,CAAC,EAAG,GACbH,IAAK,EACLpd,aAAc,EAEdqd,SAAU,GACVylB,WAAY,OACZtf,cAAe,IACf6V,WAAY,OAEZ,UAAW,CACTh5B,MAAO,GACPC,OAAQ,IAGV,WAAY,CACVid,QAAS,CAAC,EAAG,GACbyC,aAAa,EACbhgB,aAAc,IAIlBujB,EAAG,CACDhG,QAAS,CAAC,EAAG,EAAG,EAAG,GACnBH,IAAK,EACLpd,aAAc,EAEdqd,SAAU,GACVylB,WAAY,OACZtf,cAAe,GACf6V,WAAY,OAEZ,UAAW,CAAA,EAEX,UAAW,CACTh5B,MAAO,GACPC,OAAQ,IAGV,WAAY,CACVid,QAAS,CAAC,EAAG,EAAG,EAAG,GACnBsB,OAAQ,CAAC,GAAG,KAAQ,GACpB7e,aAAc,IAIlByjB,EAAG,CACDlG,QAAS,CAAC,EAAG,IACbH,IAAK,EACLpd,aAAc,EAEdqd,SAAU,GACVylB,WAAY,OACZtf,cAAe,IACf6V,WAAY,OAEZ,UAAW,CAAA,EAEX,UAAW,CACTh5B,MAAO,GACPC,OAAQ,IAGV,WAAY,CACVid,QAAS,CAAC,EAAG,GACbsB,OAAQ,EAAC,GAAI,KAAQ,GACrB7e,aAAc,IAIlBgjB,OAAQ,CAAA,ICrGG5e,GAAYE,EAAmB,SAAU,CACpD4S,KAAM,CACJtX,QAAS,OACTuX,WAAY,SACZmB,OAAQ,UAER,iBAAkB,OAClB,kBAAmB,OACnB,wBAAyB,OACzB,yBAA0B,OAC1B,0BAA2B,iEAC3B,qBAAsB,QAGxBsK,QAAS,CAAA,EAETC,UAAW,CAAA,EAEXsC,QAAS,CAAA,EAET3M,SAAU,CACRmK,cAAe,OACfrK,OAAQ,WAGV4M,QAAS,CACP,oBAAqB,CACnB/kB,KAAM,0FAIV+/C,OAAQ,CACNxgD,SAAU,WACVse,WAAY,EACZpe,QAAS,QACTS,MAAO,sBACPC,OAAQ,uBACRN,aAAc,uBACdW,UAAW,aACXY,WAAYL,EAAWC,kBACvBK,mBAAoB,4BACpBV,gBAAiB,OAEjB,YAAa,CACXb,QAAS,KACTP,SAAU,WACVQ,IAAK,+BACLC,KAAM,+BACNE,MAAO,6BACPC,OAAQ,8BACRF,MAAO,OACPR,QAAS,QACTkB,gBAAiB,OACjBd,aAAc,uBACd0Y,OAAQ,EACRnX,WAAYL,EAAWC,kBACvBK,mBAAoB,2BAIxB4jB,MAAO,CACLxlB,QAAS,QAGX4nB,MAAO,CACLjmB,WAAYL,EAAWC,kBACvBK,mBAAoB,kBAGtB2+C,UAAW,CACTrG,OAAO,EACP95B,YAAa,2BAGfogC,WAAY,CACVj9B,WAAY,6BCxEH/e,GAAYE,EAAmB,WAAY,CACtD4S,KAAM,CACJ7W,MAAO,QAGTggD,SAAU,IACL9gD,EAAQmB,cACXL,MAAO,OACPC,OAAQ,OACR+lB,WAAY,UACZhJ,SAAU,GACVE,QAAS,CAAC,GAAI,EAAG,EAAG,0BACpB+iC,cAAe,oCACfC,gBAAiB,SACjB5/C,UAAW,aACXgY,QAAS,OACT0R,aAAc,OACd9oB,WAAYL,EAAWC,kBACvBK,mBAAoB,mBACpBzB,OAAQ,OACRygD,OAAQ,OACRl2B,WAAY,cAEZ,iBAAkB,CAChBjpB,QAAS,GAGXkpB,cAAe,YACf,4DAA6D,CAC3DC,iBAAkB,OAClB3L,OAAQ,IAIZgJ,QAAS,CACPxnB,MAAO,QAGTsqB,UAAW,CACT/qB,QAAS,OACT6gD,iBAAkB,kBAElB,0BAA2B,CACzBC,SAAU,SAGZ,WAAY,CACV3nC,OAAQ,WACR9Y,QAAS,uBACT0gD,aAAc,aACdrjC,WAAY,WACZtE,WAAY,WAIhB4nC,aAAc,CACZ9hC,UAAW,QACXjf,UAAW,EACXwd,SAAU,GACV8F,WAAY,OACZ7F,WAAY,SACZqF,cAAe,QAGjBk+B,kBAAmB,CACjBz+B,MAAO,OAGT0+B,mBAAoB,CAAA,EAEpB,kBAAmB,CAAA,EAEnBj2B,UAAW,CAAA,ICxBAk2B,GAAW18B,EAAAA,WAAgD,UACtEnU,MACEA,EAAQ,GAAAmb,YACRA,EAAAxlB,KACAA,EAAAm7C,gBACAA,EAAkB,UAAAp1B,mBAClBA,EAAAq1B,WACAA,GAAa,EAAAC,yBACbA,EAAAx1B,YACAA,GAAc,EAAAG,4BACdA,EAAAxR,SACAA,EAAAsR,UACAA,EAAAw1B,KACAA,EAAAj8C,KACAA,EAAAoS,OACAA,EAAArV,YACAA,EAAAyS,SACAA,EAAAoX,QACAA,EAAAC,QACAA,EAAAC,OACAA,EAAArF,YAEAA,EAAAC,aACAA,EAAAY,MAEAA,EAAAtT,WACAA,EAAAuR,UACAA,EAAAmD,WACAA,EAAA5Q,KACAA,EAAA2Q,eACAA,KACGy4B,GAEL3tC,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtBo/C,EAAoBJ,GAAct+C,EAAAA,WAAWgpB,GAC7C21B,EAAgB,GAAGpxC,EAAMvC,YAAYge,IAErC4B,EAA0BlX,GAAe,CAC7CpU,cACAmT,UAAW,oBACXmB,qBAAsB,aAGlB8V,EAA4BhW,GAAe,CAC/CpU,cACAmT,UAAW,sBACXmB,qBAAsB,cAGjB+H,EAAWgO,GAAclS,EAAAA,UAAS,GAEnCwS,EAAWtO,GAAajE,EACxBwO,EAAWgE,EAAAA,oBAAoB3c,GAC/BqxC,EAAW5iC,EAAAA,oBAAoB6I,GAC/BuF,IACFw0B,GAAY30B,GAAYf,IAAgCmB,EAAAA,iBAAiB3B,GAgB7E,OACE3T,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQL,KAAMvU,EAAAA,WAAWqV,IAAST,EAAQS,IAC1DxR,MAAO,CAAE,mBAAoB86C,EAAc3zC,QAE3CuL,SAAAxB,EAAAA,IAACgP,GAAA,CACCE,eACAD,cACA1kB,YAAasrB,EACbjW,OAAQgI,EAAAA,UAAUhI,EAAQ,WAE1B4B,SAAAxB,EAAAA,IAACgR,GAAA,CACClB,QACAvlB,YAAaoqB,EACb/N,UAAWsO,EACX1Y,aACA2U,WACApD,YACAmD,aACAD,iBACA3Q,OACAsM,aAAW,EAEXpL,SAAA0D,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQsQ,QAAS,CAC/B,CAACtQ,EAAQoT,WAAYe,EACrB,CAACnU,EAAQsT,WAAY02B,OAGlB71B,GAAe,CAAE,aAAcxb,GAEpCgJ,SAAA,CAAAxB,EAAAA,IAAC,WAAA,CACCjE,MACA2B,UAAWmC,EAAQ8oC,SACnBnwC,QACAsI,SAAUtE,EACVmX,YAAa0B,EAAiB1B,OAAc,EAC5CM,UAAWu1B,EAA2Bv1B,OAAY,EAClD9lB,OACAs7C,OACAr1B,UACAC,QAnDS9V,IACnBqW,GAAW,GACXP,IAAU9V,IAkDA+V,OA/CQ/V,IAClBqW,GAAW,GACXN,IAAS/V,IA8CCvB,SAzDUuB,IACpBvB,EAASuB,EAAMkX,cAAcjd,MAAO+F,IAyD1BurC,UAAW51B,KACPjU,EAAAA,kBAAkBzS,EAAMoS,MACxB8pC,IAELC,GACC3pC,EAAAA,IAAC,OAAA,CACCtC,UAAW0H,EAAKvF,EAAQqpC,aAAcrpC,EAAQ,WAAWypC,KAAoB,CAC3E,CAACzpC,EAAQspC,mBAAoB3wC,EAAMvC,OAASge,EAC5C,CAACpU,EAAQupC,oBAAqBl0B,GAAY/D,OAExClR,EAAAA,kBAAkB,CAAEqpC,oBAEvB9nC,SAAAooC,YAQjB,GC7Lal9C,GAAYE,EAAmB,aAAc,CACxD4S,KAAM,CACJtX,QAAS,OACTuX,WAAY,SACZ7W,OAAQ,GACRid,QAAS,EACT7d,SAAU,WACV4qB,WAAY,cACZvqB,OAAQ,OACRC,aAAc,EACdsY,OAAQ,UACRK,QAAS,OACTpX,WAAYL,EAAWC,kBACvBK,mBAAoB,QAEpB,cAAe,CACb8W,OAAQ,UACRqK,cAAe,SAInBgB,GAAI,CACFtG,SAAU,GAEV,aAAc,CACZD,IAAK,KAITsG,EAAG,CACDrG,SAAU,GACVmG,cAAe,SAEf,aAAc,CACZpG,IAAK,GAEL,mBAAoB,CAClBA,IAAK,KAKXwF,QAAS,CAAA,EAETC,UAAW,CAAA,EAEXG,OAAQ,CAAA,EAERzK,OAAQ,CAAA,EAERC,SAAU,CAAA,EAEVipC,KAAM,CACJpoB,WAAY,QAGd8Z,cAAe,CACbvzC,QAAS,OACTuX,WAAY,SACZsL,eAAgB,UAGlBi/B,OAAQ,CACNrhD,MAAO,GACPC,OAAQ,GACRN,aAAc,MACduB,WAAYL,EAAWC,kBACvBK,mBAAoB,CAAC,aAAc,UAGrCgW,KAAM,CACJnX,MAAO,GACPC,OAAQ,IAGVL,QAAS,CACPL,QAAS,OACTuX,WAAY,SACZ7W,OAAQ,QAGVqhD,eAAgB,CACdz+B,cAAe,eAGjBa,OAAQ,CACNnkB,QAAS,OACTU,OAAQ,EACRZ,SAAU,WACVS,KAAM,MACND,IAAK,MACLoB,UAAW,yBAGb0iB,QAAS,CACP,aAAc,CACZhL,WAAY,UAGd,YAAa,CACXpZ,QAAS,YAKFgiD,GAA0C,CACrD19B,mBAAoB,CAClB/D,SAAU,CACR9f,MAAO,EACPC,OAAQ,IAIZ4hB,KAAM,CACJ7hB,MAAO,GACPC,OAAQ,IAGVkd,QAAS,CACPnd,MAAO,GACPC,OAAQ,KCnFCuhD,GAAax9B,EAAAA,WAAgD,UACxEnL,SACEA,EAAA1B,KACAA,EAAAiH,KACAA,EAAO,UAAAvK,WACPA,GAAa,EAAA4tC,OACbA,GAAS,EAAAt9B,UACTA,GAAY,EAAAnK,SACZA,GAAW,EAAA0nC,mBACXA,GAAqB,EAAA/pC,KACrBA,EAAO,IAAA0M,aACPA,EAAe,OAAAC,cACfA,EAAgB,OAAAtN,KAChBA,EAAO,SAAAC,OACPA,EAAArV,YACAA,EAAAiD,KACAA,EAAAoX,QACAA,KACGsmB,GAELnvB,GAEA,MAAM8D,EAAUnT,GAAU,CAAEnC,gBAEtB4iB,EAAuBxO,GAAe,CAC1CC,YAAasrC,GACb3/C,cACAmT,UAAW,iBACXmB,qBAAsB,eAGlByO,EAAc9Q,GAAcsQ,EAElC,OACE5H,EAAAA,KAAC,SAAA,CACCnJ,MACA4D,OACAjC,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQS,GAAOT,EAAQkH,GAAO,CAC1D,CAAClH,EAAQkqC,MAAOK,EAChB,CAACvqC,EAAQyM,SAAUQ,EACnB,CAACjN,EAAQgB,QAAS8B,EAClB,CAAC9C,EAAQiB,UAAWtE,IAEtBsE,SAAUwM,EACV1I,QAAU0I,OAAwB,EAAV1I,KACpBsmB,KACAjrB,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAA0D,EAAAA,KAAC,OAAA,CAAKxH,UAAW0H,EAAKvF,EAAQtX,QAA0B,UAAjBykB,GAA4BnN,EAAQoqC,gBACxEzoC,SAAA,CAAAyF,EAAAA,oBAAoBnH,IACnBE,EAAAA,IAAC,OAAA,CAAKtC,UAAW0H,EAAKvF,EAAQ47B,cAAe4O,GAAsBxqC,EAAQmqC,QACzExoC,SAAAxB,EAAAA,IAAC,QAAKtC,UAAWmC,EAAQC,KAAO0B,SAAApB,GAAWN,OAG9C0B,KAGFsL,KACC9M,IAAC,OAAA,CAAKtC,UAAWmC,EAAQwM,OACvB7K,SAAAxB,EAAAA,IAAC2K,GAAA,CACChL,KAAMsN,EACNrC,iBAAe,EACfrgB,YAAa4iB,QAMzB,GC1GazgB,GAAYE,EAAmB,eAAgB,CAC1D4S,KAAM,CACJtX,QAAS,eACTU,OAAQ,GACRid,QAAS,CAAC,EAAG,IACbvd,aAAc,GACdW,UAAW,aACXyhB,MAAOnlB,EAAOE,YAEd,UAAW,CACT2D,gBAAiB7D,EAAOS,aAI5Bg7B,UAAW,CACT94B,QAAS,OACTU,OAAQ,OACR6W,WAAY,UAGdkpB,SAAU,CACRv/B,gBAAiB7D,EAAOS,YAG1BqlB,KAAM,CACJzK,OAAQ,UACR+E,SAAU,IAGZxR,KAAM,CACJxL,MAAO,GACP8iB,WAAY,EACZf,MAAOnlB,EAAOI,cACdib,OAAQ,UACRtY,aAAc,MAEd,SAAU,CACRoiB,MAAOnlB,EAAOI,eAGhB,UAAW,CACT+kB,MAAOnlB,EAAOY,cACdiD,gBAAiB7D,EAAOI,eAG1B,YAAa,CACX+kB,MAAOnlB,EAAOI,cAEd,UAAW,CACT+kB,MAAOnlB,EAAOY,cACdiD,gBAAiB7D,EAAOI,mBCjDnB+G,GAAYE,EAAmB,UAAW,CACrD4S,KAAM,CACJlX,aAAc,EACdN,SAAU,WACV4qB,WAAYrtB,EAAOY,cACnB0f,QAAS,CAAC,GAAI,GAAI,GAAI,IACtB3d,QAAS,QAGXuzC,cAAe,CACb9yC,MAAO,GACPC,OAAQ,GACR0d,WAAY,EACZgC,YAAa,IAGflb,MAAO,CACLsd,MAAOnlB,EAAOe,aAGhB6N,KAAM,CAAA,EAENiX,QAAS,CACPV,MAAOnlB,EAAOsB,cAGhBo9C,GAAI,CACFv5B,MAAOnlB,EAAOqB,aAGhB,SAAU,CACR8jB,MAAOnlB,EAAOG,YAGhB2lB,KAAM,CAAA,EAEN02B,MAAO,CAAA,EAEPx5C,QAAS,CACP,kCAAmC,CACjCJ,UAAW,KAIf+W,MAAO,CACLlX,SAAU,WACVQ,IAAK,GACLE,MAAO,GACPC,MAAO,GACPC,OAAQ,MChDC8D,GAAYE,EAAmB,cAAe,CACzDw2C,UAAW,CAAA,EAEXta,OAAQ,CACN5gC,QAAS,OACTuX,WAAY,SACZsL,eAAgB,SAChBpiB,MAAO,GACPC,OAAQ,GACRQ,gBAAiB,cACjBshB,MAAOnlB,EAAOE,YACdogB,QAAS,EACTvd,aAAc,MACdD,OAAQ,OACRuY,OAAQ,UACR/W,WAAYL,EAAWC,kBACvBK,mBAAoB,oBAGtBgW,KAAM,CACJnX,MAAO,GACPC,OAAQ,IAGViY,OAAQ,CAAA,EAERC,SAAU,CACRF,OAAQ,aC5BCyG,GAAoC,CAC/CtG,MAAO,CACLC,OAAQ,8BCasC,EAChDxT,OACAoS,SACAb,OAAAA,EACAxU,cACAyd,cACApN,cAEA,MAAMiF,EAAUnT,GAAU,CAAEnC,gBAEtB+/C,EAAkB3rC,GAAe,CACrCpU,cACAmT,UAAW,YACXmB,qBAAsB,gBAGlB0rC,EAAUz8C,EAAAA,OAAuB,MACjC08C,EAAc18C,EAAAA,OAAuB,OAEpC28C,EAAYC,GAAiBhoC,EAAAA,UAAS,GAEvCioC,EAAcpsC,IAClBA,EAAMuE,kBACN4nC,EAAel1C,IAAOA,IAKxB,OAFAwI,GAAyBwsC,EAAa,IAAME,GAAc,GAAQH,GAGhErlC,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACvD4B,SAAA,CAAAzC,GACCiB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQwI,WACtB7G,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,aAGfuF,EAAAA,KAAC,OAAInJ,IAAKwuC,EAAS7sC,UAAWmC,EAAQkI,QAASnD,QAAS+lC,EACtDnpC,SAAA,CAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQmI,YAAayiC,GAAc5qC,EAAQoI,mBAC7DzG,SAAAwG,IAEHhI,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQqI,eAAgBuiC,GAAc5qC,EAAQsI,sBACjE3G,eAAC9B,GAAA,CAAKC,KAAK,yBAEbK,EAAAA,IAAC4qC,EAAAA,cAAA,CACCC,GAAIJ,EACJhe,QC9DuB,ID+DvBqe,eAAa,EACbC,WAAY,CACVC,MAAOnrC,EAAQ,kBACforC,YAAaprC,EAAQ,yBACrBqrC,KAAMrrC,EAAQ,iBACdsrC,WAAYtrC,EAAQ,yBAGtB2B,WAAAxB,IAAC,MAAA,CAAIjE,IAAKyuC,EAAa9sC,UAAWmC,EAAQuI,YAAaxD,QAAS+lC,EAC9DnpC,eAAC8F,GAAA,CAAKC,MAAO3M,EAASrQ,YAAa+/C,2BErDD,EAC5Cj/B,OACA1L,OAAO,SACPnD,cAAa,EACboI,UACAgI,eAAc,EACdpf,OACAoS,SACArV,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAE5B,OACE2a,EAAAA,KAAC,SAAA,CACCvF,OACAjC,UAAW0H,EACTvF,EAAQL,KACRhD,GAAcqD,EAAQiB,SACtB8L,GAAe/M,EAAQ0I,WAEzB3D,QAAUpI,OAAuB,EAAVoI,EACvB9D,SAAUtE,KACNyD,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,GAAAxB,IAAC,MAAA,CAAItC,UAAWmC,EAAQC,KACtB0B,eAAC9B,GAAA,CAAKC,KAAK,aAEbK,IAAC,OAAKwB,SAAA6J,gDCjCsC,EAChD9gB,cACAqV,SACApS,OACAsS,OAAO,QACP2F,cAEA,MAAM5F,EAAUnT,GAAU,CAAEnC,gBAE5B,OACEyV,EAAAA,IAAC,SAAA,CACCL,KAAK,SACLjC,UAAWmC,EAAQL,KACnBoF,QAASa,KACLxF,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAMG,yCCtBgC,EAAGtS,OAAMoS,SAAQrV,kBACjE,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAE5B,OAAOyV,MAAC,OAAItC,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,iDCVlC,CAAC,UAAW,wDCgBK,EAChDyL,OACA+/B,YACAC,YACAC,gBAAgB,IAChBC,gBAAe,EACf3rC,SACApS,OACAjD,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtBihD,EAAangC,EAAKpV,OAASq1C,GAC1B9wC,EAAQiI,GAAaC,EAAAA,SAAS6oC,GAC/BviB,EAAO3d,EAAKpR,MAAM4uB,IAClB4iB,EAAWziB,GAAQA,EAAK,GACxB0iB,EAAiBrgC,EAAKlW,QAAQ0zB,GAAa,IAE3C8iB,EAAYtgC,EAAK7U,MAAM,EAAG6U,EAAK7U,MAAM,EAAG80C,GAAeM,YAAY,MAEzE,OACE1mC,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACvD4B,SAAA,CAAA+pC,GAAgB/wC,GAAUgxC,IACzBtmC,KAAC,MAAA,CACC1D,SAAA,CAAA0D,OAAC,OAAA,CAAM1D,SAAA,CAAAkqC,EAAe,SACnBD,KACDzrC,IAAC,KAAEtC,UAAWmC,EAAQmpB,KAAM6iB,KAAMJ,EAAUvuC,OAAO,SAAS4uC,IAAI,sBAC7DtqC,SAAAiqC,OAKPzrC,EAAAA,IAAC,MAAA,CACCwB,SAAAxB,MAAC,OAAA,CAAMwB,eAGV+pC,GAAgBC,OAAa,EAC5BxrC,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQipB,OAAQlkB,QAAS,IAAMnC,GAAWjI,GACvDgH,SAAAhH,EAAS6wC,EAAYD,gHCTY,EAC1CW,WACAjsC,OAAOstB,GAAY2e,GACnBpe,WACAC,UACAxgC,QACA+G,OACAqI,cAAa,EACbwvC,sBAAqB,EACrBl/B,aAAY,EACZm/B,kBAAiB,EACjBC,WAAW,IACXj/B,gBAAgB,UAChBk/B,aAAa,YACbC,WACAxnC,UACAhF,SACApS,OACAjD,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtB8hD,EAAwB1tC,GAAe,CAC3CpU,cACAmT,UAAW,wBACXmB,qBAAsB,aAGlBsO,EAAuBxO,GAAe,CAC1CC,YAAakvB,GACbvjC,cACAmT,UAAW,iBACXmB,qBAAsB,aAGlBmtB,EAAqBrtB,GAAe,CACxCpU,cACAmT,UAAW,eACXmB,qBAAsB,cAalB1Q,KAAEA,EAAAmS,KAAMA,GAASyrC,EACjBO,EAAkB9tC,EAAAA,WAAW4tC,GAEnC,SACElnC,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KACtBgC,SAAA,CAAA0D,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQytB,gBAAiBztB,EAAQqsC,GAAW,CAC1D,CAACrsC,EAAQiB,UAAWtE,OAElByD,EAAAA,kBAAkBzS,EAAMoS,MACxBoH,EAAAA,gBApBWzI,IACnBA,EAAMuE,kBACN8B,IAAUrG,KAkB4B/B,GAElCgF,SAAA,CAAAxB,MAAC,OAAItC,UAAWmC,EAAQ0tB,SAAW/rB,SAAApB,GAAWN,OAE9CoF,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ4tB,kBACtBjsB,SAAA,CAAAxB,MAACurB,GAAA,CAAgBC,YAAar9B,EAAMu9B,YAAY,OAAOnhC,YAAayhC,EAClExqB,WAAAxB,IAAC,MAAA,CAAItC,UAAWmC,EAAQktB,SAAWvrB,iBAGrC0D,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ8tB,SACrBnsB,SAAA,CAAAmsB,EACAse,GAAkBhhD,EAAAA,WAAWqV,MAC5BN,IAAC,MAAA,CAAItC,UAAWmC,EAAQguB,SAAWrsB,SAAA+qC,EAAAA,SAASjsC,aAKlD4E,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ+tB,QACrBpsB,SAAA,CAAAsL,EACC9M,EAAAA,IAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQ6tB,UAAW7tB,EAAQ,aAAaoN,MAC3DzL,SAAAxB,EAAAA,IAAC2K,GAAA,CACChL,KAAMsN,EACN1iB,YAAa4iB,EACbvC,iBAAe,MAInB0hC,GACEtsC,EAAAA,IAACirB,GAAA,CACCnrB,KAAMqsC,EACNvnC,QA7CQrG,IACpBA,EAAMuE,kBACNspC,IAAW7tC,IA4CC/B,WAAYwvC,EACZzhD,YAAa8hD,IAKlBze,UAIL1oB,KAAC,MAAA,CAAIxH,UAAWmC,EAAQyc,OACrB9a,SAAA,CAAAyF,EAAAA,oBAAoB7Z,IAAU4S,EAAAA,IAAC,OAAItC,UAAWmC,EAAQzS,MAAQoU,SAAApU,IAE9D6Z,sBAAoB9S,IAAS6L,EAAAA,IAAC,OAAItC,UAAWmC,EAAQ1L,KAAOqN,SAAArN,2MChH9D,UAA+E3G,KACpFA,EAAAjD,YACAA,EAAAiiD,cACAA,EAAAC,eACAA,EAAA9R,OACAA,EAAS,CAAA,EAAAtK,UACTA,EACA77B,OAAAA,EACA+K,OAAAA,EAAAA,WACA/C,GAAa,EAAAsV,eACbA,GAAiB,EAAA0tB,mBACjBA,GAAqB,EAAAzP,aACrBA,EAAe,SAAAnwB,OACfA,EAAA8sC,gBACAA,EAAAC,sBACAA,EAAAv7B,QACAA,IAEA,MAAMvR,EAAUnT,GAAU,CAAEnC,gBAEtBgmC,EAAyB5xB,GAAe,CAC5CC,YAAaqxB,GACb1lC,cACAmT,UAAW,mBACXmB,qBAAsB,gBAGlB+tC,EAA2BjuC,GAAe,CAC9CpU,cACAmT,UAAW,qBACXmB,qBAAsB,gBAGlB+xB,EAAa/lC,UAAQ,IAAM4kC,GAAUY,EAAW77B,GAAS,CAAC67B,EAAW77B,IAErEq4C,EAAcJ,GAAkBnhD,OAAOC,KAAKihD,GAa5CM,EACJh7B,IACC7mB,aAAWsU,IAAWstC,EAAYt3C,KAAMpK,GAAQF,EAAAA,WAAWuhD,EAAcrhD,MAEtE4hD,IACJ/sC,IAAC,MAAA,CAAItC,UAAWmC,EAAQouB,MACtBzsB,SAAAxB,EAAAA,IAAC0M,GAAA,CACC9H,QAlBc,KACd3Z,EAAAA,WAAWmmB,GACbA,KAGFs7B,EAAgB,CAAA,QACD,IAAXntC,GACFA,EAAOvC,SAAS,MAYdsD,KAAK,IACLyG,KAAK,OACLvK,aACAoD,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BrV,YAAagmC,EAEZ/uB,SAAAovB,EAAW3C,UAKlB,OACE/oB,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GAEvD4B,SAAA,MAA0B,IAA1BmrC,GACC3sC,EAAAA,IAAC,MAAA,CACCtC,UAAWmC,EAAQiwB,SACnBviB,SAAU,KACN+B,EAAAA,cAAc1P,EAAQ,mBAC1BgF,QAAUpI,OAAqC,EAAxBmwC,EAEvBnrC,eAAC,MAAA,CAAI9D,UAAWmC,EAAQkwB,aAAevuB,SAAApB,GAAW2vB,YAI1C,IAAXxwB,GACCS,EAAAA,IAAC65B,GAAA,IACKt6B,EACJ/K,OAAQi7B,GAAUlwB,EAAO8wB,WAAaA,EAAW9wB,EAAO/K,OAAQA,GAChE67B,UAAW9wB,EAAO8wB,WAAaA,EAC/B7zB,WAAY+C,EAAO/C,YAAcA,EACjCoD,OAAQgI,EAAAA,UAAUhI,EAAQ,YAI7BitC,EAAYx3C,IAAI,CAAClK,EAAKqnB,KACrB,MAAMw6B,EAASx6B,IAAUq6B,EAAY52C,OAAS,EACxCg3C,EAAY7zC,OAAOjO,GACnB+hD,EAAevS,EAAOsS,GACtBxiD,EAAS+hD,EAAcS,GAC7B,QAAe,IAAXxiD,EAEF,OADA0C,QAAQC,MAAM,kCAAkC6/C,6BAC5CD,EACKD,EAEF,KAGT,MAAMI,EACJntC,EAAAA,IAAC07B,GAAA,CACCjxC,OAAAA,EACA+J,OAAAA,EACA67B,YACArzB,SAAWxE,GAAUk0C,EAAgB,IAAK/R,EAAQsS,CAACA,GAAYz0C,IAC/DA,MAAO00C,EAEP1wC,WACEA,GACA/R,GAAQ+R,YACR/R,GAAQ2iD,uBAAuB73C,KAAMmR,IAAUi0B,EAAOj0B,IAExDnc,YAAaqiD,EACbp/C,KAAMgyC,EAAqB,CAAEl2B,GAAI2jC,QAAc,EAC/CrtC,OAAQgI,EAAAA,UAAUhI,EAAQ,UAAUqtC,MAR/BA,GAYT,OAAID,IAEA9nC,KAAC,MAAA,CAAIxH,UAAWmC,EAAQmwB,sBACrBxuB,SAAA,CAAA2rC,EACAL,qBAA4BtrC,SAAAurC,MAFqBE,GAOjDE,MAIf,mDCzGO,UAIL5kD,QACAA,EAAA8kD,cACAA,EAAAxP,OACAA,EAAAyP,eACAA,EAAAC,WACAA,EAAApN,YACAA,EAAArzB,UACAA,GAAY,EAAAuzB,oBACZA,GAAsB,EAAAmN,yBACtBA,GAA2B,EAAAC,eAC3BA,GAAiB,EACjBC,qBAAsBC,EAAA3O,WACtBA,EAAa,QAAA4O,aACbA,EAAAC,oBACAA,EAAArgD,KACAA,EAAAoS,OACAA,EAAArV,YACAA,EAAAujD,mBACAA,GAAqB,EAAAC,YACrBA,EACAxN,sCAAuCyN,KACpC9iB,IAEH,MAAMrrB,EAAUnT,GAAU,CAAEnC,gBAEtB0jD,EAAsBtvC,GAAe,CACzCpU,cACAmT,UAAW,gBACXmB,qBAAsB,kBAGlBqvC,EAAYpgD,EAAAA,OAAuB,MAEnCoyC,EAAUr1C,EAAAA,QAAQ,IAAMyiD,GAAkBhiD,OAAOC,KAAKsyC,GAAS,CAACyP,EAAgBzP,IAEhFsQ,EAAmB,CACvBznC,EACA8L,KAAA,IAEG0Y,EACHxkB,OACAs4B,aACAnB,SACAqC,UACAC,cACArzB,YACAuzB,sBACAD,YAAaqN,EACbljD,YAAa0jD,EACb1N,sCAAuCv7B,EAAAA,YAAYgpC,EAAoBtnC,EAAM8L,KAGzE47B,EAA+B/wC,EAAAA,YACnC,CAAClS,EAAakjD,IAA6C3Q,IACrD8P,GAA4BviD,EAAAA,WAAWyyC,IAAO2Q,EAAO3Q,GACvDA,EAAG4Q,QAAQnjD,GAAO,OAElBuyC,GAAI6Q,gBAAgB,QAAQpjD,MAGhC,CAACqiD,IAIGgB,EAA2B3jD,EAAAA,QAC/B,IAAMujD,EAA6B,aAAc3Q,IACjD,CAAC2Q,IAIGK,EAAyB5jD,EAAAA,QAC7B,IAAMujD,EAA6B,WAAa1Q,GAAOA,EAAGgR,WAAa,GACvE,CAACN,IAGGryC,EAAMuB,GAAc,CACxBswC,EACAM,EACAM,EACAC,IAGIf,EAAuBC,GAAkC,CAC7D7gC,UAAW6gC,EAA+B7gC,UAC1C6hC,iBAAkB,IAChBhB,EAA+BgB,kBAC5BhB,EAA+BhZ,YAAc,GAAK,GAEvDia,UACEjB,EAA+BiB,YAAcjB,EAA+BkB,YAE1EC,EAAkB7yC,GAAmB,CACzCO,YAAakxC,GAAsBkB,WAAalB,EAAqB5gC,UACrErQ,eAAgBixC,GAAsBiB,mBAGlCI,EACJ9nC,EAAAA,oBAAoB4mC,KACnBthD,EAAAA,gBAAgBhE,KAChBmlD,GAAsB5gC,YACtB4gC,GAAsBkB,UAEzB7gD,EAAAA,UAAU,KACR,MAAMihD,EAAkBd,EAAUjgD,QAClC,GAAIyQ,UAAQswC,KAAqBxB,EAC/B,OAGF,MAAMyB,EAAgB,KACpBR,EAAuBO,IAGnBE,EAAgB,KACpBV,EAAyBQ,IAM3B,OAHAA,EAAgBxzC,iBAAiB,SAAUyzC,GAC3CE,OAAO3zC,iBAAiB,SAAU0zC,GAE3B,KACLF,EAAgBvzC,oBAAoB,SAAUwzC,GAC9CE,OAAO1zC,oBAAoB,SAAUyzC,KAEtC,CAAChB,EAAWV,EAA0BiB,EAAwBD,IAEjE,MAAMY,EAAgBvkD,EAAAA,QAAQ,IAAM,IAAImwB,IAAIuyB,GAAa,CAACA,IAEpDzN,EAAQjD,GAAamC,GAE3B,OACEh/B,EAAAA,IAAC,MAAA,CACCjE,MACA2B,UAAW0H,EAAKvF,EAAQi+B,qBAAsB,CAAE,CAACj+B,EAAQo+B,QAASuP,IAElEhsC,SAAA0D,EAAAA,KAAC46B,EAAM/C,KAAN,CAAWr/B,UAAWmC,EAAQL,QAAUS,EAAAA,kBAAkB,IAAKzS,EAAMsf,aAAalN,GAChF4B,SAAA,CAAAssC,SACEhO,EAAM9C,KAAN,CAAWt/B,UAAWmC,EAAQq+B,KAC7B18B,SAAAxB,MAAC8/B,EAAM5C,IAAN,CAAUx/B,UAAWmC,EAAQw+B,UAC3B78B,WAAQnM,IAAI,CAAClK,EAAKuc,KACjB,MAAM1f,SACJA,EAAA0G,SACAA,EAAA/F,MACAA,EAAAqiB,SACAA,EAAAqkC,WACAA,EAAa,OAAA3mD,MACbA,EAAAD,KACAA,EAAAs5C,MACAA,EAAQ,GAAAvC,mBACRA,GACE3B,IAAS1yC,IAAQ,CAAA,EACf+zC,EAAwB,WAAbl3C,GAA0Bq4C,GAA6B,IAAN34B,EAElE,OACE1H,EAAAA,IAAC8/B,EAAM3C,OAAN,CAECz/B,UAAW0H,EAAKvF,EAAQwc,OAAQ,CAC9B,CAACxc,EAAQ0+B,cAAeW,EACxB,CAACr/B,EAAQ2+B,cAAe6B,GAA6B,IAAN34B,IAEjD5Y,MAAO,CACLJ,WACA/F,QACAqiB,WACA5D,UAAWioC,EACXrnD,SAAUk3C,EAAW,SAAWl3C,EAChCU,QACAD,QAEFmc,QAAS3Z,EAAAA,WAAW8iD,GAAe,IAAMA,EAAY5iD,QAAO,KACxD8U,EAAAA,kBAAkB,CAAEqJ,GAAIk2B,EAAqBr0C,OAAM,IAEtDqW,uBAAYugC,EAAO,CAAEvpC,MAAO60C,IAAgBliD,MAjBxCA,SAwBjB6U,EAAAA,IAAC8/B,EAAM7C,KAAN,CAAWv/B,UAAWmC,EAAQ3H,KAC5BsJ,SAAAsL,EACCoU,EAAAA,SAAS,EAAIxZ,mBAAOu4B,GAAA,IAAqBkO,EAAiB,CAAA,EAAWzmC,GAAIvc,IAAKuc,KAE9ExC,EAAAA,KAAAC,EAAAA,SAAA,CACG3D,SAAA,CAAAutC,SACEjP,EAAM5C,IAAN,CAAUx/B,UAAWmC,EAAQ4+B,gBAC5Bj9B,SAAAxB,EAAAA,IAAC8/B,EAAM1C,KAAN,CAAW1/B,UAAWmC,EAAQuuB,aAAcsT,QAASxB,EAAQjqC,OAC3DuL,eAKNjZ,EAAQ8M,IAAI,CAACqR,EAAMgB,IAClB2Q,EAAAA,cAAC4nB,GAAA,IACKkO,EAAiBznC,EAAMgB,GAC3B/E,SAAUysC,EAAcnjD,IAAIyb,GAC5Bvc,IAAKF,EAAAA,WAAWk1C,GAAez5B,EAAKy5B,GAAez4B,KAItDgmC,GAAsBkB,WACrB5uC,EAAAA,IAAC8/B,EAAM5C,IAAN,CAAUx/B,UAAWmC,EAAQs+B,UAC5B38B,WAAAxB,IAAC8/B,EAAM1C,KAAN,CAAW1/B,UAAWmC,EAAQu+B,WAAYsD,QAASxB,EAAQjqC,OAC1DuL,SAAAxB,EAAAA,IAAC,OAAIjE,IAAK+yC,EAAiBpxC,UAAWmC,EAAQwM,OAC5C7K,SAAAxB,EAAAA,IAAC2K,GAAA,CAAgBhL,KAAK,OAAOC,OAAQgI,YAAUhI,EAAQ,2BAW7E,oBCrR0D,EACxDpF,SACAgH,cACG8tC,MAEH,MAAMzvC,EAAUnT,KAEhB,OACEsT,EAAAA,IAAC4qC,EAAAA,cAAA,CACCC,GAAIrwC,EACJiyB,QCpByB,IDqBzB8iB,cAAY,EACZzE,eAAa,EACbC,WAAY,CACVC,MAAOnrC,EAAQ,kBACforC,YAAaprC,EAAQ,yBACrBqrC,KAAMrrC,EAAQ,iBACdsrC,WAAYtrC,EAAQ,yBAGtB2B,WAAAxB,IAACkiC,GAAA,IAAeoN,EAAkB9tC,mCE9BR,CAC9B,OACA,QACA,SACA,MACA,SACA,WACA,YACA,cACA,2DCUsD,EACtDhJ,QACAwE,WACAvE,MACAC,MACA82C,OAAO,EACPre,mBACA5mC,cACAiS,aACAwR,aACAD,eACGyH,MAEH,MAAMa,EAAmB1X,GAAe,CACtCC,YAAasY,GACb3sB,cACAmT,UAAW,aACXmB,qBAAsB,mBAGlBgB,EAAUnT,GAAU,CAAEnC,gBAEtBklD,EAAiBjzC,GAAcwR,EAE/B0hC,EACJD,GACCxkD,EAAAA,WAAWkmC,IAAqBj3B,IAAiB1B,GAAS,GAAKg3C,GAAQre,GACvElmC,EAAAA,WAAWyN,IAAQzN,EAAAA,WAAWuN,IAAUA,GAASE,EAE9Ci3C,EACJF,GAAmBxkD,aAAWwN,IAAQxN,aAAWuN,IAAUA,GAASC,EAgBtE,OANA1K,EAAAA,UAAU,KACH6hD,EAAAA,gBAAgBJ,IACnBriD,QAAQC,MAAM,2CAEf,CAACoiD,IAGFxvC,EAAAA,IAAC8wB,GAAA,IACKtb,EACJzH,YACAvR,aACAwR,aACAvV,MACAC,MACAy4B,mBACAn0B,WACAxE,QACAjO,YAAa8rB,EAEb7U,WAAA0D,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ0hB,QACtB/f,SAAA,CAAAxB,EAAAA,IAAC,SAAA,CACCtC,UAAW0H,EAAKvF,EAAQipB,OAAQ,CAC9B,CAACjpB,EAAQwiC,gBAAiBqN,EAC1B,CAAC7vC,EAAQyiC,aAAcv0B,IAEzBpO,KAAK,SACLmB,SAAU4uC,EACV9qC,QAnCU,KAChB5H,EAASzE,IAAkBC,GAAS,GAAKg3C,EAAM/2C,EAAKC,KAoC9C8I,SAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQC,KACtB0B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,aAIfK,EAAAA,IAAC,SAAA,CACCtC,UAAW0H,EAAKvF,EAAQipB,OAAQ,CAC9B,CAACjpB,EAAQwiC,gBAAiBsN,EAC1B,CAAC9vC,EAAQyiC,aAAcv0B,IAEzBpO,KAAK,SACLmB,SAAU6uC,EACV/qC,QA7CU,KAChB5H,EAASzE,IAAkBC,GAAS,GAAKg3C,EAAM/2C,EAAKC,KA8C9C8I,SAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQC,KACtB0B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,8ECzDe,EACpCnS,OACAjD,cACAw3C,QACAzhC,OAAO,IACPuvC,kBAAiB,EACjBvzB,SACAiF,UACAuuB,eAAe,QACfC,kBAAiB,EACjBC,cAAa,EACbx1C,UAAS,EACTxS,WAAW,SACXwZ,WACAR,SACApB,SACAqwC,6BAA4B,EAC5BC,oBAAmB,EACnBC,qBAAoB,EACpB1jB,UAAU,IACVqe,iBAAgB,EAChBrlC,aACGylB,MAEH,MAAMrrB,EAAUnT,GAAU,CAAEnC,gBAEtB6lD,EAAyBzxC,GAAe,CAC5CC,YAAaukC,GACb54C,cACAmT,UAAW,mBACXmB,qBAAsB,WAGjBwxC,EAAkBC,GAAuB5tC,EAAAA,UAAS,GAEnD6tC,EAAcrlB,EAAU2f,IAAMrwC,EAC9Bq8B,EAAY5vB,EAAAA,oBAAoBqV,IAAW/vB,EAAAA,gBAAgBg1B,GAC3DmhB,EAAU50C,EAAAA,OAAuB,MAoBjC0iD,EAAiBnzC,EAAAA,YACpBkB,IACoB,WAAfA,EAAMkiB,WAAiC,IAAZhb,GAC7BA,KAGJ,CAACA,IAYH,OATA1X,EAAAA,UAAU,IACHmiD,QAAgC,IAAZzqC,GAA0B8qC,GAInD94C,SAAS+D,iBAAiB,UAAWg1C,GAC9B,IAAM/4C,SAASgE,oBAAoB,UAAW+0C,IAJ5C,IAAM,KAKd,CAACN,EAAkBzqC,EAAS8qC,EAAaC,IAG1CxwC,EAAAA,IAAC4qC,EAAAA,cAAA,CACCC,GAAI0F,EACJ9jB,UACAqe,gBACAC,WAAY,CACVC,MAAOnrC,EAAQ,eACforC,YAAaprC,EAAQ,sBACrBqrC,KAAMrrC,EAAQ,cACdsrC,WAAYtrC,EAAQ,yBAElBqrB,EAEJ1pB,SAAAxB,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQqjC,aACtB1hC,eAACivC,EAAAA,aAAA,CAAariD,QAAS+hD,EAAmBO,cAAY,EACpDlvC,SAAAxB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQS,GAAO,CAC3C,CAACT,EAAQ6iC,SAAuB,WAAb16C,GAAyBgoD,EAC5C,CAACnwC,EAAQ4iC,SAAuB,SAAbz6C,GAAoC,UAAbA,EAC1C,CAAC6X,EAAQ0iC,eAA6B,WAAbv6C,IAE3B8G,MAAO,CAAEkS,aACLf,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAAxB,EAAAA,IAAC,MAAA,CACCjE,IAAK2mC,EACLhlC,UAAW0H,EAAKvF,EAAQ2iC,aAAc3iC,EAAQ,YAAY7X,MAC1D2oD,YAAaV,EA7DO1xC,SACd,IAAZkH,GAAyBlH,EAAMrB,SAAWwlC,EAAQz0C,SACpDqiD,GAAoB,SA2DsD,EAClEM,UAAWX,EAxDO1xC,SACZ,IAAZkH,IAGAlH,EAAMrB,SAAWwlC,EAAQz0C,SAAWoiD,GACtC5qC,IAEF6qC,GAAoB,UAiDoD,EAE9D9uC,SAAA0D,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQ8iC,MAAO,CAC7B,CAAC9iC,EAAQkjC,gBAAiBlM,EAC1B,CAACh3B,EAAQmjC,kBAAmB6M,IAG7BruC,SAAA,CAAAuuC,KACC/vC,IAAC,MAAA,CAAItC,UAAWmC,EAAQX,MACtBsC,SAAAxB,EAAAA,IAACirB,GAAA,CACCrrB,OAAQgI,EAAAA,UAAUhI,EAAQ,gBAC1BrV,YAAa6lD,EACbrpC,KAAK,eACLjH,KAAK,QACL8E,QAASa,MAIdwB,EAAAA,oBAAoB86B,IACnB/hC,EAAAA,IAAC,KAAA,CACCtC,UAAW0H,EAAKvF,EAAQkiC,MAAO,CAC7B,CAACliC,EAAQ+iC,sBAAuBmN,IAGjCvuC,SAAAugC,IAGJ96B,sBAAoBzF,IAAaxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQtX,QAAUiZ,aACnEq1B,GACC72B,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQojC,cAAe,CACrC,CAACpjC,EAAQgjC,qBAAsBgN,IAGjCruC,SAAAxB,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQyc,OAAQzc,EAAQ,WAAWiwC,KAAiB,CAClE,CAACjwC,EAAQijC,cAAe+M,IAGzBruC,SAAAyF,EAAAA,oBAAoBqV,GAAUA,EAASiF,+BCzKlB,EAC1Cha,QACA/K,cAAa,EACbq0C,6BAA4B,EAC5BrjD,OACAoS,SACArV,cACAumD,aACAC,kBAEA,MAAMlxC,EAAUnT,GAAU,CAAEnC,gBAEtB+/C,EAAkB3rC,GAAe,CACrCpU,cACAmT,UAAW,YACXmB,qBAAsB,cAGjBmyC,EAAaC,GAAkBvuC,EAAAA,UAAS,GACzCqW,EAAOjrB,EAAAA,OAAuB,MAC9Bg7B,EAASh7B,EAAAA,OAA0B,MAEnCojD,EAAmB10C,GAA+B,IAAjB+K,EAAMtR,OAavCk7C,EAAkB,KACtBF,GAAe,GACfF,OAKF,OAFA/yC,GAAyB+a,EAAMo4B,EAAiBroB,KAG9C5jB,KAAC,MAAA,CAAIxH,UAAWmC,EAAQL,KACtBgC,SAAA,CAAAxB,EAAAA,IAAC,SAAA,CACCjE,IAAK+sB,EACLprB,UAAW0H,EAAKvF,EAAQipB,OAAQ,CAC9B,CAACjpB,EAAQujC,WAAYyN,EACrB,CAAChxC,EAAQiB,UAAWowC,EACpB,CAACrxC,EAAQgB,QAASmwC,IAEpBpsC,QAAUssC,OAAgC,EA3B5B3yC,IAClB,MAAM6yC,GAAWJ,EACjBzyC,EAAMuE,kBACNmuC,EAAeG,GACXA,EACFN,MAEAC,UAqBM9wC,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQC,KACtB0B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,aAGdqxC,IAAgBE,GACflxC,EAAAA,IAAC,OAAItC,UAAWmC,EAAQT,KAAMrD,IAAKgd,EACjCvX,SAAAxB,EAAAA,IAACsH,GAAA,CACCC,QACA3H,OAAQgI,EAAAA,UAAUhI,EAAQ,QAC1BrV,YAAa+/C,EACb1lC,QAASusC,wBCnDd,UAAqC34C,MAC1CA,EAAA64C,QACAA,EAAU,OAAAtjC,UACVA,GAAY,EAAAmD,WACZA,GAAa,EAAA1U,WACbA,GAAa,EAAAmX,YACbA,EAAc,GAAA0c,UACdA,EACA77B,OAAAA,EAAAA,OACAoL,EAAApS,KACAA,EAAAwP,SACAA,EAAA22B,aACAA,EAAAppC,YACAA,IAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtB+mD,EAA6B3yC,GAAe,CAChDC,YAAaklC,GACbv5C,cACAmT,UAAW,uBACXmB,qBAAsB,iBAGjBrE,EAAQiI,GAAaC,EAAAA,UAAS,GAE/B3G,EAAMjO,EAAAA,OAAO,MAEbyjD,EAAgB,KACpB9uC,GAAU,IAKZ,OAFArE,GAAkBrC,EAAKw1C,EAAe1xC,EAAQL,MAG5C0F,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EACTvF,EAAQL,KACRK,EAAQwxC,GACR72C,GAAUqF,EAAQqD,KAClB6K,IAAcvR,GAAcqD,EAAQ4N,QACpCyD,GAAcrR,EAAQ8jC,SACtBnnC,GAAcqD,EAAQiB,aAEpBb,EAAAA,kBAAkBzS,EAAMoS,GAG5B4B,SAAA,CAAAxB,EAAAA,IAAC0jC,GAAA,CACClrC,QACAgC,SACAgC,aACAmX,cACAnR,SAAWhU,GAAUiU,EAAUjU,KAGhCgM,GACCwF,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQ+jC,cAAe7nC,MACrCyF,SAAAxB,EAAAA,IAACyzB,GAAA,CACClpC,YAAa+mD,EACb94C,QACA63B,YACA77B,OAAAA,EACAm/B,eACA32B,WACAyI,QAAS8rC,QAMrB,qCCxEkD,EAChDhqC,QACA/K,cAAa,EACbq0C,6BAA4B,EAC5BW,gBACAC,WACAlnD,iBACG+B,MAEH,MAAMuT,EAAUnT,GAAU,CAAEnC,gBAEtBsxC,EAAuBl9B,GAAe,CAC1CpU,cACAmT,UAAW,iBACXmB,qBAAsB,gBAGlByrC,EAAkB3rC,GAAe,CACrCpU,cACAmT,UAAW,YACXmB,qBAAsB,gBAoBxB,OACEmB,EAAAA,IAACuB,GAAA,CACC/E,WAAYA,GAAck1C,EAAAA,aAAanqC,GACvChd,YAAasxC,KACTvvC,EACJoU,QAAS8wC,GAtBU,GAAGvsC,eAAcP,oBACtC1E,EAAAA,IAAC,SAAA,CACCtC,UAAW0H,EAAKvF,EAAQipB,OAAQ,CAC9B,CAACjpB,EAAQujC,WAAYyN,EACrB,CAAChxC,EAAQiB,UAAWmE,EAAazI,WACjC,CAACqD,EAAQgB,QAASoE,EAAatC,WAEjC7B,SAAUmE,EAAazI,cACnByD,EAAAA,kBAAkBgF,EAAazX,KAAMyX,EAAarF,WAClD8E,EAEJlD,SAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQC,KACtB0B,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,cAYZ6B,SAAA,EAAGiE,eACFzF,IAACsH,GAAA,CAAKC,QAAcjH,KAAMmxC,EAAUlnD,YAAa+/C,EAAiB1lC,QAASa,sBCtD/B,EAClDjE,WACA7B,OACAiN,eAAc,EACdvB,OACA02B,QACAniC,SACAU,OAAO,IACP9S,OACAsS,QAAgB,WAATH,EAAoB,UAAUA,SAAS,GAC9CpV,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAEtBonD,EAAU1qC,EAAAA,oBAAoBoE,GAC9BumC,EAAW3qC,EAAAA,oBAAoB86B,GAErC,OACE78B,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQS,GAAOT,EAAQF,GAAO,CAC1D,CAACE,EAAQqM,SAAUU,EACnB,CAAC/M,EAAQmkC,WAAY4N,EACrB,CAAC/xC,EAAQkkC,UAAW4N,OAElB1xC,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAA,CAAAvW,EAAAA,WAAW6U,MAASE,IAAC,MAAA,CAAItC,UAAWmC,EAAQC,KAAO0B,SAAApB,GAAWN,OAC/DoF,KAAC,MAAA,CAAIxH,UAAWmC,EAAQ3H,KACrBsJ,SAAA,CAAAowC,GACC5xC,EAAAA,IAAC,OAAA,CAAKtC,UAAWmC,EAAQkiC,SAAWzyB,EAAAA,cAAc1P,EAAQ,SACvD4B,SAAAugC,IAGJ4P,GACC3xC,EAAAA,IAAC,OAAA,CAAKtC,UAAWmC,EAAQwL,QAAUiE,EAAAA,cAAc1P,EAAQ,QACtD4B,SAAA6J,IAGJpE,sBAAoBzF,IAAaxB,MAAC,OAAItC,UAAWmC,EAAQtX,QAAUiZ,oFC3B5B,EAC9ChN,OAAAA,EAAS,KACTgE,QAAQ8sC,GACRtoC,WACAxP,OACAoS,SACApD,aACAuR,YACApL,WACApY,cACAsnD,wBAAwB,QACxB14B,iBAAiB,uBACdzE,MAEH,MAAM7U,EAAUnT,GAAU,CAAEnC,gBAEtB8rB,EAAmB1X,GAAe,CACtCC,YAAasY,GACb3sB,cACAmT,UAAW,aACXmB,qBAAsB,eAGlBizC,EAAyBnzC,GAAe,CAC5CpU,cACAmT,UAAW,mBACXmB,qBAAsB,gBAGjB0e,EAAYC,GAAiB9a,EAAAA,UAAS,IACtCkE,EAAWgO,GAAclS,EAAAA,UAAS,GAEnCqW,EAAOjrB,EAAAA,OAAuB,MAC9B0tB,EAAe1tB,EAAAA,OAAuB,MACtCinB,EAAWjnB,EAAAA,OAAyB,MAEpC+H,EAAgBJ,EAAa+C,GAE7BrJ,EAActE,EAAAA,QAClB,IAAM2N,GAAOrJ,aAAeyG,EAAwBC,GACpD,CAACA,EAAe2C,GAAOrJ,cAGnByU,EAAc,KAClB4Z,GAAc,IA4EhB,OAFAxf,GAAyB+a,EAAMnV,EAAa4X,GAG1CtW,OAAC,OAAIxH,UAAWmC,EAAQL,QAAUS,oBAAkBzS,EAAMoS,GACxD4B,SAAA,CAAA0D,EAAAA,KAAC,MAAA,CACCxH,UAAW0H,EAAKvF,EAAQ0lC,uBAAwB,CAC9C,CAAC1lC,EAAQ2lC,uBAAwBhpC,EACjC,CAACqD,EAAQ+lC,eAAgB73B,EACzB,CAAClO,EAAQ8lC,eAAgBhjC,GAAY4a,GAAc3W,IAErD7K,IAAKyf,EACL5W,QAAUpI,OAAgD,EAAnC,IAAMghB,GAAeD,GAE5C/b,SAAA,CAAAxB,EAAAA,IAAC,OAAItC,UAAWmC,EAAQ2kC,KACtBhjC,SAAAxB,EAAAA,IAACu8B,GAAA,CAAKptC,kBAER6Q,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQqB,MAAO,CAC7B,CAACrB,EAAQ4lC,IAAKloB,EACd,CAAC1d,EAAQ6lC,cAAe33B,IAG1BvM,SAAAxB,EAAAA,IAACN,GAAA,CAAKC,KAAK,sBAIfK,EAAAA,IAAC4V,GAAA,CACCpd,MAAO3C,EACPc,KAAMD,GAAavH,GAEnB4M,IAAKgZ,EACLvY,aACAuR,YACApL,SAAU4a,GAAc5a,EACxB/C,OAAQgI,EAAAA,UAAUhI,EAAQ,SAC1BrV,YAAa8rB,EACbrZ,SA3Ge,CAACgmB,EAAoBzkB,KAGxC,GAAmB,WAAfA,EAAMoB,KAAmB,CAC3B,MAAM2f,EAAW0D,EAAW7tB,QAAQ,UAAW,IAC/C,IAAIyvC,EAAsBz1C,EAE1B,MAAMm1C,EAAkBtwC,EAAkB7E,GAK1C,QAAwB,IAApBm1C,EAA+B,CAGjC,MAAMyN,EAAsBzN,EAAgB/0C,UAAUgG,KAAMS,GACtDspB,EAASrpB,QAAUD,EAASC,OACvBqpB,EAASl0B,WAAW4K,GAEpBA,EAAS5K,WAAWk0B,IAKzB0yB,EAAkB1yB,EAASl0B,WAAWk5C,EAAgBj1C,UAEvD0iD,GAAwBC,IAC3BpN,OAAsB,EAE1B,CAEA5nC,EAAS3G,EAAsBipB,EAAUslB,GAAsBrmC,EACjE,GA4EI8V,QAnDe9V,IACnBqW,GAAW,QACgB,IAAvBF,EAAWL,SACbK,GAAYL,QAAQ9V,IAiDlB+V,OA7Cc/V,IAClBqW,GAAW,QACe,IAAtBF,EAAWJ,QACbI,GAAYJ,OAAO/V,OA2CbmW,IAGL6I,GACCvd,EAAAA,IAAC,MAAA,CAAItC,UAAWmC,EAAQkmC,kBAAmBhqC,IAAKgd,EAC9CvX,SAAAxB,EAAAA,IAAC2kC,GAAA,CACCC,oBAAqBz1C,EACrBwkB,YAAak+B,EACbr9C,OAAAA,EACAjK,YAAaunD,EACb34B,iBACAnc,SAtFW,CAACi1C,EAA0B1zC,KAC1C0zC,EAAa9iD,cAAgBA,GAC/B6N,EACE,CACErH,YACEs8C,EAAa5iD,WAAamJ,EAAMnJ,SAC5B,GACAgH,EAAsBR,GAAeF,YAC3CtG,SAAU4iD,EAAa5iD,SACvBF,YAAa8iD,EAAa9iD,aAE5BoP,GAGJqF,IAEA,MAAM8J,EAAQqH,GAAU9mB,QACV,OAAVyf,GACFA,EAAM5T,SAqEAolB,UAAWtb,wBCrLhB,UAA2CpC,SAChDA,EAAAhJ,MACAA,EAAA05C,UACAA,EAAA5xC,KACAA,EAAAuN,UACAA,EAAArR,WACAA,GAAa,EAAAuR,UACbA,GAAY,EAAAvgB,KACZA,EAAAoS,OACAA,EAAArV,YACAA,EAAAyS,SACAA,IAEA,MAAM6C,EAAUnT,GAAU,CAAEnC,gBAE5B,OACE2a,EAAAA,KAAC,QAAA,CACCxH,UAAW0H,EAAKvF,EAAQiQ,MAAO7kB,EAAAA,WAAWqV,IAAST,EAAQS,GAAO,CAChE,CAACT,EAAQrD,YAAaA,IAExB21C,QAAS,GAAGD,MAAc15C,OACtByH,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAAxB,EAAAA,IAAC,QAAA,CACCsJ,GAAI,GAAG4oC,MAAc15C,IACrBmH,KAAK,QACLnH,QACArK,KAAM+jD,EACN1kC,QAASK,EACT/M,SAAUtE,EACVQ,SAAWuB,GAAUvB,EAASuB,EAAMrB,OAAO1E,OAC3CkF,UAAW0H,EAAKvF,EAAQ6N,MAAO,CAC7B,CAAC7N,EAAQrD,YAAaA,EACtB,CAACqD,EAAQkO,WAAYA,MAGxB9G,sBAAoBzF,IAAaxB,MAAC,QAAKtC,UAAWmC,EAAQtX,QAAUiZ,eAG3E,gCpNkE2C,wFqNlGpC,UAA4C5G,QACjDA,EAAApC,MACAA,EAAAgE,WACAA,GAAa,EAAA0U,WACbA,GAAa,EAAAnD,UACbA,GAAY,EAAAqkC,oBACZA,GAAsB,EAAAplC,aACtBA,EAAe,OAAA1M,KACfA,EAAO,IAAAV,OACPA,EAAApS,KACAA,EAAAjD,YACAA,EAAAyS,SACAA,IAEA,MAAM6C,EAAUnT,GAAU,CAAEnC,gBAEtB8nD,EAAmBxxC,IACnB5V,EAAAA,WAAW4V,GAAQhD,iBACrBgD,EAAOhD,cAAc/O,MAAMwjD,YAAY,yBAA0B,GAAGzxC,EAAOoR,iBAC3EpR,EAAOhD,cAAc/O,MAAMwjD,YAAY,0BAA2B,GAAGzxC,EAAO0xC,kBAC5E1xC,EAAOhD,cAAc/O,MAAMwjD,YAAY,wBAAyB,GAAGzxC,EAAO2xC,gBAC1E3xC,EAAOhD,cAAc/O,MAAMwjD,YAAY,uBAAwB,GAAGzxC,EAAO4xC,iBAIvEC,EAAY71C,GAA6B,CAC7CI,eAAiBC,GAAWm1C,EAAgBn1C,EAAOy1C,cAAc,IAAI9yC,EAAQgB,aAG/E,OACEb,EAAAA,IAAC,MAAA,CACCjE,IAAK22C,EACLh1C,UAAW0H,EAAKvF,EAAQmmC,SAAUnmC,EAAQS,GAAO,CAC/C,CAACT,EAAQ6L,eAAiC,UAAjBsB,EACzB,CAACnN,EAAQ4N,SAAUM,EACnB,CAAClO,EAAQ8jC,UAAWzyB,EACpB,CAACrR,EAAQsmC,WAAYiM,OAEnBnyC,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAA5G,EAAQvF,IAAKylB,IACZ,MAAM83B,EAAWx5C,OAAO0hB,EAAOtiB,OACzBq6C,EAAmB/3B,EAAOte,YAAcA,EACxCs2C,EAAiBh4B,EAAOtiB,QAAUA,EAExC,OACE0M,EAAAA,KAAC,SAAA,CACCnJ,IAAK+2C,EAAiBT,OAAkB,EAExC1yC,KAAK,SACLjC,UAAW0H,EAAKvF,EAAQib,OAAQ,CAC9B,CAACjb,EAAQgB,QAASiyC,EAClB,CAACjzC,EAAQiB,UAAW+xC,IAEtB/xC,SAAU+xC,EACVjuC,QAAUiuC,OAAkD,EAA/B,IAAM71C,EAAS8d,EAAOtiB,UAC/C8W,EAAAA,cAAc1P,EAAQgzC,GAEzBpxC,SAAA,CAAAyF,EAAAA,oBAAoB6T,EAAOhb,SAC1BE,IAAC,MAAA,CAAItC,UAAWmC,EAAQumC,WAAa5kC,SAAApB,GAAW0a,EAAOhb,cAExD,MAAA,CAAIpC,UAAWmC,EAAQwmC,WAAa7kC,WAAOsO,UAbvC8iC,MAmBjB,yCC5EwC,EACtCpxC,WACAkJ,QACApK,OAAO,IACPR,OACAkN,eAAe,QACfs7B,QACA/9C,cACAqV,SACApS,WAEA,MAAMqS,EAAUnT,GAAU,CAAEnC,gBAE5B,OACE2a,EAAAA,KAAC,OAAA,CACCxH,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQS,GAAOT,EAAQ6K,OACjDzK,EAAAA,kBAAkBzS,EAAMoS,GAE3B4B,SAAA,CAAAyF,sBAAoBzF,IAAaxB,EAAAA,IAAC,QAAKtC,UAAWmC,EAAQwL,KAAO7J,aACjEyF,EAAAA,oBAAoBnH,MACnBE,IAAC,OAAA,CAAKtC,UAAW0H,EAAKvF,EAAQC,KAAuB,SAAjBkN,GAA2BnN,EAAQwoC,UACpE7mC,SAAApB,GAAWN,KAGfmH,sBAAoBqhC,IAAUtoC,EAAAA,IAAC,QAAKtC,UAAWmC,EAAQyoC,MAAQ9mC,SAAA8mC,iBCjBhD,EACpB9rC,cAAa,EACbqR,aAAY,EACZE,aAAY,EACZvV,QACAgJ,WACAyM,gBAAgB,QAChBvD,QAAQ,UACRpK,OACA9S,OACAjD,cACAqV,SACA5C,eAEA,MAAM6C,EAAUnT,GAAU,CAAEnC,gBAI5B,OACE2a,EAAAA,KAAC,QAAA,CACCxH,UAAW0H,EAAKvF,EAAQL,KAAMK,EAAQ6K,GAAQzf,EAAAA,WAAWqV,IAAST,EAAQS,GAAO,CAC/E,CAACT,EAAQiB,UAAWtE,EACpB,CAACqD,EAAQ2N,SAAUK,EACnB,CAAChO,EAAQ4N,SAAUM,OAEjB9N,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAAxB,EAAAA,IAAC,OAAA,CAAKtC,UAAWmC,EAAQ2oC,OACvBhnC,SAAAxB,EAAAA,IAAC,QAAA,CACCL,KAAK,WACLxR,KAAMqK,EACNkF,UAAWmC,EAAQ6N,MACnB1Q,SAAUR,OAAa,EAhBV,IAAMQ,EAAS,CAAE7O,KAAMqK,EAAOo2C,WAAY/gC,IAiBvDL,QAASK,EACT/M,SAAUtE,KACN8S,EAAAA,cAAc1P,EAAQ,aAG7BqH,EAAAA,oBAAoBzF,IACnBxB,EAAAA,IAAC,OAAA,CACCtC,UAAW0H,EACTvF,EAAQiQ,MACRjQ,EAA0B,SAAlBoO,EAA2B,YAAc,eAGlDzM,8DCtDyC,EAClD6J,OACA+C,cAAa,EACbja,OACA4+C,cACAnuC,UACAhF,SACApS,OACAjD,kBAEA,MAAMsV,EAAUnT,GAAU,CAAEnC,gBAE5B,OACEyV,EAAAA,IAAC,MAAA,CACCtC,UAAW0H,EAAKvF,EAAQL,KAAM4O,GAAcvO,EAAQ8oB,aAChD1oB,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,WAAA0D,KAAC,MAAA,CAAIxH,UAAWmC,EAAQmhB,UACtBxf,SAAA,CAAAxB,MAAC,MAAA,CAAItC,UAAWmC,EAAQwL,KAAMzG,UAC3BpD,cAAgB,IAAhBuxC,IACC/yC,IAACurB,GAAA,CAAgBC,YAAaunB,EAAcvxC,SAAA6J,IAE5CA,IAGHlX,KACC6L,IAAC,IAAA,CAAEtC,UAAWmC,EAAQ1L,KAAM03C,KAAM13C,EAAK60B,KAAM9rB,OAAO,SAAS4uC,IAAI,sBAC9DtqC,cAAqB,IAArBrN,EAAK6+C,cACJhzC,IAACurB,GAAA,CAAgBC,YAAar3B,EAAK6+C,YACjCxxC,eAAC9B,GAAA,CAAKC,KAAK,oBAGbK,IAACN,GAAA,CAAKC,KAAK,+GCjBiB,EACxCA,OAAO,QACPoiC,QACA12B,OACA7J,WACAirB,UCxC6B,IDyC7BsjB,kBAAiB,EACjBkD,sBAAqB,EACrBzlD,OACAoS,SACArV,cACAkb,UACAytC,gBAEA,MAAMrzC,EAAUnT,GAAU,CAAEnC,gBAEtB6lD,EAAyBzxC,GAAe,CAC5CpU,cACAmT,UAAW,mBACXmB,qBAAsB,YAaxB,OAVA9Q,EAAAA,UAAU,KACR,IAAK0L,OAAO05C,SAAS1mB,IAAY/tB,EAAAA,QAAQw0C,GACvC,OAGF,MAAME,EAAYjE,OAAOziB,WAAW,IAAMwmB,IAAazmB,GAEvD,MAAO,IAAM0iB,OAAO7iB,aAAa8mB,IAChC,IAGDluC,EAAAA,KAAC,MAAA,CACCxH,UAAWmC,EAAQL,KACnBoF,QAASquC,EAAqBxtC,OAAU,KACpCxF,EAAAA,kBAAkBzS,EAAMoS,GAE5B4B,SAAA,CAAAxB,MAAC,MAAA,CAAItC,UAAW0H,EAAKvF,EAAQ47B,cAAe57B,EAAQF,IAClD6B,eAAC9B,GAAA,CAAKC,KAAM,UAAUA,eAEvB,MAAA,CACE6B,SAAA,CAAAyF,EAAAA,oBAAoB86B,IAAU/hC,EAAAA,IAAC,OAAItC,UAAWmC,EAAQkiC,MAAQvgC,SAAAugC,IAC9D96B,EAAAA,oBAAoBoE,IAASrL,EAAAA,IAAC,OAAItC,UAAWmC,EAAQwL,KAAO7J,SAAA6J,IAC5DpE,sBAAoBzF,IAAaxB,MAAC,OAAItC,UAAWmC,EAAQtX,QAAUiZ,gBAErEuuC,GAAkB9kD,EAAAA,WAAWwa,UAC3B,MAAA,CAAI/H,UAAWmC,EAAQX,MACtBsC,SAAAxB,EAAAA,IAACirB,GAAA,CACClkB,KAAK,eACLjH,KAAK,eACLvV,YAAa6lD,EACbxrC,QAASa,sEE5D6B,EAChDjE,WACAE,YAAY,QACZtG,YAAY,MACZowB,cACAE,cAAc,UACdC,cAAc,OACdG,cACAtvB,cAAa,EACbsF,YACAvX,iBACG2gC,MAEH,MAAM2Q,EAAuBl9B,GAAe,CAC1CC,YAAayI,GACb9c,cACAmT,UAAW,iBACXmB,qBAAsB,gBAGlBmtB,EAAqBrtB,GAAe,CACxCpU,cACAmT,UAAW,eACXmB,qBAAsB,gBAGxB,OACEmB,EAAAA,IAACuB,GAAA,CACCb,QAASc,EACTpG,YACAsG,YACAI,UAAW,IAAKA,EAAW4pB,eAC3BlvB,WAAYA,IAAeyK,EAAAA,oBAAoBukB,GAC/CxpB,kBAAgB,EAChBzX,YAAasxC,KACT3Q,EAEJ1pB,SAAAxB,EAAAA,IAACsrB,GAAA,CACCvkB,KAAM2kB,EACN/rB,KAAMgsB,EACNtgB,KAAMmgB,EACNlrB,KAAMwrB,EACNvhC,YAAayhC,EACbpsB,OAAQgI,EAAAA,UAAUsjB,EAAUtrB,OAAQ,oClNkFX,CAACpS,EAAwB,CAAA,IACxDlC,OAAO61C,YACL71C,OAAOuqC,QAAQroC,GAAM6H,IAAI,EAAElK,EAAKqN,KAC7B1L,EAAAA,SAAS0L,IAAU8c,EAAAA,iBAAiB9c,IAAWvN,EAAAA,WAAWuN,GACvD,CAAC,QAAQvB,GAAiB9L,KAAQqN,GAClC,4MAI6B66C,GACrC,IAAIvhB,OAAO,UAAU,CAAC,cAAe,UAAWuhB,GAAQp6C,KAAK,ogBAhG7B,CAAC1B,EAAsBmW,KACvD,MAAMgwB,EAAKnmC,EACL0D,EAAehD,GAAgBV,IAE7B+7C,aAAcC,GAA4Bt4C,EAClDyiC,EAAG8V,QAAS,EACZ,MAAQF,aAAcG,GAA+Bx4C,EACrDyiC,EAAG8V,QAAS,EAEZ,MAAME,EAAcH,IAA4BE,EAEhD,GAAIC,QAAyB,IAAVhmC,EAAqB,CACtC,MAAMimC,EAASjW,EAAGkW,wBACZC,EAAmB54C,EAAa24C,wBAChCE,EAAYH,EAAOnrD,IAAMqrD,EAAiBrrD,IAChD,GAAIklB,EAAM6kC,aAAe7U,EAAG6U,aAAeuB,EACzC,OAAO,CAEX,CAEA,OAAOJ,wQA8D4B,CAAC56C,EAAamb,IACjDnb,EAAI7C,OAASge,EAAYnb,EAAItC,MAAM,EAAGyd,GAAanb,gHmNlJ7B,CAAIi7C,EAASC,IACnCnpD,EAAAA,QACE,IAAOI,aAAW8oD,IAAQ9oD,EAAAA,WAAW+oD,GAAOxnD,EAAAA,YAAYunD,EAAKC,GAAOD,GAAOC,EAC3E,CAACD,EAAKC"}