intelicoreact 2.0.19 → 2.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/dist/es/Atomic/FormElements/ActionAlert/ActionAlert.js.map +1 -1
  2. package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js.map +1 -1
  3. package/dist/es/Atomic/FormElements/Calendar/Calendar.js +2 -1
  4. package/dist/es/Atomic/FormElements/Calendar/Calendar.js.map +1 -1
  5. package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.js.map +1 -1
  6. package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js.map +1 -1
  7. package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js +6 -5
  8. package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js.map +1 -1
  9. package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +2 -1
  10. package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js.map +1 -1
  11. package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js +35 -26
  12. package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js.map +1 -1
  13. package/dist/es/Atomic/FormElements/Dropdown/_utils.js +14 -9
  14. package/dist/es/Atomic/FormElements/Dropdown/_utils.js.map +1 -1
  15. package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js.map +1 -1
  16. package/dist/es/Atomic/FormElements/FileLoader/FileLoader.js.map +1 -1
  17. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -1
  18. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js.map +1 -1
  19. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js +15 -13
  20. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js.map +1 -1
  21. package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -1
  22. package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js.map +1 -1
  23. package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +23 -19
  24. package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js.map +1 -1
  25. package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -1
  26. package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js.map +1 -1
  27. package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js.map +1 -1
  28. package/dist/es/Atomic/FormElements/Input/Input.js.map +1 -1
  29. package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js +0 -1
  30. package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js.map +1 -1
  31. package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.js.map +1 -1
  32. package/dist/es/Atomic/FormElements/InputColor/InputColor.js.map +1 -1
  33. package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js +28 -25
  34. package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js.map +1 -1
  35. package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js +2 -1
  36. package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js.map +1 -1
  37. package/dist/es/Atomic/FormElements/InputDateRange/components/DateInput.js.map +1 -1
  38. package/dist/es/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +1 -1
  39. package/dist/es/Atomic/FormElements/InputDateRange/components/OpenedPart.js.map +1 -1
  40. package/dist/es/Atomic/FormElements/InputDateRange/components/SelectItem.js.map +1 -1
  41. package/dist/es/Atomic/FormElements/InputLink/InputLink.js.map +1 -1
  42. package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js +16 -14
  43. package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js.map +1 -1
  44. package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.js.map +1 -1
  45. package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js +3 -2
  46. package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js.map +1 -1
  47. package/dist/es/Atomic/FormElements/Label/Label.js.map +1 -1
  48. package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.js.map +1 -1
  49. package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.js.map +1 -1
  50. package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.js.map +1 -1
  51. package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js.map +1 -1
  52. package/dist/es/Atomic/FormElements/RadioInput/RadioInput.js.map +1 -1
  53. package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js.map +1 -1
  54. package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js +2 -1
  55. package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js.map +1 -1
  56. package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.js.map +1 -1
  57. package/dist/es/Atomic/FormElements/RangeList/RangeList.js.map +1 -1
  58. package/dist/es/Atomic/FormElements/RangeList/partial/RangeListRow.js.map +1 -1
  59. package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js +9 -6
  60. package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js.map +1 -1
  61. package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js +4 -2
  62. package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js.map +1 -1
  63. package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.js.map +1 -1
  64. package/dist/es/Atomic/FormElements/Switcher/Switcher.js.map +1 -1
  65. package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js.map +1 -1
  66. package/dist/es/Atomic/FormElements/SwitcherHide/SwitcherHide.js.map +1 -1
  67. package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js.map +1 -1
  68. package/dist/es/Atomic/FormElements/SwitcherRange/SwitcherRange.js.map +1 -1
  69. package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -1
  70. package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js.map +1 -1
  71. package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js.map +1 -1
  72. package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js.map +1 -1
  73. package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.js.map +1 -1
  74. package/dist/es/Atomic/FormElements/Text/Text.js.map +1 -1
  75. package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.js.map +1 -1
  76. package/dist/es/Atomic/FormElements/Textarea/Textarea.js.map +1 -1
  77. package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +4 -2
  78. package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js.map +1 -1
  79. package/dist/es/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js.map +1 -1
  80. package/dist/es/Atomic/FormElements/TimeRange/TimeRange.js.map +1 -1
  81. package/dist/es/Atomic/FormElements/UserContacts/UserContacts.js.map +1 -1
  82. package/dist/es/Atomic/Layout/Header/Header.js.map +1 -1
  83. package/dist/es/Atomic/Layout/MainMenu/MainMenu.js.map +1 -1
  84. package/dist/es/Atomic/Layout/Spinner/Spinner.js.map +1 -1
  85. package/dist/es/Atomic/UI/Accordion/Accordion.js.map +1 -1
  86. package/dist/es/Atomic/UI/Accordion/AccordionItem.js.map +1 -1
  87. package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js +2 -1
  88. package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js.map +1 -1
  89. package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.js.map +1 -1
  90. package/dist/es/Atomic/UI/Alert/Alert.js.map +1 -1
  91. package/dist/es/Atomic/UI/Arrow/Arrow.js.map +1 -1
  92. package/dist/es/Atomic/UI/Button/Button.js.map +1 -1
  93. package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.js.map +1 -1
  94. package/dist/es/Atomic/UI/Chart/Chart.js +2 -1
  95. package/dist/es/Atomic/UI/Chart/Chart.js.map +1 -1
  96. package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js.map +1 -1
  97. package/dist/es/Atomic/UI/Chart/partial/utils.js +2 -1
  98. package/dist/es/Atomic/UI/Chart/partial/utils.js.map +1 -1
  99. package/dist/es/Atomic/UI/DateTime/DateTime.js.map +1 -1
  100. package/dist/es/Atomic/UI/DebugContainer/DebugContainer.js.map +1 -1
  101. package/dist/es/Atomic/UI/DoubleString/DoubleString.js.map +1 -1
  102. package/dist/es/Atomic/UI/Hint/Hint.js +8 -12
  103. package/dist/es/Atomic/UI/Hint/Hint.js.map +1 -1
  104. package/dist/es/Atomic/UI/Hint/partials/_utils.js.map +1 -1
  105. package/dist/es/Atomic/UI/Modal/Modal.js.map +1 -1
  106. package/dist/es/Atomic/UI/Modal/ModalHOC.js.map +1 -1
  107. package/dist/es/Atomic/UI/Modal/partials/ModalTitle.js.map +1 -1
  108. package/dist/es/Atomic/UI/Modal/partials/_constants.js.map +1 -1
  109. package/dist/es/Atomic/UI/Modal/partials/_utils.js +1 -4
  110. package/dist/es/Atomic/UI/Modal/partials/_utils.js.map +1 -1
  111. package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js +17 -10
  112. package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js.map +1 -1
  113. package/dist/es/Atomic/UI/NavLine/NavLine.js.map +1 -1
  114. package/dist/es/Atomic/UI/PageTitle/PageTitle.js.map +1 -1
  115. package/dist/es/Atomic/UI/Price/Price.js.map +1 -1
  116. package/dist/es/Atomic/UI/PriceRange/PriceRange.js.map +1 -1
  117. package/dist/es/Atomic/UI/ProgressLine/ProgressLine.js.map +1 -1
  118. package/dist/es/Atomic/UI/Status/Status.js.map +1 -1
  119. package/dist/es/Atomic/UI/Tag/Tag.js.map +1 -1
  120. package/dist/es/Atomic/UI/TagList/TagList.js.map +1 -1
  121. package/dist/es/Atomic/UI/UserBox/UserBox.js.map +1 -1
  122. package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js.map +1 -1
  123. package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js.map +1 -1
  124. package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js.map +1 -1
  125. package/dist/es/Atomic/UI/WizardStepper/ui/icons.js.map +1 -1
  126. package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js +9 -2
  127. package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js.map +1 -1
  128. package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js +4 -2
  129. package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js.map +1 -1
  130. package/dist/es/Classes/RESTAPI/partials/sse.js +4 -7
  131. package/dist/es/Classes/RESTAPI/partials/sse.js.map +1 -1
  132. package/dist/es/Functions/fieldValueFormatters.js +1 -3
  133. package/dist/es/Functions/fieldValueFormatters.js.map +1 -1
  134. package/dist/es/Functions/operations.js +22 -20
  135. package/dist/es/Functions/operations.js.map +1 -1
  136. package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +8 -6
  137. package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js.map +1 -1
  138. package/dist/es/Functions/useFormTools/functions/General.js +8 -6
  139. package/dist/es/Functions/useFormTools/functions/General.js.map +1 -1
  140. package/dist/es/Functions/useFormTools/functions/RenderFields.js +6 -5
  141. package/dist/es/Functions/useFormTools/functions/RenderFields.js.map +1 -1
  142. package/dist/es/Functions/useFormTools/index.js +1 -4
  143. package/dist/es/Functions/useFormTools/index.js.map +1 -1
  144. package/dist/es/Functions/utils.js +2 -1
  145. package/dist/es/Functions/utils.js.map +1 -1
  146. package/dist/es/Molecular/CustomIcons/components/AffiliateNetworks.js.map +1 -1
  147. package/dist/es/Molecular/CustomIcons/components/AlertCircle.js.map +1 -1
  148. package/dist/es/Molecular/CustomIcons/components/AppStore.js.map +1 -1
  149. package/dist/es/Molecular/CustomIcons/components/Arrow.js.map +1 -1
  150. package/dist/es/Molecular/CustomIcons/components/ArrowDown.js.map +1 -1
  151. package/dist/es/Molecular/CustomIcons/components/ArrowLeft.js.map +1 -1
  152. package/dist/es/Molecular/CustomIcons/components/ArrowRight.js.map +1 -1
  153. package/dist/es/Molecular/CustomIcons/components/ArrowUp.js.map +1 -1
  154. package/dist/es/Molecular/CustomIcons/components/Bell.js.map +1 -1
  155. package/dist/es/Molecular/CustomIcons/components/Button.js.map +1 -1
  156. package/dist/es/Molecular/CustomIcons/components/Campaigns.js.map +1 -1
  157. package/dist/es/Molecular/CustomIcons/components/Check.js.map +1 -1
  158. package/dist/es/Molecular/CustomIcons/components/Check2.js.map +1 -1
  159. package/dist/es/Molecular/CustomIcons/components/ChevronDown.js.map +1 -1
  160. package/dist/es/Molecular/CustomIcons/components/ChevronDownDisabled.js.map +1 -1
  161. package/dist/es/Molecular/CustomIcons/components/ChevronLeft.js.map +1 -1
  162. package/dist/es/Molecular/CustomIcons/components/ChevronRight.js.map +1 -1
  163. package/dist/es/Molecular/CustomIcons/components/ChevronUp.js.map +1 -1
  164. package/dist/es/Molecular/CustomIcons/components/ChevronUpDown.js.map +1 -1
  165. package/dist/es/Molecular/CustomIcons/components/Close.js.map +1 -1
  166. package/dist/es/Molecular/CustomIcons/components/ColumnsOrder.js.map +1 -1
  167. package/dist/es/Molecular/CustomIcons/components/Delete.js.map +1 -1
  168. package/dist/es/Molecular/CustomIcons/components/Edit.js.map +1 -1
  169. package/dist/es/Molecular/CustomIcons/components/Email.js.map +1 -1
  170. package/dist/es/Molecular/CustomIcons/components/FinturfLogo.js.map +1 -1
  171. package/dist/es/Molecular/CustomIcons/components/FinturfLogo2.js.map +1 -1
  172. package/dist/es/Molecular/CustomIcons/components/Flows.js.map +1 -1
  173. package/dist/es/Molecular/CustomIcons/components/Gift.js.map +1 -1
  174. package/dist/es/Molecular/CustomIcons/components/GoogleAuth.js.map +1 -1
  175. package/dist/es/Molecular/CustomIcons/components/GooglePlay.js.map +1 -1
  176. package/dist/es/Molecular/CustomIcons/components/HelpCircle.js.map +1 -1
  177. package/dist/es/Molecular/CustomIcons/components/HelpCircle2.js.map +1 -1
  178. package/dist/es/Molecular/CustomIcons/components/HelpCircleFilled.js.map +1 -1
  179. package/dist/es/Molecular/CustomIcons/components/Home.js.map +1 -1
  180. package/dist/es/Molecular/CustomIcons/components/Home2.js.map +1 -1
  181. package/dist/es/Molecular/CustomIcons/components/Key.js.map +1 -1
  182. package/dist/es/Molecular/CustomIcons/components/Landers.js.map +1 -1
  183. package/dist/es/Molecular/CustomIcons/components/Lock.js.map +1 -1
  184. package/dist/es/Molecular/CustomIcons/components/Mail.js.map +1 -1
  185. package/dist/es/Molecular/CustomIcons/components/Mastercard.js.map +1 -1
  186. package/dist/es/Molecular/CustomIcons/components/Minus.js.map +1 -1
  187. package/dist/es/Molecular/CustomIcons/components/Offers.js.map +1 -1
  188. package/dist/es/Molecular/CustomIcons/components/Pause.js.map +1 -1
  189. package/dist/es/Molecular/CustomIcons/components/PayPal.js.map +1 -1
  190. package/dist/es/Molecular/CustomIcons/components/PayPalLightLarge.js.map +1 -1
  191. package/dist/es/Molecular/CustomIcons/components/Phone.js.map +1 -1
  192. package/dist/es/Molecular/CustomIcons/components/Play.js.map +1 -1
  193. package/dist/es/Molecular/CustomIcons/components/Plus.js.map +1 -1
  194. package/dist/es/Molecular/CustomIcons/components/Profile.js.map +1 -1
  195. package/dist/es/Molecular/CustomIcons/components/QRCode.js.map +1 -1
  196. package/dist/es/Molecular/CustomIcons/components/Rectangle.js.map +1 -1
  197. package/dist/es/Molecular/CustomIcons/components/Revert.js.map +1 -1
  198. package/dist/es/Molecular/CustomIcons/components/Star.js.map +1 -1
  199. package/dist/es/Molecular/CustomIcons/components/Star2.js.map +1 -1
  200. package/dist/es/Molecular/CustomIcons/components/TrafficSources.js.map +1 -1
  201. package/dist/es/Molecular/CustomIcons/components/Trash.js.map +1 -1
  202. package/dist/es/Molecular/CustomIcons/components/TrashRed.js.map +1 -1
  203. package/dist/es/Molecular/CustomIcons/components/Triggers.js.map +1 -1
  204. package/dist/es/Molecular/CustomIcons/components/User.js.map +1 -1
  205. package/dist/es/Molecular/CustomIcons/components/Visa.js.map +1 -1
  206. package/dist/es/Molecular/CustomIcons/components/X.js.map +1 -1
  207. package/dist/es/Molecular/FormElement/FormElement.js.map +1 -1
  208. package/dist/es/Molecular/InputAddress/InputAddress.js +24 -19
  209. package/dist/es/Molecular/InputAddress/InputAddress.js.map +1 -1
  210. package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js +17 -11
  211. package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js.map +1 -1
  212. package/dist/es/Molecular/InputPassword/InputPassword.js.map +1 -1
  213. package/package.json +2 -2
  214. /package/dist/es/Atomic/FormElements/{SwitcherRangeList/SwitcherRangeList.styles.css → Datepicker/Datepicker.styles.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TagsDropdown.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TagsDropdown/TagsDropdown.tsx"],"sourcesContent":["/* eslint-disable ts/no-use-before-define */\n/* eslint-disable react-web-api/no-leaked-event-listener */\nimport type {\n LegacyRef,\n MouseEventHandler,\n ReactNode,\n} from 'react';\n\nimport type { ITagProps } from '../../UI/Tag';\nimport type { ITagsDropdownLocalOptions, ITagsDropdownOption, ITagsDropdownProps, TListPosition } from './TagsDropdown.interface';\nimport cn from 'classnames';\nimport React, {\n createRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport {\n Check,\n ChevronDown,\n ChevronUp,\n Code,\n MoreHorizontal,\n Trash2,\n X,\n} from 'react-feather';\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport { useDebounce } from '../../../Functions/useDebounce';\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\nimport Button from '../../UI/Button/Button';\nimport Tag from '../../UI/Tag/Tag';\nimport TagList from '../../UI/TagList/TagList';\n\nimport CheckboxInput from '../CheckboxInput/CheckboxInput';\nimport Input from '../Input/Input';\nimport './TagsDropdown.scss';\n\nconst RC = 'tags-dropdown';\n\nconst MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH = 10;\n\nconst COLORS = [\n '#F1F0F0',\n '#E3E2E0',\n '#EEDFDA',\n '#F9DEC9',\n '#FDECC8',\n '#DBECDB',\n '#D3E4EF',\n '#E8DEEE',\n '#F4E0E9',\n '#FFE2DD',\n '#D3EFED',\n '#ECEEDE',\n];\n\ntype TSetEditingOptionFunctionArg = (option?: ITagsDropdownOption | null) => ITagsDropdownOption;\ntype TSetEditingOptionArg = ITagsDropdownOption | TSetEditingOptionFunctionArg | null;\n\nconst TagsDropdown: React.FC<ITagsDropdownProps> = ({\n options: optionsProp,\n tagsFullList,\n chosenOptions,\n onChange,\n className,\n tagClassname,\n listClassName,\n onKeyPress,\n placeholder,\n label,\n disabled,\n isValuesInTags,\n error,\n isNotValidateASCII = false,\n noTagsWrap = false,\n\n headerContent = null,\n footerContent = null,\n selectAllButtonRef = null,\n unselectAllButtonRef = null,\n\n closeOnSelect = false,\n closeOnRemove = false,\n closeOnRemoveAll = false,\n closeOnSelectAll = false,\n closeOnSelectMobile = false,\n closeOnRemoveMobile = false,\n closeOnRemoveAllMobile = false,\n closeOnSelectAllMobile = false,\n fieldKey,\n id,\n noOptionsText = 'No options available',\n mobileSearchPlaceholder,\n isSearchable = true,\n useLiveSearch,\n doRequest: doLiveSearchRequest,\n\n attributesOfNativeInput,\n\n isUseLocalOptionsStore = true,\n isDefaultOpened = false,\n withMobileLogic,\n withCreateLogic,\n withActions,\n withSearchInputInList,\n renderOptionsAsTags,\n minItemsForShowMobileSearch = MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH,\n\n onOptionCreate,\n onOptionEdit,\n onOptionDelete,\n onActionConfirmClick,\n onActionCancelClick,\n onDropdownListClose,\n\n customTriggerRef,\n renderCustomTrigger,\n isUseInTable,\n recalculateListContainerStylesTrigger,\n}) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const wrapperRef = useRef<HTMLElement | null>(null);\n const dropdownRef = useRef<HTMLElement | null>(null);\n const dropdownListRef = useRef<HTMLElement | null>(null);\n const editOptionModalRef = useRef<HTMLElement | null>(null);\n const dropdownListWrapperRef = useRef<HTMLElement | null>(null);\n\n const { isMobile: isMobileProp } = useIsMobile();\n const isMobile\n = isMobileProp && withMobileLogic && window.screen.width <= 768;\n\n const [dropdownId] = useState(\n id || fieldKey || Math.random().toString(16).slice(2),\n );\n const [isOpen, setIsOpen] = useState(false);\n const [windowScrollTop, setWindowScrollTop] = useState(0);\n\n const [listPos, setListPos] = useState<TListPosition | null>(null);\n\n const [initListHeight, setInitListHeight] = useState<number | null>(null);\n const [isScrollableList, setIsScrollableList] = useState<boolean | null>(null);\n const [isFixedMaxHeight, setIsFixedMaxHeight] = useState(false);\n\n const [scrollTop, setScrollTop] = useState(0);\n const [scrollHeight, setScrollHeight] = useState(1);\n\n const searchValueRef = useRef<string | null>(null);\n const [searchValue, setSearchValue] = useState<string>('');\n const debouncedSearchTerm = useDebounce({ searchValue, delay: 600 });\n const [isValueDeleted, setIsValueDeleted] = useState(false);\n\n const setSearchValueInterceptor = (value: string): void => {\n setSearchValue(value);\n setIsValueDeleted(searchValue !== value && value === '');\n searchValueRef.current = value;\n };\n\n const editingOptionInputRef = useRef<HTMLInputElement | null>(null);\n const [options, setOptions] = useState<ITagsDropdownOption[]>([]);\n const [editingOption, setEditingOptionState] = useState<ITagsDropdownOption | null>(null);\n const setEditingOption = (data: TSetEditingOptionArg): void => {\n setEditingOptionState((editingOption) => {\n if (!data) return null;\n\n const nextData = typeof data === 'function' ? data(editingOption) : data;\n\n return {\n ...(editingOption ?? {}),\n ...nextData,\n isChanged: Boolean(editingOption),\n };\n });\n };\n const isEditingOptionError = useMemo(() => {\n if (!editingOption) return false;\n\n return options\n .filter(({ value }) => value !== editingOption.value)\n .some(({ label }) => label === editingOption.label)\n ? true\n : null;\n }, [options, editingOption]);\n const [localOptionsStore, setLocalOptionsStore] = useState<ITagsDropdownLocalOptions>({});\n\n const randomColorForNewOption = useMemo(() => {\n const getRandomIndex = (min: number, max: number): number => {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n };\n const randomIndex = getRandomIndex(0, COLORS?.length - 1);\n return COLORS[randomIndex];\n }, [options?.length]);\n\n const singleLevelOptions = options?.reduce(\n (acc: ITagsDropdownOption[], item: ITagsDropdownOption) => {\n const checkUniqAndPush = (acc: ITagsDropdownOption[], item: ITagsDropdownOption): void => {\n const isExist = acc?.findIndex(({ value }) => String(value) === String(item?.value));\n if (isExist !== -1) {\n acc[isExist] = item;\n }\n else {\n acc.push(item);\n }\n };\n if (item.groupName) {\n item.list?.map(item => checkUniqAndPush(acc, item));\n }\n else {\n checkUniqAndPush(acc, item);\n }\n\n return acc;\n },\n isUseLocalOptionsStore\n ? Object.keys(localOptionsStore)?.map(value => ({\n value,\n label: localOptionsStore?.[value] ?? '',\n })) as ITagsDropdownOption[]\n : [],\n );\n\n const deleteChosen = (value: string | number): void => {\n if (isMobile ? closeOnRemoveMobile : closeOnRemove) setIsOpen(false);\n\n if (isUseLocalOptionsStore) {\n setLocalOptionsStore((options) => {\n const newOptions: ITagsDropdownLocalOptions = ({\n ...options,\n [value]: undefined,\n });\n\n return newOptions;\n });\n }\n\n onChange?.(\n chosenOptions.filter(item => item !== value),\n 'chosenOptions',\n );\n };\n\n // --- LIST CONTAINER FUNCTIONS BEGIN --- //\n const getParentNode = (): Element | null => {\n return (\n document.querySelector('div#root')\n ?? document.querySelector('div#app')\n ?? document.querySelector('div#storybook-root')\n );\n };\n const initListContainer = (): void => {\n const dropdownList = document.createElement('div');\n\n dropdownList.setAttribute('id', dropdownId);\n dropdownList.classList.add('tags-dropdown__container');\n listClassName && dropdownList.classList.add(listClassName);\n\n if (isMobile) {\n dropdownList.addEventListener('click', (e) => {\n if (e.target && (e.target as HTMLElement).id === dropdownId) setIsOpen(false);\n });\n }\n\n if (isMobile) {\n try {\n document.getElementById(`mlw-${dropdownId}`)?.remove();\n }\n catch {}\n\n const dropdownMobileListWrapper = document.createElement('div');\n dropdownMobileListWrapper.classList.add('tags-dropdown-mobile');\n dropdownMobileListWrapper.setAttribute('id', `mlw-${dropdownId}`);\n dropdownMobileListWrapper?.append(dropdownList);\n getParentNode()?.append(dropdownMobileListWrapper);\n }\n else {\n getParentNode()?.append(dropdownList);\n }\n };\n const getListContainer = (): HTMLElement | null => {\n return document.getElementById(dropdownId);\n };\n const getListContainerWrapper = (): HTMLElement | null => {\n return document.getElementById(`mlw-${dropdownId}`);\n };\n const setListContainerStyles = (): boolean | void => {\n const listContainer = getListContainer();\n\n if (!listContainer || !isOpen) return false;\n\n const windowHeight\n = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n const { width, height = 0, left, top = 0 }\n = dropdownRef?.current?.getBoundingClientRect() ?? {};\n\n const selectorWrapper = dropdownListWrapperRef?.current;\n const dropdownList = listContainer.getElementsByClassName(\n 'tags-dropdown__list',\n )[0] as HTMLElement;\n const listHeader = selectorWrapper?.getElementsByClassName(\n 'tags-dropdown__header',\n )[0] as HTMLElement;\n const listFooter = selectorWrapper?.getElementsByClassName(\n 'tags-dropdown__footer',\n )[0] as HTMLElement;\n\n const margin = Number.parseInt(\n getComputedStyle(selectorWrapper as Element)?.marginTop?.replace('px', '') ?? '0',\n 10,\n );\n\n let selectorWrapperHeight\n = selectorWrapper?.getBoundingClientRect()?.height ?? 0;\n const maxSelectorWrapperHeight\n = 500\n - (listHeader?.getBoundingClientRect()?.height ?? 0)\n - (listFooter?.getBoundingClientRect()?.height ?? 0);\n\n if (!isMobile || !withMobileLogic) {\n const dropdownListMaxHeightInPx\n = getComputedStyle(dropdownList)?.maxHeight;\n const maxHeight\n = initListHeight\n ?? Number.parseInt(dropdownListMaxHeightInPx?.replace('px', '') ?? '0', 10);\n\n if (initListHeight === null && !Number.isNaN(maxHeight))\n setInitListHeight(maxHeight);\n\n if (selectorWrapperHeight !== undefined && selectorWrapperHeight > maxHeight && !Number.isNaN(maxHeight))\n selectorWrapperHeight = maxHeight - 2 * margin;\n\n const toTop = renderCustomTrigger\n ? top\n - margin\n - (customTriggerRef?.current?.getBoundingClientRect()?.height ?? 0)\n : top - margin;\n const toBottom = windowHeight - top - height - margin * 2;\n\n let listPosition = listPos;\n\n if (!listPos && options?.length) {\n listPosition\n = toTop < toBottom || toBottom >= selectorWrapperHeight\n ? 'bottom'\n : 'top';\n setListPos(listPosition);\n }\n\n if (selectorWrapperHeight > (listPosition === 'top' ? toTop : toBottom)) {\n selectorWrapperHeight\n = (listPosition === 'top' ? toTop : toBottom) - 3 * margin;\n\n if (selectorWrapperHeight < 200) {\n selectorWrapperHeight = 200;\n }\n\n if (selectorWrapper) selectorWrapper.style.maxHeight = `${selectorWrapperHeight}px`;\n }\n\n listContainer.style.minWidth = `${width}px`;\n listContainer.style.left = `${left}px`;\n listContainer.style.top = `${listPosition === 'bottom' ? top + height : top - selectorWrapperHeight - 2 * margin}px`;\n }\n else {\n dropdownList.style.maxHeight = `${maxSelectorWrapperHeight}px`;\n }\n };\n const renderListContainer = (): React.ReactPortal | null => {\n const lc = getListContainer();\n\n if (!lc) return null;\n\n return createPortal(getListMarkUp(), lc);\n };\n // --- LIST CONTAINER FUNCTIONS END --- //\n\n // --- CREATABLE LOGIC BEGIN --- //\n const onOptionCreateClick = (): void => {\n const newOption: ITagsDropdownOption = {\n label: searchValue,\n style: {\n backgroundColor: randomColorForNewOption,\n },\n isEditable: true,\n ref: createRef(),\n };\n\n Promise.resolve(onOptionCreate?.(newOption) ?? 1).then((result) => {\n const tempId = Math.random().toString(16).slice(2);\n\n newOption.value = (result as { id?: string | number })?.id ?? tempId;\n\n setOptions(state => [...state, newOption]);\n setSearchValue('');\n onChangeHandler(newOption);\n });\n };\n const onOptionEditClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>, item: ITagsDropdownOption): void => {\n e?.preventDefault();\n e?.stopPropagation();\n\n setEditingOption(editingOption?.value === item?.value ? null : item);\n };\n const onOptionDeleteClick = (): void => {\n Promise.resolve(onOptionDelete?.(editingOption) ?? 1).then(() => {\n if (editingOption?.value) deleteChosen(editingOption?.value);\n\n setOptions(options =>\n options.filter(({ value }) => value !== editingOption?.value),\n );\n setEditingOption(null);\n });\n };\n const saveEditingOption = (): void | boolean => {\n if (!editingOption?.isChanged || isEditingOptionError) {\n setEditingOption(null);\n return false;\n }\n\n onOptionEdit?.(editingOption);\n\n setOptions(options =>\n options?.map((option) => {\n if (editingOption && option.value === editingOption?.value) {\n const tmp = { ...editingOption };\n setEditingOption(null);\n return tmp;\n }\n return option;\n }),\n );\n };\n\n const setEditOptionModalStyles = (): null | void => {\n if (!editingOption || !editOptionModalRef?.current) return null;\n\n const modalSize = 200;\n const { scrollX, scrollY } = window;\n\n const positionClasses = {\n left: 'modal-left',\n right: 'modal-right',\n top: 'modal-top',\n bottom: 'modal-bottom',\n };\n\n const windowWidth\n = window.innerWidth\n || document.documentElement.clientWidth\n || document.body.clientWidth;\n\n const windowHeight\n = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n const el = (editingOption?.ref as unknown as React.MutableRefObject<Element | null>)?.current;\n const { x = 0, y = 0, width = 0, height = 0 } = el?.getBoundingClientRect() ?? {};\n\n const containerPosition\n = dropdownListWrapperRef?.current?.getBoundingClientRect();\n\n const distanceToRight\n = windowWidth - (containerPosition?.x ?? 0) - (containerPosition?.width ?? 0);\n const distanceToBottom = windowHeight - y - scrollY - height;\n\n Object.values(positionClasses)?.map((className) => {\n if (editOptionModalRef.current) editOptionModalRef.current.classList.remove(className);\n\n return className;\n });\n\n editOptionModalRef.current.classList.add(\n positionClasses?.[distanceToRight < modalSize ? 'left' : 'right'] ?? '',\n );\n\n editOptionModalRef.current.classList.add(\n positionClasses?.[distanceToBottom < modalSize ? 'top' : 'bottom'] ?? '',\n );\n\n const xTranslate\n = distanceToRight < modalSize ? 'calc(-100% + 7px)' : '-35px';\n const yTranslate\n = distanceToBottom < modalSize ? `calc(-100% - ${height + 10}px)` : '10px';\n\n if (editOptionModalRef.current instanceof HTMLElement) {\n (editOptionModalRef.current).style.left = `${x + scrollX + width}px`;\n (editOptionModalRef.current).style.top = `${y + scrollY + height}px`;\n (editOptionModalRef.current).style.transform = `translate(${xTranslate}, ${yTranslate})`;\n }\n };\n const renderEditOptionModal = (): ReactNode => {\n return (\n <div\n key={`editOptionModal${editingOption?.value}`}\n ref={editOptionModalRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__edit-option-modal`)}\n >\n <div className={cn(`${RC}__edit-option-modal-section`)}>\n <Input\n value={editingOption?.label}\n onChange={(v: string) =>\n setEditingOption(state => ({ ...state, label: v }))}\n error={!!isEditingOptionError}\n onKeyDown={(keyCode: number | string) => {\n if (keyCode === 13) saveEditingOption();\n }}\n symbolsLimit=\"50\"\n ref={editingOptionInputRef}\n />\n <Button\n variant=\"link\"\n icon={<Trash2 />}\n label=\"Delete\"\n onClick={onOptionDeleteClick}\n />\n </div>\n <div className={cn(`${RC}__edit-option-modal-section-divider`)} />\n <div className={cn(`${RC}__edit-option-modal-section`)}>\n <h3>Colors</h3>\n <div className={cn(`${RC}__edit-option-modal-section-colors`)}>\n {COLORS?.map(color => (\n <div\n key={color}\n className=\"color-block\"\n style={{ backgroundColor: color }}\n onClick={() =>\n setEditingOption(state => ({\n ...state,\n style: {\n ...(state ? state.style : {}),\n backgroundColor: color,\n },\n }))}\n >\n {editingOption?.style?.backgroundColor === color\n ? (\n <Check />\n )\n : null}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n };\n // --- CREATABLE LOGIC END --- //\n\n // --- GENERAL FUNCTIONS BEGIN --- //\n const handleClickOutside = (e: Event | MouseEvent): void => {\n const { target } = e;\n\n if (\n isOpen\n && !getListContainer()?.contains(target as HTMLElement)\n && !editOptionModalRef.current\n && !dropdownRef?.current?.contains(target as HTMLElement)\n // &&\n // (\n // customTriggerRef?.current ? customTriggerRef?.current?.contains(target) : true\n // )\n ) {\n setIsOpen(false);\n onDropdownListClose?.(e);\n }\n else if (\n editOptionModalRef.current\n && !editOptionModalRef.current?.contains(target as HTMLElement)\n ) {\n if (\n !document\n ?.getElementById?.(`editTrigger${editingOption?.value}`)\n ?.contains?.(target as HTMLElement)\n ) {\n saveEditingOption();\n }\n }\n };\n const closeList = (e: Event | MouseEvent): void => {\n handleClickOutside(e);\n if (!(e.target as HTMLElement).isEqualNode(inputRef?.current)) inputRef?.current?.blur();\n };\n const isTargetInParent = (target: HTMLElement): boolean => {\n if (\n (target?.tagName === 'svg'\n && ((target as HTMLElement)?.parentNode as HTMLElement)?.className === 'tag__button')\n || target?.tagName === 'line'\n ) {\n return false;\n }\n\n if (\n (target?.tagName === 'svg'\n && ((target as HTMLElement)?.parentNode as HTMLElement)?.className !== 'tag__button')\n || target?.className?.indexOf?.('tag__label') !== -1\n || target?.className?.indexOf?.('tag-list_wrapper') !== -1\n || target?.className.indexOf(`${RC}__trigger`) !== -1\n || target?.className === 'tags-dropdown__arrow'\n ) {\n return true;\n }\n\n return false;\n };\n const isItemMatchesSearch = (item: ITagsDropdownOption): boolean => {\n if (item.isHiddenInList) return false;\n\n const title = item.title || item.label;\n return searchValue?.length\n ? !!title?.toLowerCase().includes(searchValue?.toLowerCase() || '')\n : true;\n };\n // --- GENERAL FUNCTIONS END --- //\n\n const prepareOptions = (options: ITagsDropdownOption[]): ITagsDropdownOption[] => {\n return options\n ?.map(option => (option?.groupName ? option?.list ?? [] : option))\n .flat();\n };\n const getFilteredOptions = (options: ITagsDropdownOption[]): ITagsDropdownOption[] =>\n options?.reduce((result: ITagsDropdownOption[], option: ITagsDropdownOption) => {\n if (option.groupName) {\n const filteredGroupItems: ITagsDropdownOption[] | undefined = option?.list?.filter(item =>\n isItemMatchesSearch(item),\n );\n\n if (filteredGroupItems?.length) {\n result.push({\n ...option,\n list: filteredGroupItems,\n });\n }\n }\n else if (isItemMatchesSearch(option)) {\n result.push(option);\n }\n\n return result;\n }, []);\n const getTotalOptions = useCallback(() => {\n return options?.reduce((result, item: ITagsDropdownOption) => {\n if (item?.list) {\n result += item?.list?.length || 0;\n }\n else {\n ++result;\n }\n\n return result;\n }, 0);\n }, [options]);\n\n const onChangeHandler = (item: ITagsDropdownOption): boolean | null | void => {\n if (item?.isFreezed) return false;\n if (item?.closeOnOptionSelect !== undefined) {\n if (item.closeOnOptionSelect) setIsOpen(false);\n }\n else if (isMobile ? closeOnSelectMobile : closeOnSelect) {\n setIsOpen(false);\n }\n // setSearchValueInterceptor('');\n\n if (inputRef?.current?.focus) {\n inputRef.current.focus();\n\n const len = inputRef.current?.value?.length ?? 0;\n inputRef.current.setSelectionRange(len, len);\n }\n\n if (item.value && chosenOptions.includes(item.value)) {\n deleteChosen(item.value);\n return null;\n }\n\n if (item.value && isUseLocalOptionsStore) {\n setLocalOptionsStore((options) => {\n if (item.value) {\n return ({\n ...options,\n [item.value]: item?.label,\n });\n }\n else {\n return options;\n }\n });\n }\n\n if (item.value) onChange?.([...chosenOptions, item.value], 'chosenOptions');\n return null;\n };\n\n const onSearchHandler = (name: string): void => {\n let inputValue = name;\n if (!isNotValidateASCII) inputValue = formatToOnlyASCIICodeText(inputValue);\n setSearchValueInterceptor(inputValue);\n };\n const onWrapperClick: MouseEventHandler<Element> = (e): void => {\n if (e.target === wrapperRef?.current) {\n e.stopPropagation();\n e.preventDefault();\n\n setIsOpen(false);\n }\n };\n const selectAllItems = (): void => {\n const preparedOptions = prepareOptions(options)?.filter(\n ({ isFreezed, value }) =>\n value && !isFreezed && !chosenOptions?.includes(value || value?.toString()) && value !== 'open_modal',\n );\n\n if (isUseLocalOptionsStore) {\n setLocalOptionsStore(options =>\n preparedOptions?.reduce((result, { value, label }) => {\n if (value) result[value] = label;\n return result;\n }, options),\n );\n }\n\n onChange?.(\n [...chosenOptions, ...(preparedOptions?.map(({ value }) => value ?? '') || [])],\n 'chosenOptions',\n );\n if (isMobile ? closeOnSelectAllMobile : closeOnSelectAll) setIsOpen(false);\n };\n const unselectAllItems = (): void => {\n if (isUseLocalOptionsStore) setLocalOptionsStore({});\n onChange?.(\n chosenOptions?.filter(\n item =>\n prepareOptions(options)?.find(({ value }) => value === item)?.isFreezed,\n ),\n 'chosenOptions',\n );\n if (isMobile ? closeOnRemoveAllMobile : closeOnRemoveAll) setIsOpen(false);\n };\n const doScrollCallback = useCallback(\n (e: Event | MouseEvent) => {\n if (doLiveSearchRequest && typeof doLiveSearchRequest === 'function') {\n if (\n +Math.round((e.target as HTMLElement).clientHeight + (e.target as HTMLElement).scrollTop)\n === +(e.target as HTMLElement).scrollHeight\n ) {\n doLiveSearchRequest(searchValueRef.current, true);\n }\n }\n },\n [options],\n );\n\n // --- RENDER FUNCTIONS BEGIN --- //\n\n const getMarkupForElement = (item: ITagsDropdownOption): ReactNode => {\n const { description } = item;\n const title = item.title || item.label;\n\n const hightlightSearchValue = (title: string): ReactNode => {\n const index = title?.toLowerCase()?.indexOf(searchValue?.toLowerCase());\n\n if (index === -1) return title;\n\n return (\n <pre className=\"inherit-styles\">\n <span>{title.substring(0, index)}</span>\n <span className=\"search-match\">\n {title.substring(index, index + searchValue?.length)}\n </span>\n <span>{title.substring(index + searchValue?.length)}</span>\n </pre>\n );\n };\n\n return (\n <button\n type=\"button\"\n ref={item?.ref as LegacyRef<HTMLButtonElement>}\n key={`${RC}__list-item-${item.id || item.value}`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onChangeHandler(item);\n }}\n className={cn(\n `${RC}__list-item`,\n {\n [`${RC}__list-item_active`]: chosenOptions?.some(\n value => value === item.value,\n ),\n },\n { [`${RC}__list-item_disabled`]: item.disabled },\n { [`${RC}__list-item_freezed`]: item?.isFreezed },\n {\n [`${RC}__list-item--editing`]: item?.value === editingOption?.value,\n },\n item.className,\n )}\n >\n {!isMobile && (\n <span\n className={cn(`${RC}__active-icon`, {\n [`${RC}__active-icon_active`]: chosenOptions?.some(\n value => value === item.value,\n ),\n })}\n >\n <Check width={16} height={16} className=\"color--text\" />\n </span>\n )}\n <div className={cn(`${RC}__list-item-body`)}>\n {renderOptionsAsTags\n ? (\n <Tag\n key={item?.value}\n className={cn(`${RC}__list-item-title`, item?.labelClassName, {\n 'tag_with-btn': !item?.isFreezed,\n })}\n label={title ? hightlightSearchValue(title) : ''}\n style={item?.style}\n isUseInTable={isUseInTable}\n isNoDismiss\n />\n )\n : (\n <span className={cn(`${RC}__list-item-title`, item.labelClassName)}>\n {title ? hightlightSearchValue(title) : ''}\n </span>\n )}\n {description && (\n <span className={cn(`${RC}__list-item-description`)}>\n {description}\n </span>\n )}\n </div>\n {!isMobile && item?.isEditable && onOptionEdit && onOptionDelete && (\n <div\n id={`editTrigger${item?.value}`}\n className={cn(`${RC}__list-item-edit-trigger`)}\n onClick={e => onOptionEditClick(e, item)}\n >\n <MoreHorizontal />\n </div>\n )}\n {isMobile\n ? item?.customMobileIcon ?? (\n <CheckboxInput\n value={chosenOptions?.some(value => value === item.value)}\n onChange={() => {\n onChangeHandler(item);\n }}\n label=\"\"\n id=\"\"\n />\n )\n : ''}\n </button>\n );\n };\n const getListMarkUp = (): ReactNode => {\n const filteredOptions = getFilteredOptions(options);\n\n const arrToPrint: ReactNode[] = [];\n for (const option of filteredOptions) {\n if (option.groupName) {\n arrToPrint.push(\n <div\n key={option.groupName\n ?.toString()\n ?.replace(/ /g, '_')\n .concat(Date.now()?.toString())}\n className={cn(`${RC}-group`, option.className)}\n >\n <span className={`${RC}-group__name`}>{option.groupName}</span>\n {option.list?.map(item => getMarkupForElement(item))}\n </div>,\n );\n }\n else if (!option.readOnly) {\n arrToPrint.push(getMarkupForElement(option));\n }\n }\n\n return (\n <div\n className={cn(`${RC}__container-wrapper`)}\n ref={wrapperRef as LegacyRef<HTMLDivElement>}\n onClick={isMobile ? onWrapperClick : () => {}}\n >\n <div\n ref={dropdownListWrapperRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__selector-wrapper`, {\n [`${RC}__selector-wrapper--fixed-height`]:\n isFixedMaxHeight && isMobile,\n })}\n >\n {headerContent || isMobile\n ? (\n <div\n className={cn(`${RC}__header`, {\n [`${RC}__header-with-shadow`]: isScrollableList && isMobile,\n [`${RC}__header-with-shadow-hidden`]: scrollTop === 0,\n })}\n >\n {isMobile && (\n <>\n <div className={cn(`${RC}__header-row`)}>\n <div className={cn(`${RC}__label`)}>{label}</div>\n <div\n className={cn(`${RC}__close-icon`)}\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}\n >\n <X\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}\n />\n </div>\n </div>\n {getTotalOptions()\n > (minItemsForShowMobileSearch\n || MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH) && (\n <div className={cn(`${RC}__header-row`)}>\n <Input\n className={`${RC}__input`}\n // @ts-ignore\n value={searchValue}\n // @ts-ignore\n onChange={(v: string) => setSearchValueInterceptor(v)}\n placeholder={mobileSearchPlaceholder || 'Search'}\n withDelete\n onMouseDown={() => {\n if (!isOpen) {\n setIsOpen(true);\n }\n }}\n {...attributesOfNativeInput}\n />\n </div>\n )}\n </>\n )}\n {headerContent && (\n <div className={cn(`${RC}__header-row`)}>{headerContent}</div>\n )}\n </div>\n )\n : null}\n {withSearchInputInList && (\n <div className={cn(`${RC}__input-list-wrapper`)}>\n {renderSearchInput()}\n </div>\n )}\n {withCreateLogic\n && onOptionCreate\n && searchValue\n && filteredOptions?.length\n && singleLevelOptions.every(\n ({ label }) => label?.toLowerCase() !== searchValue?.toLowerCase(),\n )\n ? (\n <div className={cn(`${RC}__creatable-helper`)}>\n Select an option or create one\n </div>\n )\n : null}\n\n <div\n ref={dropdownListRef as LegacyRef<HTMLDivElement>}\n className={`${RC}__list ${headerContent || isMobile ? `${RC}__list--with-header` : ''} ${\n footerContent ? `${RC}__list--with-footer` : ''\n }`}\n >\n {arrToPrint}\n {filteredOptions.filter(({ value }) => value !== 'open_modal')\n ?.length === 0\n && (!withCreateLogic || !searchValue)\n ? (\n <div className={`${RC}__no-options`}>{noOptionsText}</div>\n )\n : null}\n </div>\n {(footerContent || isMobile)\n && filteredOptions.filter(({ value }) => value !== 'open_modal')\n ?.length > 0\n ? (\n <div\n className={cn(`${RC}__footer`, {\n [`${RC}__footer-with-shadow`]: isMobile && isScrollableList,\n [`${RC}__footer-with-shadow-hidden`]:\n scrollTop === scrollHeight,\n })}\n >\n {footerContent}\n {isMobile && (\n <button type=\"button\" onClick={() => setIsOpen(false)}>\n Apply\n {chosenOptions?.length ? `(${chosenOptions?.length})` : ''}\n </button>\n )}\n </div>\n )\n : null}\n {editingOption\n && createPortal(\n renderEditOptionModal(),\n document.getElementById('root') ?? document.body,\n )}\n {withCreateLogic\n && onOptionCreate\n && searchValue\n && singleLevelOptions.every(\n ({ label }) =>\n label?.toLowerCase() !== searchValue?.toLowerCase(),\n ) && (\n <div\n className={cn(`${RC}__create-option`)}\n onClick={onOptionCreateClick}\n >\n Create\n <Tag\n isUseInTable={isUseInTable}\n label={searchValue}\n style={{ backgroundColor: randomColorForNewOption }}\n isNoDismiss\n />\n </div>\n )}\n </div>\n </div>\n );\n };\n const renderSearchInput = (): ReactNode => {\n return (\n <Input\n ref={inputRef}\n // TODO: REMOVE AFTER MIGRATE INPUT TO TYPESCRIPT\n // @ts-ignore\n className={cn(`${RC}__input`, {\n [`${RC}__input--in-list`]: withSearchInputInList,\n })}\n value={searchValue}\n onChange={onSearchHandler}\n placeholder={placeholder || 'Select from list'}\n attributesOfNativeInput={{\n ...attributesOfNativeInput,\n onKeyDown: (e: KeyboardEvent) => {\n if (\n e.keyCode === 13\n && withCreateLogic\n && onOptionCreate\n && singleLevelOptions.every(\n ({ label }) =>\n label?.toLowerCase() !== searchValue?.toLowerCase(),\n )\n ) {\n onOptionCreateClick();\n }\n onKeyPress?.(e, searchValue);\n },\n // onFocus: (e) => {\n // if (isMobile) e?.target?.blur();\n // },\n }}\n {...(withCreateLogic ? { symbolsLimit: 50 } : {})}\n />\n );\n };\n const renderDropdownTrigger = useCallback(() => {\n const renderDefaultDropdownTrigger = (): ReactNode => {\n // @ts-ignore\n return (\n <div\n className={cn(`${RC}__trigger`, {\n 'tags-dropdown__error': error,\n [`${RC}__trigger--with-actions`]: withActions,\n })}\n onClick={({ target }) => {\n if ((target as HTMLElement)?.tagName === 'INPUT') {\n setIsOpen(true);\n }\n else if (isTargetInParent(target as HTMLElement)) {\n setIsOpen(isOpen => !isOpen);\n }\n }}\n >\n {noTagsWrap\n ? (\n // @ts-ignore\n <TagList\n // TODO: REMOVE AFTER MIGRATE TAGLIST TO TYPESCRIPT\n // @ts-ignore\n items={chosenOptions?.map((value, i) => {\n const tag = singleLevelOptions?.find(el => String(el.value) === String(value)) as ITagProps;\n const label = isValuesInTags\n ? tag?.value\n : tag?.label || tag?.name || tag?.title;\n return {\n value,\n label,\n id: i,\n className: tag?.labelClassName,\n style: tag?.style,\n };\n })}\n isUseInTable={isUseInTable}\n disableShowMore\n />\n )\n : (\n chosenOptions?.map((value) => {\n const tag = singleLevelOptions?.find(el => String(el.value) === String(value)) as ITagProps;\n const label = isValuesInTags\n ? tag?.value\n : tag?.label || tag?.name || tag?.title;\n return (\n <Tag\n key={value}\n className={cn(tagClassname, tag?.labelClassName, {\n 'tag_with-btn': !tag?.isFreezed,\n })}\n label={label}\n style={tag?.style}\n removeItem={(tag?.isFreezed || tag?.readOnly) ? undefined : () => deleteChosen(value)}\n isNoDismiss={false}\n isUseInTable={isUseInTable}\n />\n );\n })\n )}\n\n {chosenOptions?.length === 0 || !noTagsWrap ? renderSearchInput() : ''}\n <span\n className={cn(`${RC}__arrow`, { [`${RC}__arrow_active`]: isOpen })}\n >\n {isMobile\n ? (\n <Code className=\"mobile-icon\" />\n )\n : isOpen\n ? (\n <ChevronUp className=\"color--text\" />\n )\n : (\n <ChevronDown className=\"color--text\" />\n )}\n </span>\n </div>\n );\n };\n\n return (\n renderCustomTrigger?.({\n chosenOptions,\n singleLevelOptions,\n deleteChosen,\n inputRef,\n onSearchHandler,\n isOpen,\n setIsOpen,\n }) ?? renderDefaultDropdownTrigger()\n );\n }, [chosenOptions, singleLevelOptions, inputRef, isOpen]);\n // --- RENDER FUNCTIONS END --- //\n\n useLayoutEffect(() => {\n initListContainer();\n\n if (isDefaultOpened && !isMobileProp) setIsOpen(true);\n\n return () => {\n getListContainer()?.remove();\n getListContainerWrapper()?.remove();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!isMobile) {\n window.addEventListener('mousewheel', closeList);\n window.addEventListener('wheel', closeList);\n window.addEventListener('touchmove', closeList);\n window.addEventListener('mouseup', handleClickOutside);\n }\n else {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('wheel', closeList);\n window.removeEventListener('touchmove', closeList);\n window.removeEventListener('mouseup', handleClickOutside);\n }\n\n getListContainer()?.addEventListener('click', closeList);\n\n return () => {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('mouseup', handleClickOutside);\n window.removeEventListener('wheel', closeList);\n window.removeEventListener('touchmove', closeList);\n getListContainer()?.removeEventListener('click', closeList);\n };\n }, [getListContainer, isMobile]);\n\n useLayoutEffect(() => {\n if (isOpen) {\n setListContainerStyles();\n setEditOptionModalStyles();\n }\n }, [\n isOpen,\n optionsProp,\n chosenOptions,\n searchValue,\n isMobile,\n dropdownListWrapperRef?.current?.getBoundingClientRect()?.height,\n recalculateListContainerStylesTrigger,\n ]);\n\n useEffect(() => {\n if (\n isUseLocalOptionsStore\n && chosenOptions?.length !== Object.keys(localOptionsStore)?.length\n ) {\n options.map((option: ITagsDropdownOption) => {\n if (option?.value && !localOptionsStore?.[option?.value?.toString()]) {\n setLocalOptionsStore((options) => {\n if (option.value) {\n return ({\n ...options,\n [option?.value?.toString()]: option?.label,\n });\n }\n else {\n return options;\n }\n });\n }\n\n return option;\n });\n }\n }, [chosenOptions, isUseLocalOptionsStore]);\n\n useEffect(() => {\n const windowScrollEventHandler = (): void => {\n setWindowScrollTop(window.scrollY);\n };\n\n const fn = isOpen ? 'addEventListener' : 'removeEventListener';\n selectAllButtonRef?.current?.[fn]('click', selectAllItems, true);\n unselectAllButtonRef?.current?.[fn]('click', unselectAllItems, true);\n\n if (isOpen) {\n if (!isMobile || !withMobileLogic)\n window.removeEventListener('scroll', windowScrollEventHandler);\n\n if (customTriggerRef?.current) {\n customTriggerRef.current.style.pointerEvents = 'none';\n }\n getListContainer()?.classList.add('tags-dropdown__container--opened');\n if (!isMobile) {\n inputRef?.current?.focus?.();\n }\n else {\n inputRef?.current?.blur?.();\n }\n }\n else {\n if (!isMobile || !withMobileLogic)\n window.addEventListener('scroll', windowScrollEventHandler);\n\n if (customTriggerRef?.current) {\n customTriggerRef.current.style.pointerEvents = 'auto';\n }\n getListContainer()?.classList.remove('tags-dropdown__container--opened');\n if (withSearchInputInList) setSearchValueInterceptor('');\n searchValueRef.current = '';\n setListPos(null);\n setSearchValue('');\n }\n }, [isOpen]);\n\n useEffect(() => {\n const setScrollTopValue = (e: Event | MouseEvent): void => {\n setScrollTop(Number.parseInt((e.target as HTMLElement).scrollTop?.toString(), 10));\n };\n\n const preventWindowScrolling = (e: Event): void => {\n e.preventDefault();\n window.scrollTo({ top: windowScrollTop });\n };\n\n if (isOpen && isMobile && dropdownListRef?.current) {\n dropdownListRef?.current?.addEventListener('scroll', setScrollTopValue);\n\n setIsScrollableList(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n\n if (isScrollableList === null) {\n setIsFixedMaxHeight(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n }\n }\n\n if (isOpen && dropdownListRef && dropdownListRef.current) {\n dropdownListRef.current.addEventListener('scroll', doScrollCallback);\n if (!isMobile || !withMobileLogic)\n window.addEventListener('scroll', preventWindowScrolling);\n }\n\n return () => {\n if (!isMobile || !withMobileLogic)\n window.removeEventListener('scroll', preventWindowScrolling);\n dropdownListRef?.current?.removeEventListener('scroll', doScrollCallback);\n dropdownListRef?.current?.removeEventListener(\n 'scroll',\n setScrollTopValue,\n );\n };\n }, [\n isOpen,\n isMobile,\n dropdownListRef?.current,\n dropdownListRef?.current?.scrollHeight,\n dropdownListRef?.current?.clientHeight,\n ]);\n\n useEffect(() => {\n if (dropdownListRef?.current) {\n setScrollHeight(\n Number.parseInt(\n (dropdownListRef?.current?.scrollHeight\n - dropdownListRef?.current?.clientHeight)?.toString(),\n 10,\n ),\n );\n }\n }, [scrollTop, dropdownListRef?.current]);\n\n useEffect(() => {\n if (\n isSearchable\n && useLiveSearch\n && (debouncedSearchTerm || isValueDeleted || isOpen)\n ) {\n doLiveSearchRequest?.(searchValue ? debouncedSearchTerm : '');\n }\n }, [isOpen, debouncedSearchTerm, isValueDeleted]);\n\n useEffect(() => {\n setOptions((tagsFullList || optionsProp)?.map(option => ({ ...option, ref: createRef() })));\n }, [optionsProp, tagsFullList]);\n\n useEffect(() => {\n if (editingOption) {\n setEditOptionModalStyles();\n editingOptionInputRef?.current?.focus?.();\n }\n }, [editingOption?.value]);\n\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_disabled`]: disabled,\n [`${RC}-mobile`]: isMobile,\n [`${RC}--focused`]: isOpen && !customTriggerRef?.current && !isMobile,\n [`${RC}--custom-trigger`]: Boolean(customTriggerRef?.current),\n })}\n ref={dropdownRef as LegacyRef<HTMLDivElement>}\n >\n {renderDropdownTrigger()}\n {withActions && (\n <div className={cn(`${RC}__actions`)}>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionConfirmClick}\n >\n <Check />\n </div>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionCancelClick}\n >\n <X />\n </div>\n </div>\n )}\n {isOpen && renderListContainer()}\n </div>\n );\n};\nexport default TagsDropdown;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TagsDropdown.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TagsDropdown/TagsDropdown.tsx"],"sourcesContent":["/* eslint-disable ts/no-use-before-define */\n/* eslint-disable react-web-api/no-leaked-event-listener */\nimport type {\n LegacyRef,\n MouseEventHandler,\n ReactNode,\n} from 'react';\n\nimport type { ITagProps } from '../../UI/Tag';\nimport type { ITagsDropdownLocalOptions, ITagsDropdownOption, ITagsDropdownProps, TListPosition } from './TagsDropdown.interface';\nimport cn from 'classnames';\nimport React, {\n createRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport {\n Check,\n ChevronDown,\n ChevronUp,\n Code,\n MoreHorizontal,\n Trash2,\n X,\n} from 'react-feather';\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport { useDebounce } from '../../../Functions/useDebounce';\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\nimport Button from '../../UI/Button/Button';\nimport Tag from '../../UI/Tag/Tag';\nimport TagList from '../../UI/TagList/TagList';\n\nimport CheckboxInput from '../CheckboxInput/CheckboxInput';\nimport Input from '../Input/Input';\nimport './TagsDropdown.scss';\n\nconst RC = 'tags-dropdown';\n\nconst MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH = 10;\n\nconst COLORS = [\n '#F1F0F0',\n '#E3E2E0',\n '#EEDFDA',\n '#F9DEC9',\n '#FDECC8',\n '#DBECDB',\n '#D3E4EF',\n '#E8DEEE',\n '#F4E0E9',\n '#FFE2DD',\n '#D3EFED',\n '#ECEEDE',\n];\n\ntype TSetEditingOptionFunctionArg = (option?: ITagsDropdownOption | null) => ITagsDropdownOption;\ntype TSetEditingOptionArg = ITagsDropdownOption | TSetEditingOptionFunctionArg | null;\n\nconst TagsDropdown: React.FC<ITagsDropdownProps> = ({\n options: optionsProp,\n tagsFullList,\n chosenOptions,\n onChange,\n className,\n tagClassname,\n listClassName,\n onKeyPress,\n placeholder,\n label,\n disabled,\n isValuesInTags,\n error,\n isNotValidateASCII = false,\n noTagsWrap = false,\n\n headerContent = null,\n footerContent = null,\n selectAllButtonRef = null,\n unselectAllButtonRef = null,\n\n closeOnSelect = false,\n closeOnRemove = false,\n closeOnRemoveAll = false,\n closeOnSelectAll = false,\n closeOnSelectMobile = false,\n closeOnRemoveMobile = false,\n closeOnRemoveAllMobile = false,\n closeOnSelectAllMobile = false,\n fieldKey,\n id,\n noOptionsText = 'No options available',\n mobileSearchPlaceholder,\n isSearchable = true,\n useLiveSearch,\n doRequest: doLiveSearchRequest,\n\n attributesOfNativeInput,\n\n isUseLocalOptionsStore = true,\n isDefaultOpened = false,\n withMobileLogic,\n withCreateLogic,\n withActions,\n withSearchInputInList,\n renderOptionsAsTags,\n minItemsForShowMobileSearch = MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH,\n\n onOptionCreate,\n onOptionEdit,\n onOptionDelete,\n onActionConfirmClick,\n onActionCancelClick,\n onDropdownListClose,\n\n customTriggerRef,\n renderCustomTrigger,\n isUseInTable,\n recalculateListContainerStylesTrigger,\n}) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const wrapperRef = useRef<HTMLElement | null>(null);\n const dropdownRef = useRef<HTMLElement | null>(null);\n const dropdownListRef = useRef<HTMLElement | null>(null);\n const editOptionModalRef = useRef<HTMLElement | null>(null);\n const dropdownListWrapperRef = useRef<HTMLElement | null>(null);\n\n const { isMobile: isMobileProp } = useIsMobile();\n const isMobile\n = isMobileProp && withMobileLogic && window.screen.width <= 768;\n\n const [dropdownId] = useState(\n id || fieldKey || Math.random().toString(16).slice(2),\n );\n const [isOpen, setIsOpen] = useState(false);\n const [windowScrollTop, setWindowScrollTop] = useState(0);\n\n const [listPos, setListPos] = useState<TListPosition | null>(null);\n\n const [initListHeight, setInitListHeight] = useState<number | null>(null);\n const [isScrollableList, setIsScrollableList] = useState<boolean | null>(null);\n const [isFixedMaxHeight, setIsFixedMaxHeight] = useState(false);\n\n const [scrollTop, setScrollTop] = useState(0);\n const [scrollHeight, setScrollHeight] = useState(1);\n\n const searchValueRef = useRef<string | null>(null);\n const [searchValue, setSearchValue] = useState<string>('');\n const debouncedSearchTerm = useDebounce({ searchValue, delay: 600 });\n const [isValueDeleted, setIsValueDeleted] = useState(false);\n\n const setSearchValueInterceptor = (value: string): void => {\n setSearchValue(value);\n setIsValueDeleted(searchValue !== value && value === '');\n searchValueRef.current = value;\n };\n\n const editingOptionInputRef = useRef<HTMLInputElement | null>(null);\n const [options, setOptions] = useState<ITagsDropdownOption[]>([]);\n const [editingOption, setEditingOptionState] = useState<ITagsDropdownOption | null>(null);\n const setEditingOption = (data: TSetEditingOptionArg): void => {\n setEditingOptionState((editingOption) => {\n if (!data) return null;\n\n const nextData = typeof data === 'function' ? data(editingOption) : data;\n\n return {\n ...(editingOption ?? {}),\n ...nextData,\n isChanged: Boolean(editingOption),\n };\n });\n };\n const isEditingOptionError = useMemo(() => {\n if (!editingOption) return false;\n\n return options\n .filter(({ value }) => value !== editingOption.value)\n .some(({ label }) => label === editingOption.label)\n ? true\n : null;\n }, [options, editingOption]);\n const [localOptionsStore, setLocalOptionsStore] = useState<ITagsDropdownLocalOptions>({});\n\n const randomColorForNewOption = useMemo(() => {\n const getRandomIndex = (min: number, max: number): number => {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n };\n const randomIndex = getRandomIndex(0, COLORS?.length - 1);\n return COLORS[randomIndex];\n }, [options?.length]);\n\n const singleLevelOptions = options?.reduce(\n (acc: ITagsDropdownOption[], item: ITagsDropdownOption) => {\n const checkUniqAndPush = (acc: ITagsDropdownOption[], item: ITagsDropdownOption): void => {\n const isExist = acc?.findIndex(({ value }) => String(value) === String(item?.value));\n if (isExist !== -1) {\n acc[isExist] = item;\n }\n else {\n acc.push(item);\n }\n };\n if (item.groupName) {\n item.list?.map(item => checkUniqAndPush(acc, item));\n }\n else {\n checkUniqAndPush(acc, item);\n }\n\n return acc;\n },\n isUseLocalOptionsStore\n ? Object.keys(localOptionsStore)?.map(value => ({\n value,\n label: localOptionsStore?.[value] ?? '',\n })) as ITagsDropdownOption[]\n : [],\n );\n\n const deleteChosen = (value: string | number): void => {\n if (isMobile ? closeOnRemoveMobile : closeOnRemove) setIsOpen(false);\n\n if (isUseLocalOptionsStore) {\n setLocalOptionsStore((options) => {\n const newOptions: ITagsDropdownLocalOptions = ({\n ...options,\n [value]: undefined,\n });\n\n return newOptions;\n });\n }\n\n onChange?.(\n chosenOptions.filter(item => item !== value),\n 'chosenOptions',\n );\n };\n\n // --- LIST CONTAINER FUNCTIONS BEGIN --- //\n const getParentNode = (): Element | null => {\n return (\n document.querySelector('div#root')\n ?? document.querySelector('div#app')\n ?? document.querySelector('div#storybook-root')\n );\n };\n const initListContainer = (): void => {\n const dropdownList = document.createElement('div');\n\n dropdownList.setAttribute('id', dropdownId);\n dropdownList.classList.add('tags-dropdown__container');\n listClassName && dropdownList.classList.add(listClassName);\n\n if (isMobile) {\n dropdownList.addEventListener('click', (e) => {\n if (e.target && (e.target as HTMLElement).id === dropdownId) setIsOpen(false);\n });\n }\n\n if (isMobile) {\n try {\n document.getElementById(`mlw-${dropdownId}`)?.remove();\n }\n catch {}\n\n const dropdownMobileListWrapper = document.createElement('div');\n dropdownMobileListWrapper.classList.add('tags-dropdown-mobile');\n dropdownMobileListWrapper.setAttribute('id', `mlw-${dropdownId}`);\n dropdownMobileListWrapper?.append(dropdownList);\n getParentNode()?.append(dropdownMobileListWrapper);\n }\n else {\n getParentNode()?.append(dropdownList);\n }\n };\n const getListContainer = (): HTMLElement | null => {\n return document.getElementById(dropdownId);\n };\n const getListContainerWrapper = (): HTMLElement | null => {\n return document.getElementById(`mlw-${dropdownId}`);\n };\n const setListContainerStyles = (): boolean | void => {\n const listContainer = getListContainer();\n\n if (!listContainer || !isOpen) return false;\n\n const windowHeight\n = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n const { width, height = 0, left, top = 0 }\n = dropdownRef?.current?.getBoundingClientRect() ?? {};\n\n const selectorWrapper = dropdownListWrapperRef?.current;\n const dropdownList = listContainer.getElementsByClassName(\n 'tags-dropdown__list',\n )[0] as HTMLElement;\n const listHeader = selectorWrapper?.getElementsByClassName(\n 'tags-dropdown__header',\n )[0] as HTMLElement;\n const listFooter = selectorWrapper?.getElementsByClassName(\n 'tags-dropdown__footer',\n )[0] as HTMLElement;\n\n const margin = Number.parseInt(\n getComputedStyle(selectorWrapper as Element)?.marginTop?.replace('px', '') ?? '0',\n 10,\n );\n\n let selectorWrapperHeight\n = selectorWrapper?.getBoundingClientRect()?.height ?? 0;\n const maxSelectorWrapperHeight\n = 500\n - (listHeader?.getBoundingClientRect()?.height ?? 0)\n - (listFooter?.getBoundingClientRect()?.height ?? 0);\n\n if (!isMobile || !withMobileLogic) {\n const dropdownListMaxHeightInPx\n = getComputedStyle(dropdownList)?.maxHeight;\n const maxHeight\n = initListHeight\n ?? Number.parseInt(dropdownListMaxHeightInPx?.replace('px', '') ?? '0', 10);\n\n if (initListHeight === null && !Number.isNaN(maxHeight))\n setInitListHeight(maxHeight);\n\n if (selectorWrapperHeight !== undefined && selectorWrapperHeight > maxHeight && !Number.isNaN(maxHeight))\n selectorWrapperHeight = maxHeight - 2 * margin;\n\n const toTop = renderCustomTrigger\n ? top\n - margin\n - (customTriggerRef?.current?.getBoundingClientRect()?.height ?? 0)\n : top - margin;\n const toBottom = windowHeight - top - height - margin * 2;\n\n let listPosition = listPos;\n\n if (!listPos && options?.length) {\n listPosition\n = toTop < toBottom || toBottom >= selectorWrapperHeight\n ? 'bottom'\n : 'top';\n setListPos(listPosition);\n }\n\n if (selectorWrapperHeight > (listPosition === 'top' ? toTop : toBottom)) {\n selectorWrapperHeight\n = (listPosition === 'top' ? toTop : toBottom) - 3 * margin;\n\n if (selectorWrapperHeight < 200) {\n selectorWrapperHeight = 200;\n }\n\n if (selectorWrapper) selectorWrapper.style.maxHeight = `${selectorWrapperHeight}px`;\n }\n\n listContainer.style.minWidth = `${width}px`;\n listContainer.style.left = `${left}px`;\n listContainer.style.top = `${listPosition === 'bottom' ? top + height : top - selectorWrapperHeight - 2 * margin}px`;\n }\n else {\n dropdownList.style.maxHeight = `${maxSelectorWrapperHeight}px`;\n }\n };\n const renderListContainer = (): React.ReactPortal | null => {\n const lc = getListContainer();\n\n if (!lc) return null;\n\n return createPortal(getListMarkUp(), lc);\n };\n // --- LIST CONTAINER FUNCTIONS END --- //\n\n // --- CREATABLE LOGIC BEGIN --- //\n const onOptionCreateClick = (): void => {\n const newOption: ITagsDropdownOption = {\n label: searchValue,\n style: {\n backgroundColor: randomColorForNewOption,\n },\n isEditable: true,\n ref: createRef(),\n };\n\n Promise.resolve(onOptionCreate?.(newOption) ?? 1).then((result) => {\n const tempId = Math.random().toString(16).slice(2);\n\n newOption.value = (result as { id?: string | number })?.id ?? tempId;\n\n setOptions(state => [...state, newOption]);\n setSearchValue('');\n onChangeHandler(newOption);\n });\n };\n const onOptionEditClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>, item: ITagsDropdownOption): void => {\n e?.preventDefault();\n e?.stopPropagation();\n\n setEditingOption(editingOption?.value === item?.value ? null : item);\n };\n const onOptionDeleteClick = (): void => {\n Promise.resolve(onOptionDelete?.(editingOption) ?? 1).then(() => {\n if (editingOption?.value) deleteChosen(editingOption?.value);\n\n setOptions(options =>\n options.filter(({ value }) => value !== editingOption?.value),\n );\n setEditingOption(null);\n });\n };\n const saveEditingOption = (): void | boolean => {\n if (!editingOption?.isChanged || isEditingOptionError) {\n setEditingOption(null);\n return false;\n }\n\n onOptionEdit?.(editingOption);\n\n setOptions(options =>\n options?.map((option) => {\n if (editingOption && option.value === editingOption?.value) {\n const tmp = { ...editingOption };\n setEditingOption(null);\n return tmp;\n }\n return option;\n }),\n );\n };\n\n const setEditOptionModalStyles = (): null | void => {\n if (!editingOption || !editOptionModalRef?.current) return null;\n\n const modalSize = 200;\n const { scrollX, scrollY } = window;\n\n const positionClasses = {\n left: 'modal-left',\n right: 'modal-right',\n top: 'modal-top',\n bottom: 'modal-bottom',\n };\n\n const windowWidth\n = window.innerWidth\n || document.documentElement.clientWidth\n || document.body.clientWidth;\n\n const windowHeight\n = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n const el = (editingOption?.ref as unknown as React.MutableRefObject<Element | null>)?.current;\n const { x = 0, y = 0, width = 0, height = 0 } = el?.getBoundingClientRect() ?? {};\n\n const containerPosition\n = dropdownListWrapperRef?.current?.getBoundingClientRect();\n\n const distanceToRight\n = windowWidth - (containerPosition?.x ?? 0) - (containerPosition?.width ?? 0);\n const distanceToBottom = windowHeight - y - scrollY - height;\n\n Object.values(positionClasses)?.map((className) => {\n if (editOptionModalRef.current) editOptionModalRef.current.classList.remove(className);\n\n return className;\n });\n\n editOptionModalRef.current.classList.add(\n positionClasses?.[distanceToRight < modalSize ? 'left' : 'right'] ?? '',\n );\n\n editOptionModalRef.current.classList.add(\n positionClasses?.[distanceToBottom < modalSize ? 'top' : 'bottom'] ?? '',\n );\n\n const xTranslate\n = distanceToRight < modalSize ? 'calc(-100% + 7px)' : '-35px';\n const yTranslate\n = distanceToBottom < modalSize ? `calc(-100% - ${height + 10}px)` : '10px';\n\n if (editOptionModalRef.current instanceof HTMLElement) {\n (editOptionModalRef.current).style.left = `${x + scrollX + width}px`;\n (editOptionModalRef.current).style.top = `${y + scrollY + height}px`;\n (editOptionModalRef.current).style.transform = `translate(${xTranslate}, ${yTranslate})`;\n }\n };\n const renderEditOptionModal = (): ReactNode => {\n return (\n <div\n key={`editOptionModal${editingOption?.value}`}\n ref={editOptionModalRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__edit-option-modal`)}\n >\n <div className={cn(`${RC}__edit-option-modal-section`)}>\n <Input\n value={editingOption?.label}\n onChange={(v: string) =>\n setEditingOption(state => ({ ...state, label: v }))}\n error={!!isEditingOptionError}\n onKeyDown={(keyCode: number | string) => {\n if (keyCode === 13) saveEditingOption();\n }}\n symbolsLimit=\"50\"\n ref={editingOptionInputRef}\n />\n <Button\n variant=\"link\"\n icon={<Trash2 />}\n label=\"Delete\"\n onClick={onOptionDeleteClick}\n />\n </div>\n <div className={cn(`${RC}__edit-option-modal-section-divider`)} />\n <div className={cn(`${RC}__edit-option-modal-section`)}>\n <h3>Colors</h3>\n <div className={cn(`${RC}__edit-option-modal-section-colors`)}>\n {COLORS?.map(color => (\n <div\n key={color}\n className=\"color-block\"\n style={{ backgroundColor: color }}\n onClick={() =>\n setEditingOption(state => ({\n ...state,\n style: {\n ...(state ? state.style : {}),\n backgroundColor: color,\n },\n }))}\n >\n {editingOption?.style?.backgroundColor === color\n ? (\n <Check />\n )\n : null}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n };\n // --- CREATABLE LOGIC END --- //\n\n // --- GENERAL FUNCTIONS BEGIN --- //\n const handleClickOutside = (e: Event | MouseEvent): void => {\n const { target } = e;\n\n if (\n isOpen\n && !getListContainer()?.contains(target as HTMLElement)\n && !editOptionModalRef.current\n && !dropdownRef?.current?.contains(target as HTMLElement)\n // &&\n // (\n // customTriggerRef?.current ? customTriggerRef?.current?.contains(target) : true\n // )\n ) {\n setIsOpen(false);\n onDropdownListClose?.(e);\n }\n else if (\n editOptionModalRef.current\n && !editOptionModalRef.current?.contains(target as HTMLElement)\n ) {\n if (\n !document\n ?.getElementById?.(`editTrigger${editingOption?.value}`)\n ?.contains?.(target as HTMLElement)\n ) {\n saveEditingOption();\n }\n }\n };\n const closeList = (e: Event | MouseEvent): void => {\n handleClickOutside(e);\n if (!(e.target as HTMLElement).isEqualNode(inputRef?.current)) inputRef?.current?.blur();\n };\n const isTargetInParent = (target: HTMLElement): boolean => {\n if (\n (target?.tagName === 'svg'\n && ((target as HTMLElement)?.parentNode as HTMLElement)?.className === 'tag__button')\n || target?.tagName === 'line'\n ) {\n return false;\n }\n\n if (\n (target?.tagName === 'svg'\n && ((target as HTMLElement)?.parentNode as HTMLElement)?.className !== 'tag__button')\n || target?.className?.indexOf?.('tag__label') !== -1\n || target?.className?.indexOf?.('tag-list_wrapper') !== -1\n || target?.className.indexOf(`${RC}__trigger`) !== -1\n || target?.className === 'tags-dropdown__arrow'\n ) {\n return true;\n }\n\n return false;\n };\n const isItemMatchesSearch = (item: ITagsDropdownOption): boolean => {\n if (item.isHiddenInList) return false;\n\n const title = item.title || item.label;\n return searchValue?.length\n ? !!title?.toLowerCase().includes(searchValue?.toLowerCase() || '')\n : true;\n };\n // --- GENERAL FUNCTIONS END --- //\n\n const prepareOptions = (options: ITagsDropdownOption[]): ITagsDropdownOption[] => {\n return options\n ?.map(option => (option?.groupName ? option?.list ?? [] : option))\n .flat();\n };\n const getFilteredOptions = (options: ITagsDropdownOption[]): ITagsDropdownOption[] =>\n options?.reduce((result: ITagsDropdownOption[], option: ITagsDropdownOption) => {\n if (option.groupName) {\n const filteredGroupItems: ITagsDropdownOption[] | undefined = option?.list?.filter(item =>\n isItemMatchesSearch(item),\n );\n\n if (filteredGroupItems?.length) {\n result.push({\n ...option,\n list: filteredGroupItems,\n });\n }\n }\n else if (isItemMatchesSearch(option)) {\n result.push(option);\n }\n\n return result;\n }, []);\n const getTotalOptions = useCallback(() => {\n return options?.reduce((result, item: ITagsDropdownOption) => {\n if (item?.list) {\n result += item?.list?.length || 0;\n }\n else {\n ++result;\n }\n\n return result;\n }, 0);\n }, [options]);\n\n const onChangeHandler = (item: ITagsDropdownOption): boolean | null | void => {\n if (item?.isFreezed) return false;\n if (item?.closeOnOptionSelect !== undefined) {\n if (item.closeOnOptionSelect) setIsOpen(false);\n }\n else if (isMobile ? closeOnSelectMobile : closeOnSelect) {\n setIsOpen(false);\n }\n // setSearchValueInterceptor('');\n\n if (inputRef?.current?.focus) {\n inputRef.current.focus();\n\n const len = inputRef.current?.value?.length ?? 0;\n inputRef.current.setSelectionRange(len, len);\n }\n\n if (item.value && chosenOptions.includes(item.value)) {\n deleteChosen(item.value);\n return null;\n }\n\n if (item.value && isUseLocalOptionsStore) {\n setLocalOptionsStore((options) => {\n if (item.value) {\n return ({\n ...options,\n [item.value]: item?.label,\n });\n }\n else {\n return options;\n }\n });\n }\n\n if (item.value) onChange?.([...chosenOptions, item.value], 'chosenOptions');\n return null;\n };\n\n const onSearchHandler = (name: string): void => {\n let inputValue = name;\n if (!isNotValidateASCII) inputValue = formatToOnlyASCIICodeText(inputValue);\n setSearchValueInterceptor(inputValue);\n };\n const onWrapperClick: MouseEventHandler<Element> = (e): void => {\n if (e.target === wrapperRef?.current) {\n e.stopPropagation();\n e.preventDefault();\n\n setIsOpen(false);\n }\n };\n const selectAllItems = (): void => {\n const preparedOptions = prepareOptions(options)?.filter(\n ({ isFreezed, value }) =>\n value && !isFreezed && !chosenOptions?.includes(value || value?.toString()) && value !== 'open_modal',\n );\n\n if (isUseLocalOptionsStore) {\n setLocalOptionsStore(options =>\n preparedOptions?.reduce((result, { value, label }) => {\n if (value) result[value] = label;\n return result;\n }, options),\n );\n }\n\n onChange?.(\n [...chosenOptions, ...(preparedOptions?.map(({ value }) => value ?? '') || [])],\n 'chosenOptions',\n );\n if (isMobile ? closeOnSelectAllMobile : closeOnSelectAll) setIsOpen(false);\n };\n const unselectAllItems = (): void => {\n if (isUseLocalOptionsStore) setLocalOptionsStore({});\n onChange?.(\n chosenOptions?.filter(\n item =>\n prepareOptions(options)?.find(({ value }) => value === item)?.isFreezed,\n ),\n 'chosenOptions',\n );\n if (isMobile ? closeOnRemoveAllMobile : closeOnRemoveAll) setIsOpen(false);\n };\n const doScrollCallback = useCallback(\n (e: Event | MouseEvent) => {\n if (doLiveSearchRequest && typeof doLiveSearchRequest === 'function') {\n if (\n +Math.round((e.target as HTMLElement).clientHeight + (e.target as HTMLElement).scrollTop)\n === +(e.target as HTMLElement).scrollHeight\n ) {\n doLiveSearchRequest(searchValueRef.current, true);\n }\n }\n },\n [options],\n );\n\n // --- RENDER FUNCTIONS BEGIN --- //\n\n const getMarkupForElement = (item: ITagsDropdownOption): ReactNode => {\n const { description } = item;\n const title = item.title || item.label;\n\n const hightlightSearchValue = (title: string): ReactNode => {\n const index = title?.toLowerCase()?.indexOf(searchValue?.toLowerCase());\n\n if (index === -1) return title;\n\n return (\n <pre className=\"inherit-styles\">\n <span>{title.substring(0, index)}</span>\n <span className=\"search-match\">\n {title.substring(index, index + searchValue?.length)}\n </span>\n <span>{title.substring(index + searchValue?.length)}</span>\n </pre>\n );\n };\n\n return (\n <button\n type=\"button\"\n ref={item?.ref as LegacyRef<HTMLButtonElement>}\n key={`${RC}__list-item-${item.id || item.value}`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onChangeHandler(item);\n }}\n className={cn(\n `${RC}__list-item`,\n {\n [`${RC}__list-item_active`]: chosenOptions?.some(\n value => value === item.value,\n ),\n },\n { [`${RC}__list-item_disabled`]: item.disabled },\n { [`${RC}__list-item_freezed`]: item?.isFreezed },\n {\n [`${RC}__list-item--editing`]: item?.value === editingOption?.value,\n },\n item.className,\n )}\n >\n {!isMobile && (\n <span\n className={cn(`${RC}__active-icon`, {\n [`${RC}__active-icon_active`]: chosenOptions?.some(\n value => value === item.value,\n ),\n })}\n >\n <Check width={16} height={16} className=\"color--text\" />\n </span>\n )}\n <div className={cn(`${RC}__list-item-body`)}>\n {renderOptionsAsTags\n ? (\n <Tag\n key={item?.value}\n className={cn(`${RC}__list-item-title`, item?.labelClassName, {\n 'tag_with-btn': !item?.isFreezed,\n })}\n label={title ? hightlightSearchValue(title) : ''}\n style={item?.style}\n isUseInTable={isUseInTable}\n isNoDismiss\n />\n )\n : (\n <span className={cn(`${RC}__list-item-title`, item.labelClassName)}>\n {title ? hightlightSearchValue(title) : ''}\n </span>\n )}\n {description && (\n <span className={cn(`${RC}__list-item-description`)}>\n {description}\n </span>\n )}\n </div>\n {!isMobile && item?.isEditable && onOptionEdit && onOptionDelete && (\n <div\n id={`editTrigger${item?.value}`}\n className={cn(`${RC}__list-item-edit-trigger`)}\n onClick={e => onOptionEditClick(e, item)}\n >\n <MoreHorizontal />\n </div>\n )}\n {isMobile\n ? item?.customMobileIcon ?? (\n <CheckboxInput\n value={chosenOptions?.some(value => value === item.value)}\n onChange={() => {\n onChangeHandler(item);\n }}\n label=\"\"\n id=\"\"\n />\n )\n : ''}\n </button>\n );\n };\n const getListMarkUp = (): ReactNode => {\n const filteredOptions = getFilteredOptions(options);\n\n const arrToPrint: ReactNode[] = [];\n for (const option of filteredOptions) {\n if (option.groupName) {\n arrToPrint.push(\n <div\n key={option.groupName\n ?.toString()\n ?.replace(/ /g, '_')\n .concat(Date.now()?.toString())}\n className={cn(`${RC}-group`, option.className)}\n >\n <span className={`${RC}-group__name`}>{option.groupName}</span>\n {option.list?.map(item => getMarkupForElement(item))}\n </div>,\n );\n }\n else if (!option.readOnly) {\n arrToPrint.push(getMarkupForElement(option));\n }\n }\n\n return (\n <div\n className={cn(`${RC}__container-wrapper`)}\n ref={wrapperRef as LegacyRef<HTMLDivElement>}\n onClick={isMobile ? onWrapperClick : () => {}}\n >\n <div\n ref={dropdownListWrapperRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__selector-wrapper`, {\n [`${RC}__selector-wrapper--fixed-height`]:\n isFixedMaxHeight && isMobile,\n })}\n >\n {headerContent || isMobile\n ? (\n <div\n className={cn(`${RC}__header`, {\n [`${RC}__header-with-shadow`]: isScrollableList && isMobile,\n [`${RC}__header-with-shadow-hidden`]: scrollTop === 0,\n })}\n >\n {isMobile && (\n <>\n <div className={cn(`${RC}__header-row`)}>\n <div className={cn(`${RC}__label`)}>{label}</div>\n <div\n className={cn(`${RC}__close-icon`)}\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}\n >\n <X\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}\n />\n </div>\n </div>\n {getTotalOptions()\n > (minItemsForShowMobileSearch\n || MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH) && (\n <div className={cn(`${RC}__header-row`)}>\n <Input\n className={`${RC}__input`}\n // @ts-ignore\n value={searchValue}\n // @ts-ignore\n onChange={(v: string) => setSearchValueInterceptor(v)}\n placeholder={mobileSearchPlaceholder || 'Search'}\n withDelete\n onMouseDown={() => {\n if (!isOpen) {\n setIsOpen(true);\n }\n }}\n {...attributesOfNativeInput}\n />\n </div>\n )}\n </>\n )}\n {headerContent && (\n <div className={cn(`${RC}__header-row`)}>{headerContent}</div>\n )}\n </div>\n )\n : null}\n {withSearchInputInList && (\n <div className={cn(`${RC}__input-list-wrapper`)}>\n {renderSearchInput()}\n </div>\n )}\n {withCreateLogic\n && onOptionCreate\n && searchValue\n && filteredOptions?.length\n && singleLevelOptions.every(\n ({ label }) => label?.toLowerCase() !== searchValue?.toLowerCase(),\n )\n ? (\n <div className={cn(`${RC}__creatable-helper`)}>\n Select an option or create one\n </div>\n )\n : null}\n\n <div\n ref={dropdownListRef as LegacyRef<HTMLDivElement>}\n className={`${RC}__list ${headerContent || isMobile ? `${RC}__list--with-header` : ''} ${\n footerContent ? `${RC}__list--with-footer` : ''\n }`}\n >\n {arrToPrint}\n {filteredOptions.filter(({ value }) => value !== 'open_modal')\n ?.length === 0\n && (!withCreateLogic || !searchValue)\n ? (\n <div className={`${RC}__no-options`}>{noOptionsText}</div>\n )\n : null}\n </div>\n {(footerContent || isMobile)\n && filteredOptions.filter(({ value }) => value !== 'open_modal')\n ?.length > 0\n ? (\n <div\n className={cn(`${RC}__footer`, {\n [`${RC}__footer-with-shadow`]: isMobile && isScrollableList,\n [`${RC}__footer-with-shadow-hidden`]:\n scrollTop === scrollHeight,\n })}\n >\n {footerContent}\n {isMobile && (\n <button type=\"button\" onClick={() => setIsOpen(false)}>\n Apply\n {chosenOptions?.length ? `(${chosenOptions?.length})` : ''}\n </button>\n )}\n </div>\n )\n : null}\n {editingOption\n && createPortal(\n renderEditOptionModal(),\n document.getElementById('root') ?? document.body,\n )}\n {withCreateLogic\n && onOptionCreate\n && searchValue\n && singleLevelOptions.every(\n ({ label }) =>\n label?.toLowerCase() !== searchValue?.toLowerCase(),\n ) && (\n <div\n className={cn(`${RC}__create-option`)}\n onClick={onOptionCreateClick}\n >\n Create\n <Tag\n isUseInTable={isUseInTable}\n label={searchValue}\n style={{ backgroundColor: randomColorForNewOption }}\n isNoDismiss\n />\n </div>\n )}\n </div>\n </div>\n );\n };\n const renderSearchInput = (): ReactNode => {\n return (\n <Input\n ref={inputRef}\n // TODO: REMOVE AFTER MIGRATE INPUT TO TYPESCRIPT\n // @ts-ignore\n className={cn(`${RC}__input`, {\n [`${RC}__input--in-list`]: withSearchInputInList,\n })}\n value={searchValue}\n onChange={onSearchHandler}\n placeholder={placeholder || 'Select from list'}\n attributesOfNativeInput={{\n ...attributesOfNativeInput,\n onKeyDown: (e: KeyboardEvent) => {\n if (\n e.keyCode === 13\n && withCreateLogic\n && onOptionCreate\n && singleLevelOptions.every(\n ({ label }) =>\n label?.toLowerCase() !== searchValue?.toLowerCase(),\n )\n ) {\n onOptionCreateClick();\n }\n onKeyPress?.(e, searchValue);\n },\n // onFocus: (e) => {\n // if (isMobile) e?.target?.blur();\n // },\n }}\n {...(withCreateLogic ? { symbolsLimit: 50 } : {})}\n />\n );\n };\n const renderDropdownTrigger = useCallback(() => {\n const renderDefaultDropdownTrigger = (): ReactNode => {\n // @ts-ignore\n return (\n <div\n className={cn(`${RC}__trigger`, {\n 'tags-dropdown__error': error,\n [`${RC}__trigger--with-actions`]: withActions,\n })}\n onClick={({ target }) => {\n if ((target as HTMLElement)?.tagName === 'INPUT') {\n setIsOpen(true);\n }\n else if (isTargetInParent(target as HTMLElement)) {\n setIsOpen(isOpen => !isOpen);\n }\n }}\n >\n {noTagsWrap\n ? (\n // @ts-ignore\n <TagList\n // TODO: REMOVE AFTER MIGRATE TAGLIST TO TYPESCRIPT\n // @ts-ignore\n items={chosenOptions?.map((value, i) => {\n const tag = singleLevelOptions?.find(el => String(el.value) === String(value)) as ITagProps;\n const label = isValuesInTags\n ? tag?.value\n : tag?.label || tag?.name || tag?.title;\n return {\n value,\n label,\n id: i,\n className: tag?.labelClassName,\n style: tag?.style,\n };\n })}\n isUseInTable={isUseInTable}\n disableShowMore\n />\n )\n : (\n chosenOptions?.map((value) => {\n const tag = singleLevelOptions?.find(el => String(el.value) === String(value)) as ITagProps;\n const label = isValuesInTags\n ? tag?.value\n : tag?.label || tag?.name || tag?.title;\n return (\n <Tag\n key={value}\n className={cn(tagClassname, tag?.labelClassName, {\n 'tag_with-btn': !tag?.isFreezed,\n })}\n label={label}\n style={tag?.style}\n removeItem={(tag?.isFreezed || tag?.readOnly) ? undefined : () => deleteChosen(value)}\n isNoDismiss={false}\n isUseInTable={isUseInTable}\n />\n );\n })\n )}\n\n {chosenOptions?.length === 0 || !noTagsWrap ? renderSearchInput() : ''}\n <span\n className={cn(`${RC}__arrow`, { [`${RC}__arrow_active`]: isOpen })}\n >\n {isMobile\n ? (\n <Code className=\"mobile-icon\" />\n )\n : isOpen\n ? (\n <ChevronUp className=\"color--text\" />\n )\n : (\n <ChevronDown className=\"color--text\" />\n )}\n </span>\n </div>\n );\n };\n\n return (\n renderCustomTrigger?.({\n chosenOptions,\n singleLevelOptions,\n deleteChosen,\n inputRef,\n onSearchHandler,\n isOpen,\n setIsOpen,\n }) ?? renderDefaultDropdownTrigger()\n );\n }, [chosenOptions, singleLevelOptions, inputRef, isOpen]);\n // --- RENDER FUNCTIONS END --- //\n\n useLayoutEffect(() => {\n initListContainer();\n\n if (isDefaultOpened && !isMobileProp) setIsOpen(true);\n\n return () => {\n getListContainer()?.remove();\n getListContainerWrapper()?.remove();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!isMobile) {\n window.addEventListener('mousewheel', closeList);\n window.addEventListener('wheel', closeList);\n window.addEventListener('touchmove', closeList);\n window.addEventListener('mouseup', handleClickOutside);\n }\n else {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('wheel', closeList);\n window.removeEventListener('touchmove', closeList);\n window.removeEventListener('mouseup', handleClickOutside);\n }\n\n getListContainer()?.addEventListener('click', closeList);\n\n return () => {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('mouseup', handleClickOutside);\n window.removeEventListener('wheel', closeList);\n window.removeEventListener('touchmove', closeList);\n getListContainer()?.removeEventListener('click', closeList);\n };\n }, [getListContainer, isMobile]);\n\n useLayoutEffect(() => {\n if (isOpen) {\n setListContainerStyles();\n setEditOptionModalStyles();\n }\n }, [\n isOpen,\n optionsProp,\n chosenOptions,\n searchValue,\n isMobile,\n dropdownListWrapperRef?.current?.getBoundingClientRect()?.height,\n recalculateListContainerStylesTrigger,\n ]);\n\n useEffect(() => {\n if (\n isUseLocalOptionsStore\n && chosenOptions?.length !== Object.keys(localOptionsStore)?.length\n ) {\n options.map((option: ITagsDropdownOption) => {\n if (option?.value && !localOptionsStore?.[option?.value?.toString()]) {\n setLocalOptionsStore((options) => {\n if (option.value) {\n return ({\n ...options,\n [option?.value?.toString()]: option?.label,\n });\n }\n else {\n return options;\n }\n });\n }\n\n return option;\n });\n }\n }, [chosenOptions, isUseLocalOptionsStore]);\n\n useEffect(() => {\n const windowScrollEventHandler = (): void => {\n setWindowScrollTop(window.scrollY);\n };\n\n const fn = isOpen ? 'addEventListener' : 'removeEventListener';\n selectAllButtonRef?.current?.[fn]('click', selectAllItems, true);\n unselectAllButtonRef?.current?.[fn]('click', unselectAllItems, true);\n\n if (isOpen) {\n if (!isMobile || !withMobileLogic)\n window.removeEventListener('scroll', windowScrollEventHandler);\n\n if (customTriggerRef?.current) {\n customTriggerRef.current.style.pointerEvents = 'none';\n }\n getListContainer()?.classList.add('tags-dropdown__container--opened');\n if (!isMobile) {\n inputRef?.current?.focus?.();\n }\n else {\n inputRef?.current?.blur?.();\n }\n }\n else {\n if (!isMobile || !withMobileLogic)\n window.addEventListener('scroll', windowScrollEventHandler);\n\n if (customTriggerRef?.current) {\n customTriggerRef.current.style.pointerEvents = 'auto';\n }\n getListContainer()?.classList.remove('tags-dropdown__container--opened');\n if (withSearchInputInList) setSearchValueInterceptor('');\n searchValueRef.current = '';\n setListPos(null);\n setSearchValue('');\n }\n }, [isOpen]);\n\n useEffect(() => {\n const setScrollTopValue = (e: Event | MouseEvent): void => {\n setScrollTop(Number.parseInt((e.target as HTMLElement).scrollTop?.toString(), 10));\n };\n\n const preventWindowScrolling = (e: Event): void => {\n e.preventDefault();\n window.scrollTo({ top: windowScrollTop });\n };\n\n if (isOpen && isMobile && dropdownListRef?.current) {\n dropdownListRef?.current?.addEventListener('scroll', setScrollTopValue);\n\n setIsScrollableList(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n\n if (isScrollableList === null) {\n setIsFixedMaxHeight(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n }\n }\n\n if (isOpen && dropdownListRef && dropdownListRef.current) {\n dropdownListRef.current.addEventListener('scroll', doScrollCallback);\n if (!isMobile || !withMobileLogic)\n window.addEventListener('scroll', preventWindowScrolling);\n }\n\n return () => {\n if (!isMobile || !withMobileLogic)\n window.removeEventListener('scroll', preventWindowScrolling);\n dropdownListRef?.current?.removeEventListener('scroll', doScrollCallback);\n dropdownListRef?.current?.removeEventListener(\n 'scroll',\n setScrollTopValue,\n );\n };\n }, [\n isOpen,\n isMobile,\n dropdownListRef?.current,\n dropdownListRef?.current?.scrollHeight,\n dropdownListRef?.current?.clientHeight,\n ]);\n\n useEffect(() => {\n if (dropdownListRef?.current) {\n setScrollHeight(\n Number.parseInt(\n (dropdownListRef?.current?.scrollHeight\n - dropdownListRef?.current?.clientHeight)?.toString(),\n 10,\n ),\n );\n }\n }, [scrollTop, dropdownListRef?.current]);\n\n useEffect(() => {\n if (\n isSearchable\n && useLiveSearch\n && (debouncedSearchTerm || isValueDeleted || isOpen)\n ) {\n doLiveSearchRequest?.(searchValue ? debouncedSearchTerm : '');\n }\n }, [isOpen, debouncedSearchTerm, isValueDeleted]);\n\n useEffect(() => {\n setOptions((tagsFullList || optionsProp)?.map(option => ({ ...option, ref: createRef() })));\n }, [optionsProp, tagsFullList]);\n\n useEffect(() => {\n if (editingOption) {\n setEditOptionModalStyles();\n editingOptionInputRef?.current?.focus?.();\n }\n }, [editingOption?.value]);\n\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_disabled`]: disabled,\n [`${RC}-mobile`]: isMobile,\n [`${RC}--focused`]: isOpen && !customTriggerRef?.current && !isMobile,\n [`${RC}--custom-trigger`]: Boolean(customTriggerRef?.current),\n })}\n ref={dropdownRef as LegacyRef<HTMLDivElement>}\n >\n {renderDropdownTrigger()}\n {withActions && (\n <div className={cn(`${RC}__actions`)}>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionConfirmClick}\n >\n <Check />\n </div>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionCancelClick}\n >\n <X />\n </div>\n </div>\n )}\n {isOpen && renderListContainer()}\n </div>\n );\n};\nexport default TagsDropdown;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Text/Text.tsx"],"sourcesContent":["import type { ITextLink, ITextProps } from './Text.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './Text.scss';\n\nconst RC = 'text';\n\n/**\n *\n * @param value\n * @param className\n * @param classesObj\n * @param icon\n * @param link\n * @param align\n * @param testId\n * @return {JSX.Element|null}\n * @constructor\n */\n\n// ? Прототип лежит на проекте кабинета src\\JS\\Components\\Atomic\\FormElements\\Text\\Text.js\n// ? Что поменял?\n// ? - в верстке убрал дополнительную вложенность\n// ? (теперь только 1 внешний контейнер, доп. классы назначаются рядом с className)\n// ? - убрал пропы as и isTitle, они были для работы с предзаданными классами связанными с токенизацией\n// ? возможность прокинуть доп. классы объектом с условиями оставил через пропу classesObj\n// ? - заменил пропу text на value\n// ? - заменил пропу iconMain на icon\n// ? - переработал пропу link, может быть строкой или объектом\n// ? если это объект, то у него могут быть свойства\n// ? - path - значение для href\n\n// ? - target - значение для атрибута target, имеет смысл передавать, если не передаются onClick или redirect\n\n// ? - onClick - альтернативный обработчик нажатия, если он есть то он будет ипользован в приоритете,\n// ? ф-я будет вызвана с 1 аргументом - props, в объекте props будет свойство ev (event) и все содержание link,\n// ? по умолчанию до использования onClick будут вызваны e.preventDefault() и e.stopPropagation\n\n// ? - redirect - альтернативный исполнитель редиректа (например history.push),\n// ? если есть и нет onClick - будет вызван с одним аргументом (link.path)\n\n// ? - isNoPreventDefault - отключает вызов e.preventDefault перед вызовом onClick или redirect\n\n// ? - isNoStopPropagation - отключает вызов e.preventDefault перед вызовом onClick или redirect\n\nconst Text: React.FC<ITextProps> = ({\n value,\n className,\n classesObj,\n icon,\n link,\n align = 'left',\n testId = 'text-lib-component',\n}) => {\n if (!value) return null;\n\n const isLinkAsObj = link instanceof Object && !Array.isArray(link);\n const isLinkAsString = typeof link === 'string';\n const isLink = isLinkAsObj || isLinkAsString;\n\n const linkObj = isLinkAsObj ? link as ITextLink : {};\n const {\n path = '',\n target,\n redirect,\n onClick: onClickInner,\n isNoPreventDefault,\n isNoStopPropagation,\n } = linkObj;\n\n const preparedPath = (() => {\n if (!isLink) return '';\n return isLinkAsObj ? path : link as string;\n })();\n\n const atributes: React.AnchorHTMLAttributes<HTMLAnchorElement> = {};\n\n if (typeof onClickInner === 'function' || typeof redirect === 'function') {\n atributes.onClick = function onClick(ev: React.MouseEvent<HTMLAnchorElement>) {\n if (!isNoPreventDefault) ev.preventDefault();\n if (!isNoStopPropagation) ev.stopPropagation();\n\n // ? если переданы и onClick, и redirect, то onClick считается приоритетнее redirect\n if (onClickInner) {\n onClickInner({\n ev,\n ...(isLinkAsObj ? link as ITextLink : { path: link as string }),\n });\n return;\n }\n if (redirect) {\n redirect(preparedPath);\n }\n };\n }\n\n const mainInner = (\n <>\n {icon && <div className={`${RC}__icon-container`}>{icon}</div>}\n {value}\n </>\n );\n\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, {\n [`${RC}-left`]: align === 'left',\n [`${RC}-center`]: align === 'center',\n [`${RC}-right`]: align === 'right',\n [`${RC}-justify`]: align === 'justify',\n ...classesObj,\n })}\n >\n {isLink\n ? (\n <a\n {...atributes}\n href={preparedPath}\n target={target ?? '_self'}\n rel=\"noreferrer\"\n >\n {mainInner}\n </a>\n )\n : (\n mainInner\n )}\n </div>\n );\n};\n\nexport default Text;\n"],"mappings":";;;;;AAOA,IAAM,KAAK;;;;;;;;;;;;;AAwCX,IAAM,QAA8B,EAClC,OACA,WACA,YACA,MACA,MACA,QAAQ,QACR,SAAS,2BACL;CACJ,IAAI,CAAC,OAAO,OAAO;CAEnB,MAAM,cAAc,gBAAgB,UAAU,CAAC,MAAM,QAAQ,IAAI;CAEjE,MAAM,SAAS,eADQ,OAAO,SAAS;CAIvC,MAAM,EACJ,OAAO,IACP,QACA,UACA,SAAS,cACT,oBACA,wBAPc,cAAc,OAAoB,CAAC;CAUnD,MAAM,sBAAsB;EAC1B,IAAI,CAAC,QAAQ,OAAO;EACpB,OAAO,cAAc,OAAO;CAC9B,EAAA,CAAG;CAEH,MAAM,YAA2D,CAAC;CAElE,IAAI,OAAO,iBAAiB,cAAc,OAAO,aAAa,YAC5D,UAAU,UAAU,SAAS,QAAQ,IAAyC;EAC5E,IAAI,CAAC,oBAAoB,GAAG,eAAe;EAC3C,IAAI,CAAC,qBAAqB,GAAG,gBAAgB;EAG7C,IAAI,cAAc;GAChB,aAAa;IACX;IACA,GAAI,cAAc,OAAoB,EAAE,MAAM,KAAe;GAC/D,CAAC;GACD;EACF;EACA,IAAI,UACF,SAAS,YAAY;CAEzB;CAGF,MAAM,YACJ,qBAAA,UAAA,EAAA,UAAA,CACG,QAAQ,oBAAC,OAAD;EAAK,WAAW,GAAG,GAAG;YAAoB;CAAU,CAAA,GAC5D,KACD,EAAA,CAAA;CAGJ,OACE,oBAAC,OAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,SAAS,UAAU;IACzB,GAAG,GAAG,WAAW,UAAU;IAC3B,GAAG,GAAG,UAAU,UAAU;IAC1B,GAAG,GAAG,YAAY,UAAU;GAC7B,GAAG;EACL,CAAC;YAEA,SAEK,oBAAC,KAAD;GACE,GAAI;GACJ,MAAM;GACN,QAAQ,UAAU;GAClB,KAAI;aAEH;EACA,CAAA,IAGH;CAEH,CAAA;AAET"}
1
+ {"version":3,"file":"Text.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Text/Text.tsx"],"sourcesContent":["import type { ITextLink, ITextProps } from './Text.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './Text.scss';\n\nconst RC = 'text';\n\n/**\n *\n * @param value\n * @param className\n * @param classesObj\n * @param icon\n * @param link\n * @param align\n * @param testId\n * @return {JSX.Element|null}\n * @constructor\n */\n\n// ? Прототип лежит на проекте кабинета src\\JS\\Components\\Atomic\\FormElements\\Text\\Text.js\n// ? Что поменял?\n// ? - в верстке убрал дополнительную вложенность\n// ? (теперь только 1 внешний контейнер, доп. классы назначаются рядом с className)\n// ? - убрал пропы as и isTitle, они были для работы с предзаданными классами связанными с токенизацией\n// ? возможность прокинуть доп. классы объектом с условиями оставил через пропу classesObj\n// ? - заменил пропу text на value\n// ? - заменил пропу iconMain на icon\n// ? - переработал пропу link, может быть строкой или объектом\n// ? если это объект, то у него могут быть свойства\n// ? - path - значение для href\n\n// ? - target - значение для атрибута target, имеет смысл передавать, если не передаются onClick или redirect\n\n// ? - onClick - альтернативный обработчик нажатия, если он есть то он будет ипользован в приоритете,\n// ? ф-я будет вызвана с 1 аргументом - props, в объекте props будет свойство ev (event) и все содержание link,\n// ? по умолчанию до использования onClick будут вызваны e.preventDefault() и e.stopPropagation\n\n// ? - redirect - альтернативный исполнитель редиректа (например history.push),\n// ? если есть и нет onClick - будет вызван с одним аргументом (link.path)\n\n// ? - isNoPreventDefault - отключает вызов e.preventDefault перед вызовом onClick или redirect\n\n// ? - isNoStopPropagation - отключает вызов e.preventDefault перед вызовом onClick или redirect\n\nconst Text: React.FC<ITextProps> = ({\n value,\n className,\n classesObj,\n icon,\n link,\n align = 'left',\n testId = 'text-lib-component',\n}) => {\n if (!value) return null;\n\n const isLinkAsObj = link instanceof Object && !Array.isArray(link);\n const isLinkAsString = typeof link === 'string';\n const isLink = isLinkAsObj || isLinkAsString;\n\n const linkObj = isLinkAsObj ? link as ITextLink : {};\n const {\n path = '',\n target,\n redirect,\n onClick: onClickInner,\n isNoPreventDefault,\n isNoStopPropagation,\n } = linkObj;\n\n const preparedPath = (() => {\n if (!isLink) return '';\n return isLinkAsObj ? path : link as string;\n })();\n\n const atributes: React.AnchorHTMLAttributes<HTMLAnchorElement> = {};\n\n if (typeof onClickInner === 'function' || typeof redirect === 'function') {\n atributes.onClick = function onClick(ev: React.MouseEvent<HTMLAnchorElement>) {\n if (!isNoPreventDefault) ev.preventDefault();\n if (!isNoStopPropagation) ev.stopPropagation();\n\n // ? если переданы и onClick, и redirect, то onClick считается приоритетнее redirect\n if (onClickInner) {\n onClickInner({\n ev,\n ...(isLinkAsObj ? link as ITextLink : { path: link as string }),\n });\n return;\n }\n if (redirect) {\n redirect(preparedPath);\n }\n };\n }\n\n const mainInner = (\n <>\n {icon && <div className={`${RC}__icon-container`}>{icon}</div>}\n {value}\n </>\n );\n\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, {\n [`${RC}-left`]: align === 'left',\n [`${RC}-center`]: align === 'center',\n [`${RC}-right`]: align === 'right',\n [`${RC}-justify`]: align === 'justify',\n ...classesObj,\n })}\n >\n {isLink\n ? (\n <a\n {...atributes}\n href={preparedPath}\n target={target ?? '_self'}\n rel=\"noreferrer\"\n >\n {mainInner}\n </a>\n )\n : (\n mainInner\n )}\n </div>\n );\n};\n\nexport default Text;\n"],"mappings":";;;;;AAOA,IAAM,KAAK;;;;;;;;;;;;;AAwCX,IAAM,QAA8B,EAClC,OACA,WACA,YACA,MACA,MACA,QAAQ,QACR,SAAS,2BACL;CACJ,IAAI,CAAC,OAAO,OAAO;CAEnB,MAAM,cAAc,gBAAgB,UAAU,CAAC,MAAM,QAAQ,IAAI;CAEjE,MAAM,SAAS,eADQ,OAAO,SAAS;CAIvC,MAAM,EACJ,OAAO,IACP,QACA,UACA,SAAS,cACT,oBACA,wBAPc,cAAc,OAAoB,CAAC;CAUnD,MAAM,sBAAsB;EAC1B,IAAI,CAAC,QAAQ,OAAO;EACpB,OAAO,cAAc,OAAO;CAC9B,EAAA,CAAG;CAEH,MAAM,YAA2D,CAAC;CAElE,IAAI,OAAO,iBAAiB,cAAc,OAAO,aAAa,YAC5D,UAAU,UAAU,SAAS,QAAQ,IAAyC;EAC5E,IAAI,CAAC,oBAAoB,GAAG,eAAe;EAC3C,IAAI,CAAC,qBAAqB,GAAG,gBAAgB;EAG7C,IAAI,cAAc;GAChB,aAAa;IACX;IACA,GAAI,cAAc,OAAoB,EAAE,MAAM,KAAe;GAC/D,CAAC;GACD;EACF;EACA,IAAI,UACF,SAAS,YAAY;CAEzB;CAGF,MAAM,YACJ,qBAAA,UAAA,EAAA,UAAA,CACG,QAAQ,oBAAC,OAAD;EAAK,WAAW,GAAG,GAAG;EAAoB,UAAA;CAAU,CAAA,GAC5D,KACD,EAAA,CAAA;CAGJ,OACE,oBAAC,OAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,SAAS,UAAU;IACzB,GAAG,GAAG,WAAW,UAAU;IAC3B,GAAG,GAAG,UAAU,UAAU;IAC1B,GAAG,GAAG,YAAY,UAAU;GAC7B,GAAG;EACL,CAAC;EAEA,UAAA,SAEK,oBAAC,KAAD;GACE,GAAI;GACJ,MAAM;GACN,QAAQ,UAAU;GAClB,KAAI;GAEH,UAAA;EACA,CAAA,IAGH;CAEH,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextSwitcher.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TextSwitcher/TextSwitcher.tsx"],"sourcesContent":["import type { IUniProps } from '../../../types/base.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './TextSwitcher.scss';\n\ninterface IProps extends IUniProps {\n isActive?: boolean;\n onChange: (isActive: boolean) => void;\n disabled?: boolean;\n activeText?: string;\n inactiveText?: string;\n}\n\nconst RC = 'text-switcher';\n\nconst TextSwitcher: React.FC<IProps> = ({\n isActive,\n onChange,\n className,\n disabled,\n activeText = 'is',\n inactiveText = 'is not',\n testId = RC,\n}) => {\n const isUndefined = isActive === undefined || isActive === null;\n\n return (\n <button\n type=\"button\"\n data-testid={testId}\n className={cn(RC, { [`${RC}_active`]: isActive, [`${RC}_disabled`]: disabled }, className)}\n onClick={() => onChange(!isActive)}\n disabled={disabled}\n >\n <span className={`${RC}__btn`}>{activeText}</span>\n {inactiveText && <span className={cn(`${RC}__btn`, `${RC}__btn_off`)}>{inactiveText}</span>}\n {!isUndefined && (\n <div\n className={cn(`${RC}__slider`, {\n [`${RC}__slider_inactive`]: !isActive,\n })}\n />\n )}\n </button>\n );\n};\n\nexport default TextSwitcher;\n"],"mappings":";;;;;AAeA,IAAM,KAAK;AAEX,IAAM,gBAAkC,EACtC,UACA,UACA,WACA,UACA,aAAa,MACb,eAAe,UACf,SAAS,SACL;CACJ,MAAM,cAAc,aAAa,KAAA,KAAa,aAAa;CAE3D,OACE,qBAAC,UAAD;EACE,MAAK;EACL,eAAa;EACb,WAAW,GAAG,IAAI;IAAG,GAAG,GAAG,WAAW;IAAW,GAAG,GAAG,aAAa;EAAS,GAAG,SAAS;EACzF,eAAe,SAAS,CAAC,QAAQ;EACvB;YALZ;GAOE,oBAAC,QAAD;IAAM,WAAW,GAAG,GAAG;cAAS;GAAiB,CAAA;GAChD,gBAAgB,oBAAC,QAAD;IAAM,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,UAAU;cAAI;GAAmB,CAAA;GACzF,CAAC,eACA,oBAAC,OAAD,EACE,WAAW,GAAG,GAAG,GAAG,WAAW,GAC5B,GAAG,GAAG,qBAAqB,CAAC,SAC/B,CAAC,EACF,CAAA;EAEG;;AAEZ"}
1
+ {"version":3,"file":"TextSwitcher.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TextSwitcher/TextSwitcher.tsx"],"sourcesContent":["import type { IUniProps } from '../../../types/base.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './TextSwitcher.scss';\n\ninterface IProps extends IUniProps {\n isActive?: boolean;\n onChange: (isActive: boolean) => void;\n disabled?: boolean;\n activeText?: string;\n inactiveText?: string;\n}\n\nconst RC = 'text-switcher';\n\nconst TextSwitcher: React.FC<IProps> = ({\n isActive,\n onChange,\n className,\n disabled,\n activeText = 'is',\n inactiveText = 'is not',\n testId = RC,\n}) => {\n const isUndefined = isActive === undefined || isActive === null;\n\n return (\n <button\n type=\"button\"\n data-testid={testId}\n className={cn(RC, { [`${RC}_active`]: isActive, [`${RC}_disabled`]: disabled }, className)}\n onClick={() => onChange(!isActive)}\n disabled={disabled}\n >\n <span className={`${RC}__btn`}>{activeText}</span>\n {inactiveText && <span className={cn(`${RC}__btn`, `${RC}__btn_off`)}>{inactiveText}</span>}\n {!isUndefined && (\n <div\n className={cn(`${RC}__slider`, {\n [`${RC}__slider_inactive`]: !isActive,\n })}\n />\n )}\n </button>\n );\n};\n\nexport default TextSwitcher;\n"],"mappings":";;;;;AAeA,IAAM,KAAK;AAEX,IAAM,gBAAkC,EACtC,UACA,UACA,WACA,UACA,aAAa,MACb,eAAe,UACf,SAAS,SACL;CACJ,MAAM,cAAc,aAAa,KAAA,KAAa,aAAa;CAE3D,OACE,qBAAC,UAAD;EACE,MAAK;EACL,eAAa;EACb,WAAW,GAAG,IAAI;IAAG,GAAG,GAAG,WAAW;IAAW,GAAG,GAAG,aAAa;EAAS,GAAG,SAAS;EACzF,eAAe,SAAS,CAAC,QAAQ;EACvB;EALZ,UAAA;GAOE,oBAAC,QAAD;IAAM,WAAW,GAAG,GAAG;IAAS,UAAA;GAAiB,CAAA;GAChD,gBAAgB,oBAAC,QAAD;IAAM,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,UAAU;IAAI,UAAA;GAAmB,CAAA;GACzF,CAAC,eACA,oBAAC,OAAD,EACE,WAAW,GAAG,GAAG,GAAG,WAAW,GAC5B,GAAG,GAAG,qBAAqB,CAAC,SAC/B,CAAC,EACF,CAAA;EAEG;;AAEZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Textarea/Textarea.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n} from 'react';\nimport type { ISymbolsLimit, ITextareaProps } from './Textarea.interface';\n\nimport cn from 'classnames';\nimport React, {\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport { getIsOnlyAnObject } from '../../../Functions/utils';\n\nimport './Textarea.scss';\n\nconst RC = 'textarea';\n\nfunction getDefaultSymbolsLimit(symbolsLimit: unknown): ISymbolsLimit {\n if (typeof symbolsLimit === 'number') return { limit: symbolsLimit } as ISymbolsLimit;\n return { limit: null } as ISymbolsLimit;\n}\n\nfunction Textarea({\n ref,\n id,\n value,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n placeholder,\n disabled,\n className,\n isNotValidateASCII = false,\n testId = RC,\n withAutoGrow,\n symbolsLimit,\n}: ITextareaProps & { ref?: React.RefObject<HTMLTextAreaElement | null> }): JSX.Element {\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) || internalRef;\n\n const symbolsLimitSafely = useMemo(() => {\n const sourse = getIsOnlyAnObject(symbolsLimit) ? (symbolsLimit as ISymbolsLimit) : getDefaultSymbolsLimit(symbolsLimit);\n\n const limit = typeof sourse.limit === 'number' ? sourse.limit : null;\n const isShowLimit = typeof sourse.isShowLimit === 'boolean'\n ? sourse.isShowLimit && typeof limit === 'number' && limit >= 0\n : typeof limit === 'number' && limit >= 0;\n\n return { limit, isShowLimit };\n }, [symbolsLimit]);\n\n const handle = {\n change: (val: string) => {\n if (typeof symbolsLimitSafely.limit === 'number' && val.length > symbolsLimitSafely.limit) return;\n\n let inputValue = val;\n if (!isNotValidateASCII) {\n inputValue = formatToOnlyASCIICodeText(inputValue);\n }\n onChange(inputValue);\n },\n focus: (e: FocusEvent<HTMLTextAreaElement>) => onFocus?.(e),\n blur: (e: FocusEvent<HTMLTextAreaElement>) => onBlur?.(e),\n };\n\n const autoGrow = (el: HTMLTextAreaElement | null): void => {\n if (!el) return;\n el.style.height = '5px';\n el.style.height = `${el.scrollHeight}px`;\n };\n\n useEffect(() => {\n if (withAutoGrow) {\n autoGrow(textareaRef?.current);\n }\n }, [value, withAutoGrow]);\n\n return (\n <div data-testid={testId} className={cn(RC, className)}>\n <textarea\n id={id ?? Math.random().toString(16).slice(2)}\n data-testid={`${testId}-textarea`}\n className={`${RC}__textarea`}\n value={value}\n onChange={(e: ChangeEvent<HTMLTextAreaElement>) => handle.change(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n onKeyDown={onKeyDown}\n ref={textareaRef}\n onFocus={handle.focus}\n onBlur={handle.blur}\n />\n\n {symbolsLimitSafely.isShowLimit && (\n <div className={`${RC}__symbols-limit`}>\n {value.length}\n {' '}\n /\n {' '}\n {symbolsLimitSafely.limit}\n </div>\n )}\n </div>\n );\n}\n\nexport default Textarea;\n"],"mappings":";;;;;;;AAkBA,IAAM,KAAK;AAEX,SAAS,uBAAuB,cAAsC;CACpE,IAAI,OAAO,iBAAiB,UAAU,OAAO,EAAE,OAAO,aAAa;CACnE,OAAO,EAAE,OAAO,KAAK;AACvB;AAEA,SAAS,SAAS,EAChB,KACA,IACA,OACA,UACA,SACA,QACA,WACA,aACA,UACA,WACA,qBAAqB,OACrB,SAAS,IACT,cACA,gBACsF;CACtF,MAAM,cAAc,OAA4B,IAAI;CACpD,MAAM,cAAe,OAAgD;CAErE,MAAM,qBAAqB,cAAc;EACvC,MAAM,SAAS,kBAAkB,YAAY,IAAK,eAAiC,uBAAuB,YAAY;EAEtH,MAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;EAKhE,OAAO;GAAE;GAAO,aAJI,OAAO,OAAO,gBAAgB,YAC9C,OAAO,eAAe,OAAO,UAAU,YAAY,SAAS,IAC5D,OAAO,UAAU,YAAY,SAAS;EAEd;CAC9B,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,SAAS;EACb,SAAS,QAAgB;GACvB,IAAI,OAAO,mBAAmB,UAAU,YAAY,IAAI,SAAS,mBAAmB,OAAO;GAE3F,IAAI,aAAa;GACjB,IAAI,CAAC,oBACH,aAAa,0BAA0B,UAAU;GAEnD,SAAS,UAAU;EACrB;EACA,QAAQ,MAAuC,UAAU,CAAC;EAC1D,OAAO,MAAuC,SAAS,CAAC;CAC1D;CAEA,MAAM,YAAY,OAAyC;EACzD,IAAI,CAAC,IAAI;EACT,GAAG,MAAM,SAAS;EAClB,GAAG,MAAM,SAAS,GAAG,GAAG,aAAa;CACvC;CAEA,gBAAgB;EACd,IAAI,cACF,SAAS,aAAa,OAAO;CAEjC,GAAG,CAAC,OAAO,YAAY,CAAC;CAExB,OACE,qBAAC,OAAD;EAAK,eAAa;EAAQ,WAAW,GAAG,IAAI,SAAS;YAArD,CACE,oBAAC,YAAD;GACE,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;GAC5C,eAAa,GAAG,OAAO;GACvB,WAAW,GAAG,GAAG;GACV;GACP,WAAW,MAAwC,OAAO,OAAO,EAAE,OAAO,KAAK;GAClE;GACH;GACC;GACX,KAAK;GACL,SAAS,OAAO;GAChB,QAAQ,OAAO;EAChB,CAAA,GAEA,mBAAmB,eAClB,qBAAC,OAAD;GAAK,WAAW,GAAG,GAAG;aAAtB;IACG,MAAM;IACN;IAAI;IAEJ;IACA,mBAAmB;GACjB;IAEJ;;AAET"}
1
+ {"version":3,"file":"Textarea.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Textarea/Textarea.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n} from 'react';\nimport type { ISymbolsLimit, ITextareaProps } from './Textarea.interface';\n\nimport cn from 'classnames';\nimport React, {\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport { getIsOnlyAnObject } from '../../../Functions/utils';\n\nimport './Textarea.scss';\n\nconst RC = 'textarea';\n\nfunction getDefaultSymbolsLimit(symbolsLimit: unknown): ISymbolsLimit {\n if (typeof symbolsLimit === 'number') return { limit: symbolsLimit } as ISymbolsLimit;\n return { limit: null } as ISymbolsLimit;\n}\n\nfunction Textarea({\n ref,\n id,\n value,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n placeholder,\n disabled,\n className,\n isNotValidateASCII = false,\n testId = RC,\n withAutoGrow,\n symbolsLimit,\n}: ITextareaProps & { ref?: React.RefObject<HTMLTextAreaElement | null> }): JSX.Element {\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) || internalRef;\n\n const symbolsLimitSafely = useMemo(() => {\n const sourse = getIsOnlyAnObject(symbolsLimit) ? (symbolsLimit as ISymbolsLimit) : getDefaultSymbolsLimit(symbolsLimit);\n\n const limit = typeof sourse.limit === 'number' ? sourse.limit : null;\n const isShowLimit = typeof sourse.isShowLimit === 'boolean'\n ? sourse.isShowLimit && typeof limit === 'number' && limit >= 0\n : typeof limit === 'number' && limit >= 0;\n\n return { limit, isShowLimit };\n }, [symbolsLimit]);\n\n const handle = {\n change: (val: string) => {\n if (typeof symbolsLimitSafely.limit === 'number' && val.length > symbolsLimitSafely.limit) return;\n\n let inputValue = val;\n if (!isNotValidateASCII) {\n inputValue = formatToOnlyASCIICodeText(inputValue);\n }\n onChange(inputValue);\n },\n focus: (e: FocusEvent<HTMLTextAreaElement>) => onFocus?.(e),\n blur: (e: FocusEvent<HTMLTextAreaElement>) => onBlur?.(e),\n };\n\n const autoGrow = (el: HTMLTextAreaElement | null): void => {\n if (!el) return;\n el.style.height = '5px';\n el.style.height = `${el.scrollHeight}px`;\n };\n\n useEffect(() => {\n if (withAutoGrow) {\n autoGrow(textareaRef?.current);\n }\n }, [value, withAutoGrow]);\n\n return (\n <div data-testid={testId} className={cn(RC, className)}>\n <textarea\n id={id ?? Math.random().toString(16).slice(2)}\n data-testid={`${testId}-textarea`}\n className={`${RC}__textarea`}\n value={value}\n onChange={(e: ChangeEvent<HTMLTextAreaElement>) => handle.change(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n onKeyDown={onKeyDown}\n ref={textareaRef}\n onFocus={handle.focus}\n onBlur={handle.blur}\n />\n\n {symbolsLimitSafely.isShowLimit && (\n <div className={`${RC}__symbols-limit`}>\n {value.length}\n {' '}\n /\n {' '}\n {symbolsLimitSafely.limit}\n </div>\n )}\n </div>\n );\n}\n\nexport default Textarea;\n"],"mappings":";;;;;;;AAkBA,IAAM,KAAK;AAEX,SAAS,uBAAuB,cAAsC;CACpE,IAAI,OAAO,iBAAiB,UAAU,OAAO,EAAE,OAAO,aAAa;CACnE,OAAO,EAAE,OAAO,KAAK;AACvB;AAEA,SAAS,SAAS,EAChB,KACA,IACA,OACA,UACA,SACA,QACA,WACA,aACA,UACA,WACA,qBAAqB,OACrB,SAAS,IACT,cACA,gBACsF;CACtF,MAAM,cAAc,OAA4B,IAAI;CACpD,MAAM,cAAe,OAAgD;CAErE,MAAM,qBAAqB,cAAc;EACvC,MAAM,SAAS,kBAAkB,YAAY,IAAK,eAAiC,uBAAuB,YAAY;EAEtH,MAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;EAKhE,OAAO;GAAE;GAAO,aAJI,OAAO,OAAO,gBAAgB,YAC9C,OAAO,eAAe,OAAO,UAAU,YAAY,SAAS,IAC5D,OAAO,UAAU,YAAY,SAAS;EAEd;CAC9B,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,SAAS;EACb,SAAS,QAAgB;GACvB,IAAI,OAAO,mBAAmB,UAAU,YAAY,IAAI,SAAS,mBAAmB,OAAO;GAE3F,IAAI,aAAa;GACjB,IAAI,CAAC,oBACH,aAAa,0BAA0B,UAAU;GAEnD,SAAS,UAAU;EACrB;EACA,QAAQ,MAAuC,UAAU,CAAC;EAC1D,OAAO,MAAuC,SAAS,CAAC;CAC1D;CAEA,MAAM,YAAY,OAAyC;EACzD,IAAI,CAAC,IAAI;EACT,GAAG,MAAM,SAAS;EAClB,GAAG,MAAM,SAAS,GAAG,GAAG,aAAa;CACvC;CAEA,gBAAgB;EACd,IAAI,cACF,SAAS,aAAa,OAAO;CAEjC,GAAG,CAAC,OAAO,YAAY,CAAC;CAExB,OACE,qBAAC,OAAD;EAAK,eAAa;EAAQ,WAAW,GAAG,IAAI,SAAS;EAArD,UAAA,CACE,oBAAC,YAAD;GACE,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;GAC5C,eAAa,GAAG,OAAO;GACvB,WAAW,GAAG,GAAG;GACV;GACP,WAAW,MAAwC,OAAO,OAAO,EAAE,OAAO,KAAK;GAClE;GACH;GACC;GACX,KAAK;GACL,SAAS,OAAO;GAChB,QAAQ,OAAO;EAChB,CAAA,GAEA,mBAAmB,eAClB,qBAAC,OAAD;GAAK,WAAW,GAAG,GAAG;GAAtB,UAAA;IACG,MAAM;IACN;IAAI;IAEJ;IACA,mBAAmB;GACjB;EAEJ,CAAA,CAAA;;AAET"}
@@ -16,8 +16,10 @@ var TieredCheckboxes = ({ items = [], className, onChange, isUseParentsClassesAs
16
16
  if (prop) parent[prop] = value;
17
17
  else {
18
18
  parent.value = value;
19
- if (!prop) if (value) parent.children.filter(({ disabled }) => !disabled).forEach((item) => item.value = true);
20
- else parent.children.filter(({ disabled }) => !disabled).forEach((item) => item.value = false);
19
+ if (!prop) {
20
+ if (value) parent.children.filter(({ disabled }) => !disabled).forEach((item) => item.value = true);
21
+ else parent.children.filter(({ disabled }) => !disabled).forEach((item) => item.value = false);
22
+ }
21
23
  }
22
24
  onChange([...items]);
23
25
  },
@@ -1 +1 @@
1
- {"version":3,"file":"TieredCheckboxes.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.tsx"],"sourcesContent":["import type { ITieredCheckboxesProps, ITieredCheckboxItem } from './TieredCheckboxes.interface';\n\nimport cn from 'classnames';\nimport React, { useMemo } from 'react';\n\nimport { compareAlphabetical } from '../../../Functions/utils';\nimport CheckboxInput from '../CheckboxInput/CheckboxInput';\n\nimport AccordionWithCheckbox from './partial/AccordionWithCheckbox';\n\nimport './TieredCheckboxes.scss';\n\nconst RC = 'tiered-checkboxes';\n\nconst TieredCheckboxes: React.FC<ITieredCheckboxesProps> = ({\n items = [],\n className,\n onChange,\n isUseParentsClassesAsDataset,\n isUseAccordionForGroup,\n accordionIcons,\n isOnlyOne = false,\n sortGroups = false,\n sortGroupItems = false,\n labelFor,\n}) => {\n const handle = {\n changeParent: (value: boolean, key: string, prop?: string) => {\n const parent = items.find(item => item.key === key);\n if (!parent) return;\n\n if (prop) {\n (parent as any)[prop] = value;\n }\n else {\n parent.value = value;\n\n if (!prop) {\n if (value) {\n parent.children\n .filter(({ disabled }) => !disabled)\n .forEach(item => (item.value = true));\n }\n else {\n parent.children\n .filter(({ disabled }) => !disabled)\n .forEach(item => (item.value = false));\n }\n }\n }\n onChange([...items]);\n },\n changeChild: (value: boolean, key: string, parentKey: string) => {\n if (isOnlyOne) {\n const parent = items.find(item => item.key === parentKey);\n if (!parent) return;\n\n const child = parent.children.find(item => item.key === key);\n if (child) {\n child.value = value;\n\n parent.children = parent.children.map((item) => {\n if (item.key !== key && value === true) {\n item.disabled = true;\n parent.disabled = true;\n }\n else if (item.key !== key && value === false) {\n item.disabled = false;\n parent.disabled = false;\n }\n else {\n item.disabled = false;\n }\n return item;\n });\n\n parent.disabled = true;\n }\n }\n else {\n const parent = items.find(item => item.key === parentKey);\n if (!parent) return;\n\n const child = parent.children.find(item => item.key === key);\n if (child) {\n child.value = value;\n\n if (parent.children.every(item => item.value)) {\n parent.value = true;\n }\n else {\n parent.value = false;\n }\n }\n }\n\n onChange([...items]);\n },\n isAllChecked: (item: ITieredCheckboxItem) => {\n return (\n item?.children.some(child => child.value)\n && !item?.children.every(child => child.value)\n );\n },\n };\n\n const preparedItems = useMemo(() => {\n let newItems = [...items];\n\n if (sortGroups) {\n newItems = newItems?.sort(compareAlphabetical);\n }\n\n if (sortGroupItems) {\n newItems = newItems?.map((parent) => {\n if (parent?.children) {\n parent.children = parent?.children?.sort(compareAlphabetical);\n }\n\n return parent;\n });\n }\n\n return newItems;\n }, [items, sortGroups, sortGroupItems]);\n\n const renderInner = (parent: ITieredCheckboxItem): JSX.Element | null => {\n return parent.children\n ? (\n <div className={`${RC}__children-wrapper`}>\n {parent.children.map(child => (\n <div key={child.key} className={`${RC}__children`}>\n <CheckboxInput\n id={labelFor ? `${labelFor}_${child.key}` : child.key}\n testId={child.key}\n label={child.label}\n value={child.value}\n disabled={child?.disabled}\n onChange={(value: boolean) =>\n handle.changeChild(value, child.key, parent.key)}\n />\n </div>\n ))}\n </div>\n )\n : null;\n };\n\n return (\n <div className={cn(RC, className)}>\n {preparedItems.map((parent) => {\n const datasetProp\n = isUseParentsClassesAsDataset && parent?.className\n ? { 'data-key': parent?.className }\n : {};\n if (isUseAccordionForGroup) {\n return (\n <AccordionWithCheckbox\n key={parent.key}\n RC={RC}\n parent={parent}\n datasetProp={datasetProp}\n isUseParentsClassesAsDataset={isUseParentsClassesAsDataset}\n className={`${RC}__mono-accordion`}\n setIsOpen={() =>\n handle.changeParent(!parent.isOpen, parent.key, 'isOpen')}\n onChange={(value: boolean) => handle.changeParent(value, parent.key)}\n icon={\n !parent.isOpen\n ? accordionIcons?.[0] || null\n : accordionIcons?.[1] || null\n }\n >\n {renderInner(parent)}\n </AccordionWithCheckbox>\n );\n }\n return (\n <div\n {...datasetProp}\n key={parent.key}\n className={cn(`${RC}__parents`, {\n [`${parent.className}`]: !isUseParentsClassesAsDataset,\n })}\n >\n <CheckboxInput\n id={labelFor ? `${labelFor}_${parent.key}` : parent.key}\n isStark={handle.isAllChecked(parent)}\n label={parent.label}\n value={parent.value}\n onChange={(value: boolean) => handle.changeParent(value, parent.key)}\n disabled={\n parent.children.every(({ disabled }) => disabled === true)\n || parent.disabled\n }\n />\n <div className={cn(`${RC}__parent__children`)}>\n {renderInner(parent)}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default TieredCheckboxes;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TieredCheckboxes.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.tsx"],"sourcesContent":["import type { ITieredCheckboxesProps, ITieredCheckboxItem } from './TieredCheckboxes.interface';\n\nimport cn from 'classnames';\nimport React, { useMemo } from 'react';\n\nimport { compareAlphabetical } from '../../../Functions/utils';\nimport CheckboxInput from '../CheckboxInput/CheckboxInput';\n\nimport AccordionWithCheckbox from './partial/AccordionWithCheckbox';\n\nimport './TieredCheckboxes.scss';\n\nconst RC = 'tiered-checkboxes';\n\nconst TieredCheckboxes: React.FC<ITieredCheckboxesProps> = ({\n items = [],\n className,\n onChange,\n isUseParentsClassesAsDataset,\n isUseAccordionForGroup,\n accordionIcons,\n isOnlyOne = false,\n sortGroups = false,\n sortGroupItems = false,\n labelFor,\n}) => {\n const handle = {\n changeParent: (value: boolean, key: string, prop?: string) => {\n const parent = items.find(item => item.key === key);\n if (!parent) return;\n\n if (prop) {\n (parent as any)[prop] = value;\n }\n else {\n parent.value = value;\n\n if (!prop) {\n if (value) {\n parent.children\n .filter(({ disabled }) => !disabled)\n .forEach(item => (item.value = true));\n }\n else {\n parent.children\n .filter(({ disabled }) => !disabled)\n .forEach(item => (item.value = false));\n }\n }\n }\n onChange([...items]);\n },\n changeChild: (value: boolean, key: string, parentKey: string) => {\n if (isOnlyOne) {\n const parent = items.find(item => item.key === parentKey);\n if (!parent) return;\n\n const child = parent.children.find(item => item.key === key);\n if (child) {\n child.value = value;\n\n parent.children = parent.children.map((item) => {\n if (item.key !== key && value === true) {\n item.disabled = true;\n parent.disabled = true;\n }\n else if (item.key !== key && value === false) {\n item.disabled = false;\n parent.disabled = false;\n }\n else {\n item.disabled = false;\n }\n return item;\n });\n\n parent.disabled = true;\n }\n }\n else {\n const parent = items.find(item => item.key === parentKey);\n if (!parent) return;\n\n const child = parent.children.find(item => item.key === key);\n if (child) {\n child.value = value;\n\n if (parent.children.every(item => item.value)) {\n parent.value = true;\n }\n else {\n parent.value = false;\n }\n }\n }\n\n onChange([...items]);\n },\n isAllChecked: (item: ITieredCheckboxItem) => {\n return (\n item?.children.some(child => child.value)\n && !item?.children.every(child => child.value)\n );\n },\n };\n\n const preparedItems = useMemo(() => {\n let newItems = [...items];\n\n if (sortGroups) {\n newItems = newItems?.sort(compareAlphabetical);\n }\n\n if (sortGroupItems) {\n newItems = newItems?.map((parent) => {\n if (parent?.children) {\n parent.children = parent?.children?.sort(compareAlphabetical);\n }\n\n return parent;\n });\n }\n\n return newItems;\n }, [items, sortGroups, sortGroupItems]);\n\n const renderInner = (parent: ITieredCheckboxItem): JSX.Element | null => {\n return parent.children\n ? (\n <div className={`${RC}__children-wrapper`}>\n {parent.children.map(child => (\n <div key={child.key} className={`${RC}__children`}>\n <CheckboxInput\n id={labelFor ? `${labelFor}_${child.key}` : child.key}\n testId={child.key}\n label={child.label}\n value={child.value}\n disabled={child?.disabled}\n onChange={(value: boolean) =>\n handle.changeChild(value, child.key, parent.key)}\n />\n </div>\n ))}\n </div>\n )\n : null;\n };\n\n return (\n <div className={cn(RC, className)}>\n {preparedItems.map((parent) => {\n const datasetProp\n = isUseParentsClassesAsDataset && parent?.className\n ? { 'data-key': parent?.className }\n : {};\n if (isUseAccordionForGroup) {\n return (\n <AccordionWithCheckbox\n key={parent.key}\n RC={RC}\n parent={parent}\n datasetProp={datasetProp}\n isUseParentsClassesAsDataset={isUseParentsClassesAsDataset}\n className={`${RC}__mono-accordion`}\n setIsOpen={() =>\n handle.changeParent(!parent.isOpen, parent.key, 'isOpen')}\n onChange={(value: boolean) => handle.changeParent(value, parent.key)}\n icon={\n !parent.isOpen\n ? accordionIcons?.[0] || null\n : accordionIcons?.[1] || null\n }\n >\n {renderInner(parent)}\n </AccordionWithCheckbox>\n );\n }\n return (\n <div\n {...datasetProp}\n key={parent.key}\n className={cn(`${RC}__parents`, {\n [`${parent.className}`]: !isUseParentsClassesAsDataset,\n })}\n >\n <CheckboxInput\n id={labelFor ? `${labelFor}_${parent.key}` : parent.key}\n isStark={handle.isAllChecked(parent)}\n label={parent.label}\n value={parent.value}\n onChange={(value: boolean) => handle.changeParent(value, parent.key)}\n disabled={\n parent.children.every(({ disabled }) => disabled === true)\n || parent.disabled\n }\n />\n <div className={cn(`${RC}__parent__children`)}>\n {renderInner(parent)}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default TieredCheckboxes;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionWithCheckbox.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.tsx"],"sourcesContent":["import type { IAccordionWithCheckboxProps } from '../TieredCheckboxes.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\nimport MonoAccordion from '../../../UI/MonoAccordion/MonoAccordion';\n\nimport CheckboxInput from '../../CheckboxInput/CheckboxInput';\n\nimport '../TieredCheckboxes.scss';\n\nconst AccordionWithCheckbox: React.FC<IAccordionWithCheckboxProps> = ({\n children,\n parent,\n onChange,\n className,\n RC,\n setIsOpen,\n icon,\n disabled,\n datasetProp,\n isUseParentsClassesAsDataset,\n}) => {\n return (\n <MonoAccordion\n datasetProp={datasetProp}\n className={cn(className, {\n [`${parent.className}`]: !isUseParentsClassesAsDataset,\n })}\n isOpen={parent.isOpen}\n onClick={setIsOpen}\n icon={icon}\n disabled={disabled}\n // disabled={parent.children?.every?.((child) => child.disabled)}\n titleJSX={(\n <>\n <CheckboxInput\n id={`${parent.key}_checkbox-input`}\n className={`${RC}__checkbox-input`}\n isStark={\n parent?.children?.some?.(item => item.value)\n && !parent?.children?.every?.(item => item.value)\n }\n label={parent.label}\n value={parent.value}\n onChange={onChange}\n disabled={\n parent.children.every(({ disabled }) => disabled === true)\n || parent.disabled\n }\n />\n <span onClick={setIsOpen} className={`${RC}__description-checked`}>\n {parent?.children?.length\n ? `Selected ${parent.children.filter(child => child.value).length} from ${parent.children?.length}`\n : null}\n </span>\n </>\n )}\n >\n {children}\n </MonoAccordion>\n );\n};\n\nexport default AccordionWithCheckbox;\n"],"mappings":";;;;;;;AAUA,IAAM,yBAAgE,EACpE,UACA,QACA,UACA,WACA,IACA,WACA,MACA,UACA,aACA,mCACI;CACJ,OACE,oBAAC,eAAD;EACe;EACb,WAAW,GAAG,WAAW,GACtB,GAAG,OAAO,cAAc,CAAC,6BAC5B,CAAC;EACD,QAAQ,OAAO;EACf,SAAS;EACH;EACI;EAEV,UACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,eAAD;GACE,IAAI,GAAG,OAAO,IAAI;GAClB,WAAW,GAAG,GAAG;GACjB,SACE,QAAQ,UAAU,QAAO,SAAQ,KAAK,KAAK,KACxC,CAAC,QAAQ,UAAU,SAAQ,SAAQ,KAAK,KAAK;GAElD,OAAO,OAAO;GACd,OAAO,OAAO;GACJ;GACV,UACE,OAAO,SAAS,OAAO,EAAE,eAAe,aAAa,IAAI,KACtD,OAAO;EAEb,CAAA,GACD,oBAAC,QAAD;GAAM,SAAS;GAAW,WAAW,GAAG,GAAG;aACxC,QAAQ,UAAU,SACf,YAAY,OAAO,SAAS,QAAO,UAAS,MAAM,KAAK,CAAC,CAAC,OAAO,QAAQ,OAAO,UAAU,WACzF;EACA,CAAA,CACN,EAAA,CAAA;EAGH;CACY,CAAA;AAEnB"}
1
+ {"version":3,"file":"AccordionWithCheckbox.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.tsx"],"sourcesContent":["import type { IAccordionWithCheckboxProps } from '../TieredCheckboxes.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\nimport MonoAccordion from '../../../UI/MonoAccordion/MonoAccordion';\n\nimport CheckboxInput from '../../CheckboxInput/CheckboxInput';\n\nimport '../TieredCheckboxes.scss';\n\nconst AccordionWithCheckbox: React.FC<IAccordionWithCheckboxProps> = ({\n children,\n parent,\n onChange,\n className,\n RC,\n setIsOpen,\n icon,\n disabled,\n datasetProp,\n isUseParentsClassesAsDataset,\n}) => {\n return (\n <MonoAccordion\n datasetProp={datasetProp}\n className={cn(className, {\n [`${parent.className}`]: !isUseParentsClassesAsDataset,\n })}\n isOpen={parent.isOpen}\n onClick={setIsOpen}\n icon={icon}\n disabled={disabled}\n // disabled={parent.children?.every?.((child) => child.disabled)}\n titleJSX={(\n <>\n <CheckboxInput\n id={`${parent.key}_checkbox-input`}\n className={`${RC}__checkbox-input`}\n isStark={\n parent?.children?.some?.(item => item.value)\n && !parent?.children?.every?.(item => item.value)\n }\n label={parent.label}\n value={parent.value}\n onChange={onChange}\n disabled={\n parent.children.every(({ disabled }) => disabled === true)\n || parent.disabled\n }\n />\n <span onClick={setIsOpen} className={`${RC}__description-checked`}>\n {parent?.children?.length\n ? `Selected ${parent.children.filter(child => child.value).length} from ${parent.children?.length}`\n : null}\n </span>\n </>\n )}\n >\n {children}\n </MonoAccordion>\n );\n};\n\nexport default AccordionWithCheckbox;\n"],"mappings":";;;;;;;AAUA,IAAM,yBAAgE,EACpE,UACA,QACA,UACA,WACA,IACA,WACA,MACA,UACA,aACA,mCACI;CACJ,OACE,oBAAC,eAAD;EACe;EACb,WAAW,GAAG,WAAW,GACtB,GAAG,OAAO,cAAc,CAAC,6BAC5B,CAAC;EACD,QAAQ,OAAO;EACf,SAAS;EACH;EACI;EAEV,UACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,eAAD;GACE,IAAI,GAAG,OAAO,IAAI;GAClB,WAAW,GAAG,GAAG;GACjB,SACE,QAAQ,UAAU,QAAO,SAAQ,KAAK,KAAK,KACxC,CAAC,QAAQ,UAAU,SAAQ,SAAQ,KAAK,KAAK;GAElD,OAAO,OAAO;GACd,OAAO,OAAO;GACJ;GACV,UACE,OAAO,SAAS,OAAO,EAAE,eAAe,aAAa,IAAI,KACtD,OAAO;EAEb,CAAA,GACD,oBAAC,QAAD;GAAM,SAAS;GAAW,WAAW,GAAG,GAAG;GACxC,UAAA,QAAQ,UAAU,SACf,YAAY,OAAO,SAAS,QAAO,UAAS,MAAM,KAAK,CAAC,CAAC,OAAO,QAAQ,OAAO,UAAU,WACzF;EACA,CAAA,CACN,EAAA,CAAA;EAGH;CACY,CAAA;AAEnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimeRange.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TimeRange/TimeRange.tsx"],"sourcesContent":["import type { ITimeRangePops } from './TimeRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment';\n\nimport React, { useMemo, useState } from 'react';\nimport useToggle from '../../../Functions/useToggle';\n\nimport Input from '../Input/Input';\n\nimport Label from '../Label';\n\nimport './TimeRange.scss';\n\nconst CN = 'time-range';\n\nconst TimeRange: React.FC<ITimeRangePops> = ({\n className,\n from = '',\n to = '',\n labelFrom,\n labelTo,\n testId = CN,\n}) => {\n const [startTime, setStartTime] = useState<string>(from);\n const [endTime, setEndTime] = useState<string>(to);\n\n const { isToggled: isStartTimeValidate } = useToggle();\n const { isToggled: isEndTimeValidate } = useToggle();\n\n const isStartTimeValid = useMemo(() => moment(startTime, 'HH:mm', true).isValid(), [startTime]);\n const isEndTimeValid = useMemo(() => moment(endTime, 'HH:mm', true).isValid(), [endTime]);\n\n const blurTimeHandler = (time: string, setFunc: (value: string) => void): void => {\n const formattedTime = time ? moment(time, 'HH:mm').format('HH:mm') : '';\n setFunc(formattedTime);\n };\n\n return (\n <div data-testid={testId} className={cn(CN, className)}>\n <div className=\"time-range__range\">\n <Label label={labelFrom || 'Between'} />\n <Input\n // @ts-ignore - инпут пока .js\n // ANCHOR - пока .js\n className=\"time-range__input\"\n value={startTime}\n onChange={(value: string) => setStartTime(value)}\n placeholder=\"00:00\"\n onBlur={() => blurTimeHandler(startTime, setStartTime)}\n error={isStartTimeValidate || !isStartTimeValid ? 'HH:MM format' : ''}\n testId=\"start-time-input\"\n />\n\n <Label label={labelTo || 'and'} />\n <Input\n // @ts-ignore - инпут пока .js\n // ANCHOR - пока .js\n className=\"time-range__input\"\n value={endTime}\n onChange={(value: string) => setEndTime(value)}\n placeholder=\"00:00\"\n onBlur={() => blurTimeHandler(endTime, setEndTime)}\n error={isEndTimeValidate || !isEndTimeValid ? 'HH:MM format' : ''}\n testId=\"end-time-input\"\n />\n </div>\n </div>\n );\n};\n\nexport default TimeRange;\n"],"mappings":";;;;;;;;;AAaA,IAAM,KAAK;AAEX,IAAM,aAAuC,EAC3C,WACA,OAAO,IACP,KAAK,IACL,WACA,SACA,SAAS,SACL;CACJ,MAAM,CAAC,WAAW,gBAAgB,SAAiB,IAAI;CACvD,MAAM,CAAC,SAAS,cAAc,SAAiB,EAAE;CAEjD,MAAM,EAAE,WAAW,wBAAwB,UAAU;CACrD,MAAM,EAAE,WAAW,sBAAsB,UAAU;CAEnD,MAAM,mBAAmB,cAAc,OAAO,WAAW,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC;CAC9F,MAAM,iBAAiB,cAAc,OAAO,SAAS,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC;CAExF,MAAM,mBAAmB,MAAc,YAA2C;EAEhF,QADsB,OAAO,OAAO,MAAM,OAAO,CAAC,CAAC,OAAO,OAAO,IAAI,EAChD;CACvB;CAEA,OACE,oBAAC,OAAD;EAAK,eAAa;EAAQ,WAAW,GAAG,IAAI,SAAS;YACnD,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,oBAAC,eAAD,EAAO,OAAO,aAAa,UAAY,CAAA;IACvC,oBAAC,OAAD;KAGE,WAAU;KACV,OAAO;KACP,WAAW,UAAkB,aAAa,KAAK;KAC/C,aAAY;KACZ,cAAc,gBAAgB,WAAW,YAAY;KACrD,OAAO,uBAAuB,CAAC,mBAAmB,iBAAiB;KACnE,QAAO;IACR,CAAA;IAED,oBAAC,eAAD,EAAO,OAAO,WAAW,MAAQ,CAAA;IACjC,oBAAC,OAAD;KAGE,WAAU;KACV,OAAO;KACP,WAAW,UAAkB,WAAW,KAAK;KAC7C,aAAY;KACZ,cAAc,gBAAgB,SAAS,UAAU;KACjD,OAAO,qBAAqB,CAAC,iBAAiB,iBAAiB;KAC/D,QAAO;IACR,CAAA;GACE;;CACF,CAAA;AAET"}
1
+ {"version":3,"file":"TimeRange.js","names":[],"sources":["../../../../../src/Atomic/FormElements/TimeRange/TimeRange.tsx"],"sourcesContent":["import type { ITimeRangePops } from './TimeRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment';\n\nimport React, { useMemo, useState } from 'react';\nimport useToggle from '../../../Functions/useToggle';\n\nimport Input from '../Input/Input';\n\nimport Label from '../Label';\n\nimport './TimeRange.scss';\n\nconst CN = 'time-range';\n\nconst TimeRange: React.FC<ITimeRangePops> = ({\n className,\n from = '',\n to = '',\n labelFrom,\n labelTo,\n testId = CN,\n}) => {\n const [startTime, setStartTime] = useState<string>(from);\n const [endTime, setEndTime] = useState<string>(to);\n\n const { isToggled: isStartTimeValidate } = useToggle();\n const { isToggled: isEndTimeValidate } = useToggle();\n\n const isStartTimeValid = useMemo(() => moment(startTime, 'HH:mm', true).isValid(), [startTime]);\n const isEndTimeValid = useMemo(() => moment(endTime, 'HH:mm', true).isValid(), [endTime]);\n\n const blurTimeHandler = (time: string, setFunc: (value: string) => void): void => {\n const formattedTime = time ? moment(time, 'HH:mm').format('HH:mm') : '';\n setFunc(formattedTime);\n };\n\n return (\n <div data-testid={testId} className={cn(CN, className)}>\n <div className=\"time-range__range\">\n <Label label={labelFrom || 'Between'} />\n <Input\n // @ts-ignore - инпут пока .js\n // ANCHOR - пока .js\n className=\"time-range__input\"\n value={startTime}\n onChange={(value: string) => setStartTime(value)}\n placeholder=\"00:00\"\n onBlur={() => blurTimeHandler(startTime, setStartTime)}\n error={isStartTimeValidate || !isStartTimeValid ? 'HH:MM format' : ''}\n testId=\"start-time-input\"\n />\n\n <Label label={labelTo || 'and'} />\n <Input\n // @ts-ignore - инпут пока .js\n // ANCHOR - пока .js\n className=\"time-range__input\"\n value={endTime}\n onChange={(value: string) => setEndTime(value)}\n placeholder=\"00:00\"\n onBlur={() => blurTimeHandler(endTime, setEndTime)}\n error={isEndTimeValidate || !isEndTimeValid ? 'HH:MM format' : ''}\n testId=\"end-time-input\"\n />\n </div>\n </div>\n );\n};\n\nexport default TimeRange;\n"],"mappings":";;;;;;;;;AAaA,IAAM,KAAK;AAEX,IAAM,aAAuC,EAC3C,WACA,OAAO,IACP,KAAK,IACL,WACA,SACA,SAAS,SACL;CACJ,MAAM,CAAC,WAAW,gBAAgB,SAAiB,IAAI;CACvD,MAAM,CAAC,SAAS,cAAc,SAAiB,EAAE;CAEjD,MAAM,EAAE,WAAW,wBAAwB,UAAU;CACrD,MAAM,EAAE,WAAW,sBAAsB,UAAU;CAEnD,MAAM,mBAAmB,cAAc,OAAO,WAAW,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC;CAC9F,MAAM,iBAAiB,cAAc,OAAO,SAAS,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC;CAExF,MAAM,mBAAmB,MAAc,YAA2C;EAEhF,QADsB,OAAO,OAAO,MAAM,OAAO,CAAC,CAAC,OAAO,OAAO,IAAI,EAChD;CACvB;CAEA,OACE,oBAAC,OAAD;EAAK,eAAa;EAAQ,WAAW,GAAG,IAAI,SAAS;EACnD,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,oBAAC,eAAD,EAAO,OAAO,aAAa,UAAY,CAAA;IACvC,oBAAC,OAAD;KAGE,WAAU;KACV,OAAO;KACP,WAAW,UAAkB,aAAa,KAAK;KAC/C,aAAY;KACZ,cAAc,gBAAgB,WAAW,YAAY;KACrD,OAAO,uBAAuB,CAAC,mBAAmB,iBAAiB;KACnE,QAAO;IACR,CAAA;IAED,oBAAC,eAAD,EAAO,OAAO,WAAW,MAAQ,CAAA;IACjC,oBAAC,OAAD;KAGE,WAAU;KACV,OAAO;KACP,WAAW,UAAkB,WAAW,KAAK;KAC7C,aAAY;KACZ,cAAc,gBAAgB,SAAS,UAAU;KACjD,OAAO,qBAAqB,CAAC,iBAAiB,iBAAiB;KAC/D,QAAO;IACR,CAAA;GACE;;CACF,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserContacts.js","names":[],"sources":["../../../../../src/Atomic/FormElements/UserContacts/UserContacts.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type {\n IUserContactProps,\n TContactPrefix,\n TMainContactsDescriptions,\n} from './UserContacts.interface';\nimport cn from 'classnames';\n\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { Email, Phone } from '../../../Molecular/CustomIcons';\n\nimport './UserContacts.scss';\n\nconst RC = 'user-contacts';\n\nconst UserContacts: React.FC<IUserContactProps> = (props) => {\n const {\n testId = RC,\n className,\n email,\n phone,\n EmailIcon,\n PhoneIcon,\n isFirstPhone = false,\n maxWidth,\n isUseCommaSeparator = true,\n generalizingWord = 'contact',\n isNotRenderGeneralizingWord = false,\n Lng = (value: string): string => value,\n otherContacts = [],\n isOtherTogetherMainContacts = false,\n ...mainContacts\n } = props || {};\n\n const mainContactsDescriptions: TMainContactsDescriptions = {\n isDisputeContact: 'Dispute',\n isSalesContact: 'Sales',\n isAccountingContact: 'Accounting',\n isBusinessContact: 'Business',\n isTechnicalContact: 'Technical',\n };\n\n const getContact = (key: keyof TMainContactsDescriptions): string => {\n const contact = mainContacts[key] as TContactPrefix | boolean | undefined;\n const { prefix = '', postfix = '' } = typeof contact === 'object' ? contact : {};\n\n return `${prefix ? `${Lng(prefix.toString())} ` : ''}${Lng(mainContactsDescriptions[key])}${\n postfix ? ` ${Lng(postfix.toString())}` : ''\n }`;\n };\n\n let mainContactsStructure: string[] = (\n Object.keys(mainContacts) as Array<keyof TMainContactsDescriptions>\n ).reduce(\n (acc: string[], key) =>\n mainContacts[key] && key in mainContactsDescriptions ? [...acc, getContact(key)] : acc,\n [],\n );\n\n mainContactsStructure = isOtherTogetherMainContacts\n ? [\n ...mainContactsStructure,\n ...(Array.isArray(otherContacts) ? otherContacts.map((contact: string) => Lng(contact)) : []),\n ]\n : mainContactsStructure;\n\n let mainContactsCount = mainContactsStructure.length;\n let otherContactsCount = otherContacts?.length || 0;\n const isContacts = Boolean(mainContactsCount) || Boolean(otherContactsCount);\n const isMainContacts = Boolean(mainContactsCount);\n\n const mainRef = useRef<HTMLDivElement>(null);\n const firstRef = useRef<HTMLAnchorElement>(null);\n const secondRef = useRef<HTMLAnchorElement>(null);\n const contactsRef = useRef<HTMLSpanElement>(null);\n\n const [isIconMode, setIconMode] = useState<boolean>(false);\n const [isRunTask, setIsRunTask] = useState<Record<string, never> | null>(null);\n\n const getSeparator = (type?: 'main' | 'other'): string => {\n const separator = isUseCommaSeparator ? ', ' : ' ';\n switch (type) {\n case 'main':\n return mainContactsCount-- > 1 ? separator : '';\n case 'other':\n return otherContactsCount-- > 1 ? separator : '';\n default:\n return separator;\n }\n };\n\n type ContactKey = 'email' | 'phone';\n\n const firstKey: ContactKey = isFirstPhone ? 'phone' : 'email';\n const secondKey: ContactKey = isFirstPhone ? 'email' : 'phone';\n\n const getIcon = (key: ContactKey): ReactNode => {\n switch (key) {\n case 'email':\n return EmailIcon || <Email />;\n case 'phone':\n return PhoneIcon || <Phone />;\n default:\n return null;\n }\n };\n\n const getProtocol = (key: ContactKey): string => {\n switch (key) {\n case 'email':\n return 'mailto:';\n case 'phone':\n return 'tel:';\n default:\n return 'https://';\n }\n };\n\n const getClasses = (isFirst: boolean): string =>\n cn('no-wrap', `${RC}__${isFirst ? firstKey : secondKey}`, {\n [`${RC}__${isFirst ? firstKey : secondKey}_icon-mode`]: isIconMode,\n });\n\n const checkWidth = (): void => {\n if (mainRef.current && firstRef.current && secondRef.current && contactsRef.current) {\n const measure: number = maxWidth || mainRef.current.clientWidth;\n\n if (\n firstRef.current.clientWidth + secondRef.current.clientWidth + contactsRef.current.clientWidth\n > measure\n ) {\n setIconMode(true);\n }\n else {\n setIconMode(false);\n }\n }\n };\n\n useLayoutEffect(checkWidth, [isRunTask]);\n\n useEffect(() => {\n setIsRunTask({});\n return () => setIconMode(false);\n }, [email, phone, JSON.stringify(mainContactsStructure), Number(maxWidth)]);\n\n return (\n <div data-testid={testId} ref={mainRef} className={cn('j4', RC, className)}>\n {Boolean(props[firstKey]) && (\n <a\n ref={firstRef}\n href={`${getProtocol(firstKey)}${props[firstKey]?.trim()}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={getClasses(true)}\n >\n {isIconMode\n ? getIcon(firstKey)\n : `${props[firstKey]}${props[secondKey] || isContacts ? getSeparator() : ''}`}\n </a>\n )}\n {Boolean(props[secondKey]) && (\n <a\n ref={secondRef}\n href={`${getProtocol(secondKey)}${props[secondKey]?.trim()}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={getClasses(false)}\n >\n {isIconMode ? getIcon(secondKey) : `${props[secondKey]}${isContacts ? getSeparator() : ''}`}\n </a>\n )}\n\n {isContacts && (\n <span ref={contactsRef} className={cn('no-wrap', `${RC}__contacts`)}>\n {isMainContacts\n ? mainContactsStructure.map((contact: string) => `${contact}${getSeparator('main')}`)\n : null}\n {isMainContacts && generalizingWord && !isNotRenderGeneralizingWord\n ? ` ${Lng(generalizingWord)}`\n : ''}\n {isMainContacts\n && Boolean(otherContacts)\n && Boolean(otherContacts?.length)\n && !isOtherTogetherMainContacts\n ? getSeparator()\n : ''}\n {Boolean(otherContacts) && Boolean(otherContacts?.length) && !isOtherTogetherMainContacts\n ? otherContacts?.map?.((contact: string) => `${contact}${getSeparator('other')}`)\n : null}\n </span>\n )}\n </div>\n );\n};\n\nexport default UserContacts;\n"],"mappings":"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"}
1
+ {"version":3,"file":"UserContacts.js","names":[],"sources":["../../../../../src/Atomic/FormElements/UserContacts/UserContacts.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type {\n IUserContactProps,\n TContactPrefix,\n TMainContactsDescriptions,\n} from './UserContacts.interface';\nimport cn from 'classnames';\n\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { Email, Phone } from '../../../Molecular/CustomIcons';\n\nimport './UserContacts.scss';\n\nconst RC = 'user-contacts';\n\nconst UserContacts: React.FC<IUserContactProps> = (props) => {\n const {\n testId = RC,\n className,\n email,\n phone,\n EmailIcon,\n PhoneIcon,\n isFirstPhone = false,\n maxWidth,\n isUseCommaSeparator = true,\n generalizingWord = 'contact',\n isNotRenderGeneralizingWord = false,\n Lng = (value: string): string => value,\n otherContacts = [],\n isOtherTogetherMainContacts = false,\n ...mainContacts\n } = props || {};\n\n const mainContactsDescriptions: TMainContactsDescriptions = {\n isDisputeContact: 'Dispute',\n isSalesContact: 'Sales',\n isAccountingContact: 'Accounting',\n isBusinessContact: 'Business',\n isTechnicalContact: 'Technical',\n };\n\n const getContact = (key: keyof TMainContactsDescriptions): string => {\n const contact = mainContacts[key] as TContactPrefix | boolean | undefined;\n const { prefix = '', postfix = '' } = typeof contact === 'object' ? contact : {};\n\n return `${prefix ? `${Lng(prefix.toString())} ` : ''}${Lng(mainContactsDescriptions[key])}${\n postfix ? ` ${Lng(postfix.toString())}` : ''\n }`;\n };\n\n let mainContactsStructure: string[] = (\n Object.keys(mainContacts) as Array<keyof TMainContactsDescriptions>\n ).reduce(\n (acc: string[], key) =>\n mainContacts[key] && key in mainContactsDescriptions ? [...acc, getContact(key)] : acc,\n [],\n );\n\n mainContactsStructure = isOtherTogetherMainContacts\n ? [\n ...mainContactsStructure,\n ...(Array.isArray(otherContacts) ? otherContacts.map((contact: string) => Lng(contact)) : []),\n ]\n : mainContactsStructure;\n\n let mainContactsCount = mainContactsStructure.length;\n let otherContactsCount = otherContacts?.length || 0;\n const isContacts = Boolean(mainContactsCount) || Boolean(otherContactsCount);\n const isMainContacts = Boolean(mainContactsCount);\n\n const mainRef = useRef<HTMLDivElement>(null);\n const firstRef = useRef<HTMLAnchorElement>(null);\n const secondRef = useRef<HTMLAnchorElement>(null);\n const contactsRef = useRef<HTMLSpanElement>(null);\n\n const [isIconMode, setIconMode] = useState<boolean>(false);\n const [isRunTask, setIsRunTask] = useState<Record<string, never> | null>(null);\n\n const getSeparator = (type?: 'main' | 'other'): string => {\n const separator = isUseCommaSeparator ? ', ' : ' ';\n switch (type) {\n case 'main':\n return mainContactsCount-- > 1 ? separator : '';\n case 'other':\n return otherContactsCount-- > 1 ? separator : '';\n default:\n return separator;\n }\n };\n\n type ContactKey = 'email' | 'phone';\n\n const firstKey: ContactKey = isFirstPhone ? 'phone' : 'email';\n const secondKey: ContactKey = isFirstPhone ? 'email' : 'phone';\n\n const getIcon = (key: ContactKey): ReactNode => {\n switch (key) {\n case 'email':\n return EmailIcon || <Email />;\n case 'phone':\n return PhoneIcon || <Phone />;\n default:\n return null;\n }\n };\n\n const getProtocol = (key: ContactKey): string => {\n switch (key) {\n case 'email':\n return 'mailto:';\n case 'phone':\n return 'tel:';\n default:\n return 'https://';\n }\n };\n\n const getClasses = (isFirst: boolean): string =>\n cn('no-wrap', `${RC}__${isFirst ? firstKey : secondKey}`, {\n [`${RC}__${isFirst ? firstKey : secondKey}_icon-mode`]: isIconMode,\n });\n\n const checkWidth = (): void => {\n if (mainRef.current && firstRef.current && secondRef.current && contactsRef.current) {\n const measure: number = maxWidth || mainRef.current.clientWidth;\n\n if (\n firstRef.current.clientWidth + secondRef.current.clientWidth + contactsRef.current.clientWidth\n > measure\n ) {\n setIconMode(true);\n }\n else {\n setIconMode(false);\n }\n }\n };\n\n useLayoutEffect(checkWidth, [isRunTask]);\n\n useEffect(() => {\n setIsRunTask({});\n return () => setIconMode(false);\n }, [email, phone, JSON.stringify(mainContactsStructure), Number(maxWidth)]);\n\n return (\n <div data-testid={testId} ref={mainRef} className={cn('j4', RC, className)}>\n {Boolean(props[firstKey]) && (\n <a\n ref={firstRef}\n href={`${getProtocol(firstKey)}${props[firstKey]?.trim()}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={getClasses(true)}\n >\n {isIconMode\n ? getIcon(firstKey)\n : `${props[firstKey]}${props[secondKey] || isContacts ? getSeparator() : ''}`}\n </a>\n )}\n {Boolean(props[secondKey]) && (\n <a\n ref={secondRef}\n href={`${getProtocol(secondKey)}${props[secondKey]?.trim()}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={getClasses(false)}\n >\n {isIconMode ? getIcon(secondKey) : `${props[secondKey]}${isContacts ? getSeparator() : ''}`}\n </a>\n )}\n\n {isContacts && (\n <span ref={contactsRef} className={cn('no-wrap', `${RC}__contacts`)}>\n {isMainContacts\n ? mainContactsStructure.map((contact: string) => `${contact}${getSeparator('main')}`)\n : null}\n {isMainContacts && generalizingWord && !isNotRenderGeneralizingWord\n ? ` ${Lng(generalizingWord)}`\n : ''}\n {isMainContacts\n && Boolean(otherContacts)\n && Boolean(otherContacts?.length)\n && !isOtherTogetherMainContacts\n ? getSeparator()\n : ''}\n {Boolean(otherContacts) && Boolean(otherContacts?.length) && !isOtherTogetherMainContacts\n ? otherContacts?.map?.((contact: string) => `${contact}${getSeparator('other')}`)\n : null}\n </span>\n )}\n </div>\n );\n};\n\nexport default UserContacts;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","names":[],"sources":["../../../../../src/Atomic/Layout/Header/Header.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { IHeaderProps } from './Header.interface';\nimport cn from 'classnames';\nimport { useRef, useState } from 'react';\n\nimport { Bell, ChevronRight, Power } from 'react-feather';\n\nimport Hint from '../../UI/Hint/Hint';\nimport './Header.scss';\n\nfunction Header({\n className,\n name = 'John',\n surname = 'Silver',\n status = 'admin',\n img = '',\n hintLabel = 'Help',\n hintText = 'Hint text',\n}: IHeaderProps): ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n\n const userMenu = useRef(null);\n\n const handle = {\n toggleMenu: () => {\n if (!isOpen) setIsOpen(!isOpen);\n },\n closeMenu: () => {\n setTimeout(() => setIsOpen(false), 50);\n },\n logout: () => {\n handle.toggleMenu();\n },\n };\n\n return (\n <header className={cn('header', className)}>\n <div className=\"df\">\n <Hint\n side=\"bottom\"\n hint={hintText}\n className=\"header__hint\"\n label={hintLabel}\n />\n </div>\n\n <div className=\"j6 user-menu\">\n <div onClick={() => {}} className=\"header--bell\">\n <Bell className=\"header--bell-icon\" />\n <div className=\"header--bell-notification-icon\" />\n </div>\n\n <div className=\"header--user-ava\">\n {img && <img src={img} alt=\"user-avatar\" />}\n </div>\n\n <div className=\"dfc mr10\">\n <span className=\"header--user-name\">\n {name}\n {' '}\n {surname}\n </span>\n <span className=\"header--user-status\">{status}</span>\n </div>\n\n <ChevronRight\n onClick={handle.toggleMenu}\n data-testid=\"accordion--title-chevron\"\n className={cn('accordion--title-chevron', {\n 'accordion--title-chevron-open': isOpen,\n })}\n />\n {isOpen && (\n <div className=\"user-menu__dropdown\" ref={userMenu}>\n <div className=\"user-menu__item\" onClick={handle.logout}>\n <Power className=\"mr10\" />\n {' '}\n Logout\n </div>\n </div>\n )}\n </div>\n </header>\n );\n}\n\nexport default Header;\n"],"mappings":";;;;;;;AAWA,SAAS,OAAO,EACd,WACA,OAAO,QACP,UAAU,UACV,SAAS,SACT,MAAM,IACN,YAAY,QACZ,WAAW,eACkB;CAC7B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,MAAM,WAAW,OAAO,IAAI;CAE5B,MAAM,SAAS;EACb,kBAAkB;GAChB,IAAI,CAAC,QAAQ,UAAU,CAAC,MAAM;EAChC;EACA,iBAAiB;GACf,iBAAiB,UAAU,KAAK,GAAG,EAAE;EACvC;EACA,cAAc;GACZ,OAAO,WAAW;EACpB;CACF;CAEA,OACE,qBAAC,UAAD;EAAQ,WAAW,GAAG,UAAU,SAAS;YAAzC,CACE,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,MAAD;IACE,MAAK;IACL,MAAM;IACN,WAAU;IACV,OAAO;GACR,CAAA;EACE,CAAA,GAEL,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,qBAAC,OAAD;KAAK,eAAe,CAAC;KAAG,WAAU;eAAlC,CACE,oBAAC,MAAD,EAAM,WAAU,oBAAqB,CAAA,GACrC,oBAAC,OAAD,EAAK,WAAU,iCAAkC,CAAA,CAC9C;;IAEL,oBAAC,OAAD;KAAK,WAAU;eACZ,OAAO,oBAAC,OAAD;MAAK,KAAK;MAAK,KAAI;KAAe,CAAA;IACvC,CAAA;IAEL,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG;OACA;OACA;MACG;SACN,oBAAC,QAAD;MAAM,WAAU;gBAAuB;KAAa,CAAA,CACjD;;IAEL,oBAAC,cAAD;KACE,SAAS,OAAO;KAChB,eAAY;KACZ,WAAW,GAAG,4BAA4B,EACxC,iCAAiC,OACnC,CAAC;IACF,CAAA;IACA,UACC,oBAAC,OAAD;KAAK,WAAU;KAAsB,KAAK;eACxC,qBAAC,OAAD;MAAK,WAAU;MAAkB,SAAS,OAAO;gBAAjD;OACE,oBAAC,OAAD,EAAO,WAAU,OAAQ,CAAA;OACxB;OAAI;MAEF;;IACF,CAAA;GAEJ;IACC;;AAEZ"}
1
+ {"version":3,"file":"Header.js","names":[],"sources":["../../../../../src/Atomic/Layout/Header/Header.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { IHeaderProps } from './Header.interface';\nimport cn from 'classnames';\nimport { useRef, useState } from 'react';\n\nimport { Bell, ChevronRight, Power } from 'react-feather';\n\nimport Hint from '../../UI/Hint/Hint';\nimport './Header.scss';\n\nfunction Header({\n className,\n name = 'John',\n surname = 'Silver',\n status = 'admin',\n img = '',\n hintLabel = 'Help',\n hintText = 'Hint text',\n}: IHeaderProps): ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n\n const userMenu = useRef(null);\n\n const handle = {\n toggleMenu: () => {\n if (!isOpen) setIsOpen(!isOpen);\n },\n closeMenu: () => {\n setTimeout(() => setIsOpen(false), 50);\n },\n logout: () => {\n handle.toggleMenu();\n },\n };\n\n return (\n <header className={cn('header', className)}>\n <div className=\"df\">\n <Hint\n side=\"bottom\"\n hint={hintText}\n className=\"header__hint\"\n label={hintLabel}\n />\n </div>\n\n <div className=\"j6 user-menu\">\n <div onClick={() => {}} className=\"header--bell\">\n <Bell className=\"header--bell-icon\" />\n <div className=\"header--bell-notification-icon\" />\n </div>\n\n <div className=\"header--user-ava\">\n {img && <img src={img} alt=\"user-avatar\" />}\n </div>\n\n <div className=\"dfc mr10\">\n <span className=\"header--user-name\">\n {name}\n {' '}\n {surname}\n </span>\n <span className=\"header--user-status\">{status}</span>\n </div>\n\n <ChevronRight\n onClick={handle.toggleMenu}\n data-testid=\"accordion--title-chevron\"\n className={cn('accordion--title-chevron', {\n 'accordion--title-chevron-open': isOpen,\n })}\n />\n {isOpen && (\n <div className=\"user-menu__dropdown\" ref={userMenu}>\n <div className=\"user-menu__item\" onClick={handle.logout}>\n <Power className=\"mr10\" />\n {' '}\n Logout\n </div>\n </div>\n )}\n </div>\n </header>\n );\n}\n\nexport default Header;\n"],"mappings":";;;;;;;AAWA,SAAS,OAAO,EACd,WACA,OAAO,QACP,UAAU,UACV,SAAS,SACT,MAAM,IACN,YAAY,QACZ,WAAW,eACkB;CAC7B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,MAAM,WAAW,OAAO,IAAI;CAE5B,MAAM,SAAS;EACb,kBAAkB;GAChB,IAAI,CAAC,QAAQ,UAAU,CAAC,MAAM;EAChC;EACA,iBAAiB;GACf,iBAAiB,UAAU,KAAK,GAAG,EAAE;EACvC;EACA,cAAc;GACZ,OAAO,WAAW;EACpB;CACF;CAEA,OACE,qBAAC,UAAD;EAAQ,WAAW,GAAG,UAAU,SAAS;EAAzC,UAAA,CACE,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,MAAD;IACE,MAAK;IACL,MAAM;IACN,WAAU;IACV,OAAO;GACR,CAAA;EACE,CAAA,GAEL,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,qBAAC,OAAD;KAAK,eAAe,CAAC;KAAG,WAAU;KAAlC,UAAA,CACE,oBAAC,MAAD,EAAM,WAAU,oBAAqB,CAAA,GACrC,oBAAC,OAAD,EAAK,WAAU,iCAAkC,CAAA,CAC9C;;IAEL,oBAAC,OAAD;KAAK,WAAU;KACZ,UAAA,OAAO,oBAAC,OAAD;MAAK,KAAK;MAAK,KAAI;KAAe,CAAA;IACvC,CAAA;IAEL,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,qBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OACG;OACA;OACA;MACG;KACN,CAAA,GAAA,oBAAC,QAAD;MAAM,WAAU;MAAuB,UAAA;KAAa,CAAA,CACjD;;IAEL,oBAAC,cAAD;KACE,SAAS,OAAO;KAChB,eAAY;KACZ,WAAW,GAAG,4BAA4B,EACxC,iCAAiC,OACnC,CAAC;IACF,CAAA;IACA,UACC,oBAAC,OAAD;KAAK,WAAU;KAAsB,KAAK;KACxC,UAAA,qBAAC,OAAD;MAAK,WAAU;MAAkB,SAAS,OAAO;MAAjD,UAAA;OACE,oBAAC,OAAD,EAAO,WAAU,OAAQ,CAAA;OACxB;OAAI;MAEF;;IACF,CAAA;GAEJ;EACC,CAAA,CAAA;;AAEZ"}