@scbt-ecom/ui 0.93.0 → 0.95.0

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 (474) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/configs/tailwindConfigBase.js.map +1 -1
  3. package/dist/lib/configs/tailwindPresets/resetPreset.js.map +1 -1
  4. package/dist/lib/next/utils/hasWidget.js.map +1 -1
  5. package/dist/lib/next/utils/hideWidgetsWithQueryParams.js.map +1 -1
  6. package/dist/lib/next/utils/orderWidgetWithQueryParams.js.map +1 -1
  7. package/dist/lib/shared/api/apiInstance.js.map +1 -1
  8. package/dist/lib/shared/hooks/useClickOutside.js.map +1 -1
  9. package/dist/lib/shared/hooks/useDebounce.js.map +1 -1
  10. package/dist/lib/shared/hooks/useDevice.js.map +1 -1
  11. package/dist/lib/shared/hooks/useFieldsProgress.js.map +1 -1
  12. package/dist/lib/shared/hooks/useFloating.js.map +1 -1
  13. package/dist/lib/shared/hooks/useObserverWidgets.js.map +1 -1
  14. package/dist/lib/shared/hooks/useOverflow.js.map +1 -1
  15. package/dist/lib/shared/ui/accordion/Accordion.js.map +1 -1
  16. package/dist/lib/shared/ui/calendar/Calendar.js.map +1 -1
  17. package/dist/lib/shared/ui/calendar/ui/MonthCaption.js.map +1 -1
  18. package/dist/lib/shared/ui/calendar/ui/Navigation.js.map +1 -1
  19. package/dist/lib/shared/ui/calendar/ui/selectDate/SelectDate.js.map +1 -1
  20. package/dist/lib/shared/ui/calendar/ui/selectDate/ui/SelectList.js.map +1 -1
  21. package/dist/lib/shared/ui/carousel/CarouselNative.js.map +1 -1
  22. package/dist/lib/shared/ui/carousel/model/hooks/useArrowNavigation.js.map +1 -1
  23. package/dist/lib/shared/ui/carousel/model/hooks/useCarousel.js.map +1 -1
  24. package/dist/lib/shared/ui/carousel/model/hooks/useDotsNavigation.js.map +1 -1
  25. package/dist/lib/shared/ui/carousel/ui/CarouselContent.js.map +1 -1
  26. package/dist/lib/shared/ui/dialog/Dialog.js.map +1 -1
  27. package/dist/lib/shared/ui/dropdownList/DropdownList.js.map +1 -1
  28. package/dist/lib/shared/ui/dropdownList/hooks/useKeyboardNavigation.js.map +1 -1
  29. package/dist/lib/shared/ui/dropdownList/ui/dropdownItem/DropdownItem.js.map +1 -1
  30. package/dist/lib/shared/ui/formElements/controlled/combobox/ComboboxControl.js.map +1 -1
  31. package/dist/lib/shared/ui/formElements/controlled/dadata/address/DadataAddress.js +1 -1
  32. package/dist/lib/shared/ui/formElements/controlled/dadata/address/DadataAddress.js.map +1 -1
  33. package/dist/lib/shared/ui/formElements/controlled/dadata/address/query.js.map +1 -1
  34. package/dist/lib/shared/ui/formElements/controlled/dadata/auto/DadataAuto.js +1 -1
  35. package/dist/lib/shared/ui/formElements/controlled/dadata/auto/DadataAuto.js.map +1 -1
  36. package/dist/lib/shared/ui/formElements/controlled/dadata/auto/query.js.map +1 -1
  37. package/dist/lib/shared/ui/formElements/controlled/dadata/country/DadataCountry.js +1 -1
  38. package/dist/lib/shared/ui/formElements/controlled/dadata/country/DadataCountry.js.map +1 -1
  39. package/dist/lib/shared/ui/formElements/controlled/dadata/country/query.js.map +1 -1
  40. package/dist/lib/shared/ui/formElements/controlled/dadata/fio/DadataFio.js +1 -1
  41. package/dist/lib/shared/ui/formElements/controlled/dadata/fio/DadataFio.js.map +1 -1
  42. package/dist/lib/shared/ui/formElements/controlled/dadata/fio/query.js.map +1 -1
  43. package/dist/lib/shared/ui/formElements/controlled/dadata/party/DadataOrganization.js.map +1 -1
  44. package/dist/lib/shared/ui/formElements/controlled/dadata/party/query.js.map +1 -1
  45. package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/model/utils.js.map +1 -1
  46. package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/range.js.map +1 -1
  47. package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/single.js.map +1 -1
  48. package/dist/lib/shared/ui/formElements/controlled/editor/model/config.js.map +1 -1
  49. package/dist/lib/shared/ui/formElements/controlled/editor/ui/Editor.js.map +1 -1
  50. package/dist/lib/shared/ui/formElements/controlled/editor/ui/commands/setCustomLink.js.map +1 -1
  51. package/dist/lib/shared/ui/formElements/controlled/inputCurrency/InputCurrencyControl.js.map +1 -1
  52. package/dist/lib/shared/ui/formElements/controlled/inputCurrency/model/useInputCurrency.js.map +1 -1
  53. package/dist/lib/shared/ui/formElements/controlled/select/SelectControl.js.map +1 -1
  54. package/dist/lib/shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.js.map +1 -1
  55. package/dist/lib/shared/ui/formElements/uncontrolled/autocomplete/types.js +2 -0
  56. package/dist/lib/shared/ui/formElements/uncontrolled/autocomplete/types.js.map +1 -0
  57. package/dist/lib/shared/ui/formElements/uncontrolled/checkbox/Checkbox.js.map +1 -1
  58. package/dist/lib/shared/ui/formElements/uncontrolled/combobox/combobox.js.map +1 -1
  59. package/dist/lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.js.map +1 -1
  60. package/dist/lib/shared/ui/formElements/uncontrolled/dayPicker/DayPicker.js.map +1 -1
  61. package/dist/lib/shared/ui/formElements/uncontrolled/index.js.map +1 -1
  62. package/dist/lib/shared/ui/formElements/uncontrolled/input/Input.js.map +1 -1
  63. package/dist/lib/shared/ui/formElements/uncontrolled/inputOtp/InputOtpBase.js.map +1 -1
  64. package/dist/lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.js.map +1 -1
  65. package/dist/lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItem.js.map +1 -1
  66. package/dist/lib/shared/ui/formElements/uncontrolled/select/Select.js.map +1 -1
  67. package/dist/lib/shared/ui/formElements/uncontrolled/select/hooks/useSelectController.js.map +1 -1
  68. package/dist/lib/shared/ui/formElements/uncontrolled/select/ui/Chip.js.map +1 -1
  69. package/dist/lib/shared/ui/formElements/uncontrolled/select/ui/SelectItem.js.map +1 -1
  70. package/dist/lib/shared/ui/formElements/uncontrolled/slider/model/useLogarithmic.js.map +1 -1
  71. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/Slider.js.map +1 -1
  72. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js.map +1 -1
  73. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/hooks/useSliderAlgorithmic.js.map +1 -1
  74. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/SliderMarks.js.map +1 -1
  75. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/hooks/useSliderMarks.js.map +1 -1
  76. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/SliderStep.js.map +1 -1
  77. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/hooks/useSliderStep.js.map +1 -1
  78. package/dist/lib/shared/ui/formElements/uncontrolled/switch/Switch.js.map +1 -1
  79. package/dist/lib/shared/ui/formElements/uncontrolled/textarea/Textarea.js.map +1 -1
  80. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/UploaderBase.js.map +1 -1
  81. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/model/hooks/useUploader.js.map +1 -1
  82. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.js.map +1 -1
  83. package/dist/lib/shared/ui/modal/Modal.js.map +1 -1
  84. package/dist/lib/shared/ui/modal/ui/IframeModalContent.js.map +1 -1
  85. package/dist/lib/shared/ui/pagination/Pagination.js.map +1 -1
  86. package/dist/lib/shared/ui/providers/NotificationProvider.js.map +1 -1
  87. package/dist/lib/shared/ui/slot/Slot.js.map +1 -1
  88. package/dist/lib/shared/ui/slot/model/mergeProps.js.map +1 -1
  89. package/dist/lib/shared/ui/slot/ui/SlotClone.js.map +1 -1
  90. package/dist/lib/shared/ui/tabSwitcher/ui/TabContent.js.map +1 -1
  91. package/dist/lib/shared/ui/table/Mobile.js.map +1 -1
  92. package/dist/lib/shared/ui/table/model/TableUtils.js.map +1 -1
  93. package/dist/lib/shared/ui/table/ui/editableCell/EditableCell.js.map +1 -1
  94. package/dist/lib/shared/utils/localStorageActions.js.map +1 -1
  95. package/dist/lib/shared/utils/mergeRefs.js.map +1 -1
  96. package/dist/lib/shared/utils/scrollToElement.js.map +1 -1
  97. package/dist/lib/shared/utils/sessionStorage.js.map +1 -1
  98. package/dist/lib/shared/utils/typeGuards.js.map +1 -1
  99. package/dist/lib/shared/validation/base/base.constants.js.map +1 -1
  100. package/dist/lib/shared/validation/base/date.validators.js.map +1 -1
  101. package/dist/lib/shared/validation/base/phone.validators.js.map +1 -1
  102. package/dist/lib/shared/validation/base/select.validators.js.map +1 -1
  103. package/dist/lib/shared/validation/dadata/fio.validators.js.map +1 -1
  104. package/dist/lib/shared/validation/utils/zodUtils.js.map +1 -1
  105. package/dist/lib/widgets/breadcrumbs/Breadcrumb.js +1 -1
  106. package/dist/lib/widgets/breadcrumbs/Breadcrumb.js.map +1 -1
  107. package/dist/lib/widgets/breadcrumbs/Breadcrumbs.js +1 -1
  108. package/dist/lib/widgets/breadcrumbs/Breadcrumbs.js.map +1 -1
  109. package/dist/lib/widgets/buttonWithHandlers/model/useButtonHandler.js.map +1 -1
  110. package/dist/lib/widgets/calculator/CalculatorView.js.map +1 -1
  111. package/dist/lib/widgets/calculator/ui/calculatorFields/hooks/useAdditionalSlider.js.map +1 -1
  112. package/dist/lib/widgets/dynamicForm/DynamicForm.js.map +1 -1
  113. package/dist/lib/widgets/dynamicFormDialog/DynamicFormDialog.js.map +1 -1
  114. package/dist/lib/widgets/fieldMapper/FieldMapper.js.map +1 -1
  115. package/dist/lib/widgets/footer/ui/Ligal.js.map +1 -1
  116. package/dist/lib/widgets/htmlParser/baseHtmlParser.js.map +1 -1
  117. package/dist/lib/widgets/htmlParser/htmlParser.js.map +1 -1
  118. package/dist/lib/widgets/htmlParser/reactHtmlParser.js.map +1 -1
  119. package/dist/lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.js.map +1 -1
  120. package/dist/lib/widgets/seoHeader/ui/desktop/CategoryTabs.js.map +1 -1
  121. package/dist/lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.js.map +1 -1
  122. package/dist/lib/widgets/seoHeader/ui/desktop/tab/ui/content/TabContent.js.map +1 -1
  123. package/dist/lib/widgets/seoHeader/ui/mobile/menu/Menu.js.map +1 -1
  124. package/dist/lib/widgets/seoHeader/ui/mobile/menu/MenuItem.js.map +1 -1
  125. package/dist/lib/widgets/userFeedback/model/hooks/useRating.js.map +1 -1
  126. package/dist/lib/widgets/userFeedback/ui/FeedbackTrigger.js.map +1 -1
  127. package/dist/lib/widgets/userFeedback/ui/UserReview.js.map +1 -1
  128. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
  129. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js.map +1 -1
  130. package/dist/node_modules/@babel/runtime/helpers/esm/objectSpread2.js.map +1 -1
  131. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js.map +1 -1
  132. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
  133. package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -1
  134. package/dist/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -1
  135. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -1
  136. package/dist/node_modules/@date-fns/tz/date/index.js.map +1 -1
  137. package/dist/node_modules/@date-fns/tz/date/mini.js.map +1 -1
  138. package/dist/node_modules/@date-fns/tz/tzOffset/index.js.map +1 -1
  139. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -1
  140. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -1
  141. package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.js.map +1 -1
  142. package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js.map +1 -1
  143. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -1
  144. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -1
  145. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js.map +1 -1
  146. package/dist/node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js.map +1 -1
  147. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js.map +1 -1
  148. package/dist/node_modules/@headlessui/react/dist/internal/floating.js.map +1 -1
  149. package/dist/node_modules/@headlessui/react/node_modules/@floating-ui/react/dist/floating-ui.react.js.map +1 -1
  150. package/dist/node_modules/@headlessui/react/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js.map +1 -1
  151. package/dist/node_modules/@radix-ui/primitive/dist/index.js.map +1 -1
  152. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js.map +1 -1
  153. package/dist/node_modules/@radix-ui/react-collection/dist/index.js.map +1 -1
  154. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -1
  155. package/dist/node_modules/@radix-ui/react-context/dist/index.js.map +1 -1
  156. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +1 -1
  157. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +1 -1
  158. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +1 -1
  159. package/dist/node_modules/@radix-ui/react-id/dist/index.js.map +1 -1
  160. package/dist/node_modules/@radix-ui/react-popover/dist/index.js.map +1 -1
  161. package/dist/node_modules/@radix-ui/react-popper/dist/index.js.map +1 -1
  162. package/dist/node_modules/@radix-ui/react-presence/dist/index.js.map +1 -1
  163. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -1
  164. package/dist/node_modules/@radix-ui/react-radio-group/dist/index.js.map +1 -1
  165. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +1 -1
  166. package/dist/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -1
  167. package/dist/node_modules/@radix-ui/react-switch/dist/index.js.map +1 -1
  168. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js.map +1 -1
  169. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js.map +1 -1
  170. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +1 -1
  171. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +1 -1
  172. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +1 -1
  173. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js.map +1 -1
  174. package/dist/node_modules/@react-aria/focus/dist/useFocusRing.js.map +1 -1
  175. package/dist/node_modules/@react-aria/interactions/dist/useFocus.js.map +1 -1
  176. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.js.map +1 -1
  177. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.js.map +1 -1
  178. package/dist/node_modules/@react-aria/interactions/dist/useHover.js.map +1 -1
  179. package/dist/node_modules/@react-aria/interactions/dist/utils.js.map +1 -1
  180. package/dist/node_modules/@react-aria/utils/dist/DOMFunctions.js.map +1 -1
  181. package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.js.map +1 -1
  182. package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.js.map +1 -1
  183. package/dist/node_modules/@react-aria/utils/dist/useLayoutEffect.js.map +1 -1
  184. package/dist/node_modules/@tanstack/query-core/build/modern/focusManager.js.map +1 -1
  185. package/dist/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js.map +1 -1
  186. package/dist/node_modules/@tanstack/query-core/build/modern/mutation.js.map +1 -1
  187. package/dist/node_modules/@tanstack/query-core/build/modern/mutationCache.js.map +1 -1
  188. package/dist/node_modules/@tanstack/query-core/build/modern/notifyManager.js.map +1 -1
  189. package/dist/node_modules/@tanstack/query-core/build/modern/onlineManager.js.map +1 -1
  190. package/dist/node_modules/@tanstack/query-core/build/modern/query.js.map +1 -1
  191. package/dist/node_modules/@tanstack/query-core/build/modern/queryCache.js.map +1 -1
  192. package/dist/node_modules/@tanstack/query-core/build/modern/queryClient.js.map +1 -1
  193. package/dist/node_modules/@tanstack/query-core/build/modern/queryObserver.js.map +1 -1
  194. package/dist/node_modules/@tanstack/query-core/build/modern/removable.js.map +1 -1
  195. package/dist/node_modules/@tanstack/query-core/build/modern/retryer.js.map +1 -1
  196. package/dist/node_modules/@tanstack/query-core/build/modern/subscribable.js.map +1 -1
  197. package/dist/node_modules/@tanstack/query-core/build/modern/thenable.js.map +1 -1
  198. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
  199. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js.map +1 -1
  200. package/dist/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js.map +1 -1
  201. package/dist/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js.map +1 -1
  202. package/dist/node_modules/@tanstack/react-query/build/modern/suspense.js.map +1 -1
  203. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
  204. package/dist/node_modules/@tanstack/react-table/build/lib/index.js.map +1 -1
  205. package/dist/node_modules/@tanstack/react-virtual/dist/esm/index.js.map +1 -1
  206. package/dist/node_modules/@tanstack/table-core/build/lib/index.js.map +1 -1
  207. package/dist/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -1
  208. package/dist/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -1
  209. package/dist/node_modules/@tiptap/core/dist/index.js.map +1 -1
  210. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js.map +1 -1
  211. package/dist/node_modules/@tiptap/extension-bold/dist/index.js.map +1 -1
  212. package/dist/node_modules/@tiptap/extension-bullet-list/dist/index.js.map +1 -1
  213. package/dist/node_modules/@tiptap/extension-character-count/dist/index.js.map +1 -1
  214. package/dist/node_modules/@tiptap/extension-code/dist/index.js.map +1 -1
  215. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js.map +1 -1
  216. package/dist/node_modules/@tiptap/extension-color/dist/index.js.map +1 -1
  217. package/dist/node_modules/@tiptap/extension-dropcursor/dist/index.js.map +1 -1
  218. package/dist/node_modules/@tiptap/extension-gapcursor/dist/index.js.map +1 -1
  219. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js.map +1 -1
  220. package/dist/node_modules/@tiptap/extension-heading/dist/index.js.map +1 -1
  221. package/dist/node_modules/@tiptap/extension-history/dist/index.js.map +1 -1
  222. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js.map +1 -1
  223. package/dist/node_modules/@tiptap/extension-italic/dist/index.js.map +1 -1
  224. package/dist/node_modules/@tiptap/extension-link/dist/index.js.map +1 -1
  225. package/dist/node_modules/@tiptap/extension-list-item/dist/index.js.map +1 -1
  226. package/dist/node_modules/@tiptap/extension-ordered-list/dist/index.js.map +1 -1
  227. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js.map +1 -1
  228. package/dist/node_modules/@tiptap/extension-strike/dist/index.js.map +1 -1
  229. package/dist/node_modules/@tiptap/extension-text-style/dist/index.js.map +1 -1
  230. package/dist/node_modules/@tiptap/extension-underline/dist/index.js.map +1 -1
  231. package/dist/node_modules/@tiptap/react/dist/index.js.map +1 -1
  232. package/dist/node_modules/@tiptap/starter-kit/dist/index.js.map +1 -1
  233. package/dist/node_modules/aria-hidden/dist/es2015/index.js.map +1 -1
  234. package/dist/node_modules/class-variance-authority/dist/index.js.map +1 -1
  235. package/dist/node_modules/classnames/index.js.map +1 -1
  236. package/dist/node_modules/date-fns/_lib/format/formatters.js.map +1 -1
  237. package/dist/node_modules/date-fns/_lib/format/lightFormatters.js.map +1 -1
  238. package/dist/node_modules/date-fns/format.js.map +1 -1
  239. package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -1
  240. package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -1
  241. package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -1
  242. package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -1
  243. package/dist/node_modules/date-fns/locale/ru/_lib/formatRelative.js.map +1 -1
  244. package/dist/node_modules/date-fns/max.js.map +1 -1
  245. package/dist/node_modules/date-fns/min.js.map +1 -1
  246. package/dist/node_modules/date-fns/parse/_lib/Parser.js.map +1 -1
  247. package/dist/node_modules/date-fns/parse/_lib/Setter.js.map +1 -1
  248. package/dist/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js.map +1 -1
  249. package/dist/node_modules/date-fns/parse/_lib/parsers/AMPMParser.js.map +1 -1
  250. package/dist/node_modules/date-fns/parse/_lib/parsers/DateParser.js.map +1 -1
  251. package/dist/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js.map +1 -1
  252. package/dist/node_modules/date-fns/parse/_lib/parsers/DayParser.js.map +1 -1
  253. package/dist/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js.map +1 -1
  254. package/dist/node_modules/date-fns/parse/_lib/parsers/EraParser.js.map +1 -1
  255. package/dist/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js.map +1 -1
  256. package/dist/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js.map +1 -1
  257. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js.map +1 -1
  258. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js.map +1 -1
  259. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js.map +1 -1
  260. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js.map +1 -1
  261. package/dist/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js.map +1 -1
  262. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js.map +1 -1
  263. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js.map +1 -1
  264. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js.map +1 -1
  265. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js.map +1 -1
  266. package/dist/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js.map +1 -1
  267. package/dist/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js.map +1 -1
  268. package/dist/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js.map +1 -1
  269. package/dist/node_modules/date-fns/parse/_lib/parsers/MinuteParser.js.map +1 -1
  270. package/dist/node_modules/date-fns/parse/_lib/parsers/MonthParser.js.map +1 -1
  271. package/dist/node_modules/date-fns/parse/_lib/parsers/QuarterParser.js.map +1 -1
  272. package/dist/node_modules/date-fns/parse/_lib/parsers/SecondParser.js.map +1 -1
  273. package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js.map +1 -1
  274. package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js.map +1 -1
  275. package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js.map +1 -1
  276. package/dist/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js.map +1 -1
  277. package/dist/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js.map +1 -1
  278. package/dist/node_modules/date-fns/parse/_lib/parsers/YearParser.js.map +1 -1
  279. package/dist/node_modules/date-fns/parse/_lib/utils.js.map +1 -1
  280. package/dist/node_modules/date-fns/parse.js.map +1 -1
  281. package/dist/node_modules/embla-carousel/esm/embla-carousel.esm.js.map +1 -1
  282. package/dist/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map +1 -1
  283. package/dist/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map +1 -1
  284. package/dist/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map +1 -1
  285. package/dist/node_modules/file-selector/dist/es2015/file-selector.js.map +1 -1
  286. package/dist/node_modules/file-selector/dist/es2015/file.js.map +1 -1
  287. package/dist/node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.js.map +1 -1
  288. package/dist/node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.js.map +1 -1
  289. package/dist/node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.js.map +1 -1
  290. package/dist/node_modules/framer-motion/dist/es/animation/generators/inertia.js.map +1 -1
  291. package/dist/node_modules/framer-motion/dist/es/animation/generators/spring/find.js.map +1 -1
  292. package/dist/node_modules/framer-motion/dist/es/animation/generators/spring/index.js.map +1 -1
  293. package/dist/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.js.map +1 -1
  294. package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.js.map +1 -1
  295. package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.js.map +1 -1
  296. package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.js.map +1 -1
  297. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js.map +1 -1
  298. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js.map +1 -1
  299. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js.map +1 -1
  300. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js.map +1 -1
  301. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js.map +1 -1
  302. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js.map +1 -1
  303. package/dist/node_modules/framer-motion/dist/es/easing/utils/map.js.map +1 -1
  304. package/dist/node_modules/framer-motion/dist/es/frameloop/batcher.js.map +1 -1
  305. package/dist/node_modules/framer-motion/dist/es/frameloop/render-step.js.map +1 -1
  306. package/dist/node_modules/framer-motion/dist/es/frameloop/sync-time.js.map +1 -1
  307. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js.map +1 -1
  308. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js.map +1 -1
  309. package/dist/node_modules/framer-motion/dist/es/gestures/focus.js.map +1 -1
  310. package/dist/node_modules/framer-motion/dist/es/gestures/hover.js.map +1 -1
  311. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js.map +1 -1
  312. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js.map +1 -1
  313. package/dist/node_modules/framer-motion/dist/es/gestures/press.js.map +1 -1
  314. package/dist/node_modules/framer-motion/dist/es/motion/features/Feature.js.map +1 -1
  315. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js.map +1 -1
  316. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js.map +1 -1
  317. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js.map +1 -1
  318. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js.map +1 -1
  319. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js.map +1 -1
  320. package/dist/node_modules/framer-motion/dist/es/motion/index.js.map +1 -1
  321. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js.map +1 -1
  322. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js.map +1 -1
  323. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js.map +1 -1
  324. package/dist/node_modules/framer-motion/dist/es/projection/animation/mix-values.js.map +1 -1
  325. package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.js.map +1 -1
  326. package/dist/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.js.map +1 -1
  327. package/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node.js.map +1 -1
  328. package/dist/node_modules/framer-motion/dist/es/projection/shared/stack.js.map +1 -1
  329. package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.js.map +1 -1
  330. package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.js.map +1 -1
  331. package/dist/node_modules/framer-motion/dist/es/projection/styles/transform.js.map +1 -1
  332. package/dist/node_modules/framer-motion/dist/es/render/VisualElement.js.map +1 -1
  333. package/dist/node_modules/framer-motion/dist/es/render/components/create-factory.js.map +1 -1
  334. package/dist/node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.js.map +1 -1
  335. package/dist/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.js.map +1 -1
  336. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js.map +1 -1
  337. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.js.map +1 -1
  338. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.js.map +1 -1
  339. package/dist/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.js.map +1 -1
  340. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js.map +1 -1
  341. package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-styles.js.map +1 -1
  342. package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-transform.js.map +1 -1
  343. package/dist/node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.js.map +1 -1
  344. package/dist/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.js.map +1 -1
  345. package/dist/node_modules/framer-motion/dist/es/render/svg/config-motion.js.map +1 -1
  346. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js.map +1 -1
  347. package/dist/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.js.map +1 -1
  348. package/dist/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.js.map +1 -1
  349. package/dist/node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.js.map +1 -1
  350. package/dist/node_modules/framer-motion/dist/es/render/utils/animation-state.js.map +1 -1
  351. package/dist/node_modules/framer-motion/dist/es/render/utils/flat-tree.js.map +1 -1
  352. package/dist/node_modules/framer-motion/dist/es/render/utils/get-variant-context.js.map +1 -1
  353. package/dist/node_modules/framer-motion/dist/es/render/utils/motion-values.js.map +1 -1
  354. package/dist/node_modules/framer-motion/dist/es/render/utils/resolve-variants.js.map +1 -1
  355. package/dist/node_modules/framer-motion/dist/es/render/utils/setters.js.map +1 -1
  356. package/dist/node_modules/framer-motion/dist/es/utils/delay.js.map +1 -1
  357. package/dist/node_modules/framer-motion/dist/es/utils/hsla-to-rgba.js.map +1 -1
  358. package/dist/node_modules/framer-motion/dist/es/utils/interpolate.js.map +1 -1
  359. package/dist/node_modules/framer-motion/dist/es/utils/mix/complex.js.map +1 -1
  360. package/dist/node_modules/framer-motion/dist/es/utils/offsets/fill.js.map +1 -1
  361. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/index.js.map +1 -1
  362. package/dist/node_modules/framer-motion/dist/es/utils/subscription-manager.js.map +1 -1
  363. package/dist/node_modules/framer-motion/dist/es/value/index.js.map +1 -1
  364. package/dist/node_modules/framer-motion/dist/es/value/types/complex/filter.js.map +1 -1
  365. package/dist/node_modules/framer-motion/dist/es/value/types/complex/index.js.map +1 -1
  366. package/dist/node_modules/linkifyjs/dist/linkify.js.map +1 -1
  367. package/dist/node_modules/motion-dom/dist/es/animation/controls/BaseGroup.js.map +1 -1
  368. package/dist/node_modules/motion-dom/dist/es/animation/controls/Group.js.map +1 -1
  369. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js.map +1 -1
  370. package/dist/node_modules/motion-dom/dist/es/gestures/hover.js.map +1 -1
  371. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js.map +1 -1
  372. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js.map +1 -1
  373. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js.map +1 -1
  374. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js.map +1 -1
  375. package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js.map +1 -1
  376. package/dist/node_modules/orderedmap/dist/index.js.map +1 -1
  377. package/dist/node_modules/prosemirror-commands/dist/index.js.map +1 -1
  378. package/dist/node_modules/prosemirror-dropcursor/dist/index.js.map +1 -1
  379. package/dist/node_modules/prosemirror-gapcursor/dist/index.js.map +1 -1
  380. package/dist/node_modules/prosemirror-history/dist/index.js.map +1 -1
  381. package/dist/node_modules/prosemirror-keymap/dist/index.js.map +1 -1
  382. package/dist/node_modules/prosemirror-model/dist/index.js.map +1 -1
  383. package/dist/node_modules/prosemirror-schema-list/dist/index.js.map +1 -1
  384. package/dist/node_modules/prosemirror-state/dist/index.js.map +1 -1
  385. package/dist/node_modules/prosemirror-transform/dist/index.js.map +1 -1
  386. package/dist/node_modules/prosemirror-view/dist/index.js.map +1 -1
  387. package/dist/node_modules/rc-slider/es/Handles/Handle.js.map +1 -1
  388. package/dist/node_modules/rc-slider/es/Handles/index.js.map +1 -1
  389. package/dist/node_modules/rc-slider/es/Marks/Mark.js.map +1 -1
  390. package/dist/node_modules/rc-slider/es/Marks/index.js.map +1 -1
  391. package/dist/node_modules/rc-slider/es/Slider.js.map +1 -1
  392. package/dist/node_modules/rc-slider/es/Steps/index.js.map +1 -1
  393. package/dist/node_modules/rc-slider/es/Tracks/Track.js.map +1 -1
  394. package/dist/node_modules/rc-slider/es/Tracks/index.js.map +1 -1
  395. package/dist/node_modules/rc-slider/es/hooks/useDrag.js.map +1 -1
  396. package/dist/node_modules/rc-slider/es/hooks/useOffset.js.map +1 -1
  397. package/dist/node_modules/rc-slider/es/hooks/useRange.js.map +1 -1
  398. package/dist/node_modules/rc-util/es/hooks/useEvent.js.map +1 -1
  399. package/dist/node_modules/rc-util/es/hooks/useLayoutEffect.js.map +1 -1
  400. package/dist/node_modules/rc-util/es/hooks/useMergedState.js.map +1 -1
  401. package/dist/node_modules/rc-util/es/hooks/useState.js.map +1 -1
  402. package/dist/node_modules/rc-util/es/isEqual.js.map +1 -1
  403. package/dist/node_modules/react-day-picker/dist/esm/DayPicker.js +1 -1
  404. package/dist/node_modules/react-day-picker/dist/esm/DayPicker.js.map +1 -1
  405. package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js.map +1 -1
  406. package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js.map +1 -1
  407. package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js.map +1 -1
  408. package/dist/node_modules/react-day-picker/dist/esm/classes/DateLib.js.map +1 -1
  409. package/dist/node_modules/react-day-picker/dist/esm/components/DayButton.js.map +1 -1
  410. package/dist/node_modules/react-day-picker/dist/esm/components/Nav.js.map +1 -1
  411. package/dist/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js.map +1 -1
  412. package/dist/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js +1 -1
  413. package/dist/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js.map +1 -1
  414. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js.map +1 -1
  415. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDates.js.map +1 -1
  416. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDays.js.map +1 -1
  417. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js.map +1 -1
  418. package/dist/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js +1 -1
  419. package/dist/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js.map +1 -1
  420. package/dist/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js.map +1 -1
  421. package/dist/node_modules/react-day-picker/dist/esm/helpers/getMonths.js.map +1 -1
  422. package/dist/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js.map +1 -1
  423. package/dist/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js.map +1 -1
  424. package/dist/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js.map +1 -1
  425. package/dist/node_modules/react-day-picker/dist/esm/selection/useMulti.js.map +1 -1
  426. package/dist/node_modules/react-day-picker/dist/esm/selection/useRange.js.map +1 -1
  427. package/dist/node_modules/react-day-picker/dist/esm/selection/useSingle.js.map +1 -1
  428. package/dist/node_modules/react-day-picker/dist/esm/useAnimation.js.map +1 -1
  429. package/dist/node_modules/react-day-picker/dist/esm/useCalendar.js +1 -1
  430. package/dist/node_modules/react-day-picker/dist/esm/useCalendar.js.map +1 -1
  431. package/dist/node_modules/react-day-picker/dist/esm/useFocus.js.map +1 -1
  432. package/dist/node_modules/react-day-picker/dist/esm/utils/addToRange.js.map +1 -1
  433. package/dist/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js.map +1 -1
  434. package/dist/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js.map +1 -1
  435. package/dist/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js.map +1 -1
  436. package/dist/node_modules/react-dropzone/dist/es/index.js.map +1 -1
  437. package/dist/node_modules/react-dropzone/dist/es/utils/index.js.map +1 -1
  438. package/dist/node_modules/react-hook-form/dist/index.esm.js +1 -1
  439. package/dist/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
  440. package/dist/node_modules/react-number-format/dist/react-number-format.es.js.map +1 -1
  441. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js.map +1 -1
  442. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -1
  443. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js.map +1 -1
  444. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js.map +1 -1
  445. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js.map +1 -1
  446. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js.map +1 -1
  447. package/dist/node_modules/react-style-singleton/dist/es2015/component.js.map +1 -1
  448. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js.map +1 -1
  449. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js.map +1 -1
  450. package/dist/node_modules/rope-sequence/dist/index.js.map +1 -1
  451. package/dist/node_modules/tailwindcss/lib/public/create-plugin.js.map +1 -1
  452. package/dist/node_modules/tailwindcss/lib/util/createPlugin.js.map +1 -1
  453. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  454. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js.map +1 -1
  455. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js.map +1 -1
  456. package/dist/node_modules/use-sidecar/dist/es2015/medium.js.map +1 -1
  457. package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -1
  458. package/dist/node_modules/zod/v3/ZodError.js.map +1 -1
  459. package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -1
  460. package/dist/node_modules/zod/v3/helpers/util.js.map +1 -1
  461. package/dist/node_modules/zod/v3/types.js.map +1 -1
  462. package/dist/src/shared/utils/getDynamicSchema.js.map +1 -1
  463. package/dist/stats.html +1 -1
  464. package/dist/types/lib/shared/ui/formElements/controlled/dadata/address/DadataAddress.d.ts +2 -2
  465. package/dist/types/lib/shared/ui/formElements/controlled/dadata/auto/DadataAuto.d.ts +2 -2
  466. package/dist/types/lib/shared/ui/formElements/controlled/dadata/country/DadataCountry.d.ts +2 -2
  467. package/dist/types/lib/shared/ui/formElements/controlled/dadata/fio/DadataFio.d.ts +2 -2
  468. package/dist/types/lib/shared/ui/formElements/controlled/dadata/party/DadataOrganization.d.ts +2 -2
  469. package/dist/types/lib/shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.d.ts +3 -2
  470. package/dist/types/lib/shared/ui/formElements/uncontrolled/autocomplete/index.d.ts +1 -0
  471. package/dist/types/lib/shared/ui/formElements/uncontrolled/autocomplete/types.d.ts +4 -0
  472. package/dist/types/lib/shared/ui/formElements/uncontrolled/index.d.ts +1 -1
  473. package/dist/types/lib/widgets/breadcrumbs/Breadcrumb.d.ts +3 -2
  474. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"zodUtils.js","sources":["../../../../../lib/shared/validation/utils/zodUtils.ts"],"sourcesContent":["import z from 'zod'\n\ntype ZodUtilsGetDefaultsOptions = {\n /**\n * Вставить в массив значение, исходя из внутренней схемы z.array\n */\n fillArrayWithValue?: boolean\n}\n\nexport class ZodUtils {\n /**\n * Функция для получения значения по умолчанию исходя из схемы\n * @param zodSchema схема формы\n * @param options настройки генерации значений по умолчанию\n * @returns объект значений по умолчанию\n *\n * @example\n * const schema = z.object({\n * name: zodValidators.base.getStringSchema(),\n * role: zodValidators.base.getUnionSchema(['UNKNOWN', 'ADMIN', 'MODERATOR', 'USER'] as const),\n * info: z.object({\n * address: zodValidators.base.getStringSchema(),\n * phone: zodValidators.base.getPhoneSchema({ ignoreMask: true }),\n * age: zodValidators.base.getNumberSchema()\n * })\n * })\n *\n * const defaultValues = ZodUtils.getZodDefaults(schema)\n *\n * // default values will be inferred from schema\n * // {\n * // name: '',\n * // role: 'UNKNOWN',\n * // info: {\n * // address: '',\n * // phone: '',\n * // age: 0\n * // }\n * // }\n */\n static getZodDefaults<ZodSchema extends z.AnyZodObject, Schema = z.TypeOf<ZodSchema>>(\n zodSchema: ZodSchema | z.ZodEffects<ZodSchema>,\n options?: ZodUtilsGetDefaultsOptions\n ): Schema {\n const { fillArrayWithValue } = options || {}\n\n const processZodEffects = (schema: z.ZodEffects<any>) => {\n const innerType = schema._def.schema\n\n if (innerType instanceof z.ZodEffects || innerType._def.typeName === 'ZodEffects') {\n return processZodEffects(innerType)\n }\n\n if (innerType instanceof z.ZodObject || innerType._def.typeName === 'ZodObject') {\n return this.getZodDefaults(innerType, options)\n }\n\n return getDefaultValue(innerType)\n }\n\n const getDefaultValue = (schema: z.ZodTypeAny): unknown => {\n if (schema instanceof z.ZodEffects || schema._def.typeName === 'ZodEffects') {\n return processZodEffects(schema as z.ZodEffects<ZodSchema>)\n }\n\n switch (true) {\n case schema._def.typeName === 'ZodDefault' || schema instanceof z.ZodDefault:\n return (schema as z.ZodDefault<ZodSchema>)._def.defaultValue()\n case schema._def.typeName === 'ZodOptional' || schema instanceof z.ZodOptional:\n return undefined\n case schema._def.typeName === 'ZodEffects':\n return processZodEffects(schema as z.ZodEffects<ZodSchema>)\n case schema._def.typeName === 'ZodNullable' || schema instanceof z.ZodNullable:\n return null\n case schema._def.typeName === 'ZodArray' || schema instanceof z.ZodArray:\n return fillArrayWithValue ? [getDefaultValue((schema as z.ZodArray<ZodSchema>).element)] : []\n case schema._def.typeName === 'ZodObject' || schema instanceof z.ZodObject:\n return this.getZodDefaults(schema as z.ZodObject<z.ZodRawShape>, options)\n case schema._def.typeName === 'ZodUnion' || schema instanceof z.ZodUnion:\n return getDefaultValue(schema._def.options[0])\n case schema._def.typeName === 'ZodLiteral' || schema instanceof z.ZodLiteral:\n return schema._def.value\n case schema._def.typeName === 'ZodDiscriminatedUnion' || schema instanceof z.ZodDiscriminatedUnion:\n return getDefaultValue(schema._def.options[0])\n case schema._def.typeName === 'ZodEnum' || schema instanceof z.ZodEnum:\n return schema._def.values[0]\n case schema._def.typeName === 'ZodString' || schema instanceof z.ZodString:\n return ''\n case schema._def.typeName === 'ZodNumber' || schema instanceof z.ZodNumber:\n return 0\n case schema._def.typeName === 'ZodBoolean' || schema instanceof z.ZodBoolean:\n return false\n case !('innerType' in schema._def):\n return undefined\n default:\n return getDefaultValue(schema._def.innerType)\n }\n }\n\n // @ts-expect-error asf\n if (zodSchema instanceof z.ZodEffects || zodSchema._def.typeName === 'ZodEffects') {\n return processZodEffects(zodSchema as unknown as z.ZodEffects<any>)\n }\n\n const defaults = {} as Schema\n\n const schemaEntries = Object.entries(zodSchema.shape) as [keyof Schema, z.ZodAny][]\n\n schemaEntries.map(([key, value]) => {\n defaults[key] = getDefaultValue(value) as Schema[keyof Schema]\n })\n\n return defaults\n }\n\n /**\n * Функция для объединения zod схождений\n * @param {ZodIntersection} zodSchema\n * @returns объединенная схема двух схождений\n *\n * @example\n * let schema = z.object({\n * foo: z.string()\n * })\n * // this will return intersection and we need\n * // to merge its left to right schema's\n * .and(\n * z.object({\n * bar: z.string()\n * })\n * )\n *\n * schema = ZodUtils.zodMergeIntersection(schema)\n *\n * // schema will be\n * z.object({\n * foo: z.string(),\n * bar: z.string()\n * })\n */\n static zodMergeIntersection<ZodLeft extends z.ZodTypeAny, ZodRight extends z.ZodTypeAny>(\n zodSchema: z.ZodIntersection<ZodLeft, ZodRight>\n ): z.ZodObject<z.objectUtil.MergeShapes<z.TypeOf<ZodLeft>, z.TypeOf<ZodRight>>> {\n const { left, right } = zodSchema._def\n\n const leftSchema =\n left instanceof z.ZodDiscriminatedUnion || left._def.typeName === 'ZodDiscriminatedUnion' ? left._def.options[0] : left\n const rightSchema =\n right instanceof z.ZodDiscriminatedUnion || right._def.typeName === 'ZodDiscriminatedUnion' ? right._def.options[0] : right\n\n if (\n (leftSchema._def.typeName === 'ZodObject' || leftSchema instanceof z.ZodObject) &&\n (rightSchema._def.typeName === 'ZodObject' || rightSchema instanceof z.ZodObject)\n ) {\n return leftSchema.merge(rightSchema)\n }\n\n throw new Error(`Cannot merge schema type ${rightSchema._def.typeName} to ${leftSchema._def.typeName}`)\n }\n}\n"],"names":["ZodUtils","zodSchema","options","fillArrayWithValue","processZodEffects","schema","innerType","z","getDefaultValue","defaults","key","value","left","right","leftSchema","rightSchema"],"mappings":"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"}
