@scbt-ecom/ui 0.156.0 → 0.156.1
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/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":"BannerImageFull.js","sources":["../../../../../../lib/widgets/banner/ui/banners/BannerImageFull.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"BannerImageFull.js","sources":["../../../../../../lib/widgets/banner/ui/banners/BannerImageFull.tsx"],"sourcesContent":["import { Advantages, Buttons } from './ui'\nimport { useDevice } from '$/shared/hooks'\nimport { ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type BannerProps } from '$/widgets'\n\nexport const BannerImageFull = ({\n headTitle,\n subtitle,\n buttonsConfig,\n advantages,\n classes,\n images,\n backgroundColor\n}: Omit<BannerProps, 'bannerVariant'>) => {\n const { isMobile } = useDevice()\n\n const advantagesExist = advantages?.details && advantages?.details?.items.length > 0\n\n return (\n <>\n <section\n id='banner'\n data-test-id='banner'\n style={{ backgroundColor: backgroundColor ?? '#d9edff' }}\n className={cn('relative h-[552px] desktop:h-[456px]', classes?.root)}\n >\n <div className='absolute bottom-0 left-0 right-0 top-0 mx-auto h-full max-w-[1920px] desktop:h-[456px]'>\n {isMobile ? (\n <img\n loading='eager'\n fetchPriority='high'\n src={images?.mobile}\n className='h-full w-full object-cover object-center'\n alt={images?.alt}\n />\n ) : (\n <img\n loading='eager'\n fetchPriority='high'\n src={images?.desktop}\n alt={images?.alt}\n className='h-full w-full object-cover object-center'\n />\n )}\n </div>\n\n <ResponsiveContainer className={cn('h-full', classes?.container)}>\n <div className={cn('flex h-full', classes?.wrapper)}>\n <div className={cn('flex w-[328px] flex-col gap-10 pt-6 desktop:w-full desktop:pt-20', classes?.textBlock)}>\n <div className='z-10 flex flex-col gap-4'>\n <div\n dangerouslySetInnerHTML={{ __html: headTitle }}\n className={cn('mob-headline-bold-m text-color-dark desktop:desk-headline-bold-l', classes?.title)}\n />\n <div\n dangerouslySetInnerHTML={{ __html: subtitle }}\n className={cn('desk-body-regular-l text-color-dark', classes?.subtitle)}\n />\n </div>\n\n <Buttons buttonConfig={buttonsConfig} />\n </div>\n </div>\n\n {advantages?.enabled && advantagesExist && (\n <Advantages\n classes={{\n root: 'mobile:hidden desktop:absolute desktop:bottom-[-50px] desktop:right-1/2 desktop:translate-x-1/2 desktop:rounded-md desktop:p-0'\n }}\n {...advantages}\n />\n )}\n </ResponsiveContainer>\n </section>\n {advantages?.enabled && advantagesExist && (\n <Advantages\n classes={{\n root: 'px-4 pt-4 mobile:bg-color-white desktop:hidden'\n }}\n {...advantages}\n />\n )}\n </>\n )\n}\n"],"names":["BannerImageFull","headTitle","subtitle","buttonsConfig","advantages","classes","images","backgroundColor","isMobile","useDevice","advantagesExist","jsxs","Fragment","cn","jsx","ResponsiveContainer","Buttons","Advantages"],"mappings":"uXAMO,MAAMA,EAAkB,CAAC,CAC9B,UAAAC,EACA,SAAAC,EACA,cAAAC,EACA,WAAAC,EACA,QAAAC,EACA,OAAAC,EACA,gBAAAC,CACF,IAA0C,CACxC,KAAM,CAAE,SAAAC,CAAA,EAAaC,EAAA,EAEfC,EAAkBN,GAAY,SAAWA,GAAY,SAAS,MAAM,OAAS,EAEnF,OACEO,EAAAC,EAAA,CACE,SAAA,CAAAD,EAAC,UAAA,CACC,GAAG,SACH,eAAa,SACb,MAAO,CAAE,gBAAiBJ,GAAmB,SAAA,EAC7C,UAAWM,EAAG,uCAAwCR,GAAS,IAAI,EAEnE,SAAA,CAAAS,EAAC,MAAA,CAAI,UAAU,yFACZ,SAAAN,EACCM,EAAC,MAAA,CACC,QAAQ,QACR,cAAc,OACd,IAAKR,GAAQ,OACb,UAAU,2CACV,IAAKA,GAAQ,GAAA,CAAA,EAGfQ,EAAC,MAAA,CACC,QAAQ,QACR,cAAc,OACd,IAAKR,GAAQ,QACb,IAAKA,GAAQ,IACb,UAAU,0CAAA,CAAA,EAGhB,IAECS,EAAA,CAAoB,UAAWF,EAAG,SAAUR,GAAS,SAAS,EAC7D,SAAA,CAAAS,EAAC,MAAA,CAAI,UAAWD,EAAG,cAAeR,GAAS,OAAO,EAChD,SAAAM,EAAC,MAAA,CAAI,UAAWE,EAAG,mEAAoER,GAAS,SAAS,EACvG,SAAA,CAAAM,EAAC,MAAA,CAAI,UAAU,2BACb,SAAA,CAAAG,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQb,CAAA,EACnC,UAAWY,EAAG,mEAAoER,GAAS,KAAK,CAAA,CAAA,EAElGS,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQZ,CAAA,EACnC,UAAWW,EAAG,sCAAuCR,GAAS,QAAQ,CAAA,CAAA,CACxE,EACF,EAEAS,EAACE,EAAA,CAAQ,aAAcb,CAAA,CAAe,CAAA,CAAA,CACxC,CAAA,CACF,EAECC,GAAY,SAAWM,GACtBI,EAACG,EAAA,CACC,QAAS,CACP,KAAM,gIAAA,EAEP,GAAGb,CAAA,CAAA,CACN,CAAA,CAEJ,CAAA,CAAA,CAAA,EAEDA,GAAY,SAAWM,GACtBI,EAACG,EAAA,CACC,QAAS,CACP,KAAM,gDAAA,EAEP,GAAGb,CAAA,CAAA,CACN,EAEJ,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as d,jsx as e}from"react/jsx-runtime";import{cn as o}from"../../../../shared/utils/cn.js";import{Buttons as
|
|
1
|
+
import{jsxs as d,jsx as e}from"react/jsx-runtime";import{cn as o}from"../../../../shared/utils/cn.js";import{Buttons as m}from"./ui/Buttons.js";import{Advantages as n}from"./ui/Advantages.js";import{ResponsiveContainer as h}from"../../../../shared/ui/responsiveContainer/ResponsiveContainer.js";const u=({headTitle:s,subtitle:a,buttonsConfig:p,advantages:l,classes:t,images:i,backgroundColor:c})=>{const r=l?.details&&l?.details?.items.length>0;return d("section",{id:"banner",style:{backgroundColor:c??"#d9edff"},"data-test-id":"banner",className:o("",t?.root),children:[d(h,{className:o("relative desktop:h-[456px]",t?.container),children:[d("div",{className:o("flex flex-col desktop:flex-row desktop:justify-between",t?.wrapper),children:[d("div",{className:"flex flex-col desktop:gap-10 desktop:pt-20",children:[d("div",{className:o("flex flex-col gap-4 pt-6 desktop:pt-0",t?.textBlock),children:[e("div",{dangerouslySetInnerHTML:{__html:s},className:o("mob-headline-bold-m text-color-dark desktop:desk-headline-bold-l",t?.title)}),e("div",{dangerouslySetInnerHTML:{__html:a},className:o("desk-body-regular-l text-color-dark",t?.subtitle)})]}),e(m,{buttonConfig:p,classes:{group:"z-10"}})]}),e("div",{className:o("relative flex h-[356px] justify-center desktop:hidden desktop:h-[456px] desktop:w-[550px]",t?.imageContainer),children:e("img",{loading:"eager",fetchpriority:"high",src:i?.mobile,alt:i?.alt,className:"h-full object-contain"})}),e("div",{className:o("relative flex h-[356px] justify-center mobile:hidden desktop:h-[456px] desktop:w-[550px]",t?.imageContainer),children:e("img",{loading:"eager",fetchpriority:"high",src:i?.desktop,alt:i?.alt,className:"h-full object-contain"})})]}),l?.enabled&&r&&e(n,{classes:{root:"mobile:hidden desktop:absolute desktop:bottom-[-50px] desktop:right-1/2 desktop:translate-x-1/2 desktop:rounded-md desktop:p-0"},...l})]}),l?.enabled&&r&&e(n,{classes:{root:"px-4 pt-4 mobile:bg-color-white desktop:hidden"},...l})]})};export{u as BannerWithSeparateImg};
|
|
2
2
|
//# sourceMappingURL=BannerWithSeparateImg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BannerWithSeparateImg.js","sources":["../../../../../../lib/widgets/banner/ui/banners/BannerWithSeparateImg.tsx"],"sourcesContent":["/* eslint-disable react/no-unknown-property */\nimport { Advantages, Buttons } from './ui'\nimport { ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type BannerProps
|
|
1
|
+
{"version":3,"file":"BannerWithSeparateImg.js","sources":["../../../../../../lib/widgets/banner/ui/banners/BannerWithSeparateImg.tsx"],"sourcesContent":["/* eslint-disable react/no-unknown-property */\nimport { Advantages, Buttons } from './ui'\nimport { ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type BannerProps } from '$/widgets'\n\nexport const BannerWithSeparateImg = ({\n headTitle,\n subtitle,\n buttonsConfig,\n advantages,\n classes,\n images,\n backgroundColor\n}: Omit<BannerProps, 'bannerVariant'>) => {\n const advantagesExist = advantages?.details && advantages?.details?.items.length > 0\n\n return (\n <section\n id='banner'\n style={{ backgroundColor: backgroundColor ?? '#d9edff' }}\n data-test-id='banner'\n className={cn('', classes?.root)}\n >\n <ResponsiveContainer className={cn('relative desktop:h-[456px]', classes?.container)}>\n <div className={cn('flex flex-col desktop:flex-row desktop:justify-between', classes?.wrapper)}>\n <div className='flex flex-col desktop:gap-10 desktop:pt-20'>\n <div className={cn('flex flex-col gap-4 pt-6 desktop:pt-0', classes?.textBlock)}>\n <div\n dangerouslySetInnerHTML={{ __html: headTitle }}\n className={cn('mob-headline-bold-m text-color-dark desktop:desk-headline-bold-l', classes?.title)}\n />\n <div\n dangerouslySetInnerHTML={{ __html: subtitle }}\n className={cn('desk-body-regular-l text-color-dark', classes?.subtitle)}\n />\n </div>\n\n <Buttons\n buttonConfig={buttonsConfig}\n classes={{\n group: 'z-10'\n }}\n />\n </div>\n\n <div\n className={cn(\n 'relative flex h-[356px] justify-center desktop:hidden desktop:h-[456px] desktop:w-[550px]',\n classes?.imageContainer\n )}\n >\n {/* @ts-expect-error fetchpriority */}\n <img loading='eager' fetchpriority='high' src={images?.mobile} alt={images?.alt} className='h-full object-contain' />\n </div>\n\n <div\n className={cn(\n 'relative flex h-[356px] justify-center mobile:hidden desktop:h-[456px] desktop:w-[550px]',\n classes?.imageContainer\n )}\n >\n {/* @ts-expect-error fetchpriority */}\n <img loading='eager' fetchpriority='high' src={images?.desktop} alt={images?.alt} className='h-full object-contain' />\n </div>\n </div>\n\n {advantages?.enabled && advantagesExist && (\n <Advantages\n classes={{\n root: 'mobile:hidden desktop:absolute desktop:bottom-[-50px] desktop:right-1/2 desktop:translate-x-1/2 desktop:rounded-md desktop:p-0'\n }}\n {...advantages}\n />\n )}\n </ResponsiveContainer>\n\n {advantages?.enabled && advantagesExist && (\n <Advantages\n classes={{\n root: 'px-4 pt-4 mobile:bg-color-white desktop:hidden'\n }}\n {...advantages}\n />\n )}\n </section>\n )\n}\n"],"names":["BannerWithSeparateImg","headTitle","subtitle","buttonsConfig","advantages","classes","images","backgroundColor","advantagesExist","jsxs","cn","ResponsiveContainer","jsx","Buttons","Advantages"],"mappings":"uSAMO,MAAMA,EAAwB,CAAC,CACpC,UAAAC,EACA,SAAAC,EACA,cAAAC,EACA,WAAAC,EACA,QAAAC,EACA,OAAAC,EACA,gBAAAC,CACF,IAA0C,CACxC,MAAMC,EAAkBJ,GAAY,SAAWA,GAAY,SAAS,MAAM,OAAS,EAEnF,OACEK,EAAC,UAAA,CACC,GAAG,SACH,MAAO,CAAE,gBAAiBF,GAAmB,SAAA,EAC7C,eAAa,SACb,UAAWG,EAAG,GAAIL,GAAS,IAAI,EAE/B,SAAA,CAAAI,EAACE,GAAoB,UAAWD,EAAG,6BAA8BL,GAAS,SAAS,EACjF,SAAA,CAAAI,EAAC,OAAI,UAAWC,EAAG,yDAA0DL,GAAS,OAAO,EAC3F,SAAA,CAAAI,EAAC,MAAA,CAAI,UAAU,6CACb,SAAA,CAAAA,EAAC,OAAI,UAAWC,EAAG,wCAAyCL,GAAS,SAAS,EAC5E,SAAA,CAAAO,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQX,CAAA,EACnC,UAAWS,EAAG,mEAAoEL,GAAS,KAAK,CAAA,CAAA,EAElGO,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQV,CAAA,EACnC,UAAWQ,EAAG,sCAAuCL,GAAS,QAAQ,CAAA,CAAA,CACxE,EACF,EAEAO,EAACC,EAAA,CACC,aAAcV,EACd,QAAS,CACP,MAAO,MAAA,CACT,CAAA,CACF,EACF,EAEAS,EAAC,MAAA,CACC,UAAWF,EACT,4FACAL,GAAS,cAAA,EAIX,SAAAO,EAAC,MAAA,CAAI,QAAQ,QAAQ,cAAc,OAAO,IAAKN,GAAQ,OAAQ,IAAKA,GAAQ,IAAK,UAAU,uBAAA,CAAwB,CAAA,CAAA,EAGrHM,EAAC,MAAA,CACC,UAAWF,EACT,2FACAL,GAAS,cAAA,EAIX,SAAAO,EAAC,MAAA,CAAI,QAAQ,QAAQ,cAAc,OAAO,IAAKN,GAAQ,QAAS,IAAKA,GAAQ,IAAK,UAAU,uBAAA,CAAwB,CAAA,CAAA,CACtH,EACF,EAECF,GAAY,SAAWI,GACtBI,EAACE,EAAA,CACC,QAAS,CACP,KAAM,gIAAA,EAEP,GAAGV,CAAA,CAAA,CACN,EAEJ,EAECA,GAAY,SAAWI,GACtBI,EAACE,EAAA,CACC,QAAS,CACP,KAAM,gDAAA,EAEP,GAAGV,CAAA,CAAA,CACN,CAAA,CAAA,CAIR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as n}from"react/jsx-runtime";import{cva as a}from"class-variance-authority";import{BenefitItem as
|
|
1
|
+
import{jsx as r,jsxs as n}from"react/jsx-runtime";import{cva as a}from"class-variance-authority";import{BenefitItem as m}from"./ui/BenefitItem.js";import{cn as o}from"../../shared/utils/cn.js";import{ResponsiveContainer as l}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";const p=a("grid gap-4",{variants:{variant:{twoCards:"grid-cols-1 mobile:grid-rows-[repeat(2,400px)] desktop:grid-cols-2",threeCards:"grid-cols-1 desktop:grid-cols-2",fourCards:"grid-cols-1 mobile:grid-rows-[400px,1fr,1fr,400px] desktop:grid-cols-3"}}}),x=({headline:d,details:s,variant:i,classes:e})=>r("section",{id:"benefit","data-test-id":"benefit",className:o(e?.root),children:n(l,{className:e?.container,children:[r("div",{dangerouslySetInnerHTML:{__html:d},className:o("mob-headline-bold-s mb-8 desktop:desk-headline-bold-m",e?.heading)}),r("ul",{className:o(p({variant:i}),e?.grid),children:s?.map(t=>r(m,{variant:i,classes:e?.item,...t},t.title))})]})});export{x as Benefit,x as default};
|
|
2
2
|
//# sourceMappingURL=Benefit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Benefit.js","sources":["../../../../lib/widgets/benefit/Benefit.tsx"],"sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport {
|
|
1
|
+
{"version":3,"file":"Benefit.js","sources":["../../../../lib/widgets/benefit/Benefit.tsx"],"sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport { type Details } from './model/types'\nimport { BenefitItem, type BenefitItemClasses } from './ui/BenefitItem'\nimport { ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport type BenefitClasses = {\n root?: string\n container?: string\n item?: BenefitItemClasses\n heading?: string\n grid?: string\n}\n\nconst gridConfig = cva('grid gap-4', {\n variants: {\n variant: {\n twoCards: 'grid-cols-1 mobile:grid-rows-[repeat(2,400px)] desktop:grid-cols-2',\n threeCards: 'grid-cols-1 desktop:grid-cols-2',\n fourCards: 'grid-cols-1 mobile:grid-rows-[400px,1fr,1fr,400px] desktop:grid-cols-3'\n }\n }\n})\n\nexport interface BenefitProps {\n headline: string\n classes?: BenefitClasses\n variant: 'twoCards' | 'threeCards' | 'fourCards'\n details: Details[]\n}\n\nexport const Benefit = ({ headline, details, variant, classes }: BenefitProps) => {\n return (\n <section id='benefit' data-test-id='benefit' className={cn(classes?.root)}>\n <ResponsiveContainer className={classes?.container}>\n <div\n dangerouslySetInnerHTML={{ __html: headline }}\n className={cn('mob-headline-bold-s mb-8 desktop:desk-headline-bold-m', classes?.heading)}\n />\n <ul className={cn(gridConfig({ variant }), classes?.grid)}>\n {details?.map((card) => (\n <BenefitItem variant={variant} key={card.title} classes={classes?.item} {...card} />\n ))}\n </ul>\n </ResponsiveContainer>\n </section>\n )\n}\n\nexport default Benefit\n"],"names":["gridConfig","cva","Benefit","headline","details","variant","classes","jsx","cn","jsxs","ResponsiveContainer","card","BenefitItem"],"mappings":"kSAgBA,MAAMA,EAAaC,EAAI,aAAc,CACnC,SAAU,CACR,QAAS,CACP,SAAU,qEACV,WAAY,kCACZ,UAAW,wEAAA,CACb,CAEJ,CAAC,EASYC,EAAU,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,QAAAC,EAAS,QAAAC,KAElDC,EAAC,UAAA,CAAQ,GAAG,UAAU,eAAa,UAAU,UAAWC,EAAGF,GAAS,IAAI,EACtE,SAAAG,EAACC,EAAA,CAAoB,UAAWJ,GAAS,UACvC,SAAA,CAAAC,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQJ,CAAA,EACnC,UAAWK,EAAG,wDAAyDF,GAAS,OAAO,CAAA,CAAA,EAEzFC,EAAC,KAAA,CAAG,UAAWC,EAAGR,EAAW,CAAE,QAAAK,CAAA,CAAS,EAAGC,GAAS,IAAI,EACrD,SAAAF,GAAS,IAAKO,GACbJ,EAACK,EAAA,CAAY,QAAAP,EAAmC,QAASC,GAAS,KAAO,GAAGK,CAAA,EAAxCA,EAAK,KAAyC,CACnF,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as f}from"react/jsx-runtime";import{useState as p,useMemo as C}from"react";import{CalculatorView as b}from"./CalculatorView.js";import{cn as e}from"../../shared/utils/cn.js";import{CalculatorTabs as h}from"./ui/CalculatorTabs.js";import{ResponsiveContainer as g}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";import{Heading as x}from"../../shared/ui/heading/Heading.js";const S=({calculators:o,headline:m,classes:a})=>{const l=o.length>1,[n,s]=p(l?o[0]?.name:""),i=C(()=>o?.map(({name:c,label:d})=>({name:c,label:d})),[o]),u=l?i?.findIndex(c=>c.name===n):0,r=o[u];return t("section",{id:"calculator","data-test-id":"calculator",className:e(a?.root),children:t(g,{className:e(a?.container),children:f("div",{className:e(a?.wrapper),children:[t(x,{className:e("mb-8 desktop:mb-12",a?.headline),as:"h2",children:m}),l&&t(h,{calculatorTabs:i,activeCalculator:n,setActiveCalculator:s,classes:a?.calculatorTabs}),t(b,{name:r.name,label:r.label,calculatorInfoConfig:r.calculatorInfoConfig,calculatorFieldsConfig:r.calculatorFieldsConfig,classes:a?.calculatorView})]})})})};export{S as Calculator,S as default};
|
|
2
2
|
//# sourceMappingURL=Calculator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calculator.js","sources":["../../../../lib/widgets/calculator/Calculator.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { cn } from '../../shared/utils'\nimport {
|
|
1
|
+
{"version":3,"file":"Calculator.js","sources":["../../../../lib/widgets/calculator/Calculator.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { cn } from '../../shared/utils'\nimport { CalculatorView, type CalculatorViewClasses, type CalculatorViewProps } from './CalculatorView'\nimport { CalculatorTabs, type CalculatorTabsClasses, type CalculatorTabValue } from './ui'\nimport { Heading, ResponsiveContainer } from '$/shared/ui'\n\nexport type CalculatorClasses = {\n root?: string\n container?: string\n headline?: string\n wrapper?: string\n calculatorView?: CalculatorViewClasses\n calculatorTabs?: CalculatorTabsClasses\n}\n\nexport interface CalculatorProps {\n headline: string\n calculators: CalculatorViewProps[]\n classes?: CalculatorClasses\n}\n\nexport const Calculator = ({ calculators, headline, classes }: CalculatorProps) => {\n const shouldShowTabs = calculators.length > 1\n\n const [activeCalculator, setActiveCalculator] = useState<CalculatorTabValue>(shouldShowTabs ? calculators[0]?.name : '')\n\n const calculatorsTabs = useMemo(() => calculators?.map(({ name, label }) => ({ name, label })), [calculators])\n\n const currentCalculatorIndex = shouldShowTabs\n ? calculatorsTabs?.findIndex((tab) => tab.name === activeCalculator) // Активный калькулятор по значению таба\n : 0 // Берем первый калькулятор если табов нет\n\n const currentCalculator = calculators[currentCalculatorIndex]\n\n return (\n <section id='calculator' data-test-id='calculator' className={cn(classes?.root)}>\n <ResponsiveContainer className={cn(classes?.container)}>\n <div className={cn(classes?.wrapper)}>\n <Heading className={cn('mb-8 desktop:mb-12', classes?.headline)} as='h2'>\n {headline}\n </Heading>\n {shouldShowTabs && (\n <CalculatorTabs\n calculatorTabs={calculatorsTabs}\n activeCalculator={activeCalculator}\n setActiveCalculator={setActiveCalculator}\n classes={classes?.calculatorTabs}\n />\n )}\n\n <CalculatorView\n name={currentCalculator.name}\n label={currentCalculator.label}\n calculatorInfoConfig={currentCalculator.calculatorInfoConfig}\n calculatorFieldsConfig={currentCalculator.calculatorFieldsConfig}\n classes={classes?.calculatorView}\n />\n </div>\n </ResponsiveContainer>\n </section>\n )\n}\n\nexport default Calculator\n"],"names":["Calculator","calculators","headline","classes","shouldShowTabs","activeCalculator","setActiveCalculator","useState","calculatorsTabs","useMemo","name","label","currentCalculatorIndex","tab","currentCalculator","jsx","cn","ResponsiveContainer","jsxs","Heading","CalculatorTabs","CalculatorView"],"mappings":"yZAqBO,MAAMA,EAAa,CAAC,CAAE,YAAAC,EAAa,SAAAC,EAAU,QAAAC,KAA+B,CACjF,MAAMC,EAAiBH,EAAY,OAAS,EAEtC,CAACI,EAAkBC,CAAmB,EAAIC,EAA6BH,EAAiBH,EAAY,CAAC,GAAG,KAAO,EAAE,EAEjHO,EAAkBC,EAAQ,IAAMR,GAAa,IAAI,CAAC,CAAE,KAAAS,EAAM,MAAAC,CAAA,KAAa,CAAE,KAAAD,EAAM,MAAAC,CAAA,EAAQ,EAAG,CAACV,CAAW,CAAC,EAEvGW,EAAyBR,EAC3BI,GAAiB,UAAWK,GAAQA,EAAI,OAASR,CAAgB,EACjE,EAEES,EAAoBb,EAAYW,CAAsB,EAE5D,OACEG,EAAC,UAAA,CAAQ,GAAG,aAAa,eAAa,aAAa,UAAWC,EAAGb,GAAS,IAAI,EAC5E,SAAAY,EAACE,GAAoB,UAAWD,EAAGb,GAAS,SAAS,EACnD,SAAAe,EAAC,OAAI,UAAWF,EAAGb,GAAS,OAAO,EACjC,SAAA,CAAAY,EAACI,EAAA,CAAQ,UAAWH,EAAG,qBAAsBb,GAAS,QAAQ,EAAG,GAAG,KACjE,SAAAD,CAAA,CACH,EACCE,GACCW,EAACK,EAAA,CACC,eAAgBZ,EAChB,iBAAAH,EACA,oBAAAC,EACA,QAASH,GAAS,cAAA,CAAA,EAItBY,EAACM,EAAA,CACC,KAAMP,EAAkB,KACxB,MAAOA,EAAkB,MACzB,qBAAsBA,EAAkB,qBACxC,uBAAwBA,EAAkB,uBAC1C,QAASX,GAAS,cAAA,CAAA,CACpB,CAAA,CACF,EACF,EACF,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../lib/widgets/calculator/model/utils.ts"],"sourcesContent":["import type { FieldValues } from 'react-hook-form'\nimport { z } from 'zod'\nimport
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../lib/widgets/calculator/model/utils.ts"],"sourcesContent":["import type { FieldValues } from 'react-hook-form'\nimport { z } from 'zod'\nimport { getDynamicSchema } from '@/shared/utils'\nimport { type CalculatorViewProps } from '$/widgets'\nimport { type CalculatorSuffix, type ValueWithFormula } from '$/widgets/calculator/model/types'\nimport { type InfoListItemMode } from '$/widgets/calculator/ui'\n\nexport const isFormula = (value: ValueWithFormula | string): value is ValueWithFormula => {\n return typeof value !== 'string' && 'formula' in value\n}\n\nexport const formatWithIntl = (suffix: CalculatorSuffix, value: number) => {\n let calculationValue = value\n\n const options: Intl.NumberFormatOptions = {\n style: suffix\n }\n\n switch (suffix) {\n case 'currency':\n options.currency = 'RUB'\n options.minimumFractionDigits = 0\n options.maximumFractionDigits = 0\n break\n\n case 'percent':\n options.minimumFractionDigits = 0\n options.maximumFractionDigits = 1\n calculationValue = calculationValue / 100\n break\n default:\n return null\n }\n\n const formatter = new Intl.NumberFormat('ru-RU', options)\n return formatter.format(calculationValue)\n}\n\nexport const formatValueToRenderInfoItem = (renderMode: InfoListItemMode, value: string) => {\n switch (renderMode) {\n case 'text':\n return value\n default:\n return formatWithIntl(renderMode, Number(value))\n }\n}\n\nexport const getCalculatorSchema = <T extends FieldValues>(\n props: CalculatorViewProps<T>['calculatorFieldsConfig']['fieldsGroup']\n) => {\n const groups = Object.values(props)\n\n return groups.reduce<z.ZodObject<any>>((acc, item) => acc.merge(getDynamicSchema(item.fields)), z.object({}))\n}\n"],"names":["isFormula","value","formatWithIntl","suffix","calculationValue","options","formatValueToRenderInfoItem","renderMode","getCalculatorSchema","props","acc","item","getDynamicSchema","z"],"mappings":"4GAOO,MAAMA,EAAaC,GACjB,OAAOA,GAAU,UAAY,YAAaA,EAGtCC,EAAiB,CAACC,EAA0BF,IAAkB,CACzE,IAAIG,EAAmBH,EAEvB,MAAMI,EAAoC,CACxC,MAAOF,CAAA,EAGT,OAAQA,EAAA,CACN,IAAK,WACHE,EAAQ,SAAW,MACnBA,EAAQ,sBAAwB,EAChCA,EAAQ,sBAAwB,EAChC,MAEF,IAAK,UACHA,EAAQ,sBAAwB,EAChCA,EAAQ,sBAAwB,EAChCD,EAAmBA,EAAmB,IACtC,MACF,QACE,OAAO,IAAA,CAIX,OADkB,IAAI,KAAK,aAAa,QAASC,CAAO,EACvC,OAAOD,CAAgB,CAC1C,EAEaE,EAA8B,CAACC,EAA8BN,IAAkB,CAC1F,OAAQM,EAAA,CACN,IAAK,OACH,OAAON,EACT,QACE,OAAOC,EAAeK,EAAY,OAAON,CAAK,CAAC,CAAA,CAErD,EAEaO,EACXC,GAEe,OAAO,OAAOA,CAAK,EAEpB,OAAyB,CAACC,EAAKC,IAASD,EAAI,MAAME,EAAiBD,EAAK,MAAM,CAAC,EAAGE,EAAE,OAAO,CAAA,CAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdditionalSlider.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorFields/ui/AdditionalSlider.tsx"],"sourcesContent":["import { type FieldValues, useFormContext } from 'react-hook-form'\nimport {
|
|
1
|
+
{"version":3,"file":"AdditionalSlider.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorFields/ui/AdditionalSlider.tsx"],"sourcesContent":["import { type FieldValues, useFormContext } from 'react-hook-form'\nimport { SliderControl, SwitchBase } from '$/shared/ui'\nimport { cn, TypeGuards } from '$/shared/utils'\nimport { useAdditionalSlider } from '$/widgets/calculator/ui/calculatorFields/hooks'\nimport { type AdditionalSliderGroupConfig, type SlidersGroupProps } from '$/widgets/calculator/ui/calculatorFields/ui/FieldsGroup'\n\nexport type AdditionalSliderClasses = {\n wrapper?: string\n block?: string\n //TODO: add reexport to classes for form elements (checkbox, switch, input, etc.)\n // slider: SliderBaseClasses\n // switch?: SwitchBaseClasses\n}\n\ninterface AdditionalSliderProps<T extends FieldValues> {\n additionalSliderGroupConfig: AdditionalSliderGroupConfig<T>\n slidersGroupConfig: SlidersGroupProps<T>\n classes?: AdditionalSliderClasses\n}\n\nexport const AdditionalSlider = <T extends FieldValues>({\n slidersGroupConfig,\n additionalSliderGroupConfig,\n classes\n}: AdditionalSliderProps<T>) => {\n const { control } = useFormContext<T>()\n\n const { sliderVisible, additionalSliderMax, onCheckedChange } = useAdditionalSlider({\n slidersGroupConfig: slidersGroupConfig,\n additionalSliderGroupConfig: additionalSliderGroupConfig\n })\n\n if (TypeGuards.isNil(additionalSliderGroupConfig?.args) || !additionalSliderGroupConfig?.args) return null\n\n return (\n <div className={cn('flex flex-col gap-4', classes?.wrapper)}>\n <div className={cn('inline-flex items-center gap-2', classes?.block)}>\n <SwitchBase checked={sliderVisible} onCheckedChange={onCheckedChange} />\n <p className='desk-body-regular-l'>Хочу получить деньги дополнительно</p>\n </div>\n {sliderVisible && (\n <SliderControl\n {...additionalSliderGroupConfig.args}\n control={control}\n componentType='algorithmic'\n suffix='currency'\n defaultValue={additionalSliderGroupConfig?.args.min}\n max={additionalSliderMax}\n />\n )}\n </div>\n )\n}\n"],"names":["AdditionalSlider","slidersGroupConfig","additionalSliderGroupConfig","classes","control","useFormContext","sliderVisible","additionalSliderMax","onCheckedChange","useAdditionalSlider","TypeGuards","cn","jsxs","jsx","SwitchBase","SliderControl"],"mappings":"ifAoBO,MAAMA,EAAmB,CAAwB,CACtD,mBAAAC,EACA,4BAAAC,EACA,QAAAC,CACF,IAAgC,CAC9B,KAAM,CAAE,QAAAC,CAAA,EAAYC,EAAA,EAEd,CAAE,cAAAC,EAAe,oBAAAC,EAAqB,gBAAAC,CAAA,EAAoBC,EAAoB,CAClF,mBAAAR,EACA,4BAAAC,CAAA,CACD,EAED,OAAIQ,EAAW,MAAMR,GAA6B,IAAI,GAAK,CAACA,GAA6B,KAAa,OAGnG,MAAA,CAAI,UAAWS,EAAG,sBAAuBR,GAAS,OAAO,EACxD,SAAA,CAAAS,EAAC,OAAI,UAAWD,EAAG,iCAAkCR,GAAS,KAAK,EACjE,SAAA,CAAAU,EAACC,EAAA,CAAW,QAASR,EAAe,gBAAAE,CAAA,CAAkC,EACtEK,EAAC,IAAA,CAAE,UAAU,sBAAsB,SAAA,oCAAA,CAAkC,CAAA,EACvE,EACCP,GACCO,EAACE,EAAA,CACE,GAAGb,EAA4B,KAChC,QAAAE,EACA,cAAc,cACd,OAAO,WACP,aAAcF,GAA6B,KAAK,IAChD,IAAKK,CAAA,CAAA,CACP,EAEJ,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalculatorModal.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorFields/ui/CalculatorModal.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"CalculatorModal.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorFields/ui/CalculatorModal.tsx"],"sourcesContent":["import { useBoolean } from '$/shared/hooks'\nimport { Modal, type ModalProps } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type ModalContentVariant } from '$/widgets/calculator/model'\n\nexport type CalculatorModalClasses = {\n wrapper?: string\n description?: string\n button?: string\n}\n\nexport interface CalculatorModalProps {\n triggerText: string\n contentVariant: ModalContentVariant\n modalTitle?: string\n description?: string\n classes?: CalculatorModalClasses\n modalProps?: ModalProps\n}\n\nconst renderModalContent = (contentVariant: ModalContentVariant) => {\n switch (contentVariant) {\n case 'content1':\n return <div>content 1</div>\n case 'content2':\n return <div>content 2</div>\n }\n}\n\nexport const CalculatorModal = ({\n triggerText,\n modalTitle,\n description,\n classes,\n modalProps,\n contentVariant\n}: CalculatorModalProps) => {\n const [isModalOpen, modalSetter] = useBoolean(false)\n\n return (\n <div className={cn('flex flex-col gap-4 rounded-sm bg-color-blue-grey-100 p-4', classes?.wrapper)}>\n {description && <p className={cn('desk-body-regular-l text-color-tetriary', classes?.description)}>{description}</p>}\n <button\n onClick={() => modalSetter(true)}\n className={cn(\n 'desk-body-regular-l w-max cursor-pointer text-color-primary-default underline underline-offset-4',\n classes?.button\n )}\n >\n {triggerText}\n </button>\n <Modal title={modalTitle} isModalOpen={isModalOpen} closeModal={() => modalSetter(false)} {...modalProps}>\n {renderModalContent(contentVariant)}\n </Modal>\n </div>\n )\n}\n"],"names":["renderModalContent","contentVariant","jsx","CalculatorModal","triggerText","modalTitle","description","classes","modalProps","isModalOpen","modalSetter","useBoolean","cn","Modal"],"mappings":"gPAoBA,MAAMA,EAAsBC,GAAwC,CAClE,OAAQA,EAAA,CACN,IAAK,WACH,OAAOC,EAAC,OAAI,SAAA,WAAA,CAAS,EACvB,IAAK,WACH,OAAOA,EAAC,OAAI,SAAA,WAAA,CAAS,CAAA,CAE3B,EAEaC,EAAkB,CAAC,CAC9B,YAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,EACA,WAAAC,EACA,eAAAP,CACF,IAA4B,CAC1B,KAAM,CAACQ,EAAaC,CAAW,EAAIC,EAAW,EAAK,EAEnD,SACG,MAAA,CAAI,UAAWC,EAAG,4DAA6DL,GAAS,OAAO,EAC7F,SAAA,CAAAD,GAAeJ,EAAC,KAAE,UAAWU,EAAG,0CAA2CL,GAAS,WAAW,EAAI,SAAAD,CAAA,CAAY,EAChHJ,EAAC,SAAA,CACC,QAAS,IAAMQ,EAAY,EAAI,EAC/B,UAAWE,EACT,mGACAL,GAAS,MAAA,EAGV,SAAAH,CAAA,CAAA,EAEHF,EAACW,EAAA,CAAM,MAAOR,EAAY,YAAAI,EAA0B,WAAY,IAAMC,EAAY,EAAK,EAAI,GAAGF,EAC3F,SAAAR,EAAmBC,CAAc,CAAA,CACpC,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CalculatorInfo as
|
|
1
|
+
import{CalculatorInfo as t}from"./CalculatorInfo.js";import{CalculatorInfoHead as a}from"./ui/CalculatorInfoHead.js";import{CalculatedBlock as l}from"./ui/CalculatedBlock.js";import{CalculatorInfoBody as p}from"./ui/CalculatorInfoBody.js";import{CalculatorInfoFooter as c}from"./ui/CalculatorInfoFooter.js";import{InfoListItem as I}from"./ui/InfoListItem.js";import{AssistHint as C}from"./ui/AssistHint.js";export{C as AssistHint,l as CalculatedBlock,t as CalculatorInfo,p as CalculatorInfoBody,c as CalculatorInfoFooter,a as CalculatorInfoHead,I as InfoListItem};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalculatedBlock.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"CalculatedBlock.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.tsx"],"sourcesContent":["import { cn } from '$/shared/utils'\nimport { type CalculatorSuffix, type CalculatorValue, formatWithIntl } from '$/widgets/calculator/model'\n\nexport type CalculatedBlockClasses = {\n wrapper?: string\n description?: string\n value?: string\n}\n\nexport interface CalculatedBlockProps {\n rootDescription: string\n rootValue: CalculatorValue\n suffix: CalculatorSuffix\n classes?: CalculatedBlockClasses\n}\n\nexport const CalculatedBlock = ({ rootDescription, rootValue, suffix, classes }: CalculatedBlockProps) => {\n return (\n <div className={cn('mb-6 flex items-center justify-between gap-6', classes?.wrapper)}>\n <p className={cn('desk-body-regular-l text-color-dark', classes?.description)}>{rootDescription}</p>\n <div className={cn('desk-title-bold-l flex items-center gap-1 text-color-dark mobile:mob-title-bold-l', classes?.value)}>\n {formatWithIntl(suffix, Number(rootValue))}\n </div>\n </div>\n )\n}\n"],"names":["CalculatedBlock","rootDescription","rootValue","suffix","classes","cn","jsx","formatWithIntl"],"mappings":"kKAgBO,MAAMA,EAAkB,CAAC,CAAE,gBAAAC,EAAiB,UAAAC,EAAW,OAAAC,EAAQ,QAAAC,OAEjE,MAAA,CAAI,UAAWC,EAAG,+CAAgDD,GAAS,OAAO,EACjF,SAAA,CAAAE,EAAC,KAAE,UAAWD,EAAG,sCAAuCD,GAAS,WAAW,EAAI,SAAAH,EAAgB,EAChGK,EAAC,MAAA,CAAI,UAAWD,EAAG,oFAAqFD,GAAS,KAAK,EACnH,SAAAG,EAAeJ,EAAQ,OAAOD,CAAS,CAAC,CAAA,CAC3C,CAAA,EACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{useFormContext as s}from"react-hook-form";import{
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{useFormContext as s}from"react-hook-form";import{formatInfoList as c}from"../../../model/helpers.js";import{cn as i}from"../../../../../shared/utils/cn.js";import{InfoListItem as l}from"./InfoListItem.js";const I=({infoList:t,classes:e,withoutDivider:m})=>{const{watch:f}=s(),a=f(),n=c(t,a);return r("div",{className:i("flex flex-col gap-3 pt-4",{"mb-6 mt-4 border-t border-solid border-blue-grey-500":m},e?.wrapper),children:n?.map(o=>r(l,{...o},o.label))})};export{I as CalculatorInfoBody};
|
|
2
2
|
//# sourceMappingURL=CalculatorInfoBody.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalculatorInfoBody.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.tsx"],"sourcesContent":["import { useFormContext } from 'react-hook-form'\nimport {
|
|
1
|
+
{"version":3,"file":"CalculatorInfoBody.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.tsx"],"sourcesContent":["import { useFormContext } from 'react-hook-form'\nimport { cn } from '$/shared/utils'\nimport { type CalculatorSchema, formatInfoList } from '$/widgets/calculator/model'\nimport { InfoListItem, type InfoListItemDTO } from '$/widgets/calculator/ui'\n\nexport type CalculatorInfoBodyClasses = {\n wrapper?: string\n}\n\nexport interface CalculatedInfoBodyProps {\n infoList: InfoListItemDTO[]\n classes?: CalculatorInfoBodyClasses\n withoutDivider?: boolean\n}\n\nexport const CalculatorInfoBody = ({ infoList, classes, withoutDivider }: CalculatedInfoBodyProps) => {\n const { watch } = useFormContext<CalculatorSchema>()\n const watchedFields = watch()\n const formattedInfoList = formatInfoList(infoList, watchedFields)\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 pt-4',\n { 'mb-6 mt-4 border-t border-solid border-blue-grey-500': withoutDivider },\n classes?.wrapper\n )}\n >\n {formattedInfoList?.map((listItem) => (\n <InfoListItem key={listItem.label} {...listItem} />\n ))}\n </div>\n )\n}\n"],"names":["CalculatorInfoBody","infoList","classes","withoutDivider","watch","useFormContext","watchedFields","formattedInfoList","formatInfoList","jsx","cn","listItem","InfoListItem"],"mappings":"4PAeO,MAAMA,EAAqB,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,eAAAC,KAA8C,CACpG,KAAM,CAAE,MAAAC,CAAA,EAAUC,EAAA,EACZC,EAAgBF,EAAA,EAChBG,EAAoBC,EAAeP,EAAUK,CAAa,EAEhE,OACEG,EAAC,MAAA,CACC,UAAWC,EACT,2BACA,CAAE,uDAAwDP,CAAA,EAC1DD,GAAS,OAAA,EAGV,SAAAK,GAAmB,IAAKI,GACvBF,EAACG,GAAmC,GAAGD,GAApBA,EAAS,KAAqB,CAClD,CAAA,CAAA,CAGP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoListItem.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"InfoListItem.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.tsx"],"sourcesContent":["import { Icon, Popover } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type CalculatorSuffix, type CalculatorValue, formatValueToRenderInfoItem } from '$/widgets/calculator/model'\n\nexport type InfoListItemMode = CalculatorSuffix | 'text'\nexport type InfoListItemColor = 'dark' | 'blue'\n\nexport interface InfoListItemCommon {\n label: string\n mode: InfoListItemMode\n hint?: string\n accent?: boolean\n color?: InfoListItemColor\n withFormula?: boolean\n}\n\nexport interface InfoListItemDTO extends InfoListItemCommon {\n value: CalculatorValue\n}\n\nexport interface InfoListItemProps extends InfoListItemCommon {\n value: string\n}\n\nexport const InfoListItem = ({ hint, value, label, mode, color = 'dark', accent = false }: InfoListItemProps) => {\n return (\n <div className='flex items-center justify-between gap-4'>\n <div className='flex items-center gap-2'>\n <p className='desk-body-regular-l text-color-dark'>{label}</p>\n {hint && (\n <Popover\n withCloseBtn={false}\n triggerElement={<Icon className='size-5 text-icon-blue-grey-600' name='info/helpCircle' />}\n >\n <p>{hint}</p>\n </Popover>\n )}\n </div>\n <span\n className={cn('desk-body-medium-l text-color-dark', {\n '[&&]:desk-title-bold-s': accent,\n 'text-color-primary-default': color === 'blue'\n })}\n >\n {formatValueToRenderInfoItem(mode, value)}\n </span>\n </div>\n )\n}\n"],"names":["InfoListItem","hint","value","label","mode","color","accent","jsxs","jsx","Popover","Icon","cn","formatValueToRenderInfoItem"],"mappings":"kTAwBO,MAAMA,EAAe,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAQ,OAAQ,OAAAC,EAAS,MAE9EC,EAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAC,IAAA,CAAE,UAAU,sCAAuC,SAAAL,EAAM,EACzDF,GACCO,EAACC,EAAA,CACC,aAAc,GACd,eAAgBD,EAACE,EAAA,CAAK,UAAU,iCAAiC,KAAK,kBAAkB,EAExF,SAAAF,EAAC,KAAG,SAAAP,CAAA,CAAK,CAAA,CAAA,CACX,EAEJ,EACAO,EAAC,OAAA,CACC,UAAWG,EAAG,qCAAsC,CAClD,yBAA0BL,EAC1B,6BAA8BD,IAAU,MAAA,CACzC,EAEA,SAAAO,EAA4BR,EAAMF,CAAK,CAAA,CAAA,CAC1C,EACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CalculatorTabs as
|
|
1
|
+
import{CalculatorTabs as t}from"./CalculatorTabs.js";import{CalculatorInfo as l}from"./calculatorInfo/CalculatorInfo.js";import{CalculatorInfoHead as f}from"./calculatorInfo/ui/CalculatorInfoHead.js";import{CalculatedBlock as p}from"./calculatorInfo/ui/CalculatedBlock.js";import{CalculatorInfoBody as c}from"./calculatorInfo/ui/CalculatorInfoBody.js";import{CalculatorInfoFooter as C}from"./calculatorInfo/ui/CalculatorInfoFooter.js";import{InfoListItem as s}from"./calculatorInfo/ui/InfoListItem.js";import{AssistHint as d}from"./calculatorInfo/ui/AssistHint.js";import{CalculatorFields as B}from"./calculatorFields/CalculatorFields.js";export{d as AssistHint,p as CalculatedBlock,B as CalculatorFields,l as CalculatorInfo,c as CalculatorInfoBody,C as CalculatorInfoFooter,f as CalculatorInfoHead,t as CalculatorTabs,s as InfoListItem};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as o}from"react/jsx-runtime";import{useState as a}from"react";import{cn as s}from"../../shared/utils/cn.js";import{Carousel as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{useState as a}from"react";import{cn as s}from"../../shared/utils/cn.js";import{Carousel as i}from"../../shared/ui/carousel/Carousel.js";import{ResponsiveContainer as c}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";const f=e=>{const[r,t]=a(0);return o("section",{id:"carouselBlock","data-test-id":"carouselBlock",className:s(e.classes?.root),children:o(c,{className:s(e.classes?.container),children:o(i,{visibleIndex:r,setVisibleIndex:t,...e})})})};export{f as CarouselBlock,f as default};
|
|
2
2
|
//# sourceMappingURL=CarouselBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselBlock.js","sources":["../../../../lib/widgets/carouselBlock/CarouselBlock.tsx"],"sourcesContent":["import { useState } from 'react'\nimport {
|
|
1
|
+
{"version":3,"file":"CarouselBlock.js","sources":["../../../../lib/widgets/carouselBlock/CarouselBlock.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { Carousel, type CarouselProps, ResponsiveContainer, type SlideVariant } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport interface CarouselBlockProps<V extends SlideVariant> extends Omit<CarouselProps<V>, 'setVisibleIndex' | 'visibleIndex'> {\n classes?: {\n root?: string\n container?: string\n }\n}\n\nexport const CarouselBlock = <V extends SlideVariant>(props: CarouselBlockProps<V>) => {\n const [visibleIndex, setVisibleIndex] = useState(0)\n\n return (\n <section id='carouselBlock' data-test-id='carouselBlock' className={cn(props.classes?.root)}>\n <ResponsiveContainer className={cn(props.classes?.container)}>\n <Carousel visibleIndex={visibleIndex} setVisibleIndex={setVisibleIndex} {...props} />\n </ResponsiveContainer>\n </section>\n )\n}\n\nexport default CarouselBlock\n"],"names":["CarouselBlock","props","visibleIndex","setVisibleIndex","useState","jsx","cn","ResponsiveContainer","Carousel"],"mappings":"wRAWO,MAAMA,EAAyCC,GAAiC,CACrF,KAAM,CAACC,EAAcC,CAAe,EAAIC,EAAS,CAAC,EAElD,OACEC,EAAC,UAAA,CAAQ,GAAG,gBAAgB,eAAa,gBAAgB,UAAWC,EAAGL,EAAM,SAAS,IAAI,EACxF,SAAAI,EAACE,EAAA,CAAoB,UAAWD,EAAGL,EAAM,SAAS,SAAS,EACzD,SAAAI,EAACG,EAAA,CAAS,aAAAN,EAA4B,gBAAAC,EAAmC,GAAGF,CAAA,CAAO,CAAA,CACrF,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i,jsxs as t}from"react/jsx-runtime";import{createElement as
|
|
1
|
+
import{jsx as i,jsxs as t}from"react/jsx-runtime";import{createElement as m}from"react";import{ConditionsWithCTA as l}from"./ui/ConditionsWithCTA.js";import{SingleCondition as s}from"./ui/SingleCondition.js";import{cn as e}from"../../shared/utils/cn.js";import{ResponsiveContainer as c}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";const b=({headline:d,classes:o,conditions:n,conditionsWithCTA:a})=>i("section",{id:"conditionBlock","data-test-id":"conditionBlock",className:o?.root,children:t(c,{className:e(o?.container,"mobile:max-w-[360px]"),children:[i("div",{className:e("flex flex-col gap-6 desktop:items-start desktop:gap-12",o?.wrapper),children:i("div",{dangerouslySetInnerHTML:{__html:d},className:e("mob-headline-bold-s mb-6 text-color-dark desktop:desk-headline-bold-m desktop:mb-12",o?.headline)})}),t("div",{className:e("grid grid-cols-1 gap-6 desktop:grid-cols-[repeat(2,1fr)]",o?.conditionContainer),children:[i("div",{className:e("grid grid-cols-1 grid-rows-[repeat(3,minmax(136px,1fr))] gap-4 desktop:grid-cols-[repeat(2,minmax(353px,1fr))] desktop:grid-rows-[repeat(2,minmax(160px,1fr))] desktop:gap-6",o?.conditionWrapper),children:n?.map((r,p)=>m(s,{...r,key:r.description,index:p,classes:o?.condition}))}),i(l,{...a,classes:o?.conditionsWithCTA})]})]})});export{b as ConditionBlock,b as default};
|
|
2
2
|
//# sourceMappingURL=ConditionBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionBlock.js","sources":["../../../../lib/widgets/conditionBlock/ConditionBlock.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactElement } from 'react'\nimport {
|
|
1
|
+
{"version":3,"file":"ConditionBlock.js","sources":["../../../../lib/widgets/conditionBlock/ConditionBlock.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactElement } from 'react'\nimport { type ConditionType, type ConditionWitchCTAType } from './model/types'\nimport { ConditionsWithCTA, type ConditionsWithCTAClasses } from './ui/ConditionsWithCTA'\nimport { SingleCondition, type SingleConditionClasses } from './ui/SingleCondition'\nimport { ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ConditionBlockClasses = {\n root?: string\n container?: string\n wrapper?: string\n headline?: string\n conditionWrapper?: string\n condition?: SingleConditionClasses\n conditionContainer?: string\n conditionsWithCTA?: ConditionsWithCTAClasses\n}\n\nexport interface ConditionBlockClassesProps<WithImages extends boolean> extends HTMLAttributes<HTMLDivElement> {\n headline: ReactElement | string\n conditions?: ConditionType<WithImages>[]\n classes?: ConditionBlockClasses\n conditionsWithCTA?: ConditionWitchCTAType\n}\n\nexport const ConditionBlock = <WithImages extends boolean>({\n headline,\n classes,\n conditions,\n conditionsWithCTA\n}: ConditionBlockClassesProps<WithImages>) => {\n return (\n <section id='conditionBlock' data-test-id='conditionBlock' className={classes?.root}>\n <ResponsiveContainer className={cn(classes?.container, 'mobile:max-w-[360px]')}>\n <div className={cn('flex flex-col gap-6 desktop:items-start desktop:gap-12', classes?.wrapper)}>\n <div\n dangerouslySetInnerHTML={{ __html: headline }}\n className={cn(\n 'mob-headline-bold-s mb-6 text-color-dark desktop:desk-headline-bold-m desktop:mb-12',\n classes?.headline\n )}\n />\n </div>\n <div className={cn('grid grid-cols-1 gap-6 desktop:grid-cols-[repeat(2,1fr)]', classes?.conditionContainer)}>\n <div\n className={cn(\n 'grid grid-cols-1 grid-rows-[repeat(3,minmax(136px,1fr))] gap-4 desktop:grid-cols-[repeat(2,minmax(353px,1fr))] desktop:grid-rows-[repeat(2,minmax(160px,1fr))] desktop:gap-6',\n classes?.conditionWrapper\n )}\n >\n {conditions?.map((condition, index) => (\n <SingleCondition {...condition} key={condition.description} index={index} classes={classes?.condition} />\n ))}\n </div>\n <ConditionsWithCTA {...conditionsWithCTA} classes={classes?.conditionsWithCTA} />\n </div>\n </ResponsiveContainer>\n </section>\n )\n}\n\nexport default ConditionBlock\n"],"names":["ConditionBlock","headline","classes","conditions","conditionsWithCTA","jsxs","ResponsiveContainer","cn","jsx","condition","index","SingleCondition","ConditionsWithCTA"],"mappings":"+VAyBO,MAAMA,EAAiB,CAA6B,CACzD,SAAAC,EACA,QAAAC,EACA,WAAAC,EACA,kBAAAC,CACF,MAEK,UAAA,CAAQ,GAAG,iBAAiB,eAAa,iBAAiB,UAAWF,GAAS,KAC7E,SAAAG,EAACC,GAAoB,UAAWC,EAAGL,GAAS,UAAW,sBAAsB,EAC3E,SAAA,CAAAM,EAAC,OAAI,UAAWD,EAAG,yDAA0DL,GAAS,OAAO,EAC3F,SAAAM,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQP,CAAA,EACnC,UAAWM,EACT,sFACAL,GAAS,QAAA,CACX,CAAA,EAEJ,IACC,MAAA,CAAI,UAAWK,EAAG,2DAA4DL,GAAS,kBAAkB,EACxG,SAAA,CAAAM,EAAC,MAAA,CACC,UAAWD,EACT,+KACAL,GAAS,gBAAA,EAGV,YAAY,IAAI,CAACO,EAAWC,MAC1BC,EAAA,CAAiB,GAAGF,EAAW,IAAKA,EAAU,YAAa,MAAAC,EAAc,QAASR,GAAS,UAAW,CACxG,CAAA,CAAA,IAEFU,EAAA,CAAmB,GAAGR,EAAmB,QAASF,GAAS,iBAAA,CAAmB,CAAA,CAAA,CACjF,CAAA,CAAA,CACF,CAAA,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionsWithCTA.js","sources":["../../../../../lib/widgets/conditionBlock/ui/ConditionsWithCTA.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ConditionsWithCTA.js","sources":["../../../../../lib/widgets/conditionBlock/ui/ConditionsWithCTA.tsx"],"sourcesContent":["import { cn } from '$/shared/utils'\nimport { ButtonWithHandlers } from '$/widgets/buttonWithHandlers'\nimport { type ConditionWitchCTAType } from '$/widgets/conditionBlock/model/types'\n\nexport type ConditionsWithCTAClasses = {\n conditionWitchCTAContainer?: string\n descriptionFirstRate?: string\n firstRate?: string\n secondRate?: string\n descriptionSecondRate?: string\n mainDescription?: string\n button?: string\n}\n\nexport const ConditionsWithCTA = (props: ConditionWitchCTAType) => {\n const { classes, firstRate, descriptionFirstRate, secondRate, descriptionSecondRate, mainDescription, button } = props\n\n return (\n <div\n className={cn(\n 'relative flex flex-col overflow-hidden rounded-md bg-color-blue-grey-100 p-4 desktop:w-[386px] desktop:p-8',\n classes?.conditionWitchCTAContainer\n )}\n >\n <div className={cn('mb-3 flex flex-col gap-2')}>\n {firstRate && (\n <div\n dangerouslySetInnerHTML={{ __html: firstRate }}\n className={cn('mob-title-bold-l text-color-primary-default desktop:desk-title-bold-l', classes?.firstRate)}\n />\n )}\n <div\n dangerouslySetInnerHTML={{ __html: descriptionFirstRate ?? '' }}\n className={cn('desk-body-regular-l text-color-dark', classes?.descriptionFirstRate)}\n />\n </div>\n <div className={cn('mb-6 flex flex-col gap-2 desktop:mb-11')}>\n {secondRate && (\n <div\n dangerouslySetInnerHTML={{ __html: secondRate }}\n className={cn('mob-title-bold-l text-color-primary-default desktop:desk-title-bold-l', classes?.secondRate)}\n />\n )}\n <div\n dangerouslySetInnerHTML={{ __html: descriptionSecondRate ?? '' }}\n className={cn('desk-body-regular-l text-color-dark', classes?.descriptionSecondRate)}\n />\n </div>\n {mainDescription && (\n <div\n dangerouslySetInnerHTML={{ __html: mainDescription }}\n className={cn('mob-body-regular-l mb-6 text-color-tetriary desktop:desk-body-regular-l', classes?.mainDescription)}\n />\n )}\n {button && <ButtonWithHandlers intent='primary' className={cn('mt-auto w-full', classes?.button)} size='lg' {...button} />}\n </div>\n )\n}\n"],"names":["ConditionsWithCTA","props","classes","firstRate","descriptionFirstRate","secondRate","descriptionSecondRate","mainDescription","button","jsxs","cn","jsx","ButtonWithHandlers"],"mappings":"uLAcO,MAAMA,EAAqBC,GAAiC,CACjE,KAAM,CAAE,QAAAC,EAAS,UAAAC,EAAW,qBAAAC,EAAsB,WAAAC,EAAY,sBAAAC,EAAuB,gBAAAC,EAAiB,OAAAC,GAAWP,EAEjH,OACEQ,EAAC,MAAA,CACC,UAAWC,EACT,6GACAR,GAAS,0BAAA,EAGX,SAAA,CAAAO,EAAC,MAAA,CAAI,UAAWC,EAAG,0BAA0B,EAC1C,SAAA,CAAAP,GACCQ,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQR,CAAA,EACnC,UAAWO,EAAG,wEAAyER,GAAS,SAAS,CAAA,CAAA,EAG7GS,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQP,GAAwB,EAAA,EAC3D,UAAWM,EAAG,sCAAuCR,GAAS,oBAAoB,CAAA,CAAA,CACpF,EACF,EACAO,EAAC,MAAA,CAAI,UAAWC,EAAG,wCAAwC,EACxD,SAAA,CAAAL,GACCM,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQN,CAAA,EACnC,UAAWK,EAAG,wEAAyER,GAAS,UAAU,CAAA,CAAA,EAG9GS,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQL,GAAyB,EAAA,EAC5D,UAAWI,EAAG,sCAAuCR,GAAS,qBAAqB,CAAA,CAAA,CACrF,EACF,EACCK,GACCI,EAAC,MAAA,CACC,wBAAyB,CAAE,OAAQJ,CAAA,EACnC,UAAWG,EAAG,0EAA2ER,GAAS,eAAe,CAAA,CAAA,EAGpHM,GAAUG,EAACC,EAAA,CAAmB,OAAO,UAAU,UAAWF,EAAG,iBAAkBR,GAAS,MAAM,EAAG,KAAK,KAAM,GAAGM,CAAA,CAAQ,CAAA,CAAA,CAAA,CAG9H"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useState as
|
|
1
|
+
import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useState as H,createElement as L}from"react";import{getDynamicSchema as M}from"../../../src/shared/utils/getDynamicSchema.js";import{ZodUtils as R}from"../../shared/validation/utils/zodUtils.js";import{getFieldsProgress as Z,withAuthProvider as k,withApprovement as z}from"./model/helpers.js";import{useFieldsProgress as A}from"../../shared/hooks/useFieldsProgress.js";import{QueryClientProvider as I}from"../queryClientProvider/QueryClientProvider.js";import{cn as t}from"../../shared/utils/cn.js";import{ProgressBar as Q}from"../../shared/ui/progressBar/ProgressBar.js";import{HTMLRenderer as f}from"../htmlParser/HTMLRenderer.js";import{FieldMapper as U}from"../fieldMapper/FieldMapper.js";import{useControlledForm as q}from"../../shared/hooks/useControlledForm.js";import{ResponsiveContainer as J}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";import{Icon as K}from"../../shared/ui/icon/Icon.js";import{Heading as y}from"../../shared/ui/heading/Heading.js";import{Button as O}from"../../shared/ui/button/Button.js";const ne=({fields:s,title:p,progress:r,approvement:i,chips:m,submitProps:w,auth:h,classes:o,buttonGroup:a,ssoAuthorizationTop:g=!1,backgroundColor:u,disabledButtons:N})=>{const{submitCallback:x,onErrorCallback:S}=w||{},[n,P]=H(i.type==="checkbox"?i.defaultValue:!1),c=M(s),C=R.getZodDefaults(c),{control:b,handleSubmit:v,formState:{isValid:B}}=q({schema:c,defaultValues:C,mode:"onBlur"}),F=Z(r,s),j=A({control:b,fields:F||[],schema:c}),D=l=>{x&&x({...l,agree:n})};return e(I,{children:e("section",{id:"form","data-test-id":"form",className:t("w-full",o?.root,u&&"desktop:py-[80px]"),style:{backgroundColor:u},children:d(J,{className:t("border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14","relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border"),children:[m.enabled&&d("div",{className:t("desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute","bg-color-blue-grey-100 px-2 py-1 text-color-tetriary","right-4 top-4 w-max",o?.chips?.root),children:[m.image&&e(K,{name:m.image,className:t("size-6",o?.chips?.icon)}),m.content]}),e(y,{as:"h2",className:t("text-color-dark desktop:hidden",o?.title),children:p}),e(y,{as:"h3",className:t("text-color-dark mobile:hidden",o?.title),children:p}),g&&k(h),d("form",{"data-valid":B,onSubmit:v(D,l=>S?.(l)),className:t("flex w-full flex-col gap-y-6","desktop:gap-y-8",o?.form),children:[r.enabled&&e(Q,{progress:j,topContent:e(f,{html:r.title}),leftSubtitle:e(f,{html:r.leftSubtitle}),rightSubtitle:e(f,{html:r.rightSubtitle}),maxPercent:r.maxPercent,classes:o?.progressBar}),e(U,{control:b,fields:s}),d("div",{className:t("mob-body-regular-s flex flex-col items-start justify-between gap-4",{"desktop:flex-row desktop:items-center":a.length===1}),children:[z(i,n,P,o?.approvement),e("div",{className:t("flex w-full flex-col items-center justify-between gap-4 desktop:flex-row",{"desktop:w-fit":a.length===1}),children:a?.map((l,V)=>{const E=l.type==="submit"&&i.type==="checkbox"?!n:!1;return L(O,{...l,size:"lg",key:V,disabled:N||E,className:t("w-full whitespace-nowrap",{"desktop:!w-fit":a.length===1},{"w-full":!!i},o?.submit)})})})]}),!g&&k(h)]})]})})})};export{ne as DynamicForm,ne as default};
|
|
2
2
|
//# sourceMappingURL=DynamicForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { type Control, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport { widgetIds } from '../model'\nimport {\n type Approvement,\n type ApprovementClasses,\n type ApprovementType,\n type Auth,\n type AuthMode,\n type Chips,\n type ChipsClasses,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType,\n type SubmitProps,\n withApprovement,\n withAuthProvider\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { type BackgroundColors } from '$/shared/constants'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport { Button, type ButtonProps, type CheckedState, Heading, Icon, ProgressBar, ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n ssoAuthorizationTop: boolean\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n backgroundColor?: BackgroundColors\n disabledButtons?: boolean\n}\n\nexport const DynamicForm = <\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n auth,\n classes,\n buttonGroup,\n ssoAuthorizationTop = false,\n backgroundColor,\n disabledButtons\n}: DynamicFormProps<AType, CType, PType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(approvement.type === 'checkbox' ? approvement.defaultValue : false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const {\n control,\n handleSubmit,\n formState: { isValid }\n } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <section\n id={widgetIds.form}\n data-test-id={widgetIds.form}\n className={cn('w-full', classes?.root, backgroundColor && `desktop:py-[80px]`)}\n style={{ backgroundColor }}\n >\n <ResponsiveContainer\n className={cn(\n 'border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('text-color-dark desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('text-color-dark mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <form\n data-valid={isValid}\n onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n leftSubtitle={<HTMLRenderer html={progress.leftSubtitle} />}\n rightSubtitle={<HTMLRenderer html={progress.rightSubtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div\n className={cn('mob-body-regular-s flex flex-col items-start justify-between gap-4', {\n ['desktop:flex-row desktop:items-center']: buttonGroup.length === 1\n })}\n >\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div\n className={cn('flex w-full flex-col items-center justify-between gap-4 desktop:flex-row', {\n 'desktop:w-fit': buttonGroup.length === 1\n })}\n >\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n ['desktop:!w-fit']: buttonGroup.length === 1\n },\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n {!ssoAuthorizationTop && withAuthProvider(auth)}\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["DynamicForm","fields","title","progress","approvement","chips","submitProps","auth","classes","buttonGroup","ssoAuthorizationTop","backgroundColor","disabledButtons","submitCallback","onErrorCallback","checked","onCheckedChange","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","isValid","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","QueryClientProvider","jsx","widgetIds","cn","jsxs","ResponsiveContainer","Icon","Heading","withAuthProvider","error","ProgressBar","HTMLRenderer","FieldMapper","withApprovement","button","index","isDisabledByLogic","createElement","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { type Control, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport {\n type Approvement,\n type ApprovementClasses,\n type ApprovementType,\n type Auth,\n type AuthMode,\n type Chips,\n type ChipsClasses,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType,\n type SubmitProps,\n withApprovement,\n withAuthProvider\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { type BackgroundColors } from '$/shared/constants'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport { Button, type ButtonProps, type CheckedState, Heading, Icon, ProgressBar, ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\nexport type DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n ssoAuthorizationTop: boolean\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n backgroundColor?: BackgroundColors\n disabledButtons?: boolean\n}\n\nexport const DynamicForm = <\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n auth,\n classes,\n buttonGroup,\n ssoAuthorizationTop = false,\n backgroundColor,\n disabledButtons\n}: DynamicFormProps<AType, CType, PType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(approvement.type === 'checkbox' ? approvement.defaultValue : false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const {\n control,\n handleSubmit,\n formState: { isValid }\n } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <section\n id='form'\n data-test-id='form'\n className={cn('w-full', classes?.root, backgroundColor && `desktop:py-[80px]`)}\n style={{ backgroundColor }}\n >\n <ResponsiveContainer\n className={cn(\n 'border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('text-color-dark desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('text-color-dark mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <form\n data-valid={isValid}\n onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n leftSubtitle={<HTMLRenderer html={progress.leftSubtitle} />}\n rightSubtitle={<HTMLRenderer html={progress.rightSubtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div\n className={cn('mob-body-regular-s flex flex-col items-start justify-between gap-4', {\n ['desktop:flex-row desktop:items-center']: buttonGroup.length === 1\n })}\n >\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div\n className={cn('flex w-full flex-col items-center justify-between gap-4 desktop:flex-row', {\n 'desktop:w-fit': buttonGroup.length === 1\n })}\n >\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n ['desktop:!w-fit']: buttonGroup.length === 1\n },\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n {!ssoAuthorizationTop && withAuthProvider(auth)}\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["DynamicForm","fields","title","progress","approvement","chips","submitProps","auth","classes","buttonGroup","ssoAuthorizationTop","backgroundColor","disabledButtons","submitCallback","onErrorCallback","checked","onCheckedChange","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","isValid","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","QueryClientProvider","jsx","cn","jsxs","ResponsiveContainer","Icon","Heading","withAuthProvider","error","ProgressBar","HTMLRenderer","FieldMapper","withApprovement","button","index","isDisabledByLogic","createElement","Button"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as d}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsx as r,jsxs as d}from"react/jsx-runtime";import{CheckboxBase as i}from"../../../shared/ui/formElements/uncontrolled/checkbox/Checkbox.js";import{AuthProvider as m}from"../../authProvider/AuthProvider.js";import{HTMLRenderer as n}from"../../htmlParser/HTMLRenderer.js";import{cn as c}from"../../../shared/utils/cn.js";const p=e=>{switch(e?.mode){case"esia":return r(m,{...e,mode:e?.mode});case"mobileId":return r(m,{...e,mode:e?.mode});case"combine":return r(m,{...e,mode:e?.mode});default:return null}},x=(e,o,t,s)=>e.type==="off"?null:e.type==="text"?r(n,{html:e.message,as:"div",className:s?.content}):d("label",{className:c("mob-body-regular-s text-color-dark","desktop:desk-body-regular-s desktop:gap-x-4","flex items-center justify-items-start gap-x-3"),children:[r(i,{classes:s?.checkbox,checked:o,onCheckedChange:t}),r(n,{html:e.content,as:"div",className:s?.content})]}),b=(e,o)=>e.enabled?o.map(t=>({name:t.args.name,...t.args.progress})):null;export{b as getFieldsProgress,x as withApprovement,p as withAuthProvider};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../lib/widgets/dynamicForm/model/helpers.tsx"],"sourcesContent":["import { type FieldPath, type FieldValues } from 'react-hook-form'\nimport
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../lib/widgets/dynamicForm/model/helpers.tsx"],"sourcesContent":["import { type FieldPath, type FieldValues } from 'react-hook-form'\nimport type { Approvement, ApprovementClasses, ApprovementType, Auth, AuthMode } from './types'\nimport type { Progress, ProgressField, ProgressType } from './types'\nimport { type ISubscribedField } from '$/shared/hooks'\nimport { CheckboxBase, type CheckedState } from '$/shared/ui/formElements/uncontrolled/checkbox/Checkbox'\nimport { cn } from '$/shared/utils'\nimport { AuthProvider } from '$/widgets'\nimport { HTMLRenderer } from '$/widgets'\nimport type { FieldElement } from '$/widgets/fieldMapper'\n\nexport const withAuthProvider = <Mode extends AuthMode>(auth: Auth<Mode>) => {\n switch (auth?.mode) {\n case 'esia':\n return <AuthProvider {...auth} mode={auth?.mode} />\n case 'mobileId':\n return <AuthProvider {...auth} mode={auth?.mode} />\n case 'combine':\n return <AuthProvider {...auth} mode={auth?.mode} />\n\n default:\n return null\n }\n}\n\nexport const withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n): React.ReactNode => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-s desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nexport const getFieldsProgress = <TFieldValues extends FieldValues, Type extends ProgressType>(\n progress: Progress<Type>,\n fields: FieldElement<any, any, { progress: ProgressField }>[]\n) => {\n if (!progress.enabled) return null\n\n return fields.map<ISubscribedField<TFieldValues>>((field) => ({\n name: field.args.name as FieldPath<TFieldValues>,\n ...field.args.progress\n }))\n}\n"],"names":["withAuthProvider","auth","AuthProvider","withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","getFieldsProgress","progress","fields","field"],"mappings":"sUAUO,MAAMA,EAA2CC,GAAqB,CAC3E,OAAQA,GAAM,KAAA,CACZ,IAAK,OACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,GAAM,KAAM,EACnD,IAAK,WACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,GAAM,KAAM,EACnD,IAAK,UACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,GAAM,KAAM,EAEnD,QACE,OAAO,IAAA,CAEb,EAEaE,EAAkB,CAC7BC,EACAC,EACAC,EACAC,IAEIH,EAAY,OAAS,MAAc,KAEnCA,EAAY,OAAS,OAChBI,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAS,OAAA,CAAS,EAItFG,EAAC,QAAA,CACC,UAAWC,EACT,qCACA,8CACA,+CAAA,EAGF,SAAA,CAAAH,EAACI,EAAA,CAAa,QAASL,GAAS,SAAU,QAAAF,EAAkB,gBAAAC,EAAkC,EAC9FE,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAS,OAAA,CAAS,CAAA,CAAA,CAAA,EAKxEM,EAAoB,CAC/BC,EACAC,IAEKD,EAAS,QAEPC,EAAO,IAAqCC,IAAW,CAC5D,KAAMA,EAAM,KAAK,KACjB,GAAGA,EAAM,KAAK,QAAA,EACd,EAL4B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as o,jsxs as g}from"react/jsx-runtime";import{useState as j,createElement as v}from"react";import{getDynamicSchema as A}from"../../../src/shared/utils/getDynamicSchema.js";import{
|
|
1
|
+
import{jsx as o,jsxs as g}from"react/jsx-runtime";import{useState as j,createElement as v}from"react";import{getDynamicSchema as A}from"../../../src/shared/utils/getDynamicSchema.js";import{Button as P}from"../../shared/ui/button/Button.js";import{Dialog as E}from"../../shared/ui/dialog/Dialog.js";import{CheckboxBase as L}from"../../shared/ui/formElements/uncontrolled/checkbox/Checkbox.js";import{QueryClientProvider as M}from"../queryClientProvider/QueryClientProvider.js";import{TypeGuards as Z}from"../../shared/utils/typeGuards.js";import{FieldMapper as H}from"../fieldMapper/FieldMapper.js";import{cn as x}from"../../shared/utils/cn.js";import{ZodUtils as I}from"../../shared/validation/utils/zodUtils.js";import{useControlledForm as Q}from"../../shared/hooks/useControlledForm.js";import{AuthProvider as s}from"../authProvider/AuthProvider.js";import{HTMLRenderer as p}from"../htmlParser/HTMLRenderer.js";const R=(e,l,t,m)=>e.type==="off"?null:e.type==="text"?o(p,{html:e.message,as:"div",className:m?.content}):g("label",{className:x("mob-body-regular-s text-color-dark","desktop:desk-body-regular-m desktop:gap-x-4","flex items-center justify-items-start gap-x-3"),children:[o(L,{classes:m?.checkbox,checked:l,onCheckedChange:t}),o(p,{html:e.content,as:"div",className:m?.content})]}),b=e=>{switch(e.mode){case"esia":return o(s,{...e,mode:e.mode});case"mobileId":return o(s,{...e,mode:e.mode});case"combine":return o(s,{...e,mode:e.mode});case"off":return null}},re=({fields:e,title:l,approvement:t,submitProps:m,dialogId:h,classes:c,auth:a,buttonGroup:n,ssoAuthorizationTop:d=!1,disabledButtons:y,...k})=>{const{submitCallback:f,onErrorCallback:w}=m??{},[i,C]=j(!1),u=A(e),D=I.getZodDefaults(u),{control:N,handleSubmit:S}=Q({schema:u,defaultValues:D,mode:"onBlur"});return o(M,{children:o(E,{id:h,title:l,...k,children:g("form",{onSubmit:S(r=>{f&&f({...r,agree:i})},r=>w?.(r)),className:"flex flex-col gap-6",children:[d&&b(a),o(H,{control:N,fields:e}),R(t,i,C,c?.approvement),Z.isArrayFilled(n)&&o("div",{className:"flex flex-col gap-4",children:n?.map((r,B)=>{const F=r.type==="submit"&&t.type==="checkbox"?!i:!1;return v(P,{...r,size:"lg",key:B,disabled:y||F,className:x("w-full whitespace-nowrap",{"w-full":!!t},c?.submit)})})}),!d&&b(a)]})})})};export{re as DynamicFormDialog,re as default};
|
|
2
2
|
//# sourceMappingURL=DynamicFormDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicFormDialog.js","sources":["../../../../lib/widgets/dynamicFormDialog/DynamicFormDialog.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"DynamicFormDialog.js","sources":["../../../../lib/widgets/dynamicFormDialog/DynamicFormDialog.tsx"],"sourcesContent":["import { useState } from 'react'\nimport type { Control, FieldValues, SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { type Auth, type AuthMode } from '../dynamicForm/model'\nimport type { Approvement, ApprovementType } from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, type ButtonProps } from '$/shared/ui/button/Button'\nimport { Dialog } from '$/shared/ui/dialog/Dialog'\nimport { CheckboxBase, type CheckedState } from '$/shared/ui/formElements/uncontrolled/checkbox/Checkbox'\nimport { cn, TypeGuards } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { AuthProvider } from '$/widgets'\nimport { HTMLRenderer } from '$/widgets'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n onErrorCallback?: <T extends FieldValues>(error: T) => void\n}\n\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormDialogClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n approvement?: ApprovementClasses\n submit?: string\n}\n\nexport type DynamicFormDialogProps<\n AType extends ApprovementType,\n AuthType extends AuthMode\n> = React.DialogHTMLAttributes<HTMLDialogElement> & {\n fields: FieldElement<any, any, { validation: FieldValidation }>[]\n title: string\n approvement: Approvement<AType>\n dialogId: string\n submitProps?: SubmitProps\n classes?: DynamicFormDialogClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n ssoAuthorizationTop?: boolean\n disabledButtons?: boolean\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n) => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nconst withAuthProvider = <Mode extends AuthMode>(auth: Auth<Mode>) => {\n switch (auth.mode) {\n case 'esia':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'mobileId':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'combine':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'off':\n return null\n }\n}\n\nexport const DynamicFormDialog = <AType extends ApprovementType, AuthType extends AuthMode>({\n fields,\n title,\n approvement,\n submitProps,\n dialogId,\n classes,\n auth,\n buttonGroup,\n ssoAuthorizationTop = false,\n disabledButtons,\n ...props\n}: DynamicFormDialogProps<AType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps ?? {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <Dialog id={dialogId} title={title} {...props}>\n <form onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))} className='flex flex-col gap-6'>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n {TypeGuards.isArrayFilled(buttonGroup) && (\n <div className='flex flex-col gap-4'>\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n )}\n {/*<Button {...buttonProps} type='submit' disabled={approvement.type === 'checkbox' ? !checked : false} className='w-full'>*/}\n {/* {children ?? 'Отправить форму'}*/}\n {/*</Button>*/}\n {!ssoAuthorizationTop && withAuthProvider(auth)}\n </form>\n </Dialog>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicFormDialog\n"],"names":["withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","withAuthProvider","auth","AuthProvider","DynamicFormDialog","fields","title","submitProps","dialogId","buttonGroup","ssoAuthorizationTop","disabledButtons","props","submitCallback","onErrorCallback","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","useControlledForm","QueryClientProvider","Dialog","values","error","FieldMapper","TypeGuards","button","index","isDisabledByLogic","createElement","Button"],"mappings":"k5BAoDA,MAAMA,EAAkB,CACtBC,EACAC,EACAC,EACAC,IAEIH,EAAY,OAAS,MAAc,KAEnCA,EAAY,OAAS,OAChBI,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAS,OAAA,CAAS,EAItFG,EAAC,QAAA,CACC,UAAWC,EACT,qCACA,8CACA,+CAAA,EAGF,SAAA,CAAAH,EAACI,EAAA,CAAa,QAASL,GAAS,SAAU,QAAAF,EAAkB,gBAAAC,EAAkC,EAC9FE,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAS,OAAA,CAAS,CAAA,CAAA,CAAA,EAK/EM,EAA2CC,GAAqB,CACpE,OAAQA,EAAK,KAAA,CACX,IAAK,OACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,EAAK,KAAM,EAClD,IAAK,WACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,EAAK,KAAM,EAClD,IAAK,UACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,EAAK,KAAM,EAClD,IAAK,MACH,OAAO,IAAA,CAEb,EAEaE,GAAoB,CAA2D,CAC1F,OAAAC,EACA,MAAAC,EACA,YAAAd,EACA,YAAAe,EACA,SAAAC,EACA,QAAAb,EACA,KAAAO,EACA,YAAAO,EACA,oBAAAC,EAAsB,GACtB,gBAAAC,EACA,GAAGC,CACL,IAA+C,CAC7C,KAAM,CAAE,eAAAC,EAAgB,gBAAAC,CAAA,EAAoBP,GAAe,CAAA,EAErD,CAACd,EAASC,CAAe,EAAIqB,EAAuB,EAAK,EAEzDC,EAASC,EAAiBZ,CAAM,EAChCa,EAAgBC,EAAS,eAAeH,CAAM,EAE9C,CAAE,QAAAI,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,OAAAN,EACA,cAAAE,EACA,KAAM,QAAA,CACP,EAMD,OACEtB,EAAC2B,GACC,SAAA3B,EAAC4B,EAAA,CAAO,GAAIhB,EAAU,MAAAF,EAAe,GAAGM,EACtC,SAAAd,EAAC,QAAK,SAAUuB,EAPkCI,GAAW,CAC7DZ,GAAgBA,EAAe,CAAE,GAAGY,EAAQ,MAAOhC,EAAS,CAClE,EAK8CiC,GAAUZ,IAAkBY,CAAK,CAAC,EAAG,UAAU,sBACpF,SAAA,CAAAhB,GAAuBT,EAAiBC,CAAI,EAC7CN,EAAC+B,EAAA,CAAY,QAAAP,EAAwC,OAAAf,CAAA,CAAgB,EACpEd,EAAgBC,EAAaC,EAASC,EAAiBC,GAAS,WAAW,EAC3EiC,EAAW,cAAcnB,CAAW,GACnCb,EAAC,MAAA,CAAI,UAAU,sBACZ,SAAAa,GAAa,IAAI,CAACoB,EAAQC,IAAU,CACnC,MAAMC,EAAoBF,EAAO,OAAS,UAAYrC,EAAY,OAAS,WAAa,CAACC,EAAU,GAInG,OACEuC,EAACC,EAAA,CACE,GAAGJ,EACJ,KAAK,KACL,IAAKC,EACL,SAPanB,GAAmBoB,EAQhC,UAAWhC,EACT,2BACA,CACE,SAAU,EAAQP,CAAW,EAE/BG,GAAS,MAAA,CACX,CAAA,CAGN,CAAC,CAAA,CACH,EAKD,CAACe,GAAuBT,EAAiBC,CAAI,CAAA,CAAA,CAChD,EACF,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{Ligal as
|
|
1
|
+
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{Ligal as s}from"./ui/Ligal.js";import{cn as r}from"../../shared/utils/cn.js";import{FooterLogo as d}from"./ui/FooterLogo.js";import{SocialLinks as n}from"./ui/SocialLinks.js";import{PhonesBlock as c}from"./ui/PhonesBlock.js";import{TypeGuards as b}from"../../shared/utils/typeGuards.js";import{NavLinks as k}from"./ui/NavLinks.js";import{Copyright as x}from"./ui/Copyright.js";import{SiteMap as g}from"./ui/SiteMap.js";import{ResponsiveContainer as h}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";const M=({socialsLinks:i,phones:p,ligal:m,copyright:a,classes:o,details:f,siteMap:l=!0})=>e("footer",{id:"footer","data-test-id":"footer",className:r("w-full bg-color-footer py-8 desktop:py-10",o?.root),children:e(h,{className:r(o?.footerContainer),children:t("div",{className:r("mobile:pb-[176px]",o?.footerWrapper),children:[t("div",{className:r("flex flex-col items-start justify-between gap-4 border-b border-solid border-blue-grey-500 pb-6 desktop:flex-row desktop:gap-6 desktop:pb-8",o?.footerHead),children:[t("div",{className:r(o?.footerSocialBlock),children:[e(d,{classes:o?.footerLogo}),i.enabled&&e(n,{socialsLinks:i.links,classes:o?.socialLinks})]}),p.enabled&&e(c,{phones:p.items,classes:o?.phonesBlock})]}),!b.isArrayEmpty(f)&&e(k,{details:f,classes:o?.navLinks}),m.enabled&&e(s,{text:m.text}),t("div",{className:r("mt-6 flex flex-col-reverse items-start justify-between gap-4 desktop:mt-8 desktop:flex-row desktop:gap-6",o?.footerBottom),children:[a.enabled&&e(x,{text:a.text,classes:o?.copyright}),l&&e(g,{classes:o?.siteMap})]})]})})});export{M as Footer,M as default};
|
|
2
2
|
//# sourceMappingURL=Footer.js.map
|