@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.
- package/README.md +1 -1
- package/dist/lib/configs/tailwindConfigBase.js.map +1 -1
- package/dist/lib/configs/tailwindPresets/resetPreset.js.map +1 -1
- package/dist/lib/next/utils/hasWidget.js.map +1 -1
- package/dist/lib/next/utils/hideWidgetsWithQueryParams.js.map +1 -1
- package/dist/lib/next/utils/orderWidgetWithQueryParams.js.map +1 -1
- package/dist/lib/shared/api/apiInstance.js.map +1 -1
- package/dist/lib/shared/hooks/useClickOutside.js.map +1 -1
- package/dist/lib/shared/hooks/useDebounce.js.map +1 -1
- package/dist/lib/shared/hooks/useDevice.js.map +1 -1
- package/dist/lib/shared/hooks/useFieldsProgress.js.map +1 -1
- package/dist/lib/shared/hooks/useFloating.js.map +1 -1
- package/dist/lib/shared/hooks/useObserverWidgets.js.map +1 -1
- package/dist/lib/shared/hooks/useOverflow.js.map +1 -1
- package/dist/lib/shared/ui/accordion/Accordion.js.map +1 -1
- package/dist/lib/shared/ui/calendar/Calendar.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/MonthCaption.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/Navigation.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/selectDate/SelectDate.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/selectDate/ui/SelectList.js.map +1 -1
- package/dist/lib/shared/ui/carousel/CarouselNative.js.map +1 -1
- package/dist/lib/shared/ui/carousel/model/hooks/useArrowNavigation.js.map +1 -1
- package/dist/lib/shared/ui/carousel/model/hooks/useCarousel.js.map +1 -1
- package/dist/lib/shared/ui/carousel/model/hooks/useDotsNavigation.js.map +1 -1
- package/dist/lib/shared/ui/carousel/ui/CarouselContent.js.map +1 -1
- package/dist/lib/shared/ui/dialog/Dialog.js.map +1 -1
- package/dist/lib/shared/ui/dropdownList/DropdownList.js.map +1 -1
- package/dist/lib/shared/ui/dropdownList/hooks/useKeyboardNavigation.js.map +1 -1
- package/dist/lib/shared/ui/dropdownList/ui/dropdownItem/DropdownItem.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/combobox/ComboboxControl.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/address/DadataAddress.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/address/DadataAddress.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/address/query.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/auto/DadataAuto.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/auto/DadataAuto.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/auto/query.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/country/DadataCountry.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/country/DadataCountry.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/country/query.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/fio/DadataFio.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/fio/DadataFio.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/fio/query.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/party/DadataOrganization.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dadata/party/query.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/model/utils.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/range.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/single.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/model/config.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/Editor.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/commands/setCustomLink.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/inputCurrency/InputCurrencyControl.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/inputCurrency/model/useInputCurrency.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/select/SelectControl.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/autocomplete/types.js +2 -0
- package/dist/lib/shared/ui/formElements/uncontrolled/autocomplete/types.js.map +1 -0
- package/dist/lib/shared/ui/formElements/uncontrolled/checkbox/Checkbox.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/combobox/combobox.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/dayPicker/DayPicker.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/index.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/input/Input.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/inputOtp/InputOtpBase.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItem.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/select/Select.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/select/hooks/useSelectController.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/select/ui/Chip.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/select/ui/SelectItem.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/model/useLogarithmic.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/Slider.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/hooks/useSliderAlgorithmic.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/SliderMarks.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/hooks/useSliderMarks.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/SliderStep.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/hooks/useSliderStep.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/switch/Switch.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/textarea/Textarea.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/UploaderBase.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/model/hooks/useUploader.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.js.map +1 -1
- package/dist/lib/shared/ui/modal/Modal.js.map +1 -1
- package/dist/lib/shared/ui/modal/ui/IframeModalContent.js.map +1 -1
- package/dist/lib/shared/ui/pagination/Pagination.js.map +1 -1
- package/dist/lib/shared/ui/providers/NotificationProvider.js.map +1 -1
- package/dist/lib/shared/ui/slot/Slot.js.map +1 -1
- package/dist/lib/shared/ui/slot/model/mergeProps.js.map +1 -1
- package/dist/lib/shared/ui/slot/ui/SlotClone.js.map +1 -1
- package/dist/lib/shared/ui/tabSwitcher/ui/TabContent.js.map +1 -1
- package/dist/lib/shared/ui/table/Mobile.js.map +1 -1
- package/dist/lib/shared/ui/table/model/TableUtils.js.map +1 -1
- package/dist/lib/shared/ui/table/ui/editableCell/EditableCell.js.map +1 -1
- package/dist/lib/shared/utils/localStorageActions.js.map +1 -1
- package/dist/lib/shared/utils/mergeRefs.js.map +1 -1
- package/dist/lib/shared/utils/scrollToElement.js.map +1 -1
- package/dist/lib/shared/utils/sessionStorage.js.map +1 -1
- package/dist/lib/shared/utils/typeGuards.js.map +1 -1
- package/dist/lib/shared/validation/base/base.constants.js.map +1 -1
- package/dist/lib/shared/validation/base/date.validators.js.map +1 -1
- package/dist/lib/shared/validation/base/phone.validators.js.map +1 -1
- package/dist/lib/shared/validation/base/select.validators.js.map +1 -1
- package/dist/lib/shared/validation/dadata/fio.validators.js.map +1 -1
- package/dist/lib/shared/validation/utils/zodUtils.js.map +1 -1
- package/dist/lib/widgets/breadcrumbs/Breadcrumb.js +1 -1
- package/dist/lib/widgets/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist/lib/widgets/breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/lib/widgets/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/lib/widgets/buttonWithHandlers/model/useButtonHandler.js.map +1 -1
- package/dist/lib/widgets/calculator/CalculatorView.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorFields/hooks/useAdditionalSlider.js.map +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js.map +1 -1
- package/dist/lib/widgets/dynamicFormDialog/DynamicFormDialog.js.map +1 -1
- package/dist/lib/widgets/fieldMapper/FieldMapper.js.map +1 -1
- package/dist/lib/widgets/footer/ui/Ligal.js.map +1 -1
- package/dist/lib/widgets/htmlParser/baseHtmlParser.js.map +1 -1
- package/dist/lib/widgets/htmlParser/htmlParser.js.map +1 -1
- package/dist/lib/widgets/htmlParser/reactHtmlParser.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/CategoryTabs.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/tab/ui/content/TabContent.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/mobile/menu/Menu.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/mobile/menu/MenuItem.js.map +1 -1
- package/dist/lib/widgets/userFeedback/model/hooks/useRating.js.map +1 -1
- package/dist/lib/widgets/userFeedback/ui/FeedbackTrigger.js.map +1 -1
- package/dist/lib/widgets/userFeedback/ui/UserReview.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/objectSpread2.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -1
- package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -1
- package/dist/node_modules/@date-fns/tz/date/index.js.map +1 -1
- package/dist/node_modules/@date-fns/tz/date/mini.js.map +1 -1
- package/dist/node_modules/@date-fns/tz/tzOffset/index.js.map +1 -1
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -1
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -1
- package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.js.map +1 -1
- package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js.map +1 -1
- package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -1
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/internal/floating.js.map +1 -1
- package/dist/node_modules/@headlessui/react/node_modules/@floating-ui/react/dist/floating-ui.react.js.map +1 -1
- package/dist/node_modules/@headlessui/react/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js.map +1 -1
- package/dist/node_modules/@radix-ui/primitive/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-collection/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-context/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-id/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-popover/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-popper/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-presence/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-radio-group/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-switch/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-tabs/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +1 -1
- package/dist/node_modules/@radix-ui/react-use-size/dist/index.js.map +1 -1
- package/dist/node_modules/@react-aria/focus/dist/useFocusRing.js.map +1 -1
- package/dist/node_modules/@react-aria/interactions/dist/useFocus.js.map +1 -1
- package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.js.map +1 -1
- package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.js.map +1 -1
- package/dist/node_modules/@react-aria/interactions/dist/useHover.js.map +1 -1
- package/dist/node_modules/@react-aria/interactions/dist/utils.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/DOMFunctions.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useLayoutEffect.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/focusManager.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/mutation.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/mutationCache.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/notifyManager.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/onlineManager.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/query.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/queryCache.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/queryClient.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/queryObserver.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/removable.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/retryer.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/subscribable.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/thenable.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/suspense.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
- package/dist/node_modules/@tanstack/react-table/build/lib/index.js.map +1 -1
- package/dist/node_modules/@tanstack/react-virtual/dist/esm/index.js.map +1 -1
- package/dist/node_modules/@tanstack/table-core/build/lib/index.js.map +1 -1
- package/dist/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -1
- package/dist/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -1
- package/dist/node_modules/@tiptap/core/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-bold/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-bullet-list/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-character-count/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-code/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-code-block/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-color/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-dropcursor/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-gapcursor/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-heading/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-history/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-italic/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-link/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-list-item/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-ordered-list/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-strike/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-text-style/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/extension-underline/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/react/dist/index.js.map +1 -1
- package/dist/node_modules/@tiptap/starter-kit/dist/index.js.map +1 -1
- package/dist/node_modules/aria-hidden/dist/es2015/index.js.map +1 -1
- package/dist/node_modules/class-variance-authority/dist/index.js.map +1 -1
- package/dist/node_modules/classnames/index.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/format/formatters.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/format/lightFormatters.js.map +1 -1
- package/dist/node_modules/date-fns/format.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/ru/_lib/formatRelative.js.map +1 -1
- package/dist/node_modules/date-fns/max.js.map +1 -1
- package/dist/node_modules/date-fns/min.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/Parser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/Setter.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/AMPMParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/DateParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/DayParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/EraParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/MinuteParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/MonthParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/QuarterParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/SecondParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/parsers/YearParser.js.map +1 -1
- package/dist/node_modules/date-fns/parse/_lib/utils.js.map +1 -1
- package/dist/node_modules/date-fns/parse.js.map +1 -1
- package/dist/node_modules/embla-carousel/esm/embla-carousel.esm.js.map +1 -1
- package/dist/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map +1 -1
- package/dist/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map +1 -1
- package/dist/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map +1 -1
- package/dist/node_modules/file-selector/dist/es2015/file-selector.js.map +1 -1
- package/dist/node_modules/file-selector/dist/es2015/file.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/generators/inertia.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/generators/spring/find.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/generators/spring/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/easing/utils/map.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/frameloop/batcher.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/frameloop/render-step.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/frameloop/sync-time.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/press.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/Feature.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/animation/mix-values.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/shared/stack.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/transform.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/VisualElement.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-factory.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-styles.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-transform.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/config-motion.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/animation-state.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/flat-tree.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/get-variant-context.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/motion-values.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/resolve-variants.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/setters.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/delay.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/hsla-to-rgba.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/interpolate.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/mix/complex.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/offsets/fill.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/subscription-manager.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/value/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/value/types/complex/filter.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/value/types/complex/index.js.map +1 -1
- package/dist/node_modules/linkifyjs/dist/linkify.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/controls/BaseGroup.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/controls/Group.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js.map +1 -1
- package/dist/node_modules/orderedmap/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-commands/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-dropcursor/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-gapcursor/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-history/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-keymap/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-model/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-schema-list/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-state/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-transform/dist/index.js.map +1 -1
- package/dist/node_modules/prosemirror-view/dist/index.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Handles/Handle.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Handles/index.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Marks/Mark.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Marks/index.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Slider.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Steps/index.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Tracks/Track.js.map +1 -1
- package/dist/node_modules/rc-slider/es/Tracks/index.js.map +1 -1
- package/dist/node_modules/rc-slider/es/hooks/useDrag.js.map +1 -1
- package/dist/node_modules/rc-slider/es/hooks/useOffset.js.map +1 -1
- package/dist/node_modules/rc-slider/es/hooks/useRange.js.map +1 -1
- package/dist/node_modules/rc-util/es/hooks/useEvent.js.map +1 -1
- package/dist/node_modules/rc-util/es/hooks/useLayoutEffect.js.map +1 -1
- package/dist/node_modules/rc-util/es/hooks/useMergedState.js.map +1 -1
- package/dist/node_modules/rc-util/es/hooks/useState.js.map +1 -1
- package/dist/node_modules/rc-util/es/isEqual.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/DayPicker.js +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/DayPicker.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/classes/DateLib.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/components/DayButton.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/components/Nav.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getDates.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getDays.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getMonths.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/selection/useMulti.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/selection/useRange.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/selection/useSingle.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/useAnimation.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/useCalendar.js +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/useCalendar.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/useFocus.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/utils/addToRange.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js.map +1 -1
- package/dist/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js.map +1 -1
- package/dist/node_modules/react-dropzone/dist/es/index.js.map +1 -1
- package/dist/node_modules/react-dropzone/dist/es/utils/index.js.map +1 -1
- package/dist/node_modules/react-hook-form/dist/index.esm.js +1 -1
- package/dist/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
- package/dist/node_modules/react-number-format/dist/react-number-format.es.js.map +1 -1
- package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js.map +1 -1
- package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -1
- package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js.map +1 -1
- package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js.map +1 -1
- package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js.map +1 -1
- package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js.map +1 -1
- package/dist/node_modules/react-style-singleton/dist/es2015/component.js.map +1 -1
- package/dist/node_modules/react-style-singleton/dist/es2015/hook.js.map +1 -1
- package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js.map +1 -1
- package/dist/node_modules/rope-sequence/dist/index.js.map +1 -1
- package/dist/node_modules/tailwindcss/lib/public/create-plugin.js.map +1 -1
- package/dist/node_modules/tailwindcss/lib/util/createPlugin.js.map +1 -1
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js.map +1 -1
- package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js.map +1 -1
- package/dist/node_modules/use-sidecar/dist/es2015/medium.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -1
- package/dist/node_modules/zod/v3/ZodError.js.map +1 -1
- package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -1
- package/dist/node_modules/zod/v3/helpers/util.js.map +1 -1
- package/dist/node_modules/zod/v3/types.js.map +1 -1
- package/dist/src/shared/utils/getDynamicSchema.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types/lib/shared/ui/formElements/controlled/dadata/address/DadataAddress.d.ts +2 -2
- package/dist/types/lib/shared/ui/formElements/controlled/dadata/auto/DadataAuto.d.ts +2 -2
- package/dist/types/lib/shared/ui/formElements/controlled/dadata/country/DadataCountry.d.ts +2 -2
- package/dist/types/lib/shared/ui/formElements/controlled/dadata/fio/DadataFio.d.ts +2 -2
- package/dist/types/lib/shared/ui/formElements/controlled/dadata/party/DadataOrganization.d.ts +2 -2
- package/dist/types/lib/shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.d.ts +3 -2
- package/dist/types/lib/shared/ui/formElements/uncontrolled/autocomplete/index.d.ts +1 -0
- package/dist/types/lib/shared/ui/formElements/uncontrolled/autocomplete/types.d.ts +4 -0
- package/dist/types/lib/shared/ui/formElements/uncontrolled/index.d.ts +1 -1
- package/dist/types/lib/widgets/breadcrumbs/Breadcrumb.d.ts +3 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploaderBase.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/uploader/UploaderBase.tsx"],"sourcesContent":["import { forwardRef, type InputHTMLAttributes } from 'react'\nimport { type DropzoneOptions } from 'react-dropzone'\nimport { defaultDropzoneOptions } from './model'\nimport { useUploader } from './model/hooks/useUploader'\nimport { UploaderFiles, type UploaderFilesClasses, UploaderInput, type UploaderInputClasses } from './ui'\nimport { cn } from '$/shared/utils'\n\ntype UploaderBaseClasses = {\n root?: string\n input?: UploaderInputClasses\n files?: UploaderFilesClasses\n}\n\nexport type ExternalHandlers = {\n onChange?: (files: File[]) => void\n onClick?: (event: React.MouseEvent<HTMLInputElement>) => void\n}\n\nexport interface UploaderBaseProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'placeholder' | 'value' | 'onChange'> {\n /**\n * Опции uploader-а, в нем можно валидировать файлы, указывать максимум и минимум для файлов\n * Подробнее можно узнать в типе DropzoneOptions\n */\n dropzoneOptions?: DropzoneOptions\n /**\n * Объект классов которые можно переопределить\n */\n classes?: UploaderBaseClasses\n /**\n * Доп текст под инпутом\n */\n helperText?: string\n /**\n * Сеттер значение\n * @param file - файлы\n */\n onChange?: (file: File[]) => void\n /**\n * Валидное ли значение\n */\n invalid?: boolean\n /**\n * Значение\n */\n value?: File[]\n /**\n * Внешние объект handlers\n */\n externalHandlers?: ExternalHandlers\n}\n\nexport const UploaderBase = forwardRef<HTMLInputElement, UploaderBaseProps>(\n (\n {\n classes,\n dropzoneOptions = defaultDropzoneOptions,\n name,\n value,\n disabled,\n invalid,\n onChange,\n externalHandlers,\n ...props\n }: UploaderBaseProps,\n ref\n ) => {\n const { filesStatus, removeFile, dropzoneState } = useUploader({\n controlledFiles: value,\n dropzoneOptions,\n onChange,\n externalHandlers\n })\n\n const { root, input, files } = classes || {}\n\n return (\n <>\n <div className={cn('relative mb-3 w-[476px]', root)}>\n <UploaderInput\n {...props}\n ref={ref}\n name={name}\n classes={input}\n disabled={disabled}\n invalid={invalid}\n dropzoneState={dropzoneState}\n externalHandlers={externalHandlers}\n />\n </div>\n <UploaderFiles files={value} removeFile={removeFile} classes={files} filesStatus={filesStatus} />\n </>\n )\n }\n)\n"],"names":["UploaderBase","forwardRef","classes","dropzoneOptions","defaultDropzoneOptions","name","value","disabled","invalid","onChange","externalHandlers","props","ref","filesStatus","removeFile","dropzoneState","useUploader","root","input","files","jsxs","Fragment","jsx","cn","UploaderInput","UploaderFiles"],"mappings":"03CAoDO,MAAMA,GAAeC,EAC1B,CACE,CACE,QAAAC,EACA,gBAAAC,EAAkBC,EAClB,KAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,YAAAC,EAAa,WAAAC,EAAY,cAAAC,CAAA,EAAkBC,EAAY,CAC7D,gBAAiBV,EACjB,gBAAAH,EACA,SAAAM,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,KAAAO,EAAM,MAAAC,EAAO,MAAAC,CAAA,EAAUjB,GAAW,CAAA,EAE1C,OACEkB,EAAAC,EAAA,CACE,SAAA,CAAAC,EAAC,MAAA,CAAI,UAAWC,EAAG,0BAA2BN,CAAI,EAChD,SAAAK,EAACE,EAAA,CACE,GAAGb,EACJ,IAAAC,EACA,KAAAP,EACA,QAASa,EACT,SAAAX,EACA,QAAAC,EACA,cAAAO,EACA,iBAAAL,CAAA,CAAA,EAEJ,IACCe,EAAA,CAAc,MAAOnB,EAAO,WAAAQ,EAAwB,QAASK,EAAO,YAAAN,CAAA,CAA0B,CAAA,EACjG,
|
|
1
|
+
{"version":3,"file":"UploaderBase.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/uploader/UploaderBase.tsx"],"sourcesContent":["import { forwardRef, type InputHTMLAttributes } from 'react'\nimport { type DropzoneOptions } from 'react-dropzone'\nimport { defaultDropzoneOptions } from './model'\nimport { useUploader } from './model/hooks/useUploader'\nimport { UploaderFiles, type UploaderFilesClasses, UploaderInput, type UploaderInputClasses } from './ui'\nimport { cn } from '$/shared/utils'\n\ntype UploaderBaseClasses = {\n root?: string\n input?: UploaderInputClasses\n files?: UploaderFilesClasses\n}\n\nexport type ExternalHandlers = {\n onChange?: (files: File[]) => void\n onClick?: (event: React.MouseEvent<HTMLInputElement>) => void\n}\n\nexport interface UploaderBaseProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'placeholder' | 'value' | 'onChange'> {\n /**\n * Опции uploader-а, в нем можно валидировать файлы, указывать максимум и минимум для файлов\n * Подробнее можно узнать в типе DropzoneOptions\n */\n dropzoneOptions?: DropzoneOptions\n /**\n * Объект классов которые можно переопределить\n */\n classes?: UploaderBaseClasses\n /**\n * Доп текст под инпутом\n */\n helperText?: string\n /**\n * Сеттер значение\n * @param file - файлы\n */\n onChange?: (file: File[]) => void\n /**\n * Валидное ли значение\n */\n invalid?: boolean\n /**\n * Значение\n */\n value?: File[]\n /**\n * Внешние объект handlers\n */\n externalHandlers?: ExternalHandlers\n}\n\nexport const UploaderBase = forwardRef<HTMLInputElement, UploaderBaseProps>(\n (\n {\n classes,\n dropzoneOptions = defaultDropzoneOptions,\n name,\n value,\n disabled,\n invalid,\n onChange,\n externalHandlers,\n ...props\n }: UploaderBaseProps,\n ref\n ) => {\n const { filesStatus, removeFile, dropzoneState } = useUploader({\n controlledFiles: value,\n dropzoneOptions,\n onChange,\n externalHandlers\n })\n\n const { root, input, files } = classes || {}\n\n return (\n <>\n <div className={cn('relative mb-3 w-[476px]', root)}>\n <UploaderInput\n {...props}\n ref={ref}\n name={name}\n classes={input}\n disabled={disabled}\n invalid={invalid}\n dropzoneState={dropzoneState}\n externalHandlers={externalHandlers}\n />\n </div>\n <UploaderFiles files={value} removeFile={removeFile} classes={files} filesStatus={filesStatus} />\n </>\n )\n }\n)\n"],"names":["UploaderBase","forwardRef","classes","dropzoneOptions","defaultDropzoneOptions","name","value","disabled","invalid","onChange","externalHandlers","props","ref","filesStatus","removeFile","dropzoneState","useUploader","root","input","files","jsxs","Fragment","jsx","cn","UploaderInput","UploaderFiles"],"mappings":"03CAoDO,MAAMA,GAAeC,EAC1B,CACE,CACE,QAAAC,EACA,gBAAAC,EAAkBC,EAClB,KAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,YAAAC,EAAa,WAAAC,EAAY,cAAAC,CAAA,EAAkBC,EAAY,CAC7D,gBAAiBV,EACjB,gBAAAH,EACA,SAAAM,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,KAAAO,EAAM,MAAAC,EAAO,MAAAC,CAAA,EAAUjB,GAAW,CAAA,EAE1C,OACEkB,EAAAC,EAAA,CACE,SAAA,CAAAC,EAAC,MAAA,CAAI,UAAWC,EAAG,0BAA2BN,CAAI,EAChD,SAAAK,EAACE,EAAA,CACE,GAAGb,EACJ,IAAAC,EACA,KAAAP,EACA,QAASa,EACT,SAAAX,EACA,QAAAC,EACA,cAAAO,EACA,iBAAAL,CAAA,CAAA,EAEJ,IACCe,EAAA,CAAc,MAAOnB,EAAO,WAAAQ,EAAwB,QAASK,EAAO,YAAAN,CAAA,CAA0B,CAAA,EACjG,CAEJ,CACF"}
|
package/dist/lib/shared/ui/formElements/uncontrolled/uploader/model/hooks/useUploader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUploader.js","sources":["../../../../../../../../../lib/shared/ui/formElements/uncontrolled/uploader/model/hooks/useUploader.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { type DropzoneOptions, type FileRejection, useDropzone } from 'react-dropzone'\nimport { type ExternalHandlers } from '../../UploaderBase'\nimport { bytesToMegabytes, FilesErrorCode } from '../helpers'\nimport { Notification } from '$/shared/ui/'\n\nexport type TUseUploader = {\n controlledFiles?: File[]\n dropzoneOptions: DropzoneOptions\n onChange?: (files: File[]) => void\n externalHandlers?: ExternalHandlers\n}\n\nexport const useUploader = ({ dropzoneOptions, controlledFiles = [], onChange, externalHandlers }: TUseUploader) => {\n const [filesStatus, setFilesStatus] = useState<Record<string, 'loading' | 'success' | 'error'>>({})\n\n const removeFile = (index: number) => {\n const updatedFiles = controlledFiles?.filter((_, idx) => idx !== index)\n if (onChange) onChange(updatedFiles)\n }\n\n const onDrop = (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n acceptedFiles.forEach((file) => {\n const reader = new FileReader()\n setFilesStatus((prev) => ({ ...prev, [file.name]: 'loading' }))\n\n reader.onload = () => {\n setFilesStatus((prev) => ({ ...prev, [file.name]: 'success' }))\n }\n\n reader.readAsArrayBuffer(file)\n })\n\n switch (rejectedFiles[0]?.errors[0]?.code) {\n case FilesErrorCode.FileInvalidType:\n Notification({\n intent: 'error',\n text: 'Неверный формат файла. Загрузите в формате jpg/png/pdf'\n })\n break\n case FilesErrorCode.FileTooLarge:\n Notification({\n intent: 'error',\n text: `Файл слишком большой. Максимальный размер ${dropzoneOptions.maxSize ? bytesToMegabytes(dropzoneOptions.maxSize) : 0} МБ`\n })\n break\n case FilesErrorCode.TooManyFiles:\n Notification({\n intent: 'error',\n text: `Вы загрузили слишком много файлов. Максимальное количество ${dropzoneOptions.maxFiles}`\n })\n break\n default:\n break\n }\n\n const updatedFiles = [...controlledFiles, ...acceptedFiles]\n\n if (onChange) onChange(updatedFiles)\n if (externalHandlers?.onChange) externalHandlers?.onChange(updatedFiles)\n }\n\n const dropzoneState = useDropzone({\n onDrop,\n ...dropzoneOptions\n })\n\n return { filesStatus, removeFile, dropzoneState }\n}\n"],"names":["useUploader","dropzoneOptions","controlledFiles","onChange","externalHandlers","filesStatus","setFilesStatus","useState","removeFile","index","updatedFiles","_","idx","dropzoneState","useDropzone","acceptedFiles","rejectedFiles","file","reader","prev","_b","_a","FilesErrorCode","Notification","bytesToMegabytes"],"mappings":"ggDAaO,MAAMA,GAAc,CAAC,CAAE,gBAAAC,EAAiB,gBAAAC,EAAkB,CAAA,EAAI,SAAAC,EAAU,iBAAAC,KAAqC,CAClH,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAA0D,CAAA,CAAE,EAE5FC,EAAcC,GAAkB,CACpC,MAAMC,EAAeR,GAAA,YAAAA,EAAiB,OAAO,CAACS,EAAGC,IAAQA,IAAQH,GAC7DN,KAAmBO,CAAY,
|
|
1
|
+
{"version":3,"file":"useUploader.js","sources":["../../../../../../../../../lib/shared/ui/formElements/uncontrolled/uploader/model/hooks/useUploader.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { type DropzoneOptions, type FileRejection, useDropzone } from 'react-dropzone'\nimport { type ExternalHandlers } from '../../UploaderBase'\nimport { bytesToMegabytes, FilesErrorCode } from '../helpers'\nimport { Notification } from '$/shared/ui/'\n\nexport type TUseUploader = {\n controlledFiles?: File[]\n dropzoneOptions: DropzoneOptions\n onChange?: (files: File[]) => void\n externalHandlers?: ExternalHandlers\n}\n\nexport const useUploader = ({ dropzoneOptions, controlledFiles = [], onChange, externalHandlers }: TUseUploader) => {\n const [filesStatus, setFilesStatus] = useState<Record<string, 'loading' | 'success' | 'error'>>({})\n\n const removeFile = (index: number) => {\n const updatedFiles = controlledFiles?.filter((_, idx) => idx !== index)\n if (onChange) onChange(updatedFiles)\n }\n\n const onDrop = (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n acceptedFiles.forEach((file) => {\n const reader = new FileReader()\n setFilesStatus((prev) => ({ ...prev, [file.name]: 'loading' }))\n\n reader.onload = () => {\n setFilesStatus((prev) => ({ ...prev, [file.name]: 'success' }))\n }\n\n reader.readAsArrayBuffer(file)\n })\n\n switch (rejectedFiles[0]?.errors[0]?.code) {\n case FilesErrorCode.FileInvalidType:\n Notification({\n intent: 'error',\n text: 'Неверный формат файла. Загрузите в формате jpg/png/pdf'\n })\n break\n case FilesErrorCode.FileTooLarge:\n Notification({\n intent: 'error',\n text: `Файл слишком большой. Максимальный размер ${dropzoneOptions.maxSize ? bytesToMegabytes(dropzoneOptions.maxSize) : 0} МБ`\n })\n break\n case FilesErrorCode.TooManyFiles:\n Notification({\n intent: 'error',\n text: `Вы загрузили слишком много файлов. Максимальное количество ${dropzoneOptions.maxFiles}`\n })\n break\n default:\n break\n }\n\n const updatedFiles = [...controlledFiles, ...acceptedFiles]\n\n if (onChange) onChange(updatedFiles)\n if (externalHandlers?.onChange) externalHandlers?.onChange(updatedFiles)\n }\n\n const dropzoneState = useDropzone({\n onDrop,\n ...dropzoneOptions\n })\n\n return { filesStatus, removeFile, dropzoneState }\n}\n"],"names":["useUploader","dropzoneOptions","controlledFiles","onChange","externalHandlers","filesStatus","setFilesStatus","useState","removeFile","index","updatedFiles","_","idx","dropzoneState","useDropzone","acceptedFiles","rejectedFiles","file","reader","prev","_b","_a","FilesErrorCode","Notification","bytesToMegabytes"],"mappings":"ggDAaO,MAAMA,GAAc,CAAC,CAAE,gBAAAC,EAAiB,gBAAAC,EAAkB,CAAA,EAAI,SAAAC,EAAU,iBAAAC,KAAqC,CAClH,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAA0D,CAAA,CAAE,EAE5FC,EAAcC,GAAkB,CACpC,MAAMC,EAAeR,GAAA,YAAAA,EAAiB,OAAO,CAACS,EAAGC,IAAQA,IAAQH,GAC7DN,KAAmBO,CAAY,CACrC,EA2CMG,EAAgBC,EAAY,CAChC,OA1Ca,CAACC,EAAuBC,IAAmC,SAYxE,OAXAD,EAAc,QAASE,GAAS,CAC9B,MAAMC,EAAS,IAAI,WACnBZ,EAAgBa,IAAU,CAAE,GAAGA,EAAM,CAACF,EAAK,IAAI,EAAG,SAAA,EAAY,EAE9DC,EAAO,OAAS,IAAM,CACpBZ,EAAgBa,IAAU,CAAE,GAAGA,EAAM,CAACF,EAAK,IAAI,EAAG,SAAA,EAAY,CAChE,EAEAC,EAAO,kBAAkBD,CAAI,CAC/B,CAAC,GAEOG,GAAAC,EAAAL,EAAc,CAAC,IAAf,YAAAK,EAAkB,OAAO,KAAzB,YAAAD,EAA6B,KAAA,CACnC,KAAKE,EAAe,gBAClBC,EAAa,CACX,OAAQ,QACR,KAAM,wDAAA,CACP,EACD,MACF,KAAKD,EAAe,aAClBC,EAAa,CACX,OAAQ,QACR,KAAM,6CAA6CtB,EAAgB,QAAUuB,EAAiBvB,EAAgB,OAAO,EAAI,CAAC,KAAA,CAC3H,EACD,MACF,KAAKqB,EAAe,aAClBC,EAAa,CACX,OAAQ,QACR,KAAM,8DAA8DtB,EAAgB,QAAQ,EAAA,CAC7F,EACD,KAEA,CAGJ,MAAMS,EAAe,CAAC,GAAGR,EAAiB,GAAGa,CAAa,EAEtDZ,KAAmBO,CAAY,EAC/BN,GAAA,MAAAA,EAAkB,WAAUA,GAAA,MAAAA,EAAkB,SAASM,GAC7D,EAIE,GAAGT,CAAA,CACJ,EAED,MAAO,CAAE,YAAAI,EAAa,WAAAG,EAAY,cAAAK,CAAA,CACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploaderInput.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.tsx"],"sourcesContent":["import { forwardRef, type Ref } from 'react'\nimport { type DropzoneRootProps } from 'react-dropzone'\nimport { type ExternalHandlers } from '../UploaderBase'\nimport { Icon } from '$/shared/ui/icon'\nimport { cn } from '$/shared/utils'\n\nexport type UploaderInputClasses = {\n root?: string\n input?: string\n textContainer?: string\n icon?: string\n textContent?: string\n textContentSpan?: string\n}\n\nexport interface UploaderInputProps {\n dropzoneState: DropzoneRootProps\n disabled?: boolean\n invalid?: boolean\n classes?: UploaderInputClasses\n name?: string\n externalHandlers?: ExternalHandlers\n}\n\nexport const UploaderInput = forwardRef(\n (\n { dropzoneState, classes, disabled, invalid, name, externalHandlers, ...props }: UploaderInputProps,\n ref: Ref<HTMLDivElement>\n ) => {\n const dropzoneProps = dropzoneState.getRootProps()\n return (\n <div\n className={cn(\n 'flex h-[64px] w-[476px] rounded-sm',\n 'active:border-1 active:border-solid active:border-primary-hover active:bg-color-primary-tr-pressed',\n 'focus-visible:border-1 focus-visible:border-solid focus-visible:border-primary-hover focus-visible:bg-color-primary-tr-hover focus-visible:outline-none',\n 'hover:border-1 hover:border-solid hover:border-primary-hover hover:bg-color-primary-tr-hover',\n 'border-[1.5px] border-dashed border-blue-grey-700',\n classes?.root,\n { 'bg-color-primary-light-default opacity-50': disabled },\n { 'border-negative': invalid }\n )}\n ref={ref}\n {...dropzoneProps}\n >\n <div className={cn('flex h-full w-full items-center justify-center gap-2', classes?.textContainer)}>\n <Icon name='files/upload' className={cn('text-icon-primary-default', classes?.icon)} />\n <p className={cn('desk-body-regular-l select-none text-icon-primary-default', classes?.textContent)}>\n Выберите файл\n <span className={cn('text-icon-blue-grey-600', classes?.textContentSpan)}> или перетащите сюда</span>\n </p>\n </div>\n <input\n {...props}\n {...dropzoneState.getInputProps()}\n onClick={externalHandlers?.onClick}\n name={name}\n ref={dropzoneState.inputRef}\n disabled={disabled}\n className={cn(classes?.input)}\n data-test-id='uploader'\n />\n </div>\n )\n }\n)\n"],"names":["UploaderInput","forwardRef","dropzoneState","classes","disabled","invalid","name","externalHandlers","props","ref","dropzoneProps","jsxs","cn","jsx","Icon"],"mappings":"qLAwBO,MAAMA,EAAgBC,EAC3B,CACE,CAAE,cAAAC,EAAe,QAAAC,EAAS,SAAAC,EAAU,QAAAC,EAAS,KAAAC,EAAM,iBAAAC,EAAkB,GAAGC,CAAA,EACxEC,IACG,CACH,MAAMC,EAAgBR,EAAc,aAAA,EACpC,OACES,EAAC,MAAA,CACC,UAAWC,EACT,qCACA,qGACA,0JACA,+FACA,oDACAT,GAAA,YAAAA,EAAS,KACT,CAAE,4CAA6CC,CAAA,EAC/C,CAAE,kBAAmBC,CAAA,CAAQ,EAE/B,IAAAI,EACC,GAAGC,EAEJ,SAAA,CAAAC,EAAC,OAAI,UAAWC,EAAG,uDAAwDT,GAAA,YAAAA,EAAS,aAAa,EAC/F,SAAA,CAAAU,EAACC,EAAA,CAAK,KAAK,eAAe,UAAWF,EAAG,4BAA6BT,GAAA,YAAAA,EAAS,IAAI,EAAG,IACpF,IAAA,CAAE,UAAWS,EAAG,4DAA6DT,GAAA,YAAAA,EAAS,WAAW,EAAG,SAAA,CAAA,gBAEnGU,EAAC,QAAK,UAAWD,EAAG,0BAA2BT,GAAA,YAAAA,EAAS,eAAe,EAAG,SAAA,sBAAA,CAAoB,CAAA,CAAA,CAChG,CAAA,EACF,EACAU,EAAC,QAAA,CACE,GAAGL,EACH,GAAGN,EAAc,cAAA,EAClB,QAASK,GAAA,YAAAA,EAAkB,QAC3B,KAAAD,EACA,IAAKJ,EAAc,SACnB,SAAAE,EACA,UAAWQ,EAAGT,GAAA,YAAAA,EAAS,KAAK,EAC5B,eAAa,UAAA,CAAA,CACf,CAAA,CAAA,CACF
|
|
1
|
+
{"version":3,"file":"UploaderInput.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.tsx"],"sourcesContent":["import { forwardRef, type Ref } from 'react'\nimport { type DropzoneRootProps } from 'react-dropzone'\nimport { type ExternalHandlers } from '../UploaderBase'\nimport { Icon } from '$/shared/ui/icon'\nimport { cn } from '$/shared/utils'\n\nexport type UploaderInputClasses = {\n root?: string\n input?: string\n textContainer?: string\n icon?: string\n textContent?: string\n textContentSpan?: string\n}\n\nexport interface UploaderInputProps {\n dropzoneState: DropzoneRootProps\n disabled?: boolean\n invalid?: boolean\n classes?: UploaderInputClasses\n name?: string\n externalHandlers?: ExternalHandlers\n}\n\nexport const UploaderInput = forwardRef(\n (\n { dropzoneState, classes, disabled, invalid, name, externalHandlers, ...props }: UploaderInputProps,\n ref: Ref<HTMLDivElement>\n ) => {\n const dropzoneProps = dropzoneState.getRootProps()\n return (\n <div\n className={cn(\n 'flex h-[64px] w-[476px] rounded-sm',\n 'active:border-1 active:border-solid active:border-primary-hover active:bg-color-primary-tr-pressed',\n 'focus-visible:border-1 focus-visible:border-solid focus-visible:border-primary-hover focus-visible:bg-color-primary-tr-hover focus-visible:outline-none',\n 'hover:border-1 hover:border-solid hover:border-primary-hover hover:bg-color-primary-tr-hover',\n 'border-[1.5px] border-dashed border-blue-grey-700',\n classes?.root,\n { 'bg-color-primary-light-default opacity-50': disabled },\n { 'border-negative': invalid }\n )}\n ref={ref}\n {...dropzoneProps}\n >\n <div className={cn('flex h-full w-full items-center justify-center gap-2', classes?.textContainer)}>\n <Icon name='files/upload' className={cn('text-icon-primary-default', classes?.icon)} />\n <p className={cn('desk-body-regular-l select-none text-icon-primary-default', classes?.textContent)}>\n Выберите файл\n <span className={cn('text-icon-blue-grey-600', classes?.textContentSpan)}> или перетащите сюда</span>\n </p>\n </div>\n <input\n {...props}\n {...dropzoneState.getInputProps()}\n onClick={externalHandlers?.onClick}\n name={name}\n ref={dropzoneState.inputRef}\n disabled={disabled}\n className={cn(classes?.input)}\n data-test-id='uploader'\n />\n </div>\n )\n }\n)\n"],"names":["UploaderInput","forwardRef","dropzoneState","classes","disabled","invalid","name","externalHandlers","props","ref","dropzoneProps","jsxs","cn","jsx","Icon"],"mappings":"qLAwBO,MAAMA,EAAgBC,EAC3B,CACE,CAAE,cAAAC,EAAe,QAAAC,EAAS,SAAAC,EAAU,QAAAC,EAAS,KAAAC,EAAM,iBAAAC,EAAkB,GAAGC,CAAA,EACxEC,IACG,CACH,MAAMC,EAAgBR,EAAc,aAAA,EACpC,OACES,EAAC,MAAA,CACC,UAAWC,EACT,qCACA,qGACA,0JACA,+FACA,oDACAT,GAAA,YAAAA,EAAS,KACT,CAAE,4CAA6CC,CAAA,EAC/C,CAAE,kBAAmBC,CAAA,CAAQ,EAE/B,IAAAI,EACC,GAAGC,EAEJ,SAAA,CAAAC,EAAC,OAAI,UAAWC,EAAG,uDAAwDT,GAAA,YAAAA,EAAS,aAAa,EAC/F,SAAA,CAAAU,EAACC,EAAA,CAAK,KAAK,eAAe,UAAWF,EAAG,4BAA6BT,GAAA,YAAAA,EAAS,IAAI,EAAG,IACpF,IAAA,CAAE,UAAWS,EAAG,4DAA6DT,GAAA,YAAAA,EAAS,WAAW,EAAG,SAAA,CAAA,gBAEnGU,EAAC,QAAK,UAAWD,EAAG,0BAA2BT,GAAA,YAAAA,EAAS,eAAe,EAAG,SAAA,sBAAA,CAAoB,CAAA,CAAA,CAChG,CAAA,EACF,EACAU,EAAC,QAAA,CACE,GAAGL,EACH,GAAGN,EAAc,cAAA,EAClB,QAASK,GAAA,YAAAA,EAAkB,QAC3B,KAAAD,EACA,IAAKJ,EAAc,SACnB,SAAAE,EACA,UAAWQ,EAAGT,GAAA,YAAAA,EAAS,KAAK,EAC5B,eAAa,UAAA,CAAA,CACf,CAAA,CAAA,CAGN,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../../../lib/shared/ui/modal/Modal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { modalContentAnimation, modalOverlayAnimation } from './model/helpers'\nimport { IframeModalContent } from './ui/IframeModalContent'\nimport { ModalHeader, type TModalHeaderClasses } from './ui/ModalHeader'\nimport { cn } from '$/shared/utils'\n\ntype ModalClasses = {\n overlay?: string\n modal?: string\n content?: string\n modalHeader?: TModalHeaderClasses\n}\n\nexport interface ModalProps {\n children: React.ReactElement\n isModalOpen: boolean\n classes?: ModalClasses\n isPortal?: boolean\n portalContainer?: HTMLElement\n title?: string | React.ReactElement\n closeModal: () => void\n iframe?: boolean\n}\n\nexport const Modal = ({\n title,\n children,\n isModalOpen,\n isPortal = true,\n portalContainer = globalThis?.document?.body,\n closeModal,\n classes,\n iframe\n}: ModalProps) => {\n if (isModalOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = 'visible'\n }\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const modalBody = (\n <AnimatePresence>\n {isModalOpen && (\n <motion.div\n tabIndex={-1}\n onClick={closeModal}\n className={cn(\n 'fixed inset-0 flex h-screen w-screen items-center justify-center bg-color-overlay',\n { 'z-1000': !isPortal },\n classes?.overlay\n )}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeModal()\n }\n }}\n data-test-id='modal-overlay'\n {...modalOverlayAnimation}\n >\n <motion.div\n onClick={(event) => event.stopPropagation()}\n className={cn(\n 'w-full max-w-[600px] rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8',\n classes?.modal\n )}\n data-test-id='modal'\n {...modalContentAnimation}\n >\n <ModalHeader title={title} closeModal={closeModal} classes={classes?.modalHeader} />\n {iframe ? (\n <IframeModalContent ref={iframeRef} className={cn('mt-4', classes?.content)}>\n {(iframeBody) => createPortal(children, iframeBody)}\n </IframeModalContent>\n ) : (\n <div className={cn('mt-4', classes?.content)}>{children}</div>\n )}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n return <>{isPortal ? createPortal(modalBody, portalContainer) : modalBody}</>\n}\n"],"names":["Modal","title","children","isModalOpen","isPortal","portalContainer","_a","closeModal","classes","iframe","iframeRef","useRef","modalBody","jsx","AnimatePresence","motion","cn","event","modalOverlayAnimation","jsxs","modalContentAnimation","ModalHeader","IframeModalContent","iframeBody","createPortal"],"mappings":"slBA6BO,MAAMA,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,GAAkBC,MAAA,mCAAY,WAAZ,YAAAA,EAAsB,QACxC,WAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAAkB,CACZN,EACF,SAAS,KAAK,MAAM,SAAW,SAE/B,SAAS,KAAK,MAAM,SAAW,UAGjC,MAAMO,EAAYC,EAA0B,IAAI,EAE1CC,EACJC,EAACC,EAAA,CACE,SAAAX,GACCU,EAACE,EAAO,IAAP,CACC,SAAU,GACV,QAASR,EACT,UAAWS,EACT,oFACA,CAAE,SAAU,CAACZ,CAAA,EACbI,GAAA,YAAAA,EAAS,OAAA,EAEX,UAAYS,GAAU,CAChBA,EAAM,MAAQ,UAChBV,EAAA,
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../../lib/shared/ui/modal/Modal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { modalContentAnimation, modalOverlayAnimation } from './model/helpers'\nimport { IframeModalContent } from './ui/IframeModalContent'\nimport { ModalHeader, type TModalHeaderClasses } from './ui/ModalHeader'\nimport { cn } from '$/shared/utils'\n\ntype ModalClasses = {\n overlay?: string\n modal?: string\n content?: string\n modalHeader?: TModalHeaderClasses\n}\n\nexport interface ModalProps {\n children: React.ReactElement\n isModalOpen: boolean\n classes?: ModalClasses\n isPortal?: boolean\n portalContainer?: HTMLElement\n title?: string | React.ReactElement\n closeModal: () => void\n iframe?: boolean\n}\n\nexport const Modal = ({\n title,\n children,\n isModalOpen,\n isPortal = true,\n portalContainer = globalThis?.document?.body,\n closeModal,\n classes,\n iframe\n}: ModalProps) => {\n if (isModalOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = 'visible'\n }\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const modalBody = (\n <AnimatePresence>\n {isModalOpen && (\n <motion.div\n tabIndex={-1}\n onClick={closeModal}\n className={cn(\n 'fixed inset-0 flex h-screen w-screen items-center justify-center bg-color-overlay',\n { 'z-1000': !isPortal },\n classes?.overlay\n )}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeModal()\n }\n }}\n data-test-id='modal-overlay'\n {...modalOverlayAnimation}\n >\n <motion.div\n onClick={(event) => event.stopPropagation()}\n className={cn(\n 'w-full max-w-[600px] rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8',\n classes?.modal\n )}\n data-test-id='modal'\n {...modalContentAnimation}\n >\n <ModalHeader title={title} closeModal={closeModal} classes={classes?.modalHeader} />\n {iframe ? (\n <IframeModalContent ref={iframeRef} className={cn('mt-4', classes?.content)}>\n {(iframeBody) => createPortal(children, iframeBody)}\n </IframeModalContent>\n ) : (\n <div className={cn('mt-4', classes?.content)}>{children}</div>\n )}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n return <>{isPortal ? createPortal(modalBody, portalContainer) : modalBody}</>\n}\n"],"names":["Modal","title","children","isModalOpen","isPortal","portalContainer","_a","closeModal","classes","iframe","iframeRef","useRef","modalBody","jsx","AnimatePresence","motion","cn","event","modalOverlayAnimation","jsxs","modalContentAnimation","ModalHeader","IframeModalContent","iframeBody","createPortal"],"mappings":"slBA6BO,MAAMA,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,GAAkBC,MAAA,mCAAY,WAAZ,YAAAA,EAAsB,QACxC,WAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAAkB,CACZN,EACF,SAAS,KAAK,MAAM,SAAW,SAE/B,SAAS,KAAK,MAAM,SAAW,UAGjC,MAAMO,EAAYC,EAA0B,IAAI,EAE1CC,EACJC,EAACC,EAAA,CACE,SAAAX,GACCU,EAACE,EAAO,IAAP,CACC,SAAU,GACV,QAASR,EACT,UAAWS,EACT,oFACA,CAAE,SAAU,CAACZ,CAAA,EACbI,GAAA,YAAAA,EAAS,OAAA,EAEX,UAAYS,GAAU,CAChBA,EAAM,MAAQ,UAChBV,EAAA,CAEJ,EACA,eAAa,gBACZ,GAAGW,EAEJ,SAAAC,EAACJ,EAAO,IAAP,CACC,QAAUE,GAAUA,EAAM,gBAAA,EAC1B,UAAWD,EACT,+FACAR,GAAA,YAAAA,EAAS,KAAA,EAEX,eAAa,QACZ,GAAGY,EAEJ,SAAA,CAAAP,EAACQ,EAAA,CAAY,MAAApB,EAAc,WAAAM,EAAwB,QAASC,GAAA,YAAAA,EAAS,YAAa,EACjFC,EACCI,EAACS,EAAA,CAAmB,IAAKZ,EAAW,UAAWM,EAAG,OAAQR,GAAA,YAAAA,EAAS,OAAO,EACvE,SAACe,GAAeC,EAAatB,EAAUqB,CAAU,EACpD,EAEAV,EAAC,MAAA,CAAI,UAAWG,EAAG,OAAQR,GAAA,YAAAA,EAAS,OAAO,EAAI,SAAAN,CAAA,CAAS,CAAA,CAAA,CAAA,CAE5D,CAAA,EAGN,EAEF,YAAU,SAAAE,EAAWoB,EAAaZ,EAAWP,CAAe,EAAIO,EAAU,CAC5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeModalContent.js","sources":["../../../../../../lib/shared/ui/modal/ui/IframeModalContent.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport { cn } from '$/shared/utils'\n\ntype IframeModalContentProps = {\n children: (body: HTMLElement) => React.ReactNode\n className?: string\n} & Omit<React.IframeHTMLAttributes<HTMLIFrameElement>, 'children'>\n\nexport const IframeModalContent = forwardRef<HTMLIFrameElement, IframeModalContentProps>(\n ({ children, className, ...props }, ref) => {\n const [iframeBody, setIframeBody] = useState<HTMLElement | null>(null)\n\n useEffect(() => {\n const iframe = ref && 'current' in ref ? ref.current : null\n if (!iframe || !iframe.contentDocument) return\n\n if (iframe.contentDocument?.readyState === 'complete') {\n document.querySelectorAll('head > link[rel=\"stylesheet\"], head > style').forEach((node) => {\n iframe.contentDocument?.head.appendChild(node.cloneNode(true))\n })\n\n setIframeBody(iframe.contentDocument.body)\n }\n }, [])\n\n return (\n <iframe id='modal-preview' {...props} ref={ref} className={cn('h-[60vh] w-[60vw]', className)}>\n {iframeBody && children(iframeBody)}\n </iframe>\n )\n }\n)\n"],"names":["IframeModalContent","forwardRef","children","className","props","ref","iframeBody","setIframeBody","useState","useEffect","iframe","_a","node","jsx","cn"],"mappings":"kJAQO,MAAMA,EAAqBC,EAChC,CAAC,CAAE,SAAAC,EAAU,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAAQ,CAC1C,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAA6B,IAAI,EAErE,OAAAC,EAAU,IAAM,OACd,MAAMC,EAASL,GAAO,YAAaA,EAAMA,EAAI,QAAU,KACnD,CAACK,GAAU,CAACA,EAAO,mBAEnBC,EAAAD,EAAO,kBAAP,YAAAC,EAAwB,cAAe,aACzC,SAAS,iBAAiB,6CAA6C,EAAE,QAASC,GAAS,QACzFD,EAAAD,EAAO,kBAAP,MAAAC,EAAwB,KAAK,YAAYC,EAAK,UAAU,EAAI,
|
|
1
|
+
{"version":3,"file":"IframeModalContent.js","sources":["../../../../../../lib/shared/ui/modal/ui/IframeModalContent.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport { cn } from '$/shared/utils'\n\ntype IframeModalContentProps = {\n children: (body: HTMLElement) => React.ReactNode\n className?: string\n} & Omit<React.IframeHTMLAttributes<HTMLIFrameElement>, 'children'>\n\nexport const IframeModalContent = forwardRef<HTMLIFrameElement, IframeModalContentProps>(\n ({ children, className, ...props }, ref) => {\n const [iframeBody, setIframeBody] = useState<HTMLElement | null>(null)\n\n useEffect(() => {\n const iframe = ref && 'current' in ref ? ref.current : null\n if (!iframe || !iframe.contentDocument) return\n\n if (iframe.contentDocument?.readyState === 'complete') {\n document.querySelectorAll('head > link[rel=\"stylesheet\"], head > style').forEach((node) => {\n iframe.contentDocument?.head.appendChild(node.cloneNode(true))\n })\n\n setIframeBody(iframe.contentDocument.body)\n }\n }, [])\n\n return (\n <iframe id='modal-preview' {...props} ref={ref} className={cn('h-[60vh] w-[60vw]', className)}>\n {iframeBody && children(iframeBody)}\n </iframe>\n )\n }\n)\n"],"names":["IframeModalContent","forwardRef","children","className","props","ref","iframeBody","setIframeBody","useState","useEffect","iframe","_a","node","jsx","cn"],"mappings":"kJAQO,MAAMA,EAAqBC,EAChC,CAAC,CAAE,SAAAC,EAAU,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAAQ,CAC1C,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAA6B,IAAI,EAErE,OAAAC,EAAU,IAAM,OACd,MAAMC,EAASL,GAAO,YAAaA,EAAMA,EAAI,QAAU,KACnD,CAACK,GAAU,CAACA,EAAO,mBAEnBC,EAAAD,EAAO,kBAAP,YAAAC,EAAwB,cAAe,aACzC,SAAS,iBAAiB,6CAA6C,EAAE,QAASC,GAAS,QACzFD,EAAAD,EAAO,kBAAP,MAAAC,EAAwB,KAAK,YAAYC,EAAK,UAAU,EAAI,EAC9D,CAAC,EAEDL,EAAcG,EAAO,gBAAgB,IAAI,EAE7C,EAAG,CAAA,CAAE,EAGHG,EAAC,SAAA,CAAO,GAAG,gBAAiB,GAAGT,EAAO,IAAAC,EAAU,UAAWS,EAAG,oBAAqBX,CAAS,EACzF,SAAAG,GAAcJ,EAASI,CAAU,EACpC,CAEJ,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","sources":["../../../../../lib/shared/ui/pagination/Pagination.tsx"],"sourcesContent":["import { cn } from '../../utils'\nimport { Button } from '../button'\nimport { Icon } from '../icon'\n\ntype PaginationClasses = {\n root?: string\n button?: string\n ellipsis?: string\n active?: string\n}\n\nexport type PaginationProps = {\n /**\n * активная страница\n */\n page?: number\n /**\n * количество элементов после сужения страниц пример 1 - (1...6 7 8...n)\n * ^ ^\n */\n between?: number\n /**\n * количество элементов на странице\n */\n totalPages: number\n /**\n * функция для переключения страницы\n */\n changePage: (page: number) => void\n /**\n * включить переход на следующую/предыдущую страницу\n */\n next?: boolean\n /**\n * количество страниц для сужения\n */\n ellipsis?: number\n /**\n * дополнительные стили\n */\n classes?: PaginationClasses\n}\n\nexport const Pagination = ({\n page = 1,\n between = 3,\n totalPages,\n changePage,\n next = true,\n ellipsis = 0,\n classes\n}: PaginationProps) => {\n // гарантирует что between никогда не будет меньше 1\n between = between < 1 ? 1 : between\n // ограничиваем текущую страницу от 1 до totalPages\n page = Math.min(Math.max(page, 1), totalPages)\n // ограничиваем количество сужаемых элементов от 0 до between - 2\n ellipsis = Math.min(Math.max(ellipsis, 0), between - 2)\n\n const positions = Array.from({ length: totalPages }, (_, index) => index)\n\n // количество отображаемых страниц (включая активную)\n const visiblePages = between * 2 + 1\n\n let range\n\n if (totalPages < visiblePages) {\n // если общее количество страниц меньше, чем нужно отобразить, то отображаем все страницы\n range = positions\n } else if (page - 1 <= between) {\n // если текущая страница близка к началу, то отображаем страницы с начала\n range = positions.slice(0, visiblePages - (ellipsis > 0 ? ellipsis + 1 : 0))\n } else if (page + between >= totalPages) {\n // если текущая страница близка к концу, то отображаем страницы с конца\n range = positions.slice(totalPages - visiblePages + (ellipsis > 0 ? ellipsis + 1 : 0), totalPages)\n } else {\n // иначе показываем страницы обрезая их слева и справа\n range = positions.slice(\n page - 1 - (between - (ellipsis > 0 ? ellipsis + 1 : 0)),\n page + (between - (ellipsis > 0 ? ellipsis + 1 : 0))\n )\n }\n\n return (\n <div className={cn('flex', classes?.root)}>\n {next && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark disabled:text-icon-disabled', classes?.button)}\n disabled={page <= 1}\n onClick={() => page > 1 && changePage(page - 2)}\n >\n <Icon name='arrows/arrowRight' className='rotate-180' />\n </Button>\n )}\n {totalPages > visiblePages &&\n ellipsis > 0 &&\n positions.slice(0, page - 1 <= between ? 0 : ellipsis).map((value) => (\n <Button\n key={value}\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark', classes?.button)}\n onClick={() => value !== page - 1 && changePage(value)}\n >\n {value + 1}\n </Button>\n ))}\n {totalPages > visiblePages && ellipsis > 0 && page - 1 > between && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l pointer-events-none w-[40px] p-0 text-color-dark', classes?.ellipsis)}\n >\n ...\n </Button>\n )}\n {range.map((value) => {\n const active = value === page - 1\n\n return (\n <Button\n key={value}\n size='sm'\n className={cn(\n 'mob-body-regular-l w-[40px] p-0 text-color-dark',\n {\n [`text-color-primary-default ${classes?.active}`]: active\n },\n classes?.button\n )}\n intent={active ? 'secondary' : 'ghost'}\n onClick={() => !active && changePage(value)}\n >\n {value + 1}\n </Button>\n )\n })}\n {totalPages > visiblePages && ellipsis > 0 && page < totalPages - between && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l pointer-events-none w-[40px] p-0 text-color-dark', classes?.ellipsis)}\n >\n ...\n </Button>\n )}\n {totalPages > visiblePages &&\n ellipsis > 0 &&\n positions.slice(page >= totalPages - between ? totalPages : totalPages - ellipsis, totalPages).map((value) => (\n <Button\n key={value}\n size='sm'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark', classes?.button)}\n intent='ghost'\n onClick={() => value !== page - 1 && changePage(value)}\n >\n {value + 1}\n </Button>\n ))}\n {next && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark disabled:text-icon-disabled', classes?.button)}\n disabled={page >= totalPages}\n onClick={() => page < totalPages && changePage(page)}\n >\n <Icon name='arrows/arrowRight' />\n </Button>\n )}\n </div>\n )\n}\n"],"names":["Pagination","page","between","totalPages","changePage","next","ellipsis","classes","positions","_","index","visiblePages","range","cn","jsx","Button","Icon","value","active"],"mappings":"6KA2CO,MAAMA,EAAa,CAAC,CACzB,KAAAC,EAAO,EACP,QAAAC,EAAU,EACV,WAAAC,EACA,WAAAC,EACA,KAAAC,EAAO,GACP,SAAAC,EAAW,EACX,QAAAC,CACF,IAAuB,CAErBL,EAAUA,EAAU,EAAI,EAAIA,EAE5BD,EAAO,KAAK,IAAI,KAAK,IAAIA,EAAM,CAAC,EAAGE,CAAU,EAE7CG,EAAW,KAAK,IAAI,KAAK,IAAIA,EAAU,CAAC,EAAGJ,EAAU,CAAC,EAEtD,MAAMM,EAAY,MAAM,KAAK,CAAE,OAAQL,GAAc,CAACM,EAAGC,IAAUA,CAAK,EAGlEC,EAAeT,EAAU,EAAI,EAEnC,IAAIU,EAEJ,OAAIT,EAAaQ,EAEfC,EAAQJ,EACCP,EAAO,GAAKC,EAErBU,EAAQJ,EAAU,MAAM,EAAGG,GAAgBL,EAAW,EAAIA,EAAW,EAAI,EAAE,EAClEL,EAAOC,GAAWC,EAE3BS,EAAQJ,EAAU,MAAML,EAAaQ,GAAgBL,EAAW,EAAIA,EAAW,EAAI,GAAIH,CAAU,EAGjGS,EAAQJ,EAAU,MAChBP,EAAO,GAAKC,GAAWI,EAAW,EAAIA,EAAW,EAAI,IACrDL,GAAQC,GAAWI,EAAW,EAAIA,EAAW,EAAI,GAAA,IAKlD,MAAA,CAAI,UAAWO,EAAG,OAAQN,GAAA,YAAAA,EAAS,IAAI,EACrC,SAAA,CAAAF,GACCS,EAACC,EAAA,CACC,KAAK,KACL,OAAO,QACP,UAAWF,EAAG,8EAA+EN,GAAA,YAAAA,EAAS,MAAM,EAC5G,SAAUN,GAAQ,EAClB,QAAS,IAAMA,EAAO,GAAKG,EAAWH,EAAO,CAAC,EAE9C,SAAAa,EAACE,EAAA,CAAK,KAAK,oBAAoB,UAAU,YAAA,CAAa,CAAA,CAAA,EAGzDb,EAAaQ,GACZL,EAAW,GACXE,EAAU,MAAM,EAAGP,EAAO,GAAKC,EAAU,EAAII,CAAQ,EAAE,IAAKW,GAC1DH,EAACC,EAAA,CAEC,KAAK,KACL,OAAO,QACP,UAAWF,EAAG,kDAAmDN,GAAA,YAAAA,EAAS,MAAM,EAChF,QAAS,IAAMU,IAAUhB,EAAO,GAAKG,EAAWa,CAAK,EAEpD,SAAAA,EAAQ,CAAA,EANJA,CAAA,CAQR,EACFd,EAAaQ,GAAgBL,EAAW,GAAKL,EAAO,EAAIC,GACvDY,EAACC,EAAA,CACC,KAAK,KACL,OAAO,QACP,UAAWF,EAAG,sEAAuEN,GAAA,YAAAA,EAAS,QAAQ,EACvG,SAAA,KAAA,CAAA,EAIFK,EAAM,IAAKK,GAAU,CACpB,MAAMC,EAASD,IAAUhB,EAAO,EAEhC,OACEa,EAACC,EAAA,CAEC,KAAK,KACL,UAAWF,EACT,kDACA,CACE,CAAC,8BAA8BN,GAAA,YAAAA,EAAS,MAAM,EAAE,EAAGW,CAAA,EAErDX,GAAA,YAAAA,EAAS,MAAA,EAEX,OAAQW,EAAS,YAAc,QAC/B,QAAS,IAAM,CAACA,GAAUd,EAAWa,CAAK,EAEzC,SAAAA,EAAQ,CAAA,EAZJA,CAAA,
|
|
1
|
+
{"version":3,"file":"Pagination.js","sources":["../../../../../lib/shared/ui/pagination/Pagination.tsx"],"sourcesContent":["import { cn } from '../../utils'\nimport { Button } from '../button'\nimport { Icon } from '../icon'\n\ntype PaginationClasses = {\n root?: string\n button?: string\n ellipsis?: string\n active?: string\n}\n\nexport type PaginationProps = {\n /**\n * активная страница\n */\n page?: number\n /**\n * количество элементов после сужения страниц пример 1 - (1...6 7 8...n)\n * ^ ^\n */\n between?: number\n /**\n * количество элементов на странице\n */\n totalPages: number\n /**\n * функция для переключения страницы\n */\n changePage: (page: number) => void\n /**\n * включить переход на следующую/предыдущую страницу\n */\n next?: boolean\n /**\n * количество страниц для сужения\n */\n ellipsis?: number\n /**\n * дополнительные стили\n */\n classes?: PaginationClasses\n}\n\nexport const Pagination = ({\n page = 1,\n between = 3,\n totalPages,\n changePage,\n next = true,\n ellipsis = 0,\n classes\n}: PaginationProps) => {\n // гарантирует что between никогда не будет меньше 1\n between = between < 1 ? 1 : between\n // ограничиваем текущую страницу от 1 до totalPages\n page = Math.min(Math.max(page, 1), totalPages)\n // ограничиваем количество сужаемых элементов от 0 до between - 2\n ellipsis = Math.min(Math.max(ellipsis, 0), between - 2)\n\n const positions = Array.from({ length: totalPages }, (_, index) => index)\n\n // количество отображаемых страниц (включая активную)\n const visiblePages = between * 2 + 1\n\n let range\n\n if (totalPages < visiblePages) {\n // если общее количество страниц меньше, чем нужно отобразить, то отображаем все страницы\n range = positions\n } else if (page - 1 <= between) {\n // если текущая страница близка к началу, то отображаем страницы с начала\n range = positions.slice(0, visiblePages - (ellipsis > 0 ? ellipsis + 1 : 0))\n } else if (page + between >= totalPages) {\n // если текущая страница близка к концу, то отображаем страницы с конца\n range = positions.slice(totalPages - visiblePages + (ellipsis > 0 ? ellipsis + 1 : 0), totalPages)\n } else {\n // иначе показываем страницы обрезая их слева и справа\n range = positions.slice(\n page - 1 - (between - (ellipsis > 0 ? ellipsis + 1 : 0)),\n page + (between - (ellipsis > 0 ? ellipsis + 1 : 0))\n )\n }\n\n return (\n <div className={cn('flex', classes?.root)}>\n {next && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark disabled:text-icon-disabled', classes?.button)}\n disabled={page <= 1}\n onClick={() => page > 1 && changePage(page - 2)}\n >\n <Icon name='arrows/arrowRight' className='rotate-180' />\n </Button>\n )}\n {totalPages > visiblePages &&\n ellipsis > 0 &&\n positions.slice(0, page - 1 <= between ? 0 : ellipsis).map((value) => (\n <Button\n key={value}\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark', classes?.button)}\n onClick={() => value !== page - 1 && changePage(value)}\n >\n {value + 1}\n </Button>\n ))}\n {totalPages > visiblePages && ellipsis > 0 && page - 1 > between && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l pointer-events-none w-[40px] p-0 text-color-dark', classes?.ellipsis)}\n >\n ...\n </Button>\n )}\n {range.map((value) => {\n const active = value === page - 1\n\n return (\n <Button\n key={value}\n size='sm'\n className={cn(\n 'mob-body-regular-l w-[40px] p-0 text-color-dark',\n {\n [`text-color-primary-default ${classes?.active}`]: active\n },\n classes?.button\n )}\n intent={active ? 'secondary' : 'ghost'}\n onClick={() => !active && changePage(value)}\n >\n {value + 1}\n </Button>\n )\n })}\n {totalPages > visiblePages && ellipsis > 0 && page < totalPages - between && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l pointer-events-none w-[40px] p-0 text-color-dark', classes?.ellipsis)}\n >\n ...\n </Button>\n )}\n {totalPages > visiblePages &&\n ellipsis > 0 &&\n positions.slice(page >= totalPages - between ? totalPages : totalPages - ellipsis, totalPages).map((value) => (\n <Button\n key={value}\n size='sm'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark', classes?.button)}\n intent='ghost'\n onClick={() => value !== page - 1 && changePage(value)}\n >\n {value + 1}\n </Button>\n ))}\n {next && (\n <Button\n size='sm'\n intent='ghost'\n className={cn('mob-body-regular-l w-[40px] p-0 text-color-dark disabled:text-icon-disabled', classes?.button)}\n disabled={page >= totalPages}\n onClick={() => page < totalPages && changePage(page)}\n >\n <Icon name='arrows/arrowRight' />\n </Button>\n )}\n </div>\n )\n}\n"],"names":["Pagination","page","between","totalPages","changePage","next","ellipsis","classes","positions","_","index","visiblePages","range","cn","jsx","Button","Icon","value","active"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationProvider.js","sources":["../../../../../lib/shared/ui/providers/NotificationProvider.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect } from 'react'\nimport toast, { Toaster, useToasterStore } from 'react-hot-toast'\n\nexport interface NotificationProviderProps {\n maxToastViewLimit?: number\n toastDuration?: number\n}\n\nexport const NotificationProvider = ({ maxToastViewLimit = 2, toastDuration = 5000 }: NotificationProviderProps) => {\n const { toasts } = useToasterStore()\n\n useEffect(() => {\n toasts\n .filter((t) => t.visible)\n .filter((_, i) => i >= maxToastViewLimit)\n .forEach((t) => toast.dismiss(t.id))\n }, [maxToastViewLimit, toasts])\n\n return (\n <Toaster\n position='top-center'\n toastOptions={{\n duration: toastDuration\n }}\n />\n )\n}\n"],"names":["NotificationProvider","maxToastViewLimit","toastDuration","toasts","useToasterStore","useEffect","_","i","toast","jsx","Toaster"],"mappings":"mLAUO,MAAMA,EAAuB,CAAC,CAAE,kBAAAC,EAAoB,EAAG,cAAAC,EAAgB,OAAsC,CAClH,KAAM,CAAE,OAAAC,CAAA,EAAWC,EAAA,EAEnB,OAAAC,EAAU,IAAM,CACdF,EACG,OAAQ,GAAM,EAAE,OAAO,EACvB,OAAO,CAACG,EAAGC,IAAMA,GAAKN,CAAiB,EACvC,QAAS,GAAMO,EAAM,QAAQ,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"NotificationProvider.js","sources":["../../../../../lib/shared/ui/providers/NotificationProvider.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect } from 'react'\nimport toast, { Toaster, useToasterStore } from 'react-hot-toast'\n\nexport interface NotificationProviderProps {\n maxToastViewLimit?: number\n toastDuration?: number\n}\n\nexport const NotificationProvider = ({ maxToastViewLimit = 2, toastDuration = 5000 }: NotificationProviderProps) => {\n const { toasts } = useToasterStore()\n\n useEffect(() => {\n toasts\n .filter((t) => t.visible)\n .filter((_, i) => i >= maxToastViewLimit)\n .forEach((t) => toast.dismiss(t.id))\n }, [maxToastViewLimit, toasts])\n\n return (\n <Toaster\n position='top-center'\n toastOptions={{\n duration: toastDuration\n }}\n />\n )\n}\n"],"names":["NotificationProvider","maxToastViewLimit","toastDuration","toasts","useToasterStore","useEffect","_","i","toast","jsx","Toaster"],"mappings":"mLAUO,MAAMA,EAAuB,CAAC,CAAE,kBAAAC,EAAoB,EAAG,cAAAC,EAAgB,OAAsC,CAClH,KAAM,CAAE,OAAAC,CAAA,EAAWC,EAAA,EAEnB,OAAAC,EAAU,IAAM,CACdF,EACG,OAAQ,GAAM,EAAE,OAAO,EACvB,OAAO,CAACG,EAAGC,IAAMA,GAAKN,CAAiB,EACvC,QAAS,GAAMO,EAAM,QAAQ,EAAE,EAAE,CAAC,CACvC,EAAG,CAACP,EAAmBE,CAAM,CAAC,EAG5BM,EAACC,EAAA,CACC,SAAS,aACT,aAAc,CACZ,SAAUR,CAAA,CACZ,CAAA,CAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slot.js","sources":["../../../../../lib/shared/ui/slot/Slot.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport { isSlottable } from './model'\nimport { SlotClone, type SlottableProps } from '$/shared/ui/slot/ui'\n\nexport type SlotProps = React.HTMLAttributes<HTMLElement> & {\n children?: React.ReactNode\n}\n\nexport const Slot = forwardRef<HTMLElement, SlotProps>(({ children, ...props }, ref) => {\n const childrenArray = Children.toArray(children)\n const slottable = childrenArray.find(isSlottable)\n\n if (slottable) {\n const newElement = slottable.props.children\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (Children.count(newElement) > 1) {\n return Children.only(null)\n }\n\n return isValidElement(newElement) ? (newElement.props as SlottableProps).children : null\n } else {\n return child\n }\n })\n\n return (\n <SlotClone {...props} ref={ref}>\n {isValidElement(newElement) ? cloneElement(newElement, undefined, newChildren) : null}\n </SlotClone>\n )\n }\n\n return (\n <SlotClone {...props} ref={ref}>\n {children}\n </SlotClone>\n )\n})\nSlot.displayName = 'Slot'\n"],"names":["Slot","forwardRef","children","props","ref","childrenArray","Children","slottable","isSlottable","newElement","newChildren","child","isValidElement","jsx","SlotClone","cloneElement"],"mappings":"kOAQO,MAAMA,EAAOC,EAAmC,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAAQ,CACtF,MAAMC,EAAgBC,EAAS,QAAQJ,CAAQ,EACzCK,EAAYF,EAAc,KAAKG,CAAW,EAEhD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAE7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,EAAS,MAAMG,CAAU,EAAI,EACxBH,EAAS,KAAK,IAAI,EAGpBM,EAAeH,CAAU,EAAKA,EAAW,MAAyB,SAAW,KAE7EE,CAEV,EAED,OACEE,EAACC,EAAA,CAAW,GAAGX,EAAO,IAAAC,EACnB,SAAAQ,EAAeH,CAAU,EAAIM,EAAaN,EAAY,OAAWC,CAAW,EAAI,KACnF,
|
|
1
|
+
{"version":3,"file":"Slot.js","sources":["../../../../../lib/shared/ui/slot/Slot.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport { isSlottable } from './model'\nimport { SlotClone, type SlottableProps } from '$/shared/ui/slot/ui'\n\nexport type SlotProps = React.HTMLAttributes<HTMLElement> & {\n children?: React.ReactNode\n}\n\nexport const Slot = forwardRef<HTMLElement, SlotProps>(({ children, ...props }, ref) => {\n const childrenArray = Children.toArray(children)\n const slottable = childrenArray.find(isSlottable)\n\n if (slottable) {\n const newElement = slottable.props.children\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (Children.count(newElement) > 1) {\n return Children.only(null)\n }\n\n return isValidElement(newElement) ? (newElement.props as SlottableProps).children : null\n } else {\n return child\n }\n })\n\n return (\n <SlotClone {...props} ref={ref}>\n {isValidElement(newElement) ? cloneElement(newElement, undefined, newChildren) : null}\n </SlotClone>\n )\n }\n\n return (\n <SlotClone {...props} ref={ref}>\n {children}\n </SlotClone>\n )\n})\nSlot.displayName = 'Slot'\n"],"names":["Slot","forwardRef","children","props","ref","childrenArray","Children","slottable","isSlottable","newElement","newChildren","child","isValidElement","jsx","SlotClone","cloneElement"],"mappings":"kOAQO,MAAMA,EAAOC,EAAmC,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAAQ,CACtF,MAAMC,EAAgBC,EAAS,QAAQJ,CAAQ,EACzCK,EAAYF,EAAc,KAAKG,CAAW,EAEhD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAE7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,EAAS,MAAMG,CAAU,EAAI,EACxBH,EAAS,KAAK,IAAI,EAGpBM,EAAeH,CAAU,EAAKA,EAAW,MAAyB,SAAW,KAE7EE,CAEV,EAED,OACEE,EAACC,EAAA,CAAW,GAAGX,EAAO,IAAAC,EACnB,SAAAQ,EAAeH,CAAU,EAAIM,EAAaN,EAAY,OAAWC,CAAW,EAAI,KACnF,CAEJ,CAEA,OACEG,EAACC,EAAA,CAAW,GAAGX,EAAO,IAAAC,EACnB,SAAAF,EACH,CAEJ,CAAC,EACDF,EAAK,YAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeProps.js","sources":["../../../../../../lib/shared/ui/slot/model/mergeProps.ts"],"sourcesContent":["type AnyProps = Record<string, any>\n\nexport const mergeProps = (slotProps: AnyProps, childProps: AnyProps) => {\n const override = { ...childProps }\n\n for (const prop in childProps) {\n const slotPropValue = slotProps[prop]\n const childPropValue = childProps[prop]\n\n // check if is handler\n if (/^on[A-Z]/.test(prop)) {\n if (slotPropValue && childPropValue) {\n override[prop] = (...args: unknown[]) => {\n slotPropValue(...args)\n childPropValue(...args)\n }\n }\n } else if (slotPropValue) {\n override[prop] = slotPropValue\n } else if (prop === 'style') {\n override[prop] = { ...slotPropValue, ...childPropValue }\n } else if (prop === 'className') {\n override[prop] = [slotPropValue, childPropValue].filter(Boolean).join(' ')\n }\n }\n\n return { ...slotProps, ...override }\n}\n"],"names":["mergeProps","slotProps","childProps","override","prop","slotPropValue","childPropValue","args"],"mappings":"AAEO,MAAMA,EAAa,CAACC,EAAqBC,IAAyB,CACvE,MAAMC,EAAW,CAAE,GAAGD,CAAA,EAEtB,UAAWE,KAAQF,EAAY,CAC7B,MAAMG,EAAgBJ,EAAUG,CAAI,EAC9BE,EAAiBJ,EAAWE,CAAI,EAGlC,WAAW,KAAKA,CAAI,EAClBC,GAAiBC,IACnBH,EAASC,CAAI,EAAI,IAAIG,IAAoB,CACvCF,EAAc,GAAGE,CAAI,EACrBD,EAAe,GAAGC,CAAI,
|
|
1
|
+
{"version":3,"file":"mergeProps.js","sources":["../../../../../../lib/shared/ui/slot/model/mergeProps.ts"],"sourcesContent":["type AnyProps = Record<string, any>\n\nexport const mergeProps = (slotProps: AnyProps, childProps: AnyProps) => {\n const override = { ...childProps }\n\n for (const prop in childProps) {\n const slotPropValue = slotProps[prop]\n const childPropValue = childProps[prop]\n\n // check if is handler\n if (/^on[A-Z]/.test(prop)) {\n if (slotPropValue && childPropValue) {\n override[prop] = (...args: unknown[]) => {\n slotPropValue(...args)\n childPropValue(...args)\n }\n }\n } else if (slotPropValue) {\n override[prop] = slotPropValue\n } else if (prop === 'style') {\n override[prop] = { ...slotPropValue, ...childPropValue }\n } else if (prop === 'className') {\n override[prop] = [slotPropValue, childPropValue].filter(Boolean).join(' ')\n }\n }\n\n return { ...slotProps, ...override }\n}\n"],"names":["mergeProps","slotProps","childProps","override","prop","slotPropValue","childPropValue","args"],"mappings":"AAEO,MAAMA,EAAa,CAACC,EAAqBC,IAAyB,CACvE,MAAMC,EAAW,CAAE,GAAGD,CAAA,EAEtB,UAAWE,KAAQF,EAAY,CAC7B,MAAMG,EAAgBJ,EAAUG,CAAI,EAC9BE,EAAiBJ,EAAWE,CAAI,EAGlC,WAAW,KAAKA,CAAI,EAClBC,GAAiBC,IACnBH,EAASC,CAAI,EAAI,IAAIG,IAAoB,CACvCF,EAAc,GAAGE,CAAI,EACrBD,EAAe,GAAGC,CAAI,CACxB,GAEOF,EACTF,EAASC,CAAI,EAAIC,EACRD,IAAS,QAClBD,EAASC,CAAI,EAAI,CAAE,GAAGC,EAAe,GAAGC,CAAA,EAC/BF,IAAS,cAClBD,EAASC,CAAI,EAAI,CAACC,EAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAE7E,CAEA,MAAO,CAAE,GAAGL,EAAW,GAAGE,CAAA,CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlotClone.js","sources":["../../../../../../lib/shared/ui/slot/ui/SlotClone.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport { getElementRef, mergeProps } from '../model'\nimport { mergeRefs } from '$/shared/utils'\n\nexport type SlotCloneProps = {\n children: React.ReactNode\n}\n\nexport const SlotClone = forwardRef<any, SlotCloneProps>(({ children, ...props }, ref) => {\n if (isValidElement(children)) {\n const childrenRef = getElementRef(children)\n\n return cloneElement(children, {\n ...mergeProps(props, children.props),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n ref: ref ? mergeRefs(ref, childrenRef) : childrenRef\n })\n }\n\n return Children.count(children) > 1 ? Children.only(null) : null\n})\nSlotClone.displayName = 'SlotClone'\n"],"names":["SlotClone","forwardRef","children","props","ref","isValidElement","childrenRef","getElementRef","cloneElement","mergeProps","mergeRefs","Children"],"mappings":"8SAQO,MAAMA,EAAYC,EAAgC,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAAQ,CACxF,GAAIC,EAAeH,CAAQ,EAAG,CAC5B,MAAMI,EAAcC,EAAcL,CAAQ,EAE1C,OAAOM,EAAaN,EAAU,CAC5B,GAAGO,EAAWN,EAAOD,EAAS,KAAK,EAGnC,IAAKE,EAAMM,EAAUN,EAAKE,CAAW,EAAIA,CAAA,CAC1C,
|
|
1
|
+
{"version":3,"file":"SlotClone.js","sources":["../../../../../../lib/shared/ui/slot/ui/SlotClone.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport { getElementRef, mergeProps } from '../model'\nimport { mergeRefs } from '$/shared/utils'\n\nexport type SlotCloneProps = {\n children: React.ReactNode\n}\n\nexport const SlotClone = forwardRef<any, SlotCloneProps>(({ children, ...props }, ref) => {\n if (isValidElement(children)) {\n const childrenRef = getElementRef(children)\n\n return cloneElement(children, {\n ...mergeProps(props, children.props),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n ref: ref ? mergeRefs(ref, childrenRef) : childrenRef\n })\n }\n\n return Children.count(children) > 1 ? Children.only(null) : null\n})\nSlotClone.displayName = 'SlotClone'\n"],"names":["SlotClone","forwardRef","children","props","ref","isValidElement","childrenRef","getElementRef","cloneElement","mergeProps","mergeRefs","Children"],"mappings":"8SAQO,MAAMA,EAAYC,EAAgC,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAAQ,CACxF,GAAIC,EAAeH,CAAQ,EAAG,CAC5B,MAAMI,EAAcC,EAAcL,CAAQ,EAE1C,OAAOM,EAAaN,EAAU,CAC5B,GAAGO,EAAWN,EAAOD,EAAS,KAAK,EAGnC,IAAKE,EAAMM,EAAUN,EAAKE,CAAW,EAAIA,CAAA,CAC1C,CACH,CAEA,OAAOK,EAAS,MAAMT,CAAQ,EAAI,EAAIS,EAAS,KAAK,IAAI,EAAI,IAC9D,CAAC,EACDX,EAAU,YAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabContent.js","sources":["../../../../../../lib/shared/ui/tabSwitcher/ui/TabContent.tsx"],"sourcesContent":["import * as TabPrimitive from '@radix-ui/react-tabs'\nimport { Accordion } from '../../accordion'\nimport type { ITabContent } from '../model/types'\nimport { cn } from '$/shared/utils'\n\nexport type TabContentClasses = {\n content?: string\n contentsWrapper?: string\n}\n\nexport interface TabContentProps {\n contents: ITabContent[]\n classes?: TabContentClasses\n}\n\nexport const TabContent = ({ classes, contents }: TabContentProps) => {\n return (\n <div className={cn('flex flex-col gap-4', classes?.contentsWrapper)}>\n {contents?.map(({ id, body, accordion }) => {\n if (accordion && accordion?.title) {\n return (\n <TabPrimitive.Content key={id} value={id} className={cn('py-8', classes?.content)}>\n <Accordion label={accordion?.title}>{body}</Accordion>\n </TabPrimitive.Content>\n )\n }\n\n return (\n <TabPrimitive.Content key={id} value={id} className={cn('py-8', classes?.content)}>\n {body}\n </TabPrimitive.Content>\n )\n })}\n </div>\n )\n}\n"],"names":["TabContent","classes","contents","jsx","cn","id","body","accordion","TabPrimitive.Content","Accordion"],"mappings":"oOAeO,MAAMA,EAAa,CAAC,CAAE,QAAAC,EAAS,SAAAC,KAElCC,EAAC,MAAA,CAAI,UAAWC,EAAG,sBAAuBH,GAAA,YAAAA,EAAS,eAAe,EAC/D,SAAAC,GAAA,YAAAA,EAAU,IAAI,CAAC,CAAE,GAAAG,EAAI,KAAAC,EAAM,UAAAC,KACtBA,IAAaA,GAAA,MAAAA,EAAW,SAEvBC,EAAA,CAA8B,MAAOH,EAAI,UAAWD,EAAG,OAAQH,GAAA,YAAAA,EAAS,OAAO,EAC9E,WAACQ,EAAA,CAAU,MAAOF,GAAA,YAAAA,EAAW,MAAQ,SAAAD,CAAA,CAAK,GADjBD,CAE3B,EAKFF,EAACK,EAAA,CAA8B,MAAOH,EAAI,UAAWD,EAAG,OAAQH,GAAA,YAAAA,EAAS,OAAO,EAC7E,YADwBI,CAE3B,
|
|
1
|
+
{"version":3,"file":"TabContent.js","sources":["../../../../../../lib/shared/ui/tabSwitcher/ui/TabContent.tsx"],"sourcesContent":["import * as TabPrimitive from '@radix-ui/react-tabs'\nimport { Accordion } from '../../accordion'\nimport type { ITabContent } from '../model/types'\nimport { cn } from '$/shared/utils'\n\nexport type TabContentClasses = {\n content?: string\n contentsWrapper?: string\n}\n\nexport interface TabContentProps {\n contents: ITabContent[]\n classes?: TabContentClasses\n}\n\nexport const TabContent = ({ classes, contents }: TabContentProps) => {\n return (\n <div className={cn('flex flex-col gap-4', classes?.contentsWrapper)}>\n {contents?.map(({ id, body, accordion }) => {\n if (accordion && accordion?.title) {\n return (\n <TabPrimitive.Content key={id} value={id} className={cn('py-8', classes?.content)}>\n <Accordion label={accordion?.title}>{body}</Accordion>\n </TabPrimitive.Content>\n )\n }\n\n return (\n <TabPrimitive.Content key={id} value={id} className={cn('py-8', classes?.content)}>\n {body}\n </TabPrimitive.Content>\n )\n })}\n </div>\n )\n}\n"],"names":["TabContent","classes","contents","jsx","cn","id","body","accordion","TabPrimitive.Content","Accordion"],"mappings":"oOAeO,MAAMA,EAAa,CAAC,CAAE,QAAAC,EAAS,SAAAC,KAElCC,EAAC,MAAA,CAAI,UAAWC,EAAG,sBAAuBH,GAAA,YAAAA,EAAS,eAAe,EAC/D,SAAAC,GAAA,YAAAA,EAAU,IAAI,CAAC,CAAE,GAAAG,EAAI,KAAAC,EAAM,UAAAC,KACtBA,IAAaA,GAAA,MAAAA,EAAW,SAEvBC,EAAA,CAA8B,MAAOH,EAAI,UAAWD,EAAG,OAAQH,GAAA,YAAAA,EAAS,OAAO,EAC9E,WAACQ,EAAA,CAAU,MAAOF,GAAA,YAAAA,EAAW,MAAQ,SAAAD,CAAA,CAAK,GADjBD,CAE3B,EAKFF,EAACK,EAAA,CAA8B,MAAOH,EAAI,UAAWD,EAAG,OAAQH,GAAA,YAAAA,EAAS,OAAO,EAC7E,YADwBI,CAE3B,EAEH,CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mobile.js","sources":["../../../../../lib/shared/ui/table/Mobile.tsx"],"sourcesContent":["import { flexRender, type Table } from '@tanstack/react-table'\nimport type { DataTableProps } from './model'\nimport { cn } from '$/shared/utils'\n\nexport const Mobile = <TData extends {}>({\n mode,\n enableHeaders,\n table,\n classes,\n empty = 'Not found'\n}: Pick<DataTableProps<TData>, 'enableHeaders' | 'classes' | 'mode' | 'empty'> & { table: Table<TData> }) => {\n return (\n <div className={cn('w-full', classes?.table)}>\n {table.getRowModel().rows.length ? (\n table.getRowModel().rows.map((row) => (\n <div\n key={row.id}\n className={cn(\n {\n '[&:not(:last-child)]:border-b [&:not(:last-child)]:border-b-[rgba(234,237,241,1)]': mode === 'solid',\n '[&:nth-child(odd)]:bg-color-primary-light-default': mode === 'odd'\n },\n classes?.tableRow\n )}\n >\n {row.getVisibleCells().map((cell, index) => {\n const header = table.getHeaderGroups()[0].headers[index]\n\n return (\n <div\n key={cell.id}\n className={cn(\n 'grid grid-cols-2 p-2',\n {\n 'px-2': mode === 'odd',\n 'font-medium': index !== 0\n },\n classes?.tableCell\n )}\n >\n {enableHeaders && (\n <p className='font-bold'>{flexRender(header.column.columnDef.header, header.getContext())}</p>\n )}\n <p>{flexRender(cell.column.columnDef.cell, cell.getContext())}</p>\n </div>\n )\n })}\n </div>\n ))\n ) : (\n <div>{empty}</div>\n )}\n </div>\n )\n}\n"],"names":["Mobile","mode","enableHeaders","table","classes","empty","cn","row","jsx","cell","index","header","jsxs","flexRender"],"mappings":"wLAIO,MAAMA,EAAS,CAAmB,CACvC,KAAAC,EACA,cAAAC,EACA,MAAAC,EACA,QAAAC,EACA,MAAAC,EAAQ,WACV,MAEK,MAAA,CAAI,UAAWC,EAAG,SAAUF,GAAA,YAAAA,EAAS,KAAK,EACxC,SAAAD,EAAM,cAAc,KAAK,OACxBA,EAAM,YAAA,EAAc,KAAK,IAAKI,GAC5BC,EAAC,MAAA,CAEC,UAAWF,EACT,CACE,oFAAqFL,IAAS,QAC9F,oDAAqDA,IAAS,KAAA,EAEhEG,GAAA,YAAAA,EAAS,QAAA,EAGV,WAAI,gBAAA,EAAkB,IAAI,CAACK,EAAMC,IAAU,CAC1C,MAAMC,EAASR,EAAM,gBAAA,EAAkB,CAAC,EAAE,QAAQO,CAAK,EAEvD,OACEE,EAAC,MAAA,CAEC,UAAWN,EACT,uBACA,CACE,OAAQL,IAAS,MACjB,cAAeS,IAAU,CAAA,EAE3BN,GAAA,YAAAA,EAAS,SAAA,EAGV,SAAA,CAAAF,GACCM,EAAC,IAAA,CAAE,UAAU,YAAa,SAAAK,EAAWF,EAAO,OAAO,UAAU,OAAQA,EAAO,WAAA,CAAY,EAAE,EAE5FH,EAAC,IAAA,CAAG,SAAAK,EAAWJ,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAA,CAAY,CAAA,CAAE,CAAA,CAAA,EAbzDA,EAAK,EAAA,
|
|
1
|
+
{"version":3,"file":"Mobile.js","sources":["../../../../../lib/shared/ui/table/Mobile.tsx"],"sourcesContent":["import { flexRender, type Table } from '@tanstack/react-table'\nimport type { DataTableProps } from './model'\nimport { cn } from '$/shared/utils'\n\nexport const Mobile = <TData extends {}>({\n mode,\n enableHeaders,\n table,\n classes,\n empty = 'Not found'\n}: Pick<DataTableProps<TData>, 'enableHeaders' | 'classes' | 'mode' | 'empty'> & { table: Table<TData> }) => {\n return (\n <div className={cn('w-full', classes?.table)}>\n {table.getRowModel().rows.length ? (\n table.getRowModel().rows.map((row) => (\n <div\n key={row.id}\n className={cn(\n {\n '[&:not(:last-child)]:border-b [&:not(:last-child)]:border-b-[rgba(234,237,241,1)]': mode === 'solid',\n '[&:nth-child(odd)]:bg-color-primary-light-default': mode === 'odd'\n },\n classes?.tableRow\n )}\n >\n {row.getVisibleCells().map((cell, index) => {\n const header = table.getHeaderGroups()[0].headers[index]\n\n return (\n <div\n key={cell.id}\n className={cn(\n 'grid grid-cols-2 p-2',\n {\n 'px-2': mode === 'odd',\n 'font-medium': index !== 0\n },\n classes?.tableCell\n )}\n >\n {enableHeaders && (\n <p className='font-bold'>{flexRender(header.column.columnDef.header, header.getContext())}</p>\n )}\n <p>{flexRender(cell.column.columnDef.cell, cell.getContext())}</p>\n </div>\n )\n })}\n </div>\n ))\n ) : (\n <div>{empty}</div>\n )}\n </div>\n )\n}\n"],"names":["Mobile","mode","enableHeaders","table","classes","empty","cn","row","jsx","cell","index","header","jsxs","flexRender"],"mappings":"wLAIO,MAAMA,EAAS,CAAmB,CACvC,KAAAC,EACA,cAAAC,EACA,MAAAC,EACA,QAAAC,EACA,MAAAC,EAAQ,WACV,MAEK,MAAA,CAAI,UAAWC,EAAG,SAAUF,GAAA,YAAAA,EAAS,KAAK,EACxC,SAAAD,EAAM,cAAc,KAAK,OACxBA,EAAM,YAAA,EAAc,KAAK,IAAKI,GAC5BC,EAAC,MAAA,CAEC,UAAWF,EACT,CACE,oFAAqFL,IAAS,QAC9F,oDAAqDA,IAAS,KAAA,EAEhEG,GAAA,YAAAA,EAAS,QAAA,EAGV,WAAI,gBAAA,EAAkB,IAAI,CAACK,EAAMC,IAAU,CAC1C,MAAMC,EAASR,EAAM,gBAAA,EAAkB,CAAC,EAAE,QAAQO,CAAK,EAEvD,OACEE,EAAC,MAAA,CAEC,UAAWN,EACT,uBACA,CACE,OAAQL,IAAS,MACjB,cAAeS,IAAU,CAAA,EAE3BN,GAAA,YAAAA,EAAS,SAAA,EAGV,SAAA,CAAAF,GACCM,EAAC,IAAA,CAAE,UAAU,YAAa,SAAAK,EAAWF,EAAO,OAAO,UAAU,OAAQA,EAAO,WAAA,CAAY,EAAE,EAE5FH,EAAC,IAAA,CAAG,SAAAK,EAAWJ,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAA,CAAY,CAAA,CAAE,CAAA,CAAA,EAbzDA,EAAK,EAAA,CAgBhB,CAAC,CAAA,EA9BIF,EAAI,EAAA,CAgCZ,EAEDC,EAAC,MAAA,CAAK,WAAM,EAEhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableUtils.js","sources":["../../../../../../lib/shared/ui/table/model/TableUtils.tsx"],"sourcesContent":["import {\n type CellContext,\n type ColumnDef,\n type ColumnHelper,\n createColumnHelper,\n type HeaderContext\n} from '@tanstack/react-table'\nimport { DataTableColumnHeader } from '../ui'\nimport { TypeGuards } from '$/shared/utils'\n\ntype ColumnDefOptions<TData, TValue> = {\n enableSorting?: (keyof TData)[] | boolean\n enableColumnFilter?: (keyof TData)[] | boolean\n helper?: ColumnHelper<TData>\n cellAccessor?: Partial<Record<keyof TData, (cellContext: CellContext<TData, TValue>) => React.ReactNode>>\n headerAccessor?: Partial<\n Record<keyof TData, (key: keyof TData, headerContext: HeaderContext<TData, TValue>) => React.ReactNode>\n >\n}\n\nexport class TableUtils {\n static getColumnHelper<TData extends {}>(): ColumnHelper<TData> {\n return createColumnHelper<TData>()\n }\n\n static getColumns<TData extends {}, TValue = TData[keyof TData]>(\n template: TData,\n options?: ColumnDefOptions<TData, TValue>\n ): ColumnDef<TData>[] {\n const {\n helper = this.getColumnHelper<TData>(),\n enableColumnFilter = false,\n enableSorting = false,\n cellAccessor,\n headerAccessor\n } = options || {}\n\n const keys = Object.keys(template) as (keyof TData)[]\n\n return keys.map((key) => {\n return helper.accessor<any, TValue>(key, {\n header: (header) => {\n const { column } = header\n const accessor = headerAccessor ? headerAccessor[key] : null\n\n return (\n <DataTableColumnHeader\n isSorted={column.getIsSorted() === 'desc'}\n nextSortingOrder={column.getNextSortingOrder()}\n toggleSorting={column.toggleSorting}\n canSort={column.getCanSort()}\n >\n {accessor ? accessor(key, header) : (key as string)}\n </DataTableColumnHeader>\n )\n },\n cell: (cell) => {\n const accessor = cellAccessor ? cellAccessor[key] : null\n\n return accessor ? accessor(cell) : cell.getValue()\n },\n enableColumnFilter: TypeGuards.isBoolean(enableColumnFilter) ? enableColumnFilter : enableColumnFilter.includes(key),\n enableSorting: TypeGuards.isBoolean(enableSorting) ? enableSorting : enableSorting.includes(key)\n })\n }) as ColumnDef<TData>[]\n }\n}\n"],"names":["TableUtils","createColumnHelper","template","options","helper","enableColumnFilter","enableSorting","cellAccessor","headerAccessor","key","header","column","accessor","jsx","DataTableColumnHeader","cell","TypeGuards"],"mappings":"gZAoBO,MAAMA,CAAW,CACtB,OAAO,iBAAyD,CAC9D,OAAOC,EAAA,
|
|
1
|
+
{"version":3,"file":"TableUtils.js","sources":["../../../../../../lib/shared/ui/table/model/TableUtils.tsx"],"sourcesContent":["import {\n type CellContext,\n type ColumnDef,\n type ColumnHelper,\n createColumnHelper,\n type HeaderContext\n} from '@tanstack/react-table'\nimport { DataTableColumnHeader } from '../ui'\nimport { TypeGuards } from '$/shared/utils'\n\ntype ColumnDefOptions<TData, TValue> = {\n enableSorting?: (keyof TData)[] | boolean\n enableColumnFilter?: (keyof TData)[] | boolean\n helper?: ColumnHelper<TData>\n cellAccessor?: Partial<Record<keyof TData, (cellContext: CellContext<TData, TValue>) => React.ReactNode>>\n headerAccessor?: Partial<\n Record<keyof TData, (key: keyof TData, headerContext: HeaderContext<TData, TValue>) => React.ReactNode>\n >\n}\n\nexport class TableUtils {\n static getColumnHelper<TData extends {}>(): ColumnHelper<TData> {\n return createColumnHelper<TData>()\n }\n\n static getColumns<TData extends {}, TValue = TData[keyof TData]>(\n template: TData,\n options?: ColumnDefOptions<TData, TValue>\n ): ColumnDef<TData>[] {\n const {\n helper = this.getColumnHelper<TData>(),\n enableColumnFilter = false,\n enableSorting = false,\n cellAccessor,\n headerAccessor\n } = options || {}\n\n const keys = Object.keys(template) as (keyof TData)[]\n\n return keys.map((key) => {\n return helper.accessor<any, TValue>(key, {\n header: (header) => {\n const { column } = header\n const accessor = headerAccessor ? headerAccessor[key] : null\n\n return (\n <DataTableColumnHeader\n isSorted={column.getIsSorted() === 'desc'}\n nextSortingOrder={column.getNextSortingOrder()}\n toggleSorting={column.toggleSorting}\n canSort={column.getCanSort()}\n >\n {accessor ? accessor(key, header) : (key as string)}\n </DataTableColumnHeader>\n )\n },\n cell: (cell) => {\n const accessor = cellAccessor ? cellAccessor[key] : null\n\n return accessor ? accessor(cell) : cell.getValue()\n },\n enableColumnFilter: TypeGuards.isBoolean(enableColumnFilter) ? enableColumnFilter : enableColumnFilter.includes(key),\n enableSorting: TypeGuards.isBoolean(enableSorting) ? enableSorting : enableSorting.includes(key)\n })\n }) as ColumnDef<TData>[]\n }\n}\n"],"names":["TableUtils","createColumnHelper","template","options","helper","enableColumnFilter","enableSorting","cellAccessor","headerAccessor","key","header","column","accessor","jsx","DataTableColumnHeader","cell","TypeGuards"],"mappings":"gZAoBO,MAAMA,CAAW,CACtB,OAAO,iBAAyD,CAC9D,OAAOC,EAAA,CACT,CAEA,OAAO,WACLC,EACAC,EACoB,CACpB,KAAM,CACJ,OAAAC,EAAS,KAAK,gBAAA,EACd,mBAAAC,EAAqB,GACrB,cAAAC,EAAgB,GAChB,aAAAC,EACA,eAAAC,CAAA,EACEL,GAAW,CAAA,EAIf,OAFa,OAAO,KAAKD,CAAQ,EAErB,IAAKO,GACRL,EAAO,SAAsBK,EAAK,CACvC,OAASC,GAAW,CAClB,KAAM,CAAE,OAAAC,GAAWD,EACbE,EAAWJ,EAAiBA,EAAeC,CAAG,EAAI,KAExD,OACEI,EAACC,EAAA,CACC,SAAUH,EAAO,YAAA,IAAkB,OACnC,iBAAkBA,EAAO,oBAAA,EACzB,cAAeA,EAAO,cACtB,QAASA,EAAO,WAAA,EAEf,SAAAC,EAAWA,EAASH,EAAKC,CAAM,EAAKD,CAAA,CAAA,CAG3C,EACA,KAAOM,GAAS,CACd,MAAMH,EAAWL,EAAeA,EAAaE,CAAG,EAAI,KAEpD,OAAOG,EAAWA,EAASG,CAAI,EAAIA,EAAK,SAAA,CAC1C,EACA,mBAAoBC,EAAW,UAAUX,CAAkB,EAAIA,EAAqBA,EAAmB,SAASI,CAAG,EACnH,cAAeO,EAAW,UAAUV,CAAa,EAAIA,EAAgBA,EAAc,SAASG,CAAG,CAAA,CAChG,CACF,CACH,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableCell.js","sources":["../../../../../../../lib/shared/ui/table/ui/editableCell/EditableCell.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport { type CellContext } from '@tanstack/react-table'\nimport { useClickOutside } from '$/shared/hooks'\n\ntype Cell<TData, TValue> = CellContext<TData, TValue> & { rowIndex?: number }\n\ninterface EditableCellProps<TData, TValue> extends Cell<TData, TValue> {\n target: keyof TData\n update: (target: number, values: TData) => void\n}\n\nexport const EditableCell = <TData, TValue extends string | undefined>({\n row,\n getValue,\n update,\n target,\n rowIndex = -1\n}: EditableCellProps<TData, TValue>) => {\n const [focused, setFocused] = useState<boolean>(false)\n const [value, setValue] = useState<TValue | string>(getValue())\n const changed = useRef<boolean>(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const { original } = row\n\n const onValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value)\n\n changed.current = true\n }\n\n const onInputBlur = () => {\n if (changed.current) {\n const updatedRow = { ...original, [target]: value }\n update(rowIndex, updatedRow)\n\n changed.current = false\n }\n\n setFocused(false)\n }\n\n useClickOutside(inputRef, onInputBlur)\n\n return focused ? (\n <input\n ref={inputRef}\n className='mr-2 w-full outline-none'\n type='text'\n value={value}\n onChange={onValueChange}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n\n onInputBlur()\n }\n }}\n />\n ) : (\n <p className='w-full' onClick={() => setFocused(true)}>\n {getValue()}\n </p>\n )\n}\n"],"names":["EditableCell","row","getValue","update","target","rowIndex","focused","setFocused","useState","value","setValue","changed","useRef","inputRef","original","onValueChange","event","onInputBlur","updatedRow","useClickOutside","jsx"],"mappings":"wLAWO,MAAMA,EAAe,CAA2C,CACrE,IAAAC,EACA,SAAAC,EACA,OAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,EACb,IAAwC,CACtC,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAkB,EAAK,EAC/C,CAACC,EAAOC,CAAQ,EAAIF,EAA0BN,GAAU,EACxDS,EAAUC,EAAgB,EAAK,EAE/BC,EAAWD,EAAyB,IAAI,EAExC,CAAE,SAAAE,GAAab,EAEfc,EAAiBC,GAA+C,CACpEN,EAASM,EAAM,OAAO,KAAK,EAE3BL,EAAQ,QAAU,
|
|
1
|
+
{"version":3,"file":"EditableCell.js","sources":["../../../../../../../lib/shared/ui/table/ui/editableCell/EditableCell.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport { type CellContext } from '@tanstack/react-table'\nimport { useClickOutside } from '$/shared/hooks'\n\ntype Cell<TData, TValue> = CellContext<TData, TValue> & { rowIndex?: number }\n\ninterface EditableCellProps<TData, TValue> extends Cell<TData, TValue> {\n target: keyof TData\n update: (target: number, values: TData) => void\n}\n\nexport const EditableCell = <TData, TValue extends string | undefined>({\n row,\n getValue,\n update,\n target,\n rowIndex = -1\n}: EditableCellProps<TData, TValue>) => {\n const [focused, setFocused] = useState<boolean>(false)\n const [value, setValue] = useState<TValue | string>(getValue())\n const changed = useRef<boolean>(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const { original } = row\n\n const onValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value)\n\n changed.current = true\n }\n\n const onInputBlur = () => {\n if (changed.current) {\n const updatedRow = { ...original, [target]: value }\n update(rowIndex, updatedRow)\n\n changed.current = false\n }\n\n setFocused(false)\n }\n\n useClickOutside(inputRef, onInputBlur)\n\n return focused ? (\n <input\n ref={inputRef}\n className='mr-2 w-full outline-none'\n type='text'\n value={value}\n onChange={onValueChange}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n\n onInputBlur()\n }\n }}\n />\n ) : (\n <p className='w-full' onClick={() => setFocused(true)}>\n {getValue()}\n </p>\n )\n}\n"],"names":["EditableCell","row","getValue","update","target","rowIndex","focused","setFocused","useState","value","setValue","changed","useRef","inputRef","original","onValueChange","event","onInputBlur","updatedRow","useClickOutside","jsx"],"mappings":"wLAWO,MAAMA,EAAe,CAA2C,CACrE,IAAAC,EACA,SAAAC,EACA,OAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,EACb,IAAwC,CACtC,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAkB,EAAK,EAC/C,CAACC,EAAOC,CAAQ,EAAIF,EAA0BN,GAAU,EACxDS,EAAUC,EAAgB,EAAK,EAE/BC,EAAWD,EAAyB,IAAI,EAExC,CAAE,SAAAE,GAAab,EAEfc,EAAiBC,GAA+C,CACpEN,EAASM,EAAM,OAAO,KAAK,EAE3BL,EAAQ,QAAU,EACpB,EAEMM,EAAc,IAAM,CACxB,GAAIN,EAAQ,QAAS,CACnB,MAAMO,EAAa,CAAE,GAAGJ,EAAU,CAACV,CAAM,EAAGK,CAAA,EAC5CN,EAAOE,EAAUa,CAAU,EAE3BP,EAAQ,QAAU,EACpB,CAEAJ,EAAW,EAAK,CAClB,EAEA,OAAAY,EAAgBN,EAAUI,CAAW,EAE9BX,EACLc,EAAC,QAAA,CACC,IAAKP,EACL,UAAU,2BACV,KAAK,OACL,MAAAJ,EACA,SAAUM,EACV,UAAYC,GAAU,CAChBA,EAAM,MAAQ,UAChBA,EAAM,eAAA,EAENC,EAAA,EAEJ,CAAA,CAAA,EAGFG,EAAC,IAAA,CAAE,UAAU,SAAS,QAAS,IAAMb,EAAW,EAAI,EACjD,SAAAL,EAAA,CAAS,CACZ,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localStorageActions.js","sources":["../../../../lib/shared/utils/localStorageActions.ts"],"sourcesContent":["import { TypeGuards } from './typeGuards'\n\nexport const localStorageActions = {\n setItem: <T>(key: string, value: T): void => {\n if (TypeGuards.isNil(value)) {\n return\n }\n const stringifiesPayload = JSON.stringify(value)\n localStorage.setItem(key, stringifiesPayload)\n },\n\n getItem: <T>(key: string): T | null => {\n const item = localStorage.getItem(key)\n\n if (TypeGuards.isNull(item)) {\n return null\n }\n\n try {\n return JSON.parse(item) as T\n } catch {\n return item as T\n }\n },\n\n clearItems: (...keys: string[]): void => {\n keys.forEach((key) => {\n localStorage.removeItem(key)\n })\n }\n}\n"],"names":["localStorageActions","key","value","TypeGuards","stringifiesPayload","item","keys"],"mappings":"6CAEO,MAAMA,EAAsB,CACjC,QAAS,CAAIC,EAAaC,IAAmB,CAC3C,GAAIC,EAAW,MAAMD,CAAK,EACxB,OAEF,MAAME,EAAqB,KAAK,UAAUF,CAAK,EAC/C,aAAa,QAAQD,EAAKG,CAAkB,
|
|
1
|
+
{"version":3,"file":"localStorageActions.js","sources":["../../../../lib/shared/utils/localStorageActions.ts"],"sourcesContent":["import { TypeGuards } from './typeGuards'\n\nexport const localStorageActions = {\n setItem: <T>(key: string, value: T): void => {\n if (TypeGuards.isNil(value)) {\n return\n }\n const stringifiesPayload = JSON.stringify(value)\n localStorage.setItem(key, stringifiesPayload)\n },\n\n getItem: <T>(key: string): T | null => {\n const item = localStorage.getItem(key)\n\n if (TypeGuards.isNull(item)) {\n return null\n }\n\n try {\n return JSON.parse(item) as T\n } catch {\n return item as T\n }\n },\n\n clearItems: (...keys: string[]): void => {\n keys.forEach((key) => {\n localStorage.removeItem(key)\n })\n }\n}\n"],"names":["localStorageActions","key","value","TypeGuards","stringifiesPayload","item","keys"],"mappings":"6CAEO,MAAMA,EAAsB,CACjC,QAAS,CAAIC,EAAaC,IAAmB,CAC3C,GAAIC,EAAW,MAAMD,CAAK,EACxB,OAEF,MAAME,EAAqB,KAAK,UAAUF,CAAK,EAC/C,aAAa,QAAQD,EAAKG,CAAkB,CAC9C,EAEA,QAAaH,GAA0B,CACrC,MAAMI,EAAO,aAAa,QAAQJ,CAAG,EAErC,GAAIE,EAAW,OAAOE,CAAI,EACxB,OAAO,KAGT,GAAI,CACF,OAAO,KAAK,MAAMA,CAAI,CACxB,MAAQ,CACN,OAAOA,CACT,CACF,EAEA,WAAY,IAAIC,IAAyB,CACvCA,EAAK,QAASL,GAAQ,CACpB,aAAa,WAAWA,CAAG,CAC7B,CAAC,CACH,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeRefs.js","sources":["../../../../lib/shared/utils/mergeRefs.ts"],"sourcesContent":["import type React from 'react'\n\nexport const mergeRefs = <T>(...inputRefs: (React.Ref<T> | undefined)[]): React.Ref<T> | React.RefCallback<T> => {\n const filteredInputRefs = inputRefs.filter(Boolean)\n\n if (filteredInputRefs.length <= 1) {\n const firstRef = filteredInputRefs[0]\n\n return firstRef || null\n }\n\n return function mergedRefs(ref) {\n filteredInputRefs.forEach((inputRef) => {\n if (typeof inputRef === 'function') {\n inputRef(ref)\n } else if (inputRef) {\n ;(inputRef as React.MutableRefObject<T | null>).current = ref\n }\n })\n }\n}\n"],"names":["mergeRefs","inputRefs","filteredInputRefs","ref","inputRef"],"mappings":"AAEO,MAAMA,EAAY,IAAOC,IAAiF,CAC/G,MAAMC,EAAoBD,EAAU,OAAO,OAAO,EAElD,OAAIC,EAAkB,QAAU,EACbA,EAAkB,CAAC,GAEjB,KAGd,SAAoBC,EAAK,CAC9BD,EAAkB,QAASE,GAAa,CAClC,OAAOA,GAAa,WACtBA,EAASD,CAAG,EACHC,IACPA,EAA8C,QAAUD,
|
|
1
|
+
{"version":3,"file":"mergeRefs.js","sources":["../../../../lib/shared/utils/mergeRefs.ts"],"sourcesContent":["import type React from 'react'\n\nexport const mergeRefs = <T>(...inputRefs: (React.Ref<T> | undefined)[]): React.Ref<T> | React.RefCallback<T> => {\n const filteredInputRefs = inputRefs.filter(Boolean)\n\n if (filteredInputRefs.length <= 1) {\n const firstRef = filteredInputRefs[0]\n\n return firstRef || null\n }\n\n return function mergedRefs(ref) {\n filteredInputRefs.forEach((inputRef) => {\n if (typeof inputRef === 'function') {\n inputRef(ref)\n } else if (inputRef) {\n ;(inputRef as React.MutableRefObject<T | null>).current = ref\n }\n })\n }\n}\n"],"names":["mergeRefs","inputRefs","filteredInputRefs","ref","inputRef"],"mappings":"AAEO,MAAMA,EAAY,IAAOC,IAAiF,CAC/G,MAAMC,EAAoBD,EAAU,OAAO,OAAO,EAElD,OAAIC,EAAkB,QAAU,EACbA,EAAkB,CAAC,GAEjB,KAGd,SAAoBC,EAAK,CAC9BD,EAAkB,QAASE,GAAa,CAClC,OAAOA,GAAa,WACtBA,EAASD,CAAG,EACHC,IACPA,EAA8C,QAAUD,EAE9D,CAAC,CACH,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollToElement.js","sources":["../../../../lib/shared/utils/scrollToElement.ts"],"sourcesContent":["import type { AllowedWidgets } from '$/widgets'\n\ntype ScrollConfig = {\n behavior?: ScrollBehavior\n block?: ScrollLogicalPosition\n}\n\ntype ScrollElement = {\n widgetId: AllowedWidgets\n config?: ScrollConfig\n}\n\nconst DEFAULT_SCROLL_CONFIG: Required<ScrollConfig> = {\n behavior: 'smooth',\n block: 'center'\n}\n\nexport const scrollToElement = ({ widgetId, config = {} }: ScrollElement) => {\n const { behavior, block } = { ...DEFAULT_SCROLL_CONFIG, ...config }\n\n const element = document.getElementById(widgetId)\n if (!element) {\n console.error('Такого элемента в DOM не существует', widgetId)\n return\n }\n\n element.scrollIntoView({ behavior, block })\n}\n"],"names":["DEFAULT_SCROLL_CONFIG","scrollToElement","widgetId","config","behavior","block","element"],"mappings":"AAYA,MAAMA,EAAgD,CACpD,SAAU,SACV,MAAO,QACT,EAEaC,EAAkB,CAAC,CAAE,SAAAC,EAAU,OAAAC,EAAS,CAAA,KAAwB,CAC3E,KAAM,CAAE,SAAAC,EAAU,MAAAC,CAAA,EAAU,CAAE,GAAGL,EAAuB,GAAGG,CAAA,EAErDG,EAAU,SAAS,eAAeJ,CAAQ,EAChD,GAAI,CAACI,EAAS,CACZ,QAAQ,MAAM,sCAAuCJ,CAAQ,EAC7D,
|
|
1
|
+
{"version":3,"file":"scrollToElement.js","sources":["../../../../lib/shared/utils/scrollToElement.ts"],"sourcesContent":["import type { AllowedWidgets } from '$/widgets'\n\ntype ScrollConfig = {\n behavior?: ScrollBehavior\n block?: ScrollLogicalPosition\n}\n\ntype ScrollElement = {\n widgetId: AllowedWidgets\n config?: ScrollConfig\n}\n\nconst DEFAULT_SCROLL_CONFIG: Required<ScrollConfig> = {\n behavior: 'smooth',\n block: 'center'\n}\n\nexport const scrollToElement = ({ widgetId, config = {} }: ScrollElement) => {\n const { behavior, block } = { ...DEFAULT_SCROLL_CONFIG, ...config }\n\n const element = document.getElementById(widgetId)\n if (!element) {\n console.error('Такого элемента в DOM не существует', widgetId)\n return\n }\n\n element.scrollIntoView({ behavior, block })\n}\n"],"names":["DEFAULT_SCROLL_CONFIG","scrollToElement","widgetId","config","behavior","block","element"],"mappings":"AAYA,MAAMA,EAAgD,CACpD,SAAU,SACV,MAAO,QACT,EAEaC,EAAkB,CAAC,CAAE,SAAAC,EAAU,OAAAC,EAAS,CAAA,KAAwB,CAC3E,KAAM,CAAE,SAAAC,EAAU,MAAAC,CAAA,EAAU,CAAE,GAAGL,EAAuB,GAAGG,CAAA,EAErDG,EAAU,SAAS,eAAeJ,CAAQ,EAChD,GAAI,CAACI,EAAS,CACZ,QAAQ,MAAM,sCAAuCJ,CAAQ,EAC7D,MACF,CAEAI,EAAQ,eAAe,CAAE,SAAAF,EAAU,MAAAC,CAAA,CAAO,CAC5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionStorage.js","sources":["../../../../lib/shared/utils/sessionStorage.ts"],"sourcesContent":["import { TypeGuards } from './typeGuards'\nimport { isClient } from '$/shared/utils/isClient'\n\nexport const sessionStorageActions = {\n setItem: <T>(key: string, value: T): void => {\n if (!isClient) {\n return console.warn('Session storage can be used only in client side')\n }\n\n if (TypeGuards.isNil(value)) return\n\n const payload = JSON.stringify(value)\n\n sessionStorage.setItem(key, payload)\n },\n getItem: <T>(key: string): T | null => {\n if (!isClient) {\n console.warn('Session storage can be used only in client side')\n return null\n }\n\n const item = sessionStorage.getItem(key)\n\n if (TypeGuards.isNull(item)) return null\n\n try {\n return JSON.parse(item) as T\n } catch {\n return item as T\n }\n },\n clearItems: (...keys: string[]): void => {\n keys.forEach((key) => {\n sessionStorage.removeItem(key)\n })\n }\n}\n"],"names":["sessionStorageActions","key","value","isClient","TypeGuards","payload","item","keys"],"mappings":"sFAGO,MAAMA,EAAwB,CACnC,QAAS,CAAIC,EAAaC,IAAmB,CAC3C,GAAI,CAACC,EACH,OAAO,QAAQ,KAAK,iDAAiD,EAGvE,GAAIC,EAAW,MAAMF,CAAK,EAAG,OAE7B,MAAMG,EAAU,KAAK,UAAUH,CAAK,EAEpC,eAAe,QAAQD,EAAKI,CAAO,
|
|
1
|
+
{"version":3,"file":"sessionStorage.js","sources":["../../../../lib/shared/utils/sessionStorage.ts"],"sourcesContent":["import { TypeGuards } from './typeGuards'\nimport { isClient } from '$/shared/utils/isClient'\n\nexport const sessionStorageActions = {\n setItem: <T>(key: string, value: T): void => {\n if (!isClient) {\n return console.warn('Session storage can be used only in client side')\n }\n\n if (TypeGuards.isNil(value)) return\n\n const payload = JSON.stringify(value)\n\n sessionStorage.setItem(key, payload)\n },\n getItem: <T>(key: string): T | null => {\n if (!isClient) {\n console.warn('Session storage can be used only in client side')\n return null\n }\n\n const item = sessionStorage.getItem(key)\n\n if (TypeGuards.isNull(item)) return null\n\n try {\n return JSON.parse(item) as T\n } catch {\n return item as T\n }\n },\n clearItems: (...keys: string[]): void => {\n keys.forEach((key) => {\n sessionStorage.removeItem(key)\n })\n }\n}\n"],"names":["sessionStorageActions","key","value","isClient","TypeGuards","payload","item","keys"],"mappings":"sFAGO,MAAMA,EAAwB,CACnC,QAAS,CAAIC,EAAaC,IAAmB,CAC3C,GAAI,CAACC,EACH,OAAO,QAAQ,KAAK,iDAAiD,EAGvE,GAAIC,EAAW,MAAMF,CAAK,EAAG,OAE7B,MAAMG,EAAU,KAAK,UAAUH,CAAK,EAEpC,eAAe,QAAQD,EAAKI,CAAO,CACrC,EACA,QAAaJ,GAA0B,CACrC,GAAI,CAACE,EACH,eAAQ,KAAK,iDAAiD,EACvD,KAGT,MAAMG,EAAO,eAAe,QAAQL,CAAG,EAEvC,GAAIG,EAAW,OAAOE,CAAI,EAAG,OAAO,KAEpC,GAAI,CACF,OAAO,KAAK,MAAMA,CAAI,CACxB,MAAQ,CACN,OAAOA,CACT,CACF,EACA,WAAY,IAAIC,IAAyB,CACvCA,EAAK,QAASN,GAAQ,CACpB,eAAe,WAAWA,CAAG,CAC/B,CAAC,CACH,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeGuards.js","sources":["../../../../lib/shared/utils/typeGuards.ts"],"sourcesContent":["export class TypeGuards {\n static isString(value: unknown): value is string {\n return typeof value === 'string'\n }\n\n static isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean'\n }\n\n static isStringEmpty(value: unknown): value is string {\n return this.isString(value) && !value.length\n }\n\n static isNull(value: unknown): value is null {\n return value === null\n }\n\n static isUndefined(value: unknown): value is undefined {\n return value === undefined && typeof value === 'undefined'\n }\n\n static isNil(value: unknown): value is boolean {\n return this.isNull(value) || this.isUndefined(value)\n }\n\n static isArray(value: unknown): value is unknown[] {\n return Array.isArray(value)\n }\n\n static isArrayEmpty(value: unknown): value is boolean {\n return this.isArray(value) && !value.length\n }\n\n static isArrayFilled(value: unknown): value is boolean {\n return Array.isArray(value) && value.length > 0\n }\n\n static isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n }\n\n static isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === 'function'\n }\n\n static isObjectEmpty(value: unknown): value is Record<string, never> {\n return this.isObject(value) && Object.keys(value).length === 0\n }\n}\n"],"names":["TypeGuards","value"],"mappings":"AAAO,MAAMA,CAAW,CACtB,OAAO,SAASC,EAAiC,CAC/C,OAAO,OAAOA,GAAU,
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sources":["../../../../lib/shared/utils/typeGuards.ts"],"sourcesContent":["export class TypeGuards {\n static isString(value: unknown): value is string {\n return typeof value === 'string'\n }\n\n static isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean'\n }\n\n static isStringEmpty(value: unknown): value is string {\n return this.isString(value) && !value.length\n }\n\n static isNull(value: unknown): value is null {\n return value === null\n }\n\n static isUndefined(value: unknown): value is undefined {\n return value === undefined && typeof value === 'undefined'\n }\n\n static isNil(value: unknown): value is boolean {\n return this.isNull(value) || this.isUndefined(value)\n }\n\n static isArray(value: unknown): value is unknown[] {\n return Array.isArray(value)\n }\n\n static isArrayEmpty(value: unknown): value is boolean {\n return this.isArray(value) && !value.length\n }\n\n static isArrayFilled(value: unknown): value is boolean {\n return Array.isArray(value) && value.length > 0\n }\n\n static isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n }\n\n static isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === 'function'\n }\n\n static isObjectEmpty(value: unknown): value is Record<string, never> {\n return this.isObject(value) && Object.keys(value).length === 0\n }\n}\n"],"names":["TypeGuards","value"],"mappings":"AAAO,MAAMA,CAAW,CACtB,OAAO,SAASC,EAAiC,CAC/C,OAAO,OAAOA,GAAU,QAC1B,CAEA,OAAO,UAAUA,EAAkC,CACjD,OAAO,OAAOA,GAAU,SAC1B,CAEA,OAAO,cAAcA,EAAiC,CACpD,OAAO,KAAK,SAASA,CAAK,GAAK,CAACA,EAAM,MACxC,CAEA,OAAO,OAAOA,EAA+B,CAC3C,OAAOA,IAAU,IACnB,CAEA,OAAO,YAAYA,EAAoC,CACrD,OAAOA,IAAU,QAAa,OAAOA,EAAU,GACjD,CAEA,OAAO,MAAMA,EAAkC,CAC7C,OAAO,KAAK,OAAOA,CAAK,GAAK,KAAK,YAAYA,CAAK,CACrD,CAEA,OAAO,QAAQA,EAAoC,CACjD,OAAO,MAAM,QAAQA,CAAK,CAC5B,CAEA,OAAO,aAAaA,EAAkC,CACpD,OAAO,KAAK,QAAQA,CAAK,GAAK,CAACA,EAAM,MACvC,CAEA,OAAO,cAAcA,EAAkC,CACrD,OAAO,MAAM,QAAQA,CAAK,GAAKA,EAAM,OAAS,CAChD,CAEA,OAAO,SAASA,EAAkD,CAChE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,CAC5E,CAEA,OAAO,WAAWA,EAA0D,CAC1E,OAAO,OAAOA,GAAU,UAC1B,CAEA,OAAO,cAAcA,EAAgD,CACnE,OAAO,KAAK,SAASA,CAAK,GAAK,OAAO,KAAKA,CAAK,EAAE,SAAW,CAC/D,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.constants.js","sources":["../../../../../lib/shared/validation/base/base.constants.ts"],"sourcesContent":["import { type Primitive } from 'zod'\nimport { formatDateToLocaleString } from '$/shared/ui'\nimport { TypeGuards } from '$/shared/utils'\n\nexport const baseDefaultMessages = {\n NON_EMPTY: () => 'Поле не может быть пустым',\n MIN_LENGTH: (min: number) => `Поле должно содержать минимум символов: ${min}`,\n MAX_LENGTH: (max: number) => `Поле должно содержать максимум символов: ${max}`,\n FIX_LENGTH: (length: number) => `Поле должно быть фиксированной длины символов: ${length}`,\n MIN_VALUE: (min: number) => `Значение не может быть меньше чем ${min}`,\n MAX_VALUE: (max: number) => `Значение не может быть больше чем ${max}`,\n PHONE_NON_EMPTY: () => 'Номер телефона должен состоять из 11 цифр',\n PHONE_INVALID_OPERATOR: () => 'Код города/оператора должен начинаться с цифры 3, 4, 5, 6 или 9',\n EMAIL_INVALID: () => 'Email введен некорректно. Пример: example@domain.ru',\n EMAIL_NON_EMPTY: () => 'Введите адрес электронной почты',\n SELECT_NON_EMPTY: () => 'Выберите один из вариантов',\n SELECT_MULTIPLE_MIN_LENGTH: (length: number) => `Выберите не менее ${length} вариантов`,\n SELECT_MULTIPLE_MAX_LENGTH: (length: number) => `Выберите не более ${length} вариантов`,\n SELECT_FIX_LENGTH: (length: number) => `Поле должно быть фиксированного количества вариантов: ${length}`,\n DATE_INVALID_FORMAT: () => 'Дата указана некорректно',\n DATE_NON_EMPTY: () => 'Укажите дату',\n VALUE_OUT_OF_RANGE: <T extends Primitive>(range: T[]) => `Выберите один из вариантов ${range.join(', ')}`,\n DATE_MIN: (min: Date | string) => {\n const date = TypeGuards.isString(min) ? new Date(min) : min\n\n return `Выбранная дата должна быть не раньше ${formatDateToLocaleString(date)}`\n },\n DATE_MAX: (max: Date | string) => {\n const date = TypeGuards.isString(max) ? new Date(max) : max\n\n return `Выбранная дата должна быть не позже ${formatDateToLocaleString(date)}`\n },\n INVALID_REGEX_STRING: () => 'Поле не соответствует требованиям',\n INVALID_URL: () => 'Ссылка введена некорректно. Пример: https://example.com, example.com'\n}\n"],"names":["baseDefaultMessages","min","max","length","range","date","TypeGuards","formatDateToLocaleString"],"mappings":"8nDAIO,MAAMA,EAAsB,CACjC,UAAW,IAAM,4BACjB,WAAaC,GAAgB,2CAA2CA,CAAG,GAC3E,WAAaC,GAAgB,4CAA4CA,CAAG,GAC5E,WAAaC,GAAmB,kDAAkDA,CAAM,GACxF,UAAYF,GAAgB,qCAAqCA,CAAG,GACpE,UAAYC,GAAgB,qCAAqCA,CAAG,GACpE,gBAAiB,IAAM,4CACvB,uBAAwB,IAAM,kEAC9B,cAAe,IAAM,sDACrB,gBAAiB,IAAM,kCACvB,iBAAkB,IAAM,6BACxB,2BAA6BC,GAAmB,qBAAqBA,CAAM,aAC3E,2BAA6BA,GAAmB,qBAAqBA,CAAM,aAC3E,kBAAoBA,GAAmB,yDAAyDA,CAAM,GACtG,oBAAqB,IAAM,2BAC3B,eAAgB,IAAM,eACtB,mBAA0CC,GAAe,8BAA8BA,EAAM,KAAK,IAAI,CAAC,GACvG,SAAWH,GAAuB,CAChC,MAAMI,EAAOC,EAAW,SAASL,CAAG,EAAI,IAAI,KAAKA,CAAG,EAAIA,EAExD,MAAO,wCAAwCM,EAAyBF,CAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"base.constants.js","sources":["../../../../../lib/shared/validation/base/base.constants.ts"],"sourcesContent":["import { type Primitive } from 'zod'\nimport { formatDateToLocaleString } from '$/shared/ui'\nimport { TypeGuards } from '$/shared/utils'\n\nexport const baseDefaultMessages = {\n NON_EMPTY: () => 'Поле не может быть пустым',\n MIN_LENGTH: (min: number) => `Поле должно содержать минимум символов: ${min}`,\n MAX_LENGTH: (max: number) => `Поле должно содержать максимум символов: ${max}`,\n FIX_LENGTH: (length: number) => `Поле должно быть фиксированной длины символов: ${length}`,\n MIN_VALUE: (min: number) => `Значение не может быть меньше чем ${min}`,\n MAX_VALUE: (max: number) => `Значение не может быть больше чем ${max}`,\n PHONE_NON_EMPTY: () => 'Номер телефона должен состоять из 11 цифр',\n PHONE_INVALID_OPERATOR: () => 'Код города/оператора должен начинаться с цифры 3, 4, 5, 6 или 9',\n EMAIL_INVALID: () => 'Email введен некорректно. Пример: example@domain.ru',\n EMAIL_NON_EMPTY: () => 'Введите адрес электронной почты',\n SELECT_NON_EMPTY: () => 'Выберите один из вариантов',\n SELECT_MULTIPLE_MIN_LENGTH: (length: number) => `Выберите не менее ${length} вариантов`,\n SELECT_MULTIPLE_MAX_LENGTH: (length: number) => `Выберите не более ${length} вариантов`,\n SELECT_FIX_LENGTH: (length: number) => `Поле должно быть фиксированного количества вариантов: ${length}`,\n DATE_INVALID_FORMAT: () => 'Дата указана некорректно',\n DATE_NON_EMPTY: () => 'Укажите дату',\n VALUE_OUT_OF_RANGE: <T extends Primitive>(range: T[]) => `Выберите один из вариантов ${range.join(', ')}`,\n DATE_MIN: (min: Date | string) => {\n const date = TypeGuards.isString(min) ? new Date(min) : min\n\n return `Выбранная дата должна быть не раньше ${formatDateToLocaleString(date)}`\n },\n DATE_MAX: (max: Date | string) => {\n const date = TypeGuards.isString(max) ? new Date(max) : max\n\n return `Выбранная дата должна быть не позже ${formatDateToLocaleString(date)}`\n },\n INVALID_REGEX_STRING: () => 'Поле не соответствует требованиям',\n INVALID_URL: () => 'Ссылка введена некорректно. Пример: https://example.com, example.com'\n}\n"],"names":["baseDefaultMessages","min","max","length","range","date","TypeGuards","formatDateToLocaleString"],"mappings":"8nDAIO,MAAMA,EAAsB,CACjC,UAAW,IAAM,4BACjB,WAAaC,GAAgB,2CAA2CA,CAAG,GAC3E,WAAaC,GAAgB,4CAA4CA,CAAG,GAC5E,WAAaC,GAAmB,kDAAkDA,CAAM,GACxF,UAAYF,GAAgB,qCAAqCA,CAAG,GACpE,UAAYC,GAAgB,qCAAqCA,CAAG,GACpE,gBAAiB,IAAM,4CACvB,uBAAwB,IAAM,kEAC9B,cAAe,IAAM,sDACrB,gBAAiB,IAAM,kCACvB,iBAAkB,IAAM,6BACxB,2BAA6BC,GAAmB,qBAAqBA,CAAM,aAC3E,2BAA6BA,GAAmB,qBAAqBA,CAAM,aAC3E,kBAAoBA,GAAmB,yDAAyDA,CAAM,GACtG,oBAAqB,IAAM,2BAC3B,eAAgB,IAAM,eACtB,mBAA0CC,GAAe,8BAA8BA,EAAM,KAAK,IAAI,CAAC,GACvG,SAAWH,GAAuB,CAChC,MAAMI,EAAOC,EAAW,SAASL,CAAG,EAAI,IAAI,KAAKA,CAAG,EAAIA,EAExD,MAAO,wCAAwCM,EAAyBF,CAAI,CAAC,EAC/E,EACA,SAAWH,GAAuB,CAChC,MAAMG,EAAOC,EAAW,SAASJ,CAAG,EAAI,IAAI,KAAKA,CAAG,EAAIA,EAExD,MAAO,uCAAuCK,EAAyBF,CAAI,CAAC,EAC9E,EACA,qBAAsB,IAAM,oCAC5B,YAAa,IAAM,sEACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.validators.js","sources":["../../../../../lib/shared/validation/base/date.validators.ts"],"sourcesContent":["import { isValid, parse } from 'date-fns'\nimport z from 'zod'\nimport { baseDefaultMessages } from './base.constants'\nimport { DATE_VISIBLE_PATTERN } from '$/shared/ui'\nimport { TypeGuards } from '$/shared/utils'\n\nexport type DateValidationOptions<Required extends boolean> = {\n /**\n * валидация строки с учетом ISO формата\n * @default true\n */\n iso?: boolean\n /**\n * шаблон для валидации строки (будет проигнорирован, если `iso = true`)\n * @default 'dd.MM.yyyy'\n */\n pattern?: string\n /**\n * минимальная дата\n * `Date | ISO string`\n */\n min?: Date | string\n /**\n * максимальная дата\n * `Date | ISO string`\n */\n max?: Date | string\n /**\n * указывает что поле обязательное\n */\n required?: Required\n /**\n * значение по умолчанию\n * @default undefined\n */\n defaultValue?: string\n message?: {\n min?: string\n max?: string\n invalidDate?: string\n }\n}\n\n/**\n * Схема валидации обязательного поля даты\n */\nconst getDateRequired = (props?: Omit<DateValidationOptions<boolean>, 'required'>) => {\n const { iso = true, pattern = DATE_VISIBLE_PATTERN, min, max, defaultValue, message } = props || {}\n\n return z\n .string()\n .min(8, message?.min || baseDefaultMessages.DATE_NON_EMPTY())\n .superRefine((value, context) => {\n const validSymbolsLength = pattern.replace(/\\W/g, '').length\n const cleanedValue = value.replace(/[._-]/g, '')\n\n if (cleanedValue.length < validSymbolsLength) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: validSymbolsLength,\n type: 'date',\n inclusive: true,\n message: message?.min || baseDefaultMessages.DATE_NON_EMPTY()\n })\n }\n\n if (iso) {\n let date: Date | null = null\n\n try {\n date = new Date(value)\n } catch {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date!.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date!.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n } else {\n const date = parse(value, pattern, new Date())\n\n if (!isValid(date)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n }\n })\n .default(defaultValue ?? '')\n}\ntype DateRequiredSchema = ReturnType<typeof getDateRequired>\n\n/**\n * Схема валидации опционального поля даты\n */\nconst getDateOptional = (props?: Omit<DateValidationOptions<boolean>, 'required'>) => {\n const { iso = true, pattern = DATE_VISIBLE_PATTERN, min, max, message } = props || {}\n\n return z\n .string()\n .transform((value) => (!value ? undefined : value))\n .superRefine((value, context) => {\n if (TypeGuards.isString(value) && Boolean(value.length)) {\n const validSymbolsLength = pattern.replace(/\\W/g, '').length\n const cleanedValue = value.replace(/[._-]/g, '')\n\n if (cleanedValue.length < validSymbolsLength) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: validSymbolsLength,\n type: 'date',\n inclusive: true,\n message: message?.min || baseDefaultMessages.DATE_NON_EMPTY()\n })\n }\n\n if (iso) {\n let date: Date | null = null\n\n try {\n date = new Date(value)\n } catch {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date!.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date!.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n } else {\n const date = parse(value, pattern, new Date())\n\n if (!isValid(date)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n }\n }\n })\n .optional()\n}\ntype DateOptionalSchema = ReturnType<typeof getDateOptional>\n\n/**\n * Схема валидации поля даты\n * @param {DateValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @typeParam `iso` - `boolean | undefined`\n * @typeParam `pattern` - `string | undefined`\n * @typeParam `message` - `{ [min | invalidOperator]: string }`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getDateSchema()\n * })\n * // will returns z.string()\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getDateSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getDateSchema(props?: DateValidationOptions<true>): DateRequiredSchema\nexport function getDateSchema(props?: DateValidationOptions<false>): DateOptionalSchema\nexport function getDateSchema<Required extends boolean>(\n props?: DateValidationOptions<Required>\n): DateRequiredSchema | DateOptionalSchema {\n const { required = true } = props || {}\n\n return required ? getDateRequired(props) : getDateOptional(props)\n}\n"],"names":["getDateRequired","props","iso","pattern","DATE_VISIBLE_PATTERN","min","max","defaultValue","message","z","baseDefaultMessages","value","context","validSymbolsLength","date","TypeGuards","parse","isValid","getDateOptional","getDateSchema","required"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date.validators.js","sources":["../../../../../lib/shared/validation/base/date.validators.ts"],"sourcesContent":["import { isValid, parse } from 'date-fns'\nimport z from 'zod'\nimport { baseDefaultMessages } from './base.constants'\nimport { DATE_VISIBLE_PATTERN } from '$/shared/ui'\nimport { TypeGuards } from '$/shared/utils'\n\nexport type DateValidationOptions<Required extends boolean> = {\n /**\n * валидация строки с учетом ISO формата\n * @default true\n */\n iso?: boolean\n /**\n * шаблон для валидации строки (будет проигнорирован, если `iso = true`)\n * @default 'dd.MM.yyyy'\n */\n pattern?: string\n /**\n * минимальная дата\n * `Date | ISO string`\n */\n min?: Date | string\n /**\n * максимальная дата\n * `Date | ISO string`\n */\n max?: Date | string\n /**\n * указывает что поле обязательное\n */\n required?: Required\n /**\n * значение по умолчанию\n * @default undefined\n */\n defaultValue?: string\n message?: {\n min?: string\n max?: string\n invalidDate?: string\n }\n}\n\n/**\n * Схема валидации обязательного поля даты\n */\nconst getDateRequired = (props?: Omit<DateValidationOptions<boolean>, 'required'>) => {\n const { iso = true, pattern = DATE_VISIBLE_PATTERN, min, max, defaultValue, message } = props || {}\n\n return z\n .string()\n .min(8, message?.min || baseDefaultMessages.DATE_NON_EMPTY())\n .superRefine((value, context) => {\n const validSymbolsLength = pattern.replace(/\\W/g, '').length\n const cleanedValue = value.replace(/[._-]/g, '')\n\n if (cleanedValue.length < validSymbolsLength) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: validSymbolsLength,\n type: 'date',\n inclusive: true,\n message: message?.min || baseDefaultMessages.DATE_NON_EMPTY()\n })\n }\n\n if (iso) {\n let date: Date | null = null\n\n try {\n date = new Date(value)\n } catch {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date!.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date!.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n } else {\n const date = parse(value, pattern, new Date())\n\n if (!isValid(date)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n }\n })\n .default(defaultValue ?? '')\n}\ntype DateRequiredSchema = ReturnType<typeof getDateRequired>\n\n/**\n * Схема валидации опционального поля даты\n */\nconst getDateOptional = (props?: Omit<DateValidationOptions<boolean>, 'required'>) => {\n const { iso = true, pattern = DATE_VISIBLE_PATTERN, min, max, message } = props || {}\n\n return z\n .string()\n .transform((value) => (!value ? undefined : value))\n .superRefine((value, context) => {\n if (TypeGuards.isString(value) && Boolean(value.length)) {\n const validSymbolsLength = pattern.replace(/\\W/g, '').length\n const cleanedValue = value.replace(/[._-]/g, '')\n\n if (cleanedValue.length < validSymbolsLength) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: validSymbolsLength,\n type: 'date',\n inclusive: true,\n message: message?.min || baseDefaultMessages.DATE_NON_EMPTY()\n })\n }\n\n if (iso) {\n let date: Date | null = null\n\n try {\n date = new Date(value)\n } catch {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date!.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date!.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n } else {\n const date = parse(value, pattern, new Date())\n\n if (!isValid(date)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.invalidDate || baseDefaultMessages.DATE_INVALID_FORMAT()\n })\n }\n\n if (min) {\n if (date.getTime() < (TypeGuards.isString(min) ? new Date(min).getTime() : min.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.min || baseDefaultMessages.DATE_MIN(min)\n })\n }\n }\n\n if (max) {\n if (date.getTime() > (TypeGuards.isString(max) ? new Date(max).getTime() : max.getTime())) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_date,\n message: message?.max || baseDefaultMessages.DATE_MAX(max)\n })\n }\n }\n }\n }\n })\n .optional()\n}\ntype DateOptionalSchema = ReturnType<typeof getDateOptional>\n\n/**\n * Схема валидации поля даты\n * @param {DateValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @typeParam `iso` - `boolean | undefined`\n * @typeParam `pattern` - `string | undefined`\n * @typeParam `message` - `{ [min | invalidOperator]: string }`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getDateSchema()\n * })\n * // will returns z.string()\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getDateSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getDateSchema(props?: DateValidationOptions<true>): DateRequiredSchema\nexport function getDateSchema(props?: DateValidationOptions<false>): DateOptionalSchema\nexport function getDateSchema<Required extends boolean>(\n props?: DateValidationOptions<Required>\n): DateRequiredSchema | DateOptionalSchema {\n const { required = true } = props || {}\n\n return required ? getDateRequired(props) : getDateOptional(props)\n}\n"],"names":["getDateRequired","props","iso","pattern","DATE_VISIBLE_PATTERN","min","max","defaultValue","message","z","baseDefaultMessages","value","context","validSymbolsLength","date","TypeGuards","parse","isValid","getDateOptional","getDateSchema","required"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phone.validators.js","sources":["../../../../../lib/shared/validation/base/phone.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { baseDefaultMessages } from './base.constants'\nimport { TypeGuards } from '$/shared/utils'\n\nexport type PhoneValidationOptions<Required extends boolean> = {\n /**\n * исключает маску в возвращаемом значении\n * @default true\n */\n ignoreMask?: boolean\n /**\n * игнорирует символы для проверки поля исключая данные символы\n * @default /[()+_ -]/g\n */\n maskSymbols?: RegExp | string\n /**\n * указывает что поле обязательное\n */\n required?: Required\n /**\n * значение по умолчанию\n * @default undefined\n */\n defaultValue?: string\n message?: {\n min?: string\n invalidOperator?: string\n }\n /**\n * указываем валидные коды оператор\n * @default ['3', '4', '5', '6', '9']\n * @param string[]\n */\n validOperatorCodes?: string[]\n}\n\n/**\n * Схема валидации обязательного поля номера телефона\n */\nconst getPhoneRequired = (props?: Omit<PhoneValidationOptions<true>, 'required'>) => {\n const {\n ignoreMask = true,\n maskSymbols = /[()+_ -]/g,\n message,\n defaultValue,\n validOperatorCodes = ['3', '4', '5', '6', '9']\n } = props || {}\n\n const mask = TypeGuards.isString(maskSymbols) ? new RegExp(maskSymbols) : maskSymbols\n\n let schema = z.string().superRefine((value, context) => {\n const cleanValue = value.replace(mask, '')\n\n const operatorCode = cleanValue.charAt(1)\n\n if (!validOperatorCodes.includes(operatorCode)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: message?.invalidOperator || baseDefaultMessages.PHONE_INVALID_OPERATOR()\n })\n }\n\n if (cleanValue.length < 11) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: 11,\n inclusive: true,\n type: 'string',\n message: message?.min || baseDefaultMessages.PHONE_NON_EMPTY()\n })\n }\n })\n\n if (ignoreMask) {\n schema = schema.transform((value) => value.replace(mask, '')) as unknown as typeof schema\n }\n\n return schema.default(defaultValue ?? '')\n}\ntype PhoneRequiredSchema = ReturnType<typeof getPhoneRequired>\n\n/**\n * Схема валидации опционального поля номера телефона\n */\nconst getPhoneOptional = (props?: Omit<PhoneValidationOptions<false>, 'required'>) => {\n const { ignoreMask = true, maskSymbols = /[()+_ -]/g, message, validOperatorCodes = ['3', '4', '5', '6', '9'] } = props || {}\n\n const mask = TypeGuards.isString(maskSymbols) ? new RegExp(maskSymbols) : maskSymbols\n\n let schema = z.string().superRefine((value, context) => {\n const cleanValue = value.replace(mask, '')\n\n if (!cleanValue.length) return\n\n const operatorCode = cleanValue.charAt(1)\n\n if (!validOperatorCodes.includes(operatorCode)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: message?.invalidOperator || baseDefaultMessages.PHONE_INVALID_OPERATOR()\n })\n }\n\n if (cleanValue.length < 11) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: 11,\n inclusive: true,\n type: 'string',\n message: message?.min || baseDefaultMessages.PHONE_NON_EMPTY()\n })\n }\n })\n\n if (ignoreMask) {\n schema = schema.transform((value) => value.replace(mask, '')) as unknown as typeof schema\n }\n\n return schema.optional().transform((value) => (!value || value?.replace(mask, '').length !== 0 ? undefined : value))\n}\ntype PhoneOptionalSchema = ReturnType<typeof getPhoneOptional>\n\n/**\n * Схема валидации опционального поля номера телефона\n * @param {PhoneValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @typeParam `ignoreSeparators` - `boolean | undefined` `default: false`\n * @typeParam `maskSymbols` - `RegExp | undefined` `default: /[()+_ -]/g`\n * @typeParam `message` - `{ [min | invalidOperator]: string }`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getPhoneSchema()\n * })\n * // will returns z.string()\n *\n * @example with optional value\n * z.object({\n * field: zodValidators.base.getPhoneSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getPhoneSchema(props?: PhoneValidationOptions<true>): PhoneRequiredSchema\nexport function getPhoneSchema(props?: PhoneValidationOptions<false>): PhoneOptionalSchema\nexport function getPhoneSchema<Required extends boolean>(\n props?: PhoneValidationOptions<Required>\n): PhoneRequiredSchema | PhoneOptionalSchema {\n const { required = true } = props || {}\n\n return required ? getPhoneRequired(props) : getPhoneOptional(props)\n}\n"],"names":["getPhoneRequired","props","ignoreMask","maskSymbols","message","defaultValue","validOperatorCodes","mask","TypeGuards","schema","z","value","context","cleanValue","operatorCode","baseDefaultMessages","getPhoneOptional","getPhoneSchema","required"],"mappings":"sMAuCA,MAAMA,EAAoBC,GAA2D,CACnF,KAAM,CACJ,WAAAC,EAAa,GACb,YAAAC,EAAc,YACd,QAAAC,EACA,aAAAC,EACA,mBAAAC,EAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAA,EAC3CL,GAAS,CAAA,EAEPM,EAAOC,EAAW,SAASL,CAAW,EAAI,IAAI,OAAOA,CAAW,EAAIA,EAE1E,IAAIM,EAASC,EAAE,OAAA,EAAS,YAAY,CAACC,EAAOC,IAAY,CACtD,MAAMC,EAAaF,EAAM,QAAQJ,EAAM,EAAE,EAEnCO,EAAeD,EAAW,OAAO,CAAC,EAEnCP,EAAmB,SAASQ,CAAY,GAC3CF,EAAQ,SAAS,CACf,KAAMF,EAAE,aAAa,eACrB,WAAY,QACZ,SAASN,GAAA,YAAAA,EAAS,kBAAmBW,EAAoB,uBAAA,CAAuB,CACjF,EAGCF,EAAW,OAAS,IACtBD,EAAQ,SAAS,CACf,KAAMF,EAAE,aAAa,UACrB,QAAS,GACT,UAAW,GACX,KAAM,SACN,SAASN,GAAA,YAAAA,EAAS,MAAOW,EAAoB,gBAAA,CAAgB,CAC9D,
|
|
1
|
+
{"version":3,"file":"phone.validators.js","sources":["../../../../../lib/shared/validation/base/phone.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { baseDefaultMessages } from './base.constants'\nimport { TypeGuards } from '$/shared/utils'\n\nexport type PhoneValidationOptions<Required extends boolean> = {\n /**\n * исключает маску в возвращаемом значении\n * @default true\n */\n ignoreMask?: boolean\n /**\n * игнорирует символы для проверки поля исключая данные символы\n * @default /[()+_ -]/g\n */\n maskSymbols?: RegExp | string\n /**\n * указывает что поле обязательное\n */\n required?: Required\n /**\n * значение по умолчанию\n * @default undefined\n */\n defaultValue?: string\n message?: {\n min?: string\n invalidOperator?: string\n }\n /**\n * указываем валидные коды оператор\n * @default ['3', '4', '5', '6', '9']\n * @param string[]\n */\n validOperatorCodes?: string[]\n}\n\n/**\n * Схема валидации обязательного поля номера телефона\n */\nconst getPhoneRequired = (props?: Omit<PhoneValidationOptions<true>, 'required'>) => {\n const {\n ignoreMask = true,\n maskSymbols = /[()+_ -]/g,\n message,\n defaultValue,\n validOperatorCodes = ['3', '4', '5', '6', '9']\n } = props || {}\n\n const mask = TypeGuards.isString(maskSymbols) ? new RegExp(maskSymbols) : maskSymbols\n\n let schema = z.string().superRefine((value, context) => {\n const cleanValue = value.replace(mask, '')\n\n const operatorCode = cleanValue.charAt(1)\n\n if (!validOperatorCodes.includes(operatorCode)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: message?.invalidOperator || baseDefaultMessages.PHONE_INVALID_OPERATOR()\n })\n }\n\n if (cleanValue.length < 11) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: 11,\n inclusive: true,\n type: 'string',\n message: message?.min || baseDefaultMessages.PHONE_NON_EMPTY()\n })\n }\n })\n\n if (ignoreMask) {\n schema = schema.transform((value) => value.replace(mask, '')) as unknown as typeof schema\n }\n\n return schema.default(defaultValue ?? '')\n}\ntype PhoneRequiredSchema = ReturnType<typeof getPhoneRequired>\n\n/**\n * Схема валидации опционального поля номера телефона\n */\nconst getPhoneOptional = (props?: Omit<PhoneValidationOptions<false>, 'required'>) => {\n const { ignoreMask = true, maskSymbols = /[()+_ -]/g, message, validOperatorCodes = ['3', '4', '5', '6', '9'] } = props || {}\n\n const mask = TypeGuards.isString(maskSymbols) ? new RegExp(maskSymbols) : maskSymbols\n\n let schema = z.string().superRefine((value, context) => {\n const cleanValue = value.replace(mask, '')\n\n if (!cleanValue.length) return\n\n const operatorCode = cleanValue.charAt(1)\n\n if (!validOperatorCodes.includes(operatorCode)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: message?.invalidOperator || baseDefaultMessages.PHONE_INVALID_OPERATOR()\n })\n }\n\n if (cleanValue.length < 11) {\n context.addIssue({\n code: z.ZodIssueCode.too_small,\n minimum: 11,\n inclusive: true,\n type: 'string',\n message: message?.min || baseDefaultMessages.PHONE_NON_EMPTY()\n })\n }\n })\n\n if (ignoreMask) {\n schema = schema.transform((value) => value.replace(mask, '')) as unknown as typeof schema\n }\n\n return schema.optional().transform((value) => (!value || value?.replace(mask, '').length !== 0 ? undefined : value))\n}\ntype PhoneOptionalSchema = ReturnType<typeof getPhoneOptional>\n\n/**\n * Схема валидации опционального поля номера телефона\n * @param {PhoneValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @typeParam `ignoreSeparators` - `boolean | undefined` `default: false`\n * @typeParam `maskSymbols` - `RegExp | undefined` `default: /[()+_ -]/g`\n * @typeParam `message` - `{ [min | invalidOperator]: string }`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getPhoneSchema()\n * })\n * // will returns z.string()\n *\n * @example with optional value\n * z.object({\n * field: zodValidators.base.getPhoneSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getPhoneSchema(props?: PhoneValidationOptions<true>): PhoneRequiredSchema\nexport function getPhoneSchema(props?: PhoneValidationOptions<false>): PhoneOptionalSchema\nexport function getPhoneSchema<Required extends boolean>(\n props?: PhoneValidationOptions<Required>\n): PhoneRequiredSchema | PhoneOptionalSchema {\n const { required = true } = props || {}\n\n return required ? getPhoneRequired(props) : getPhoneOptional(props)\n}\n"],"names":["getPhoneRequired","props","ignoreMask","maskSymbols","message","defaultValue","validOperatorCodes","mask","TypeGuards","schema","z","value","context","cleanValue","operatorCode","baseDefaultMessages","getPhoneOptional","getPhoneSchema","required"],"mappings":"sMAuCA,MAAMA,EAAoBC,GAA2D,CACnF,KAAM,CACJ,WAAAC,EAAa,GACb,YAAAC,EAAc,YACd,QAAAC,EACA,aAAAC,EACA,mBAAAC,EAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAA,EAC3CL,GAAS,CAAA,EAEPM,EAAOC,EAAW,SAASL,CAAW,EAAI,IAAI,OAAOA,CAAW,EAAIA,EAE1E,IAAIM,EAASC,EAAE,OAAA,EAAS,YAAY,CAACC,EAAOC,IAAY,CACtD,MAAMC,EAAaF,EAAM,QAAQJ,EAAM,EAAE,EAEnCO,EAAeD,EAAW,OAAO,CAAC,EAEnCP,EAAmB,SAASQ,CAAY,GAC3CF,EAAQ,SAAS,CACf,KAAMF,EAAE,aAAa,eACrB,WAAY,QACZ,SAASN,GAAA,YAAAA,EAAS,kBAAmBW,EAAoB,uBAAA,CAAuB,CACjF,EAGCF,EAAW,OAAS,IACtBD,EAAQ,SAAS,CACf,KAAMF,EAAE,aAAa,UACrB,QAAS,GACT,UAAW,GACX,KAAM,SACN,SAASN,GAAA,YAAAA,EAAS,MAAOW,EAAoB,gBAAA,CAAgB,CAC9D,CAEL,CAAC,EAED,OAAIb,IACFO,EAASA,EAAO,UAAWE,GAAUA,EAAM,QAAQJ,EAAM,EAAE,CAAC,GAGvDE,EAAO,QAAQJ,GAAgB,EAAE,CAC1C,EAMMW,EAAoBf,GAA4D,CACpF,KAAM,CAAE,WAAAC,EAAa,GAAM,YAAAC,EAAc,YAAa,QAAAC,EAAS,mBAAAE,EAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAA,EAAML,GAAS,CAAA,EAErHM,EAAOC,EAAW,SAASL,CAAW,EAAI,IAAI,OAAOA,CAAW,EAAIA,EAE1E,IAAIM,EAASC,EAAE,OAAA,EAAS,YAAY,CAACC,EAAOC,IAAY,CACtD,MAAMC,EAAaF,EAAM,QAAQJ,EAAM,EAAE,EAEzC,GAAI,CAACM,EAAW,OAAQ,OAExB,MAAMC,EAAeD,EAAW,OAAO,CAAC,EAEnCP,EAAmB,SAASQ,CAAY,GAC3CF,EAAQ,SAAS,CACf,KAAMF,EAAE,aAAa,eACrB,WAAY,QACZ,SAASN,GAAA,YAAAA,EAAS,kBAAmBW,EAAoB,uBAAA,CAAuB,CACjF,EAGCF,EAAW,OAAS,IACtBD,EAAQ,SAAS,CACf,KAAMF,EAAE,aAAa,UACrB,QAAS,GACT,UAAW,GACX,KAAM,SACN,SAASN,GAAA,YAAAA,EAAS,MAAOW,EAAoB,gBAAA,CAAgB,CAC9D,CAEL,CAAC,EAED,OAAIb,IACFO,EAASA,EAAO,UAAWE,GAAUA,EAAM,QAAQJ,EAAM,EAAE,CAAC,GAGvDE,EAAO,SAAA,EAAW,UAAWE,GAAW,CAACA,IAASA,GAAA,YAAAA,EAAO,QAAQJ,EAAM,IAAI,UAAW,EAAI,OAAYI,CAAM,CACrH,EA0BO,SAASM,EACdhB,EAC2C,CAC3C,KAAM,CAAE,SAAAiB,EAAW,EAAA,EAASjB,GAAS,CAAA,EAErC,OAAOiB,EAAWlB,EAAiBC,CAAK,EAAIe,EAAiBf,CAAK,CACpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.validators.js","sources":["../../../../../lib/shared/validation/base/select.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { baseDefaultMessages } from './base.constants'\n\nexport type SelectSingleValidationOptions<Required extends boolean, Multi extends boolean = false> = {\n /**\n * включает валидацию мульти селекта\n * @default false\n */\n multiple?: Multi\n /**\n * указывает что поле обязательное\n * @default true\n */\n required?: Required\n /**\n * значение по умолчанию\n * @default undefined\n */\n defaultValue?: string\n message?: {\n single?: string\n multiple?: string\n }\n}\n\ntype SelectMultipleValidationOptions<Required extends boolean, Multi extends boolean = true> = SelectSingleValidationOptions<\n Required,\n Multi\n> & {\n /**\n * минимальное количество элементов\n * @default 0\n */\n minLength?: number\n /**\n * максимальное количество элементов\n * @default undefined\n */\n maxLength?: number\n /**\n * фиксированное количество элементов\n * @default undefined\n */\n length?: number\n message?: SelectSingleValidationOptions<Required, Multi> & {\n minLength?: string\n maxLength?: string\n length?: string\n }\n}\n\ntype SelectValidationOptions<Required extends boolean, Multi extends boolean> = Multi extends true\n ? SelectMultipleValidationOptions<Required, Multi>\n : SelectSingleValidationOptions<Required, Multi>\n\n/**\n * Схема валидации обязательного поля типа select\n */\nconst getSelectRequired = <Required extends boolean, Multi extends boolean>(props?: SelectValidationOptions<Required, Multi>) => {\n const { message, defaultValue } = props || {}\n\n const selectSchema = z\n .string()\n .min(1, message?.single || baseDefaultMessages.SELECT_NON_EMPTY())\n .nullable()\n .refine((value) => Boolean(value), message?.single || baseDefaultMessages.SELECT_NON_EMPTY())\n .default(defaultValue ?? null)\n\n if (props?.multiple) {\n let arraySchema = z\n .array(selectSchema)\n .min(props?.minLength || 0, message?.multiple || baseDefaultMessages.SELECT_MULTIPLE_MIN_LENGTH(props?.minLength || 0))\n\n if (props?.length) {\n return arraySchema\n .length(props.length, props.message?.length || baseDefaultMessages.SELECT_FIX_LENGTH(props.length))\n .default([])\n } else if (props?.maxLength) {\n arraySchema = arraySchema.max(\n props.maxLength,\n props.message?.maxLength || baseDefaultMessages.SELECT_MULTIPLE_MAX_LENGTH(props.maxLength)\n )\n }\n\n return arraySchema.default([])\n }\n\n return selectSchema\n}\ntype SelectRequiredSchema = ReturnType<typeof getSelectRequired>\n\n/**\n * Схема валидации опционального поля типа select\n */\nfunction getSelectOptional<Required extends boolean, Multi extends boolean>(\n props?: Omit<SelectValidationOptions<Required, Multi>, 'message'>\n) {\n const selectSchema = z.string().nullable().optional()\n\n if (props?.multiple) {\n return z.array(selectSchema).optional()\n }\n\n return selectSchema\n}\ntype SelectOptionalSchema = ReturnType<typeof getSelectOptional>\n\n/**\n * Схема валидации опционального поля типа select\n * @param {SelectValidationOptions} props настройки схемы\n @typeParam `required` - `boolean`\n * @typeParam `multiple` - `boolean`\n * @typeParam `minLength` - `number | undefined`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required single value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ multiple: false })\n * })\n * // will returns z.string().nullable()\n *\n * @example with required multiple value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ multiple: true })\n * })\n * // will returns z.array(z.string().nullable())\n *\n * @example with optional single value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ required: false, multiple: false })\n * })\n * // will returns z.string().nullable().optional()\n *\n * @example with optional multiple value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ required: false, multiple: true })\n * })\n * // will returns z.array(z.string().nullable().optional()).optional()\n */\nexport function getSelectSchema<Multi extends boolean>(props?: SelectValidationOptions<true, Multi>): SelectRequiredSchema\nexport function getSelectSchema<Multi extends boolean>(props?: SelectValidationOptions<false, Multi>): SelectOptionalSchema\nexport function getSelectSchema<Multi extends boolean, Required extends boolean>(\n props?: SelectValidationOptions<Required, Multi>\n): SelectRequiredSchema | SelectOptionalSchema {\n const { required = true } = props || {}\n\n return required ? getSelectRequired(props) : getSelectOptional(props)\n}\n"],"names":["getSelectRequired","props","message","defaultValue","selectSchema","z","baseDefaultMessages","value","arraySchema","_a","_b","getSelectOptional","getSelectSchema","required"],"mappings":"wHA0DA,MAAMA,EAAsEC,GAAqD,SAC/H,KAAM,CAAE,QAAAC,EAAS,aAAAC,CAAA,EAAiBF,GAAS,CAAA,EAErCG,EAAeC,EAClB,OAAA,EACA,IAAI,GAAGH,GAAA,YAAAA,EAAS,SAAUI,EAAoB,iBAAA,CAAkB,EAChE,SAAA,EACA,OAAQC,GAAU,EAAQA,GAAQL,GAAA,YAAAA,EAAS,SAAUI,EAAoB,iBAAA,CAAkB,EAC3F,QAAQH,GAAgB,IAAI,EAE/B,GAAIF,GAAA,MAAAA,EAAO,SAAU,CACnB,IAAIO,EAAcH,EACf,MAAMD,CAAY,EAClB,KAAIH,GAAA,YAAAA,EAAO,YAAa,GAAGC,GAAA,YAAAA,EAAS,WAAYI,EAAoB,4BAA2BL,GAAA,YAAAA,EAAO,YAAa,CAAC,CAAC,EAExH,OAAIA,GAAA,MAAAA,EAAO,OACFO,EACJ,OAAOP,EAAM,SAAQQ,EAAAR,EAAM,UAAN,YAAAQ,EAAe,SAAUH,EAAoB,kBAAkBL,EAAM,MAAM,CAAC,EACjG,QAAQ,CAAA,CAAE,GACJA,GAAA,MAAAA,EAAO,YAChBO,EAAcA,EAAY,IACxBP,EAAM,YACNS,EAAAT,EAAM,UAAN,YAAAS,EAAe,YAAaJ,EAAoB,2BAA2BL,EAAM,SAAS,CAAA,GAIvFO,EAAY,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"select.validators.js","sources":["../../../../../lib/shared/validation/base/select.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { baseDefaultMessages } from './base.constants'\n\nexport type SelectSingleValidationOptions<Required extends boolean, Multi extends boolean = false> = {\n /**\n * включает валидацию мульти селекта\n * @default false\n */\n multiple?: Multi\n /**\n * указывает что поле обязательное\n * @default true\n */\n required?: Required\n /**\n * значение по умолчанию\n * @default undefined\n */\n defaultValue?: string\n message?: {\n single?: string\n multiple?: string\n }\n}\n\ntype SelectMultipleValidationOptions<Required extends boolean, Multi extends boolean = true> = SelectSingleValidationOptions<\n Required,\n Multi\n> & {\n /**\n * минимальное количество элементов\n * @default 0\n */\n minLength?: number\n /**\n * максимальное количество элементов\n * @default undefined\n */\n maxLength?: number\n /**\n * фиксированное количество элементов\n * @default undefined\n */\n length?: number\n message?: SelectSingleValidationOptions<Required, Multi> & {\n minLength?: string\n maxLength?: string\n length?: string\n }\n}\n\ntype SelectValidationOptions<Required extends boolean, Multi extends boolean> = Multi extends true\n ? SelectMultipleValidationOptions<Required, Multi>\n : SelectSingleValidationOptions<Required, Multi>\n\n/**\n * Схема валидации обязательного поля типа select\n */\nconst getSelectRequired = <Required extends boolean, Multi extends boolean>(props?: SelectValidationOptions<Required, Multi>) => {\n const { message, defaultValue } = props || {}\n\n const selectSchema = z\n .string()\n .min(1, message?.single || baseDefaultMessages.SELECT_NON_EMPTY())\n .nullable()\n .refine((value) => Boolean(value), message?.single || baseDefaultMessages.SELECT_NON_EMPTY())\n .default(defaultValue ?? null)\n\n if (props?.multiple) {\n let arraySchema = z\n .array(selectSchema)\n .min(props?.minLength || 0, message?.multiple || baseDefaultMessages.SELECT_MULTIPLE_MIN_LENGTH(props?.minLength || 0))\n\n if (props?.length) {\n return arraySchema\n .length(props.length, props.message?.length || baseDefaultMessages.SELECT_FIX_LENGTH(props.length))\n .default([])\n } else if (props?.maxLength) {\n arraySchema = arraySchema.max(\n props.maxLength,\n props.message?.maxLength || baseDefaultMessages.SELECT_MULTIPLE_MAX_LENGTH(props.maxLength)\n )\n }\n\n return arraySchema.default([])\n }\n\n return selectSchema\n}\ntype SelectRequiredSchema = ReturnType<typeof getSelectRequired>\n\n/**\n * Схема валидации опционального поля типа select\n */\nfunction getSelectOptional<Required extends boolean, Multi extends boolean>(\n props?: Omit<SelectValidationOptions<Required, Multi>, 'message'>\n) {\n const selectSchema = z.string().nullable().optional()\n\n if (props?.multiple) {\n return z.array(selectSchema).optional()\n }\n\n return selectSchema\n}\ntype SelectOptionalSchema = ReturnType<typeof getSelectOptional>\n\n/**\n * Схема валидации опционального поля типа select\n * @param {SelectValidationOptions} props настройки схемы\n @typeParam `required` - `boolean`\n * @typeParam `multiple` - `boolean`\n * @typeParam `minLength` - `number | undefined`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required single value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ multiple: false })\n * })\n * // will returns z.string().nullable()\n *\n * @example with required multiple value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ multiple: true })\n * })\n * // will returns z.array(z.string().nullable())\n *\n * @example with optional single value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ required: false, multiple: false })\n * })\n * // will returns z.string().nullable().optional()\n *\n * @example with optional multiple value\n * z.object({\n * field: zodValidators.base.getSelectSchema({ required: false, multiple: true })\n * })\n * // will returns z.array(z.string().nullable().optional()).optional()\n */\nexport function getSelectSchema<Multi extends boolean>(props?: SelectValidationOptions<true, Multi>): SelectRequiredSchema\nexport function getSelectSchema<Multi extends boolean>(props?: SelectValidationOptions<false, Multi>): SelectOptionalSchema\nexport function getSelectSchema<Multi extends boolean, Required extends boolean>(\n props?: SelectValidationOptions<Required, Multi>\n): SelectRequiredSchema | SelectOptionalSchema {\n const { required = true } = props || {}\n\n return required ? getSelectRequired(props) : getSelectOptional(props)\n}\n"],"names":["getSelectRequired","props","message","defaultValue","selectSchema","z","baseDefaultMessages","value","arraySchema","_a","_b","getSelectOptional","getSelectSchema","required"],"mappings":"wHA0DA,MAAMA,EAAsEC,GAAqD,SAC/H,KAAM,CAAE,QAAAC,EAAS,aAAAC,CAAA,EAAiBF,GAAS,CAAA,EAErCG,EAAeC,EAClB,OAAA,EACA,IAAI,GAAGH,GAAA,YAAAA,EAAS,SAAUI,EAAoB,iBAAA,CAAkB,EAChE,SAAA,EACA,OAAQC,GAAU,EAAQA,GAAQL,GAAA,YAAAA,EAAS,SAAUI,EAAoB,iBAAA,CAAkB,EAC3F,QAAQH,GAAgB,IAAI,EAE/B,GAAIF,GAAA,MAAAA,EAAO,SAAU,CACnB,IAAIO,EAAcH,EACf,MAAMD,CAAY,EAClB,KAAIH,GAAA,YAAAA,EAAO,YAAa,GAAGC,GAAA,YAAAA,EAAS,WAAYI,EAAoB,4BAA2BL,GAAA,YAAAA,EAAO,YAAa,CAAC,CAAC,EAExH,OAAIA,GAAA,MAAAA,EAAO,OACFO,EACJ,OAAOP,EAAM,SAAQQ,EAAAR,EAAM,UAAN,YAAAQ,EAAe,SAAUH,EAAoB,kBAAkBL,EAAM,MAAM,CAAC,EACjG,QAAQ,CAAA,CAAE,GACJA,GAAA,MAAAA,EAAO,YAChBO,EAAcA,EAAY,IACxBP,EAAM,YACNS,EAAAT,EAAM,UAAN,YAAAS,EAAe,YAAaJ,EAAoB,2BAA2BL,EAAM,SAAS,CAAA,GAIvFO,EAAY,QAAQ,EAAE,EAC/B,CAEA,OAAOJ,CACT,EAMA,SAASO,EACPV,EACA,CACA,MAAMG,EAAeC,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAE3C,OAAIJ,GAAA,MAAAA,EAAO,SACFI,EAAE,MAAMD,CAAY,EAAE,SAAA,EAGxBA,CACT,CAqCO,SAASQ,EACdX,EAC6C,CAC7C,KAAM,CAAE,SAAAY,EAAW,EAAA,EAASZ,GAAS,CAAA,EAErC,OAAOY,EAAWb,EAAkBC,CAAK,EAAIU,EAAkBV,CAAK,CACtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fio.validators.js","sources":["../../../../../lib/shared/validation/dadata/fio.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { fioDefaultMessages, fioRegex } from './dadata.constants'\n\nconst getFioParts = (value: string) => {\n const [surname, name, ...patronymicParts] = value.trim().replace(/\\s+/g, ' ').split(' ')\n const patronymic = patronymicParts.join(' ')\n\n return { surname, name, patronymic }\n}\n\nexport type FioValidationOptions<Required extends boolean> = {\n /**\n * указывает что поле обязательное\n * @default true\n */\n required?: Required\n message?: {\n root?: string\n nameOrSurnameEmpty?: string\n invalidName?: string\n invalidSurname?: string\n invalidPatronymic?: string\n }\n}\n\n/**\n * Схема валидации обязательного поля автозаполнения ФИО\n */\nconst getFioRequired = (props?: Omit<FioValidationOptions<true>, 'required'>) => {\n const { message } = props || {}\n\n const { nameOrSurnameEmpty, invalidSurname, invalidPatronymic, invalidName } = message || {}\n\n return z\n .string()\n .superRefine((value, context) => {\n const { name, surname, patronymic } = getFioParts(value)\n\n if (!fioRegex.ONLY_CYRILLIC.test(value)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: fioDefaultMessages.ONLY_CYRILLIC()\n })\n }\n\n if (!name || !surname) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: nameOrSurnameEmpty || fioDefaultMessages.NAME_OR_SURNAME_NON_EMPTY()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(name)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidName || fioDefaultMessages.INVALID_NAME()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(surname)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidSurname || fioDefaultMessages.INVALID_SURNAME()\n })\n }\n\n if (patronymic) {\n if (!fioRegex.PATRONYMIC.test(patronymic)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidPatronymic || fioDefaultMessages.INVALID_PATRONYMIC()\n })\n }\n }\n })\n .transform((value) => value.trimEnd())\n .default('')\n}\ntype FioRequiredSchema = ReturnType<typeof getFioRequired>\n\n/**\n * Схема валидации опционального поля автозаполнения ФИО\n */\nconst getFioOptional = (props?: Omit<FioValidationOptions<false>, 'required'>) => {\n return getFioRequired(props)\n .optional()\n .transform((value) => (!value?.length ? undefined : value))\n}\ntype FioOptionalSchema = ReturnType<typeof getFioOptional>\n\n/**\n * Схема валидации поля автозаполнения ФИО\n * @param {DateValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema()\n * })\n * // will returns z.string()\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getFioSchema(props?: FioValidationOptions<true>): FioRequiredSchema\nexport function getFioSchema(props?: FioValidationOptions<false>): FioOptionalSchema\nexport function getFioSchema<Required extends boolean>(\n props?: FioValidationOptions<Required>\n): FioRequiredSchema | FioOptionalSchema {\n const { required = true, ...restProps } = props || {}\n\n return required ? getFioRequired(restProps) : getFioOptional(restProps)\n}\n"],"names":["getFioParts","value","surname","name","patronymicParts","patronymic","getFioRequired","props","message","nameOrSurnameEmpty","invalidSurname","invalidPatronymic","invalidName","z","context","fioRegex","fioDefaultMessages","getFioOptional","getFioSchema","required","restProps"],"mappings":"uIAGA,MAAMA,EAAeC,GAAkB,CACrC,KAAM,CAACC,EAASC,EAAM,GAAGC,CAAe,EAAIH,EAAM,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAAE,MAAM,GAAG,EACjFI,EAAaD,EAAgB,KAAK,GAAG,EAE3C,MAAO,CAAE,QAAAF,EAAS,KAAAC,EAAM,WAAAE,CAAA,CAC1B,EAoBMC,EAAkBC,GAAyD,CAC/E,KAAM,CAAE,QAAAC,GAAYD,GAAS,CAAA,EAEvB,CAAE,mBAAAE,EAAoB,eAAAC,EAAgB,kBAAAC,EAAmB,YAAAC,CAAA,EAAgBJ,GAAW,CAAA,EAE1F,OAAOK,EACJ,OAAA,EACA,YAAY,CAACZ,EAAOa,IAAY,CAC/B,KAAM,CAAE,KAAAX,EAAM,QAAAD,EAAS,WAAAG,CAAA,EAAeL,EAAYC,CAAK,EAElDc,EAAS,cAAc,KAAKd,CAAK,GACpCa,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASG,EAAmB,cAAA,CAAc,CAC3C,GAGC,CAACb,GAAQ,CAACD,IACZY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASJ,GAAsBO,EAAmB,0BAAA,CAA0B,CAC7E,EAGED,EAAS,aAAa,KAAKZ,CAAI,GAClCW,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASD,GAAeI,EAAmB,aAAA,CAAa,CACzD,EAGED,EAAS,aAAa,KAAKb,CAAO,GACrCY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASH,GAAkBM,EAAmB,gBAAA,CAAgB,CAC/D,EAGCX,IACGU,EAAS,WAAW,KAAKV,CAAU,GACtCS,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASF,GAAqBK,EAAmB,mBAAA,CAAmB,CACrE,
|
|
1
|
+
{"version":3,"file":"fio.validators.js","sources":["../../../../../lib/shared/validation/dadata/fio.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { fioDefaultMessages, fioRegex } from './dadata.constants'\n\nconst getFioParts = (value: string) => {\n const [surname, name, ...patronymicParts] = value.trim().replace(/\\s+/g, ' ').split(' ')\n const patronymic = patronymicParts.join(' ')\n\n return { surname, name, patronymic }\n}\n\nexport type FioValidationOptions<Required extends boolean> = {\n /**\n * указывает что поле обязательное\n * @default true\n */\n required?: Required\n message?: {\n root?: string\n nameOrSurnameEmpty?: string\n invalidName?: string\n invalidSurname?: string\n invalidPatronymic?: string\n }\n}\n\n/**\n * Схема валидации обязательного поля автозаполнения ФИО\n */\nconst getFioRequired = (props?: Omit<FioValidationOptions<true>, 'required'>) => {\n const { message } = props || {}\n\n const { nameOrSurnameEmpty, invalidSurname, invalidPatronymic, invalidName } = message || {}\n\n return z\n .string()\n .superRefine((value, context) => {\n const { name, surname, patronymic } = getFioParts(value)\n\n if (!fioRegex.ONLY_CYRILLIC.test(value)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: fioDefaultMessages.ONLY_CYRILLIC()\n })\n }\n\n if (!name || !surname) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: nameOrSurnameEmpty || fioDefaultMessages.NAME_OR_SURNAME_NON_EMPTY()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(name)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidName || fioDefaultMessages.INVALID_NAME()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(surname)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidSurname || fioDefaultMessages.INVALID_SURNAME()\n })\n }\n\n if (patronymic) {\n if (!fioRegex.PATRONYMIC.test(patronymic)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidPatronymic || fioDefaultMessages.INVALID_PATRONYMIC()\n })\n }\n }\n })\n .transform((value) => value.trimEnd())\n .default('')\n}\ntype FioRequiredSchema = ReturnType<typeof getFioRequired>\n\n/**\n * Схема валидации опционального поля автозаполнения ФИО\n */\nconst getFioOptional = (props?: Omit<FioValidationOptions<false>, 'required'>) => {\n return getFioRequired(props)\n .optional()\n .transform((value) => (!value?.length ? undefined : value))\n}\ntype FioOptionalSchema = ReturnType<typeof getFioOptional>\n\n/**\n * Схема валидации поля автозаполнения ФИО\n * @param {DateValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema()\n * })\n * // will returns z.string()\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getFioSchema(props?: FioValidationOptions<true>): FioRequiredSchema\nexport function getFioSchema(props?: FioValidationOptions<false>): FioOptionalSchema\nexport function getFioSchema<Required extends boolean>(\n props?: FioValidationOptions<Required>\n): FioRequiredSchema | FioOptionalSchema {\n const { required = true, ...restProps } = props || {}\n\n return required ? getFioRequired(restProps) : getFioOptional(restProps)\n}\n"],"names":["getFioParts","value","surname","name","patronymicParts","patronymic","getFioRequired","props","message","nameOrSurnameEmpty","invalidSurname","invalidPatronymic","invalidName","z","context","fioRegex","fioDefaultMessages","getFioOptional","getFioSchema","required","restProps"],"mappings":"uIAGA,MAAMA,EAAeC,GAAkB,CACrC,KAAM,CAACC,EAASC,EAAM,GAAGC,CAAe,EAAIH,EAAM,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAAE,MAAM,GAAG,EACjFI,EAAaD,EAAgB,KAAK,GAAG,EAE3C,MAAO,CAAE,QAAAF,EAAS,KAAAC,EAAM,WAAAE,CAAA,CAC1B,EAoBMC,EAAkBC,GAAyD,CAC/E,KAAM,CAAE,QAAAC,GAAYD,GAAS,CAAA,EAEvB,CAAE,mBAAAE,EAAoB,eAAAC,EAAgB,kBAAAC,EAAmB,YAAAC,CAAA,EAAgBJ,GAAW,CAAA,EAE1F,OAAOK,EACJ,OAAA,EACA,YAAY,CAACZ,EAAOa,IAAY,CAC/B,KAAM,CAAE,KAAAX,EAAM,QAAAD,EAAS,WAAAG,CAAA,EAAeL,EAAYC,CAAK,EAElDc,EAAS,cAAc,KAAKd,CAAK,GACpCa,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASG,EAAmB,cAAA,CAAc,CAC3C,GAGC,CAACb,GAAQ,CAACD,IACZY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASJ,GAAsBO,EAAmB,0BAAA,CAA0B,CAC7E,EAGED,EAAS,aAAa,KAAKZ,CAAI,GAClCW,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASD,GAAeI,EAAmB,aAAA,CAAa,CACzD,EAGED,EAAS,aAAa,KAAKb,CAAO,GACrCY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASH,GAAkBM,EAAmB,gBAAA,CAAgB,CAC/D,EAGCX,IACGU,EAAS,WAAW,KAAKV,CAAU,GACtCS,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASF,GAAqBK,EAAmB,mBAAA,CAAmB,CACrE,EAGP,CAAC,EACA,UAAWf,GAAUA,EAAM,QAAA,CAAS,EACpC,QAAQ,EAAE,CACf,EAMMgB,EAAkBV,GACfD,EAAeC,CAAK,EACxB,SAAA,EACA,UAAWN,GAAYA,GAAA,MAAAA,EAAO,OAAqBA,EAAZ,MAAkB,EAwBvD,SAASiB,EACdX,EACuC,CACvC,KAAM,CAAE,SAAAY,EAAW,GAAM,GAAGC,CAAA,EAAcb,GAAS,CAAA,EAEnD,OAAOY,EAAWb,EAAec,CAAS,EAAIH,EAAeG,CAAS,CACxE"}
|