import React from 'react'; import { FontStyleTypeModel, ThemeTypesModel } from '../../Themes/theme_types'; import { Size, Color, stickerOptions } from '../../types'; type kindInteraction = 'mouse' | 'keyboard'; type availableSize = Size.s | Size.m | Size.l; type dayTime = 'day' | 'night'; interface ariaTypes { 'aria-selected'?: boolean; 'aria-required'?: boolean; 'aria-haspopup'?: string; 'aria-expanded'?: boolean; 'aria-label'?: string; 'aria-disabled'?: boolean; 'aria-invalid'?: boolean; role?: string; 'aria-multiselectable'?: boolean; } interface MultiselectItemPropTypes { label: string; value: string; isDisabled?: boolean; counter?: string; imgSource?: string; icon?: string; className?: string; } interface MultiselectProps { selectItems: MultiselectItemPropTypes[]; type?: 'tags' | 'text' | 'counter'; size?: availableSize; color?: Color.green | Color.dark | Color.blue; controlType?: 'checkbox' | 'toggle' | 'icon'; label?: string; description?: string; placeholder?: string; errorMessage?: string; isResponsive?: boolean; errorState?: 'default' | 'focus out'; isDisabled?: boolean; isInverse?: boolean; icon?: string; isError?: boolean; itemsIcon?: string; displayTickAllBtn?: boolean; theme?: ThemeTypesModel; stickerOptions?: stickerOptions; className?: string; isRequired?: boolean; placeholderTemplate?: () => React.ReactElement; selectedTemplate?: (selectedItem: MultiselectItemPropTypes[] | null) => React.ReactElement; selectOptionTemplate?: (optionItem: MultiselectItemPropTypes, state: { isActive: boolean; size: availableSize; color: Color.green | Color.dark | Color.blue; isInverse: boolean; theme: ThemeTypesModel; }) => React.ReactElement; valueChanged?: (selectedItems: MultiselectItemPropTypes[]) => void; } interface ContainerPropTypes { styled: ModelView; isDisabled: boolean; } interface LabelPropTypes { styled: ModelView; isRequired: boolean; dayTime: dayTime; } interface DescriptionPropTypes { styled: ModelView; dayTime: dayTime; } interface ValueContainerPropTypes { styled: ModelView; type: 'tags' | 'text'; isFocused: boolean; isOpened: boolean; dayTime: dayTime; isError: boolean; size: availableSize; } interface ValueTextPropTypes { styled: ModelView; size: availableSize; dayTime: dayTime; } interface PlaceholderPropTypes { size: availableSize; styled: ModelView; dayTime: dayTime; } interface DropIconPropTypes { size: availableSize; styled: ModelView; dayTime: dayTime; } interface TagsTypes { size: availableSize; styled: ModelView; } interface inputViewParams { placeholderColor?: string; textColor?: string; borderColor?: string; backgroundColor?: string; } interface inputStates { default: inputViewParams; hover: inputViewParams; active: inputViewParams; errorDefault: inputViewParams; errorHover: inputViewParams; } interface InputParams { paddingLeft: number; paddingTop: number; paddingRight: number; paddingBottom: number; minHeight: number; } interface IconParams { width: number; height: number; } interface dayTheme { label: { color: string; }; description: { color: string; }; errorMessage: { color: string; }; input: inputStates; chevronIconColor: string; } interface ModelView { style: { day: dayTheme; night: dayTheme; }; size: { label: { font: FontStyleTypeModel; }; description: { font: FontStyleTypeModel; }; s: { font: FontStyleTypeModel; input: InputParams; inputWithTags: InputParams; icon: IconParams; iconContainer: IconParams; tagsContainer: { top: number; }; tagWrapper: { margin: number; }; }; m: { font: FontStyleTypeModel; input: InputParams; inputWithTags: InputParams; icon: IconParams; iconContainer: IconParams; tagsContainer: { top: number; }; tagWrapper: { margin: number; }; }; l: { font: FontStyleTypeModel; input: InputParams; inputWithTags: InputParams; icon: IconParams; iconContainer: IconParams; tagsContainer: { top: number; }; tagWrapper: { margin: number; }; }; }; } export type { kindInteraction, ariaTypes, MultiselectItemPropTypes, MultiselectProps, ContainerPropTypes, LabelPropTypes, DescriptionPropTypes, ValueContainerPropTypes, ValueTextPropTypes, PlaceholderPropTypes, DropIconPropTypes, TagsTypes, ModelView, };