1
+ {"version":3,"file":"zodUtils.js","sources":["../../../../../lib/shared/validation/utils/zodUtils.ts"],"sourcesContent":["import z from 'zod'\n\ntype ZodUtilsGetDefaultsOptions = {\n /**\n * Вставить в массив значение, исходя из внутренней схемы z.array\n */\n fillArrayWithValue?: boolean\n}\n\nexport class ZodUtils {\n /**\n * Функция для получения значения по умолчанию исходя из схемы\n * @param zodSchema схема формы\n * @param options настройки генерации значений по умолчанию\n * @returns объект значений по умолчанию\n *\n * @example\n * const schema = z.object({\n * name: zodValidators.base.getStringSchema(),\n * role: zodValidators.base.getUnionSchema(['UNKNOWN', 'ADMIN', 'MODERATOR', 'USER'] as const),\n * info: z.object({\n * address: zodValidators.base.getStringSchema(),\n * phone: zodValidators.base.getPhoneSchema({ ignoreMask: true }),\n * age: zodValidators.base.getNumberSchema()\n * })\n * })\n *\n * const defaultValues = ZodUtils.getZodDefaults(schema)\n *\n * // default values will be inferred from schema\n * // {\n * // name: '',\n * // role: 'UNKNOWN',\n * // info: {\n * // address: '',\n * // phone: '',\n * // age: 0\n * // }\n * // }\n */\n static getZodDefaults<ZodSchema extends z.AnyZodObject, Schema = z.TypeOf<ZodSchema>>(\n zodSchema: ZodSchema | z.ZodEffects<ZodSchema>,\n options?: ZodUtilsGetDefaultsOptions\n ): Schema {\n const { fillArrayWithValue } = options || {}\n\n const processZodEffects = (schema: z.ZodEffects<any>) => {\n const innerType = schema._def.schema\n\n if (innerType instanceof z.ZodEffects || innerType._def.typeName === 'ZodEffects') {\n return processZodEffects(innerType)\n }\n\n if (innerType instanceof z.ZodObject || innerType._def.typeName === 'ZodObject') {\n return this.getZodDefaults(innerType, options)\n }\n\n return getDefaultValue(innerType)\n }\n\n const getDefaultValue = (schema: z.ZodTypeAny): unknown => {\n if (schema instanceof z.ZodEffects || schema._def.typeName === 'ZodEffects') {\n return processZodEffects(schema as z.ZodEffects<ZodSchema>)\n }\n\n switch (true) {\n case schema._def.typeName === 'ZodDefault' || schema instanceof z.ZodDefault:\n return (schema as z.ZodDefault<ZodSchema>)._def.defaultValue()\n case schema._def.typeName === 'ZodOptional' || schema instanceof z.ZodOptional:\n return undefined\n case schema._def.typeName === 'ZodEffects':\n return processZodEffects(schema as z.ZodEffects<ZodSchema>)\n case schema._def.typeName === 'ZodNullable' || schema instanceof z.ZodNullable:\n return null\n case schema._def.typeName === 'ZodArray' || schema instanceof z.ZodArray:\n return fillArrayWithValue ? [getDefaultValue((schema as z.ZodArray<ZodSchema>).element)] : []\n case schema._def.typeName === 'ZodObject' || schema instanceof z.ZodObject:\n return this.getZodDefaults(schema as z.ZodObject<z.ZodRawShape>, options)\n case schema._def.typeName === 'ZodUnion' || schema instanceof z.ZodUnion:\n return getDefaultValue(schema._def.options[0])\n case schema._def.typeName === 'ZodLiteral' || schema instanceof z.ZodLiteral:\n return schema._def.value\n case schema._def.typeName === 'ZodDiscriminatedUnion' || schema instanceof z.ZodDiscriminatedUnion:\n return getDefaultValue(schema._def.options[0])\n case schema._def.typeName === 'ZodEnum' || schema instanceof z.ZodEnum:\n return schema._def.values[0]\n case schema._def.typeName === 'ZodString' || schema instanceof z.ZodString:\n return ''\n case schema._def.typeName === 'ZodNumber' || schema instanceof z.ZodNumber:\n return 0\n case schema._def.typeName === 'ZodBoolean' || schema instanceof z.ZodBoolean:\n return false\n case !('innerType' in schema._def):\n return undefined\n default:\n return getDefaultValue(schema._def.innerType)\n }\n }\n\n // @ts-expect-error asf\n if (zodSchema instanceof z.ZodEffects || zodSchema._def.typeName === 'ZodEffects') {\n return processZodEffects(zodSchema as unknown as z.ZodEffects<any>)\n }\n\n const defaults = {} as Schema\n\n const schemaEntries = Object.entries(zodSchema.shape) as [keyof Schema, z.ZodAny][]\n\n schemaEntries.map(([key, value]) => {\n defaults[key] = getDefaultValue(value) as Schema[keyof Schema]\n })\n\n return defaults\n }\n\n /**\n * Функция для объединения zod схождений\n * @param {ZodIntersection} zodSchema\n * @returns объединенная схема двух схождений\n *\n * @example\n * let schema = z.object({\n * foo: z.string()\n * })\n * // this will return intersection and we need\n * // to merge its left to right schema's\n * .and(\n * z.object({\n * bar: z.string()\n * })\n * )\n *\n * schema = ZodUtils.zodMergeIntersection(schema)\n *\n * // schema will be\n * z.object({\n * foo: z.string(),\n * bar: z.string()\n * })\n */\n static zodMergeIntersection<ZodLeft extends z.ZodTypeAny, ZodRight extends z.ZodTypeAny>(\n zodSchema: z.ZodIntersection<ZodLeft, ZodRight>\n ): z.ZodObject<z.objectUtil.MergeShapes<z.TypeOf<ZodLeft>, z.TypeOf<ZodRight>>> {\n const { left, right } = zodSchema._def\n\n const leftSchema =\n left instanceof z.ZodDiscriminatedUnion || left._def.typeName === 'ZodDiscriminatedUnion' ? left._def.options[0] : left\n const rightSchema =\n right instanceof z.ZodDiscriminatedUnion || right._def.typeName === 'ZodDiscriminatedUnion' ? right._def.options[0] : right\n\n if (\n (leftSchema._def.typeName === 'ZodObject' || leftSchema instanceof z.ZodObject) &&\n (rightSchema._def.typeName === 'ZodObject' || rightSchema instanceof z.ZodObject)\n ) {\n return leftSchema.merge(rightSchema)\n }\n\n throw new Error(`Cannot merge schema type ${rightSchema._def.typeName} to ${leftSchema._def.typeName}`)\n }\n}\n"],"names":["ZodUtils","zodSchema","options","fillArrayWithValue","processZodEffects","schema","innerType","z","getDefaultValue","defaults","key","value","left","right","leftSchema","rightSchema"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as a}from"react/jsx-runtime";import{cn as m}from"../../shared/utils/cn.js";const t=({breadcrumb:r,className:e,...o})=>a("a",{href:r.path,className:m("desk-body-regular-m",e),...o,children:r.label});export{t as Breadcrumb};
1
+ import{jsx as r,Fragment as a}from"react/jsx-runtime";import{cn as o}from"../../shared/utils/cn.js";const m=({breadcrumb:e,className:l,isLast:t,...n})=>r(a,{children:t?r("p",{className:o("desk-body-regular-m pointer-events-none text-color-primary-disabled",l),...n,children:e.label}):r("a",{href:e.path,className:o("desk-body-regular-m",l),...n,children:e.label})});export{m as Breadcrumb};
2
2
  //# sourceMappingURL=Breadcrumb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.js","sources":["../../../../lib/widgets/breadcrumbs/Breadcrumb.tsx"],"sourcesContent":["import type { Breadcrumb as BreadcrumbType } from './hooks'\nimport { cn } from '$/shared/utils'\n\ntype BreadcrumbProps = React.AnchorHTMLAttributes<HTMLAnchorElement> & {\n breadcrumb: BreadcrumbType\n}\n\nexport const Breadcrumb = ({ breadcrumb, className, ...props }: BreadcrumbProps) => (\n <a href={breadcrumb.path} className={cn('desk-body-regular-m', className)} {...props}>\n {breadcrumb.label}\n </a>\n)\n"],"names":["Breadcrumb","breadcrumb","className","props","jsx","cn"],"mappings":"sFAOO,MAAMA,EAAa,CAAC,CAAE,WAAAC,EAAY,UAAAC,EAAW,GAAGC,CAAA,IACrDC,EAAC,IAAA,CAAE,KAAMH,EAAW,KAAM,UAAWI,EAAG,sBAAuBH,CAAS,EAAI,GAAGC,EAC5E,SAAAF,EAAW,KAAA,CACd"}
1
+ {"version":3,"file":"Breadcrumb.js","sources":["../../../../lib/widgets/breadcrumbs/Breadcrumb.tsx"],"sourcesContent":["import type { Breadcrumb as BreadcrumbType } from './hooks'\nimport { cn } from '$/shared/utils'\n\ntype BreadcrumbProps = React.AnchorHTMLAttributes<HTMLAnchorElement | HTMLDivElement> & {\n breadcrumb: BreadcrumbType\n isLast?: boolean\n}\n\nexport const Breadcrumb = ({ breadcrumb, className, isLast, ...props }: BreadcrumbProps) => {\n return (\n <>\n {isLast ? (\n <p className={cn('desk-body-regular-m pointer-events-none text-color-primary-disabled', className)} {...props}>\n {breadcrumb.label}\n </p>\n ) : (\n <a href={breadcrumb.path} className={cn('desk-body-regular-m', className)} {...props}>\n {breadcrumb.label}\n </a>\n )}\n </>\n )\n}\n"],"names":["Breadcrumb","breadcrumb","className","isLast","props","jsx","Fragment","cn"],"mappings":"oGAQO,MAAMA,EAAa,CAAC,CAAE,WAAAC,EAAY,UAAAC,EAAW,OAAAC,EAAQ,GAAGC,KAE3DC,EAAAC,EAAA,CACG,SAAAH,EACCE,EAAC,IAAA,CAAE,UAAWE,EAAG,sEAAuEL,CAAS,EAAI,GAAGE,EACrG,SAAAH,EAAW,KAAA,CACd,EAEAI,EAAC,IAAA,CAAE,KAAMJ,EAAW,KAAM,UAAWM,EAAG,sBAAuBL,CAAS,EAAI,GAAGE,EAC5E,SAAAH,EAAW,KAAA,CACd,EAEJ"}
@@ -1,2 +1,2 @@
1
- import{jsx as i,Fragment as g,jsxs as f}from"react/jsx-runtime";import{useState as c,useRef as k,useMemo as C}from"react";import{Breadcrumb as w}from"./Breadcrumb.js";import{defaultBreadcrumbs as b}from"./hooks/constants.js";import{useClickOutside as B}from"../../shared/hooks/useClickOutside.js";import"@hookform/resolvers";import{cn as d}from"../../shared/utils/cn.js";import"../../shared/ui/button/Button.js";import"../../shared/ui/buttonIcon/ButtonIcon.js";import"../../shared/ui/calendar/Calendar.js";import"../../shared/ui/calendar/model/utils.js";import"../../shared/ui/accordion/Accordion.js";import"react-dom";import"../../shared/ui/modal/ui/IframeModalContent.js";import"../../../node_modules/react-hot-toast/dist/index.js";import{Icon as O}from"../../shared/ui/icon/Icon.js";import"../../shared/ui/table/ui/primitives/Primitives.js";import"../../shared/ui/carousel/ui/CarouselContent.js";import"../../shared/ui/slot/Slot.js";import"../../shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.js";import"../../shared/ui/formElements/uncontrolled/checkbox/Checkbox.js";import"../../shared/ui/dropdownList/ui/dropdownItem/DropdownItem.js";import"../../shared/ui/formElements/uncontrolled/input/Input.js";import"../../shared/ui/formElements/uncontrolled/dayPicker/DayPicker.js";import"../../shared/ui/formElements/uncontrolled/inputOtp/InputOtpBase.js";import"../../shared/ui/formElements/uncontrolled/maskInput/MaskInput.js";import"../../shared/ui/formElements/uncontrolled/radio/RadioGroup.js";import"../../shared/ui/formElements/uncontrolled/radio/ui/RadioItem.js";import"../../shared/ui/formElements/uncontrolled/select/Select.js";import"../../shared/ui/formElements/uncontrolled/slider/SliderBase.js";import"../../shared/ui/formElements/uncontrolled/switch/Switch.js";import"../../shared/ui/formElements/uncontrolled/textarea/Textarea.js";import"../../shared/ui/formElements/uncontrolled/uploader/UploaderBase.js";import"../../shared/ui/formElements/controlled/editor/ui/Editor.js";import"../../shared/ui/formElements/controlled/input/MaskInputControl.js";const h=(l,o,t,r)=>l.map((e,n)=>f("div",{className:"flex items-center gap-x-1",children:[i(w,{breadcrumb:e,className:d(t,{"pointer-events-none text-color-primary-disabled":n===r,"text-color-blue-grey-600":e.disabled})}),n!==l.length-1&&o]},e.label)),pt=({separator:l,ellipsis:o,classes:t,breadcrumbs:r=b})=>{const[e,n]=c(!1),u=k(null);B(u,()=>n(!1));const{first:N,middle:a,last:x}=C(()=>{let p=[],y=[],v=[];return o&&(p=r.slice(0,o),y=r.slice(o,r.length-o),v=r.slice(r.length-o)),{first:p,middle:y,last:v}},[r,o]),m=l??i(O,{name:"arrows/arrowRight",className:d("size-4",t==null?void 0:t.separator)});return i("div",{className:d("flex max-w-[840px] flex-wrap items-center","gap-x-2 gap-y-1 py-4 text-color-primary-default",t==null?void 0:t.root),children:o?i(g,{children:r.length>o*2+1?f(g,{children:[h(N,m,t==null?void 0:t.breadcrumb),m,a.length>0&&f(g,{children:[f("div",{className:"relative",children:[i("button",{onClick:()=>n(!0),children:"..."}),i("ul",{ref:u,className:d("invisible absolute max-h-[264px] overflow-y-auto","w-[280px] rounded-sm bg-color-white","customScrollbar-y p-1 opacity-0 shadow-sm",{"visible opacity-100":e}),children:a.map(p=>i("li",{children:i(w,{breadcrumb:p,className:d("desk-body-regular-l inline-block py-3","w-full rounded-sm bg-color-white px-2","text-color-dark hover:bg-color-primary-tr-hover",t==null?void 0:t.breadcrumb)})},p.label))})]}),m]}),h(x,m,t==null?void 0:t.breadcrumb,x.length-1)]}):h(r,m,t==null?void 0:t.breadcrumb,r.length-1)}):h(r,m,t==null?void 0:t.breadcrumb,r.length-1)})};export{pt as Breadcrumbs};
1
+ import{jsx as i,Fragment as g,jsxs as f}from"react/jsx-runtime";import{useState as k,useRef as C,useMemo as c}from"react";import{Breadcrumb as v}from"./Breadcrumb.js";import{defaultBreadcrumbs as B}from"./hooks/constants.js";import{useClickOutside as b}from"../../shared/hooks/useClickOutside.js";import"@hookform/resolvers";import{cn as d}from"../../shared/utils/cn.js";import"../../shared/ui/button/Button.js";import"../../shared/ui/buttonIcon/ButtonIcon.js";import"../../shared/ui/calendar/Calendar.js";import"../../shared/ui/calendar/model/utils.js";import"../../shared/ui/accordion/Accordion.js";import"react-dom";import"../../shared/ui/modal/ui/IframeModalContent.js";import"../../../node_modules/react-hot-toast/dist/index.js";import{Icon as O}from"../../shared/ui/icon/Icon.js";import"../../shared/ui/table/ui/primitives/Primitives.js";import"../../shared/ui/carousel/ui/CarouselContent.js";import"../../shared/ui/slot/Slot.js";import"../../shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.js";import"../../shared/ui/formElements/uncontrolled/checkbox/Checkbox.js";import"../../shared/ui/dropdownList/ui/dropdownItem/DropdownItem.js";import"../../shared/ui/formElements/uncontrolled/input/Input.js";import"../../shared/ui/formElements/uncontrolled/dayPicker/DayPicker.js";import"../../shared/ui/formElements/uncontrolled/inputOtp/InputOtpBase.js";import"../../shared/ui/formElements/uncontrolled/maskInput/MaskInput.js";import"../../shared/ui/formElements/uncontrolled/radio/RadioGroup.js";import"../../shared/ui/formElements/uncontrolled/radio/ui/RadioItem.js";import"../../shared/ui/formElements/uncontrolled/select/Select.js";import"../../shared/ui/formElements/uncontrolled/slider/SliderBase.js";import"../../shared/ui/formElements/uncontrolled/switch/Switch.js";import"../../shared/ui/formElements/uncontrolled/textarea/Textarea.js";import"../../shared/ui/formElements/uncontrolled/uploader/UploaderBase.js";import"../../shared/ui/formElements/controlled/editor/ui/Editor.js";import"../../shared/ui/formElements/controlled/input/MaskInputControl.js";const h=(l,o,t,r)=>l.map((e,p)=>f("div",{className:"flex items-center gap-x-1",children:[i(v,{isLast:p===r,breadcrumb:e,className:d(t,{"text-color-blue-grey-600":e.disabled})}),p!==l.length-1&&o]},e.label)),nt=({separator:l,ellipsis:o,classes:t,breadcrumbs:r=B})=>{const[e,p]=k(!1),u=C(null);b(u,()=>p(!1));const{first:N,middle:x,last:a}=c(()=>{let n=[],y=[],w=[];return o&&(n=r.slice(0,o),y=r.slice(o,r.length-o),w=r.slice(r.length-o)),{first:n,middle:y,last:w}},[r,o]),m=l??i(O,{name:"arrows/arrowRight",className:d("size-4",t==null?void 0:t.separator)});return i("div",{className:d("flex max-w-[840px] flex-wrap items-center","gap-x-2 gap-y-1 py-4 text-color-primary-default",t==null?void 0:t.root),children:o?i(g,{children:r.length>o*2+1?f(g,{children:[h(N,m,t==null?void 0:t.breadcrumb),m,x.length>0&&f(g,{children:[f("div",{className:"relative",children:[i("button",{onClick:()=>p(!0),children:"..."}),i("ul",{ref:u,className:d("invisible absolute max-h-[264px] overflow-y-auto","w-[280px] rounded-sm bg-color-white","customScrollbar-y p-1 opacity-0 shadow-sm",{"visible opacity-100":e}),children:x.map(n=>i("li",{children:i(v,{breadcrumb:n,className:d("desk-body-regular-l inline-block py-3","w-full rounded-sm bg-color-white px-2","text-color-dark hover:bg-color-primary-tr-hover",t==null?void 0:t.breadcrumb)})},n.label))})]}),m]}),h(a,m,t==null?void 0:t.breadcrumb,a.length-1)]}):h(r,m,t==null?void 0:t.breadcrumb,r.length-1)}):h(r,m,t==null?void 0:t.breadcrumb,r.length-1)})};export{nt as Breadcrumbs};
2
2
  //# sourceMappingURL=Breadcrumbs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.js","sources":["../../../../lib/widgets/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { useMemo, useRef, useState } from 'react'\nimport { Breadcrumb } from './Breadcrumb'\nimport { type Breadcrumb as BreadcrumbType, defaultBreadcrumbs, type UseBreadcrumbsOptions } from './hooks'\nimport { useClickOutside } from '$/shared/hooks'\nimport { Icon } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\ntype BreadcrumbsClasses = {\n root?: string\n separator?: string\n breadcrumb?: string\n}\n\ntype BreadcrumbsProps = UseBreadcrumbsOptions & {\n /**\n * произвольный сепаратор, разделяющий элементы\n */\n separator?: React.ReactElement | string\n /**\n * указывает, сколько элементов отображать перед/после сужения\n */\n ellipsis?: number\n /**\n * дополнительные стили компонента\n */\n classes?: BreadcrumbsClasses\n /**\n * Массив хлебных крошек\n */\n breadcrumbs: BreadcrumbType[]\n}\n\nconst renderBreadcrumbs = (\n breadcrumbs: BreadcrumbType[],\n separator: BreadcrumbsProps['separator'],\n classes?: BreadcrumbsClasses['breadcrumb'],\n lastIndex?: number\n) => {\n return breadcrumbs.map((breadcrumb, index) => {\n const isLast = index === lastIndex\n\n return (\n <div key={breadcrumb.label} className='flex items-center gap-x-1'>\n <Breadcrumb\n breadcrumb={breadcrumb}\n className={cn(classes, {\n 'pointer-events-none text-color-primary-disabled': isLast,\n 'text-color-blue-grey-600': breadcrumb.disabled\n })}\n />\n {index !== breadcrumbs.length - 1 && separator}\n </div>\n )\n })\n}\n\nexport const Breadcrumbs = ({ separator, ellipsis, classes, breadcrumbs = defaultBreadcrumbs }: BreadcrumbsProps) => {\n const [hiddenCrumbsOpen, setHiddenCrumbsOpen] = useState<boolean>(false)\n\n const hiddenCrumbsRef = useRef<HTMLUListElement>(null)\n\n useClickOutside(hiddenCrumbsRef, () => setHiddenCrumbsOpen(false))\n\n // separated crumbs while ellipsis provided\n const { first, middle, last } = useMemo(() => {\n let first: BreadcrumbType[] = []\n let middle: BreadcrumbType[] = []\n let last: BreadcrumbType[] = []\n\n if (ellipsis) {\n first = breadcrumbs.slice(0, ellipsis)\n middle = breadcrumbs.slice(ellipsis, breadcrumbs.length - ellipsis)\n last = breadcrumbs.slice(breadcrumbs.length - ellipsis)\n }\n\n return { first, middle, last }\n }, [breadcrumbs, ellipsis])\n\n const separatedElement = separator ?? <Icon name='arrows/arrowRight' className={cn('size-4', classes?.separator)} />\n\n return (\n <div\n className={cn(\n 'flex max-w-[840px] flex-wrap items-center',\n 'gap-x-2 gap-y-1 py-4 text-color-primary-default',\n classes?.root\n )}\n >\n {ellipsis ? (\n // if ellipsis provided, render hidden breadcrumbs\n <>\n {breadcrumbs.length > ellipsis * 2 + 1 ? (\n // if we have more than ellipsis (visible crumbs) + available hidden crumbs\n // render hidden breadcrumbs\n <>\n {renderBreadcrumbs(first, separatedElement, classes?.breadcrumb)}\n {separatedElement}\n {middle.length > 0 && (\n <>\n <div className='relative'>\n <button onClick={() => setHiddenCrumbsOpen(true)}>...</button>\n <ul\n ref={hiddenCrumbsRef}\n className={cn(\n 'invisible absolute max-h-[264px] overflow-y-auto',\n 'w-[280px] rounded-sm bg-color-white',\n 'customScrollbar-y p-1 opacity-0 shadow-sm',\n {\n 'visible opacity-100': hiddenCrumbsOpen\n }\n )}\n >\n {middle.map((breadcrumb) => (\n <li key={breadcrumb.label}>\n <Breadcrumb\n breadcrumb={breadcrumb}\n className={cn(\n 'desk-body-regular-l inline-block py-3',\n 'w-full rounded-sm bg-color-white px-2',\n 'text-color-dark hover:bg-color-primary-tr-hover',\n classes?.breadcrumb\n )}\n />\n </li>\n ))}\n </ul>\n </div>\n {separatedElement}\n </>\n )}\n {renderBreadcrumbs(last, separatedElement, classes?.breadcrumb, last.length - 1)}\n </>\n ) : (\n // otherwise render all breadcrumbs\n renderBreadcrumbs(breadcrumbs, separatedElement, classes?.breadcrumb, breadcrumbs.length - 1)\n )}\n </>\n ) : (\n // if ellipsis doesn't provided render all breadcrumbs\n renderBreadcrumbs(breadcrumbs, separatedElement, classes?.breadcrumb, breadcrumbs.length - 1)\n )}\n </div>\n )\n}\n"],"names":["renderBreadcrumbs","breadcrumbs","separator","classes","lastIndex","breadcrumb","index","jsxs","jsx","Breadcrumb","cn","Breadcrumbs","ellipsis","defaultBreadcrumbs","hiddenCrumbsOpen","setHiddenCrumbsOpen","useState","hiddenCrumbsRef","useRef","useClickOutside","first","middle","last","useMemo","separatedElement","Icon","Fragment"],"mappings":"4hEAgCA,MAAMA,EAAoB,CACxBC,EACAC,EACAC,EACAC,IAEOH,EAAY,IAAI,CAACI,EAAYC,IAIhCC,EAAC,MAAA,CAA2B,UAAU,4BACpC,SAAA,CAAAC,EAACC,EAAA,CACC,WAAAJ,EACA,UAAWK,EAAGP,EAAS,CACrB,kDAPOG,IAAUF,EAQjB,2BAA4BC,EAAW,QAAA,CACxC,CAAA,CAAA,EAEFC,IAAUL,EAAY,OAAS,GAAKC,CAAA,CAAA,EAR7BG,EAAW,KASrB,CAEH,EAGUM,GAAc,CAAC,CAAE,UAAAT,EAAW,SAAAU,EAAU,QAAAT,EAAS,YAAAF,EAAcY,KAA2C,CACnH,KAAM,CAACC,EAAkBC,CAAmB,EAAIC,EAAkB,EAAK,EAEjEC,EAAkBC,EAAyB,IAAI,EAErDC,EAAgBF,EAAiB,IAAMF,EAAoB,EAAK,CAAC,EAGjE,KAAM,CAAE,MAAAK,EAAO,OAAAC,EAAQ,KAAAC,CAAA,EAASC,EAAQ,IAAM,CAC5C,IAAIH,EAA0B,CAAA,EAC1BC,EAA2B,CAAA,EAC3BC,EAAyB,CAAA,EAE7B,OAAIV,IACFQ,EAAQnB,EAAY,MAAM,EAAGW,CAAQ,EACrCS,EAASpB,EAAY,MAAMW,EAAUX,EAAY,OAASW,CAAQ,EAClEU,EAAOrB,EAAY,MAAMA,EAAY,OAASW,CAAQ,GAGjD,CAAE,MAAAQ,EAAO,OAAAC,EAAQ,KAAAC,CAAAA,CAAK,EAC5B,CAACrB,EAAaW,CAAQ,CAAC,EAEpBY,EAAmBtB,GAAaM,EAACiB,EAAA,CAAK,KAAK,oBAAoB,UAAWf,EAAG,SAAUP,GAAA,YAAAA,EAAS,SAAS,CAAA,CAAG,EAElH,OACEK,EAAC,MAAA,CACC,UAAWE,EACT,4CACA,kDACAP,GAAA,YAAAA,EAAS,IAAA,EAGV,SAAAS,EAECJ,EAAAkB,EAAA,CACG,SAAAzB,EAAY,OAASW,EAAW,EAAI,EAGnCL,EAAAmB,EAAA,CACG,SAAA,CAAA1B,EAAkBoB,EAAOI,EAAkBrB,GAAA,YAAAA,EAAS,UAAU,EAC9DqB,EACAH,EAAO,OAAS,GACfd,EAAAmB,EAAA,CACE,SAAA,CAAAnB,EAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAC,UAAO,QAAS,IAAMO,EAAoB,EAAI,EAAG,SAAA,MAAG,EACrDP,EAAC,KAAA,CACC,IAAKS,EACL,UAAWP,EACT,mDACA,sCACA,4CACA,CACE,sBAAuBI,CAAA,CACzB,EAGD,SAAAO,EAAO,IAAKhB,KACV,KAAA,CACC,SAAAG,EAACC,EAAA,CACC,WAAAJ,EACA,UAAWK,EACT,wCACA,wCACA,kDACAP,GAAA,YAAAA,EAAS,UAAA,CACX,CAAA,CACF,EATOE,EAAW,KAUpB,CACD,CAAA,CAAA,CACH,EACF,EACCmB,CAAA,EACH,EAEDxB,EAAkBsB,EAAME,EAAkBrB,GAAA,YAAAA,EAAS,WAAYmB,EAAK,OAAS,CAAC,CAAA,CAAA,CACjF,EAGAtB,EAAkBC,EAAauB,EAAkBrB,GAAA,YAAAA,EAAS,WAAYF,EAAY,OAAS,CAAC,CAAA,CAEhG,EAGAD,EAAkBC,EAAauB,EAAkBrB,GAAA,YAAAA,EAAS,WAAYF,EAAY,OAAS,CAAC,CAAA,CAAA,CAIpG"}
1
+ {"version":3,"file":"Breadcrumbs.js","sources":["../../../../lib/widgets/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { useMemo, useRef, useState } from 'react'\nimport { Breadcrumb } from './Breadcrumb'\nimport { type Breadcrumb as BreadcrumbType, defaultBreadcrumbs, type UseBreadcrumbsOptions } from './hooks'\nimport { useClickOutside } from '$/shared/hooks'\nimport { Icon } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\ntype BreadcrumbsClasses = {\n root?: string\n separator?: string\n breadcrumb?: string\n}\n\ntype BreadcrumbsProps = UseBreadcrumbsOptions & {\n /**\n * произвольный сепаратор, разделяющий элементы\n */\n separator?: React.ReactElement | string\n /**\n * указывает, сколько элементов отображать перед/после сужения\n */\n ellipsis?: number\n /**\n * дополнительные стили компонента\n */\n classes?: BreadcrumbsClasses\n /**\n * Массив хлебных крошек\n */\n breadcrumbs: BreadcrumbType[]\n}\n\nconst renderBreadcrumbs = (\n breadcrumbs: BreadcrumbType[],\n separator: BreadcrumbsProps['separator'],\n classes?: BreadcrumbsClasses['breadcrumb'],\n lastIndex?: number\n) => {\n return breadcrumbs.map((breadcrumb, index) => {\n const isLast = index === lastIndex\n\n return (\n <div key={breadcrumb.label} className='flex items-center gap-x-1'>\n <Breadcrumb\n isLast={isLast}\n breadcrumb={breadcrumb}\n className={cn(classes, {\n 'text-color-blue-grey-600': breadcrumb.disabled\n })}\n />\n {index !== breadcrumbs.length - 1 && separator}\n </div>\n )\n })\n}\n\nexport const Breadcrumbs = ({ separator, ellipsis, classes, breadcrumbs = defaultBreadcrumbs }: BreadcrumbsProps) => {\n const [hiddenCrumbsOpen, setHiddenCrumbsOpen] = useState<boolean>(false)\n\n const hiddenCrumbsRef = useRef<HTMLUListElement>(null)\n\n useClickOutside(hiddenCrumbsRef, () => setHiddenCrumbsOpen(false))\n\n // separated crumbs while ellipsis provided\n const { first, middle, last } = useMemo(() => {\n let first: BreadcrumbType[] = []\n let middle: BreadcrumbType[] = []\n let last: BreadcrumbType[] = []\n\n if (ellipsis) {\n first = breadcrumbs.slice(0, ellipsis)\n middle = breadcrumbs.slice(ellipsis, breadcrumbs.length - ellipsis)\n last = breadcrumbs.slice(breadcrumbs.length - ellipsis)\n }\n\n return { first, middle, last }\n }, [breadcrumbs, ellipsis])\n\n const separatedElement = separator ?? <Icon name='arrows/arrowRight' className={cn('size-4', classes?.separator)} />\n\n return (\n <div\n className={cn(\n 'flex max-w-[840px] flex-wrap items-center',\n 'gap-x-2 gap-y-1 py-4 text-color-primary-default',\n classes?.root\n )}\n >\n {ellipsis ? (\n // if ellipsis provided, render hidden breadcrumbs\n <>\n {breadcrumbs.length > ellipsis * 2 + 1 ? (\n // if we have more than ellipsis (visible crumbs) + available hidden crumbs\n // render hidden breadcrumbs\n <>\n {renderBreadcrumbs(first, separatedElement, classes?.breadcrumb)}\n {separatedElement}\n {middle.length > 0 && (\n <>\n <div className='relative'>\n <button onClick={() => setHiddenCrumbsOpen(true)}>...</button>\n <ul\n ref={hiddenCrumbsRef}\n className={cn(\n 'invisible absolute max-h-[264px] overflow-y-auto',\n 'w-[280px] rounded-sm bg-color-white',\n 'customScrollbar-y p-1 opacity-0 shadow-sm',\n {\n 'visible opacity-100': hiddenCrumbsOpen\n }\n )}\n >\n {middle.map((breadcrumb) => (\n <li key={breadcrumb.label}>\n <Breadcrumb\n breadcrumb={breadcrumb}\n className={cn(\n 'desk-body-regular-l inline-block py-3',\n 'w-full rounded-sm bg-color-white px-2',\n 'text-color-dark hover:bg-color-primary-tr-hover',\n classes?.breadcrumb\n )}\n />\n </li>\n ))}\n </ul>\n </div>\n {separatedElement}\n </>\n )}\n {renderBreadcrumbs(last, separatedElement, classes?.breadcrumb, last.length - 1)}\n </>\n ) : (\n // otherwise render all breadcrumbs\n renderBreadcrumbs(breadcrumbs, separatedElement, classes?.breadcrumb, breadcrumbs.length - 1)\n )}\n </>\n ) : (\n // if ellipsis doesn't provided render all breadcrumbs\n renderBreadcrumbs(breadcrumbs, separatedElement, classes?.breadcrumb, breadcrumbs.length - 1)\n )}\n </div>\n )\n}\n"],"names":["renderBreadcrumbs","breadcrumbs","separator","classes","lastIndex","breadcrumb","index","jsxs","jsx","Breadcrumb","cn","Breadcrumbs","ellipsis","defaultBreadcrumbs","hiddenCrumbsOpen","setHiddenCrumbsOpen","useState","hiddenCrumbsRef","useRef","useClickOutside","first","middle","last","useMemo","separatedElement","Icon","Fragment"],"mappings":"4hEAgCA,MAAMA,EAAoB,CACxBC,EACAC,EACAC,EACAC,IAEOH,EAAY,IAAI,CAACI,EAAYC,IAIhCC,EAAC,MAAA,CAA2B,UAAU,4BACpC,SAAA,CAAAC,EAACC,EAAA,CACC,OALSH,IAAUF,EAMnB,WAAAC,EACA,UAAWK,EAAGP,EAAS,CACrB,2BAA4BE,EAAW,QAAA,CACxC,CAAA,CAAA,EAEFC,IAAUL,EAAY,OAAS,GAAKC,CAAA,CAAA,EAR7BG,EAAW,KASrB,CAEH,EAGUM,GAAc,CAAC,CAAE,UAAAT,EAAW,SAAAU,EAAU,QAAAT,EAAS,YAAAF,EAAcY,KAA2C,CACnH,KAAM,CAACC,EAAkBC,CAAmB,EAAIC,EAAkB,EAAK,EAEjEC,EAAkBC,EAAyB,IAAI,EAErDC,EAAgBF,EAAiB,IAAMF,EAAoB,EAAK,CAAC,EAGjE,KAAM,CAAE,MAAAK,EAAO,OAAAC,EAAQ,KAAAC,CAAA,EAASC,EAAQ,IAAM,CAC5C,IAAIH,EAA0B,CAAA,EAC1BC,EAA2B,CAAA,EAC3BC,EAAyB,CAAA,EAE7B,OAAIV,IACFQ,EAAQnB,EAAY,MAAM,EAAGW,CAAQ,EACrCS,EAASpB,EAAY,MAAMW,EAAUX,EAAY,OAASW,CAAQ,EAClEU,EAAOrB,EAAY,MAAMA,EAAY,OAASW,CAAQ,GAGjD,CAAE,MAAAQ,EAAO,OAAAC,EAAQ,KAAAC,CAAAA,CAC1B,EAAG,CAACrB,EAAaW,CAAQ,CAAC,EAEpBY,EAAmBtB,GAAaM,EAACiB,EAAA,CAAK,KAAK,oBAAoB,UAAWf,EAAG,SAAUP,GAAA,YAAAA,EAAS,SAAS,CAAA,CAAG,EAElH,OACEK,EAAC,MAAA,CACC,UAAWE,EACT,4CACA,kDACAP,GAAA,YAAAA,EAAS,IAAA,EAGV,SAAAS,EAECJ,EAAAkB,EAAA,CACG,SAAAzB,EAAY,OAASW,EAAW,EAAI,EAGnCL,EAAAmB,EAAA,CACG,SAAA,CAAA1B,EAAkBoB,EAAOI,EAAkBrB,GAAA,YAAAA,EAAS,UAAU,EAC9DqB,EACAH,EAAO,OAAS,GACfd,EAAAmB,EAAA,CACE,SAAA,CAAAnB,EAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAC,UAAO,QAAS,IAAMO,EAAoB,EAAI,EAAG,SAAA,MAAG,EACrDP,EAAC,KAAA,CACC,IAAKS,EACL,UAAWP,EACT,mDACA,sCACA,4CACA,CACE,sBAAuBI,CAAA,CACzB,EAGD,SAAAO,EAAO,IAAKhB,KACV,KAAA,CACC,SAAAG,EAACC,EAAA,CACC,WAAAJ,EACA,UAAWK,EACT,wCACA,wCACA,kDACAP,GAAA,YAAAA,EAAS,UAAA,CACX,CAAA,CACF,EATOE,EAAW,KAUpB,CACD,CAAA,CAAA,CACH,EACF,EACCmB,CAAA,EACH,EAEDxB,EAAkBsB,EAAME,EAAkBrB,GAAA,YAAAA,EAAS,WAAYmB,EAAK,OAAS,CAAC,CAAA,CAAA,CACjF,EAGAtB,EAAkBC,EAAauB,EAAkBrB,GAAA,YAAAA,EAAS,WAAYF,EAAY,OAAS,CAAC,CAAA,CAEhG,EAGAD,EAAkBC,EAAauB,EAAkBrB,GAAA,YAAAA,EAAS,WAAYF,EAAY,OAAS,CAAC,CAAA,CAAA,CAIpG"}
@@ -1 +1 @@
1
- {"version":3,"file":"useButtonHandler.js","sources":["../../../../../lib/widgets/buttonWithHandlers/model/useButtonHandler.ts"],"sourcesContent":["'use client'\n\nimport { useCallback } from 'react'\nimport type { ButtonHandlerOptions } from './types'\nimport { isClient, scrollToElement } from '$/shared/utils'\n\nexport const useButtonHandler = (handlerOptions: ButtonHandlerOptions) => {\n const handleClick = useCallback(() => {\n switch (handlerOptions.handler) {\n case 'navigate': {\n const { url, target, rel } = handlerOptions\n if (isClient) {\n window?.open(url, target, rel)\n }\n\n break\n }\n case 'scroll': {\n const { widgetId } = handlerOptions ?? ''\n scrollToElement({ widgetId })\n break\n }\n\n case 'dialog': {\n if (!isClient) return\n\n const { dialogId } = handlerOptions ?? {}\n\n const dialog = document.getElementById(dialogId) as HTMLDialogElement | null\n\n if (!dialog) {\n console.error('Такого элемента в DOM не существует', dialogId)\n break\n }\n\n dialog.show()\n }\n }\n }, [handlerOptions])\n\n return handleClick\n}\n"],"names":["useButtonHandler","handlerOptions","useCallback","url","target","rel","isClient","widgetId","scrollToElement","dialogId","dialog"],"mappings":"mMAMO,MAAMA,EAAoBC,GACXC,EAAY,IAAM,CACpC,OAAQD,EAAe,QAAA,CACrB,IAAK,WAAY,CACf,KAAM,CAAE,IAAAE,EAAK,OAAAC,EAAQ,IAAAC,CAAA,EAAQJ,EACzBK,IACF,qBAAQ,KAAKH,EAAKC,EAAQC,IAG5B,KAAA,CAEF,IAAK,SAAU,CACb,KAAM,CAAE,SAAAE,GAAaN,GAAkB,GACvCO,EAAgB,CAAE,SAAAD,EAAU,EAC5B,KAAA,CAGF,IAAK,SAAU,CACb,GAAI,CAACD,EAAU,OAEf,KAAM,CAAE,SAAAG,GAAaR,GAAkB,CAAA,EAEjCS,EAAS,SAAS,eAAeD,CAAQ,EAE/C,GAAI,CAACC,EAAQ,CACX,QAAQ,MAAM,sCAAuCD,CAAQ,EAC7D,KAAA,CAGFC,EAAO,KAAA,CAAK,CACd,CACF,EACC,CAACT,CAAc,CAAC"}
1
+ {"version":3,"file":"useButtonHandler.js","sources":["../../../../../lib/widgets/buttonWithHandlers/model/useButtonHandler.ts"],"sourcesContent":["'use client'\n\nimport { useCallback } from 'react'\nimport type { ButtonHandlerOptions } from './types'\nimport { isClient, scrollToElement } from '$/shared/utils'\n\nexport const useButtonHandler = (handlerOptions: ButtonHandlerOptions) => {\n const handleClick = useCallback(() => {\n switch (handlerOptions.handler) {\n case 'navigate': {\n const { url, target, rel } = handlerOptions\n if (isClient) {\n window?.open(url, target, rel)\n }\n\n break\n }\n case 'scroll': {\n const { widgetId } = handlerOptions ?? ''\n scrollToElement({ widgetId })\n break\n }\n\n case 'dialog': {\n if (!isClient) return\n\n const { dialogId } = handlerOptions ?? {}\n\n const dialog = document.getElementById(dialogId) as HTMLDialogElement | null\n\n if (!dialog) {\n console.error('Такого элемента в DOM не существует', dialogId)\n break\n }\n\n dialog.show()\n }\n }\n }, [handlerOptions])\n\n return handleClick\n}\n"],"names":["useButtonHandler","handlerOptions","useCallback","url","target","rel","isClient","widgetId","scrollToElement","dialogId","dialog"],"mappings":"mMAMO,MAAMA,EAAoBC,GACXC,EAAY,IAAM,CACpC,OAAQD,EAAe,QAAA,CACrB,IAAK,WAAY,CACf,KAAM,CAAE,IAAAE,EAAK,OAAAC,EAAQ,IAAAC,CAAA,EAAQJ,EACzBK,IACF,qBAAQ,KAAKH,EAAKC,EAAQC,IAG5B,KACF,CACA,IAAK,SAAU,CACb,KAAM,CAAE,SAAAE,GAAaN,GAAkB,GACvCO,EAAgB,CAAE,SAAAD,EAAU,EAC5B,KACF,CAEA,IAAK,SAAU,CACb,GAAI,CAACD,EAAU,OAEf,KAAM,CAAE,SAAAG,GAAaR,GAAkB,CAAA,EAEjCS,EAAS,SAAS,eAAeD,CAAQ,EAE/C,GAAI,CAACC,EAAQ,CACX,QAAQ,MAAM,sCAAuCD,CAAQ,EAC7D,KACF,CAEAC,EAAO,KAAA,CACT,CAAA,CAEJ,EAAG,CAACT,CAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatorView.js","sources":["../../../../lib/widgets/calculator/CalculatorView.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { type FieldValues, FormProvider } from 'react-hook-form'\nimport { type CalculatorSchema, evaluateFormula, getCalculatorSchema, isFormula } from './model'\nimport {\n CalculatorFields,\n type CalculatorFieldsClasses,\n type CalculatorFieldsProps,\n CalculatorInfo,\n type CalculatorInfoClasses,\n type CalculatorInfoProps,\n type CalculatorTab\n} from './ui'\nimport { useControlledForm } from '$/shared/hooks'\nimport { cn, localStorageActions } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\n\nexport type CalculatorViewClasses = {\n wrapper?: string\n calculatorFields?: CalculatorFieldsClasses\n calculatorInfo?: CalculatorInfoClasses\n}\n\nexport interface CalculatorViewProps<T extends FieldValues = FieldValues> extends CalculatorTab {\n calculatorInfoConfig: CalculatorInfoProps\n calculatorFieldsConfig: CalculatorFieldsProps<T>\n classes?: CalculatorViewClasses\n}\n\nexport const CalculatorView = <T extends FieldValues>({\n calculatorInfoConfig,\n calculatorFieldsConfig,\n classes\n}: CalculatorViewProps<T>) => {\n const calculatorSchema: CalculatorSchema = getCalculatorSchema(calculatorFieldsConfig?.fieldsGroup)\n\n const formMethods = useControlledForm({\n schema: calculatorSchema,\n mode: 'onBlur',\n defaultValues: ZodUtils.getZodDefaults(calculatorSchema)\n })\n\n const watchedFields = formMethods.watch()\n\n const { rootValue } = calculatorInfoConfig\n\n useEffect(() => {\n localStorageActions.setItem('calculatorData', JSON.stringify(watchedFields))\n }, [watchedFields])\n\n const calculatedValue = isFormula(rootValue) ? evaluateFormula(rootValue.formula, watchedFields) : rootValue\n\n const mergedCalcInfoConfig = { ...calculatorInfoConfig, rootValue: calculatedValue }\n\n return (\n <FormProvider {...formMethods}>\n <div className={cn('flex items-start gap-16 mobile:flex-col mobile:items-center mobile:gap-8', classes?.wrapper)}>\n <CalculatorFields {...calculatorFieldsConfig} classes={classes?.calculatorFields} />\n <CalculatorInfo {...mergedCalcInfoConfig} classes={classes?.calculatorInfo} />\n </div>\n </FormProvider>\n )\n}\n"],"names":["CalculatorView","calculatorInfoConfig","calculatorFieldsConfig","classes","calculatorSchema","getCalculatorSchema","formMethods","useControlledForm","ZodUtils","watchedFields","rootValue","useEffect","localStorageActions","calculatedValue","isFormula","evaluateFormula","mergedCalcInfoConfig","jsx","FormProvider","jsxs","cn","CalculatorFields","CalculatorInfo"],"mappings":"kkFA4BO,MAAMA,GAAiB,CAAwB,CACpD,qBAAAC,EACA,uBAAAC,EACA,QAAAC,CACF,IAA8B,CAC5B,MAAMC,EAAqCC,EAAoBH,GAAA,YAAAA,EAAwB,WAAW,EAE5FI,EAAcC,EAAkB,CACpC,OAAQH,EACR,KAAM,SACN,cAAeI,EAAS,eAAeJ,CAAgB,CAAA,CACxD,EAEKK,EAAgBH,EAAY,MAAA,EAE5B,CAAE,UAAAI,GAAcT,EAEtBU,EAAU,IAAM,CACdC,EAAoB,QAAQ,iBAAkB,KAAK,UAAUH,CAAa,CAAC,CAAA,EAC1E,CAACA,CAAa,CAAC,EAElB,MAAMI,EAAkBC,EAAUJ,CAAS,EAAIK,EAAgBL,EAAU,QAASD,CAAa,EAAIC,EAE7FM,EAAuB,CAAE,GAAGf,EAAsB,UAAWY,CAAA,EAEnE,OACEI,EAACC,EAAA,CAAc,GAAGZ,EAChB,SAAAa,EAAC,MAAA,CAAI,UAAWC,EAAG,2EAA4EjB,GAAA,YAAAA,EAAS,OAAO,EAC7G,SAAA,CAAAc,EAACI,EAAA,CAAkB,GAAGnB,EAAwB,QAASC,GAAA,YAAAA,EAAS,iBAAkB,IACjFmB,EAAA,CAAgB,GAAGN,EAAsB,QAASb,GAAA,YAAAA,EAAS,cAAA,CAAgB,CAAA,CAAA,CAC9E,CAAA,CACF,CAEJ"}
1
+ {"version":3,"file":"CalculatorView.js","sources":["../../../../lib/widgets/calculator/CalculatorView.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { type FieldValues, FormProvider } from 'react-hook-form'\nimport { type CalculatorSchema, evaluateFormula, getCalculatorSchema, isFormula } from './model'\nimport {\n CalculatorFields,\n type CalculatorFieldsClasses,\n type CalculatorFieldsProps,\n CalculatorInfo,\n type CalculatorInfoClasses,\n type CalculatorInfoProps,\n type CalculatorTab\n} from './ui'\nimport { useControlledForm } from '$/shared/hooks'\nimport { cn, localStorageActions } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\n\nexport type CalculatorViewClasses = {\n wrapper?: string\n calculatorFields?: CalculatorFieldsClasses\n calculatorInfo?: CalculatorInfoClasses\n}\n\nexport interface CalculatorViewProps<T extends FieldValues = FieldValues> extends CalculatorTab {\n calculatorInfoConfig: CalculatorInfoProps\n calculatorFieldsConfig: CalculatorFieldsProps<T>\n classes?: CalculatorViewClasses\n}\n\nexport const CalculatorView = <T extends FieldValues>({\n calculatorInfoConfig,\n calculatorFieldsConfig,\n classes\n}: CalculatorViewProps<T>) => {\n const calculatorSchema: CalculatorSchema = getCalculatorSchema(calculatorFieldsConfig?.fieldsGroup)\n\n const formMethods = useControlledForm({\n schema: calculatorSchema,\n mode: 'onBlur',\n defaultValues: ZodUtils.getZodDefaults(calculatorSchema)\n })\n\n const watchedFields = formMethods.watch()\n\n const { rootValue } = calculatorInfoConfig\n\n useEffect(() => {\n localStorageActions.setItem('calculatorData', JSON.stringify(watchedFields))\n }, [watchedFields])\n\n const calculatedValue = isFormula(rootValue) ? evaluateFormula(rootValue.formula, watchedFields) : rootValue\n\n const mergedCalcInfoConfig = { ...calculatorInfoConfig, rootValue: calculatedValue }\n\n return (\n <FormProvider {...formMethods}>\n <div className={cn('flex items-start gap-16 mobile:flex-col mobile:items-center mobile:gap-8', classes?.wrapper)}>\n <CalculatorFields {...calculatorFieldsConfig} classes={classes?.calculatorFields} />\n <CalculatorInfo {...mergedCalcInfoConfig} classes={classes?.calculatorInfo} />\n </div>\n </FormProvider>\n )\n}\n"],"names":["CalculatorView","calculatorInfoConfig","calculatorFieldsConfig","classes","calculatorSchema","getCalculatorSchema","formMethods","useControlledForm","ZodUtils","watchedFields","rootValue","useEffect","localStorageActions","calculatedValue","isFormula","evaluateFormula","mergedCalcInfoConfig","jsx","FormProvider","jsxs","cn","CalculatorFields","CalculatorInfo"],"mappings":"kkFA4BO,MAAMA,GAAiB,CAAwB,CACpD,qBAAAC,EACA,uBAAAC,EACA,QAAAC,CACF,IAA8B,CAC5B,MAAMC,EAAqCC,EAAoBH,GAAA,YAAAA,EAAwB,WAAW,EAE5FI,EAAcC,EAAkB,CACpC,OAAQH,EACR,KAAM,SACN,cAAeI,EAAS,eAAeJ,CAAgB,CAAA,CACxD,EAEKK,EAAgBH,EAAY,MAAA,EAE5B,CAAE,UAAAI,GAAcT,EAEtBU,EAAU,IAAM,CACdC,EAAoB,QAAQ,iBAAkB,KAAK,UAAUH,CAAa,CAAC,CAC7E,EAAG,CAACA,CAAa,CAAC,EAElB,MAAMI,EAAkBC,EAAUJ,CAAS,EAAIK,EAAgBL,EAAU,QAASD,CAAa,EAAIC,EAE7FM,EAAuB,CAAE,GAAGf,EAAsB,UAAWY,CAAA,EAEnE,OACEI,EAACC,EAAA,CAAc,GAAGZ,EAChB,SAAAa,EAAC,MAAA,CAAI,UAAWC,EAAG,2EAA4EjB,GAAA,YAAAA,EAAS,OAAO,EAC7G,SAAA,CAAAc,EAACI,EAAA,CAAkB,GAAGnB,EAAwB,QAASC,GAAA,YAAAA,EAAS,iBAAkB,IACjFmB,EAAA,CAAgB,GAAGN,EAAsB,QAASb,GAAA,YAAAA,EAAS,cAAA,CAAgB,CAAA,CAAA,CAC9E,CAAA,CACF,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAdditionalSlider.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorFields/hooks/useAdditionalSlider.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { type FieldValues, type Path, type PathValue, useFormContext } from 'react-hook-form'\nimport { TypeGuards } from '../../../../../shared/utils'\nimport { type AdditionalSliderGroupConfig, type SlidersGroupProps } from '../ui'\n\ninterface UseAdditionalSlider<T extends FieldValues> {\n additionalSliderGroupConfig?: AdditionalSliderGroupConfig<T>\n slidersGroupConfig?: SlidersGroupProps<T>\n}\n\nconst ADDITIONAL_MONEY_MINIMUM = 20_000\n\nexport const useAdditionalSlider = <T extends FieldValues>({\n slidersGroupConfig,\n additionalSliderGroupConfig\n}: UseAdditionalSlider<T>) => {\n const [sliderVisible, setSliderVisible] = useState<boolean>(false)\n\n const { watch, setValue } = useFormContext<T>()\n\n const sliderSumGroup = slidersGroupConfig?.fields.find(({ args }) => args.name === 'sum')\n const { args } = sliderSumGroup || {}\n const { max: sumMax, name: sumName, defaultValue: sumDefaultValue } = args || {}\n const sumValue = watch(sumName as Path<T>)\n\n const { min: additionalSliderMin, name: additionalSliderName } = additionalSliderGroupConfig?.args ?? {}\n const additionalSliderValue = watch(additionalSliderName as Path<T>)\n const additionalSliderMax = Number(sumMax ?? 0) - (sumValue ?? sumDefaultValue)\n\n useEffect(() => {\n if (additionalSliderValue > additionalSliderMax) {\n setValue(additionalSliderName as Path<T>, additionalSliderMax as PathValue<T, Path<T>>)\n }\n }, [additionalSliderMax, additionalSliderValue, setValue, sumValue])\n\n useEffect(() => {\n if (Number(sumMax) === sumValue) {\n setSliderVisible(false)\n }\n }, [setSliderVisible, sumMax, sumValue])\n\n const onCheckedChange = () => {\n setSliderVisible((prevValue) => !prevValue)\n\n if (additionalSliderValue <= 0) {\n setValue(additionalSliderName as Path<T>, additionalSliderMin as PathValue<T, Path<T>>)\n }\n\n if (Number(sumMax) === sumValue) {\n setValue((sumName ?? '') as Path<T>, (sumValue - ADDITIONAL_MONEY_MINIMUM) as PathValue<T, Path<T>>)\n setValue(additionalSliderName as Path<T>, additionalSliderMin as PathValue<T, Path<T>>)\n }\n }\n\n return {\n sliderVisible,\n setSliderVisible,\n sumMax,\n sumName,\n sumDefaultValue,\n sumValue,\n additionalSliderMax,\n onCheckedChange,\n sliderSumExist: !TypeGuards.isObjectEmpty(sliderSumGroup?.args),\n sliderSumCorrectType: sliderSumGroup?.args.componentType === 'algorithmic' || sliderSumGroup?.args.componentType === 'step'\n }\n}\n"],"names":["ADDITIONAL_MONEY_MINIMUM","useAdditionalSlider","slidersGroupConfig","additionalSliderGroupConfig","sliderVisible","setSliderVisible","useState","watch","setValue","useFormContext","sliderSumGroup","args","sumMax","sumName","sumDefaultValue","sumValue","additionalSliderMin","additionalSliderName","additionalSliderValue","additionalSliderMax","useEffect","prevValue","TypeGuards"],"mappings":"gPAUA,MAAMA,EAA2B,IAEpBC,EAAsB,CAAwB,CACzD,mBAAAC,EACA,4BAAAC,CACF,IAA8B,CAC5B,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAAkB,EAAK,EAE3D,CAAE,MAAAC,EAAO,SAAAC,CAAA,EAAaC,EAAA,EAEtBC,EAAiBR,GAAA,YAAAA,EAAoB,OAAO,KAAK,CAAC,CAAE,KAAAS,CAAAA,IAAWA,EAAK,OAAS,OAC7E,CAAE,KAAAA,GAASD,GAAkB,CAAA,EAC7B,CAAE,IAAKE,EAAQ,KAAMC,EAAS,aAAcC,GAAoBH,GAAQ,CAAA,EACxEI,EAAWR,EAAMM,CAAkB,EAEnC,CAAE,IAAKG,EAAqB,KAAMC,IAAyBd,GAAA,YAAAA,EAA6B,OAAQ,CAAA,EAChGe,EAAwBX,EAAMU,CAA+B,EAC7DE,EAAsB,OAAOP,GAAU,CAAC,GAAKG,GAAYD,GAE/D,OAAAM,EAAU,IAAM,CACVF,EAAwBC,GAC1BX,EAASS,EAAiCE,CAA4C,CACxF,EACC,CAACA,EAAqBD,EAAuBV,EAAUO,CAAQ,CAAC,EAEnEK,EAAU,IAAM,CACV,OAAOR,CAAM,IAAMG,GACrBV,EAAiB,EAAK,CACxB,EACC,CAACA,EAAkBO,EAAQG,CAAQ,CAAC,EAehC,CACL,cAAAX,EACA,iBAAAC,EACA,OAAAO,EACA,QAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,oBAAAI,EACA,gBArBsB,IAAM,CAC5Bd,EAAkBgB,GAAc,CAACA,CAAS,EAEtCH,GAAyB,GAC3BV,EAASS,EAAiCD,CAA4C,EAGpF,OAAOJ,CAAM,IAAMG,IACrBP,EAAUK,GAAW,GAAiBE,EAAWf,CAAkD,EACnGQ,EAASS,EAAiCD,CAA4C,EACxF,EAYA,eAAgB,CAACM,EAAW,cAAcZ,GAAA,YAAAA,EAAgB,IAAI,EAC9D,sBAAsBA,GAAA,YAAAA,EAAgB,KAAK,iBAAkB,gBAAiBA,GAAA,YAAAA,EAAgB,KAAK,iBAAkB,MAAA,CAEzH"}
1
+ {"version":3,"file":"useAdditionalSlider.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorFields/hooks/useAdditionalSlider.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { type FieldValues, type Path, type PathValue, useFormContext } from 'react-hook-form'\nimport { TypeGuards } from '../../../../../shared/utils'\nimport { type AdditionalSliderGroupConfig, type SlidersGroupProps } from '../ui'\n\ninterface UseAdditionalSlider<T extends FieldValues> {\n additionalSliderGroupConfig?: AdditionalSliderGroupConfig<T>\n slidersGroupConfig?: SlidersGroupProps<T>\n}\n\nconst ADDITIONAL_MONEY_MINIMUM = 20_000\n\nexport const useAdditionalSlider = <T extends FieldValues>({\n slidersGroupConfig,\n additionalSliderGroupConfig\n}: UseAdditionalSlider<T>) => {\n const [sliderVisible, setSliderVisible] = useState<boolean>(false)\n\n const { watch, setValue } = useFormContext<T>()\n\n const sliderSumGroup = slidersGroupConfig?.fields.find(({ args }) => args.name === 'sum')\n const { args } = sliderSumGroup || {}\n const { max: sumMax, name: sumName, defaultValue: sumDefaultValue } = args || {}\n const sumValue = watch(sumName as Path<T>)\n\n const { min: additionalSliderMin, name: additionalSliderName } = additionalSliderGroupConfig?.args ?? {}\n const additionalSliderValue = watch(additionalSliderName as Path<T>)\n const additionalSliderMax = Number(sumMax ?? 0) - (sumValue ?? sumDefaultValue)\n\n useEffect(() => {\n if (additionalSliderValue > additionalSliderMax) {\n setValue(additionalSliderName as Path<T>, additionalSliderMax as PathValue<T, Path<T>>)\n }\n }, [additionalSliderMax, additionalSliderValue, setValue, sumValue])\n\n useEffect(() => {\n if (Number(sumMax) === sumValue) {\n setSliderVisible(false)\n }\n }, [setSliderVisible, sumMax, sumValue])\n\n const onCheckedChange = () => {\n setSliderVisible((prevValue) => !prevValue)\n\n if (additionalSliderValue <= 0) {\n setValue(additionalSliderName as Path<T>, additionalSliderMin as PathValue<T, Path<T>>)\n }\n\n if (Number(sumMax) === sumValue) {\n setValue((sumName ?? '') as Path<T>, (sumValue - ADDITIONAL_MONEY_MINIMUM) as PathValue<T, Path<T>>)\n setValue(additionalSliderName as Path<T>, additionalSliderMin as PathValue<T, Path<T>>)\n }\n }\n\n return {\n sliderVisible,\n setSliderVisible,\n sumMax,\n sumName,\n sumDefaultValue,\n sumValue,\n additionalSliderMax,\n onCheckedChange,\n sliderSumExist: !TypeGuards.isObjectEmpty(sliderSumGroup?.args),\n sliderSumCorrectType: sliderSumGroup?.args.componentType === 'algorithmic' || sliderSumGroup?.args.componentType === 'step'\n }\n}\n"],"names":["ADDITIONAL_MONEY_MINIMUM","useAdditionalSlider","slidersGroupConfig","additionalSliderGroupConfig","sliderVisible","setSliderVisible","useState","watch","setValue","useFormContext","sliderSumGroup","args","sumMax","sumName","sumDefaultValue","sumValue","additionalSliderMin","additionalSliderName","additionalSliderValue","additionalSliderMax","useEffect","prevValue","TypeGuards"],"mappings":"gPAUA,MAAMA,EAA2B,IAEpBC,EAAsB,CAAwB,CACzD,mBAAAC,EACA,4BAAAC,CACF,IAA8B,CAC5B,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAAkB,EAAK,EAE3D,CAAE,MAAAC,EAAO,SAAAC,CAAA,EAAaC,EAAA,EAEtBC,EAAiBR,GAAA,YAAAA,EAAoB,OAAO,KAAK,CAAC,CAAE,KAAAS,CAAAA,IAAWA,EAAK,OAAS,OAC7E,CAAE,KAAAA,GAASD,GAAkB,CAAA,EAC7B,CAAE,IAAKE,EAAQ,KAAMC,EAAS,aAAcC,GAAoBH,GAAQ,CAAA,EACxEI,EAAWR,EAAMM,CAAkB,EAEnC,CAAE,IAAKG,EAAqB,KAAMC,IAAyBd,GAAA,YAAAA,EAA6B,OAAQ,CAAA,EAChGe,EAAwBX,EAAMU,CAA+B,EAC7DE,EAAsB,OAAOP,GAAU,CAAC,GAAKG,GAAYD,GAE/D,OAAAM,EAAU,IAAM,CACVF,EAAwBC,GAC1BX,EAASS,EAAiCE,CAA4C,CAE1F,EAAG,CAACA,EAAqBD,EAAuBV,EAAUO,CAAQ,CAAC,EAEnEK,EAAU,IAAM,CACV,OAAOR,CAAM,IAAMG,GACrBV,EAAiB,EAAK,CAE1B,EAAG,CAACA,EAAkBO,EAAQG,CAAQ,CAAC,EAehC,CACL,cAAAX,EACA,iBAAAC,EACA,OAAAO,EACA,QAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,oBAAAI,EACA,gBArBsB,IAAM,CAC5Bd,EAAkBgB,GAAc,CAACA,CAAS,EAEtCH,GAAyB,GAC3BV,EAASS,EAAiCD,CAA4C,EAGpF,OAAOJ,CAAM,IAAMG,IACrBP,EAAUK,GAAW,GAAiBE,EAAWf,CAAkD,EACnGQ,EAASS,EAAiCD,CAA4C,EAE1F,EAWE,eAAgB,CAACM,EAAW,cAAcZ,GAAA,YAAAA,EAAgB,IAAI,EAC9D,sBAAsBA,GAAA,YAAAA,EAAgB,KAAK,iBAAkB,gBAAiBA,GAAA,YAAAA,EAAgB,KAAK,iBAAkB,MAAA,CAEzH"}
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { type Control, type FieldValues, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport { widgetIds } from '../model'\nimport {\n type Approvement,\n type ApprovementType,\n type Chips,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport {\n Button,\n type ButtonProps,\n CheckboxBase,\n type CheckedState,\n Heading,\n Icon,\n ProgressBar,\n ResponsiveContainer\n} from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n}\n\ntype ChipsClasses = {\n root?: string\n icon?: string\n}\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n): React.ReactNode => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nexport const DynamicForm = <AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n classes,\n buttonGroup\n}: DynamicFormProps<AType, CType, PType>) => {\n const { submitCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <section id={widgetIds.form} data-test-id={widgetIds.form} className={cn('w-full', classes?.root)}>\n <ResponsiveContainer\n className={cn(\n '!max-w-[636px] border-warm-grey-200 px-4 desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n <form\n onSubmit={handleSubmit(onSubmit)}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n bottomContent={<HTMLRenderer html={progress.subtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div className='mob-body-regular-m flex flex-col items-start justify-center gap-4'>\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div className='flex w-full flex-col items-center justify-center gap-4 desktop:flex-row'>\n {buttonGroup?.map((button, index) => {\n const disabled = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n return (\n <Button\n {...button}\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","DynamicForm","fields","title","progress","chips","submitProps","buttonGroup","submitCallback","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","QueryClientProvider","widgetIds","ResponsiveContainer","_a","Icon","_b","Heading","ProgressBar","FieldMapper","button","index","disabled","createElement","Button"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { type Control, type FieldValues, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport { widgetIds } from '../model'\nimport {\n type Approvement,\n type ApprovementType,\n type Chips,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport {\n Button,\n type ButtonProps,\n CheckboxBase,\n type CheckedState,\n Heading,\n Icon,\n ProgressBar,\n ResponsiveContainer\n} from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n}\n\ntype ChipsClasses = {\n root?: string\n icon?: string\n}\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n): React.ReactNode => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nexport const DynamicForm = <AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n classes,\n buttonGroup\n}: DynamicFormProps<AType, CType, PType>) => {\n const { submitCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <section id={widgetIds.form} data-test-id={widgetIds.form} className={cn('w-full', classes?.root)}>\n <ResponsiveContainer\n className={cn(\n '!max-w-[636px] border-warm-grey-200 px-4 desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n <form\n onSubmit={handleSubmit(onSubmit)}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n bottomContent={<HTMLRenderer html={progress.subtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div className='mob-body-regular-m flex flex-col items-start justify-center gap-4'>\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div className='flex w-full flex-col items-center justify-center gap-4 desktop:flex-row'>\n {buttonGroup?.map((button, index) => {\n const disabled = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n return (\n <Button\n {...button}\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","DynamicForm","fields","title","progress","chips","submitProps","buttonGroup","submitCallback","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","QueryClientProvider","widgetIds","ResponsiveContainer","_a","Icon","_b","Heading","ProgressBar","FieldMapper","button","index","disabled","createElement","Button"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicFormDialog.js","sources":["../../../../lib/widgets/dynamicFormDialog/DynamicFormDialog.tsx"],"sourcesContent":["'use client'\nimport { useState } from 'react'\nimport type { Control, FieldValues, SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport type { Approvement, ApprovementType } from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, type ButtonProps, CheckboxBase, type CheckedState, Dialog } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n}\n\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormDialogClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n approvement?: ApprovementClasses\n submit?: string\n}\n\nexport type DynamicFormDialogProps<AType extends ApprovementType> = React.DialogHTMLAttributes<HTMLDialogElement> & {\n fields: FieldElement<any, any, { validation: FieldValidation }>[]\n title: string\n approvement: Approvement<AType>\n dialogId: string\n submitProps?: SubmitProps\n classes?: DynamicFormDialogClasses\n buttonGroup: ButtonProps[]\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n) => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nexport const DynamicFormDialog = <AType extends ApprovementType>({\n fields,\n title,\n approvement,\n submitProps,\n dialogId,\n classes,\n buttonGroup,\n ...props\n}: DynamicFormDialogProps<AType>) => {\n const { submitCallback } = submitProps ?? {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <Dialog id={dialogId} title={title} {...props}>\n <form onSubmit={handleSubmit(onSubmit)} className='flex flex-col gap-6'>\n <FieldMapper control={control as unknown as Control} fields={fields} />\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n {buttonGroup?.map((button, index) => {\n const disabled = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n return (\n <Button\n {...button}\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n {/*<Button {...buttonProps} type='submit' disabled={approvement.type === 'checkbox' ? !checked : false} className='w-full'>*/}\n {/* {children ?? 'Отправить форму'}*/}\n {/*</Button>*/}\n </form>\n </Dialog>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicFormDialog\n"],"names":["withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","DynamicFormDialog","fields","title","submitProps","dialogId","buttonGroup","props","submitCallback","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","useControlledForm","QueryClientProvider","Dialog","values","FieldMapper","button","index","disabled","createElement","Button"],"mappings":"+/EA0CA,MAAMA,EAAkB,CACtBC,EACAC,EACAC,EACAC,IAEIH,EAAY,OAAS,MAAc,KAEnCA,EAAY,OAAS,OAChBI,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAA,YAAAA,EAAS,OAAA,CAAS,EAItFG,EAAC,QAAA,CACC,UAAWC,EACT,qCACA,8CACA,+CAAA,EAGF,SAAA,CAAAH,EAACI,EAAA,CAAa,QAASL,GAAA,YAAAA,EAAS,SAAU,QAAAF,EAAkB,gBAAAC,EAAkC,EAC9FE,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAA,YAAAA,EAAS,OAAA,CAAS,CAAA,CAAA,CAAA,EAKxEM,GAAoB,CAAgC,CAC/D,OAAAC,EACA,MAAAC,EACA,YAAAX,EACA,YAAAY,EACA,SAAAC,EACA,QAAAV,EACA,YAAAW,EACA,GAAGC,CACL,IAAqC,CACnC,KAAM,CAAE,eAAAC,GAAmBJ,GAAe,CAAA,EAEpC,CAACX,EAASC,CAAe,EAAIe,EAAuB,EAAK,EAEzDC,EAASC,EAAiBT,CAAM,EAChCU,EAAgBC,EAAS,eAAeH,CAAM,EAE9C,CAAE,QAAAI,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,OAAAN,EACA,cAAAE,EACA,KAAM,QAAA,CACP,EAMD,SACGK,EAAA,CACC,SAAArB,EAACsB,EAAA,CAAO,GAAIb,EAAU,MAAAF,EAAe,GAAGI,EACtC,SAAAT,EAAC,QAAK,SAAUiB,EAPkCI,GAAW,CAC7DX,GAAgBA,EAAe,CAAE,GAAGW,EAAQ,MAAO1B,EAAS,CAAA,CAMvB,EAAG,UAAU,sBAChD,SAAA,CAAAG,EAACwB,EAAA,CAAY,QAAAN,EAAwC,OAAAZ,CAAA,CAAgB,EACpEX,EAAgBC,EAAaC,EAASC,EAAiBC,GAAA,YAAAA,EAAS,WAAW,EAC3EW,GAAA,YAAAA,EAAa,IAAI,CAACe,EAAQC,IAAU,CACnC,MAAMC,EAAWF,EAAO,OAAS,UAAY7B,EAAY,OAAS,WAAa,CAACC,EAAU,GAE1F,OACE+B,EAACC,EAAA,CACE,GAAGJ,EACJ,IAAKC,EACL,SAAAC,EACA,UAAWxB,EACT,2BACA,CACE,SAAU,EAAQP,CAAW,EAE/BG,GAAA,YAAAA,EAAS,MAAA,CACX,CAAA,CACF,EAEH,CAAA,CAIH,EACF,EACF,CAEJ"}
1
+ {"version":3,"file":"DynamicFormDialog.js","sources":["../../../../lib/widgets/dynamicFormDialog/DynamicFormDialog.tsx"],"sourcesContent":["'use client'\nimport { useState } from 'react'\nimport type { Control, FieldValues, SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport type { Approvement, ApprovementType } from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, type ButtonProps, CheckboxBase, type CheckedState, Dialog } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n}\n\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormDialogClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n approvement?: ApprovementClasses\n submit?: string\n}\n\nexport type DynamicFormDialogProps<AType extends ApprovementType> = React.DialogHTMLAttributes<HTMLDialogElement> & {\n fields: FieldElement<any, any, { validation: FieldValidation }>[]\n title: string\n approvement: Approvement<AType>\n dialogId: string\n submitProps?: SubmitProps\n classes?: DynamicFormDialogClasses\n buttonGroup: ButtonProps[]\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n) => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nexport const DynamicFormDialog = <AType extends ApprovementType>({\n fields,\n title,\n approvement,\n submitProps,\n dialogId,\n classes,\n buttonGroup,\n ...props\n}: DynamicFormDialogProps<AType>) => {\n const { submitCallback } = submitProps ?? {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <Dialog id={dialogId} title={title} {...props}>\n <form onSubmit={handleSubmit(onSubmit)} className='flex flex-col gap-6'>\n <FieldMapper control={control as unknown as Control} fields={fields} />\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n {buttonGroup?.map((button, index) => {\n const disabled = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n return (\n <Button\n {...button}\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n {/*<Button {...buttonProps} type='submit' disabled={approvement.type === 'checkbox' ? !checked : false} className='w-full'>*/}\n {/* {children ?? 'Отправить форму'}*/}\n {/*</Button>*/}\n </form>\n </Dialog>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicFormDialog\n"],"names":["withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","DynamicFormDialog","fields","title","submitProps","dialogId","buttonGroup","props","submitCallback","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","useControlledForm","QueryClientProvider","Dialog","values","FieldMapper","button","index","disabled","createElement","Button"],"mappings":"+/EA0CA,MAAMA,EAAkB,CACtBC,EACAC,EACAC,EACAC,IAEIH,EAAY,OAAS,MAAc,KAEnCA,EAAY,OAAS,OAChBI,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAA,YAAAA,EAAS,OAAA,CAAS,EAItFG,EAAC,QAAA,CACC,UAAWC,EACT,qCACA,8CACA,+CAAA,EAGF,SAAA,CAAAH,EAACI,EAAA,CAAa,QAASL,GAAA,YAAAA,EAAS,SAAU,QAAAF,EAAkB,gBAAAC,EAAkC,EAC9FE,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAA,YAAAA,EAAS,OAAA,CAAS,CAAA,CAAA,CAAA,EAKxEM,GAAoB,CAAgC,CAC/D,OAAAC,EACA,MAAAC,EACA,YAAAX,EACA,YAAAY,EACA,SAAAC,EACA,QAAAV,EACA,YAAAW,EACA,GAAGC,CACL,IAAqC,CACnC,KAAM,CAAE,eAAAC,GAAmBJ,GAAe,CAAA,EAEpC,CAACX,EAASC,CAAe,EAAIe,EAAuB,EAAK,EAEzDC,EAASC,EAAiBT,CAAM,EAChCU,EAAgBC,EAAS,eAAeH,CAAM,EAE9C,CAAE,QAAAI,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,OAAAN,EACA,cAAAE,EACA,KAAM,QAAA,CACP,EAMD,SACGK,EAAA,CACC,SAAArB,EAACsB,EAAA,CAAO,GAAIb,EAAU,MAAAF,EAAe,GAAGI,EACtC,SAAAT,EAAC,QAAK,SAAUiB,EAPkCI,GAAW,CAC7DX,GAAgBA,EAAe,CAAE,GAAGW,EAAQ,MAAO1B,EAAS,CAClE,CAK2C,EAAG,UAAU,sBAChD,SAAA,CAAAG,EAACwB,EAAA,CAAY,QAAAN,EAAwC,OAAAZ,CAAA,CAAgB,EACpEX,EAAgBC,EAAaC,EAASC,EAAiBC,GAAA,YAAAA,EAAS,WAAW,EAC3EW,GAAA,YAAAA,EAAa,IAAI,CAACe,EAAQC,IAAU,CACnC,MAAMC,EAAWF,EAAO,OAAS,UAAY7B,EAAY,OAAS,WAAa,CAACC,EAAU,GAE1F,OACE+B,EAACC,EAAA,CACE,GAAGJ,EACJ,IAAKC,EACL,SAAAC,EACA,UAAWxB,EACT,2BACA,CACE,SAAU,EAAQP,CAAW,EAE/BG,GAAA,YAAAA,EAAS,MAAA,CACX,CAAA,CAGN,EAAC,CAAA,CAIH,EACF,EACF,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldMapper.js","sources":["../../../../lib/widgets/fieldMapper/FieldMapper.tsx"],"sourcesContent":["import { type Control, type FieldValues } from 'react-hook-form'\nimport type { FieldElement } from './model/types'\nimport { Controlled } from '$/shared/ui'\n\ntype FieldMapperProps<TFieldValues extends FieldValues> = {\n control: Control<TFieldValues>\n fields: FieldElement<TFieldValues>[]\n}\n\nexport const FieldMapper = <TFieldValues extends FieldValues>({ fields, control }: FieldMapperProps<TFieldValues>) => {\n return fields.map(({ type, args }) => {\n const Component = Controlled[type] as React.ComponentType<typeof args>\n\n return <Component {...args} key={args.name} control={control as Control} />\n })\n}\n"],"names":["FieldMapper","fields","control","type","args","Component","Controlled"],"mappings":"szDASO,MAAMA,EAAc,CAAmC,CAAE,OAAAC,EAAQ,QAAAC,KAC/DD,EAAO,IAAI,CAAC,CAAE,KAAAE,EAAM,KAAAC,KAAW,CACpC,MAAMC,EAAYC,EAAWH,CAAI,EAEjC,SAAQE,EAAA,CAAW,GAAGD,EAAM,IAAKA,EAAK,KAAM,QAAAF,EAA6B,CAAA,CAC1E"}
1
+ {"version":3,"file":"FieldMapper.js","sources":["../../../../lib/widgets/fieldMapper/FieldMapper.tsx"],"sourcesContent":["import { type Control, type FieldValues } from 'react-hook-form'\nimport type { FieldElement } from './model/types'\nimport { Controlled } from '$/shared/ui'\n\ntype FieldMapperProps<TFieldValues extends FieldValues> = {\n control: Control<TFieldValues>\n fields: FieldElement<TFieldValues>[]\n}\n\nexport const FieldMapper = <TFieldValues extends FieldValues>({ fields, control }: FieldMapperProps<TFieldValues>) => {\n return fields.map(({ type, args }) => {\n const Component = Controlled[type] as React.ComponentType<typeof args>\n\n return <Component {...args} key={args.name} control={control as Control} />\n })\n}\n"],"names":["FieldMapper","fields","control","type","args","Component","Controlled"],"mappings":"szDASO,MAAMA,EAAc,CAAmC,CAAE,OAAAC,EAAQ,QAAAC,KAC/DD,EAAO,IAAI,CAAC,CAAE,KAAAE,EAAM,KAAAC,KAAW,CACpC,MAAMC,EAAYC,EAAWH,CAAI,EAEjC,SAAQE,EAAA,CAAW,GAAGD,EAAM,IAAKA,EAAK,KAAM,QAAAF,EAA6B,CAC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Ligal.js","sources":["../../../../../lib/widgets/footer/ui/Ligal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '$/shared/utils'\n\ntype LigalClasses = {\n ligalRoot?: string\n ligalText?: string\n ligalButton?: string\n}\n\nexport interface LigalProps {\n text: string\n classes?: LigalClasses\n}\n\nexport const Ligal = ({ text, classes }: LigalProps) => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const [isClamped, setIsClamped] = React.useState(false)\n const ligalRef = React.useRef<HTMLParagraphElement | null>(null)\n\n React.useEffect(() => {\n const element = ligalRef.current\n if (element) {\n setIsClamped(element.scrollHeight > element.clientHeight)\n }\n }, [])\n\n return (\n <div className={cn('mt-8 flex flex-col gap-4', classes?.ligalRoot)}>\n <div\n ref={ligalRef}\n className={cn('desk-body-regular-m text-color-footer', { 'line-clamp-3': !isExpanded }, classes?.ligalText)}\n dangerouslySetInnerHTML={{ __html: text }}\n />\n\n {isClamped && (\n <div\n tabIndex={0}\n role='button'\n onClick={() => setIsExpanded((prev) => !prev)}\n className={cn(\n 'desk-body-regular-l w-max cursor-pointer font-medium text-color-footer transition-colors hover:text-color-white',\n classes?.ligalButton\n )}\n >\n Подробнее\n </div>\n )}\n </div>\n )\n}\n"],"names":["Ligal","text","classes","isExpanded","setIsExpanded","React","isClamped","setIsClamped","ligalRef","element","cn","jsx","prev"],"mappings":"2HAgBO,MAAMA,EAAQ,CAAC,CAAE,KAAAC,EAAM,QAAAC,KAA0B,CACtD,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAAM,SAAS,EAAK,EAClD,CAACC,EAAWC,CAAY,EAAIF,EAAM,SAAS,EAAK,EAChDG,EAAWH,EAAM,OAAoC,IAAI,EAE/D,OAAAA,EAAM,UAAU,IAAM,CACpB,MAAMI,EAAUD,EAAS,QACrBC,GACFF,EAAaE,EAAQ,aAAeA,EAAQ,YAAY,CAC1D,EACC,EAAE,IAGF,MAAA,CAAI,UAAWC,EAAG,2BAA4BR,GAAA,YAAAA,EAAS,SAAS,EAC/D,SAAA,CAAAS,EAAC,MAAA,CACC,IAAKH,EACL,UAAWE,EAAG,wCAAyC,CAAE,eAAgB,CAACP,CAAA,EAAcD,GAAA,YAAAA,EAAS,SAAS,EAC1G,wBAAyB,CAAE,OAAQD,CAAA,CAAK,CAAA,EAGzCK,GACCK,EAAC,MAAA,CACC,SAAU,EACV,KAAK,SACL,QAAS,IAAMP,EAAeQ,GAAS,CAACA,CAAI,EAC5C,UAAWF,EACT,kHACAR,GAAA,YAAAA,EAAS,WAAA,EAEZ,SAAA,WAAA,CAAA,CAED,EAEJ,CAEJ"}
1
+ {"version":3,"file":"Ligal.js","sources":["../../../../../lib/widgets/footer/ui/Ligal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '$/shared/utils'\n\ntype LigalClasses = {\n ligalRoot?: string\n ligalText?: string\n ligalButton?: string\n}\n\nexport interface LigalProps {\n text: string\n classes?: LigalClasses\n}\n\nexport const Ligal = ({ text, classes }: LigalProps) => {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const [isClamped, setIsClamped] = React.useState(false)\n const ligalRef = React.useRef<HTMLParagraphElement | null>(null)\n\n React.useEffect(() => {\n const element = ligalRef.current\n if (element) {\n setIsClamped(element.scrollHeight > element.clientHeight)\n }\n }, [])\n\n return (\n <div className={cn('mt-8 flex flex-col gap-4', classes?.ligalRoot)}>\n <div\n ref={ligalRef}\n className={cn('desk-body-regular-m text-color-footer', { 'line-clamp-3': !isExpanded }, classes?.ligalText)}\n dangerouslySetInnerHTML={{ __html: text }}\n />\n\n {isClamped && (\n <div\n tabIndex={0}\n role='button'\n onClick={() => setIsExpanded((prev) => !prev)}\n className={cn(\n 'desk-body-regular-l w-max cursor-pointer font-medium text-color-footer transition-colors hover:text-color-white',\n classes?.ligalButton\n )}\n >\n Подробнее\n </div>\n )}\n </div>\n )\n}\n"],"names":["Ligal","text","classes","isExpanded","setIsExpanded","React","isClamped","setIsClamped","ligalRef","element","cn","jsx","prev"],"mappings":"2HAgBO,MAAMA,EAAQ,CAAC,CAAE,KAAAC,EAAM,QAAAC,KAA0B,CACtD,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAAM,SAAS,EAAK,EAClD,CAACC,EAAWC,CAAY,EAAIF,EAAM,SAAS,EAAK,EAChDG,EAAWH,EAAM,OAAoC,IAAI,EAE/D,OAAAA,EAAM,UAAU,IAAM,CACpB,MAAMI,EAAUD,EAAS,QACrBC,GACFF,EAAaE,EAAQ,aAAeA,EAAQ,YAAY,CAE5D,EAAG,CAAA,CAAE,IAGF,MAAA,CAAI,UAAWC,EAAG,2BAA4BR,GAAA,YAAAA,EAAS,SAAS,EAC/D,SAAA,CAAAS,EAAC,MAAA,CACC,IAAKH,EACL,UAAWE,EAAG,wCAAyC,CAAE,eAAgB,CAACP,CAAA,EAAcD,GAAA,YAAAA,EAAS,SAAS,EAC1G,wBAAyB,CAAE,OAAQD,CAAA,CAAK,CAAA,EAGzCK,GACCK,EAAC,MAAA,CACC,SAAU,EACV,KAAK,SACL,QAAS,IAAMP,EAAeQ,GAAS,CAACA,CAAI,EAC5C,UAAWF,EACT,kHACAR,GAAA,YAAAA,EAAS,WAAA,EAEZ,SAAA,WAAA,CAAA,CAED,EAEJ,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"baseHtmlParser.js","sources":["../../../../lib/widgets/htmlParser/baseHtmlParser.ts"],"sourcesContent":["'use client'\n\nexport type ParserOptions = {\n /**\n * включать элемент body\n */\n includeBody?: boolean\n /**\n * включать сплошной текст (вне тегов)\n */\n includeSolidText?: boolean\n /**\n * парсить рекурсивно\n */\n recursive?: boolean\n /**\n * фильтровать только нужные html теги\n */\n element?: keyof React.JSX.IntrinsicElements\n}\n\nexport abstract class BaseHTMLParser {\n private readonly TEXT_NODE = 3 as const\n private readonly ELEMENT_NODE = 1 as const\n\n protected constructor(private options?: ParserOptions) {}\n\n /**\n * Рекурсивно обходит DOM дерево и собирает данные в зависимости от опций.\n * @param node Текущий узел DOM дерева\n * @param elements Массив для сбора элементов\n * @param as Тип возвращаемых данных ('string' или 'node')\n */\n protected traverse(node: Node, as: 'string' | 'node' = 'string', elements: (string | Node)[]) {\n const { includeSolidText, recursive, element } = this.options || {}\n\n switch (node.nodeType) {\n // если узел - элемент\n case this.ELEMENT_NODE:\n const elementNode = node as Element\n const elementName = elementNode.tagName.toLowerCase()\n\n // если нашли элемент script, в целях безопасности пропускаем его\n if (elementName === 'script') {\n console.warn('Found script node. For better security this node will be skipped.')\n break\n }\n\n // если требуется только определенные элементы и текущий не подходит, пропускаем\n if (element && elementName !== element) {\n break\n }\n\n // добавляем элемент в зависимости от требуемого типа\n if (as === 'node') {\n elements.push(node)\n } else {\n const content = elementNode.outerHTML.trim()\n elements.push(content)\n }\n\n // если требуется рекурсивно обрабатывать дочерние ноды\n if (recursive) {\n for (const child of node.childNodes) {\n this.traverse(child, as, elements)\n }\n }\n break\n // если узел - текстовый и требуется его добавить, добавляем\n case this.TEXT_NODE:\n if (!includeSolidText) {\n break\n }\n\n if (as === 'node') {\n elements.push(node)\n } else {\n const content = node.textContent\n\n if (content) {\n elements.push(content)\n }\n }\n break\n }\n }\n\n /**\n * Парсит HTML строку и возвращает массив тегов или нод в зависимости от опций.\n * @param html HTML строка\n * @param as Тип возвращаемых данных ('string' или 'node')\n * @returns Массив тегов или нод\n */\n async parse(html: string, as: 'string' | 'node' = 'string'): Promise<{ stringNodes: string[]; nodes: Node[] }> {\n const { includeBody } = this.options || {}\n\n const stringNodes: string[] = []\n const nodes: Node[] = []\n const doc = await this.parseFromString(html)\n\n const elements = as === 'string' ? stringNodes : nodes\n\n if (includeBody) {\n this.traverse(doc.body, as, elements)\n } else {\n for (const child of doc.body.childNodes) {\n this.traverse(child, as, elements)\n }\n }\n\n return { stringNodes, nodes }\n }\n\n /**\n * Считает количество указанных тегов в HTML строке.\n * @param html HTML строка\n * @returns Количество найденных тегов\n */\n async countElements(html: string): Promise<number> {\n const { stringNodes } = await this.parse(html, 'string')\n\n return stringNodes.length\n }\n\n /**\n * Преобразует HTML строку в DOM объект.\n * @param html HTML строка\n * @returns DOM объект\n */\n protected abstract parseFromString(html: string): Promise<Document>\n}\n"],"names":["BaseHTMLParser","options","__publicField","node","as","elements","includeSolidText","recursive","element","elementNode","elementName","content","child","html","includeBody","stringNodes","nodes","doc"],"mappings":"oKAqBO,MAAeA,CAAe,CAIzB,YAAoBC,EAAyB,CAHtCC,EAAA,iBAAY,GACZA,EAAA,oBAAe,GAEF,KAAA,QAAAD,CAAA,CAQpB,SAASE,EAAYC,EAAwB,SAAUC,EAA6B,CAC5F,KAAM,CAAE,iBAAAC,EAAkB,UAAAC,EAAW,QAAAC,GAAY,KAAK,SAAW,CAAA,EAEjE,OAAQL,EAAK,SAAA,CAEX,KAAK,KAAK,aACR,MAAMM,EAAcN,EACdO,EAAcD,EAAY,QAAQ,YAAA,EAGxC,GAAIC,IAAgB,SAAU,CAC5B,QAAQ,KAAK,mEAAmE,EAChF,KAAA,CAIF,GAAIF,GAAWE,IAAgBF,EAC7B,MAIF,GAAIJ,IAAO,OACTC,EAAS,KAAKF,CAAI,MACb,CACL,MAAMQ,EAAUF,EAAY,UAAU,KAAA,EACtCJ,EAAS,KAAKM,CAAO,CAAA,CAIvB,GAAIJ,EACF,UAAWK,KAAST,EAAK,WACvB,KAAK,SAASS,EAAOR,EAAIC,CAAQ,EAGrC,MAEF,KAAK,KAAK,UACR,GAAI,CAACC,EACH,MAGF,GAAIF,IAAO,OACTC,EAAS,KAAKF,CAAI,MACb,CACL,MAAMQ,EAAUR,EAAK,YAEjBQ,GACFN,EAAS,KAAKM,CAAO,CACvB,CAEF,KAAA,CACJ,CASF,MAAM,MAAME,EAAcT,EAAwB,SAA6D,CAC7G,KAAM,CAAE,YAAAU,CAAA,EAAgB,KAAK,SAAW,CAAA,EAElCC,EAAwB,CAAA,EACxBC,EAAgB,CAAA,EAChBC,EAAM,MAAM,KAAK,gBAAgBJ,CAAI,EAErCR,EAAWD,IAAO,SAAWW,EAAcC,EAEjD,GAAIF,EACF,KAAK,SAASG,EAAI,KAAMb,EAAIC,CAAQ,MAEpC,WAAWO,KAASK,EAAI,KAAK,WAC3B,KAAK,SAASL,EAAOR,EAAIC,CAAQ,EAIrC,MAAO,CAAE,YAAAU,EAAa,MAAAC,CAAA,CAAM,CAQ9B,MAAM,cAAcH,EAA+B,CACjD,KAAM,CAAE,YAAAE,CAAA,EAAgB,MAAM,KAAK,MAAMF,EAAM,QAAQ,EAEvD,OAAOE,EAAY,MAAA,CASvB"}
1
+ {"version":3,"file":"baseHtmlParser.js","sources":["../../../../lib/widgets/htmlParser/baseHtmlParser.ts"],"sourcesContent":["'use client'\n\nexport type ParserOptions = {\n /**\n * включать элемент body\n */\n includeBody?: boolean\n /**\n * включать сплошной текст (вне тегов)\n */\n includeSolidText?: boolean\n /**\n * парсить рекурсивно\n */\n recursive?: boolean\n /**\n * фильтровать только нужные html теги\n */\n element?: keyof React.JSX.IntrinsicElements\n}\n\nexport abstract class BaseHTMLParser {\n private readonly TEXT_NODE = 3 as const\n private readonly ELEMENT_NODE = 1 as const\n\n protected constructor(private options?: ParserOptions) {}\n\n /**\n * Рекурсивно обходит DOM дерево и собирает данные в зависимости от опций.\n * @param node Текущий узел DOM дерева\n * @param elements Массив для сбора элементов\n * @param as Тип возвращаемых данных ('string' или 'node')\n */\n protected traverse(node: Node, as: 'string' | 'node' = 'string', elements: (string | Node)[]) {\n const { includeSolidText, recursive, element } = this.options || {}\n\n switch (node.nodeType) {\n // если узел - элемент\n case this.ELEMENT_NODE:\n const elementNode = node as Element\n const elementName = elementNode.tagName.toLowerCase()\n\n // если нашли элемент script, в целях безопасности пропускаем его\n if (elementName === 'script') {\n console.warn('Found script node. For better security this node will be skipped.')\n break\n }\n\n // если требуется только определенные элементы и текущий не подходит, пропускаем\n if (element && elementName !== element) {\n break\n }\n\n // добавляем элемент в зависимости от требуемого типа\n if (as === 'node') {\n elements.push(node)\n } else {\n const content = elementNode.outerHTML.trim()\n elements.push(content)\n }\n\n // если требуется рекурсивно обрабатывать дочерние ноды\n if (recursive) {\n for (const child of node.childNodes) {\n this.traverse(child, as, elements)\n }\n }\n break\n // если узел - текстовый и требуется его добавить, добавляем\n case this.TEXT_NODE:\n if (!includeSolidText) {\n break\n }\n\n if (as === 'node') {\n elements.push(node)\n } else {\n const content = node.textContent\n\n if (content) {\n elements.push(content)\n }\n }\n break\n }\n }\n\n /**\n * Парсит HTML строку и возвращает массив тегов или нод в зависимости от опций.\n * @param html HTML строка\n * @param as Тип возвращаемых данных ('string' или 'node')\n * @returns Массив тегов или нод\n */\n async parse(html: string, as: 'string' | 'node' = 'string'): Promise<{ stringNodes: string[]; nodes: Node[] }> {\n const { includeBody } = this.options || {}\n\n const stringNodes: string[] = []\n const nodes: Node[] = []\n const doc = await this.parseFromString(html)\n\n const elements = as === 'string' ? stringNodes : nodes\n\n if (includeBody) {\n this.traverse(doc.body, as, elements)\n } else {\n for (const child of doc.body.childNodes) {\n this.traverse(child, as, elements)\n }\n }\n\n return { stringNodes, nodes }\n }\n\n /**\n * Считает количество указанных тегов в HTML строке.\n * @param html HTML строка\n * @returns Количество найденных тегов\n */\n async countElements(html: string): Promise<number> {\n const { stringNodes } = await this.parse(html, 'string')\n\n return stringNodes.length\n }\n\n /**\n * Преобразует HTML строку в DOM объект.\n * @param html HTML строка\n * @returns DOM объект\n */\n protected abstract parseFromString(html: string): Promise<Document>\n}\n"],"names":["BaseHTMLParser","options","__publicField","node","as","elements","includeSolidText","recursive","element","elementNode","elementName","content","child","html","includeBody","stringNodes","nodes","doc"],"mappings":"oKAqBO,MAAeA,CAAe,CAIzB,YAAoBC,EAAyB,CAHtCC,EAAA,iBAAY,GACZA,EAAA,oBAAe,GAEF,KAAA,QAAAD,CAA0B,CAQ9C,SAASE,EAAYC,EAAwB,SAAUC,EAA6B,CAC5F,KAAM,CAAE,iBAAAC,EAAkB,UAAAC,EAAW,QAAAC,GAAY,KAAK,SAAW,CAAA,EAEjE,OAAQL,EAAK,SAAA,CAEX,KAAK,KAAK,aACR,MAAMM,EAAcN,EACdO,EAAcD,EAAY,QAAQ,YAAA,EAGxC,GAAIC,IAAgB,SAAU,CAC5B,QAAQ,KAAK,mEAAmE,EAChF,KACF,CAGA,GAAIF,GAAWE,IAAgBF,EAC7B,MAIF,GAAIJ,IAAO,OACTC,EAAS,KAAKF,CAAI,MACb,CACL,MAAMQ,EAAUF,EAAY,UAAU,KAAA,EACtCJ,EAAS,KAAKM,CAAO,CACvB,CAGA,GAAIJ,EACF,UAAWK,KAAST,EAAK,WACvB,KAAK,SAASS,EAAOR,EAAIC,CAAQ,EAGrC,MAEF,KAAK,KAAK,UACR,GAAI,CAACC,EACH,MAGF,GAAIF,IAAO,OACTC,EAAS,KAAKF,CAAI,MACb,CACL,MAAMQ,EAAUR,EAAK,YAEjBQ,GACFN,EAAS,KAAKM,CAAO,CAEzB,CACA,KAAA,CAEN,CAQA,MAAM,MAAME,EAAcT,EAAwB,SAA6D,CAC7G,KAAM,CAAE,YAAAU,CAAA,EAAgB,KAAK,SAAW,CAAA,EAElCC,EAAwB,CAAA,EACxBC,EAAgB,CAAA,EAChBC,EAAM,MAAM,KAAK,gBAAgBJ,CAAI,EAErCR,EAAWD,IAAO,SAAWW,EAAcC,EAEjD,GAAIF,EACF,KAAK,SAASG,EAAI,KAAMb,EAAIC,CAAQ,MAEpC,WAAWO,KAASK,EAAI,KAAK,WAC3B,KAAK,SAASL,EAAOR,EAAIC,CAAQ,EAIrC,MAAO,CAAE,YAAAU,EAAa,MAAAC,CAAA,CACxB,CAOA,MAAM,cAAcH,EAA+B,CACjD,KAAM,CAAE,YAAAE,CAAA,EAAgB,MAAM,KAAK,MAAMF,EAAM,QAAQ,EAEvD,OAAOE,EAAY,MACrB,CAQF"}
@@ -1 +1 @@
1
- {"version":3,"file":"htmlParser.js","sources":["../../../../lib/widgets/htmlParser/htmlParser.ts"],"sourcesContent":["'use client'\n\nimport { BaseHTMLParser, type ParserOptions } from './baseHtmlParser'\n\nconst isBrowser = typeof window !== 'undefined'\n//\n// class BrowserHTMLParserError extends Error {\n// constructor(\n// message: string,\n// public originalError?: Error\n// ) {\n// super(message)\n// this.name = 'BrowserHTMLParserError'\n// }\n// }\n\nexport class HTMLParser extends BaseHTMLParser {\n constructor(options?: ParserOptions) {\n super(options)\n }\n\n async parseFromString(html: string): Promise<Document> {\n if (!isBrowser) {\n return Promise.reject()\n }\n\n const parser = new DOMParser()\n return parser.parseFromString(html, 'text/html')\n }\n}\n"],"names":["isBrowser","HTMLParser","BaseHTMLParser","options","html"],"mappings":"qDAIA,MAAMA,EAAY,OAAO,OAAW,IAY7B,MAAMC,UAAmBC,CAAe,CAC7C,YAAYC,EAAyB,CACnC,MAAMA,CAAO,CAAA,CAGf,MAAM,gBAAgBC,EAAiC,CACrD,OAAKJ,EAIU,IAAI,UAAA,EACL,gBAAgBI,EAAM,WAAW,EAJtC,QAAQ,OAAA,CAI8B,CAEnD"}
1
+ {"version":3,"file":"htmlParser.js","sources":["../../../../lib/widgets/htmlParser/htmlParser.ts"],"sourcesContent":["'use client'\n\nimport { BaseHTMLParser, type ParserOptions } from './baseHtmlParser'\n\nconst isBrowser = typeof window !== 'undefined'\n//\n// class BrowserHTMLParserError extends Error {\n// constructor(\n// message: string,\n// public originalError?: Error\n// ) {\n// super(message)\n// this.name = 'BrowserHTMLParserError'\n// }\n// }\n\nexport class HTMLParser extends BaseHTMLParser {\n constructor(options?: ParserOptions) {\n super(options)\n }\n\n async parseFromString(html: string): Promise<Document> {\n if (!isBrowser) {\n return Promise.reject()\n }\n\n const parser = new DOMParser()\n return parser.parseFromString(html, 'text/html')\n }\n}\n"],"names":["isBrowser","HTMLParser","BaseHTMLParser","options","html"],"mappings":"qDAIA,MAAMA,EAAY,OAAO,OAAW,IAY7B,MAAMC,UAAmBC,CAAe,CAC7C,YAAYC,EAAyB,CACnC,MAAMA,CAAO,CACf,CAEA,MAAM,gBAAgBC,EAAiC,CACrD,OAAKJ,EAIU,IAAI,UAAA,EACL,gBAAgBI,EAAM,WAAW,EAJtC,QAAQ,OAAA,CAKnB,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactHtmlParser.js","sources":["../../../../lib/widgets/htmlParser/reactHtmlParser.tsx"],"sourcesContent":["'use client'\n\nimport { createElement } from 'react'\nimport type { BaseHTMLParser, ParserOptions } from './baseHtmlParser'\nimport { HTMLParser } from './htmlParser'\n\nexport class ReactHTMLParser {\n private static readonly TEXT_NODE = 3 as const\n private static readonly ELEMENT_NODE = 1 as const\n\n /**\n * Функция для парсинга ноды в react элемент\n */\n private static parseNode(node: Node): React.ReactNode {\n // if node is text node\n if (node.nodeType === this.TEXT_NODE) {\n const content = node.textContent\n\n return content ?? null\n }\n // если node является элементом\n if (node.nodeType === this.ELEMENT_NODE) {\n const element = node as Element\n const tagName = element.tagName.toLowerCase()\n\n const attributes: Record<string, string | boolean | Record<string, string>> = {}\n // собираем атрибуты\n for (const attr of element.attributes) {\n let reactAttrName = attr.name\n let reactAttrValue: string | boolean | Record<string, string> = attr.value\n\n switch (attr.name) {\n case 'class':\n reactAttrName = 'className'\n break\n case 'for':\n reactAttrName = 'htmlFor'\n break\n case 'checked':\n case 'disabled':\n case 'selected':\n reactAttrValue = attr.value !== 'false'\n reactAttrValue = attr.value !== 'false'\n reactAttrValue = attr.value !== 'false'\n break\n case 'readonly':\n reactAttrName = 'readOnly'\n reactAttrValue = attr.value !== 'false'\n break\n case 'style':\n reactAttrName = 'style'\n const styles: Record<string, string> = {}\n attr.value.split(';').forEach((style) => {\n const [prop, value] = style.split(':')\n\n if (prop && value) {\n const camelProp = prop.trim().replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n\n styles[camelProp] = value.trim()\n }\n })\n\n reactAttrValue = styles\n break\n }\n\n attributes[reactAttrName] = reactAttrValue\n }\n\n attributes.key = Math.random().toString(36).substring(2, 9)\n\n const children: React.ReactNode[] = []\n // рекурсивно парсим все внутренние ноды\n for (const child of element.childNodes) {\n const childNode = this.parseNode(child as Node)\n\n if (childNode) {\n children.push(childNode)\n }\n }\n\n return createElement(tagName, attributes, ...children)\n }\n\n return null\n }\n\n /**\n * функция для преобразования html строки в react элементы\n */\n static async toReactNodes(html: string, options?: ParserOptions) {\n const parser: BaseHTMLParser = new HTMLParser(options)\n const { nodes } = await parser.parse(html, 'node')\n\n return nodes.map((node) => this.parseNode(node))\n }\n}\n"],"names":["ReactHTMLParser","node","element","tagName","attributes","attr","reactAttrName","reactAttrValue","styles","style","prop","value","camelProp","_","letter","children","child","childNode","createElement","html","options","parser","HTMLParser","nodes","__publicField"],"mappings":"uPAMO,MAAMA,CAAgB,CAO3B,OAAe,UAAUC,EAA6B,CAEpD,GAAIA,EAAK,WAAa,KAAK,UAGzB,OAFgBA,EAAK,aAEH,KAGpB,GAAIA,EAAK,WAAa,KAAK,aAAc,CACvC,MAAMC,EAAUD,EACVE,EAAUD,EAAQ,QAAQ,YAAA,EAE1BE,EAAwE,CAAA,EAE9E,UAAWC,KAAQH,EAAQ,WAAY,CACrC,IAAII,EAAgBD,EAAK,KACrBE,EAA4DF,EAAK,MAErE,OAAQA,EAAK,KAAA,CACX,IAAK,QACHC,EAAgB,YAChB,MACF,IAAK,MACHA,EAAgB,UAChB,MACF,IAAK,UACL,IAAK,WACL,IAAK,WACHC,EAAiBF,EAAK,QAAU,QAChCE,EAAiBF,EAAK,QAAU,QAChCE,EAAiBF,EAAK,QAAU,QAChC,MACF,IAAK,WACHC,EAAgB,WAChBC,EAAiBF,EAAK,QAAU,QAChC,MACF,IAAK,QACHC,EAAgB,QAChB,MAAME,EAAiC,CAAA,EACvCH,EAAK,MAAM,MAAM,GAAG,EAAE,QAASI,GAAU,CACvC,KAAM,CAACC,EAAMC,CAAK,EAAIF,EAAM,MAAM,GAAG,EAErC,GAAIC,GAAQC,EAAO,CACjB,MAAMC,EAAYF,EAAK,KAAA,EAAO,QAAQ,YAAa,CAACG,EAAGC,IAAWA,EAAO,YAAA,CAAa,EAEtFN,EAAOI,CAAS,EAAID,EAAM,KAAA,CAAK,CACjC,CACD,EAEDJ,EAAiBC,EACjB,KAAA,CAGJJ,EAAWE,CAAa,EAAIC,CAAA,CAG9BH,EAAW,IAAM,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,EAE1D,MAAMW,EAA8B,CAAA,EAEpC,UAAWC,KAASd,EAAQ,WAAY,CACtC,MAAMe,EAAY,KAAK,UAAUD,CAAa,EAE1CC,GACFF,EAAS,KAAKE,CAAS,CACzB,CAGF,OAAOC,EAAcf,EAASC,EAAY,GAAGW,CAAQ,CAAA,CAGvD,OAAO,IAAA,CAMT,aAAa,aAAaI,EAAcC,EAAyB,CAC/D,MAAMC,EAAyB,IAAIC,EAAWF,CAAO,EAC/C,CAAE,MAAAG,CAAA,EAAU,MAAMF,EAAO,MAAMF,EAAM,MAAM,EAEjD,OAAOI,EAAM,IAAKtB,GAAS,KAAK,UAAUA,CAAI,CAAC,CAAA,CAEnD,CAzFEuB,EADWxB,EACa,YAAY,GACpCwB,EAFWxB,EAEa,eAAe"}
1
+ {"version":3,"file":"reactHtmlParser.js","sources":["../../../../lib/widgets/htmlParser/reactHtmlParser.tsx"],"sourcesContent":["'use client'\n\nimport { createElement } from 'react'\nimport type { BaseHTMLParser, ParserOptions } from './baseHtmlParser'\nimport { HTMLParser } from './htmlParser'\n\nexport class ReactHTMLParser {\n private static readonly TEXT_NODE = 3 as const\n private static readonly ELEMENT_NODE = 1 as const\n\n /**\n * Функция для парсинга ноды в react элемент\n */\n private static parseNode(node: Node): React.ReactNode {\n // if node is text node\n if (node.nodeType === this.TEXT_NODE) {\n const content = node.textContent\n\n return content ?? null\n }\n // если node является элементом\n if (node.nodeType === this.ELEMENT_NODE) {\n const element = node as Element\n const tagName = element.tagName.toLowerCase()\n\n const attributes: Record<string, string | boolean | Record<string, string>> = {}\n // собираем атрибуты\n for (const attr of element.attributes) {\n let reactAttrName = attr.name\n let reactAttrValue: string | boolean | Record<string, string> = attr.value\n\n switch (attr.name) {\n case 'class':\n reactAttrName = 'className'\n break\n case 'for':\n reactAttrName = 'htmlFor'\n break\n case 'checked':\n case 'disabled':\n case 'selected':\n reactAttrValue = attr.value !== 'false'\n reactAttrValue = attr.value !== 'false'\n reactAttrValue = attr.value !== 'false'\n break\n case 'readonly':\n reactAttrName = 'readOnly'\n reactAttrValue = attr.value !== 'false'\n break\n case 'style':\n reactAttrName = 'style'\n const styles: Record<string, string> = {}\n attr.value.split(';').forEach((style) => {\n const [prop, value] = style.split(':')\n\n if (prop && value) {\n const camelProp = prop.trim().replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n\n styles[camelProp] = value.trim()\n }\n })\n\n reactAttrValue = styles\n break\n }\n\n attributes[reactAttrName] = reactAttrValue\n }\n\n attributes.key = Math.random().toString(36).substring(2, 9)\n\n const children: React.ReactNode[] = []\n // рекурсивно парсим все внутренние ноды\n for (const child of element.childNodes) {\n const childNode = this.parseNode(child as Node)\n\n if (childNode) {\n children.push(childNode)\n }\n }\n\n return createElement(tagName, attributes, ...children)\n }\n\n return null\n }\n\n /**\n * функция для преобразования html строки в react элементы\n */\n static async toReactNodes(html: string, options?: ParserOptions) {\n const parser: BaseHTMLParser = new HTMLParser(options)\n const { nodes } = await parser.parse(html, 'node')\n\n return nodes.map((node) => this.parseNode(node))\n }\n}\n"],"names":["ReactHTMLParser","node","element","tagName","attributes","attr","reactAttrName","reactAttrValue","styles","style","prop","value","camelProp","_","letter","children","child","childNode","createElement","html","options","parser","HTMLParser","nodes","__publicField"],"mappings":"uPAMO,MAAMA,CAAgB,CAO3B,OAAe,UAAUC,EAA6B,CAEpD,GAAIA,EAAK,WAAa,KAAK,UAGzB,OAFgBA,EAAK,aAEH,KAGpB,GAAIA,EAAK,WAAa,KAAK,aAAc,CACvC,MAAMC,EAAUD,EACVE,EAAUD,EAAQ,QAAQ,YAAA,EAE1BE,EAAwE,CAAA,EAE9E,UAAWC,KAAQH,EAAQ,WAAY,CACrC,IAAII,EAAgBD,EAAK,KACrBE,EAA4DF,EAAK,MAErE,OAAQA,EAAK,KAAA,CACX,IAAK,QACHC,EAAgB,YAChB,MACF,IAAK,MACHA,EAAgB,UAChB,MACF,IAAK,UACL,IAAK,WACL,IAAK,WACHC,EAAiBF,EAAK,QAAU,QAChCE,EAAiBF,EAAK,QAAU,QAChCE,EAAiBF,EAAK,QAAU,QAChC,MACF,IAAK,WACHC,EAAgB,WAChBC,EAAiBF,EAAK,QAAU,QAChC,MACF,IAAK,QACHC,EAAgB,QAChB,MAAME,EAAiC,CAAA,EACvCH,EAAK,MAAM,MAAM,GAAG,EAAE,QAASI,GAAU,CACvC,KAAM,CAACC,EAAMC,CAAK,EAAIF,EAAM,MAAM,GAAG,EAErC,GAAIC,GAAQC,EAAO,CACjB,MAAMC,EAAYF,EAAK,KAAA,EAAO,QAAQ,YAAa,CAACG,EAAGC,IAAWA,EAAO,YAAA,CAAa,EAEtFN,EAAOI,CAAS,EAAID,EAAM,KAAA,CAC5B,CACF,CAAC,EAEDJ,EAAiBC,EACjB,KAAA,CAGJJ,EAAWE,CAAa,EAAIC,CAC9B,CAEAH,EAAW,IAAM,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,EAE1D,MAAMW,EAA8B,CAAA,EAEpC,UAAWC,KAASd,EAAQ,WAAY,CACtC,MAAMe,EAAY,KAAK,UAAUD,CAAa,EAE1CC,GACFF,EAAS,KAAKE,CAAS,CAE3B,CAEA,OAAOC,EAAcf,EAASC,EAAY,GAAGW,CAAQ,CACvD,CAEA,OAAO,IACT,CAKA,aAAa,aAAaI,EAAcC,EAAyB,CAC/D,MAAMC,EAAyB,IAAIC,EAAWF,CAAO,EAC/C,CAAE,MAAAG,CAAA,EAAU,MAAMF,EAAO,MAAMF,EAAM,MAAM,EAEjD,OAAOI,EAAM,IAAKtB,GAAS,KAAK,UAAUA,CAAI,CAAC,CACjD,CACF,CAzFEuB,EADWxB,EACa,YAAY,GACpCwB,EAFWxB,EAEa,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoriesDesktop.js","sources":["../../../../../../lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.tsx"],"sourcesContent":["import { currentCategoryAction, rootCategoryAction, useCategoryReducer } from '../../hooks'\nimport type { Category, SeoHeaderHelpers } from '../../model'\nimport { CategoryTabs } from './CategoryTabs'\nimport { RootTab } from './rootTab'\nimport { Icon } from '$/shared/ui'\nimport { createPhoneNumber } from '$/shared/utils'\n\ntype DesktopCategoriesProps = {\n categories: Category[]\n helpers: SeoHeaderHelpers[]\n phone: string\n}\n\nexport const CategoriesDesktop = ({ categories, helpers, phone }: DesktopCategoriesProps) => {\n const [store, dispatch] = useCategoryReducer({ root: categories[0].children[0], current: categories[0].children[0] })\n\n return (\n <div className='mobile:hidden'>\n <div className='flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)] py-4'>\n <Icon name='brandLogos/logoMain' className='mr-auto w-[130px]' />\n {categories.map((category) => {\n const active = store.root.title === category.title\n\n return (\n <RootTab\n key={category.title}\n category={category}\n selectedCategory={store.current}\n onCurrentCategoryChange={(cat) => dispatch(currentCategoryAction(cat))}\n onRootCategoryChange={(cat) => dispatch(rootCategoryAction(cat))}\n active={active}\n />\n )\n })}\n <div className='h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500' />\n {helpers.map((helper) => (\n <a\n key={helper.title}\n href={helper.link.href}\n className='desk-body-regular-m flex items-center gap-x-1 text-color-blue-grey-600 duration-100 hover:text-color-dark'\n >\n {helper.link.icon && <Icon name={helper.link.icon} className='size-4' />}\n {helper.title}\n </a>\n ))}\n <div className='h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500' />\n <a\n href={`tel:${phone}`}\n className='desk-body-regular-m flex items-center gap-x-1 text-color-blue-grey-600 duration-100 hover:text-color-dark'\n >\n {createPhoneNumber(phone, 'x xxx xxx xx xx')}\n </a>\n </div>\n <CategoryTabs categories={store.current.children} />\n </div>\n )\n}\n"],"names":["CategoriesDesktop","categories","helpers","phone","store","dispatch","useCategoryReducer","jsxs","jsx","Icon","category","active","RootTab","cat","currentCategoryAction","rootCategoryAction","helper","createPhoneNumber","CategoryTabs"],"mappings":"ozEAaO,MAAMA,GAAoB,CAAC,CAAE,WAAAC,EAAY,QAAAC,EAAS,MAAAC,KAAoC,CAC3F,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAmB,CAAE,KAAML,EAAW,CAAC,EAAE,SAAS,CAAC,EAAG,QAASA,EAAW,CAAC,EAAE,SAAS,CAAC,EAAG,EAEpH,OACEM,EAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,8FACb,SAAA,CAAAC,EAACC,EAAA,CAAK,KAAK,sBAAsB,UAAU,oBAAoB,EAC9DR,EAAW,IAAKS,GAAa,CAC5B,MAAMC,EAASP,EAAM,KAAK,QAAUM,EAAS,MAE7C,OACEF,EAACI,EAAA,CAEC,SAAAF,EACA,iBAAkBN,EAAM,QACxB,wBAA0BS,GAAQR,EAASS,EAAsBD,CAAG,CAAC,EACrE,qBAAuBA,GAAQR,EAASU,EAAmBF,CAAG,CAAC,EAC/D,OAAAF,CAAA,EALKD,EAAS,KAAA,CAMhB,CAEH,EACDF,EAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EAChEN,EAAQ,IAAKc,GACZT,EAAC,IAAA,CAEC,KAAMS,EAAO,KAAK,KAClB,UAAU,4GAET,SAAA,CAAAA,EAAO,KAAK,MAAQR,EAACC,EAAA,CAAK,KAAMO,EAAO,KAAK,KAAM,UAAU,QAAA,CAAS,EACrEA,EAAO,KAAA,CAAA,EALHA,EAAO,KAAA,CAOf,EACDR,EAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EACjEA,EAAC,IAAA,CACC,KAAM,OAAOL,CAAK,GAClB,UAAU,4GAET,SAAAc,EAAkBd,EAAO,iBAAiB,CAAA,CAAA,CAC7C,EACF,EACAK,EAACU,EAAA,CAAa,WAAYd,EAAM,QAAQ,QAAA,CAAU,CAAA,EACpD,CAEJ"}
1
+ {"version":3,"file":"CategoriesDesktop.js","sources":["../../../../../../lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.tsx"],"sourcesContent":["import { currentCategoryAction, rootCategoryAction, useCategoryReducer } from '../../hooks'\nimport type { Category, SeoHeaderHelpers } from '../../model'\nimport { CategoryTabs } from './CategoryTabs'\nimport { RootTab } from './rootTab'\nimport { Icon } from '$/shared/ui'\nimport { createPhoneNumber } from '$/shared/utils'\n\ntype DesktopCategoriesProps = {\n categories: Category[]\n helpers: SeoHeaderHelpers[]\n phone: string\n}\n\nexport const CategoriesDesktop = ({ categories, helpers, phone }: DesktopCategoriesProps) => {\n const [store, dispatch] = useCategoryReducer({ root: categories[0].children[0], current: categories[0].children[0] })\n\n return (\n <div className='mobile:hidden'>\n <div className='flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)] py-4'>\n <Icon name='brandLogos/logoMain' className='mr-auto w-[130px]' />\n {categories.map((category) => {\n const active = store.root.title === category.title\n\n return (\n <RootTab\n key={category.title}\n category={category}\n selectedCategory={store.current}\n onCurrentCategoryChange={(cat) => dispatch(currentCategoryAction(cat))}\n onRootCategoryChange={(cat) => dispatch(rootCategoryAction(cat))}\n active={active}\n />\n )\n })}\n <div className='h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500' />\n {helpers.map((helper) => (\n <a\n key={helper.title}\n href={helper.link.href}\n className='desk-body-regular-m flex items-center gap-x-1 text-color-blue-grey-600 duration-100 hover:text-color-dark'\n >\n {helper.link.icon && <Icon name={helper.link.icon} className='size-4' />}\n {helper.title}\n </a>\n ))}\n <div className='h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500' />\n <a\n href={`tel:${phone}`}\n className='desk-body-regular-m flex items-center gap-x-1 text-color-blue-grey-600 duration-100 hover:text-color-dark'\n >\n {createPhoneNumber(phone, 'x xxx xxx xx xx')}\n </a>\n </div>\n <CategoryTabs categories={store.current.children} />\n </div>\n )\n}\n"],"names":["CategoriesDesktop","categories","helpers","phone","store","dispatch","useCategoryReducer","jsxs","jsx","Icon","category","active","RootTab","cat","currentCategoryAction","rootCategoryAction","helper","createPhoneNumber","CategoryTabs"],"mappings":"ozEAaO,MAAMA,GAAoB,CAAC,CAAE,WAAAC,EAAY,QAAAC,EAAS,MAAAC,KAAoC,CAC3F,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAmB,CAAE,KAAML,EAAW,CAAC,EAAE,SAAS,CAAC,EAAG,QAASA,EAAW,CAAC,EAAE,SAAS,CAAC,EAAG,EAEpH,OACEM,EAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,8FACb,SAAA,CAAAC,EAACC,EAAA,CAAK,KAAK,sBAAsB,UAAU,oBAAoB,EAC9DR,EAAW,IAAKS,GAAa,CAC5B,MAAMC,EAASP,EAAM,KAAK,QAAUM,EAAS,MAE7C,OACEF,EAACI,EAAA,CAEC,SAAAF,EACA,iBAAkBN,EAAM,QACxB,wBAA0BS,GAAQR,EAASS,EAAsBD,CAAG,CAAC,EACrE,qBAAuBA,GAAQR,EAASU,EAAmBF,CAAG,CAAC,EAC/D,OAAAF,CAAA,EALKD,EAAS,KAAA,CAQpB,CAAC,EACDF,EAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EAChEN,EAAQ,IAAKc,GACZT,EAAC,IAAA,CAEC,KAAMS,EAAO,KAAK,KAClB,UAAU,4GAET,SAAA,CAAAA,EAAO,KAAK,MAAQR,EAACC,EAAA,CAAK,KAAMO,EAAO,KAAK,KAAM,UAAU,QAAA,CAAS,EACrEA,EAAO,KAAA,CAAA,EALHA,EAAO,KAAA,CAOf,EACDR,EAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EACjEA,EAAC,IAAA,CACC,KAAM,OAAOL,CAAK,GAClB,UAAU,4GAET,SAAAc,EAAkBd,EAAO,iBAAiB,CAAA,CAAA,CAC7C,EACF,EACAK,EAACU,EAAA,CAAa,WAAYd,EAAM,QAAQ,QAAA,CAAU,CAAA,EACpD,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryTabs.js","sources":["../../../../../../lib/widgets/seoHeader/ui/desktop/CategoryTabs.tsx"],"sourcesContent":["import { memo, useCallback, useRef, useState } from 'react'\nimport { AnimatePresence } from 'framer-motion'\nimport type { Category } from '../../model'\nimport { Tab } from './tab'\n\ntype CategoryTabsProps = {\n categories: Category[]\n}\n\nconst InnerComponent = ({ categories }: CategoryTabsProps) => {\n const [activeTab, setActiveTab] = useState<string | null>(null)\n\n const onActiveTabChange = useCallback((active: string | null) => {\n setActiveTab(active)\n }, [])\n\n const triggerRef = useRef<HTMLDivElement>(null)\n\n return (\n <AnimatePresence mode='sync'>\n <div\n ref={triggerRef}\n id='tabs'\n className='relative flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)]'\n >\n {categories.map((category) => (\n <Tab\n key={category.title}\n ref={triggerRef}\n category={category}\n active={activeTab === category.title}\n onActiveTabChange={onActiveTabChange}\n />\n ))}\n <div className='ml-auto'>Личный кабинет</div>\n </div>\n </AnimatePresence>\n )\n}\n\nexport const CategoryTabs = memo(InnerComponent) as typeof InnerComponent\n"],"names":["InnerComponent","categories","activeTab","setActiveTab","useState","onActiveTabChange","useCallback","active","triggerRef","useRef","jsx","AnimatePresence","jsxs","category","Tab","CategoryTabs","memo"],"mappings":"qRASA,MAAMA,EAAiB,CAAC,CAAE,WAAAC,KAAoC,CAC5D,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAwB,IAAI,EAExDC,EAAoBC,EAAaC,GAA0B,CAC/DJ,EAAaI,CAAM,CAAA,EAClB,EAAE,EAECC,EAAaC,EAAuB,IAAI,EAE9C,OACEC,EAACC,EAAA,CAAgB,KAAK,OACpB,SAAAC,EAAC,MAAA,CACC,IAAKJ,EACL,GAAG,OACH,UAAU,kGAET,SAAA,CAAAP,EAAW,IAAKY,GACfH,EAACI,EAAA,CAEC,IAAKN,EACL,SAAAK,EACA,OAAQX,IAAcW,EAAS,MAC/B,kBAAAR,CAAA,EAJKQ,EAAS,KAAA,CAMjB,EACDH,EAAC,MAAA,CAAI,UAAU,UAAU,SAAA,gBAAA,CAAc,CAAA,CAAA,CAAA,EAE3C,CAEJ,EAEaK,EAAeC,EAAKhB,CAAc"}
1
+ {"version":3,"file":"CategoryTabs.js","sources":["../../../../../../lib/widgets/seoHeader/ui/desktop/CategoryTabs.tsx"],"sourcesContent":["import { memo, useCallback, useRef, useState } from 'react'\nimport { AnimatePresence } from 'framer-motion'\nimport type { Category } from '../../model'\nimport { Tab } from './tab'\n\ntype CategoryTabsProps = {\n categories: Category[]\n}\n\nconst InnerComponent = ({ categories }: CategoryTabsProps) => {\n const [activeTab, setActiveTab] = useState<string | null>(null)\n\n const onActiveTabChange = useCallback((active: string | null) => {\n setActiveTab(active)\n }, [])\n\n const triggerRef = useRef<HTMLDivElement>(null)\n\n return (\n <AnimatePresence mode='sync'>\n <div\n ref={triggerRef}\n id='tabs'\n className='relative flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)]'\n >\n {categories.map((category) => (\n <Tab\n key={category.title}\n ref={triggerRef}\n category={category}\n active={activeTab === category.title}\n onActiveTabChange={onActiveTabChange}\n />\n ))}\n <div className='ml-auto'>Личный кабинет</div>\n </div>\n </AnimatePresence>\n )\n}\n\nexport const CategoryTabs = memo(InnerComponent) as typeof InnerComponent\n"],"names":["InnerComponent","categories","activeTab","setActiveTab","useState","onActiveTabChange","useCallback","active","triggerRef","useRef","jsx","AnimatePresence","jsxs","category","Tab","CategoryTabs","memo"],"mappings":"qRASA,MAAMA,EAAiB,CAAC,CAAE,WAAAC,KAAoC,CAC5D,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAwB,IAAI,EAExDC,EAAoBC,EAAaC,GAA0B,CAC/DJ,EAAaI,CAAM,CACrB,EAAG,CAAA,CAAE,EAECC,EAAaC,EAAuB,IAAI,EAE9C,OACEC,EAACC,EAAA,CAAgB,KAAK,OACpB,SAAAC,EAAC,MAAA,CACC,IAAKJ,EACL,GAAG,OACH,UAAU,kGAET,SAAA,CAAAP,EAAW,IAAKY,GACfH,EAACI,EAAA,CAEC,IAAKN,EACL,SAAAK,EACA,OAAQX,IAAcW,EAAS,MAC/B,kBAAAR,CAAA,EAJKQ,EAAS,KAAA,CAMjB,EACDH,EAAC,MAAA,CAAI,UAAU,UAAU,SAAA,gBAAA,CAAc,CAAA,CAAA,CAAA,EAE3C,CAEJ,EAEaK,EAAeC,EAAKhB,CAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"RootTab.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.tsx"],"sourcesContent":["import type { Category } from '../../../model'\nimport { cn } from '$/shared/utils'\n\ntype RootTabProps = React.HTMLAttributes<HTMLDivElement> & {\n category: Category\n selectedCategory: Category\n onCurrentCategoryChange: (category: Category) => void\n onRootCategoryChange: (category: Category) => void\n active: boolean\n}\n\nexport const RootTab = ({\n category,\n selectedCategory,\n onCurrentCategoryChange,\n onRootCategoryChange,\n active,\n ...props\n}: RootTabProps) => {\n return (\n <div\n {...props}\n onClick={() => {\n onCurrentCategoryChange(category.children[0])\n onRootCategoryChange(category)\n }}\n className={cn('group/category relative cursor-default text-color-blue-grey-600 duration-100 hover:text-color-dark', {\n 'text-color-dark': active\n })}\n >\n <span className='desk-body-regular-m'>{category.title}</span>\n {category.children.length > 1 && (\n <div\n className={cn(\n 'absolute right-0 top-full z-10 flex w-max flex-col',\n 'invisible bg-color-white opacity-0 shadow-sm group-hover/category:visible group-hover/category:opacity-100',\n 'rounded-sm p-1'\n )}\n >\n {category.children.map((child) => (\n <span\n onClick={(event) => {\n event.stopPropagation()\n event.nativeEvent.stopPropagation()\n\n onRootCategoryChange(category)\n onCurrentCategoryChange(child)\n }}\n key={child.title}\n className={cn(\n 'desk-body-regular-l rounded-sm px-3 py-3.5 text-color-dark duration-100 hover:bg-color-primary-tr-hover hover:text-color-dark',\n {\n 'text-color-primary-default': selectedCategory.title === child.title\n }\n )}\n >\n {child.title}\n </span>\n ))}\n </div>\n )}\n </div>\n )\n}\n"],"names":["RootTab","category","selectedCategory","onCurrentCategoryChange","onRootCategoryChange","active","props","jsxs","cn","jsx","child","event"],"mappings":"yGAWO,MAAMA,EAAU,CAAC,CACtB,SAAAC,EACA,iBAAAC,EACA,wBAAAC,EACA,qBAAAC,EACA,OAAAC,EACA,GAAGC,CACL,IAEIC,EAAC,MAAA,CACE,GAAGD,EACJ,QAAS,IAAM,CACbH,EAAwBF,EAAS,SAAS,CAAC,CAAC,EAC5CG,EAAqBH,CAAQ,CAAA,EAE/B,UAAWO,EAAG,qGAAsG,CAClH,kBAAmBH,CAAA,CACpB,EAED,SAAA,CAAAI,EAAC,OAAA,CAAK,UAAU,sBAAuB,SAAAR,EAAS,MAAM,EACrDA,EAAS,SAAS,OAAS,GAC1BQ,EAAC,MAAA,CACC,UAAWD,EACT,qDACA,6GACA,gBAAA,EAGD,SAAAP,EAAS,SAAS,IAAKS,GACtBD,EAAC,OAAA,CACC,QAAUE,GAAU,CAClBA,EAAM,gBAAA,EACNA,EAAM,YAAY,gBAAA,EAElBP,EAAqBH,CAAQ,EAC7BE,EAAwBO,CAAK,CAAA,EAG/B,UAAWF,EACT,gIACA,CACE,6BAA8BN,EAAiB,QAAUQ,EAAM,KAAA,CACjE,EAGD,SAAAA,EAAM,KAAA,EARFA,EAAM,KAAA,CAUd,CAAA,CAAA,CACH,CAAA,CAAA"}
1
+ {"version":3,"file":"RootTab.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.tsx"],"sourcesContent":["import type { Category } from '../../../model'\nimport { cn } from '$/shared/utils'\n\ntype RootTabProps = React.HTMLAttributes<HTMLDivElement> & {\n category: Category\n selectedCategory: Category\n onCurrentCategoryChange: (category: Category) => void\n onRootCategoryChange: (category: Category) => void\n active: boolean\n}\n\nexport const RootTab = ({\n category,\n selectedCategory,\n onCurrentCategoryChange,\n onRootCategoryChange,\n active,\n ...props\n}: RootTabProps) => {\n return (\n <div\n {...props}\n onClick={() => {\n onCurrentCategoryChange(category.children[0])\n onRootCategoryChange(category)\n }}\n className={cn('group/category relative cursor-default text-color-blue-grey-600 duration-100 hover:text-color-dark', {\n 'text-color-dark': active\n })}\n >\n <span className='desk-body-regular-m'>{category.title}</span>\n {category.children.length > 1 && (\n <div\n className={cn(\n 'absolute right-0 top-full z-10 flex w-max flex-col',\n 'invisible bg-color-white opacity-0 shadow-sm group-hover/category:visible group-hover/category:opacity-100',\n 'rounded-sm p-1'\n )}\n >\n {category.children.map((child) => (\n <span\n onClick={(event) => {\n event.stopPropagation()\n event.nativeEvent.stopPropagation()\n\n onRootCategoryChange(category)\n onCurrentCategoryChange(child)\n }}\n key={child.title}\n className={cn(\n 'desk-body-regular-l rounded-sm px-3 py-3.5 text-color-dark duration-100 hover:bg-color-primary-tr-hover hover:text-color-dark',\n {\n 'text-color-primary-default': selectedCategory.title === child.title\n }\n )}\n >\n {child.title}\n </span>\n ))}\n </div>\n )}\n </div>\n )\n}\n"],"names":["RootTab","category","selectedCategory","onCurrentCategoryChange","onRootCategoryChange","active","props","jsxs","cn","jsx","child","event"],"mappings":"yGAWO,MAAMA,EAAU,CAAC,CACtB,SAAAC,EACA,iBAAAC,EACA,wBAAAC,EACA,qBAAAC,EACA,OAAAC,EACA,GAAGC,CACL,IAEIC,EAAC,MAAA,CACE,GAAGD,EACJ,QAAS,IAAM,CACbH,EAAwBF,EAAS,SAAS,CAAC,CAAC,EAC5CG,EAAqBH,CAAQ,CAC/B,EACA,UAAWO,EAAG,qGAAsG,CAClH,kBAAmBH,CAAA,CACpB,EAED,SAAA,CAAAI,EAAC,OAAA,CAAK,UAAU,sBAAuB,SAAAR,EAAS,MAAM,EACrDA,EAAS,SAAS,OAAS,GAC1BQ,EAAC,MAAA,CACC,UAAWD,EACT,qDACA,6GACA,gBAAA,EAGD,SAAAP,EAAS,SAAS,IAAKS,GACtBD,EAAC,OAAA,CACC,QAAUE,GAAU,CAClBA,EAAM,gBAAA,EACNA,EAAM,YAAY,gBAAA,EAElBP,EAAqBH,CAAQ,EAC7BE,EAAwBO,CAAK,CAC/B,EAEA,UAAWF,EACT,gIACA,CACE,6BAA8BN,EAAiB,QAAUQ,EAAM,KAAA,CACjE,EAGD,SAAAA,EAAM,KAAA,EARFA,EAAM,KAAA,CAUd,CAAA,CAAA,CACH,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabContent.js","sources":["../../../../../../../../../lib/widgets/seoHeader/ui/desktop/tab/ui/content/TabContent.tsx"],"sourcesContent":["import { createPortal } from 'react-dom'\nimport { motion } from 'framer-motion'\nimport type { Category } from '../../../../../model'\nimport { Icon } from '$/shared/ui'\n\ntype TabContentProps = React.ComponentProps<typeof motion.div> & {\n categories: Category[]\n}\n\nexport const TabContent = ({ categories, ...props }: TabContentProps) => {\n return createPortal(\n <motion.div\n {...props}\n layout\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.2 }}\n className='absolute z-20 w-full bg-color-white after:absolute after:left-1/2 after:top-[-1px] after:h-[1px] after:w-full after:max-w-[636px] after:-translate-x-1/2 after:bg-color-blue-grey-200 after:content-[\"\"] after:desktop:max-w-[1140px]'\n >\n <div className='mx-auto flex w-full max-w-[1140px] gap-x-[56px] py-10'>\n {categories.map((category) => {\n const CategoryTitle = category.link ? 'a' : 'p'\n\n return (\n <div key={category.title} className='flex flex-col gap-y-6'>\n {category.title && (\n <CategoryTitle\n href={category.link?.href ?? undefined}\n className='flex items-center gap-x-1 text-16 uppercase text-color-primary-default'\n >\n {category.title}\n\n <Icon name='arrows/arrowLink' className='size-6' />\n </CategoryTitle>\n )}\n <ul className='w-[328px]'>\n {category.children.map((child) => (\n <li key={child.title} className='w-full [&:not(:last-child)]:mb-4'>\n <a href={child.link?.href} target={child.link?.target} className='w-full text-16'>\n {child.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n })}\n </div>\n </motion.div>,\n /**\n * Нужно для preview, чтобы категории рендерились в iframe\n */\n document.body.querySelector<HTMLIFrameElement>('#modal-preview')?.contentDocument?.body ?? document.body\n )\n}\n"],"names":["TabContent","categories","props","createPortal","jsx","motion","category","CategoryTitle","jsxs","_a","Icon","child","_b"],"mappings":"8zEASO,MAAMA,EAAa,CAAC,CAAE,WAAAC,EAAY,GAAGC,KAA6B,SACvE,OAAOC,EACLC,EAACC,EAAO,IAAP,CACE,GAAGH,EACJ,OAAM,GACN,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,WAAY,CAAE,SAAU,EAAA,EACxB,UAAU,wOAEV,WAAC,MAAA,CAAI,UAAU,wDACZ,SAAAD,EAAW,IAAKK,GAAa,OAC5B,MAAMC,EAAgBD,EAAS,KAAO,IAAM,IAE5C,OACEE,EAAC,MAAA,CAAyB,UAAU,wBACjC,SAAA,CAAAF,EAAS,OACRE,EAACD,EAAA,CACC,OAAME,EAAAH,EAAS,OAAT,YAAAG,EAAe,OAAQ,OAC7B,UAAU,yEAET,SAAA,CAAAH,EAAS,MAEVF,EAACM,EAAA,CAAK,KAAK,mBAAmB,UAAU,QAAA,CAAS,CAAA,CAAA,CAAA,EAGrDN,EAAC,KAAA,CAAG,UAAU,YACX,SAAAE,EAAS,SAAS,IAAKK,GAAA,SACtB,OAAAP,EAAC,KAAA,CAAqB,UAAU,mCAC9B,SAAAA,EAAC,IAAA,CAAE,MAAMK,EAAAE,EAAM,OAAN,YAAAF,EAAY,KAAM,QAAQG,EAAAD,EAAM,OAAN,YAAAC,EAAY,OAAQ,UAAU,iBAC9D,SAAAD,EAAM,KAAA,CACT,CAAA,EAHOA,EAAM,KAIf,EACD,CAAA,CACH,CAAA,CAAA,EAnBQL,EAAS,KAoBnB,CAAA,CAEH,CAAA,CACH,CAAA,CAAA,IAKFM,GAAAH,EAAA,SAAS,KAAK,cAAiC,gBAAgB,IAA/D,YAAAA,EAAkE,kBAAlE,YAAAG,EAAmF,OAAQ,SAAS,IAAA,CAExG"}
1
+ {"version":3,"file":"TabContent.js","sources":["../../../../../../../../../lib/widgets/seoHeader/ui/desktop/tab/ui/content/TabContent.tsx"],"sourcesContent":["import { createPortal } from 'react-dom'\nimport { motion } from 'framer-motion'\nimport type { Category } from '../../../../../model'\nimport { Icon } from '$/shared/ui'\n\ntype TabContentProps = React.ComponentProps<typeof motion.div> & {\n categories: Category[]\n}\n\nexport const TabContent = ({ categories, ...props }: TabContentProps) => {\n return createPortal(\n <motion.div\n {...props}\n layout\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.2 }}\n className='absolute z-20 w-full bg-color-white after:absolute after:left-1/2 after:top-[-1px] after:h-[1px] after:w-full after:max-w-[636px] after:-translate-x-1/2 after:bg-color-blue-grey-200 after:content-[\"\"] after:desktop:max-w-[1140px]'\n >\n <div className='mx-auto flex w-full max-w-[1140px] gap-x-[56px] py-10'>\n {categories.map((category) => {\n const CategoryTitle = category.link ? 'a' : 'p'\n\n return (\n <div key={category.title} className='flex flex-col gap-y-6'>\n {category.title && (\n <CategoryTitle\n href={category.link?.href ?? undefined}\n className='flex items-center gap-x-1 text-16 uppercase text-color-primary-default'\n >\n {category.title}\n\n <Icon name='arrows/arrowLink' className='size-6' />\n </CategoryTitle>\n )}\n <ul className='w-[328px]'>\n {category.children.map((child) => (\n <li key={child.title} className='w-full [&:not(:last-child)]:mb-4'>\n <a href={child.link?.href} target={child.link?.target} className='w-full text-16'>\n {child.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n })}\n </div>\n </motion.div>,\n /**\n * Нужно для preview, чтобы категории рендерились в iframe\n */\n document.body.querySelector<HTMLIFrameElement>('#modal-preview')?.contentDocument?.body ?? document.body\n )\n}\n"],"names":["TabContent","categories","props","createPortal","jsx","motion","category","CategoryTitle","jsxs","_a","Icon","child","_b"],"mappings":"8zEASO,MAAMA,EAAa,CAAC,CAAE,WAAAC,EAAY,GAAGC,KAA6B,SACvE,OAAOC,EACLC,EAACC,EAAO,IAAP,CACE,GAAGH,EACJ,OAAM,GACN,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,WAAY,CAAE,SAAU,EAAA,EACxB,UAAU,wOAEV,WAAC,MAAA,CAAI,UAAU,wDACZ,SAAAD,EAAW,IAAKK,GAAa,OAC5B,MAAMC,EAAgBD,EAAS,KAAO,IAAM,IAE5C,OACEE,EAAC,MAAA,CAAyB,UAAU,wBACjC,SAAA,CAAAF,EAAS,OACRE,EAACD,EAAA,CACC,OAAME,EAAAH,EAAS,OAAT,YAAAG,EAAe,OAAQ,OAC7B,UAAU,yEAET,SAAA,CAAAH,EAAS,MAEVF,EAACM,EAAA,CAAK,KAAK,mBAAmB,UAAU,QAAA,CAAS,CAAA,CAAA,CAAA,EAGrDN,EAAC,KAAA,CAAG,UAAU,YACX,SAAAE,EAAS,SAAS,IAAKK,GAAA,SACtB,OAAAP,EAAC,KAAA,CAAqB,UAAU,mCAC9B,SAAAA,EAAC,IAAA,CAAE,MAAMK,EAAAE,EAAM,OAAN,YAAAF,EAAY,KAAM,QAAQG,EAAAD,EAAM,OAAN,YAAAC,EAAY,OAAQ,UAAU,iBAC9D,SAAAD,EAAM,KAAA,CACT,CAAA,EAHOA,EAAM,KAIf,EACD,CAAA,CACH,CAAA,CAAA,EAnBQL,EAAS,KAoBnB,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,IAKFM,GAAAH,EAAA,SAAS,KAAK,cAAiC,gBAAgB,IAA/D,YAAAA,EAAkE,kBAAlE,YAAAG,EAAmF,OAAQ,SAAS,IAAA,CAExG"}
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/mobile/menu/Menu.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { motion } from 'framer-motion'\nimport type { Category, SeoHeaderHelpers } from '../../../model'\nimport { MenuItem } from './MenuItem'\nimport { Icon, SelectBase, type SelectItemOption } from '$/shared/ui'\nimport { cn, createPhoneNumber, TypeGuards } from '$/shared/utils'\n\nexport type MenuProps = React.ComponentProps<typeof motion.div> & {\n categories: Category[]\n helpers: SeoHeaderHelpers[]\n phone: string\n}\n\nconst getSelectCategories = (categories: Category[]): SelectItemOption[] =>\n categories.map((category) => ({\n value: category.title ?? '',\n label: category.title ?? ''\n }))\n\nexport const Menu = ({ categories, helpers, phone, ...props }: MenuProps) => {\n const selectCategories = getSelectCategories(categories)\n\n const [selected, setSelected] = useState<SelectItemOption | SelectItemOption[] | undefined>(selectCategories[0])\n\n const onCategoryChange = (option?: SelectItemOption | SelectItemOption[]) => {\n if (TypeGuards.isUndefined(option) || TypeGuards.isArray(option)) return\n\n setSelected(option)\n }\n\n const selectedSubCategories = useMemo<Category[]>(() => {\n if (TypeGuards.isUndefined(selected) || TypeGuards.isArray(selected)) return []\n\n return categories.find((category) => category.title === selected.value)?.children ?? []\n }, [selected, categories])\n\n return (\n <motion.div\n {...props}\n className={cn(\n 'absolute z-10 w-full max-w-[calc(636px-32px)]',\n 'absolute left-1/2 top-full bg-color-white p-4',\n '-translate-x-1/2 overflow-x-hidden',\n 'flex flex-col items-center justify-center gap-y-4'\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n <SelectBase label='Категория' options={selectCategories} value={selected} onChange={onCategoryChange} />\n <div className='flex w-full flex-col items-center justify-center gap-y-1'>\n {selectedSubCategories.map((subCategory) => {\n if (TypeGuards.isArrayEmpty(subCategory.children)) {\n return (\n <div key={subCategory.title} className='w-full px-4 py-2.5'>\n <a href={subCategory.link?.href} className='desk-body-regular-m inline-block w-full'>\n {subCategory.title}\n </a>\n </div>\n )\n }\n\n return <MenuItem key={subCategory.title} category={subCategory} />\n })}\n </div>\n <div className='h-[1px] w-full bg-color-blue-grey-200' />\n <div className='flex w-full flex-col items-center justify-center gap-y-1'>\n {helpers.map((helper) => (\n <div key={helper.title} className='w-full px-4 py-2.5'>\n <a href={helper.link?.href} className='flex w-full items-center gap-x-1'>\n {helper.link?.icon && <Icon name={helper.link.icon} className='size-4' />}\n {helper.title}\n </a>\n </div>\n ))}\n <div className='w-full px-4 py-2.5'>\n <a href={`tel:${phone}`} className='flex w-full items-center gap-x-1'>\n <Icon name='communication/phone' className='size-4' />\n {createPhoneNumber(phone)}\n </a>\n </div>\n </div>\n </motion.div>\n )\n}\n"],"names":["getSelectCategories","categories","category","Menu","helpers","phone","props","selectCategories","selected","setSelected","useState","onCategoryChange","option","TypeGuards","selectedSubCategories","useMemo","_a","jsxs","motion","cn","jsx","SelectBase","subCategory","MenuItem","helper","_b","Icon","createPhoneNumber"],"mappings":"y5EAaA,MAAMA,EAAuBC,GAC3BA,EAAW,IAAKC,IAAc,CAC5B,MAAOA,EAAS,OAAS,GACzB,MAAOA,EAAS,OAAS,EAC3B,EAAE,EAESC,GAAO,CAAC,CAAE,WAAAF,EAAY,QAAAG,EAAS,MAAAC,EAAO,GAAGC,KAAuB,CAC3E,MAAMC,EAAmBP,EAAoBC,CAAU,EAEjD,CAACO,EAAUC,CAAW,EAAIC,EAA4DH,EAAiB,CAAC,CAAC,EAEzGI,EAAoBC,GAAmD,CACvEC,EAAW,YAAYD,CAAM,GAAKC,EAAW,QAAQD,CAAM,GAE/DH,EAAYG,CAAM,CAAA,EAGdE,EAAwBC,EAAoB,IAAM,OACtD,OAAIF,EAAW,YAAYL,CAAQ,GAAKK,EAAW,QAAQL,CAAQ,EAAU,CAAA,IAEtEQ,EAAAf,EAAW,KAAMC,GAAaA,EAAS,QAAUM,EAAS,KAAK,IAA/D,YAAAQ,EAAkE,WAAY,CAAA,CAAC,EACrF,CAACR,EAAUP,CAAU,CAAC,EAEzB,OACEgB,EAACC,EAAO,IAAP,CACE,GAAGZ,EACJ,UAAWa,EACT,gDACA,gDACA,qCACA,mDAAA,EAEF,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EAEpB,SAAA,CAAAC,EAACC,EAAA,CAAW,MAAM,YAAY,QAASd,EAAkB,MAAOC,EAAU,SAAUG,CAAA,CAAkB,IACrG,MAAA,CAAI,UAAU,2DACZ,SAAAG,EAAsB,IAAKQ,GAAgB,OAC1C,OAAIT,EAAW,aAAaS,EAAY,QAAQ,IAE3C,MAAA,CAA4B,UAAU,qBACrC,SAAAF,EAAC,KAAE,MAAMJ,EAAAM,EAAY,OAAZ,YAAAN,EAAkB,KAAM,UAAU,0CACxC,SAAAM,EAAY,MACf,CAAA,EAHQA,EAAY,KAItB,EAIGF,EAACG,EAAA,CAAiC,SAAUD,CAAA,EAA7BA,EAAY,KAA8B,CAAA,CACjE,EACH,EACAF,EAAC,MAAA,CAAI,UAAU,uCAAA,CAAwC,EACvDH,EAAC,MAAA,CAAI,UAAU,2DACZ,SAAA,CAAAb,EAAQ,IAAKoB,GAAA,SACZ,OAAAJ,EAAC,OAAuB,UAAU,qBAChC,SAAAH,EAAC,IAAA,CAAE,MAAMD,EAAAQ,EAAO,OAAP,YAAAR,EAAa,KAAM,UAAU,mCACnC,SAAA,GAAAS,EAAAD,EAAO,OAAP,YAAAC,EAAa,OAAQL,EAACM,EAAA,CAAK,KAAMF,EAAO,KAAK,KAAM,UAAU,QAAA,CAAS,EACtEA,EAAO,KAAA,CAAA,CACV,CAAA,EAJQA,EAAO,KAKjB,EACD,EACDJ,EAAC,MAAA,CAAI,UAAU,qBACb,SAAAH,EAAC,IAAA,CAAE,KAAM,OAAOZ,CAAK,GAAI,UAAU,mCACjC,SAAA,CAAAe,EAACM,EAAA,CAAK,KAAK,sBAAsB,UAAU,SAAS,EACnDC,EAAkBtB,CAAK,CAAA,CAAA,CAC1B,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAGN"}
1
+ {"version":3,"file":"Menu.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/mobile/menu/Menu.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { motion } from 'framer-motion'\nimport type { Category, SeoHeaderHelpers } from '../../../model'\nimport { MenuItem } from './MenuItem'\nimport { Icon, SelectBase, type SelectItemOption } from '$/shared/ui'\nimport { cn, createPhoneNumber, TypeGuards } from '$/shared/utils'\n\nexport type MenuProps = React.ComponentProps<typeof motion.div> & {\n categories: Category[]\n helpers: SeoHeaderHelpers[]\n phone: string\n}\n\nconst getSelectCategories = (categories: Category[]): SelectItemOption[] =>\n categories.map((category) => ({\n value: category.title ?? '',\n label: category.title ?? ''\n }))\n\nexport const Menu = ({ categories, helpers, phone, ...props }: MenuProps) => {\n const selectCategories = getSelectCategories(categories)\n\n const [selected, setSelected] = useState<SelectItemOption | SelectItemOption[] | undefined>(selectCategories[0])\n\n const onCategoryChange = (option?: SelectItemOption | SelectItemOption[]) => {\n if (TypeGuards.isUndefined(option) || TypeGuards.isArray(option)) return\n\n setSelected(option)\n }\n\n const selectedSubCategories = useMemo<Category[]>(() => {\n if (TypeGuards.isUndefined(selected) || TypeGuards.isArray(selected)) return []\n\n return categories.find((category) => category.title === selected.value)?.children ?? []\n }, [selected, categories])\n\n return (\n <motion.div\n {...props}\n className={cn(\n 'absolute z-10 w-full max-w-[calc(636px-32px)]',\n 'absolute left-1/2 top-full bg-color-white p-4',\n '-translate-x-1/2 overflow-x-hidden',\n 'flex flex-col items-center justify-center gap-y-4'\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n <SelectBase label='Категория' options={selectCategories} value={selected} onChange={onCategoryChange} />\n <div className='flex w-full flex-col items-center justify-center gap-y-1'>\n {selectedSubCategories.map((subCategory) => {\n if (TypeGuards.isArrayEmpty(subCategory.children)) {\n return (\n <div key={subCategory.title} className='w-full px-4 py-2.5'>\n <a href={subCategory.link?.href} className='desk-body-regular-m inline-block w-full'>\n {subCategory.title}\n </a>\n </div>\n )\n }\n\n return <MenuItem key={subCategory.title} category={subCategory} />\n })}\n </div>\n <div className='h-[1px] w-full bg-color-blue-grey-200' />\n <div className='flex w-full flex-col items-center justify-center gap-y-1'>\n {helpers.map((helper) => (\n <div key={helper.title} className='w-full px-4 py-2.5'>\n <a href={helper.link?.href} className='flex w-full items-center gap-x-1'>\n {helper.link?.icon && <Icon name={helper.link.icon} className='size-4' />}\n {helper.title}\n </a>\n </div>\n ))}\n <div className='w-full px-4 py-2.5'>\n <a href={`tel:${phone}`} className='flex w-full items-center gap-x-1'>\n <Icon name='communication/phone' className='size-4' />\n {createPhoneNumber(phone)}\n </a>\n </div>\n </div>\n </motion.div>\n )\n}\n"],"names":["getSelectCategories","categories","category","Menu","helpers","phone","props","selectCategories","selected","setSelected","useState","onCategoryChange","option","TypeGuards","selectedSubCategories","useMemo","_a","jsxs","motion","cn","jsx","SelectBase","subCategory","MenuItem","helper","_b","Icon","createPhoneNumber"],"mappings":"y5EAaA,MAAMA,EAAuBC,GAC3BA,EAAW,IAAKC,IAAc,CAC5B,MAAOA,EAAS,OAAS,GACzB,MAAOA,EAAS,OAAS,EAC3B,EAAE,EAESC,GAAO,CAAC,CAAE,WAAAF,EAAY,QAAAG,EAAS,MAAAC,EAAO,GAAGC,KAAuB,CAC3E,MAAMC,EAAmBP,EAAoBC,CAAU,EAEjD,CAACO,EAAUC,CAAW,EAAIC,EAA4DH,EAAiB,CAAC,CAAC,EAEzGI,EAAoBC,GAAmD,CACvEC,EAAW,YAAYD,CAAM,GAAKC,EAAW,QAAQD,CAAM,GAE/DH,EAAYG,CAAM,CACpB,EAEME,EAAwBC,EAAoB,IAAM,OACtD,OAAIF,EAAW,YAAYL,CAAQ,GAAKK,EAAW,QAAQL,CAAQ,EAAU,CAAA,IAEtEQ,EAAAf,EAAW,KAAMC,GAAaA,EAAS,QAAUM,EAAS,KAAK,IAA/D,YAAAQ,EAAkE,WAAY,CAAA,CACvF,EAAG,CAACR,EAAUP,CAAU,CAAC,EAEzB,OACEgB,EAACC,EAAO,IAAP,CACE,GAAGZ,EACJ,UAAWa,EACT,gDACA,gDACA,qCACA,mDAAA,EAEF,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EAEpB,SAAA,CAAAC,EAACC,EAAA,CAAW,MAAM,YAAY,QAASd,EAAkB,MAAOC,EAAU,SAAUG,CAAA,CAAkB,IACrG,MAAA,CAAI,UAAU,2DACZ,SAAAG,EAAsB,IAAKQ,GAAgB,OAC1C,OAAIT,EAAW,aAAaS,EAAY,QAAQ,IAE3C,MAAA,CAA4B,UAAU,qBACrC,SAAAF,EAAC,KAAE,MAAMJ,EAAAM,EAAY,OAAZ,YAAAN,EAAkB,KAAM,UAAU,0CACxC,SAAAM,EAAY,MACf,CAAA,EAHQA,EAAY,KAItB,EAIGF,EAACG,EAAA,CAAiC,SAAUD,CAAA,EAA7BA,EAAY,KAA8B,CAClE,CAAC,CAAA,CACH,EACAF,EAAC,MAAA,CAAI,UAAU,uCAAA,CAAwC,EACvDH,EAAC,MAAA,CAAI,UAAU,2DACZ,SAAA,CAAAb,EAAQ,IAAKoB,GAAA,SACZ,OAAAJ,EAAC,OAAuB,UAAU,qBAChC,SAAAH,EAAC,IAAA,CAAE,MAAMD,EAAAQ,EAAO,OAAP,YAAAR,EAAa,KAAM,UAAU,mCACnC,SAAA,GAAAS,EAAAD,EAAO,OAAP,YAAAC,EAAa,OAAQL,EAACM,EAAA,CAAK,KAAMF,EAAO,KAAK,KAAM,UAAU,QAAA,CAAS,EACtEA,EAAO,KAAA,CAAA,CACV,CAAA,EAJQA,EAAO,KAKjB,EACD,EACDJ,EAAC,MAAA,CAAI,UAAU,qBACb,SAAAH,EAAC,IAAA,CAAE,KAAM,OAAOZ,CAAK,GAAI,UAAU,mCACjC,SAAA,CAAAe,EAACM,EAAA,CAAK,KAAK,sBAAsB,UAAU,SAAS,EACnDC,EAAkBtB,CAAK,CAAA,CAAA,CAC1B,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAGN"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/mobile/menu/MenuItem.tsx"],"sourcesContent":["import { type Category } from '../../../model'\nimport { Accordion, Icon } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\ntype MenuItemProps = {\n category: Category\n}\n\nexport const MenuItem = ({ category }: MenuItemProps) => (\n <Accordion\n key={category.title}\n label={category.title ?? ''}\n icon={<Icon name='arrows/arrowRight' className='-rotate-90' />}\n classes={{\n root: 'w-full',\n header: {\n trigger: 'py-2 data-[open=false]:bg-color-white',\n label: 'desk-body-regular-m'\n },\n content: cn(\n 'relative',\n 'after:content-\"\" after:absolute after:w-[calc(100%-32px)]',\n 'after:bottom-0 after:left-1/2 after:-translate-x-1/2',\n 'after:h-[1px] after:bg-color-blue-grey-200'\n )\n }}\n >\n <div className='flex flex-col items-start justify-center gap-y-4'>\n {category.children.map((child) => {\n const isLink = Boolean(child.link)\n const Title = isLink ? 'a' : 'p'\n\n return (\n <ul key={child.title} className='w-full list-none p-0'>\n <Title\n href={isLink ? child.link?.href : undefined}\n className='mb-3 flex items-center gap-x-1 text-16 text-color-primary-default'\n >\n {child.title}\n <Icon name='arrows/arrowLink' />\n </Title>\n {child.children.map((innerChild) => (\n <li key={innerChild.title} className='inline-block w-full [&:not(:last-child)]:mb-3'>\n <a href={innerChild.link?.href} className='w-full'>\n {innerChild.title}\n </a>\n </li>\n ))}\n </ul>\n )\n })}\n </div>\n </Accordion>\n)\n"],"names":["MenuItem","category","jsx","Accordion","Icon","cn","child","isLink","jsxs","_a","innerChild"],"mappings":"mkEAQO,MAAMA,EAAW,CAAC,CAAE,SAAAC,CAAA,IACzBC,EAACC,EAAA,CAEC,MAAOF,EAAS,OAAS,GACzB,KAAMC,EAACE,EAAA,CAAK,KAAK,oBAAoB,UAAU,aAAa,EAC5D,QAAS,CACP,KAAM,SACN,OAAQ,CACN,QAAS,wCACT,MAAO,qBAAA,EAET,QAASC,EACP,WACA,4DACA,uDACA,4CAAA,CACF,EAGF,SAAAH,EAAC,OAAI,UAAU,mDACZ,WAAS,SAAS,IAAKI,GAAU,OAChC,MAAMC,EAAS,EAAQD,EAAM,KAG7B,OACEE,EAAC,KAAA,CAAqB,UAAU,uBAC9B,SAAA,CAAAA,EAJUD,EAAS,IAAM,IAIxB,CACC,KAAMA,GAASE,EAAAH,EAAM,OAAN,YAAAG,EAAY,KAAO,OAClC,UAAU,oEAET,SAAA,CAAAH,EAAM,MACPJ,EAACE,EAAA,CAAK,KAAK,kBAAA,CAAmB,CAAA,CAAA,CAAA,EAE/BE,EAAM,SAAS,IAAKI,UACnB,OAAAR,EAAC,KAAA,CAA0B,UAAU,gDACnC,SAAAA,EAAC,IAAA,CAAE,MAAMO,EAAAC,EAAW,OAAX,YAAAD,EAAiB,KAAM,UAAU,SACvC,WAAW,KAAA,CACd,GAHOC,EAAW,KAIpB,EACD,CAAA,CAAA,EAdMJ,EAAM,KAef,CAAA,CAEH,CAAA,CACH,CAAA,EAzCKL,EAAS,KA0ChB"}
1
+ {"version":3,"file":"MenuItem.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/mobile/menu/MenuItem.tsx"],"sourcesContent":["import { type Category } from '../../../model'\nimport { Accordion, Icon } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\ntype MenuItemProps = {\n category: Category\n}\n\nexport const MenuItem = ({ category }: MenuItemProps) => (\n <Accordion\n key={category.title}\n label={category.title ?? ''}\n icon={<Icon name='arrows/arrowRight' className='-rotate-90' />}\n classes={{\n root: 'w-full',\n header: {\n trigger: 'py-2 data-[open=false]:bg-color-white',\n label: 'desk-body-regular-m'\n },\n content: cn(\n 'relative',\n 'after:content-\"\" after:absolute after:w-[calc(100%-32px)]',\n 'after:bottom-0 after:left-1/2 after:-translate-x-1/2',\n 'after:h-[1px] after:bg-color-blue-grey-200'\n )\n }}\n >\n <div className='flex flex-col items-start justify-center gap-y-4'>\n {category.children.map((child) => {\n const isLink = Boolean(child.link)\n const Title = isLink ? 'a' : 'p'\n\n return (\n <ul key={child.title} className='w-full list-none p-0'>\n <Title\n href={isLink ? child.link?.href : undefined}\n className='mb-3 flex items-center gap-x-1 text-16 text-color-primary-default'\n >\n {child.title}\n <Icon name='arrows/arrowLink' />\n </Title>\n {child.children.map((innerChild) => (\n <li key={innerChild.title} className='inline-block w-full [&:not(:last-child)]:mb-3'>\n <a href={innerChild.link?.href} className='w-full'>\n {innerChild.title}\n </a>\n </li>\n ))}\n </ul>\n )\n })}\n </div>\n </Accordion>\n)\n"],"names":["MenuItem","category","jsx","Accordion","Icon","cn","child","isLink","jsxs","_a","innerChild"],"mappings":"mkEAQO,MAAMA,EAAW,CAAC,CAAE,SAAAC,CAAA,IACzBC,EAACC,EAAA,CAEC,MAAOF,EAAS,OAAS,GACzB,KAAMC,EAACE,EAAA,CAAK,KAAK,oBAAoB,UAAU,aAAa,EAC5D,QAAS,CACP,KAAM,SACN,OAAQ,CACN,QAAS,wCACT,MAAO,qBAAA,EAET,QAASC,EACP,WACA,4DACA,uDACA,4CAAA,CACF,EAGF,SAAAH,EAAC,OAAI,UAAU,mDACZ,WAAS,SAAS,IAAKI,GAAU,OAChC,MAAMC,EAAS,EAAQD,EAAM,KAG7B,OACEE,EAAC,KAAA,CAAqB,UAAU,uBAC9B,SAAA,CAAAA,EAJUD,EAAS,IAAM,IAIxB,CACC,KAAMA,GAASE,EAAAH,EAAM,OAAN,YAAAG,EAAY,KAAO,OAClC,UAAU,oEAET,SAAA,CAAAH,EAAM,MACPJ,EAACE,EAAA,CAAK,KAAK,kBAAA,CAAmB,CAAA,CAAA,CAAA,EAE/BE,EAAM,SAAS,IAAKI,UACnB,OAAAR,EAAC,KAAA,CAA0B,UAAU,gDACnC,SAAAA,EAAC,IAAA,CAAE,MAAMO,EAAAC,EAAW,OAAX,YAAAD,EAAiB,KAAM,UAAU,SACvC,WAAW,KAAA,CACd,GAHOC,EAAW,KAIpB,EACD,CAAA,CAAA,EAdMJ,EAAM,KAef,CAEJ,CAAC,CAAA,CACH,CAAA,EAzCKL,EAAS,KA0ChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRating.js","sources":["../../../../../../lib/widgets/userFeedback/model/hooks/useRating.ts"],"sourcesContent":["import { useState } from 'react'\nimport type { FormStepSetter } from '../types'\n\nexport type UseRatingReturn = {\n selectedRating: number\n hoveredRatings: number\n handleMouseEnter: (index: number) => void\n handleMouseLeave: () => void\n handleSelectRating: (index: number) => void\n}\n\nexport const useRating = (setFormStep: FormStepSetter): UseRatingReturn => {\n const [selectedRating, setSelectedRating] = useState(0)\n const [hoveredRatings, setHoveredRatings] = useState(0)\n\n const handleMouseEnter = (index: number) => {\n setHoveredRatings(index)\n }\n\n const handleMouseLeave = () => {\n setHoveredRatings(selectedRating)\n }\n\n const handleSelectRating = (index: number) => {\n setSelectedRating(index)\n setFormStep('review')\n }\n\n return {\n selectedRating,\n hoveredRatings,\n handleMouseEnter,\n handleMouseLeave,\n handleSelectRating\n }\n}\n"],"names":["useRating","setFormStep","selectedRating","setSelectedRating","useState","hoveredRatings","setHoveredRatings","index"],"mappings":"iCAWO,MAAMA,EAAaC,GAAiD,CACzE,KAAM,CAACC,EAAgBC,CAAiB,EAAIC,EAAS,CAAC,EAChD,CAACC,EAAgBC,CAAiB,EAAIF,EAAS,CAAC,EAetD,MAAO,CACL,eAAAF,EACA,eAAAG,EACA,iBAhBwBE,GAAkB,CAC1CD,EAAkBC,CAAK,CAAA,EAgBvB,iBAbuB,IAAM,CAC7BD,EAAkBJ,CAAc,CAAA,EAahC,mBAV0BK,GAAkB,CAC5CJ,EAAkBI,CAAK,EACvBN,EAAY,QAAQ,CAAA,CAQpB,CAEJ"}
1
+ {"version":3,"file":"useRating.js","sources":["../../../../../../lib/widgets/userFeedback/model/hooks/useRating.ts"],"sourcesContent":["import { useState } from 'react'\nimport type { FormStepSetter } from '../types'\n\nexport type UseRatingReturn = {\n selectedRating: number\n hoveredRatings: number\n handleMouseEnter: (index: number) => void\n handleMouseLeave: () => void\n handleSelectRating: (index: number) => void\n}\n\nexport const useRating = (setFormStep: FormStepSetter): UseRatingReturn => {\n const [selectedRating, setSelectedRating] = useState(0)\n const [hoveredRatings, setHoveredRatings] = useState(0)\n\n const handleMouseEnter = (index: number) => {\n setHoveredRatings(index)\n }\n\n const handleMouseLeave = () => {\n setHoveredRatings(selectedRating)\n }\n\n const handleSelectRating = (index: number) => {\n setSelectedRating(index)\n setFormStep('review')\n }\n\n return {\n selectedRating,\n hoveredRatings,\n handleMouseEnter,\n handleMouseLeave,\n handleSelectRating\n }\n}\n"],"names":["useRating","setFormStep","selectedRating","setSelectedRating","useState","hoveredRatings","setHoveredRatings","index"],"mappings":"iCAWO,MAAMA,EAAaC,GAAiD,CACzE,KAAM,CAACC,EAAgBC,CAAiB,EAAIC,EAAS,CAAC,EAChD,CAACC,EAAgBC,CAAiB,EAAIF,EAAS,CAAC,EAetD,MAAO,CACL,eAAAF,EACA,eAAAG,EACA,iBAhBwBE,GAAkB,CAC1CD,EAAkBC,CAAK,CACzB,EAeE,iBAbuB,IAAM,CAC7BD,EAAkBJ,CAAc,CAClC,EAYE,mBAV0BK,GAAkB,CAC5CJ,EAAkBI,CAAK,EACvBN,EAAY,QAAQ,CACtB,CAOE,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackTrigger.js","sources":["../../../../../lib/widgets/userFeedback/ui/FeedbackTrigger.tsx"],"sourcesContent":["import { memo, useEffect, useState } from 'react'\nimport { useObserverWidgets } from '$/shared/hooks'\nimport { Icon } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport const FeedbackTrigger = memo(() => {\n const isObserved = useObserverWidgets({ ids: ['banner'] })\n const [isVisible, setIsVisible] = useState(false)\n\n useEffect(() => {\n setIsVisible(false)\n const timer = setTimeout(() => {\n setIsVisible(true)\n }, 10000)\n\n return () => clearTimeout(timer)\n }, [])\n\n return (\n <div\n className={cn(\n 'invisible flex size-16 items-center justify-center rounded-full bg-color-secondary-default opacity-0 transition-all hover:bg-color-secondary-hover',\n { 'opacity-1 visible': isVisible && !isObserved }\n )}\n >\n <Icon name='general/heart' className='size-7 fill-transparent stroke-white stroke-[3px]' />\n </div>\n )\n})\n"],"names":["FeedbackTrigger","memo","isObserved","useObserverWidgets","isVisible","setIsVisible","useState","useEffect","timer","jsx","cn","Icon"],"mappings":"0/DAKO,MAAMA,EAAkBC,EAAK,IAAM,CACxC,MAAMC,EAAaC,EAAmB,CAAE,IAAK,CAAC,QAAQ,EAAG,EACnD,CAACC,EAAWC,CAAY,EAAIC,EAAS,EAAK,EAEhD,OAAAC,EAAU,IAAM,CACdF,EAAa,EAAK,EAClB,MAAMG,EAAQ,WAAW,IAAM,CAC7BH,EAAa,EAAI,CAAA,EAChB,GAAK,EAER,MAAO,IAAM,aAAaG,CAAK,CAAA,EAC9B,EAAE,EAGHC,EAAC,MAAA,CACC,UAAWC,EACT,qJACA,CAAE,oBAAqBN,GAAa,CAACF,CAAA,CAAW,EAGlD,SAAAO,EAACE,EAAA,CAAK,KAAK,gBAAgB,UAAU,mDAAA,CAAoD,CAAA,CAAA,CAG/F,CAAC"}
1
+ {"version":3,"file":"FeedbackTrigger.js","sources":["../../../../../lib/widgets/userFeedback/ui/FeedbackTrigger.tsx"],"sourcesContent":["import { memo, useEffect, useState } from 'react'\nimport { useObserverWidgets } from '$/shared/hooks'\nimport { Icon } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport const FeedbackTrigger = memo(() => {\n const isObserved = useObserverWidgets({ ids: ['banner'] })\n const [isVisible, setIsVisible] = useState(false)\n\n useEffect(() => {\n setIsVisible(false)\n const timer = setTimeout(() => {\n setIsVisible(true)\n }, 10000)\n\n return () => clearTimeout(timer)\n }, [])\n\n return (\n <div\n className={cn(\n 'invisible flex size-16 items-center justify-center rounded-full bg-color-secondary-default opacity-0 transition-all hover:bg-color-secondary-hover',\n { 'opacity-1 visible': isVisible && !isObserved }\n )}\n >\n <Icon name='general/heart' className='size-7 fill-transparent stroke-white stroke-[3px]' />\n </div>\n )\n})\n"],"names":["FeedbackTrigger","memo","isObserved","useObserverWidgets","isVisible","setIsVisible","useState","useEffect","timer","jsx","cn","Icon"],"mappings":"0/DAKO,MAAMA,EAAkBC,EAAK,IAAM,CACxC,MAAMC,EAAaC,EAAmB,CAAE,IAAK,CAAC,QAAQ,EAAG,EACnD,CAACC,EAAWC,CAAY,EAAIC,EAAS,EAAK,EAEhD,OAAAC,EAAU,IAAM,CACdF,EAAa,EAAK,EAClB,MAAMG,EAAQ,WAAW,IAAM,CAC7BH,EAAa,EAAI,CACnB,EAAG,GAAK,EAER,MAAO,IAAM,aAAaG,CAAK,CACjC,EAAG,CAAA,CAAE,EAGHC,EAAC,MAAA,CACC,UAAWC,EACT,qJACA,CAAE,oBAAqBN,GAAa,CAACF,CAAA,CAAW,EAGlD,SAAAO,EAACE,EAAA,CAAK,KAAK,gBAAgB,UAAU,mDAAA,CAAoD,CAAA,CAAA,CAG/F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserReview.js","sources":["../../../../../lib/widgets/userFeedback/ui/UserReview.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { type FormStepSetter, type SubmitCallback, type UserReviewSchema, userReviewSchema } from '../model'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, TextareaControl, type TextareaControlProps } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\n\nconst defaultTitle = 'Расскажите о впечатлениях'\nconst defaultSubtitle = (\n <>\n Вам нравится сайт банка? <br /> У вас есть предложения по его улучшению?\n </>\n)\n\nexport type UserReviewClasses = {\n form?: string\n textBlock?: string\n title?: string\n subtitle?: string\n textareaClasses?: TextareaControlProps['classes']\n button?: string\n}\n\nexport interface UserReviewProps {\n submitCallback: SubmitCallback\n setFormStep: FormStepSetter\n rating: number\n title?: string\n subtitle?: ReactNode\n classes?: UserReviewClasses\n}\n\nexport const UserReview = ({\n submitCallback,\n rating,\n setFormStep,\n title = defaultTitle,\n subtitle = defaultSubtitle,\n classes\n}: UserReviewProps) => {\n const { control, handleSubmit } = useControlledForm({\n mode: 'onBlur',\n schema: userReviewSchema,\n defaultValues: ZodUtils.getZodDefaults(userReviewSchema)\n })\n\n const onSubmit = async (values: UserReviewSchema) => {\n if (submitCallback) {\n await submitCallback({\n rating,\n pageUrl: window?.location?.href,\n ...values\n })\n setFormStep('finally')\n }\n }\n\n return (\n <form onSubmit={handleSubmit(onSubmit)} className={cn('flex flex-col gap-4', classes?.form)}>\n <div className={cn('flex flex-col gap-2 text-center', classes?.textBlock)}>\n <p className={cn('desk-body-medium-l', classes?.title)}>{title}</p>\n <p className={cn('desk-body-regular-l', classes?.subtitle)}>{subtitle}</p>\n </div>\n <TextareaControl control={control} name='review' label='Поделитесь вашим мнением' classes={classes?.textareaClasses} />\n <Button type='submit' size='sm' intent='negative' className={cn('w-full', classes?.button)}>\n Отправить\n </Button>\n </form>\n )\n}\n"],"names":["defaultTitle","defaultSubtitle","jsxs","Fragment","UserReview","submitCallback","rating","setFormStep","title","subtitle","classes","control","handleSubmit","useControlledForm","userReviewSchema","ZodUtils","values","_a","cn","jsx","TextareaControl","Button"],"mappings":"03EAOA,MAAMA,EAAe,4BACfC,EACJC,EAAAC,EAAA,CAAE,SAAA,CAAA,8BAC0B,KAAA,EAAG,EAAE,2CAAA,EACjC,EAqBWC,GAAa,CAAC,CACzB,eAAAC,EACA,OAAAC,EACA,YAAAC,EACA,MAAAC,EAAQR,EACR,SAAAS,EAAWR,EACX,QAAAS,CACF,IAAuB,CACrB,KAAM,CAAE,QAAAC,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,KAAM,SACN,OAAQC,EACR,cAAeC,EAAS,eAAeD,CAAgB,CAAA,CACxD,EAaD,OACEZ,EAAC,OAAA,CAAK,SAAUU,EAZD,MAAOI,GAA6B,OAC/CX,IACF,MAAMA,EAAe,CACnB,OAAAC,EACA,SAASW,EAAA,2BAAQ,WAAR,YAAAA,EAAkB,KAC3B,GAAGD,CAAA,CACJ,EACDT,EAAY,SAAS,EACvB,CAIqC,EAAG,UAAWW,EAAG,sBAAuBR,GAAA,YAAAA,EAAS,IAAI,EACxF,SAAA,CAAAR,EAAC,OAAI,UAAWgB,EAAG,kCAAmCR,GAAA,YAAAA,EAAS,SAAS,EACtE,SAAA,CAAAS,EAAC,KAAE,UAAWD,EAAG,qBAAsBR,GAAA,YAAAA,EAAS,KAAK,EAAI,SAAAF,EAAM,EAC/DW,EAAC,KAAE,UAAWD,EAAG,sBAAuBR,GAAA,YAAAA,EAAS,QAAQ,EAAI,SAAAD,CAAA,CAAS,CAAA,EACxE,EACAU,EAACC,GAAgB,QAAAT,EAAkB,KAAK,SAAS,MAAM,2BAA2B,QAASD,GAAA,YAAAA,EAAS,eAAA,CAAiB,EACrHS,EAACE,EAAA,CAAO,KAAK,SAAS,KAAK,KAAK,OAAO,WAAW,UAAWH,EAAG,SAAUR,GAAA,YAAAA,EAAS,MAAM,EAAG,SAAA,WAAA,CAE5F,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"UserReview.js","sources":["../../../../../lib/widgets/userFeedback/ui/UserReview.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { type FormStepSetter, type SubmitCallback, type UserReviewSchema, userReviewSchema } from '../model'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, TextareaControl, type TextareaControlProps } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\n\nconst defaultTitle = 'Расскажите о впечатлениях'\nconst defaultSubtitle = (\n <>\n Вам нравится сайт банка? <br /> У вас есть предложения по его улучшению?\n </>\n)\n\nexport type UserReviewClasses = {\n form?: string\n textBlock?: string\n title?: string\n subtitle?: string\n textareaClasses?: TextareaControlProps['classes']\n button?: string\n}\n\nexport interface UserReviewProps {\n submitCallback: SubmitCallback\n setFormStep: FormStepSetter\n rating: number\n title?: string\n subtitle?: ReactNode\n classes?: UserReviewClasses\n}\n\nexport const UserReview = ({\n submitCallback,\n rating,\n setFormStep,\n title = defaultTitle,\n subtitle = defaultSubtitle,\n classes\n}: UserReviewProps) => {\n const { control, handleSubmit } = useControlledForm({\n mode: 'onBlur',\n schema: userReviewSchema,\n defaultValues: ZodUtils.getZodDefaults(userReviewSchema)\n })\n\n const onSubmit = async (values: UserReviewSchema) => {\n if (submitCallback) {\n await submitCallback({\n rating,\n pageUrl: window?.location?.href,\n ...values\n })\n setFormStep('finally')\n }\n }\n\n return (\n <form onSubmit={handleSubmit(onSubmit)} className={cn('flex flex-col gap-4', classes?.form)}>\n <div className={cn('flex flex-col gap-2 text-center', classes?.textBlock)}>\n <p className={cn('desk-body-medium-l', classes?.title)}>{title}</p>\n <p className={cn('desk-body-regular-l', classes?.subtitle)}>{subtitle}</p>\n </div>\n <TextareaControl control={control} name='review' label='Поделитесь вашим мнением' classes={classes?.textareaClasses} />\n <Button type='submit' size='sm' intent='negative' className={cn('w-full', classes?.button)}>\n Отправить\n </Button>\n </form>\n )\n}\n"],"names":["defaultTitle","defaultSubtitle","jsxs","Fragment","UserReview","submitCallback","rating","setFormStep","title","subtitle","classes","control","handleSubmit","useControlledForm","userReviewSchema","ZodUtils","values","_a","cn","jsx","TextareaControl","Button"],"mappings":"03EAOA,MAAMA,EAAe,4BACfC,EACJC,EAAAC,EAAA,CAAE,SAAA,CAAA,8BAC0B,KAAA,EAAG,EAAE,2CAAA,EACjC,EAqBWC,GAAa,CAAC,CACzB,eAAAC,EACA,OAAAC,EACA,YAAAC,EACA,MAAAC,EAAQR,EACR,SAAAS,EAAWR,EACX,QAAAS,CACF,IAAuB,CACrB,KAAM,CAAE,QAAAC,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,KAAM,SACN,OAAQC,EACR,cAAeC,EAAS,eAAeD,CAAgB,CAAA,CACxD,EAaD,OACEZ,EAAC,OAAA,CAAK,SAAUU,EAZD,MAAOI,GAA6B,OAC/CX,IACF,MAAMA,EAAe,CACnB,OAAAC,EACA,SAASW,EAAA,2BAAQ,WAAR,YAAAA,EAAkB,KAC3B,GAAGD,CAAA,CACJ,EACDT,EAAY,SAAS,EAEzB,CAGuC,EAAG,UAAWW,EAAG,sBAAuBR,GAAA,YAAAA,EAAS,IAAI,EACxF,SAAA,CAAAR,EAAC,OAAI,UAAWgB,EAAG,kCAAmCR,GAAA,YAAAA,EAAS,SAAS,EACtE,SAAA,CAAAS,EAAC,KAAE,UAAWD,EAAG,qBAAsBR,GAAA,YAAAA,EAAS,KAAK,EAAI,SAAAF,EAAM,EAC/DW,EAAC,KAAE,UAAWD,EAAG,sBAAuBR,GAAA,YAAAA,EAAS,QAAQ,EAAI,SAAAD,CAAA,CAAS,CAAA,EACxE,EACAU,EAACC,GAAgB,QAAAT,EAAkB,KAAK,SAAS,MAAM,2BAA2B,QAASD,GAAA,YAAAA,EAAS,eAAA,CAAiB,EACrHS,EAACE,EAAA,CAAO,KAAK,SAAS,KAAK,KAAK,OAAO,WAAW,UAAWH,EAAG,SAAUR,GAAA,YAAAA,EAAS,MAAM,EAAG,SAAA,WAAA,CAE5F,CAAA,EACF,CAEJ"}