@scbt-ecom/ui 0.156.0 → 0.156.2
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/dist/lib/exports/widget.js +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/isEmptyWidgetList.js.map +1 -1
- package/dist/lib/next/utils/orderWidgetWithQueryParams.js.map +1 -1
- package/dist/lib/shared/hooks/useObserverWidgets.js.map +1 -1
- package/dist/lib/shared/ui/button/model/helpers.js.map +1 -1
- package/dist/lib/shared/ui/calendar/Calendar.js +1 -1
- package/dist/lib/shared/ui/calendar/Calendar.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/MonthCaption.js +1 -1
- package/dist/lib/shared/ui/calendar/ui/MonthCaption.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/Weekday.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/model/utils.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/selectDate/SelectDate.js +1 -1
- package/dist/lib/shared/ui/calendar/ui/selectDate/SelectDate.js.map +1 -1
- package/dist/lib/shared/ui/calendar/ui/selectDate/ui/Trigger.js +1 -1
- package/dist/lib/shared/ui/calendar/ui/selectDate/ui/Trigger.js.map +1 -1
- package/dist/lib/shared/ui/carousel/model/constant.js.map +1 -1
- package/dist/lib/shared/ui/carousel/ui/RenderSlides.js.map +1 -1
- package/dist/lib/shared/ui/carouselBase/model/helpers.js.map +1 -1
- package/dist/lib/shared/ui/carouselBase/model/hooks/useArrowNavigation.js.map +1 -1
- package/dist/lib/shared/ui/dropdownList/ui/dropdownItem/DropdownItem.js +1 -1
- package/dist/lib/shared/ui/dropdownList/ui/dropdownItem/DropdownItem.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/dayPickerControl.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/ui/Editor.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/EditorModal.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/EditorModal.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/Toolbar.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/Toolbar.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/commands/SetColor.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/commands/SetHeadings.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/commands/setCustomLink.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/commands/setCustomLink.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/index.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/index.js.map +1 -1
- package/dist/lib/shared/ui/formElements/ui/fieldAttachment/FieldAttachment.js.map +1 -1
- package/dist/lib/shared/ui/formElements/ui/fieldAttachment/ui/IconSlot.js.map +1 -1
- package/dist/lib/shared/ui/formElements/ui/fieldAttachment/ui/ValidateSlot.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/index.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/index.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/inputCurrency/hooks/useCurrencyControl.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/radio/ui/RadioItemCard.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItemTab.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 +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/icon/Icon.js +1 -1
- package/dist/lib/shared/ui/icon/Icon.js.map +1 -1
- package/dist/lib/shared/ui/modal/Modal.js.map +1 -1
- package/dist/lib/shared/ui/notification/Notification.js.map +1 -1
- package/dist/lib/shared/ui/notification/ui/CustomToast.js.map +1 -1
- package/dist/lib/shared/ui/slot/model/isSlottable.js.map +1 -1
- package/dist/lib/shared/ui/slot/ui/SlotClone.js +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/utils/scrollToElement.js.map +1 -1
- package/dist/lib/widgets/banner/index.js +1 -1
- package/dist/lib/widgets/banner/ui/banners/BannerImageFull.js +1 -1
- package/dist/lib/widgets/banner/ui/banners/BannerImageFull.js.map +1 -1
- package/dist/lib/widgets/banner/ui/banners/BannerWithSeparateImg.js +1 -1
- package/dist/lib/widgets/banner/ui/banners/BannerWithSeparateImg.js.map +1 -1
- package/dist/lib/widgets/benefit/Benefit.js +1 -1
- package/dist/lib/widgets/benefit/Benefit.js.map +1 -1
- package/dist/lib/widgets/calculator/Calculator.js +1 -1
- package/dist/lib/widgets/calculator/Calculator.js.map +1 -1
- package/dist/lib/widgets/calculator/model/utils.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorFields/ui/AdditionalSlider.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorFields/ui/CalculatorModal.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorInfo/index.js +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.js +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.js.map +1 -1
- package/dist/lib/widgets/calculator/ui/index.js +1 -1
- package/dist/lib/widgets/carouselBlock/CarouselBlock.js +1 -1
- package/dist/lib/widgets/carouselBlock/CarouselBlock.js.map +1 -1
- package/dist/lib/widgets/conditionBlock/ConditionBlock.js +1 -1
- package/dist/lib/widgets/conditionBlock/ConditionBlock.js.map +1 -1
- package/dist/lib/widgets/conditionBlock/ui/ConditionsWithCTA.js.map +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js.map +1 -1
- package/dist/lib/widgets/dynamicForm/model/helpers.js +1 -1
- package/dist/lib/widgets/dynamicForm/model/helpers.js.map +1 -1
- package/dist/lib/widgets/dynamicFormDialog/DynamicFormDialog.js +1 -1
- package/dist/lib/widgets/dynamicFormDialog/DynamicFormDialog.js.map +1 -1
- package/dist/lib/widgets/footer/Footer.js +1 -1
- package/dist/lib/widgets/footer/Footer.js.map +1 -1
- package/dist/lib/widgets/footer/ui/NavLinks.js.map +1 -1
- package/dist/lib/widgets/footer/ui/PhonesBlock.js.map +1 -1
- package/dist/lib/widgets/footer/ui/SocialLinks.js.map +1 -1
- package/dist/lib/widgets/header/Header.js +1 -1
- package/dist/lib/widgets/header/Header.js.map +1 -1
- package/dist/lib/widgets/index.js +1 -1
- package/dist/lib/widgets/infoBlock/InfoBlock.js +1 -1
- package/dist/lib/widgets/infoBlock/InfoBlock.js.map +1 -1
- package/dist/lib/widgets/interLinking/InterLinking.js +1 -1
- package/dist/lib/widgets/interLinking/InterLinking.js.map +1 -1
- package/dist/lib/widgets/longBanner/LongBanner.js +1 -1
- package/dist/lib/widgets/longBanner/LongBanner.js.map +1 -1
- package/dist/lib/widgets/model/helpers.js +2 -2
- package/dist/lib/widgets/queryClientProvider/QueryClientProvider.js +1 -1
- package/dist/lib/widgets/seoHeader/SeoHeader.js +1 -1
- package/dist/lib/widgets/seoHeader/SeoHeader.js.map +1 -1
- package/dist/lib/widgets/stepper/Stepper.js +1 -1
- package/dist/lib/widgets/stepper/Stepper.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/UsefulInfo.js +1 -1
- package/dist/lib/widgets/usefulInfo/UsefulInfo.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/documents/Documents.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/experts/Experts.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/html/Html.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/table/Table.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/table/model/utils.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/table/ui/DesktopHeadings.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/table/ui/DesktopRow.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/table/ui/MobileRow.js.map +1 -1
- package/dist/lib/widgets/usefulInfo/ui/subEntities/table/ui/TableBody.js.map +1 -1
- package/dist/lib/widgets/userFeedback/ui/UserReview.js +1 -1
- package/dist/lib/widgets/userFeedback/ui/UserReview.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types/lib/next/utils/hasWidget.d.ts +1 -1
- package/dist/types/lib/next/utils/hideWidgetsWithQueryParams.d.ts +1 -1
- package/dist/types/lib/next/utils/isEmptyWidgetList.d.ts +1 -1
- package/dist/types/lib/next/utils/orderWidgetWithQueryParams.d.ts +1 -1
- package/dist/types/lib/shared/hooks/useObserverWidgets.d.ts +1 -1
- package/dist/types/lib/shared/ui/calendar/Calendar.d.ts +1 -1
- package/dist/types/lib/shared/ui/calendar/ui/index.d.ts +0 -1
- package/dist/types/lib/shared/ui/calendar/ui/model/utils.d.ts +1 -1
- package/dist/types/lib/shared/ui/carousel/model/constant.d.ts +1 -1
- package/dist/types/lib/shared/ui/carousel/model/types.d.ts +1 -1
- package/dist/types/lib/shared/ui/carousel/ui/RenderSlides.d.ts +1 -2
- package/dist/types/lib/shared/ui/carouselBase/model/helpers.d.ts +1 -1
- package/dist/types/lib/shared/ui/carouselBase/model/hooks/useArrowNavigation.d.ts +1 -1
- package/dist/types/lib/shared/ui/carouselBase/model/types.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/controlled/dayPickerControl/single.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/controlled/editor/ui/Editor.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/controlled/editor/ui/EditorModal.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/controlled/index.d.ts +19 -19
- package/dist/types/lib/shared/ui/formElements/ui/fieldAttachment/ui/IconSlot.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/ui/fieldAttachment/ui/ValidateSlot.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.d.ts +1 -2
- package/dist/types/lib/shared/ui/formElements/uncontrolled/index.d.ts +13 -10
- package/dist/types/lib/shared/ui/formElements/uncontrolled/inputCurrency/hooks/useCurrencyControl.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/uncontrolled/slider/model/types.d.ts +1 -1
- package/dist/types/lib/shared/ui/formElements/uncontrolled/uploader/UploaderBase.d.ts +1 -1
- package/dist/types/lib/shared/ui/loader/model/helpers.d.ts +1 -1
- package/dist/types/lib/shared/ui/notification/ui/CustomToast.d.ts +1 -1
- package/dist/types/lib/shared/ui/tabSwitcher/ui/TabContent.d.ts +1 -1
- package/dist/types/lib/shared/utils/scrollToElement.d.ts +1 -1
- package/dist/types/lib/widgets/authProvider/model/types.d.ts +2 -1
- package/dist/types/lib/widgets/banner/index.d.ts +0 -1
- package/dist/types/lib/widgets/buttonWithHandlers/model/types.d.ts +1 -1
- package/dist/types/lib/widgets/calculator/model/utils.d.ts +2 -2
- package/dist/types/lib/widgets/calculator/ui/calculatorFields/ui/CalculatorModal.d.ts +1 -1
- package/dist/types/lib/widgets/calculator/ui/calculatorInfo/index.d.ts +1 -1
- package/dist/types/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.d.ts +1 -1
- package/dist/types/lib/widgets/conditionBlock/model/types.d.ts +1 -1
- package/dist/types/lib/widgets/dynamicForm/DynamicForm.d.ts +1 -1
- package/dist/types/lib/widgets/dynamicForm/model/helpers.d.ts +1 -1
- package/dist/types/lib/widgets/dynamicFormDialog/DynamicFormDialog.d.ts +2 -1
- package/dist/types/lib/widgets/usefulInfo/ui/subEntities/table/model/utils.d.ts +1 -1
- package/dist/types/lib/widgets/usefulInfo/ui/subEntities/table/ui/DesktopHeadings.d.ts +1 -1
- package/dist/types/lib/widgets/usefulInfo/ui/subEntities/table/ui/DesktopRow.d.ts +1 -1
- package/dist/types/lib/widgets/usefulInfo/ui/subEntities/table/ui/MobileRow.d.ts +1 -1
- package/dist/types/lib/widgets/usefulInfo/ui/subEntities/table/ui/TableBody.d.ts +1 -1
- package/dist/types/lib/widgets/userFeedback/ui/UserReview.d.ts +1 -1
- package/package.json +126 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setCustomLink.js","sources":["../../../../../../../../../lib/shared/ui/formElements/controlled/editor/ui/commands/setCustomLink.tsx"],"sourcesContent":["import type { Editor } from '@tiptap/react'\nimport { z } from 'zod'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, Icon, InputControl
|
|
1
|
+
{"version":3,"file":"setCustomLink.js","sources":["../../../../../../../../../lib/shared/ui/formElements/controlled/editor/ui/commands/setCustomLink.tsx"],"sourcesContent":["import type { Editor } from '@tiptap/react'\nimport { z } from 'zod'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, Icon, Popover } from '$/shared/ui'\nimport { InputControl } from '$/shared/ui/formElements/controlled/input/InputControl'\nimport { SwitchControl } from '$/shared/ui/formElements/controlled/switch/SwitchControl'\nimport { cn } from '$/shared/utils'\n\ninterface ISetCustomLinkProps {\n editor: Editor\n}\n\nconst linkSchema = z.object({\n href: z.string().url(),\n underline: z.boolean().optional().default(true)\n})\n\ntype LinkSchema = z.infer<typeof linkSchema>\n\nexport const SetCustomLink = ({ editor }: ISetCustomLinkProps) => {\n const { control, handleSubmit } = useControlledForm({\n schema: linkSchema,\n defaultValues: {\n href: '',\n underline: true\n }\n })\n\n const onSubmit = (values: LinkSchema) => {\n editor\n ?.chain()\n .focus()\n .extendMarkRange('link')\n .setLink({\n href: values?.href,\n rel: 'noopener noreferrer',\n target: '_blank',\n class: cn('text-color-primary-default', { 'underline underline-offset-4': values?.underline })\n })\n .run()\n }\n\n return (\n <div>\n <Popover\n classes={{ content: 'w-[360px] max-w-full' }}\n triggerElement={\n <span\n title='Добавить заголовок'\n className={cn(\n 'flex size-7 cursor-pointer items-center justify-center rounded-sm text-color-secondary outline-none transition-colors hover:bg-color-primary-hover hover:text-color-white',\n { '!bg-color-primary-hover !text-color-white': editor.isActive('link') }\n )}\n >\n <Icon name='editor/link' className='size-4' />\n </span>\n }\n >\n <div className='flex flex-1'>\n <form\n onSubmit={(event) => {\n event.stopPropagation()\n event.nativeEvent.stopPropagation()\n handleSubmit(onSubmit)(event)\n }}\n className='flex flex-1 flex-col gap-4'\n >\n <InputControl control={control} name='href' label='Введите ссылку' />\n <SwitchControl control={control} name='underline'>\n С подчеркиванием\n </SwitchControl>\n <Button type='submit' size='sm'>\n Сохранить\n </Button>\n </form>\n </div>\n </Popover>\n </div>\n )\n}\n"],"names":["linkSchema","z","SetCustomLink","editor","control","handleSubmit","useControlledForm","onSubmit","values","cn","jsx","Popover","Icon","jsxs","event","InputControl","SwitchControl","Button"],"mappings":"qfAYA,MAAMA,EAAaC,EAAE,OAAO,CAC1B,KAAMA,EAAE,OAAA,EAAS,IAAA,EACjB,UAAWA,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,EAAI,CAChD,CAAC,EAIYC,EAAgB,CAAC,CAAE,OAAAC,KAAkC,CAChE,KAAM,CAAE,QAAAC,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,OAAQN,EACR,cAAe,CACb,KAAM,GACN,UAAW,EAAA,CACb,CACD,EAEKO,EAAYC,GAAuB,CACvCL,GACI,QACD,MAAA,EACA,gBAAgB,MAAM,EACtB,QAAQ,CACP,KAAMK,GAAQ,KACd,IAAK,sBACL,OAAQ,SACR,MAAOC,EAAG,6BAA8B,CAAE,+BAAgCD,GAAQ,UAAW,CAAA,CAC9F,EACA,IAAA,CACL,EAEA,SACG,MAAA,CACC,SAAAE,EAACC,EAAA,CACC,QAAS,CAAE,QAAS,sBAAA,EACpB,eACED,EAAC,OAAA,CACC,MAAM,qBACN,UAAWD,EACT,4KACA,CAAE,4CAA6CN,EAAO,SAAS,MAAM,CAAA,CAAE,EAGzE,SAAAO,EAACE,EAAA,CAAK,KAAK,cAAc,UAAU,QAAA,CAAS,CAAA,CAAA,EAIhD,SAAAF,EAAC,MAAA,CAAI,UAAU,cACb,SAAAG,EAAC,OAAA,CACC,SAAWC,GAAU,CACnBA,EAAM,gBAAA,EACNA,EAAM,YAAY,gBAAA,EAClBT,EAAaE,CAAQ,EAAEO,CAAK,CAC9B,EACA,UAAU,6BAEV,SAAA,CAAAJ,EAACK,EAAA,CAAa,QAAAX,EAAkB,KAAK,OAAO,MAAM,iBAAiB,EACnEM,EAACM,EAAA,CAAc,QAAAZ,EAAkB,KAAK,YAAY,SAAA,mBAElD,IACCa,EAAA,CAAO,KAAK,SAAS,KAAK,KAAK,SAAA,WAAA,CAEhC,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,EAEJ,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{AutocompleteControl as o}from"./autocomplete/AutocompleteControl.js";import{CheckboxControl as r}from"./checkbox/CheckboxControl.js";import{DayPickerControl as t}from"./dayPickerControl/dayPickerControl.js";import{InputControl as m}from"./input/InputControl.js";import{MaskInputControl as p}from"./input/MaskInputControl.js";import{InputCurrencyControl as i}from"./inputCurrency/InputCurrencyControl.js";import{InputOtpControl as a}from"./inputOtp/InputOtpControl.js";import{RadioGroupCardControl as n}from"./radio/RadioGroupCardControl.js";import{RadioGroupControl as C}from"./radio/RadioGroupControl.js";import{RadioGroupTabControl as f}from"./radio/RadioGroupTabControl.js";import{SliderControl as l}from"./slider/SliderControl.js";import{SwitchControl as d}from"./switch/SwitchControl.js";import{TextareaControl as e}from"./textarea/TextareaControl.js";import{UploaderControl as u}from"./uploader/UploaderControl.js";import{ComboboxControl as c}from"./combobox/ComboboxControl.js";import{DadataOrganization as D}from"./dadata/party/DadataOrganization.js";import{DadataAuto as b}from"./dadata/auto/DadataAuto.js";import{DadataCountry as s}from"./dadata/country/DadataCountry.js";import{DadataAddress as x}from"./dadata/address/DadataAddress.js";import{DadataFio as I}from"./dadata/fio/DadataFio.js";const E={InputControl:m,MaskInputControl:p,DayPickerControl:t,CheckboxControl:r,SwitchControl:d,RadioGroupControl:C,RadioGroupTabControl:f,RadioGroupCardControl:n,AutocompleteControl:o,DadataFio:I,DadataAddress:x,DadataCountry:s,DadataAuto:b,DadataOrganization:D,SliderControl:l,TextareaControl:e,UploaderControl:u,InputOtpControl:a,InputCurrencyControl:i,ComboboxControl:c};export{E as Controlled};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../lib/shared/ui/formElements/controlled/index.ts"],"sourcesContent":["import { AutocompleteControl } from './autocomplete'\nexport type { AutocompleteControlProps } from './autocomplete'\nimport { CheckboxControl } from './checkbox'\nexport type { CheckboxControlProps } from './checkbox'\nimport { DadataAddress
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../lib/shared/ui/formElements/controlled/index.ts"],"sourcesContent":["import { AutocompleteControl } from './autocomplete/AutocompleteControl'\nexport type { AutocompleteControlProps } from './autocomplete/AutocompleteControl'\nimport { CheckboxControl } from './checkbox/CheckboxControl'\nexport type { CheckboxControlProps } from './checkbox/CheckboxControl'\nimport { DadataAddress } from './dadata/address'\nimport { DadataAuto } from './dadata/auto'\nimport { DadataCountry } from './dadata/country'\nimport { DadataFio } from './dadata/fio'\nimport { DadataOrganization } from './dadata/party'\nexport type { DadataFioProps, DadataCountryProps, DadataOrganizationProps, DadataAutoProps, DadataAddressProps } from './dadata/'\nimport { DayPickerControl } from './dayPickerControl/dayPickerControl'\nexport type { DayPickerControlProps } from './dayPickerControl/dayPickerControl'\nexport type { EditorControlProps, EditorControlClasses } from './editor/EditorControl'\nimport { InputControl } from './input/InputControl'\nimport { MaskInputControl } from './input/MaskInputControl'\nexport type { InputControlProps } from './input/InputControl'\nimport { InputCurrencyControl } from './inputCurrency/InputCurrencyControl'\nexport type { InputCurrencyControlProps } from './inputCurrency/InputCurrencyControl'\nimport { InputOtpControl } from './inputOtp/InputOtpControl'\nexport type { InputOtpControlProps } from './inputOtp/InputOtpControl'\nimport { RadioGroupCardControl } from './radio/RadioGroupCardControl'\nimport { RadioGroupControl } from './radio/RadioGroupControl'\nimport { RadioGroupTabControl } from './radio/RadioGroupTabControl'\nexport type { RadioGroupControlProps } from './radio/RadioGroupControl'\nimport { SliderControl } from './slider/SliderControl'\nexport type { SliderControlProps } from './slider/SliderControl'\nimport { SwitchControl } from './switch/SwitchControl'\nexport type { SwitchControlProps } from './switch/SwitchControl'\nimport { TextareaControl } from './textarea/TextareaControl'\nexport type { TextareaControlProps } from './textarea/TextareaControl'\nimport { UploaderControl } from './uploader/UploaderControl'\nexport type { UploaderControlProps } from './uploader/UploaderControl'\nimport { ComboboxControl } from './combobox/ComboboxControl'\nexport type { ComboboxControlProps } from './combobox/ComboboxControl'\n\n/**\n * @example\n * ```ts\n * It's ok\n * import { UploaderControl } from '@scbt-ecom/ui'\n *\n * Not ok (tree shaking doesn't work)\n * import { Controlled } from '@scbt-ecom/ui'\n * ```\n * @deprecated use ComponentControl instead\n */\nexport const Controlled = {\n InputControl,\n MaskInputControl,\n DayPickerControl,\n CheckboxControl,\n SwitchControl,\n RadioGroupControl,\n RadioGroupTabControl,\n RadioGroupCardControl,\n AutocompleteControl,\n DadataFio,\n DadataAddress,\n DadataCountry,\n DadataAuto,\n DadataOrganization,\n SliderControl,\n TextareaControl,\n UploaderControl,\n InputOtpControl,\n // EditorControl,\n InputCurrencyControl,\n ComboboxControl\n}\n"],"names":["Controlled","InputControl","MaskInputControl","DayPickerControl","CheckboxControl","SwitchControl","RadioGroupControl","RadioGroupTabControl","RadioGroupCardControl","AutocompleteControl","DadataFio","DadataAddress","DadataCountry","DadataAuto","DadataOrganization","SliderControl","TextareaControl","UploaderControl","InputOtpControl","InputCurrencyControl","ComboboxControl"],"mappings":"6xCA8CO,MAAMA,EAAa,CACxB,aAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,sBAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,gBAAAC,EAEA,qBAAAC,EACA,gBAAAC,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldAttachment.js","sources":["../../../../../../../lib/shared/ui/formElements/ui/fieldAttachment/FieldAttachment.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"FieldAttachment.js","sources":["../../../../../../../lib/shared/ui/formElements/ui/fieldAttachment/FieldAttachment.tsx"],"sourcesContent":["import type { ReactElement } from 'react'\nimport { IconSlot, ValidateSlot } from './ui'\nimport { cn } from '$/shared/utils'\n\nexport type TFieldAttachmentClasses = {\n successIcon?: string\n errorIcon?: string\n badge?: string\n icon?: string\n fieldAttachmentRoot?: string\n}\n\nexport interface IFieldAttachmentProps {\n badge?: ReactElement | string\n invalid?: boolean\n isTouched?: boolean\n withValidateIcons?: boolean\n icon?: ReactElement\n onClickIcon?: (...args: unknown[]) => unknown\n onKeyDownIcon?: (event: React.KeyboardEvent) => unknown\n classes?: TFieldAttachmentClasses\n disabled?: boolean\n}\n\nexport const FieldAttachment = ({\n badge,\n invalid,\n isTouched,\n withValidateIcons,\n icon,\n onClickIcon,\n onKeyDownIcon,\n classes,\n disabled\n}: IFieldAttachmentProps) => {\n const isValid = !invalid && isTouched\n\n return (\n <div className={cn('mr-4 flex items-center gap-4', classes?.fieldAttachmentRoot)}>\n {icon && (\n <IconSlot disabled={disabled} icon={icon} onClickIcon={onClickIcon} onKeyDownIcon={onKeyDownIcon} classes={classes} />\n )}\n <ValidateSlot badge={badge} isInvalid={invalid} isValid={isValid} withValidateIcons={withValidateIcons} classes={classes} />\n </div>\n )\n}\n"],"names":["FieldAttachment","badge","invalid","isTouched","withValidateIcons","icon","onClickIcon","onKeyDownIcon","classes","disabled","isValid","cn","IconSlot","ValidateSlot"],"mappings":"+LAwBO,MAAMA,EAAkB,CAAC,CAC9B,MAAAC,EACA,QAAAC,EACA,UAAAC,EACA,kBAAAC,EACA,KAAAC,EACA,YAAAC,EACA,cAAAC,EACA,QAAAC,EACA,SAAAC,CACF,IAA6B,CAC3B,MAAMC,EAAU,CAACR,GAAWC,EAE5B,SACG,MAAA,CAAI,UAAWQ,EAAG,+BAAgCH,GAAS,mBAAmB,EAC5E,SAAA,CAAAH,KACEO,EAAA,CAAS,SAAAH,EAAoB,KAAAJ,EAAY,YAAAC,EAA0B,cAAAC,EAA8B,QAAAC,EAAkB,IAErHK,EAAA,CAAa,MAAAZ,EAAc,UAAWC,EAAS,QAAAQ,EAAkB,kBAAAN,EAAsC,QAAAI,CAAA,CAAkB,CAAA,EAC5H,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconSlot.js","sources":["../../../../../../../../lib/shared/ui/formElements/ui/fieldAttachment/ui/IconSlot.tsx"],"sourcesContent":["import { type IFieldAttachmentProps, type TFieldAttachmentClasses } from '
|
|
1
|
+
{"version":3,"file":"IconSlot.js","sources":["../../../../../../../../lib/shared/ui/formElements/ui/fieldAttachment/ui/IconSlot.tsx"],"sourcesContent":["import { type IFieldAttachmentProps, type TFieldAttachmentClasses } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\ninterface IIconSlotProps extends Pick<IFieldAttachmentProps, 'icon' | 'onClickIcon' | 'onKeyDownIcon' | 'disabled'> {\n classes?: Pick<TFieldAttachmentClasses, 'icon'>\n}\n\nexport const IconSlot = ({ onClickIcon, onKeyDownIcon, icon, classes, disabled }: IIconSlotProps) => {\n const interactiveIconAttr = (onClickIcon || onKeyDownIcon) && {\n role: 'button',\n 'aria-label': 'edit',\n tabIndex: -1,\n onClick: onClickIcon,\n onKeyDown: onKeyDownIcon,\n disabled\n }\n\n return (\n <span\n {...interactiveIconAttr}\n className={cn(\n 'outline-none',\n {\n 'pointer-events-none': disabled\n },\n classes?.icon\n )}\n >\n {icon}\n </span>\n )\n}\n"],"names":["IconSlot","onClickIcon","onKeyDownIcon","icon","classes","disabled","jsx","cn"],"mappings":"wFAOO,MAAMA,EAAW,CAAC,CAAE,YAAAC,EAAa,cAAAC,EAAe,KAAAC,EAAM,QAAAC,EAAS,SAAAC,KAWlEC,EAAC,OAAA,CACE,IAXwBL,GAAeC,IAAkB,CAC5D,KAAM,SACN,aAAc,OACd,SAAU,GACV,QAASD,EACT,UAAWC,EACX,SAAAG,CAAA,EAME,UAAWE,EACT,eACA,CACE,sBAAuBF,CAAA,EAEzBD,GAAS,IAAA,EAGV,SAAAD,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidateSlot.js","sources":["../../../../../../../../lib/shared/ui/formElements/ui/fieldAttachment/ui/ValidateSlot.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ValidateSlot.js","sources":["../../../../../../../../lib/shared/ui/formElements/ui/fieldAttachment/ui/ValidateSlot.tsx"],"sourcesContent":["import { Badge, Icon } from '$/shared/ui'\nimport { type IFieldAttachmentProps, type TFieldAttachmentClasses } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport interface IValidateSlotProps extends Pick<IFieldAttachmentProps, 'badge' | 'withValidateIcons'> {\n isValid?: boolean\n isInvalid?: boolean\n classes?: Pick<TFieldAttachmentClasses, 'badge' | 'errorIcon' | 'successIcon'>\n}\n\nexport const ValidateSlot = ({ badge, withValidateIcons, isValid, isInvalid, classes }: IValidateSlotProps) => {\n return (\n <>\n {isValid && withValidateIcons && (\n <Icon name='general/check' className={cn('size-6 text-icon-positive-default', classes?.successIcon)} />\n )}\n {isInvalid && withValidateIcons && (\n <Icon name='info/warningCircle' className={cn('size-5 text-icon-secondary-default', classes?.errorIcon)} />\n )}\n {badge && !isValid && <Badge className={cn('bg-color-positive text-color-white', classes?.badge)}>{badge}</Badge>}\n </>\n )\n}\n"],"names":["ValidateSlot","badge","withValidateIcons","isValid","isInvalid","classes","jsxs","Fragment","jsx","Icon","cn","Badge"],"mappings":"mNAUO,MAAMA,EAAe,CAAC,CAAE,MAAAC,EAAO,kBAAAC,EAAmB,QAAAC,EAAS,UAAAC,EAAW,QAAAC,KAEzEC,EAAAC,EAAA,CACG,SAAA,CAAAJ,GAAWD,GACVM,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAWC,EAAG,oCAAqCL,GAAS,WAAW,CAAA,CAAG,EAEtGD,GAAaF,GACZM,EAACC,EAAA,CAAK,KAAK,qBAAqB,UAAWC,EAAG,qCAAsCL,GAAS,SAAS,CAAA,CAAG,EAE1GJ,GAAS,CAACE,GAAWK,EAACG,EAAA,CAAM,UAAWD,EAAG,qCAAsCL,GAAS,KAAK,EAAI,SAAAJ,CAAA,CAAM,CAAA,EAC3G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/combobox.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef } from 'react'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { useClickOutsideMany } from '../../../../hooks'\nimport { useCombobox, useKeyboardNavigation } from './hooks'\nimport type { ChangeHandler, ComboboxValue } from './model'\nimport type { ComboboxItemOption } from './ui'\nimport { type DataLayers, type DeepPartial } from '$/shared/types'\nimport { DropdownList, Icon, InputBase, type InputBaseProps, Portal } from '$/shared/ui'\nimport { type DropdownListClasses, type DropdownListProps } from '$/shared/ui/dropdownList'\nimport { type IFieldAttachmentProps } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ComboboxClasses = {\n root?: string\n list?: { floating?: string } & DropdownListClasses\n input?: InputBaseProps['classes']\n}\n\nexport type ExternalHandlers<Multi extends boolean> = {\n changeHandler?: ChangeHandler<Multi>\n clickHandler?: (event: React.MouseEvent<HTMLElement>) => void\n blurHandler?: (event: React.FocusEvent<HTMLElement>) => void\n focusHandler?: (event: React.FocusEvent<HTMLElement>) => void\n inputChangeHandler?: (value: string) => void\n onKeyDown?: (value: React.KeyboardEventHandler<HTMLInputElement>) => void\n}\n\nexport interface ComboboxProps<Multi extends boolean>\n extends Omit<DropdownListProps<Multi>, 'options' | 'value' | 'onChange' | 'onBlur'>,\n Record<`data-${string}`, unknown> {\n /**\n * Список опций\n */\n options: ComboboxItemOption[]\n /**\n * Выбранное значение\n */\n value?: ComboboxValue<Multi>\n /**\n * Функция для изменения значения\n */\n onChange?: ChangeHandler<Multi>\n /**\n * Свойство управляющее поиском\n */\n searchable?: boolean\n /**\n * Открыть список по умолчанию\n */\n defaultOpen?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<IFieldAttachmentProps>\n /**\n * Пометить поле как не валидное\n */\n invalid?: boolean\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: ComboboxItemOption) => string\n /**\n * Отображаемый лейбл\n */\n label: string\n /**\n * Выключено поле\n */\n disabled?: boolean\n /**\n * Только для чтения\n */\n readOnly?: boolean\n /**\n * Дополнительные стили\n */\n classes?: ComboboxClasses\n /**\n * Дополнительные события\n */\n externalHandlers?: ExternalHandlers<Multi>\n /**\n * Функция для изменения значения поиска\n */\n onInputChange?: (value: string) => void\n /**\n * Значение инпута\n */\n inputValue?: string\n /**\n * Выключить фильтрацию списка\n */\n filterDisabled?: boolean\n /**\n * Включить рендеринг в портале\n * @property {false | HTMLElement} portal document.body\n */\n portal?: false | HTMLElement\n /**\n * Обработка ошибок для даталееров\n */\n ['data-error-message']?: string\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n}\n\nconst InnerComponent = <Multi extends boolean>(\n {\n options: initialOptions,\n multiple,\n value,\n onChange,\n defaultOpen,\n attachmentProps,\n searchable,\n invalid,\n displayValue,\n label,\n disabled,\n readOnly,\n className,\n externalHandlers,\n inputValue,\n filterDisabled,\n onInputChange: externalInputChangeHandler,\n empty,\n classes,\n portal = globalThis ? globalThis?.document?.body : undefined,\n ...props\n }: ComboboxProps<Multi>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const dataErrorMessage = props['data-error-message']\n\n const { floating, ...dropdownClasses } = classes?.list ?? {}\n\n const { refs, floatingStyles } = useFloating<HTMLDivElement>({\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(4)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { open, setOpen, state, changeHandler, options, search, onInputChange, comboboxDisplayValue } = useCombobox({\n multiple,\n value,\n onChange,\n searchable,\n defaultOpen,\n displayValue,\n initialOptions,\n filterDisabled,\n externalHandlers,\n externalInputValue: inputValue,\n externalOnInputChange: externalInputChangeHandler\n })\n\n useKeyboardNavigation({ ref: refs.domReference, openChangeHandler: setOpen })\n\n const getLabel = () => {\n if (!value) return ''\n\n if (multiple && searchable) {\n return comboboxDisplayValue(value)\n } else if (searchable) {\n return search\n } else {\n return comboboxDisplayValue(value)\n }\n }\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (event.target && event.relatedTarget) {\n setOpen(false)\n }\n }\n\n useClickOutsideMany([refs.floating, refs.reference as React.MutableRefObject<HTMLElement | null>], () => setOpen(false))\n\n const portalContainer = portal ?? refs.domReference.current!\n\n return (\n <div ref={refs.setReference} className={cn('relative w-full', classes?.root, className)}>\n <InputBase\n ref={ref}\n label={label}\n invalid={invalid}\n readOnly={readOnly || !searchable}\n value={inputValue || getLabel()}\n onChange={onInputChange}\n disabled={disabled}\n onClick={(event) => {\n if (!open) setOpen(true)\n externalHandlers?.clickHandler?.(event)\n }}\n onBlur={(event) => {\n externalHandlers?.blurHandler?.(event)\n handleBlur(event)\n props?.onBlur?.(event)\n }}\n onFocus={externalHandlers?.focusHandler}\n classes={{\n input: cn({\n 'cursor-pointer': !searchable,\n 'cursor-default': disabled,\n 'pointer-events-none': disabled || readOnly\n }),\n ...classes?.input\n }}\n autoComplete='off'\n attachmentProps={{\n icon: (\n <Icon\n name='arrows/arrowRight'\n className={cn('size-6 rotate-90 text-color-blue-grey-600 duration-100', {\n '-rotate-90': open,\n 'text-color-negative': invalid\n })}\n />\n ),\n onClickIcon: () => setOpen((prev) => !prev),\n ...attachmentProps\n }}\n data-id='combobox-input'\n data-error-message={dataErrorMessage}\n dataLayers={props?.dataLayers}\n />\n\n <Portal root={portalContainer}>\n <AnimatePresence>\n {open && (\n <motion.div\n ref={refs.setFloating}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.1 }}\n className={cn('z-[1000]', floating)}\n style={{\n ...floatingStyles,\n width: refs.reference.current?.getBoundingClientRect().width\n }}\n >\n <DropdownList\n empty={empty}\n options={options}\n multiple={multiple}\n onPick={changeHandler}\n value={state}\n displayValue={displayValue}\n classes={dropdownClasses}\n target={refs.domReference}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </Portal>\n </div>\n )\n}\n\nexport const Combobox = forwardRef(InnerComponent) as <Multi extends boolean>(\n props: ComboboxProps<Multi> & { ref?: ForwardedRef<HTMLInputElement> }\n) => React.JSX.Element\n"],"names":["InnerComponent","initialOptions","multiple","value","onChange","defaultOpen","attachmentProps","searchable","invalid","displayValue","label","disabled","readOnly","className","externalHandlers","inputValue","filterDisabled","externalInputChangeHandler","empty","classes","portal","props","ref","dataErrorMessage","floating","dropdownClasses","refs","floatingStyles","useFloating","flip","offset","autoUpdate","open","setOpen","state","changeHandler","options","search","onInputChange","comboboxDisplayValue","useCombobox","useKeyboardNavigation","getLabel","handleBlur","event","useClickOutsideMany","portalContainer","jsxs","cn","jsx","InputBase","Icon","prev","Portal","AnimatePresence","motion","DropdownList","Combobox","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"combobox.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/combobox.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef } from 'react'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { useCombobox, useKeyboardNavigation } from './hooks'\nimport type { ChangeHandler, ComboboxValue } from './model'\nimport type { ComboboxItemOption } from './ui'\nimport { useClickOutsideMany } from '$/shared/hooks'\nimport { type DataLayers, type DeepPartial } from '$/shared/types'\nimport { DropdownList, Icon, InputBase, type InputBaseProps, Portal } from '$/shared/ui'\nimport { type DropdownListClasses, type DropdownListProps } from '$/shared/ui/dropdownList'\nimport { type IFieldAttachmentProps } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ComboboxClasses = {\n root?: string\n list?: { floating?: string } & DropdownListClasses\n input?: InputBaseProps['classes']\n}\n\nexport type ExternalHandlers<Multi extends boolean> = {\n changeHandler?: ChangeHandler<Multi>\n clickHandler?: (event: React.MouseEvent<HTMLElement>) => void\n blurHandler?: (event: React.FocusEvent<HTMLElement>) => void\n focusHandler?: (event: React.FocusEvent<HTMLElement>) => void\n inputChangeHandler?: (value: string) => void\n onKeyDown?: (value: React.KeyboardEventHandler<HTMLInputElement>) => void\n}\n\nexport interface ComboboxProps<Multi extends boolean>\n extends Omit<DropdownListProps<Multi>, 'options' | 'value' | 'onChange' | 'onBlur'>,\n Record<`data-${string}`, unknown> {\n /**\n * Список опций\n */\n options: ComboboxItemOption[]\n /**\n * Выбранное значение\n */\n value?: ComboboxValue<Multi>\n /**\n * Функция для изменения значения\n */\n onChange?: ChangeHandler<Multi>\n /**\n * Свойство управляющее поиском\n */\n searchable?: boolean\n /**\n * Открыть список по умолчанию\n */\n defaultOpen?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<IFieldAttachmentProps>\n /**\n * Пометить поле как не валидное\n */\n invalid?: boolean\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: ComboboxItemOption) => string\n /**\n * Отображаемый лейбл\n */\n label: string\n /**\n * Выключено поле\n */\n disabled?: boolean\n /**\n * Только для чтения\n */\n readOnly?: boolean\n /**\n * Дополнительные стили\n */\n classes?: ComboboxClasses\n /**\n * Дополнительные события\n */\n externalHandlers?: ExternalHandlers<Multi>\n /**\n * Функция для изменения значения поиска\n */\n onInputChange?: (value: string) => void\n /**\n * Значение инпута\n */\n inputValue?: string\n /**\n * Выключить фильтрацию списка\n */\n filterDisabled?: boolean\n /**\n * Включить рендеринг в портале\n * @property {false | HTMLElement} portal document.body\n */\n portal?: false | HTMLElement\n /**\n * Обработка ошибок для даталееров\n */\n ['data-error-message']?: string\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n}\n\nconst InnerComponent = <Multi extends boolean>(\n {\n options: initialOptions,\n multiple,\n value,\n onChange,\n defaultOpen,\n attachmentProps,\n searchable,\n invalid,\n displayValue,\n label,\n disabled,\n readOnly,\n className,\n externalHandlers,\n inputValue,\n filterDisabled,\n onInputChange: externalInputChangeHandler,\n empty,\n classes,\n portal = globalThis ? globalThis?.document?.body : undefined,\n ...props\n }: ComboboxProps<Multi>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const dataErrorMessage = props['data-error-message']\n\n const { floating, ...dropdownClasses } = classes?.list ?? {}\n\n const { refs, floatingStyles } = useFloating<HTMLDivElement>({\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(4)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { open, setOpen, state, changeHandler, options, search, onInputChange, comboboxDisplayValue } = useCombobox({\n multiple,\n value,\n onChange,\n searchable,\n defaultOpen,\n displayValue,\n initialOptions,\n filterDisabled,\n externalHandlers,\n externalInputValue: inputValue,\n externalOnInputChange: externalInputChangeHandler\n })\n\n useKeyboardNavigation({ ref: refs.domReference, openChangeHandler: setOpen })\n\n const getLabel = () => {\n if (!value) return ''\n\n if (multiple && searchable) {\n return comboboxDisplayValue(value)\n } else if (searchable) {\n return search\n } else {\n return comboboxDisplayValue(value)\n }\n }\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (event.target && event.relatedTarget) {\n setOpen(false)\n }\n }\n\n useClickOutsideMany([refs.floating, refs.reference as React.MutableRefObject<HTMLElement | null>], () => setOpen(false))\n\n const portalContainer = portal ?? refs.domReference.current!\n\n return (\n <div ref={refs.setReference} className={cn('relative w-full', classes?.root, className)}>\n <InputBase\n ref={ref}\n label={label}\n invalid={invalid}\n readOnly={readOnly || !searchable}\n value={inputValue || getLabel()}\n onChange={onInputChange}\n disabled={disabled}\n onClick={(event) => {\n if (!open) setOpen(true)\n externalHandlers?.clickHandler?.(event)\n }}\n onBlur={(event) => {\n externalHandlers?.blurHandler?.(event)\n handleBlur(event)\n props?.onBlur?.(event)\n }}\n onFocus={externalHandlers?.focusHandler}\n classes={{\n input: cn({\n 'cursor-pointer': !searchable,\n 'cursor-default': disabled,\n 'pointer-events-none': disabled || readOnly\n }),\n ...classes?.input\n }}\n autoComplete='off'\n attachmentProps={{\n icon: (\n <Icon\n name='arrows/arrowRight'\n className={cn('size-6 rotate-90 text-color-blue-grey-600 duration-100', {\n '-rotate-90': open,\n 'text-color-negative': invalid\n })}\n />\n ),\n onClickIcon: () => setOpen((prev) => !prev),\n ...attachmentProps\n }}\n data-id='combobox-input'\n data-error-message={dataErrorMessage}\n dataLayers={props?.dataLayers}\n />\n\n <Portal root={portalContainer}>\n <AnimatePresence>\n {open && (\n <motion.div\n ref={refs.setFloating}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.1 }}\n className={cn('z-[1000]', floating)}\n style={{\n ...floatingStyles,\n width: refs.reference.current?.getBoundingClientRect().width\n }}\n >\n <DropdownList\n empty={empty}\n options={options}\n multiple={multiple}\n onPick={changeHandler}\n value={state}\n displayValue={displayValue}\n classes={dropdownClasses}\n target={refs.domReference}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </Portal>\n </div>\n )\n}\n\nexport const Combobox = forwardRef(InnerComponent) as <Multi extends boolean>(\n props: ComboboxProps<Multi> & { ref?: ForwardedRef<HTMLInputElement> }\n) => React.JSX.Element\n"],"names":["InnerComponent","initialOptions","multiple","value","onChange","defaultOpen","attachmentProps","searchable","invalid","displayValue","label","disabled","readOnly","className","externalHandlers","inputValue","filterDisabled","externalInputChangeHandler","empty","classes","portal","props","ref","dataErrorMessage","floating","dropdownClasses","refs","floatingStyles","useFloating","flip","offset","autoUpdate","open","setOpen","state","changeHandler","options","search","onInputChange","comboboxDisplayValue","useCombobox","useKeyboardNavigation","getLabel","handleBlur","event","useClickOutsideMany","portalContainer","jsxs","cn","jsx","InputBase","Icon","prev","Portal","AnimatePresence","motion","DropdownList","Combobox","forwardRef"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCombobox.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react'\nimport
|
|
1
|
+
{"version":3,"file":"useCombobox.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/hooks/useCombobox.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react'\nimport { type ChangeHandler, type ComboboxItemOption, type ComboboxValue } from '$/shared/ui'\nimport { type ExternalHandlers } from '$/shared/ui/formElements/uncontrolled/combobox/combobox'\nimport { TypeGuards } from '$/shared/utils'\n\ntype UseComboboxOptions<Multi extends boolean> = {\n initialOptions: ComboboxItemOption[]\n searchable?: boolean\n multiple?: Multi\n value?: ComboboxValue<Multi>\n onChange?: ChangeHandler<Multi>\n displayValue?: (option: ComboboxItemOption) => string\n defaultOpen?: boolean\n externalHandlers?: ExternalHandlers<Multi>\n externalInputValue?: string\n externalOnInputChange?: (value: string) => void\n filterDisabled?: boolean\n}\n\nexport const useCombobox = <Multi extends boolean>(props: UseComboboxOptions<Multi>) => {\n const {\n multiple,\n defaultOpen,\n value,\n onChange,\n initialOptions,\n searchable,\n filterDisabled,\n displayValue,\n externalHandlers,\n externalInputValue,\n externalOnInputChange\n } = props\n const { changeHandler: externalChangeHandler, inputChangeHandler: externalInputChangeHandler } = externalHandlers ?? {}\n\n const [search, setSearch] = useState<string>('')\n const [open, setOpen] = useState<boolean>(defaultOpen ?? false)\n\n const isUpdatingRef = useRef<boolean>(false)\n\n const options = useMemo<ComboboxItemOption[]>(() => {\n if (filterDisabled) {\n return initialOptions\n }\n\n if (!search.length || !searchable) {\n return initialOptions\n }\n\n return initialOptions.filter((option) =>\n option.label.toLowerCase().includes(externalInputValue ? externalInputValue.toLowerCase() : search.toLowerCase())\n )\n }, [externalInputValue, filterDisabled, initialOptions, search, searchable])\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setOpen(true)\n\n setSearch(e.target.value)\n externalInputChangeHandler?.(e.target.value)\n externalOnInputChange?.(e.target.value)\n }\n\n const changeHandler = (newValue: ComboboxItemOption) => {\n if (isUpdatingRef.current) return\n\n isUpdatingRef.current = true\n\n if (multiple) {\n const prev = (value as ComboboxItemOption[]) || []\n const exists = prev.some((option) => option.value === newValue.value)\n\n let updatedValue: ComboboxItemOption[]\n\n if (exists) {\n updatedValue = prev.filter((option) => option.value !== newValue.value)\n } else {\n updatedValue = [...prev, newValue]\n }\n\n onChange?.(updatedValue as ComboboxValue<Multi>)\n externalChangeHandler?.(updatedValue as ComboboxValue<Multi>)\n\n const searchValue = prev.map((option) => (displayValue ? displayValue(option) : option.label)).join(', ')\n setSearch(searchValue)\n externalOnInputChange?.(searchValue)\n } else {\n let updated: ComboboxValue<Multi>\n\n if ((value as ComboboxItemOption)?.value === newValue.value) {\n updated = null as ComboboxValue<Multi>\n } else {\n updated = newValue as ComboboxValue<Multi>\n }\n\n onChange?.(updated)\n externalChangeHandler?.(updated)\n\n const label = displayValue && updated ? displayValue(updated as ComboboxItemOption) : (updated as ComboboxItemOption)?.label\n setSearch(label ?? '')\n externalOnInputChange?.(label ?? '')\n setOpen(false)\n }\n\n setTimeout(() => {\n isUpdatingRef.current = false\n }, 0)\n }\n\n const comboboxDisplayValue = (value: ComboboxValue<Multi>) => {\n if (!value) return\n\n if (TypeGuards.isArray(value)) {\n return value.map((item) => (displayValue ? displayValue(item) : item.label)).join(', ')\n }\n\n return displayValue ? displayValue(value) : value.label\n }\n\n return {\n open,\n setOpen,\n changeHandler,\n options,\n search,\n onInputChange,\n state: value,\n comboboxDisplayValue\n }\n}\n"],"names":["useCombobox","props","multiple","defaultOpen","value","onChange","initialOptions","searchable","filterDisabled","displayValue","externalHandlers","externalInputValue","externalOnInputChange","externalChangeHandler","externalInputChangeHandler","search","setSearch","useState","open","setOpen","isUpdatingRef","useRef","options","useMemo","option","newValue","prev","exists","updatedValue","searchValue","updated","label","TypeGuards","item"],"mappings":"0HAmBO,MAAMA,EAAsCC,GAAqC,CACtF,KAAM,CACJ,SAAAC,EACA,YAAAC,EACA,MAAAC,EACA,SAAAC,EACA,eAAAC,EACA,WAAAC,EACA,eAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,sBAAAC,CAAA,EACEX,EACE,CAAE,cAAeY,EAAuB,mBAAoBC,CAAA,EAA+BJ,GAAoB,CAAA,EAE/G,CAACK,EAAQC,CAAS,EAAIC,EAAiB,EAAE,EACzC,CAACC,EAAMC,CAAO,EAAIF,EAAkBd,GAAe,EAAK,EAExDiB,EAAgBC,EAAgB,EAAK,EAErCC,EAAUC,EAA8B,IACxCf,GAIA,CAACO,EAAO,QAAU,CAACR,EACdD,EAGFA,EAAe,OAAQkB,GAC5BA,EAAO,MAAM,YAAA,EAAc,SAASb,EAAqBA,EAAmB,cAAgBI,EAAO,aAAa,CAAA,EAEjH,CAACJ,EAAoBH,EAAgBF,EAAgBS,EAAQR,CAAU,CAAC,EAkE3E,MAAO,CACL,KAAAW,EACA,QAAAC,EACA,cA3DqBM,GAAiC,CACtD,GAAI,CAAAL,EAAc,QAIlB,IAFAA,EAAc,QAAU,GAEpBlB,EAAU,CACZ,MAAMwB,EAAQtB,GAAkC,CAAA,EAC1CuB,EAASD,EAAK,KAAMF,GAAWA,EAAO,QAAUC,EAAS,KAAK,EAEpE,IAAIG,EAEAD,EACFC,EAAeF,EAAK,OAAQF,GAAWA,EAAO,QAAUC,EAAS,KAAK,EAEtEG,EAAe,CAAC,GAAGF,EAAMD,CAAQ,EAGnCpB,IAAWuB,CAAoC,EAC/Cf,IAAwBe,CAAoC,EAE5D,MAAMC,EAAcH,EAAK,IAAKF,GAAYf,EAAeA,EAAae,CAAM,EAAIA,EAAO,KAAM,EAAE,KAAK,IAAI,EACxGR,EAAUa,CAAW,EACrBjB,IAAwBiB,CAAW,CACrC,KAAO,CACL,IAAIC,EAEC1B,GAA8B,QAAUqB,EAAS,MACpDK,EAAU,KAEVA,EAAUL,EAGZpB,IAAWyB,CAAO,EAClBjB,IAAwBiB,CAAO,EAE/B,MAAMC,EAAQtB,GAAgBqB,EAAUrB,EAAaqB,CAA6B,EAAKA,GAAgC,MACvHd,EAAUe,GAAS,EAAE,EACrBnB,IAAwBmB,GAAS,EAAE,EACnCZ,EAAQ,EAAK,CACf,CAEA,WAAW,IAAM,CACfC,EAAc,QAAU,EAC1B,EAAG,CAAC,EACN,EAgBE,QAAAE,EACA,OAAAP,EACA,cAtEqB,GAA2C,CAChEI,EAAQ,EAAI,EAEZH,EAAU,EAAE,OAAO,KAAK,EACxBF,IAA6B,EAAE,OAAO,KAAK,EAC3CF,IAAwB,EAAE,OAAO,KAAK,CACxC,EAiEE,MAAOR,EACP,qBAlB4BA,GAAgC,CAC5D,GAAKA,EAEL,OAAI4B,EAAW,QAAQ5B,CAAK,EACnBA,EAAM,IAAK6B,GAAUxB,EAAeA,EAAawB,CAAI,EAAIA,EAAK,KAAM,EAAE,KAAK,IAAI,EAGjFxB,EAAeA,EAAaL,CAAK,EAAIA,EAAM,KACpD,CAUE,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{InputBase as o}from"./input/Input.js";import{MaskInput as r}from"./maskInput/MaskInput.js";import{CheckboxBase as m}from"./checkbox/Checkbox.js";import{DayPickerBase as t}from"./dayPicker/DayPicker.js";import{SwitchBase as e}from"./switch/Switch.js";import{AutocompleteBase as p}from"./autocomplete/Autocomplete.js";import{SliderBase as a}from"./slider/SliderBase.js";import{RadioGroupBase as i}from"./radio/RadioGroup.js";import{TextareaBase as f}from"./textarea/Textarea.js";import{UploaderBase as s}from"./uploader/UploaderBase.js";import{InputOtpBase as B}from"./inputOtp/InputOtpBase.js";import{Combobox as c}from"./combobox/combobox.js";const w={InputBase:o,SliderBase:a,AutocompleteBase:p,MaskInput:r,CheckboxBase:m,DayPickerBase:t,SwitchBase:e,RadioGroupBase:i,TextareaBase:f,InputOtpBase:B,UploaderBase:s,Combobox:c};export{w as Uncontrolled};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../lib/shared/ui/formElements/uncontrolled/index.ts"],"sourcesContent":["import { InputBase } from './input'\nexport type { InputBaseProps } from './input'\nimport { MaskInput } from './maskInput'\nexport type { MaskInputProps } from './maskInput'\nimport { CheckboxBase } from './checkbox'\nexport type { CheckboxBaseProps, CheckedState } from './checkbox'\nimport { DayPickerBase } from './dayPicker'\nexport type { DayPickerProps } from './dayPicker'\nimport { SwitchBase } from './switch'\nexport type { SwitchBaseProps } from './switch'\nimport { AutocompleteBase } from './autocomplete'\nimport { SliderBase } from './slider'\nexport type { AutocompleteBaseProps
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../lib/shared/ui/formElements/uncontrolled/index.ts"],"sourcesContent":["import { InputBase } from './input/Input'\nexport type { InputBaseProps } from './input/Input'\nimport { MaskInput } from './maskInput/MaskInput'\nexport type { MaskInputProps } from './maskInput/MaskInput'\nimport { CheckboxBase } from './checkbox/Checkbox'\nexport type { CheckboxBaseProps, CheckedState } from './checkbox/Checkbox'\nimport { DayPickerBase } from './dayPicker/DayPicker'\nexport type { DayPickerProps } from './dayPicker/DayPicker'\nimport { SwitchBase } from './switch/Switch'\nexport type { SwitchBaseProps } from './switch/Switch'\nimport { AutocompleteBase } from './autocomplete/Autocomplete'\nimport { SliderBase } from './slider/SliderBase'\nexport type { AutocompleteBaseProps } from './autocomplete/Autocomplete'\nexport type { AutocompleteItemOption } from './autocomplete/types'\nimport { RadioGroupBase } from './radio/RadioGroup'\nexport type { RadioGroupBaseProps } from './radio/RadioGroup'\nexport type { RadioOption } from './radio/ui'\nimport { TextareaBase } from './textarea/Textarea'\nimport { UploaderBase } from './uploader/UploaderBase'\nexport type { TextareaBaseProps } from './textarea/Textarea'\nimport { InputOtpBase } from './inputOtp/InputOtpBase'\nexport type { InputOtpBaseProps } from './inputOtp/InputOtpBase'\nimport { Combobox } from './combobox/combobox'\nexport type { ComboboxProps } from './combobox/combobox'\nexport type { ComboboxItemOption } from './combobox'\n\n/**\n * @example\n * ```ts\n * It's ok\n * import { InputBase } from '@scbt-ecom/ui'\n *\n * Not ok (tree shaking doesn't work)\n * import { Uncontrolled } from '@scbt-ecom/ui'\n * ```\n * @deprecated use Select instead\n */\nexport const Uncontrolled = {\n InputBase,\n SliderBase,\n AutocompleteBase,\n MaskInput,\n CheckboxBase,\n DayPickerBase,\n SwitchBase,\n RadioGroupBase,\n TextareaBase,\n InputOtpBase,\n UploaderBase,\n Combobox\n}\n"],"names":["Uncontrolled","InputBase","SliderBase","AutocompleteBase","MaskInput","CheckboxBase","DayPickerBase","SwitchBase","RadioGroupBase","TextareaBase","InputOtpBase","UploaderBase","Combobox"],"mappings":"0oBAqCO,MAAMA,EAAe,CAC1B,UAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,aAAAC,EACA,cAAAC,EACA,WAAAC,EACA,eAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,SAAAC,CACF"}
|
package/dist/lib/shared/ui/formElements/uncontrolled/inputCurrency/hooks/useCurrencyControl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCurrencyControl.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/inputCurrency/hooks/useCurrencyControl.ts"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type
|
|
1
|
+
{"version":3,"file":"useCurrencyControl.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/inputCurrency/hooks/useCurrencyControl.ts"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { type CurrencyValue } from '$/shared/ui'\nimport type { DropdownItemOption } from '$/shared/ui/dropdownList'\n\ninterface UseCurrencyControlProps {\n value: CurrencyValue\n currencies: DropdownItemOption[]\n onChange: (value: CurrencyValue) => void\n}\n\nexport const useCurrencyControl = ({ value, currencies, onChange }: UseCurrencyControlProps) => {\n const [open, setOpen] = useState<boolean>(false)\n\n const currenciesMap = useMemo<Map<string, DropdownItemOption>>(() => {\n const map = new Map<string, DropdownItemOption>()\n\n for (const currency of currencies) {\n if (currency.value) map.set(currency.value, currency)\n }\n\n return map\n }, [currencies])\n\n const currency = useMemo<DropdownItemOption | null>(\n () => (value.currency ? (currenciesMap.get(value.currency) ?? null) : null),\n [value, currenciesMap]\n )\n\n const onInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const v = event.target.value\n\n if (/[^0-9\\-.eE]/g.test(v)) return\n\n onChange({ ...value, value: v })\n }\n\n const onCurrencyChange = (currency: DropdownItemOption) => {\n setOpen(false)\n onChange({ ...value, currency: currency.value })\n }\n\n return { currency, open, setOpen, onCurrencyChange, onInputChange }\n}\n"],"names":["useCurrencyControl","value","currencies","onChange","open","setOpen","useState","currenciesMap","useMemo","map","currency","event","v"],"mappings":"8CAUO,MAAMA,EAAqB,CAAC,CAAE,MAAAC,EAAO,WAAAC,EAAY,SAAAC,KAAwC,CAC9F,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAkB,EAAK,EAEzCC,EAAgBC,EAAyC,IAAM,CACnE,MAAMC,MAAU,IAEhB,UAAWC,KAAYR,EACjBQ,EAAS,OAAOD,EAAI,IAAIC,EAAS,MAAOA,CAAQ,EAGtD,OAAOD,CACT,EAAG,CAACP,CAAU,CAAC,EAoBf,MAAO,CAAE,SAlBQM,EACf,IAAOP,EAAM,SAAYM,EAAc,IAAIN,EAAM,QAAQ,GAAK,KAAQ,KACtE,CAACA,EAAOM,CAAa,CAAA,EAgBJ,KAAAH,EAAM,QAAAC,EAAS,iBALRK,GAAiC,CACzDL,EAAQ,EAAK,EACbF,EAAS,CAAE,GAAGF,EAAO,SAAUS,EAAS,MAAO,CACjD,EAEoD,cAb7BC,GAA+C,CACpE,MAAMC,EAAID,EAAM,OAAO,MAEnB,eAAe,KAAKC,CAAC,GAEzBT,EAAS,CAAE,GAAGF,EAAO,MAAOW,EAAG,CACjC,CAOoD,CACtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioItem.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItem.tsx"],"sourcesContent":["import { memo, useId } from 'react'\nimport { Indicator, Item, type RadioGroupItemProps } from '@radix-ui/react-radio-group'\nimport {
|
|
1
|
+
{"version":3,"file":"RadioItem.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItem.tsx"],"sourcesContent":["import { memo, useId } from 'react'\nimport { Indicator, Item, type RadioGroupItemProps } from '@radix-ui/react-radio-group'\nimport {\n AdditionalContent,\n type AdditionalContentClasses,\n type AdditionalContentProps\n} from '$/shared/ui/formElements/uncontrolled/radio/ui/AdditionalContent'\nimport { cn } from '$/shared/utils'\n\nexport type RadioOption = {\n id: number | string\n value: string\n label: string\n disabled?: boolean\n additionalContent?: AdditionalContentProps\n}\n\nexport type RadioItemClasses = {\n root?: string\n item?: string\n indicator?: string\n label?: string\n additionalContent?: AdditionalContentClasses\n}\n\nexport type RadioItemProps = Omit<RadioGroupItemProps, 'value'> & {\n /**\n * Опция списка\n */\n item: RadioOption\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: RadioOption) => string\n /**\n * Функция для управления возвращаемым значением\n */\n returnValue?: (option: RadioOption) => string\n /**\n * Дополнительные стили внутренних компонентов\n */\n classes?: RadioItemClasses\n /**\n * Свойство для отображения не валидного поля\n */\n invalid?: boolean\n}\n\nexport const RadioItem = memo(\n ({ item, disabled, displayValue, returnValue, classes, className, invalid, ...props }: RadioItemProps) => {\n const label = displayValue ? displayValue(item) : item.label\n const value = returnValue ? returnValue(item) : item.value\n\n const id = useId()\n\n return (\n <Item {...props} asChild disabled={disabled} value={value} id={id}>\n <li\n className={cn(\n 'group flex items-center gap-x-3',\n 'w-full min-w-[200px] [&:not(:last-child)]:mb-4',\n '[&:not(:disabled)]:cursor-pointer',\n {\n 'pointer-events-none text-color-disabled': disabled\n },\n className,\n classes?.root\n )}\n >\n <div\n className={cn(\n 'after:left-1/2 after:top-1/2 after:h-10 after:w-10',\n 'after:-translate-x-1/2 after:-translate-y-1/2 after:content-[\"\"]',\n 'after:absolute after:rounded-full [&:not(:disabled)]:hover:after:bg-color-primary-tr-hover',\n 'after:duration-100 [&:not(:disabled)]:active:after:bg-color-primary-tr-pressed',\n 'after:-z-10 [&:not(:disabled)]:focus:after:bg-color-primary-tr-focus',\n 'relative h-6 w-6 rounded-full border-2 border-blue-grey-700',\n 'group-data-[state=checked]:border-primary-default',\n {\n 'border-negative': invalid,\n 'group-data-[state=unchecked]:border-0 group-data-[state=checked]:border-primary-disabled group-data-[state=unchecked]:bg-color-blue-grey-300':\n disabled\n },\n classes?.item\n )}\n >\n <Indicator\n className={cn(\n 'absolute left-1/2 top-1/2 h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-color-primary-default',\n 'group-disabled:group-data-[state=checked]:bg-color-negative',\n {\n 'group-data-[state=checked]:bg-color-primary-disabled': disabled\n },\n classes?.indicator\n )}\n />\n </div>\n <label\n htmlFor={id}\n className={cn(\n 'desk-body-regular-l capitalize text-color-dark',\n {\n 'text-color-disabled': disabled\n },\n classes?.label\n )}\n >\n {label}\n </label>\n {item?.additionalContent && (\n <AdditionalContent disabled={disabled} {...item?.additionalContent} classes={classes?.additionalContent} />\n )}\n </li>\n </Item>\n )\n }\n)\n"],"names":["RadioItem","memo","item","disabled","displayValue","returnValue","classes","className","invalid","props","label","value","id","useId","jsx","Item","jsxs","cn","Indicator","AdditionalContent"],"mappings":"uQAgDO,MAAMA,EAAYC,EACvB,CAAC,CAAE,KAAAC,EAAM,SAAAC,EAAU,aAAAC,EAAc,YAAAC,EAAa,QAAAC,EAAS,UAAAC,EAAW,QAAAC,EAAS,GAAGC,KAA4B,CACxG,MAAMC,EAAQN,EAAeA,EAAaF,CAAI,EAAIA,EAAK,MACjDS,EAAQN,EAAcA,EAAYH,CAAI,EAAIA,EAAK,MAE/CU,EAAKC,EAAA,EAEX,OACEC,EAACC,GAAM,GAAGN,EAAO,QAAO,GAAC,SAAAN,EAAoB,MAAAQ,EAAc,GAAAC,EACzD,SAAAI,EAAC,KAAA,CACC,UAAWC,EACT,kCACA,iDACA,oCACA,CACE,0CAA2Cd,CAAA,EAE7CI,EACAD,GAAS,IAAA,EAGX,SAAA,CAAAQ,EAAC,MAAA,CACC,UAAWG,EACT,qDACA,mEACA,6FACA,iFACA,uEACA,8DACA,oDACA,CACE,kBAAmBT,EACnB,+IACEL,CAAA,EAEJG,GAAS,IAAA,EAGX,SAAAQ,EAACI,EAAA,CACC,UAAWD,EACT,4GACA,8DACA,CACE,uDAAwDd,CAAA,EAE1DG,GAAS,SAAA,CACX,CAAA,CACF,CAAA,EAEFQ,EAAC,QAAA,CACC,QAASF,EACT,UAAWK,EACT,iDACA,CACE,sBAAuBd,CAAA,EAEzBG,GAAS,KAAA,EAGV,SAAAI,CAAA,CAAA,EAEFR,GAAM,mBACLY,EAACK,EAAA,CAAkB,SAAAhB,EAAqB,GAAGD,GAAM,kBAAmB,QAASI,GAAS,iBAAA,CAAmB,CAAA,CAAA,CAAA,EAG/G,CAEJ,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioItemCard.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItemCard.tsx"],"sourcesContent":["import { useId } from 'react'\nimport { Indicator, Item } from '@radix-ui/react-radio-group'\nimport type
|
|
1
|
+
{"version":3,"file":"RadioItemCard.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItemCard.tsx"],"sourcesContent":["import { useId } from 'react'\nimport { Indicator, Item } from '@radix-ui/react-radio-group'\nimport { type RenderComponentProps } from '$/shared/ui/formElements/uncontrolled/radio/RadioGroup'\nimport { AdditionalContent } from '$/shared/ui/formElements/uncontrolled/radio/ui/AdditionalContent'\nimport { cn } from '$/shared/utils'\n\nexport interface RadioItemCardProps extends RenderComponentProps {}\n\nexport const RadioItemCard = ({\n classes,\n returnValue,\n displayValue,\n item,\n disabled: disableGroup,\n invalid,\n ...props\n}: RadioItemCardProps) => {\n const label = displayValue ? displayValue(item) : item?.label\n const value = returnValue ? returnValue(item) : item?.value\n const id = useId()\n\n const disabled = disableGroup || item?.disabled\n\n return (\n <Item\n {...props}\n className={cn('outline-none', { 'pointer-events-none': disabled })}\n asChild\n disabled={disabled}\n value={value}\n id={id}\n >\n <div>\n <li\n className={cn(\n 'group flex w-[160px] flex-col items-start rounded-md border border-solid border-blue-grey-500 px-6 py-4',\n { 'border-negative': invalid, 'bg-color-blue-grey-200': disabled },\n classes?.root\n )}\n >\n <div\n className={cn(\n 'mb-4 after:left-1/2 after:top-1/2 after:h-10 after:w-10',\n 'after:-translate-x-1/2 after:-translate-y-1/2 after:content-[\"\"]',\n 'after:absolute after:rounded-full [&:not(:disabled)]:hover:after:bg-color-primary-tr-hover',\n 'after:duration-100 [&:not(:disabled)]:active:after:bg-color-primary-tr-pressed',\n 'after:-z-10 [&:not(:disabled)]:focus:after:bg-color-primary-tr-focus',\n 'relative h-6 w-6 rounded-full border-2 border-blue-grey-700',\n 'group-data-[state=checked]:border-primary-default',\n {\n 'border-negative': invalid\n },\n classes?.item\n )}\n >\n <Indicator\n className={cn(\n 'absolute left-1/2 top-1/2 h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-color-primary-default',\n 'group-disabled:group-data-[state=checked]:bg-color-negative',\n classes?.indicator\n )}\n />\n </div>\n <label\n htmlFor={id}\n className={cn(\n 'desk-body-regular-l mb-4 capitalize text-color-dark',\n { 'text-color-disabled': disabled },\n classes?.label\n )}\n >\n {label}\n </label>\n {item?.additionalContent && (\n <AdditionalContent disabled={disabled} {...item?.additionalContent} classes={classes?.additionalContent} />\n )}\n </li>\n </div>\n </Item>\n )\n}\n"],"names":["RadioItemCard","classes","returnValue","displayValue","item","disableGroup","invalid","props","label","value","id","useId","disabled","jsx","Item","cn","jsxs","Indicator","AdditionalContent"],"mappings":"6PAQO,MAAMA,EAAgB,CAAC,CAC5B,QAAAC,EACA,YAAAC,EACA,aAAAC,EACA,KAAAC,EACA,SAAUC,EACV,QAAAC,EACA,GAAGC,CACL,IAA0B,CACxB,MAAMC,EAAQL,EAAeA,EAAaC,CAAI,EAAIA,GAAM,MAClDK,EAAQP,EAAcA,EAAYE,CAAI,EAAIA,GAAM,MAChDM,EAAKC,EAAA,EAELC,EAAWP,GAAgBD,GAAM,SAEvC,OACES,EAACC,EAAA,CACE,GAAGP,EACJ,UAAWQ,EAAG,eAAgB,CAAE,sBAAuBH,EAAU,EACjE,QAAO,GACP,SAAAA,EACA,MAAAH,EACA,GAAAC,EAEA,WAAC,MAAA,CACC,SAAAM,EAAC,KAAA,CACC,UAAWD,EACT,0GACA,CAAE,kBAAmBT,EAAS,yBAA0BM,CAAA,EACxDX,GAAS,IAAA,EAGX,SAAA,CAAAY,EAAC,MAAA,CACC,UAAWE,EACT,0DACA,mEACA,6FACA,iFACA,uEACA,8DACA,oDACA,CACE,kBAAmBT,CAAA,EAErBL,GAAS,IAAA,EAGX,SAAAY,EAACI,EAAA,CACC,UAAWF,EACT,4GACA,8DACAd,GAAS,SAAA,CACX,CAAA,CACF,CAAA,EAEFY,EAAC,QAAA,CACC,QAASH,EACT,UAAWK,EACT,sDACA,CAAE,sBAAuBH,CAAA,EACzBX,GAAS,KAAA,EAGV,SAAAO,CAAA,CAAA,EAEFJ,GAAM,mBACLS,EAACK,EAAA,CAAkB,SAAAN,EAAqB,GAAGR,GAAM,kBAAmB,QAASH,GAAS,iBAAA,CAAmB,CAAA,CAAA,CAAA,CAE7G,CACF,CAAA,CAAA,CAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioItemTab.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItemTab.tsx"],"sourcesContent":["import { useId } from 'react'\nimport { Item } from '@radix-ui/react-radio-group'\nimport type
|
|
1
|
+
{"version":3,"file":"RadioItemTab.js","sources":["../../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/ui/RadioItemTab.tsx"],"sourcesContent":["import { useId } from 'react'\nimport { Item } from '@radix-ui/react-radio-group'\nimport { type RenderComponentProps } from '$/shared/ui/formElements/uncontrolled/radio/RadioGroup'\nimport { AdditionalContent } from '$/shared/ui/formElements/uncontrolled/radio/ui/AdditionalContent'\nimport { cn } from '$/shared/utils'\n\nexport interface RadioItemTabProps extends RenderComponentProps {}\n\nexport const RadioItemTab = ({\n classes,\n returnValue,\n displayValue,\n item,\n disabled: disableGroup,\n invalid,\n ...props\n}: RadioItemTabProps) => {\n const label = displayValue ? displayValue(item) : item.label\n const value = returnValue ? returnValue(item) : item.value\n const id = useId()\n\n const disabled = disableGroup || item?.disabled\n\n return (\n <Item {...props} asChild disabled={disabled} value={value} id={id}>\n <li\n className={cn(\n 'group desk-body-regular-l cursor-pointer rounded-sm border border-solid border-transparent bg-color-blue-grey-100 px-4 py-2 text-color-secondary outline outline-2 outline-transparent transition-colors hover:bg-color-blue-grey-200 hover:text-color-secondary data-[state=checked]:!bg-color-primary-default',\n { 'pointer-events-none text-color-disabled': disabled, 'border-negative': invalid },\n classes?.root\n )}\n >\n <label\n htmlFor={id}\n className={cn(\n 'desk-body-regular-l cursor-pointer text-color-dark transition-colors group-data-[state=checked]:!text-color-white',\n { 'text-color-disabled': disabled },\n classes?.label\n )}\n >\n {label}\n </label>\n {item?.additionalContent && (\n <AdditionalContent disabled={disabled} {...item?.additionalContent} classes={classes?.additionalContent} />\n )}\n </li>\n </Item>\n )\n}\n"],"names":["RadioItemTab","classes","returnValue","displayValue","item","disableGroup","invalid","props","label","value","id","useId","disabled","jsx","Item","jsxs","cn","AdditionalContent"],"mappings":"8OAQO,MAAMA,EAAe,CAAC,CAC3B,QAAAC,EACA,YAAAC,EACA,aAAAC,EACA,KAAAC,EACA,SAAUC,EACV,QAAAC,EACA,GAAGC,CACL,IAAyB,CACvB,MAAMC,EAAQL,EAAeA,EAAaC,CAAI,EAAIA,EAAK,MACjDK,EAAQP,EAAcA,EAAYE,CAAI,EAAIA,EAAK,MAC/CM,EAAKC,EAAA,EAELC,EAAWP,GAAgBD,GAAM,SAEvC,OACES,EAACC,GAAM,GAAGP,EAAO,QAAO,GAAC,SAAAK,EAAoB,MAAAH,EAAc,GAAAC,EACzD,SAAAK,EAAC,KAAA,CACC,UAAWC,EACT,kTACA,CAAE,0CAA2CJ,EAAU,kBAAmBN,CAAA,EAC1EL,GAAS,IAAA,EAGX,SAAA,CAAAY,EAAC,QAAA,CACC,QAASH,EACT,UAAWM,EACT,oHACA,CAAE,sBAAuBJ,CAAA,EACzBX,GAAS,KAAA,EAGV,SAAAO,CAAA,CAAA,EAEFJ,GAAM,mBACLS,EAACI,EAAA,CAAkB,SAAAL,EAAqB,GAAGR,GAAM,kBAAmB,QAASH,GAAS,iBAAA,CAAmB,CAAA,CAAA,CAAA,EAG/G,CAEJ"}
|
|
@@ -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 {
|
|
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 { type DataLayers } from '$/shared/types'\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 * Даталееры\n */\n dataLayers?: DataLayers\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 dataLayers,\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 data-layer-id={dataLayers?.targetId}\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","dataLayers","props","ref","filesStatus","removeFile","dropzoneState","useUploader","root","input","files","jsxs","Fragment","jsx","cn","UploaderInput","UploaderFiles"],"mappings":"mXAyDO,MAAMA,EAAeC,EAC1B,CACE,CACE,QAAAC,EACA,gBAAAC,EAAkBC,EAClB,KAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,YAAAC,EAAa,WAAAC,EAAY,cAAAC,CAAA,EAAkBC,EAAY,CAC7D,gBAAiBX,EACjB,gBAAAH,EACA,SAAAM,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,KAAAQ,EAAM,MAAAC,EAAO,MAAAC,CAAA,EAAUlB,GAAW,CAAA,EAE1C,OACEmB,EAAAC,EAAA,CACE,SAAA,CAAAC,EAAC,MAAA,CAAI,UAAWC,EAAG,0BAA2BN,CAAI,EAChD,SAAAK,EAACE,EAAA,CACE,GAAGb,EACJ,IAAAC,EACA,KAAAR,EACA,QAASc,EACT,SAAAZ,EACA,QAAAC,EACA,cAAAQ,EACA,iBAAAN,EACA,gBAAeC,GAAY,QAAA,CAAA,EAE/B,IACCe,EAAA,CAAc,MAAOpB,EAAO,WAAAS,EAAwB,QAASK,EAAO,YAAAN,CAAA,CAA0B,CAAA,EACjG,CAEJ,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useState as x}from"react";import{useDropzone as S}from"react-dropzone";import{
|
|
1
|
+
import{useState as x}from"react";import{useDropzone as S}from"react-dropzone";import{Notification as n}from"../../../../../notification/Notification.js";import{FilesErrorCode as c,bytesToMegabytes as b}from"../helpers.js";const v=({dropzoneOptions:r,controlledFiles:m=[],onChange:t,externalHandlers:f})=>{const[p,u]=x({}),l=o=>{const a=m?.filter((s,e)=>e!==o);t&&t(a)},F=S({onDrop:(o,a)=>{switch(o.forEach(e=>{const d=new FileReader;u(i=>({...i,[e.name]:"loading"})),d.onload=()=>{u(i=>({...i,[e.name]:"success"}))},d.readAsArrayBuffer(e)}),a[0]?.errors[0]?.code){case c.FileInvalidType:n({intent:"error",text:"Неверный формат файла. Загрузите в формате jpg/png/pdf"});break;case c.FileTooLarge:n({intent:"error",text:`Файл слишком большой. Максимальный размер ${r.maxSize?b(r.maxSize):0} МБ`});break;case c.TooManyFiles:n({intent:"error",text:`Вы загрузили слишком много файлов. Максимальное количество ${r.maxFiles}`});break}const s=[...m,...o];t&&t(s),f?.onChange&&f?.onChange(s)},...r});return{filesStatus:p,removeFile:l,dropzoneState:F}};export{v as useUploader};
|
|
2
2
|
//# sourceMappingURL=useUploader.js.map
|
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 {
|
|
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 { bytesToMegabytes } from '$/shared/ui/'\nimport { FilesErrorCode } from '$/shared/ui/formElements/uncontrolled/uploader/model'\nimport { type ExternalHandlers } from '$/shared/ui/formElements/uncontrolled/uploader/UploaderBase'\nimport { Notification } from '$/shared/ui/notification/Notification'\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","FilesErrorCode","Notification","bytesToMegabytes"],"mappings":"8NAcO,MAAMA,EAAc,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,GAAiB,OAAO,CAACS,EAAGC,IAAQA,IAAQH,CAAK,EAClEN,KAAmBO,CAAY,CACrC,EA2CMG,EAAgBC,EAAY,CAChC,OA1Ca,CAACC,EAAuBC,IAAmC,CAYxE,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,EAEOD,EAAc,CAAC,GAAG,OAAO,CAAC,GAAG,KAAA,CACnC,KAAKI,EAAe,gBAClBC,EAAa,CACX,OAAQ,QACR,KAAM,wDAAA,CACP,EACD,MACF,KAAKD,EAAe,aAClBC,EAAa,CACX,OAAQ,QACR,KAAM,6CAA6CpB,EAAgB,QAAUqB,EAAiBrB,EAAgB,OAAO,EAAI,CAAC,KAAA,CAC3H,EACD,MACF,KAAKmB,EAAe,aAClBC,EAAa,CACX,OAAQ,QACR,KAAM,8DAA8DpB,EAAgB,QAAQ,EAAA,CAC7F,EACD,KAEA,CAGJ,MAAMS,EAAe,CAAC,GAAGR,EAAiB,GAAGa,CAAa,EAEtDZ,KAAmBO,CAAY,EAC/BN,GAAkB,UAAUA,GAAkB,SAASM,CAAY,CACzE,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 '
|
|
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 '$/shared/ui/formElements/uncontrolled/uploader/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-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,GAAS,KACT,CAAE,4CAA6CC,CAAA,EAC/C,CAAE,kBAAmBC,CAAA,CAAQ,EAE/B,IAAAI,EACC,GAAGC,EAEJ,SAAA,CAAAC,EAAC,OAAI,UAAWC,EAAG,uDAAwDT,GAAS,aAAa,EAC/F,SAAA,CAAAU,EAACC,EAAA,CAAK,KAAK,eAAe,UAAWF,EAAG,4BAA6BT,GAAS,IAAI,EAAG,IACpF,IAAA,CAAE,UAAWS,EAAG,4DAA6DT,GAAS,WAAW,EAAG,SAAA,CAAA,gBAEnGU,EAAC,QAAK,UAAWD,EAAG,0BAA2BT,GAAS,eAAe,EAAG,SAAA,sBAAA,CAAoB,CAAA,CAAA,CAChG,CAAA,EACF,EACAU,EAAC,QAAA,CACE,GAAGL,EACH,GAAGN,EAAc,cAAA,EAClB,QAASK,GAAkB,QAC3B,KAAAD,EACA,IAAKJ,EAAc,SACnB,SAAAE,EACA,UAAWQ,EAAGT,GAAS,KAAK,EAC5B,UAAQ,UAAA,CAAA,CACV,CAAA,CAAA,CAGN,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import{iconsMap as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import m from"../../../../static/info/helpCircle.svg.js";import{iconsMap as p}from"./iconsMap.js";const s=({name:o,...r})=>{const n=p?.[o]??m;return t(n,{...r})};export{s as Icon};
|
|
2
2
|
//# sourceMappingURL=Icon.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.js","sources":["../../../../../lib/shared/ui/icon/Icon.tsx"],"sourcesContent":["import * as React from 'react'\nimport { type AllowedIcons } from './allowedIcons'\nimport { iconsMap } from './iconsMap'\n\ntype IconProps = React.SVGProps<SVGSVGElement> & {\n name: AllowedIcons\n}\n\nexport const Icon = ({ name, ...props }: IconProps) => {\n const IconComponent = iconsMap[name]\n\n return <IconComponent {...props} />\n}\n"],"names":["Icon","name","props","IconComponent","iconsMap","jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Icon.js","sources":["../../../../../lib/shared/ui/icon/Icon.tsx"],"sourcesContent":["import * as React from 'react'\nimport Helpcircle from '../../../../static/info/helpCircle.svg?react'\nimport { type AllowedIcons } from './allowedIcons'\nimport { iconsMap } from './iconsMap'\n\ntype IconProps = React.SVGProps<SVGSVGElement> & {\n name: AllowedIcons\n}\n\nexport const Icon = ({ name, ...props }: IconProps) => {\n const IconComponent = iconsMap?.[name] ?? Helpcircle\n\n return <IconComponent {...props} />\n}\n"],"names":["Icon","name","props","IconComponent","iconsMap","Helpcircle","jsx"],"mappings":"0IASO,MAAMA,EAAO,CAAC,CAAE,KAAAC,EAAM,GAAGC,KAAuB,CACrD,MAAMC,EAAgBC,IAAWH,CAAI,GAAKI,EAE1C,OAAOC,EAACH,EAAA,CAAe,GAAGD,CAAA,CAAO,CACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../../../lib/shared/ui/modal/Modal.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../../lib/shared/ui/modal/Modal.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { modalContentAnimation, modalOverlayAnimation } from '$/shared/ui/modal/model/helpers'\nimport { IframeModalContent } from '$/shared/ui/modal/ui/IframeModalContent'\nimport { ModalHeader, type TModalHeaderClasses } from '$/shared/ui/modal/ui/ModalHeader'\nimport { cn, mergeRefs } 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 useEffect(() => {\n if (isModalOpen) {\n document.body.style.overflow = 'hidden'\n }\n return () => {\n document.body.style.overflow = 'visible'\n }\n }, [isModalOpen])\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n const overlayRef = useRef<HTMLDivElement>(null)\n const isMouseDownOnOverlayRef = useRef(false)\n\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n if (e.target === overlayRef.current) {\n isMouseDownOnOverlayRef.current = true\n }\n }\n\n const handleMouseUp = (e: React.MouseEvent<HTMLDivElement>) => {\n if (isMouseDownOnOverlayRef.current && e.target === overlayRef.current) {\n closeModal()\n }\n isMouseDownOnOverlayRef.current = false\n }\n\n const modalBody = (\n <AnimatePresence>\n {isModalOpen && (\n <motion.div\n ref={mergeRefs((node) => node?.focus(), overlayRef)}\n tabIndex={-1}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\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-id='modal-overlay'\n {...modalOverlayAnimation}\n >\n <motion.div\n onMouseDown={(event) => event.stopPropagation()}\n className={cn(\n 'max-h-[90vh] w-full max-w-[600px] overflow-y-auto rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8',\n classes?.modal\n )}\n data-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","closeModal","classes","iframe","useEffect","iframeRef","useRef","overlayRef","isMouseDownOnOverlayRef","handleMouseDown","handleMouseUp","modalBody","jsx","AnimatePresence","motion","mergeRefs","node","cn","event","modalOverlayAnimation","jsxs","modalContentAnimation","ModalHeader","IframeModalContent","iframeBody","createPortal"],"mappings":"ufA2BO,MAAMA,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,EAAkB,YAAY,UAAU,KACxC,WAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAAkB,CAChBC,EAAU,KACJN,IACF,SAAS,KAAK,MAAM,SAAW,UAE1B,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,SACjC,GACC,CAACA,CAAW,CAAC,EAEhB,MAAMO,EAAYC,EAA0B,IAAI,EAC1CC,EAAaD,EAAuB,IAAI,EACxCE,EAA0BF,EAAO,EAAK,EAEtCG,EAAmB,GAAwC,CAC3D,EAAE,SAAWF,EAAW,UAC1BC,EAAwB,QAAU,GAEtC,EAEME,EAAiB,GAAwC,CACzDF,EAAwB,SAAW,EAAE,SAAWD,EAAW,SAC7DN,EAAA,EAEFO,EAAwB,QAAU,EACpC,EAEMG,EACJC,EAACC,EAAA,CACE,SAAAf,GACCc,EAACE,EAAO,IAAP,CACC,IAAKC,EAAWC,GAASA,GAAM,MAAA,EAAST,CAAU,EAClD,SAAU,GACV,YAAaE,EACb,UAAWC,EACX,UAAWO,EACT,oFACA,CAAE,SAAU,CAAClB,CAAA,EACbG,GAAS,OAAA,EAEX,UAAYgB,GAAU,CAChBA,EAAM,MAAQ,UAChBjB,EAAA,CAEJ,EACA,UAAQ,gBACP,GAAGkB,EAEJ,SAAAC,EAACN,EAAO,IAAP,CACC,YAAcI,GAAUA,EAAM,gBAAA,EAC9B,UAAWD,EACT,4HACAf,GAAS,KAAA,EAEX,UAAQ,QACP,GAAGmB,EAEJ,SAAA,CAAAT,EAACU,EAAA,CAAY,MAAA1B,EAAc,WAAAK,EAAwB,QAASC,GAAS,YAAa,EACjFC,EACCS,EAACW,EAAA,CAAmB,IAAKlB,EAAW,UAAWY,EAAG,OAAQf,GAAS,OAAO,EACvE,SAACsB,GAAeC,EAAa5B,EAAU2B,CAAU,EACpD,EAEAZ,EAAC,MAAA,CAAI,UAAWK,EAAG,OAAQf,GAAS,OAAO,EAAI,SAAAL,CAAA,CAAS,CAAA,CAAA,CAAA,CAE5D,CAAA,EAGN,EAEF,YAAU,SAAAE,EAAW0B,EAAad,EAAWX,CAAe,EAAIW,EAAU,CAC5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notification.js","sources":["../../../../../lib/shared/ui/notification/Notification.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Notification.js","sources":["../../../../../lib/shared/ui/notification/Notification.tsx"],"sourcesContent":["import { type ReactElement } from 'react'\nimport toast, { type Toast } from 'react-hot-toast'\nimport { CustomToast } from './ui/CustomToast'\n\nexport interface NotificationProps {\n duration?: number\n intent: 'info' | 'error'\n text: string | ReactElement\n customIcon?: ReactElement\n link?: string\n linkText?: string\n closure?: boolean\n}\n\nconst renderToast = (props: NotificationProps) => {\n switch (props.intent) {\n case 'info':\n return toast.custom((toastOptions: Toast) => <CustomToast {...toastOptions} {...props} />, {\n duration: props.duration ?? 5000\n })\n case 'error':\n return toast.custom((toastOptions: Toast) => <CustomToast {...toastOptions} {...props} />, {\n duration: props.duration ?? 10000\n })\n default:\n return null\n }\n}\n\nexport const Notification = (props: NotificationProps) => {\n return renderToast(props)\n}\n"],"names":["renderToast","props","toast","toastOptions","jsx","CustomToast","Notification"],"mappings":"yHAcA,MAAMA,EAAeC,GAA6B,CAChD,OAAQA,EAAM,OAAA,CACZ,IAAK,OACH,OAAOC,EAAM,OAAQC,GAAwBC,EAACC,GAAa,GAAGF,EAAe,GAAGF,CAAA,CAAO,EAAI,CACzF,SAAUA,EAAM,UAAY,GAAA,CAC7B,EACH,IAAK,QACH,OAAOC,EAAM,OAAQC,GAAwBC,EAACC,GAAa,GAAGF,EAAe,GAAGF,CAAA,CAAO,EAAI,CACzF,SAAUA,EAAM,UAAY,GAAA,CAC7B,EACH,QACE,OAAO,IAAA,CAEb,EAEaK,EAAgBL,GACpBD,EAAYC,CAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomToast.js","sources":["../../../../../../lib/shared/ui/notification/ui/CustomToast.tsx"],"sourcesContent":["import toast, { type Toast } from 'react-hot-toast'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Icon
|
|
1
|
+
{"version":3,"file":"CustomToast.js","sources":["../../../../../../lib/shared/ui/notification/ui/CustomToast.tsx"],"sourcesContent":["import toast, { type Toast } from 'react-hot-toast'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Icon, type NotificationProps } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nconst toastContainerConfig = cva(\n 'flex justify-between items-center gap-4 shadow-sm p-4 rounded-sm max-w-[328px] desktop:max-w-[576px]',\n {\n variants: {\n intent: {\n info: 'bg-color-footer text-color-white',\n error: 'bg-color-secondary-default text-color-white'\n }\n },\n defaultVariants: {\n intent: 'info'\n }\n }\n)\n\ntype TContainerConfig = VariantProps<typeof toastContainerConfig>\nexport type ICustomToastProps = NotificationProps & TContainerConfig & Toast\n\nexport const CustomToast = ({\n intent,\n text,\n customIcon,\n closure = true,\n link,\n linkText = 'Подробнее',\n id\n}: ICustomToastProps) => {\n return (\n <div className={cn(toastContainerConfig({ intent }))}>\n <div className='flex items-center gap-2'>\n {customIcon && <span className='size-6'>{customIcon}</span>}\n <div className='desk-body-regular-m text-color-white'>{text}</div>\n </div>\n\n {(link || closure) && (\n <div className='flex items-center gap-6'>\n {link && (\n <a href={link} className='mob-body-medium-m cursor-pointer underline' target='_blank' rel='noreferrer'>\n {linkText}\n </a>\n )}\n\n {closure && (\n <Icon onClick={() => toast.dismiss(id)} name='general/close' className='size-5 cursor-pointer text-icon-white' />\n )}\n </div>\n )}\n </div>\n )\n}\n"],"names":["toastContainerConfig","cva","CustomToast","intent","text","customIcon","closure","link","linkText","id","jsxs","cn","jsx","Icon","toast"],"mappings":"oNAKA,MAAMA,EAAuBC,EAC3B,uGACA,CACE,SAAU,CACR,OAAQ,CACN,KAAM,mCACN,MAAO,6CAAA,CACT,EAEF,gBAAiB,CACf,OAAQ,MAAA,CACV,CAEJ,EAKaC,EAAc,CAAC,CAC1B,OAAAC,EACA,KAAAC,EACA,WAAAC,EACA,QAAAC,EAAU,GACV,KAAAC,EACA,SAAAC,EAAW,YACX,GAAAC,CACF,IAEIC,EAAC,OAAI,UAAWC,EAAGX,EAAqB,CAAE,OAAAG,CAAA,CAAQ,CAAC,EACjD,SAAA,CAAAO,EAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAL,GAAcO,EAAC,OAAA,CAAK,UAAU,SAAU,SAAAP,EAAW,EACpDO,EAAC,MAAA,CAAI,UAAU,uCAAwC,SAAAR,CAAA,CAAK,CAAA,EAC9D,GAEEG,GAAQD,IACRI,EAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAH,GACCK,EAAC,IAAA,CAAE,KAAML,EAAM,UAAU,6CAA6C,OAAO,SAAS,IAAI,aACvF,SAAAC,CAAA,CACH,EAGDF,GACCM,EAACC,EAAA,CAAK,QAAS,IAAMC,EAAM,QAAQL,CAAE,EAAG,KAAK,gBAAgB,UAAU,uCAAA,CAAwC,CAAA,CAAA,CAEnH,CAAA,EAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isSlottable.js","sources":["../../../../../../lib/shared/ui/slot/model/isSlottable.ts"],"sourcesContent":["import { isValidElement } from 'react'\nimport { Slottable, type SlottableProps } from '
|
|
1
|
+
{"version":3,"file":"isSlottable.js","sources":["../../../../../../lib/shared/ui/slot/model/isSlottable.ts"],"sourcesContent":["import { isValidElement } from 'react'\nimport { Slottable, type SlottableProps } from '$/shared/ui/slot/ui'\n\nexport const isSlottable = (child: React.ReactNode): child is React.ReactElement<SlottableProps, typeof Slottable> => {\n return isValidElement(child) && child.type === Slottable\n}\n"],"names":["isSlottable","child","isValidElement","Slottable"],"mappings":"sFAGO,MAAMA,EAAeC,GACnBC,EAAeD,CAAK,GAAKA,EAAM,OAASE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{forwardRef as l,isValidElement as n,cloneElement as f,Children as t}from"react";import{getElementRef as p}from"../model/getElementRef.js";import{
|
|
1
|
+
import{forwardRef as l,isValidElement as n,cloneElement as f,Children as t}from"react";import{getElementRef as p}from"../model/getElementRef.js";import{mergeProps as s}from"../model/mergeProps.js";import{mergeRefs as i}from"../../../utils/mergeRefs.js";const u=l(({children:o,...m},e)=>{if(n(o)){const r=p(o);return f(o,{...s(m,o.props),ref:e?i(e,r):r})}return t.count(o)>1?t.only(null):null});u.displayName="SlotClone";export{u as SlotClone};
|
|
2
2
|
//# sourceMappingURL=SlotClone.js.map
|
|
@@ -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
|
|
1
|
+
{"version":3,"file":"SlotClone.js","sources":["../../../../../../lib/shared/ui/slot/ui/SlotClone.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport { getElementRef } from '../model/getElementRef'\nimport { mergeProps } from '../model/mergeProps'\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-ignore\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":"6PASO,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
|
|
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, type ITabContent } from '$/shared/ui'\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","Accordion"],"mappings":"kLAcO,MAAMA,EAAa,CAAC,CAAE,QAAAC,EAAS,SAAAC,KAElCC,EAAC,MAAA,CAAI,UAAWC,EAAG,sBAAuBH,GAAS,eAAe,EAC/D,SAAAC,GAAU,IAAI,CAAC,CAAE,GAAAG,EAAI,KAAAC,EAAM,UAAAC,KACtBA,GAAaA,GAAW,QAEvBC,EAAa,QAAb,CAA8B,MAAOH,EAAI,UAAWD,EAAG,OAAQH,GAAS,OAAO,EAC9E,WAACQ,EAAA,CAAU,MAAOF,GAAW,MAAQ,SAAAD,CAAA,CAAK,GADjBD,CAE3B,EAKFF,EAACK,EAAa,QAAb,CAA8B,MAAOH,EAAI,UAAWD,EAAG,OAAQH,GAAS,OAAO,EAC7E,YADwBI,CAE3B,CAEH,CAAA,CACH"}
|
|
@@ -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,MACF,CAEAI,EAAQ,eAAe,CAAE,SAAAF,EAAU,MAAAC,CAAA,CAAO,CAC5C"}
|
|
1
|
+
{"version":3,"file":"scrollToElement.js","sources":["../../../../lib/shared/utils/scrollToElement.ts"],"sourcesContent":["import type { AllowedWidgets } from '$/widgets/model'\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,2 +1,2 @@
|
|
|
1
|
-
import{Banner as
|
|
1
|
+
import{Banner as n}from"./Banner.js";export{n as Banner};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as r,Fragment as
|
|
1
|
+
import{jsxs as r,Fragment as h,jsx as e}from"react/jsx-runtime";import{cn as l}from"../../../../shared/utils/cn.js";import{Buttons as f}from"./ui/Buttons.js";import{Advantages as s}from"./ui/Advantages.js";import{useDevice as b}from"../../../../shared/hooks/useDevice.js";import{ResponsiveContainer as u}from"../../../../shared/ui/responsiveContainer/ResponsiveContainer.js";const j=({headTitle:n,subtitle:a,buttonsConfig:c,advantages:t,classes:o,images:d,backgroundColor:p})=>{const{isMobile:m}=b(),i=t?.details&&t?.details?.items.length>0;return r(h,{children:[r("section",{id:"banner","data-test-id":"banner",style:{backgroundColor:p??"#d9edff"},className:l("relative h-[552px] desktop:h-[456px]",o?.root),children:[e("div",{className:"absolute bottom-0 left-0 right-0 top-0 mx-auto h-full max-w-[1920px] desktop:h-[456px]",children:m?e("img",{loading:"eager",fetchPriority:"high",src:d?.mobile,className:"h-full w-full object-cover object-center",alt:d?.alt}):e("img",{loading:"eager",fetchPriority:"high",src:d?.desktop,alt:d?.alt,className:"h-full w-full object-cover object-center"})}),r(u,{className:l("h-full",o?.container),children:[e("div",{className:l("flex h-full",o?.wrapper),children:r("div",{className:l("flex w-[328px] flex-col gap-10 pt-6 desktop:w-full desktop:pt-20",o?.textBlock),children:[r("div",{className:"z-10 flex flex-col gap-4",children:[e("div",{dangerouslySetInnerHTML:{__html:n},className:l("mob-headline-bold-m text-color-dark desktop:desk-headline-bold-l",o?.title)}),e("div",{dangerouslySetInnerHTML:{__html:a},className:l("desk-body-regular-l text-color-dark",o?.subtitle)})]}),e(f,{buttonConfig:c})]})}),t?.enabled&&i&&e(s,{classes:{root:"mobile:hidden desktop:absolute desktop:bottom-[-50px] desktop:right-1/2 desktop:translate-x-1/2 desktop:rounded-md desktop:p-0"},...t})]})]}),t?.enabled&&i&&e(s,{classes:{root:"px-4 pt-4 mobile:bg-color-white desktop:hidden"},...t})]})};export{j as BannerImageFull};
|
|
2
2
|
//# sourceMappingURL=BannerImageFull.js.map
|