@redneckz/wildless-cms-uni-blocks 0.12.8 → 0.12.9
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/bundle/blocks.schema.json +1 -1
- package/bundle/bundle.umd.js +48 -36
- package/bundle/bundle.umd.min.js +1 -1
- package/bundle/components/BenefitsBlock/BenefitsBlock.d.ts +1 -1
- package/bundle/components/BenefitsBlock/BenefitsBlockContent.d.ts +2 -0
- package/bundle/components/BenefitsBlock/defaultIconSize.d.ts +1 -0
- package/bundle/components/BenefitsBlock/defaultIconSize.mobile.d.ts +1 -0
- package/bundle/components/BonusBenefitsBlock/renderBonusBenefits.mobile.d.ts +1 -1
- package/bundle/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +2 -1
- package/bundle/components/Footer/findIconByHref.d.ts +2 -0
- package/bundle/components/Footer/iconsMap.d.ts +7 -0
- package/bundle/model/HeadlineType.d.ts +5 -4
- package/bundle/ui-kit/Icon/IconProps.d.ts +3 -2
- package/bundle/ui-kit/Icon/RoundedIcon.d.ts +1 -0
- package/dist/components/ApplicationForm/ApplicationForm.js +1 -1
- package/dist/components/ApplicationForm/ApplicationForm.js.map +1 -1
- package/dist/components/ApplicationForm/ApplicationFormAcquiring.js +1 -1
- package/dist/components/ApplicationForm/ApplicationFormAcquiring.js.map +1 -1
- package/dist/components/ApplicationForm/ApplicationFormCredit.js +1 -1
- package/dist/components/ApplicationForm/ApplicationFormCredit.js.map +1 -1
- package/dist/components/ApplicationForm/ApplicationFormDeposit.js +1 -1
- package/dist/components/ApplicationForm/ApplicationFormDeposit.js.map +1 -1
- package/dist/components/ApplicationForm/ApplicationFormWed.js +1 -1
- package/dist/components/ApplicationForm/ApplicationFormWed.js.map +1 -1
- package/dist/components/ApplicationForm/renderAcquiringDataOrganization.js +1 -1
- package/dist/components/ApplicationForm/renderAcquiringDataOrganization.js.map +1 -1
- package/dist/components/ApplicationForm/renderAcquiringRegion.js +1 -1
- package/dist/components/ApplicationForm/renderAcquiringRegion.js.map +1 -1
- package/dist/components/ApplicationForm/renderBusinessCardDataOrganization.js +1 -1
- package/dist/components/ApplicationForm/renderBusinessCardDataOrganization.js.map +1 -1
- package/dist/components/ApplicationForm/renderCreditDataOrganization.js +1 -1
- package/dist/components/ApplicationForm/renderCreditDataOrganization.js.map +1 -1
- package/dist/components/ApplicationForm/renderCreditParameters.js +1 -1
- package/dist/components/ApplicationForm/renderCreditParameters.js.map +1 -1
- package/dist/components/ApplicationForm/renderQuestionsInterested.js +1 -1
- package/dist/components/ApplicationForm/renderQuestionsInterested.js.map +1 -1
- package/dist/components/ApplicationForm/renderRegion.js +1 -1
- package/dist/components/ApplicationForm/renderRegion.js.map +1 -1
- package/dist/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/dist/components/ApplicationForm/renderRegionDepartment.js.map +1 -1
- package/dist/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
- package/dist/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
- package/dist/components/ApplicationForm/renderSubmitButton.js +1 -1
- package/dist/components/ApplicationForm/renderSubmitButton.js.map +1 -1
- package/dist/components/ApplicationForm/renderWedDataOrganization.js +1 -1
- package/dist/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/dist/components/BenefitsBlock/BenefitsBlock.d.ts +1 -1
- package/dist/components/BenefitsBlock/BenefitsBlock.js +5 -5
- package/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/dist/components/BenefitsBlock/BenefitsBlockContent.d.ts +2 -0
- package/dist/components/BenefitsBlock/defaultIconSize.d.ts +1 -0
- package/dist/components/BenefitsBlock/defaultIconSize.js +4 -0
- package/dist/components/BenefitsBlock/defaultIconSize.js.map +1 -0
- package/dist/components/BenefitsBlock/defaultIconSize.mobile.d.ts +1 -0
- package/dist/components/BenefitsBlock/defaultIconSize.mobile.js +4 -0
- package/dist/components/BenefitsBlock/defaultIconSize.mobile.js.map +1 -0
- package/dist/components/Blocks.mobile.js +3 -1
- package/dist/components/Blocks.mobile.js.map +1 -1
- package/dist/components/BonusBenefitsBlock/renderBonusBenefits.mobile.d.ts +1 -1
- package/dist/components/BonusBenefitsBlock/renderBonusBenefits.mobile.js +1 -1
- package/dist/components/BonusBenefitsBlock/renderBonusBenefits.mobile.js.map +1 -1
- package/dist/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/dist/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/dist/components/CarouselTariffsCard/CarouselTariffsCard.js +2 -2
- package/dist/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -1
- package/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +2 -1
- package/dist/components/CarouselTariffsCard/renderCardInfo.js +1 -2
- package/dist/components/CarouselTariffsCard/renderCardInfo.js.map +1 -1
- package/dist/components/Footer/Footer.mobile.js +7 -2
- package/dist/components/Footer/Footer.mobile.js.map +1 -1
- package/dist/components/Footer/MediaButton.js +2 -33
- package/dist/components/Footer/MediaButton.js.map +1 -1
- package/dist/components/Footer/findIconByHref.d.ts +2 -0
- package/dist/components/Footer/findIconByHref.js +6 -0
- package/dist/components/Footer/findIconByHref.js.map +1 -0
- package/dist/components/Footer/iconsMap.d.ts +7 -0
- package/dist/components/Footer/iconsMap.js +35 -0
- package/dist/components/Footer/iconsMap.js.map +1 -0
- package/dist/components/RollupItem/RollupItem.js +1 -2
- package/dist/components/RollupItem/RollupItem.js.map +1 -1
- package/dist/components/TextBlock/TextBlock.js +3 -3
- package/dist/components/TextBlock/TextBlock.js.map +1 -1
- package/dist/model/HeadlineType.d.ts +5 -4
- package/dist/ui-kit/CookiePopup/CookiePopup.js +1 -1
- package/dist/ui-kit/CookiePopup/CookiePopup.js.map +1 -1
- package/dist/ui-kit/Icon/IconProps.d.ts +3 -2
- package/dist/ui-kit/Icon/RoundedIcon.d.ts +1 -0
- package/dist/ui-kit/Icon/RoundedIcon.js +9 -6
- package/dist/ui-kit/Icon/RoundedIcon.js.map +1 -1
- package/dist/ui-kit/Select/Select.js +1 -1
- package/dist/ui-kit/Select/Select.js.map +1 -1
- package/dist/ui-kit/TopItem/TopItem.js +0 -1
- package/dist/ui-kit/TopItem/TopItem.js.map +1 -1
- package/lib/common.css +1 -1
- package/lib/components/ApplicationForm/ApplicationForm.fixture.mobile.d.ts +10 -0
- package/lib/components/ApplicationForm/ApplicationForm.js +1 -1
- package/lib/components/ApplicationForm/ApplicationForm.js.map +1 -1
- package/lib/components/ApplicationForm/ApplicationFormAcquiring.js +1 -1
- package/lib/components/ApplicationForm/ApplicationFormAcquiring.js.map +1 -1
- package/lib/components/ApplicationForm/ApplicationFormCredit.js +1 -1
- package/lib/components/ApplicationForm/ApplicationFormCredit.js.map +1 -1
- package/lib/components/ApplicationForm/ApplicationFormDeposit.js +1 -1
- package/lib/components/ApplicationForm/ApplicationFormDeposit.js.map +1 -1
- package/lib/components/ApplicationForm/ApplicationFormWed.js +1 -1
- package/lib/components/ApplicationForm/ApplicationFormWed.js.map +1 -1
- package/lib/components/ApplicationForm/renderAcquiringDataOrganization.d.ts +0 -1
- package/lib/components/ApplicationForm/renderAcquiringDataOrganization.js +1 -1
- package/lib/components/ApplicationForm/renderAcquiringDataOrganization.js.map +1 -1
- package/lib/components/ApplicationForm/renderAcquiringRegion.d.ts +0 -1
- package/lib/components/ApplicationForm/renderAcquiringRegion.js +1 -1
- package/lib/components/ApplicationForm/renderAcquiringRegion.js.map +1 -1
- package/lib/components/ApplicationForm/renderBusinessCardDataOrganization.d.ts +0 -1
- package/lib/components/ApplicationForm/renderBusinessCardDataOrganization.js +1 -1
- package/lib/components/ApplicationForm/renderBusinessCardDataOrganization.js.map +1 -1
- package/lib/components/ApplicationForm/renderContacts.d.ts +0 -1
- package/lib/components/ApplicationForm/renderCreditDataOrganization.d.ts +0 -1
- package/lib/components/ApplicationForm/renderCreditDataOrganization.js +1 -1
- package/lib/components/ApplicationForm/renderCreditDataOrganization.js.map +1 -1
- package/lib/components/ApplicationForm/renderCreditParameters.d.ts +0 -1
- package/lib/components/ApplicationForm/renderCreditParameters.js +1 -1
- package/lib/components/ApplicationForm/renderCreditParameters.js.map +1 -1
- package/lib/components/ApplicationForm/renderQuestionsInterested.d.ts +0 -1
- package/lib/components/ApplicationForm/renderQuestionsInterested.js +1 -1
- package/lib/components/ApplicationForm/renderQuestionsInterested.js.map +1 -1
- package/lib/components/ApplicationForm/renderRegion.d.ts +0 -1
- package/lib/components/ApplicationForm/renderRegion.js +1 -1
- package/lib/components/ApplicationForm/renderRegion.js.map +1 -1
- package/lib/components/ApplicationForm/renderRegionDepartment.d.ts +0 -1
- package/lib/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/lib/components/ApplicationForm/renderRegionDepartment.js.map +1 -1
- package/lib/components/ApplicationForm/renderSlideCheckboxes.d.ts +0 -1
- package/lib/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
- package/lib/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
- package/lib/components/ApplicationForm/renderSubmitButton.d.ts +0 -1
- package/lib/components/ApplicationForm/renderSubmitButton.js +1 -1
- package/lib/components/ApplicationForm/renderSubmitButton.js.map +1 -1
- package/lib/components/ApplicationForm/renderWedDataOrganization.d.ts +0 -1
- package/lib/components/ApplicationForm/renderWedDataOrganization.js +1 -1
- package/lib/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/lib/components/BenefitsBlock/BenefitsBlock.d.ts +1 -1
- package/lib/components/BenefitsBlock/BenefitsBlock.fixture.mobile.d.ts +1 -0
- package/lib/components/BenefitsBlock/BenefitsBlock.js +5 -5
- package/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/lib/components/BenefitsBlock/BenefitsBlockContent.d.ts +2 -0
- package/lib/components/BenefitsBlock/defaultIconSize.d.ts +1 -0
- package/lib/components/BenefitsBlock/defaultIconSize.js +2 -0
- package/lib/components/BenefitsBlock/defaultIconSize.js.map +1 -0
- package/lib/components/BenefitsBlock/defaultIconSize.mobile.d.ts +1 -0
- package/lib/components/BenefitsBlock/defaultIconSize.mobile.js +2 -0
- package/lib/components/BenefitsBlock/defaultIconSize.mobile.js.map +1 -0
- package/lib/components/Blocks.mobile.js +3 -1
- package/lib/components/Blocks.mobile.js.map +1 -1
- package/lib/components/BonusBenefitsBlock/renderBonusBenefits.mobile.d.ts +1 -1
- package/lib/components/BonusBenefitsBlock/renderBonusBenefits.mobile.js +1 -1
- package/lib/components/BonusBenefitsBlock/renderBonusBenefits.mobile.js.map +1 -1
- package/lib/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/lib/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/lib/components/CarouselTariffsCard/CarouselTariffsCard.js +2 -2
- package/lib/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -1
- package/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +2 -1
- package/lib/components/CarouselTariffsCard/renderCardInfo.js +1 -2
- package/lib/components/CarouselTariffsCard/renderCardInfo.js.map +1 -1
- package/lib/components/Footer/Footer.mobile.js +7 -2
- package/lib/components/Footer/Footer.mobile.js.map +1 -1
- package/lib/components/Footer/MediaButton.js +2 -33
- package/lib/components/Footer/MediaButton.js.map +1 -1
- package/lib/components/Footer/findIconByHref.d.ts +2 -0
- package/lib/components/Footer/findIconByHref.js +3 -0
- package/lib/components/Footer/findIconByHref.js.map +1 -0
- package/lib/components/Footer/iconsMap.d.ts +7 -0
- package/lib/components/Footer/iconsMap.js +33 -0
- package/lib/components/Footer/iconsMap.js.map +1 -0
- package/lib/components/RollupItem/RollupItem.fixture.mobile.d.ts +0 -1
- package/lib/components/RollupItem/RollupItem.js +1 -2
- package/lib/components/RollupItem/RollupItem.js.map +1 -1
- package/lib/components/TextBlock/TextBlock.js +3 -3
- package/lib/components/TextBlock/TextBlock.js.map +1 -1
- package/lib/model/HeadlineType.d.ts +5 -4
- package/lib/ui-kit/CookiePopup/CookiePopup.js +1 -1
- package/lib/ui-kit/CookiePopup/CookiePopup.js.map +1 -1
- package/lib/ui-kit/Icon/IconProps.d.ts +3 -2
- package/lib/ui-kit/Icon/RoundedIcon.d.ts +1 -0
- package/lib/ui-kit/Icon/RoundedIcon.js +9 -6
- package/lib/ui-kit/Icon/RoundedIcon.js.map +1 -1
- package/lib/ui-kit/Select/Select.js +1 -1
- package/lib/ui-kit/Select/Select.js.map +1 -1
- package/lib/ui-kit/TopItem/TopItem.js +0 -1
- package/lib/ui-kit/TopItem/TopItem.js.map +1 -1
- package/mobile/bundle/bundle.umd.js +950 -492
- package/mobile/bundle/bundle.umd.min.js +1 -1
- package/mobile/bundle/components/BenefitsBlock/BenefitsBlock.d.ts +1 -1
- package/mobile/bundle/components/BenefitsBlock/BenefitsBlockContent.d.ts +2 -0
- package/mobile/bundle/components/BenefitsBlock/defaultIconSize.d.ts +1 -0
- package/mobile/bundle/components/BonusBenefitsBlock/renderBonusBenefits.d.ts +1 -1
- package/mobile/bundle/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +2 -1
- package/mobile/bundle/components/Footer/findIconByHref.d.ts +2 -0
- package/mobile/bundle/components/Footer/iconsMap.d.ts +7 -0
- package/mobile/bundle/model/HeadlineType.d.ts +5 -4
- package/mobile/bundle/ui-kit/Icon/IconProps.d.ts +3 -2
- package/mobile/bundle/ui-kit/Icon/RoundedIcon.d.ts +1 -0
- package/mobile/dist/components/ApplicationForm/ApplicationForm.js +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationForm.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormAcquiring.js +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormAcquiring.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormCredit.js +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormCredit.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormDeposit.js +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormDeposit.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormWed.js +1 -1
- package/mobile/dist/components/ApplicationForm/ApplicationFormWed.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderAcquiringDataOrganization.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderAcquiringDataOrganization.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderAcquiringRegion.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderAcquiringRegion.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderBusinessCardDataOrganization.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderBusinessCardDataOrganization.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderCreditDataOrganization.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderCreditDataOrganization.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderCreditParameters.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderCreditParameters.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderQuestionsInterested.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderQuestionsInterested.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderRegion.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderRegion.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderRegionDepartment.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderSubmitButton.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderSubmitButton.js.map +1 -1
- package/mobile/dist/components/ApplicationForm/renderWedDataOrganization.js +1 -1
- package/mobile/dist/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/mobile/dist/components/BenefitsBlock/BenefitsBlock.d.ts +1 -1
- package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js +5 -5
- package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/mobile/dist/components/BenefitsBlock/BenefitsBlockContent.d.ts +2 -0
- package/mobile/dist/components/BenefitsBlock/defaultIconSize.d.ts +1 -0
- package/mobile/dist/components/BenefitsBlock/defaultIconSize.js +4 -0
- package/mobile/dist/components/BenefitsBlock/defaultIconSize.js.map +1 -0
- package/mobile/dist/components/Blocks.js +3 -1
- package/mobile/dist/components/Blocks.js.map +1 -1
- package/mobile/dist/components/BonusBenefitsBlock/renderBonusBenefits.d.ts +1 -1
- package/mobile/dist/components/BonusBenefitsBlock/renderBonusBenefits.js +1 -1
- package/mobile/dist/components/BonusBenefitsBlock/renderBonusBenefits.js.map +1 -1
- package/mobile/dist/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/mobile/dist/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCard.js +2 -2
- package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -1
- package/mobile/dist/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +2 -1
- package/mobile/dist/components/CarouselTariffsCard/renderCardInfo.js +1 -2
- package/mobile/dist/components/CarouselTariffsCard/renderCardInfo.js.map +1 -1
- package/mobile/dist/components/Footer/Footer.js +7 -2
- package/mobile/dist/components/Footer/Footer.js.map +1 -1
- package/mobile/dist/components/Footer/MediaButton.js +2 -33
- package/mobile/dist/components/Footer/MediaButton.js.map +1 -1
- package/mobile/dist/components/Footer/findIconByHref.d.ts +2 -0
- package/mobile/dist/components/Footer/findIconByHref.js +6 -0
- package/mobile/dist/components/Footer/findIconByHref.js.map +1 -0
- package/mobile/dist/components/Footer/iconsMap.d.ts +7 -0
- package/mobile/dist/components/Footer/iconsMap.js +35 -0
- package/mobile/dist/components/Footer/iconsMap.js.map +1 -0
- package/mobile/dist/components/RollupItem/RollupItem.js +1 -2
- package/mobile/dist/components/RollupItem/RollupItem.js.map +1 -1
- package/mobile/dist/components/TextBlock/TextBlock.js +3 -3
- package/mobile/dist/components/TextBlock/TextBlock.js.map +1 -1
- package/mobile/dist/model/HeadlineType.d.ts +5 -4
- package/mobile/dist/ui-kit/CookiePopup/CookiePopup.js +1 -1
- package/mobile/dist/ui-kit/CookiePopup/CookiePopup.js.map +1 -1
- package/mobile/dist/ui-kit/Icon/IconProps.d.ts +3 -2
- package/mobile/dist/ui-kit/Icon/RoundedIcon.d.ts +1 -0
- package/mobile/dist/ui-kit/Icon/RoundedIcon.js +9 -6
- package/mobile/dist/ui-kit/Icon/RoundedIcon.js.map +1 -1
- package/mobile/dist/ui-kit/Select/Select.js +1 -1
- package/mobile/dist/ui-kit/Select/Select.js.map +1 -1
- package/mobile/dist/ui-kit/TopItem/TopItem.js +0 -1
- package/mobile/dist/ui-kit/TopItem/TopItem.js.map +1 -1
- package/mobile/lib/common.css +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationForm.js +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationForm.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormAcquiring.js +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormAcquiring.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormCredit.js +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormCredit.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormDeposit.js +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormDeposit.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormWed.js +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormWed.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderAcquiringDataOrganization.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderAcquiringDataOrganization.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderAcquiringRegion.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderAcquiringRegion.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderBusinessCardDataOrganization.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderBusinessCardDataOrganization.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderCreditDataOrganization.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderCreditDataOrganization.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderCreditParameters.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderCreditParameters.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderQuestionsInterested.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderQuestionsInterested.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderRegion.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderRegion.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderRegionDepartment.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderRegionDepartment.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderSubmitButton.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderSubmitButton.js.map +1 -1
- package/mobile/lib/components/ApplicationForm/renderWedDataOrganization.js +1 -1
- package/mobile/lib/components/ApplicationForm/renderWedDataOrganization.js.map +1 -1
- package/mobile/lib/components/BenefitsBlock/BenefitsBlock.d.ts +1 -1
- package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js +5 -5
- package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
- package/mobile/lib/components/BenefitsBlock/BenefitsBlockContent.d.ts +2 -0
- package/mobile/lib/components/BenefitsBlock/defaultIconSize.d.ts +1 -0
- package/mobile/lib/components/BenefitsBlock/defaultIconSize.js +2 -0
- package/mobile/lib/components/BenefitsBlock/defaultIconSize.js.map +1 -0
- package/mobile/lib/components/Blocks.js +3 -1
- package/mobile/lib/components/Blocks.js.map +1 -1
- package/mobile/lib/components/BonusBenefitsBlock/renderBonusBenefits.d.ts +1 -1
- package/mobile/lib/components/BonusBenefitsBlock/renderBonusBenefits.js +1 -1
- package/mobile/lib/components/BonusBenefitsBlock/renderBonusBenefits.js.map +1 -1
- package/mobile/lib/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/mobile/lib/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCard.js +2 -2
- package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCard.js.map +1 -1
- package/mobile/lib/components/CarouselTariffsCard/CarouselTariffsCardContent.d.ts +2 -1
- package/mobile/lib/components/CarouselTariffsCard/renderCardInfo.js +1 -2
- package/mobile/lib/components/CarouselTariffsCard/renderCardInfo.js.map +1 -1
- package/mobile/lib/components/Footer/Footer.js +7 -2
- package/mobile/lib/components/Footer/Footer.js.map +1 -1
- package/mobile/lib/components/Footer/MediaButton.js +2 -33
- package/mobile/lib/components/Footer/MediaButton.js.map +1 -1
- package/mobile/lib/components/Footer/findIconByHref.d.ts +2 -0
- package/mobile/lib/components/Footer/findIconByHref.js +3 -0
- package/mobile/lib/components/Footer/findIconByHref.js.map +1 -0
- package/mobile/lib/components/Footer/iconsMap.d.ts +7 -0
- package/mobile/lib/components/Footer/iconsMap.js +33 -0
- package/mobile/lib/components/Footer/iconsMap.js.map +1 -0
- package/mobile/lib/components/RollupItem/RollupItem.js +1 -2
- package/mobile/lib/components/RollupItem/RollupItem.js.map +1 -1
- package/mobile/lib/components/TextBlock/TextBlock.js +3 -3
- package/mobile/lib/components/TextBlock/TextBlock.js.map +1 -1
- package/mobile/lib/model/HeadlineType.d.ts +5 -4
- package/mobile/lib/ui-kit/CookiePopup/CookiePopup.js +1 -1
- package/mobile/lib/ui-kit/CookiePopup/CookiePopup.js.map +1 -1
- package/mobile/lib/ui-kit/Icon/IconProps.d.ts +3 -2
- package/mobile/lib/ui-kit/Icon/RoundedIcon.d.ts +1 -0
- package/mobile/lib/ui-kit/Icon/RoundedIcon.js +9 -6
- package/mobile/lib/ui-kit/Icon/RoundedIcon.js.map +1 -1
- package/mobile/lib/ui-kit/Select/Select.js +1 -1
- package/mobile/lib/ui-kit/Select/Select.js.map +1 -1
- package/mobile/lib/ui-kit/TopItem/TopItem.js +0 -1
- package/mobile/lib/ui-kit/TopItem/TopItem.js.map +1 -1
- package/mobile/src/components/ApplicationForm/ApplicationForm.tsx +3 -1
- package/mobile/src/components/ApplicationForm/ApplicationFormAcquiring.tsx +2 -2
- package/mobile/src/components/ApplicationForm/ApplicationFormCredit.tsx +3 -3
- package/mobile/src/components/ApplicationForm/ApplicationFormDeposit.tsx +3 -3
- package/mobile/src/components/ApplicationForm/ApplicationFormWed.tsx +5 -5
- package/mobile/src/components/ApplicationForm/renderAcquiringDataOrganization.tsx +3 -3
- package/mobile/src/components/ApplicationForm/renderAcquiringRegion.tsx +3 -3
- package/mobile/src/components/ApplicationForm/renderBusinessCardDataOrganization.tsx +3 -3
- package/mobile/src/components/ApplicationForm/renderCreditDataOrganization.tsx +3 -3
- package/mobile/src/components/ApplicationForm/renderCreditParameters.tsx +3 -3
- package/mobile/src/components/ApplicationForm/renderQuestionsInterested.tsx +13 -5
- package/mobile/src/components/ApplicationForm/renderRegion.tsx +7 -9
- package/mobile/src/components/ApplicationForm/renderRegionDepartment.tsx +3 -3
- package/mobile/src/components/ApplicationForm/renderSlideCheckboxes.tsx +1 -1
- package/mobile/src/components/ApplicationForm/renderSubmitButton.tsx +4 -1
- package/mobile/src/components/ApplicationForm/renderWedDataOrganization.tsx +6 -6
- package/mobile/src/components/BenefitsBlock/BenefitsBlock.example.json +6 -6
- package/mobile/src/components/BenefitsBlock/BenefitsBlock.tsx +15 -19
- package/mobile/src/components/BenefitsBlock/BenefitsBlockContent.ts +2 -0
- package/mobile/src/components/BenefitsBlock/defaultIconSize.tsx +1 -0
- package/mobile/src/components/Blocks.ts +3 -1
- package/mobile/src/components/BonusBenefitsBlock/renderBonusBenefits.tsx +2 -2
- package/mobile/src/components/CarouselProductCard/CarouselProductCard.tsx +2 -4
- package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCard.example.json +2 -1
- package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCard.tsx +13 -2
- package/mobile/src/components/CarouselTariffsCard/CarouselTariffsCardContent.ts +3 -1
- package/mobile/src/components/CarouselTariffsCard/renderCardInfo.tsx +1 -2
- package/mobile/src/components/Footer/Footer.tsx +19 -8
- package/mobile/src/components/Footer/MediaButton.tsx +2 -39
- package/mobile/src/components/Footer/findIconByHref.ts +4 -0
- package/mobile/src/components/Footer/iconsMap.ts +40 -0
- package/mobile/src/components/RollupItem/RollupItem.tsx +2 -3
- package/mobile/src/components/TextBlock/TextBlock.tsx +12 -5
- package/mobile/src/model/HeadlineType.ts +6 -5
- package/mobile/src/ui-kit/CookiePopup/CookiePopup.tsx +3 -3
- package/mobile/src/ui-kit/Icon/IconProps.ts +3 -2
- package/mobile/src/ui-kit/Icon/RoundedIcon.tsx +18 -7
- package/mobile/src/ui-kit/Select/Select.tsx +1 -1
- package/mobile/src/ui-kit/TopItem/TopItem.tsx +0 -1
- package/package.json +1 -1
- package/src/components/ApplicationForm/ApplicationForm.fixture.mobile.tsx +44 -0
- package/src/components/ApplicationForm/ApplicationForm.tsx +3 -1
- package/src/components/ApplicationForm/ApplicationFormAcquiring.tsx +2 -2
- package/src/components/ApplicationForm/ApplicationFormCredit.tsx +3 -3
- package/src/components/ApplicationForm/ApplicationFormDeposit.tsx +3 -3
- package/src/components/ApplicationForm/ApplicationFormWed.tsx +5 -5
- package/src/components/ApplicationForm/renderAcquiringDataOrganization.tsx +3 -3
- package/src/components/ApplicationForm/renderAcquiringRegion.tsx +3 -3
- package/src/components/ApplicationForm/renderBusinessCardDataOrganization.tsx +3 -3
- package/src/components/ApplicationForm/renderCreditDataOrganization.tsx +3 -3
- package/src/components/ApplicationForm/renderCreditParameters.tsx +3 -3
- package/src/components/ApplicationForm/renderQuestionsInterested.tsx +13 -5
- package/src/components/ApplicationForm/renderRegion.tsx +7 -9
- package/src/components/ApplicationForm/renderRegionDepartment.tsx +3 -3
- package/src/components/ApplicationForm/renderSlideCheckboxes.tsx +1 -1
- package/src/components/ApplicationForm/renderSubmitButton.tsx +4 -1
- package/src/components/ApplicationForm/renderWedDataOrganization.tsx +6 -6
- package/src/components/BenefitsBlock/BenefitsBlock.example.json +6 -6
- package/src/components/BenefitsBlock/BenefitsBlock.fixture.mobile.tsx +27 -20
- package/src/components/BenefitsBlock/BenefitsBlock.fixture.tsx +43 -127
- package/src/components/BenefitsBlock/BenefitsBlock.tsx +15 -19
- package/src/components/BenefitsBlock/BenefitsBlockContent.ts +2 -0
- package/src/components/BenefitsBlock/defaultIconSize.mobile.tsx +1 -0
- package/src/components/BenefitsBlock/defaultIconSize.tsx +1 -0
- package/src/components/Blocks.mobile.ts +3 -1
- package/src/components/BonusBenefitsBlock/BonusBenefitsBlock.fixture.mobile.tsx +1 -1
- package/src/components/BonusBenefitsBlock/renderBonusBenefits.mobile.tsx +2 -2
- package/src/components/CarouselProductCard/CarouselProductCard.tsx +2 -4
- package/src/components/CarouselTariffsCard/CarouselTariffsCard.example.json +2 -1
- package/src/components/CarouselTariffsCard/CarouselTariffsCard.tsx +13 -2
- package/src/components/CarouselTariffsCard/CarouselTariffsCardContent.ts +3 -1
- package/src/components/CarouselTariffsCard/renderCardInfo.tsx +1 -2
- package/src/components/Footer/Footer.mobile.tsx +19 -8
- package/src/components/Footer/MediaButton.tsx +2 -39
- package/src/components/Footer/findIconByHref.ts +4 -0
- package/src/components/Footer/iconsMap.ts +40 -0
- package/src/components/RollupItem/RollupItem.fixture.mobile.tsx +0 -14
- package/src/components/RollupItem/RollupItem.tsx +2 -3
- package/src/components/TextBlock/TextBlock.tsx +12 -5
- package/src/model/HeadlineType.ts +6 -5
- package/src/ui-kit/CookiePopup/CookiePopup.tsx +3 -3
- package/src/ui-kit/Icon/IconProps.ts +3 -2
- package/src/ui-kit/Icon/RoundedIcon.tsx +18 -7
- package/src/ui-kit/Select/Select.tsx +1 -1
- package/src/ui-kit/TopItem/TopItem.tsx +0 -1
- package/tailwind.config.cjs +0 -16
- package/bundle/components/BenefitsBlock/benefitImageStyles.d.ts +0 -1
- package/bundle/components/BenefitsBlock/benefitImageStyles.mobile.d.ts +0 -1
- package/bundle/components/CarouselTariffsCard/descriptionSize.d.ts +0 -1
- package/bundle/components/CarouselTariffsCard/descriptionSize.mobile.d.ts +0 -1
- package/bundle/components/RollupItem/labelSize.d.ts +0 -1
- package/bundle/components/RollupItem/labelSize.mobile.d.ts +0 -1
- package/dist/components/BenefitsBlock/benefitImageStyles.d.ts +0 -1
- package/dist/components/BenefitsBlock/benefitImageStyles.js +0 -4
- package/dist/components/BenefitsBlock/benefitImageStyles.js.map +0 -1
- package/dist/components/BenefitsBlock/benefitImageStyles.mobile.d.ts +0 -1
- package/dist/components/BenefitsBlock/benefitImageStyles.mobile.js +0 -4
- package/dist/components/BenefitsBlock/benefitImageStyles.mobile.js.map +0 -1
- package/dist/components/CarouselTariffsCard/descriptionSize.d.ts +0 -1
- package/dist/components/CarouselTariffsCard/descriptionSize.js +0 -4
- package/dist/components/CarouselTariffsCard/descriptionSize.js.map +0 -1
- package/dist/components/CarouselTariffsCard/descriptionSize.mobile.d.ts +0 -1
- package/dist/components/CarouselTariffsCard/descriptionSize.mobile.js +0 -4
- package/dist/components/CarouselTariffsCard/descriptionSize.mobile.js.map +0 -1
- package/dist/components/RollupItem/labelSize.d.ts +0 -1
- package/dist/components/RollupItem/labelSize.js +0 -4
- package/dist/components/RollupItem/labelSize.js.map +0 -1
- package/dist/components/RollupItem/labelSize.mobile.d.ts +0 -1
- package/dist/components/RollupItem/labelSize.mobile.js +0 -4
- package/dist/components/RollupItem/labelSize.mobile.js.map +0 -1
- package/lib/components/BenefitsBlock/benefitImageStyles.d.ts +0 -1
- package/lib/components/BenefitsBlock/benefitImageStyles.js +0 -2
- package/lib/components/BenefitsBlock/benefitImageStyles.js.map +0 -1
- package/lib/components/BenefitsBlock/benefitImageStyles.mobile.d.ts +0 -1
- package/lib/components/BenefitsBlock/benefitImageStyles.mobile.js +0 -2
- package/lib/components/BenefitsBlock/benefitImageStyles.mobile.js.map +0 -1
- package/lib/components/CarouselTariffsCard/descriptionSize.d.ts +0 -1
- package/lib/components/CarouselTariffsCard/descriptionSize.js +0 -2
- package/lib/components/CarouselTariffsCard/descriptionSize.js.map +0 -1
- package/lib/components/CarouselTariffsCard/descriptionSize.mobile.d.ts +0 -1
- package/lib/components/CarouselTariffsCard/descriptionSize.mobile.js +0 -2
- package/lib/components/CarouselTariffsCard/descriptionSize.mobile.js.map +0 -1
- package/lib/components/RollupItem/labelSize.d.ts +0 -1
- package/lib/components/RollupItem/labelSize.js +0 -2
- package/lib/components/RollupItem/labelSize.js.map +0 -1
- package/lib/components/RollupItem/labelSize.mobile.d.ts +0 -1
- package/lib/components/RollupItem/labelSize.mobile.js +0 -2
- package/lib/components/RollupItem/labelSize.mobile.js.map +0 -1
- package/mobile/bundle/components/BenefitsBlock/benefitImageStyles.d.ts +0 -1
- package/mobile/bundle/components/CarouselTariffsCard/descriptionSize.d.ts +0 -1
- package/mobile/bundle/components/RollupItem/labelSize.d.ts +0 -1
- package/mobile/dist/components/BenefitsBlock/benefitImageStyles.d.ts +0 -1
- package/mobile/dist/components/BenefitsBlock/benefitImageStyles.js +0 -4
- package/mobile/dist/components/BenefitsBlock/benefitImageStyles.js.map +0 -1
- package/mobile/dist/components/CarouselTariffsCard/descriptionSize.d.ts +0 -1
- package/mobile/dist/components/CarouselTariffsCard/descriptionSize.js +0 -4
- package/mobile/dist/components/CarouselTariffsCard/descriptionSize.js.map +0 -1
- package/mobile/dist/components/RollupItem/labelSize.d.ts +0 -1
- package/mobile/dist/components/RollupItem/labelSize.js +0 -4
- package/mobile/dist/components/RollupItem/labelSize.js.map +0 -1
- package/mobile/lib/components/BenefitsBlock/benefitImageStyles.d.ts +0 -1
- package/mobile/lib/components/BenefitsBlock/benefitImageStyles.js +0 -2
- package/mobile/lib/components/BenefitsBlock/benefitImageStyles.js.map +0 -1
- package/mobile/lib/components/CarouselTariffsCard/descriptionSize.d.ts +0 -1
- package/mobile/lib/components/CarouselTariffsCard/descriptionSize.js +0 -2
- package/mobile/lib/components/CarouselTariffsCard/descriptionSize.js.map +0 -1
- package/mobile/lib/components/RollupItem/labelSize.d.ts +0 -1
- package/mobile/lib/components/RollupItem/labelSize.js +0 -2
- package/mobile/lib/components/RollupItem/labelSize.js.map +0 -1
- package/mobile/src/components/BenefitsBlock/benefitImageStyles.tsx +0 -1
- package/mobile/src/components/CarouselTariffsCard/descriptionSize.tsx +0 -1
- package/mobile/src/components/RollupItem/labelSize.tsx +0 -1
- package/src/components/BenefitsBlock/benefitImageStyles.mobile.tsx +0 -1
- package/src/components/BenefitsBlock/benefitImageStyles.tsx +0 -1
- package/src/components/CarouselTariffsCard/descriptionSize.mobile.tsx +0 -1
- package/src/components/CarouselTariffsCard/descriptionSize.tsx +0 -1
- package/src/components/RollupItem/labelSize.mobile.tsx +0 -1
- package/src/components/RollupItem/labelSize.tsx +0 -1
|
@@ -237,6 +237,27 @@
|
|
|
237
237
|
return JSXTmpl;
|
|
238
238
|
};
|
|
239
239
|
|
|
240
|
+
function CorporateLeadAPI() {
|
|
241
|
+
async function send(body) {
|
|
242
|
+
try {
|
|
243
|
+
const response = await fetch('/api/v1/sendcorporatelead', {
|
|
244
|
+
method: 'POST',
|
|
245
|
+
headers: { 'Content-Type': 'application/json' },
|
|
246
|
+
mode: 'cors',
|
|
247
|
+
body: JSON.stringify(body),
|
|
248
|
+
});
|
|
249
|
+
const data = await response.json();
|
|
250
|
+
return data;
|
|
251
|
+
}
|
|
252
|
+
catch (e) {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
send,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
240
261
|
class EventBus {
|
|
241
262
|
subscribers = {};
|
|
242
263
|
subjectsStateMap = {};
|
|
@@ -309,49 +330,878 @@
|
|
|
309
330
|
.filter(Boolean)
|
|
310
331
|
.join(' ');
|
|
311
332
|
|
|
312
|
-
const blockStyles = {
|
|
313
|
-
primary: 'bg-white text-primary-text',
|
|
314
|
-
secondary: 'bg-primary-main text-white',
|
|
315
|
-
gray: 'bg-main-divider text-primary-text',
|
|
316
|
-
transparent: 'bg-transparent text-primary-text',
|
|
317
|
-
'': '',
|
|
318
|
-
};
|
|
319
|
-
const BlockWrapper = JSX(({ className, version = 'primary', isTheme = true, defaultPadding = 'p-m', padding, block, tag = 'section', role, children, }) => {
|
|
320
|
-
const Tag = tag;
|
|
321
|
-
const ref = useBlockIntersectionObserver(block);
|
|
322
|
-
const [isHidden, setHidden] = useState(false);
|
|
323
|
-
useEffect(() => defaultEventBus.subscribe('tab', (event) => {
|
|
324
|
-
setHidden(Boolean(event.label && block?.labels?.length && !block.labels.includes(event.label)));
|
|
325
|
-
}), [block]);
|
|
326
|
-
const isGroup = version && isTheme;
|
|
327
|
-
return (jsx(Tag, { className: style('font-sans', isGroup ? 'group' : '', blockStyles[version], isHidden ? 'hidden' : '', padding || defaultPadding, className), ...(isGroup ? { 'data-ver': version } : {}), ...(block?.anchor ? { id: block.anchor, ref } : {}), role: role, children: children }));
|
|
333
|
+
const blockStyles = {
|
|
334
|
+
primary: 'bg-white text-primary-text',
|
|
335
|
+
secondary: 'bg-primary-main text-white',
|
|
336
|
+
gray: 'bg-main-divider text-primary-text',
|
|
337
|
+
transparent: 'bg-transparent text-primary-text',
|
|
338
|
+
'': '',
|
|
339
|
+
};
|
|
340
|
+
const BlockWrapper = JSX(({ className, version = 'primary', isTheme = true, defaultPadding = 'p-m', padding, block, tag = 'section', role, children, }) => {
|
|
341
|
+
const Tag = tag;
|
|
342
|
+
const ref = useBlockIntersectionObserver(block);
|
|
343
|
+
const [isHidden, setHidden] = useState(false);
|
|
344
|
+
useEffect(() => defaultEventBus.subscribe('tab', (event) => {
|
|
345
|
+
setHidden(Boolean(event.label && block?.labels?.length && !block.labels.includes(event.label)));
|
|
346
|
+
}), [block]);
|
|
347
|
+
const isGroup = version && isTheme;
|
|
348
|
+
return (jsx(Tag, { className: style('font-sans', isGroup ? 'group' : '', blockStyles[version], isHidden ? 'hidden' : '', padding || defaultPadding, className), ...(isGroup ? { 'data-ver': version } : {}), ...(block?.anchor ? { id: block.anchor, ref } : {}), role: role, children: children }));
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
const mobileHeadingTagMap = {
|
|
352
|
+
h1: 'h1',
|
|
353
|
+
h2: 'h1',
|
|
354
|
+
h3: 'h2',
|
|
355
|
+
h4: 'h2',
|
|
356
|
+
h5: 'h3',
|
|
357
|
+
h6: 'h3',
|
|
358
|
+
};
|
|
359
|
+
const headingTag = (tag) => mobileHeadingTagMap[tag] || 'h3';
|
|
360
|
+
|
|
361
|
+
const styles = {
|
|
362
|
+
h0: 'text-h0',
|
|
363
|
+
h1: 'text-h1',
|
|
364
|
+
h2: 'text-h2',
|
|
365
|
+
h3: 'text-h3',
|
|
366
|
+
h4: 'text-h4',
|
|
367
|
+
h5: 'text-h5',
|
|
368
|
+
h6: 'text-h6', // 20
|
|
369
|
+
};
|
|
370
|
+
const Heading = JSX(({ className = '', headingType = 'h3', as = 'h3', title, children }) => {
|
|
371
|
+
const Tag = headingTag(as);
|
|
372
|
+
return (jsx(Tag, { className: style('font-sans m-0', styles[headingType], className), children: title || children }));
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
const identity = (_) => _;
|
|
376
|
+
|
|
377
|
+
const useForm = (initialState, onSubmit) => {
|
|
378
|
+
const [formState, setFormState] = useState(initialState);
|
|
379
|
+
const [isDirtyForm, setDirtyForm] = useState(false);
|
|
380
|
+
const [dirtyFieldsMap, setDirtyFieldsMap] = useState({});
|
|
381
|
+
const handlersMap = useRef({});
|
|
382
|
+
const field = useCallback((fieldName, options) => {
|
|
383
|
+
const { parse = identity, format = identity } = options || {};
|
|
384
|
+
if (!handlersMap.current) {
|
|
385
|
+
handlersMap.current = {};
|
|
386
|
+
}
|
|
387
|
+
handlersMap.current[fieldName] ||= (value) => {
|
|
388
|
+
setFormState((prev) => ({ ...prev, [fieldName]: parse(value) }));
|
|
389
|
+
setDirtyFieldsMap((prev) => ({ ...prev, [fieldName]: true }));
|
|
390
|
+
};
|
|
391
|
+
return {
|
|
392
|
+
value: format(formState[fieldName]),
|
|
393
|
+
isDirty: isDirtyForm || dirtyFieldsMap[fieldName],
|
|
394
|
+
onChange: handlersMap.current[fieldName],
|
|
395
|
+
};
|
|
396
|
+
}, [formState, isDirtyForm, dirtyFieldsMap]);
|
|
397
|
+
const reset = useCallback(() => {
|
|
398
|
+
setFormState(initialState);
|
|
399
|
+
setDirtyForm(false);
|
|
400
|
+
setDirtyFieldsMap({});
|
|
401
|
+
}, [initialState]);
|
|
402
|
+
const handleSubmit = useCallback((e) => {
|
|
403
|
+
e.preventDefault();
|
|
404
|
+
setDirtyForm(true);
|
|
405
|
+
onSubmit && onSubmit(formState);
|
|
406
|
+
}, [onSubmit, formState]);
|
|
407
|
+
return [
|
|
408
|
+
formState,
|
|
409
|
+
{
|
|
410
|
+
isDirty: isDirtyForm || Object.values(dirtyFieldsMap).some(Boolean),
|
|
411
|
+
field,
|
|
412
|
+
reset,
|
|
413
|
+
onSubmit: handleSubmit,
|
|
414
|
+
},
|
|
415
|
+
];
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
const objectValidator = (validatorsMap) => (o) => (o &&
|
|
419
|
+
Object.entries(validatorsMap).flatMap(([key, validator]) => validator(o[key]))) ||
|
|
420
|
+
[];
|
|
421
|
+
|
|
422
|
+
const isValidationSuccess = (info) => !info?.length;
|
|
423
|
+
const validator = (predicate) => (message) => (_) => predicate(_) ? [] : [message];
|
|
424
|
+
|
|
425
|
+
const isFilled = (_) => _ !== null && _ !== undefined;
|
|
426
|
+
|
|
427
|
+
const defaultCache = new Map();
|
|
428
|
+
const applyCache = (fetcher, cache = defaultCache) => (key) => {
|
|
429
|
+
const cachedData = cache.get(key);
|
|
430
|
+
if (isFilled(cachedData)) {
|
|
431
|
+
return cachedData;
|
|
432
|
+
}
|
|
433
|
+
const data = fetcher(key);
|
|
434
|
+
if (isFilled(data)) {
|
|
435
|
+
cache.set(key, Promise.resolve(data));
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
cache.delete(key);
|
|
439
|
+
}
|
|
440
|
+
return data;
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
const isSimpleKey = (args) => Boolean(args && Array.isArray(args) && args.length === 1 && typeof args[0] === 'string');
|
|
444
|
+
function useAsyncData(key, fetcher, { fallback, cache } = {}) {
|
|
445
|
+
const args = useMemo(() => keyToArgs(key), [key]);
|
|
446
|
+
const [simpleKey] = isSimpleKey(args) ? args : [];
|
|
447
|
+
const [data, setData] = useState(undefined);
|
|
448
|
+
const [error, setError] = useState(undefined);
|
|
449
|
+
useEffect(() => {
|
|
450
|
+
const isEmptyKey = !args.some(isFilled);
|
|
451
|
+
if (isEmptyKey) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
(async () => {
|
|
455
|
+
try {
|
|
456
|
+
const newData = await (simpleKey
|
|
457
|
+
? applyCache(fetcher, cache)(simpleKey)
|
|
458
|
+
: fetcher(...args));
|
|
459
|
+
setData(newData);
|
|
460
|
+
setError(undefined);
|
|
461
|
+
}
|
|
462
|
+
catch (err) {
|
|
463
|
+
setData(undefined);
|
|
464
|
+
setError(err);
|
|
465
|
+
}
|
|
466
|
+
})();
|
|
467
|
+
}, [fetcher, cache, args]);
|
|
468
|
+
const fallbackData = fallback && simpleKey && fallback[simpleKey];
|
|
469
|
+
return {
|
|
470
|
+
data: !data && fallbackData ? fallbackData : data,
|
|
471
|
+
error,
|
|
472
|
+
mutate: () => Promise.resolve(undefined),
|
|
473
|
+
isValidating: false
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
function keyToArgs(key) {
|
|
477
|
+
if (Array.isArray(key)) {
|
|
478
|
+
return key;
|
|
479
|
+
}
|
|
480
|
+
else if (key instanceof Function) {
|
|
481
|
+
return keyToArgs(key());
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
return [key];
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
async function fetchJSON(url, options) {
|
|
489
|
+
try {
|
|
490
|
+
return url ? await fetchJSONUnsafe(url, options) : null;
|
|
491
|
+
}
|
|
492
|
+
catch (err) {
|
|
493
|
+
console.error(err);
|
|
494
|
+
}
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
async function fetchJSONUnsafe(url, options) {
|
|
498
|
+
const response = await fetch(url, {
|
|
499
|
+
...options,
|
|
500
|
+
headers: {
|
|
501
|
+
...options?.headers,
|
|
502
|
+
'Content-Type': 'application/json',
|
|
503
|
+
},
|
|
504
|
+
});
|
|
505
|
+
return await response.json();
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const REGIONS_URL = '/api/v1/regions';
|
|
509
|
+
const EMPTY_VALUE$2 = [];
|
|
510
|
+
function useGetRegions() {
|
|
511
|
+
const { data } = useAsyncData(REGIONS_URL, fetchJSONUnsafe);
|
|
512
|
+
return data || EMPTY_VALUE$2;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
const useDialog = (id = '') => ({
|
|
516
|
+
open: (message) => defaultEventBus.fire('dialog', { type: 'open', id, message }),
|
|
517
|
+
close: () => defaultEventBus.fire('dialog', { type: 'close' }),
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
const dirname = (path) => path?.split('/').slice(0, -1).join('/');
|
|
521
|
+
|
|
522
|
+
const isURL = (href) => Boolean(href?.includes(':'));
|
|
523
|
+
const isLocalURL = (href, target) => Boolean(href && !isURL(href) && (!target || target === '_self'));
|
|
524
|
+
const isHash = (href) => Boolean(href?.startsWith('#'));
|
|
525
|
+
const withoutQuery = (href) => (href || '').replace(/\?.*/, '').replace(/\/$/, '');
|
|
526
|
+
const joinPath = (...path) => path.filter(Boolean).join('/').replace(/\/+/g, '/');
|
|
527
|
+
|
|
528
|
+
var url = /*#__PURE__*/Object.freeze({
|
|
529
|
+
__proto__: null,
|
|
530
|
+
isURL: isURL,
|
|
531
|
+
isLocalURL: isLocalURL,
|
|
532
|
+
isHash: isHash,
|
|
533
|
+
withoutQuery: withoutQuery,
|
|
534
|
+
joinPath: joinPath
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
const adjustHref = (router) => (href, basePath = projectSettings.BASE_PATH) => {
|
|
538
|
+
if (!href || isURL(href) || hasPrefix(href, projectSettings.CDN)) {
|
|
539
|
+
return href;
|
|
540
|
+
}
|
|
541
|
+
const isRelativeToBase = href.startsWith('/');
|
|
542
|
+
return joinPath(hasPrefix(href, basePath) ? '' : basePath, isRelativeToBase ? '/' : dirname(router.pathname), href);
|
|
543
|
+
};
|
|
544
|
+
const hasPrefix = (href, prefix) => prefix && href && href.startsWith(prefix);
|
|
545
|
+
|
|
546
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
547
|
+
const handlerDecorator = (handler, targetContent) => {
|
|
548
|
+
return handlerDecorator._impl(handler, targetContent);
|
|
549
|
+
};
|
|
550
|
+
handlerDecorator._impl = (handler) => handler;
|
|
551
|
+
handlerDecorator.setup = (impl) => {
|
|
552
|
+
handlerDecorator._impl = impl;
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
function useRouter() {
|
|
556
|
+
return useRouter._impl();
|
|
557
|
+
}
|
|
558
|
+
useRouter._impl = () => ({
|
|
559
|
+
href: globalThis.location?.href || '/',
|
|
560
|
+
pathname: globalThis.location?.pathname || '/',
|
|
561
|
+
query: {},
|
|
562
|
+
push: () => {
|
|
563
|
+
// Do nothing
|
|
564
|
+
},
|
|
565
|
+
replace: () => {
|
|
566
|
+
// Do nothing
|
|
567
|
+
},
|
|
568
|
+
back: () => {
|
|
569
|
+
// Do nothing
|
|
570
|
+
},
|
|
571
|
+
});
|
|
572
|
+
useRouter.setup = (impl) => {
|
|
573
|
+
useRouter._impl = impl;
|
|
574
|
+
};
|
|
575
|
+
|
|
576
|
+
function useLink(params = {}) {
|
|
577
|
+
const { isRemote, basePath } = params;
|
|
578
|
+
const router = useRouter();
|
|
579
|
+
const { close } = useDialog();
|
|
580
|
+
return (props) => ({
|
|
581
|
+
...props,
|
|
582
|
+
href: isRemote && !basePath ? props.href : adjustHref(router)(props.href, basePath),
|
|
583
|
+
'aria-label': props.text,
|
|
584
|
+
onClick: handlerDecorator(handleHref(props), props),
|
|
585
|
+
});
|
|
586
|
+
function handleHref({ href, target, onClick }) {
|
|
587
|
+
return (ev) => {
|
|
588
|
+
onClick && onClick(ev);
|
|
589
|
+
if (!href || isRemote || !isLocalURL(href, target)) {
|
|
590
|
+
// Default routing
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
close();
|
|
594
|
+
// Client routing
|
|
595
|
+
ev?.preventDefault();
|
|
596
|
+
router.push(href);
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
const buttonStyleMap = {
|
|
602
|
+
primary: 'text-white bg-primary-main hover:bg-primary-hover active:bg-primary-active',
|
|
603
|
+
secondary: 'text-primary-main bg-main-divider hover:text-white hover:bg-primary-hover active:bg-primary-active',
|
|
604
|
+
white: 'text-primary-main bg-white hover:text-white hover:bg-primary-hover active:bg-white active:text-primary-main',
|
|
605
|
+
link: '',
|
|
606
|
+
transparent: '',
|
|
607
|
+
gray: 'text-primary-main bg-main-divider hover:text-white hover:bg-primary-hover active:bg-primary-active',
|
|
608
|
+
'': '',
|
|
609
|
+
};
|
|
610
|
+
const DisabledStyle = 'bg-main-divider text-main-disabled';
|
|
611
|
+
const buttonDisabledStyleMap = {
|
|
612
|
+
primary: DisabledStyle,
|
|
613
|
+
secondary: DisabledStyle,
|
|
614
|
+
white: DisabledStyle,
|
|
615
|
+
link: '',
|
|
616
|
+
transparent: '',
|
|
617
|
+
gray: DisabledStyle,
|
|
618
|
+
'': '',
|
|
619
|
+
};
|
|
620
|
+
const buttonStyle = 'text-center font-sans select-none';
|
|
621
|
+
const iconStyleMap = {
|
|
622
|
+
primary: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
623
|
+
secondary: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
624
|
+
white: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
625
|
+
link: '',
|
|
626
|
+
transparent: '',
|
|
627
|
+
gray: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
628
|
+
'': '',
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
const ButtonInner = JSX((props) => {
|
|
632
|
+
const { text, aboveText, appendLeft, appendRight, version = 'primary' } = props;
|
|
633
|
+
return (jsxs("div", { className: style(getButtonStyle(props), 'flex gap-2'), children: [appendLeft ? jsx("div", { className: iconStyleMap[version], children: appendLeft }) : null, isWithText(props) ? (jsxs("div", { children: [aboveText ? jsx("div", { className: "text-xs font-light text-left", children: aboveText }) : null, jsx("div", { className: `text-left ${aboveText ? 'text-s -mt-0.5' : 'text-l'}`, children: text })] })) : null, appendRight ? jsx("div", { className: iconStyleMap[version], children: appendRight }) : null] }));
|
|
634
|
+
});
|
|
635
|
+
const getButtonStyle = (props) => {
|
|
636
|
+
const { version, aboveText, rounded } = props;
|
|
637
|
+
if (version === 'link') {
|
|
638
|
+
return '';
|
|
639
|
+
}
|
|
640
|
+
const withTextStyle = `${aboveText ? 'py-2.5 px-9' : 'py-4 px-9'}`;
|
|
641
|
+
return [
|
|
642
|
+
'group/btn items-center justify-center',
|
|
643
|
+
isWithText(props) ? withTextStyle : 'h-12 w-12',
|
|
644
|
+
rounded ? 'rounded-full' : '',
|
|
645
|
+
].join(' ');
|
|
646
|
+
};
|
|
647
|
+
const isWithText = ({ text, aboveText, appendLeft }) => Boolean(text || aboveText || !appendLeft);
|
|
648
|
+
|
|
649
|
+
const getDisabledButtonClasses = ({ className, rounded, version, }) => [
|
|
650
|
+
'inline-block',
|
|
651
|
+
buttonStyle,
|
|
652
|
+
version ? buttonDisabledStyleMap[version] : '',
|
|
653
|
+
rounded ? 'rounded-full' : 'rounded-md',
|
|
654
|
+
className,
|
|
655
|
+
].join(' ');
|
|
656
|
+
|
|
657
|
+
const getRegularButtonClasses = ({ className, rounded, version, }) => [
|
|
658
|
+
buttonStyle,
|
|
659
|
+
'border border-transparent inline-block cursor-pointer no-underline focus:border-primary-text focus:border h-fit',
|
|
660
|
+
version ? buttonStyleMap[version] : '',
|
|
661
|
+
rounded ? 'rounded-full' : 'rounded-md',
|
|
662
|
+
className,
|
|
663
|
+
].join(' ');
|
|
664
|
+
|
|
665
|
+
const Button = JSX(({ disabled, children, ...rest }) => {
|
|
666
|
+
const link = useLink();
|
|
667
|
+
const adjustedProps = link(rest);
|
|
668
|
+
const buttonInner = children ?? jsx(ButtonInner, { ...adjustedProps });
|
|
669
|
+
return disabled ? (jsx(DisabledButton, { ...adjustedProps, children: buttonInner })) : (jsx(RegularButton, { ...adjustedProps, children: buttonInner }));
|
|
670
|
+
});
|
|
671
|
+
const RegularButton = JSX(({ className = '', href, rel, target, ariaLabel, version, rounded, onClick, children }) => (jsx("a", { className: getRegularButtonClasses({ className, version, rounded }), href: href, rel: rel, target: target, "aria-label": ariaLabel, role: href ? 'link' : 'button', onClick: onClick, children: children })));
|
|
672
|
+
const DisabledButton = JSX(({ className, ariaLabel, version, rounded, children }) => (jsx("div", { role: "button", "aria-disabled": "true", "aria-label": ariaLabel, tabIndex: -1, className: getDisabledButtonClasses({ className, rounded, version }), children: children })));
|
|
673
|
+
|
|
674
|
+
const Paragraph = JSX(({ children, ...styleProps }) => (jsx("p", { className: style('font-sans', Object.values(styleProps)), children: children })));
|
|
675
|
+
|
|
676
|
+
const Text = JSX(({ children, ...styleProps }) => (jsx("span", { className: style('font-sans', Object.values(styleProps)), children: children })));
|
|
677
|
+
|
|
678
|
+
const Footnote = JSX(({ link }) => (jsxs(Paragraph, { size: "text-s", font: "font-light", color: "text-secondary-text", children: [jsx(Text, { children: "\u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0435 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u0441 " }), link ? (jsx(Button, { href: link.href, ariaLabel: "\u0443\u0441\u043B\u043E\u0432\u0438\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043D\u043D\u044B\u0445", target: link.target, className: "text-primary-main", children: jsx(Text, { children: link.text }) })) : null] })));
|
|
679
|
+
|
|
680
|
+
const withValidator = (props, validator) => {
|
|
681
|
+
const { value, isDirty } = props;
|
|
682
|
+
const errors = isDirty ? validator(value) : [];
|
|
683
|
+
return {
|
|
684
|
+
...props,
|
|
685
|
+
errors,
|
|
686
|
+
error: errors[0],
|
|
687
|
+
};
|
|
688
|
+
};
|
|
689
|
+
|
|
690
|
+
const Input = JSX(({ key, className = '', inputClassName = '', id, name, type = 'text', label, placeholder, value = '', valid = true, children, onChange, onFocus, onBlur, pattern, }) => {
|
|
691
|
+
const handleChange = useCallback((e) => {
|
|
692
|
+
onChange && onChange(e.target?.value || '');
|
|
693
|
+
}, [onChange]);
|
|
694
|
+
const paddingStyle = children ? 'pr-8' : '';
|
|
695
|
+
const validStyle = valid
|
|
696
|
+
? 'border-gray hover:border-primary-hover active:border-primary-text focus:border-primary-text'
|
|
697
|
+
: 'border-error';
|
|
698
|
+
return (jsxs("div", { className: style('relative', className), children: [jsxs("label", { children: [label ? (jsx("div", { className: "mb-2", children: jsx(Text, { size: "text-m", font: "font-light", children: label }) })) : null, jsx("input", { className: style('w-full border rounded-md text-primary-text outline-none p-4', paddingStyle, validStyle, inputClassName), id: id, name: name || id, placeholder: placeholder, type: type, value: value, onInput: handleChange, onFocus: onFocus, onBlur: onBlur, pattern: pattern }, key)] }), children] }));
|
|
699
|
+
});
|
|
700
|
+
|
|
701
|
+
const InputControl = JSX(({ className, label, value = '', error, onChange, onBlur }) => (jsxs("div", { className: className, children: [jsx(Input, { type: "text", "aria-label": label, label: label, valid: Boolean(!error), value: value, onChange: onChange, onBlur: onBlur }), jsx("div", { className: "h-2", children: error ? (jsx(Text, { size: "text-xs", font: "font-light", color: "text-error", children: error })) : null })] })));
|
|
702
|
+
|
|
703
|
+
const isPlaceholder = (_) => _ === '_';
|
|
704
|
+
const isDigit = (_) => /\d/.test(_);
|
|
705
|
+
const isWildcard = (_) => isPlaceholder(_) || isDigit(_);
|
|
706
|
+
const phonePattern = [...'+7 (___) ___-__-__'];
|
|
707
|
+
const firstPlaceholderIndex = phonePattern.findIndex(isPlaceholder);
|
|
708
|
+
const phoneWildcardIndicies = phonePattern.map((_, i) => isWildcard(_) ? phonePattern.slice(0, i).filter(isWildcard).length : -1);
|
|
709
|
+
function normalizePhone(phone) {
|
|
710
|
+
const phoneNumbers = phone.replace(/\D/g, '');
|
|
711
|
+
const applyPlaceholder = (_, i) => isDigit(_) ? _ : phoneNumbers.charAt(phoneWildcardIndicies[i]) || _;
|
|
712
|
+
const result = phonePattern.map(applyPlaceholder);
|
|
713
|
+
const resultLength = phoneWildcardIndicies.indexOf(phoneNumbers.length - 1) + 1;
|
|
714
|
+
return (resultLength ? result.slice(0, Math.max(firstPlaceholderIndex, resultLength)) : result).join('');
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
const PhoneInput = JSX(({ children, onChange, ...inputProps }) => {
|
|
718
|
+
const handleChange = useCallback((value) => onChange && onChange(normalizePhone(value)), [onChange]);
|
|
719
|
+
return (jsx(Input, { onChange: handleChange, onFocus: (event) => handleChange(event?.target?.value || ''), ...inputProps, children: children }));
|
|
720
|
+
});
|
|
721
|
+
|
|
722
|
+
const PhoneInputControl = JSX(({ className, label, value, error, onChange, onBlur }) => (jsxs("div", { className: className, children: [jsx(PhoneInput, { "aria-label": label, label: label, valid: Boolean(!error), value: value, onChange: onChange, onBlur: onBlur }), jsx("div", { className: "h-2", children: error ? (jsx(Text, { size: "text-xs", font: "font-light", color: "text-error", children: error })) : null })] })));
|
|
723
|
+
|
|
724
|
+
const pattern = (regexp) => validator((_) => typeof _ === 'string' && regexp.test(_));
|
|
725
|
+
|
|
726
|
+
const required = validator((_) => _ !== null && _ !== undefined && _ !== '');
|
|
727
|
+
|
|
728
|
+
const ERROR_MESSAGE = 'Некорректно заполненное поле';
|
|
729
|
+
const defaultValidator = required(ERROR_MESSAGE);
|
|
730
|
+
const nameValidator = validator((_) => typeof _ === 'string' && _.length > 1)(ERROR_MESSAGE);
|
|
731
|
+
const innValidator = validator((_) => typeof _ === 'string' && (_.length === 10 || _.length === 12))(ERROR_MESSAGE);
|
|
732
|
+
const phoneValidator = pattern(/^(\+7)?[\s-]?\(?[0-9]{3}\)?[\s-]?[0-9]{3}[\s-]?[0-9]{2}[\s-]?[0-9]{2}$/)(ERROR_MESSAGE);
|
|
733
|
+
|
|
734
|
+
const renderAcquiringDataOrganization = (field) => (jsxs("div", { className: "mb-4 sm:flex sm:justify-between sm:gap-5 sm:mb-7", children: [jsxs("div", { className: "sm:w-1/2", children: [jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438", ...withValidator(field('fullName'), defaultValidator) }), jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E", ...withValidator(field('name'), nameValidator) })] }), jsxs("div", { className: "sm:w-1/2", children: [jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u0418\u041D\u041D", ...withValidator(field('inn'), innValidator) }), jsx(PhoneInputControl, { className: "shrink-0 w-full mb-3", label: "\u0422\u0435\u043B\u0435\u0444\u043E\u043D", ...withValidator(field('phone'), phoneValidator) })] })] }));
|
|
735
|
+
|
|
736
|
+
const ACQUIRING_TYPES = [
|
|
737
|
+
{
|
|
738
|
+
name: 'Торговый эквайринг',
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
name: 'Мобильный эквайринг',
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
name: 'Интернет-эквайринг',
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
name: 'QR-эквайринг (СБП)',
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
name: 'Все виды эквайринга',
|
|
751
|
+
},
|
|
752
|
+
];
|
|
753
|
+
|
|
754
|
+
function useBool(defaultValue = false) {
|
|
755
|
+
const [value, setValue] = useState(defaultValue);
|
|
756
|
+
const setTrue = useCallback(() => setValue(true), []);
|
|
757
|
+
const setFalse = useCallback(() => setValue(false), []);
|
|
758
|
+
const toggle = useCallback(() => setValue((_) => !_), []);
|
|
759
|
+
return [value, { setValue, setTrue, setFalse, toggle }];
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
function useOutsideClick(onClick) {
|
|
763
|
+
const targetRef = useRef(null);
|
|
764
|
+
useEffect(() => {
|
|
765
|
+
const handleClickOutside = (event) => {
|
|
766
|
+
if (targetRef &&
|
|
767
|
+
targetRef.current &&
|
|
768
|
+
event.target instanceof Node &&
|
|
769
|
+
!targetRef.current.contains(event.target)) {
|
|
770
|
+
onClick();
|
|
771
|
+
}
|
|
772
|
+
};
|
|
773
|
+
document.addEventListener('click', handleClickOutside);
|
|
774
|
+
return () => {
|
|
775
|
+
document.removeEventListener('click', handleClickOutside);
|
|
776
|
+
};
|
|
777
|
+
}, [onClick]);
|
|
778
|
+
return targetRef;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
const svgUseStyleMap = {
|
|
782
|
+
normal: '',
|
|
783
|
+
color: 'text-primary-main',
|
|
784
|
+
black: 'text-black',
|
|
785
|
+
white: 'text-black',
|
|
786
|
+
};
|
|
787
|
+
const Icon = JSX(({ className = '', imageClassName = '', name = '', alt = `Иконка ${name}`, title = alt, iconVersion = 'color', ...imgProps }) => {
|
|
788
|
+
const router = useRouter();
|
|
789
|
+
const href = adjustHref(router)(joinPath(projectSettings.CDN, '/icons', `${name}.svg`));
|
|
790
|
+
if (iconVersion !== 'normal') {
|
|
791
|
+
return (jsx(Background, { className: className, children: jsxs("svg", { className: style(getSvgSize(imgProps.width), svgUseStyleMap[iconVersion], iconVersion === 'white' ? 'invert' : '', imageClassName), ...imgProps, "aria-hidden": "true", children: [title ? jsx("title", { children: title }) : null, alt ? jsx("desc", { children: alt }) : null, jsx("use", { href: `${href}#icon`, xlinkHref: `${href}#icon` })] }) }));
|
|
792
|
+
}
|
|
793
|
+
if (!className.includes('h-')) {
|
|
794
|
+
imgProps['style'] = { height: `${imgProps.height}px` };
|
|
795
|
+
}
|
|
796
|
+
return (jsx("img", { className: className, src: href, alt: alt, title: title, "aria-hidden": "true", ...imgProps }));
|
|
797
|
+
});
|
|
798
|
+
const getSvgSize = (width) => (width ? '' : 'w-full h-full');
|
|
799
|
+
const Background = JSX(({ className, children }) => className ? jsx("div", { className: className, children: children }) : children);
|
|
800
|
+
|
|
801
|
+
const Select = JSX(({ className = '', label, options = [], value, valid = true, isBorder = true, placeholder = '', onChange, }) => {
|
|
802
|
+
const [isOpen, { setFalse: close, toggle }] = useBool();
|
|
803
|
+
const wrapperRef = useOutsideClick(close);
|
|
804
|
+
const handleChange = useCallback((option) => {
|
|
805
|
+
close();
|
|
806
|
+
onChange && onChange(option);
|
|
807
|
+
}, [onChange]);
|
|
808
|
+
const isSelected = (option) => option.key === value?.key;
|
|
809
|
+
return (jsxs("div", { className: className, ref: wrapperRef, children: [label ? (jsx("div", { className: "mb-2", children: jsx(Text, { size: "text-m", color: "text-primary-text", font: "font-light", children: label }) })) : null, jsxs("div", { className: style('relative', isOpen ? 'z-20' : 'z-10'), children: [jsxs("div", { className: style('text-l flex justify-between items-center text-primary-text cursor-pointer', getBorderStyle(isBorder, valid)), onClick: toggle, children: [jsx("p", { className: "p-4 pr-8 h-14 overflow-hidden text-ellipsis whitespace-nowrap", children: formatOption(value) || placeholder }), jsx(Icon, { className: style('absolute right-3', isOpen ? '' : 'rotate-180'), name: "ArrowUpIcon", width: "16", height: "16" })] }), options?.length ? (jsx("div", { className: style('h-0', isOpen ? '' : 'overflow-hidden'), children: jsx("div", { className: "bg-white text-l max-h-64 overflow-y-auto overflow-x-hidden rounded-md shadow-[0_4px_25px_rgba(0,0,0,0.07)]", children: options.map(renderOption(handleChange, isOpen, isSelected)) }) })) : null] })] }));
|
|
810
|
+
});
|
|
811
|
+
const renderOption = (handleChange, isOpen, isSelected) => (option, i) => (jsxs("div", { onClick: () => {
|
|
812
|
+
handleChange(option);
|
|
813
|
+
}, className: "flex px-4 py-3 cursor-pointer hover:bg-main-divider pr-11 relative", children: [jsx("span", { className: "min-h-6", children: formatOption(option) }), jsx(Icon, { name: "DoneSimpleIcon", width: "16", height: "16", className: style('absolute right-4 pt-0.5', isSelected(option) && isOpen ? '' : 'hidden') })] }, String(i)));
|
|
814
|
+
const formatOption = (_) => _?.text || _?.key || '';
|
|
815
|
+
const getBorderStyle = (isBorder, valid) => style(isBorder ? 'border rounded-md hover:border-primary-hover' : '', valid ? ' border-gray' : 'border-error');
|
|
816
|
+
|
|
817
|
+
const SelectControl = JSX((props) => (jsxs("div", { children: [jsx(Select, { ...props, valid: !props.error }), jsx("div", { className: "h-2", children: props.error ? (jsx(Text, { size: "text-xs", font: "font-light", color: "text-error", children: props.error })) : null })] })));
|
|
818
|
+
|
|
819
|
+
const renderAcquiringRegion = ({ regions, field }) => (jsxs("div", { className: "mb-4 pb-1 border-b border-b-main-divider sm:flex sm:justify-between sm:gap-5 sm:mb-7 sm:border-none sm:pb-0", children: [jsx("div", { className: "mb-3 sm:mb-0 sm:w-1/2", children: jsx(SelectControl, { label: "\u0412\u0438\u0434 \u044D\u043A\u0432\u0430\u0439\u0440\u0438\u043D\u0433\u0430", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u044D\u043A\u0432\u0430\u0439\u0440\u0438\u043D\u0433", options: ACQUIRING_TYPES.map(({ name: key = '' }) => ({ key, text: key })), ...withValidator(field('acquiringType'), defaultValidator) }) }), jsx("div", { className: "mb-3 sm:mb-0 sm:w-1/2", children: jsx(SelectControl, { label: "\u0410\u0434\u0440\u0435\u0441", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441", options: regions.map(({ code = '', name = '' }) => ({ key: code, text: name })), ...withValidator(field('region'), defaultValidator) }) })] }));
|
|
820
|
+
|
|
821
|
+
const SlideCheckbox = JSX(({ value = false, text, type = 'checkbox', onChange }) => (jsxs("div", { role: type, "aria-checked": value, className: "flex justify-start items-center w-full cursor-pointer mb-3", onClick: () => onChange && onChange(!value), children: [jsx("div", { className: style('relative flex-shrink-0 duration-300 w-9 h-5 mr-3 rounded-2xl', value ? 'bg-primary-main' : 'bg-main-divider'), children: jsx("div", { className: style('absolute opacity-80 duration-500 top-0.5 w-4 h-4 bg-white rounded-full', value ? 'left-[50%]' : 'left-[5%]') }) }), jsx(Text, { size: "text-l", font: "font-light", color: "text-primary-text", children: text })] })));
|
|
822
|
+
|
|
823
|
+
const renderSlideCheckboxes = (field) => (jsxs("div", { className: "sm:mb-5", children: [jsx(SlideCheckbox, { text: "\u0425\u043E\u0447\u0443 \u043A\u0443\u043F\u0438\u0442\u044C \u043E\u043D\u043B\u0430\u0439\u043D-\u043A\u0430\u0441\u0441\u0443", ...field('onlineCheckout') }), jsx(SlideCheckbox, { text: "\u0425\u043E\u0447\u0443 \u043A\u0443\u043F\u0438\u0442\u044C POS-\u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B", ...field('posTerminal') })] }));
|
|
824
|
+
|
|
825
|
+
const renderSubmitButton = (button, className) => {
|
|
826
|
+
const buttonStyle = getRegularButtonClasses({
|
|
827
|
+
className: 'text-white',
|
|
828
|
+
version: button?.version,
|
|
829
|
+
});
|
|
830
|
+
return (jsx("button", { type: "submit", className: style('p-4 mt-3 w-full sm:mt-0 sm:w-auto', buttonStyle, className), children: button?.text ? button.text : 'Отправить заявку' }));
|
|
831
|
+
};
|
|
832
|
+
|
|
833
|
+
const initialFormState$4 = {
|
|
834
|
+
acquiringType: { key: 'Торговый эквайринг' },
|
|
835
|
+
fullName: '',
|
|
836
|
+
inn: '',
|
|
837
|
+
name: '',
|
|
838
|
+
phone: '',
|
|
839
|
+
onlineCheckout: false,
|
|
840
|
+
posTerminal: false,
|
|
841
|
+
};
|
|
842
|
+
const acquiringValidator = objectValidator({
|
|
843
|
+
acquiringType: defaultValidator,
|
|
844
|
+
region: defaultValidator,
|
|
845
|
+
fullName: defaultValidator,
|
|
846
|
+
inn: innValidator,
|
|
847
|
+
name: nameValidator,
|
|
848
|
+
phone: phoneValidator,
|
|
849
|
+
});
|
|
850
|
+
const ApplicationFormAcquiring = JSX((props) => {
|
|
851
|
+
const { button, link, onSubmit } = props;
|
|
852
|
+
const handleSubmit = useCallback((formState) => {
|
|
853
|
+
const { acquiringType, region, fullName, inn, name, phone, onlineCheckout, posTerminal } = formState;
|
|
854
|
+
isValidationSuccess(acquiringValidator(formState)) &&
|
|
855
|
+
onSubmit({
|
|
856
|
+
typeForm: 'acqr',
|
|
857
|
+
region: region?.text || '',
|
|
858
|
+
partnerComments: `Вид эквайринга=${acquiringType?.key || ''}/Онлайн касса=${onlineCheckout}/POS-терминал=${posTerminal}`,
|
|
859
|
+
fullName,
|
|
860
|
+
inn,
|
|
861
|
+
name,
|
|
862
|
+
phone,
|
|
863
|
+
});
|
|
864
|
+
}, [onSubmit]);
|
|
865
|
+
const [, { field, ...formProps }] = useForm(initialFormState$4, handleSubmit);
|
|
866
|
+
const regions = useGetRegions();
|
|
867
|
+
return (jsxs("form", { className: "container", onSubmit: formProps.onSubmit, children: [jsx(Heading, { headingType: "h6", title: "\u0412\u0438\u0434 \u044D\u043A\u0432\u0430\u0439\u0440\u0438\u043D\u0433\u0430 \u0438 \u0440\u0435\u0433\u0438\u043E\u043D", className: "sm:text-center mb-4" }), renderAcquiringRegion({ regions, field }), jsx(Heading, { headingType: "h6", title: "\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438", className: "sm:text-center mb-4" }), renderAcquiringDataOrganization(field), renderSlideCheckboxes(field), renderSubmitButton(button, 'mb-4'), jsx(Footnote, { link: link })] }));
|
|
868
|
+
});
|
|
869
|
+
|
|
870
|
+
const renderBusinessCardDataOrganization = (field) => (jsxs("div", { className: "sm:flex sm:justify-between sm:gap-5", children: [jsxs("div", { className: "sm:w-1/2", children: [jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E", ...withValidator(field('name'), nameValidator) }), jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u0418\u041D\u041D", ...withValidator(field('inn'), innValidator) })] }), jsxs("div", { className: "sm:w-1/2", children: [jsx(PhoneInputControl, { className: "shrink-0 w-full mb-3", label: "\u0422\u0435\u043B\u0435\u0444\u043E\u043D", ...withValidator(field('phone'), phoneValidator) }), jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430", ...withValidator(field('mail'), defaultValidator) })] })] }));
|
|
871
|
+
|
|
872
|
+
const renderRegion = ({ regions, field }) => (jsx("div", { className: "w-full mb-3 sm:mb-5", children: jsx(SelectControl, { label: "\u0420\u0435\u0433\u0438\u043E\u043D", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u043E\u043D", options: regions.map(({ code = '', name = '' }) => ({ key: code, text: name })), ...withValidator(field('region'), defaultValidator) }) }));
|
|
873
|
+
|
|
874
|
+
const initialFormState$3 = {
|
|
875
|
+
name: '',
|
|
876
|
+
phone: '',
|
|
877
|
+
inn: '',
|
|
878
|
+
mail: '',
|
|
879
|
+
};
|
|
880
|
+
const businessCardValidator = objectValidator({
|
|
881
|
+
region: defaultValidator,
|
|
882
|
+
name: nameValidator,
|
|
883
|
+
phone: phoneValidator,
|
|
884
|
+
inn: innValidator,
|
|
885
|
+
mail: defaultValidator,
|
|
886
|
+
});
|
|
887
|
+
const ApplicationFormBusinessCard = JSX((props) => {
|
|
888
|
+
const { button, link, onSubmit } = props;
|
|
889
|
+
const handleSubmit = useCallback((formState) => {
|
|
890
|
+
const { region, name, phone, inn, mail } = formState;
|
|
891
|
+
isValidationSuccess(businessCardValidator(formState)) &&
|
|
892
|
+
onSubmit({
|
|
893
|
+
typeForm: 'bcrd',
|
|
894
|
+
region: region?.text || '',
|
|
895
|
+
name,
|
|
896
|
+
phone,
|
|
897
|
+
inn,
|
|
898
|
+
mail,
|
|
899
|
+
});
|
|
900
|
+
}, [onSubmit]);
|
|
901
|
+
const [, { field, ...formProps }] = useForm(initialFormState$3, handleSubmit);
|
|
902
|
+
const regions = useGetRegions();
|
|
903
|
+
return (jsxs("form", { className: "container", onSubmit: formProps.onSubmit, children: [renderRegion({ regions, field }), renderBusinessCardDataOrganization(field), renderSubmitButton(button, 'mb-4'), jsx(Footnote, { link: link })] }));
|
|
904
|
+
});
|
|
905
|
+
|
|
906
|
+
const BRANCHES_URL = '/api/v1/branches';
|
|
907
|
+
const EMPTY_VALUE$1 = [];
|
|
908
|
+
function useBranches(regionCode) {
|
|
909
|
+
const { data } = useAsyncData(regionCode ? `${BRANCHES_URL}?regionCode=${regionCode}` : null, fetchSafeBoxes);
|
|
910
|
+
return data || EMPTY_VALUE$1;
|
|
911
|
+
}
|
|
912
|
+
const fetchSafeBoxes = async (url) => {
|
|
913
|
+
const result = await fetchJSON(url, { method: 'GET' });
|
|
914
|
+
return result || EMPTY_VALUE$1;
|
|
915
|
+
};
|
|
916
|
+
|
|
917
|
+
const MIN_CREDIT_AMOUNT = 1000;
|
|
918
|
+
const MAX_CREDIT_AMOUNT = 1000000000;
|
|
919
|
+
const ITEMS_CREDIT_AMOUNT = ['От 1 000 ₽', 'До 1 000 000 000 ₽'];
|
|
920
|
+
const MIN_CREDIT_TERM = 1;
|
|
921
|
+
const MAX_CREDIT_TERM = 180;
|
|
922
|
+
const ITEMS_CREDIT_TERM = ['От 1 мес', 'До 15 лет'];
|
|
923
|
+
|
|
924
|
+
const renderCreditDataOrganization = (field) => (jsxs("div", { className: "mb-4 pb-1 border-b border-b-main-divider sm:flex sm:justify-between sm:gap-5 sm:mb-7 sm:border-none sm:pb-0", children: [jsxs("div", { className: "sm:w-1/2", children: [jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438", ...field('fullName') }), jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u0418\u041D\u041D", ...withValidator(field('inn'), innValidator) }), jsx(PhoneInputControl, { className: "shrink-0 w-full mb-3", label: "\u0422\u0435\u043B\u0435\u0444\u043E\u043D", ...withValidator(field('phone'), phoneValidator) })] }), jsxs("div", { className: "sm:w-1/2", children: [jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u0413\u043E\u0434\u043E\u0432\u0430\u044F \u0432\u044B\u0440\u0443\u0447\u043A\u0430, \u20BD", ...withValidator(field('annualRevenue'), defaultValidator) }), jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E", ...withValidator(field('name'), nameValidator) }), jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430", ...field('mail') })] })] }));
|
|
925
|
+
|
|
926
|
+
const useNormalizedInput = (props, { normalize, format }) => {
|
|
927
|
+
const { value, onFocus, onBlur, onChange } = props;
|
|
928
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
929
|
+
const handleFocus = useCallback((e) => {
|
|
930
|
+
setIsFocused(true);
|
|
931
|
+
onFocus && onFocus(e);
|
|
932
|
+
}, []);
|
|
933
|
+
const handleBlur = useCallback(() => {
|
|
934
|
+
setIsFocused(false);
|
|
935
|
+
onChange && onChange(normalize(value));
|
|
936
|
+
onBlur && onBlur();
|
|
937
|
+
}, [onChange, value]);
|
|
938
|
+
return {
|
|
939
|
+
value: (isFocused || !format ? value : format(value)),
|
|
940
|
+
onFocus: handleFocus,
|
|
941
|
+
onBlur: handleBlur,
|
|
942
|
+
};
|
|
943
|
+
};
|
|
944
|
+
|
|
945
|
+
const clamp = (value, min, max) => Math.max(min, Math.min(value, max));
|
|
946
|
+
|
|
947
|
+
const toLocalNumberFormat = (fractionDigits = 0) => (_ = 0) => new Intl.NumberFormat('ru-RU', {
|
|
948
|
+
minimumFractionDigits: 0,
|
|
949
|
+
maximumFractionDigits: fractionDigits,
|
|
950
|
+
}).format(Number(_) || 0);
|
|
951
|
+
|
|
952
|
+
function parseDecimal(value) {
|
|
953
|
+
const rawValue = (value || '').replace(/\D/g, '');
|
|
954
|
+
const unsafeDecimal = parseInt(rawValue, 10);
|
|
955
|
+
return Number.isNaN(unsafeDecimal) ? 0 : unsafeDecimal;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
function renderRangeWithTicks({ list = [], min, max, step, value = list[0] || min, disabled, onChange, }) {
|
|
959
|
+
const rangeValue = list.length ? list.indexOf(value) : value;
|
|
960
|
+
const inputStyle = {
|
|
961
|
+
backgroundSize: `${(((rangeValue - min) * 100) / (max - min)).toFixed(2)}% 100%`,
|
|
962
|
+
};
|
|
963
|
+
return (jsxs("div", { children: [list.length ? (jsx("div", { className: "absolute w-full flex justify-between -bottom-[3px] px-4", children: list.map((_, i) => (jsx("div", { className: `w-2 h-2 rounded-full ${rangeValue <= i || disabled ? 'bg-gray' : 'bg-primary-main'}` }, String(i)))) })) : null, jsx("div", { className: "absolute inset-x-0 -bottom-1 px-4 leading-[18px]", children: jsx("input", { className: "box-border w-full m-0 cursor-pointer slider relative z-10", style: inputStyle, type: "range", min: min, max: max, step: step, value: rangeValue, disabled: disabled, onInput: ((e) => {
|
|
964
|
+
const rawValue = parseDecimal(e.target?.value);
|
|
965
|
+
const newValue = list.length ? list[rawValue] : rawValue;
|
|
966
|
+
onChange && onChange(newValue || 0);
|
|
967
|
+
}) }) })] }));
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
const DISABLED_INPUT_CLASSES = 'disabled:border-gray disabled:bg-main-divider';
|
|
971
|
+
const DEFAULT_MIN = 1;
|
|
972
|
+
const DEFAULT_MAX = 100;
|
|
973
|
+
const InputRange = JSX((props) => {
|
|
974
|
+
const { className, title, items = [], list = [], min = list.length ? 0 : DEFAULT_MIN, max = list.length ? list.length - 1 : DEFAULT_MAX, step = 1, value = list[0] || min, disabled = false, onChange, } = props;
|
|
975
|
+
const normalizedProps = useNormalizedInput(props, {
|
|
976
|
+
normalize: (_ = 0) => list.length ? closestValue(list)(_) : clamp(_, min, max),
|
|
977
|
+
format: toLocalNumberFormat(),
|
|
978
|
+
});
|
|
979
|
+
const handleChange = useCallback((e) => {
|
|
980
|
+
onChange && onChange(parseDecimal(e.target?.value));
|
|
981
|
+
}, [onChange]);
|
|
982
|
+
return (jsxs("div", { className: className, children: [jsxs("label", { className: "block relative", children: [title ? (jsx(Text, { size: "text-m", font: "font-light", color: "text-primary-text", children: title })) : null, jsx("input", { className: style('m-0 mt-2 font-sans text-h3 w-full h-14', 'border border-solid border-gray rounded-md outline-none', 'p-0 pl-4 box-border', 'text-primary-text hover:border-primary-hover focus:border-primary-text', DISABLED_INPUT_CLASSES), disabled: disabled, onInput: handleChange, ...normalizedProps }), renderRangeWithTicks({ list, min, max, step, disabled, value, onChange })] }), renderRangeCaption(items)] }));
|
|
983
|
+
});
|
|
984
|
+
const closestValue = (list) => (_) => list.reduce((prev, curr) => (Math.abs(curr - _) < Math.abs(prev - _) ? curr : prev));
|
|
985
|
+
const renderRangeCaption = (items) => (jsx("div", { className: "flex justify-between my-2", children: items.map((item, i) => (jsx(Text, { size: "text-s", font: "font-light", color: "text-secondary-text", children: item }, String(i)))) }));
|
|
986
|
+
|
|
987
|
+
const renderCreditParameters = (field) => (jsxs("div", { className: "mb-4 pb-1 border-b border-b-main-divider sm:flex sm:justify-between sm:gap-5 sm:mb-7 sm:border-none sm:pb-0", children: [jsxs("div", { className: "mb-3 sm:mb-0 sm:w-1/2", children: [jsx("label", { children: jsx(Text, { size: "text-m", font: "font-light", children: "\u0421\u0443\u043C\u043C\u0430 \u043A\u0440\u0435\u0434\u0438\u0442\u0430, \u20BD" }) }), jsx(InputRange, { items: ITEMS_CREDIT_AMOUNT, min: MIN_CREDIT_AMOUNT, max: MAX_CREDIT_AMOUNT, ...field('amount') })] }), jsxs("div", { className: "sm:w-1/2", children: [jsx("label", { children: jsx(Text, { size: "text-m", font: "font-light", children: "\u0421\u0440\u043E\u043A \u043A\u0440\u0435\u0434\u0438\u0442\u0430, \u043C\u0435\u0441\u044F\u0446\u0435\u0432" }) }), jsx(InputRange, { items: ITEMS_CREDIT_TERM, min: MIN_CREDIT_TERM, max: MAX_CREDIT_TERM, ...field('term') })] })] }));
|
|
988
|
+
|
|
989
|
+
const renderRegionDepartment = ({ regions, branches, field }) => (jsxs("div", { className: "mb-4 sm:flex sm:justify-between sm:gap-5 sm:mb-7 sm:border-none sm:pb-0", children: [jsx("div", { className: "mb-3 sm:mb-0 sm:w-1/2", children: jsx(SelectControl, { label: "\u0420\u0435\u0433\u0438\u043E\u043D", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u043E\u043D", options: regions.map(({ code = '', name = '' }) => ({ key: code, text: name })), ...withValidator(field('region'), defaultValidator) }) }), jsx("div", { className: "mb-3 sm:mb-0 sm:w-1/2", children: jsx(SelectControl, { label: "\u0410\u0434\u0440\u0435\u0441", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441", options: branches.map(({ branchCode = '', address = '' }) => ({
|
|
990
|
+
key: branchCode,
|
|
991
|
+
text: address,
|
|
992
|
+
})), ...withValidator(field('department'), defaultValidator) }) })] }));
|
|
993
|
+
|
|
994
|
+
const initialFormState$2 = {
|
|
995
|
+
amount: MIN_CREDIT_AMOUNT,
|
|
996
|
+
term: 12,
|
|
997
|
+
fullName: '',
|
|
998
|
+
inn: '',
|
|
999
|
+
name: '',
|
|
1000
|
+
phone: '',
|
|
1001
|
+
mail: '',
|
|
1002
|
+
annualRevenue: '',
|
|
1003
|
+
};
|
|
1004
|
+
const creditValidator = objectValidator({
|
|
1005
|
+
annualRevenue: defaultValidator,
|
|
1006
|
+
inn: innValidator,
|
|
1007
|
+
name: nameValidator,
|
|
1008
|
+
phone: phoneValidator,
|
|
1009
|
+
region: defaultValidator,
|
|
1010
|
+
department: defaultValidator,
|
|
1011
|
+
});
|
|
1012
|
+
const ApplicationFormCredit = JSX(({ button, link, onSubmit }) => {
|
|
1013
|
+
const handleSubmit = useCallback((formState) => {
|
|
1014
|
+
const { amount, term, fullName, inn, name, phone, mail, region, department, annualRevenue } = formState;
|
|
1015
|
+
isValidationSuccess(creditValidator(formState)) &&
|
|
1016
|
+
onSubmit({
|
|
1017
|
+
typeForm: 'cred',
|
|
1018
|
+
fullName,
|
|
1019
|
+
inn,
|
|
1020
|
+
name,
|
|
1021
|
+
phone,
|
|
1022
|
+
mail,
|
|
1023
|
+
region: region?.text || '',
|
|
1024
|
+
department: department?.text || '',
|
|
1025
|
+
partnerComments: `Сумма=${amount}/Срок=${term}/Выручка=${annualRevenue}`,
|
|
1026
|
+
});
|
|
1027
|
+
}, [onSubmit]);
|
|
1028
|
+
const [formState, { field, ...formProps }] = useForm(initialFormState$2, handleSubmit);
|
|
1029
|
+
const regions = useGetRegions();
|
|
1030
|
+
const branches = useBranches(formState.region?.key).filter((branch) => branch?.address);
|
|
1031
|
+
return (jsxs("form", { className: "container", onSubmit: formProps.onSubmit, children: [jsx(Heading, { headingType: "h6", title: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043A\u0440\u0435\u0434\u0438\u0442\u0430", className: "sm:text-center mb-4" }), renderCreditParameters(field), jsx(Heading, { headingType: "h6", title: "\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438", className: "sm:text-center mb-4" }), renderCreditDataOrganization(field), jsx(Heading, { headingType: "h6", title: "\u041E\u0444\u0438\u0441 \u0431\u0430\u043D\u043A\u0430", className: "sm:text-center mb-4" }), renderRegionDepartment({ regions, branches, field }), renderSubmitButton(button, 'mb-4'), jsx(Footnote, { link: link })] }));
|
|
1032
|
+
});
|
|
1033
|
+
|
|
1034
|
+
const initialFormState$1 = {
|
|
1035
|
+
name: '',
|
|
1036
|
+
phone: '',
|
|
1037
|
+
};
|
|
1038
|
+
const depositValidator = objectValidator({
|
|
1039
|
+
name: nameValidator,
|
|
1040
|
+
phone: phoneValidator,
|
|
1041
|
+
});
|
|
1042
|
+
const ApplicationFormDeposit = JSX((props) => {
|
|
1043
|
+
const { button, link, onSubmit } = props;
|
|
1044
|
+
const handleSubmit = useCallback((formState) => {
|
|
1045
|
+
const { name, phone } = formState;
|
|
1046
|
+
isValidationSuccess(depositValidator(formState)) &&
|
|
1047
|
+
onSubmit({
|
|
1048
|
+
typeForm: 'dpst',
|
|
1049
|
+
name,
|
|
1050
|
+
phone,
|
|
1051
|
+
});
|
|
1052
|
+
}, [onSubmit]);
|
|
1053
|
+
const [, { field, ...formProps }] = useForm(initialFormState$1, handleSubmit);
|
|
1054
|
+
return (jsxs("form", { className: "container", onSubmit: formProps.onSubmit, children: [jsx(Heading, { headingType: "h6", title: "\u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0437\u0430\u044F\u0432\u043A\u0443 \u0438 \u043C\u044B \u043E\u0442\u0432\u0435\u0442\u0438\u043C \u043D\u0430 \u043B\u044E\u0431\u044B\u0435 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u043F\u043E \u0434\u0435\u043F\u043E\u0437\u0438\u0442\u0430\u043C", className: "sm:text-center mb-4" }), jsxs("div", { className: "max-w-[560px] m-auto", children: [jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u0418\u043C\u044F", ...withValidator(field('name'), nameValidator) }), jsx(PhoneInputControl, { className: "shrink-0 w-full mb-3", label: "\u0422\u0435\u043B\u0435\u0444\u043E\u043D", ...withValidator(field('phone'), phoneValidator) })] }), jsxs("div", { className: "flex justify-between flex-col-reverse sm:items-center sm:flex-row max-w-[560px] m-auto", children: [jsx("div", { className: "flex-1 mt-4 sm:mt-0", children: jsx(Footnote, { link: link }) }), renderSubmitButton(button)] })] }));
|
|
1055
|
+
});
|
|
1056
|
+
|
|
1057
|
+
const sourcesComparator = (a, b) => a?.media && b?.media ? a.media - b.media : 0;
|
|
1058
|
+
const ImgAsPicture = JSX(({ className = '', image, imageClassName = '', pathPrefix }) => {
|
|
1059
|
+
const router = useRouter();
|
|
1060
|
+
return (jsxs("picture", { className: className, children: [image?.sources?.length
|
|
1061
|
+
? image.sources
|
|
1062
|
+
.filter((_) => _?.src)
|
|
1063
|
+
.sort(sourcesComparator)
|
|
1064
|
+
.map(({ src, format, media }, index) => (jsx("source", { srcSet: adjustSrc(router, pathPrefix)(src), type: formatToMimeType(format), media: media ? `(max-width: ${media}px)` : '', ...image.size }, `${index}_${src}`)))
|
|
1065
|
+
: null, image?.src
|
|
1066
|
+
? renderImg({ ...image, src: adjustSrc(router, pathPrefix)(image.src) }, imageClassName)
|
|
1067
|
+
: null] }));
|
|
1068
|
+
});
|
|
1069
|
+
const renderImg = (image, imageClassName = '') => (jsx("img", { src: image.src, className: style('object-contain', imageClassName), alt: image.alt || image.title, title: image.title || '', style: {
|
|
1070
|
+
width: image.size?.width ? `${image.size?.width}px` : '100%',
|
|
1071
|
+
height: image.size?.height ? `${image.size?.height}px` : 'auto',
|
|
1072
|
+
}, ...image.size }));
|
|
1073
|
+
const adjustSrc = (router, pathPrefix) => (src) => src && !isURL(src) ? adjustHref(router)(joinPath(pathPrefix, src)) : src;
|
|
1074
|
+
const formatToMimeType = (format) => format ? `image/${String(format)}` : undefined;
|
|
1075
|
+
|
|
1076
|
+
const Img = JSX(({ className = '', image, imageClassName = '', pathPrefix, ...iconProps }) => {
|
|
1077
|
+
if (!image?.src && !image?.icon) {
|
|
1078
|
+
return null;
|
|
1079
|
+
}
|
|
1080
|
+
return image.icon ? (jsx(Icon, { className: className, imageClassName: imageClassName, iconVersion: image?.iconVersion, name: image.icon, ...iconProps })) : (jsx(ImgAsPicture, { className: className, imageClassName: imageClassName, image: image, pathPrefix: pathPrefix }));
|
|
1081
|
+
});
|
|
1082
|
+
|
|
1083
|
+
const renderContacts = () => (jsxs("div", { className: "flex", children: [jsxs("a", { className: "flex items-center text-primary-text no-underline mr-6", href: `tel:8 (800) 200-78-70`, "aria-label": "8 (800) 200-78-70", children: [jsx(Img, { image: { icon: 'PhoneIcon' }, width: "24", height: "24", className: "mr-3" }), jsx("span", { children: "8 (800) 200-78-70" })] }), jsxs("a", { className: "flex items-center text-primary-text no-underline", "aria-label": "ved@rshb.ru", href: `mailto:ved@rshb.ru`, children: [jsx(Img, { image: { icon: 'MailIcon' }, width: "24", height: "24", className: "mr-3" }), jsx("span", { children: "ved@rshb.ru" })] })] }));
|
|
1084
|
+
|
|
1085
|
+
const SVG = JSX(({ className, viewBox, fill = 'none', width, height, paths, ...commonOptions }) => {
|
|
1086
|
+
return (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", className: className, viewBox: viewBox, fill: fill, width: width, height: height, children: paths.map(({ d, fill: pathFill, ...options }, i) => (jsx("path", { d: d, fill: pathFill || 'currentColor', ...commonOptions, ...options }, i))) }));
|
|
1087
|
+
});
|
|
1088
|
+
|
|
1089
|
+
const CHECK_PATHS = [
|
|
1090
|
+
{
|
|
1091
|
+
d: 'M10.207.793a1 1 0 0 1 0 1.414l-6 6a1 1 0 0 1-1.414 0l-2.5-2.5a1 1 0 0 1 1.414-1.414L3.5 6.086 8.793.793a1 1 0 0 1 1.414 0Z',
|
|
1092
|
+
fillRule: 'evenodd',
|
|
1093
|
+
clipRule: 'evenodd',
|
|
1094
|
+
fill: 'white',
|
|
1095
|
+
},
|
|
1096
|
+
];
|
|
1097
|
+
const Checkbox = JSX(({ className, value, text, disabled, isRadio, onChange }) => {
|
|
1098
|
+
const handleChange = useCallback((e) => {
|
|
1099
|
+
if (disabled) {
|
|
1100
|
+
return;
|
|
1101
|
+
}
|
|
1102
|
+
e.preventDefault();
|
|
1103
|
+
onChange && onChange(!value);
|
|
1104
|
+
}, [onChange, disabled, value]);
|
|
1105
|
+
const icon = isRadio ? (jsx("div", { className: "absolute left-1 w-3 h-3 rounded-full bg-primary-main" })) : (jsx(SVG, { paths: CHECK_PATHS, className: "absolute left-1 ml-px block", width: "11", height: "9", fill: "white", viewBox: "0 0 11 9" }));
|
|
1106
|
+
return (jsx("div", { className: className, children: jsxs("label", { className: "flex items-center relative cursor-pointer group/box", onClick: handleChange, children: [jsx("div", { className: style('appearance-none w-5 h-5 border-solid cursor-pointer m-0', isRadio ? 'rounded-full border-2' : checkboxStyle(value), value ? 'border-primary-main' : 'border-gray', disabled ? 'bg-main-disabled' : 'group-hover/box:border-primary-hover'), role: "checkbox", "aria-checked": Boolean(value), "aria-disabled": Boolean(disabled) }), value ? icon : null, text ? (jsx("div", { className: "ml-3", children: jsx(Text, { size: "text-l", font: "font-light", children: text }) })) : null] }) }));
|
|
1107
|
+
});
|
|
1108
|
+
const checkboxStyle = (value) => style('rounded border', value ? 'bg-primary-main' : '');
|
|
1109
|
+
|
|
1110
|
+
const renderQuestionsInterested = (field) => {
|
|
1111
|
+
const textField = field('text');
|
|
1112
|
+
return (jsxs("div", { className: "mb-3 sm:mb-6", children: [jsxs("div", { className: "mb-4 sm:flex sm:items-center sm:gap-6", children: [jsx(Checkbox, { className: "mb-3 sm:mb-0", text: "\u0412\u0430\u043B\u044E\u0442\u043D\u044B\u0439 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C", ...field('currencyControl') }), jsx(Checkbox, { className: "mb-3 sm:mb-0", text: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0440\u043D\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438", ...field('documentaryOperations') }), jsx(Checkbox, { className: "mb-3 sm:mb-0", text: "\u041A\u043E\u043D\u0432\u0435\u0440\u0441\u0438\u043E\u043D\u043D\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438", ...field('conversionOperations') })] }), jsx("textarea", { placeholder: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u0443\u044E\u0449\u0438\u0439 \u0432\u0430\u0441 \u0432\u043E\u043F\u0440\u043E\u0441, \u043C\u0435\u0441\u0442\u043E \u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0431\u0438\u0437\u043D\u0435\u0441\u0430 \u0438 \u0443\u0434\u043E\u0431\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F \u0434\u043B\u044F \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u043D\u043E\u0433\u043E \u0437\u0432\u043E\u043D\u043A\u0430", className: "block w-full resize-y min-h-24 p-4 outline-none border rounded-md border-main-stroke hover:border-primary-hover active:focus:border-primary-text", value: textField.value, onInput: ((e) => textField.onChange && textField.onChange(e.target?.value || '')) })] }));
|
|
1113
|
+
};
|
|
1114
|
+
|
|
1115
|
+
const renderWedDataOrganization = (field) => (jsxs("div", { children: [jsxs("div", { className: "sm:flex sm:justify-between sm:gap-5", children: [jsx("div", { className: "sm:w-1/2", children: jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438", ...withValidator(field('fullName'), defaultValidator) }) }), jsx("div", { className: "sm:w-1/2", children: jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u0424\u0418\u041E", ...withValidator(field('name'), nameValidator) }) })] }), jsxs("div", { className: "sm:flex sm:justify-between sm:gap-5 sm:mb-7", children: [jsx("div", { className: "sm:w-1/2", children: jsx(PhoneInputControl, { className: "shrink-0 w-full mb-3", label: "\u0422\u0435\u043B\u0435\u0444\u043E\u043D", ...withValidator(field('phone'), phoneValidator) }) }), jsx("div", { className: "sm:w-1/2", children: jsx(InputControl, { className: "shrink-0 w-full mb-3", label: "\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430", ...withValidator(field('mail'), defaultValidator) }) })] })] }));
|
|
1116
|
+
|
|
1117
|
+
const initialFormState = {
|
|
1118
|
+
fullName: '',
|
|
1119
|
+
name: '',
|
|
1120
|
+
phone: '',
|
|
1121
|
+
mail: '',
|
|
1122
|
+
currencyControl: false,
|
|
1123
|
+
documentaryOperations: false,
|
|
1124
|
+
conversionOperations: false,
|
|
1125
|
+
text: '',
|
|
1126
|
+
};
|
|
1127
|
+
const webValidator = objectValidator({
|
|
1128
|
+
fullName: defaultValidator,
|
|
1129
|
+
name: nameValidator,
|
|
1130
|
+
phone: phoneValidator,
|
|
1131
|
+
mail: defaultValidator,
|
|
1132
|
+
});
|
|
1133
|
+
const ApplicationFormWed = JSX((props) => {
|
|
1134
|
+
const { button, link, onSubmit } = props;
|
|
1135
|
+
const handleSubmit = useCallback((formState) => {
|
|
1136
|
+
const { fullName, name, phone, mail, currencyControl, documentaryOperations, conversionOperations, text, } = formState;
|
|
1137
|
+
isValidationSuccess(webValidator(formState)) &&
|
|
1138
|
+
onSubmit({
|
|
1139
|
+
typeForm: 'kved',
|
|
1140
|
+
fullName,
|
|
1141
|
+
name,
|
|
1142
|
+
phone,
|
|
1143
|
+
mail,
|
|
1144
|
+
partnerComments: `Валютный контроль=${currencyControl}/Документарные операции=${documentaryOperations}/Конверсионные операции=${conversionOperations}/Доп инф=${text}`,
|
|
1145
|
+
});
|
|
1146
|
+
}, [onSubmit]);
|
|
1147
|
+
const [, { field, ...formProps }] = useForm(initialFormState, handleSubmit);
|
|
1148
|
+
return (jsxs("form", { className: "container", onSubmit: formProps.onSubmit, children: [jsx(Heading, { headingType: "h6", title: "\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438", className: "sm:text-center mb-4" }), renderWedDataOrganization(field), jsx(Heading, { headingType: "h6", title: "\u0418\u043D\u0442\u0435\u0440\u0435\u0441\u0443\u044E\u0449\u0438\u0439 \u0432\u043E\u043F\u0440\u043E\u0441", className: "sm:text-center mb-4" }), renderQuestionsInterested(field), jsxs("div", { className: "flex flex-col border-b border-main-divider mb-5 pb-5 sm:items-center sm:flex-row sm:mb-9 sm:pb-9", children: [renderSubmitButton(button, 'mb-4 sm:mr-5 sm:mb-0'), jsx(Footnote, { link: link })] }), jsx(Heading, { headingType: "h6", title: "\u0418\u043B\u0438 \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043D\u0430\u043C\u0438 \u0443\u0434\u043E\u0431\u043D\u044B\u043C \u0441\u043F\u043E\u0441\u043E\u0431\u043E\u043C", className: "sm:text-center mb-4" }), renderContacts()] }));
|
|
1149
|
+
});
|
|
1150
|
+
|
|
1151
|
+
const ResponseNotification = JSX(({ responseType }) => {
|
|
1152
|
+
const responseOK = responseType === 'OK';
|
|
1153
|
+
const backgroundColor = responseOK ? 'bg-ok' : 'bg-fail';
|
|
1154
|
+
return (jsxs("div", { className: `flex items-center mt-5 p-5 rounded-md ${backgroundColor}`, children: [responseOK ? (jsx(Img, { image: { icon: 'ResponceOKIcon' }, width: "42", height: "42", className: "mr-4" })) : (jsx(Img, { image: { icon: 'ResponceFailIcon' }, width: "37", height: "34", className: "mr-4" })), jsxs("div", { children: [jsx(Heading, { headingType: "h6", title: responseOK ? 'Ваша заявка отправлена' : 'Не удалось отправить заявку', className: "mb-1" }), jsx(Text, { size: "text-l", font: "font-light", color: "text-secondary-text", children: responseOK ? 'Совсем скоро мы с вами свяжемся' : 'Пожалуйста, повторите позднее' })] })] }));
|
|
328
1155
|
});
|
|
329
1156
|
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
const
|
|
1157
|
+
const COMPONENTS_MAP = {
|
|
1158
|
+
credit: (props) => jsx(ApplicationFormCredit, { ...props }),
|
|
1159
|
+
acquiring: (props) => jsx(ApplicationFormAcquiring, { ...props }),
|
|
1160
|
+
'business-card': (props) => jsx(ApplicationFormBusinessCard, { ...props }),
|
|
1161
|
+
deposit: (props) => jsx(ApplicationFormDeposit, { ...props }),
|
|
1162
|
+
wed: (props) => jsx(ApplicationFormWed, { ...props }),
|
|
1163
|
+
};
|
|
1164
|
+
const API = CorporateLeadAPI();
|
|
1165
|
+
const ApplicationForm = JSX((props) => {
|
|
1166
|
+
const { className, title, typeForm = 'credit', button, link, ...rest } = props;
|
|
1167
|
+
const [responseType, setResponseType] = useState('');
|
|
1168
|
+
const handleSubmit = useCallback(async (data) => {
|
|
1169
|
+
const status = (await API.send(data)) ? 'OK' : 'Fail';
|
|
1170
|
+
setResponseType(status);
|
|
1171
|
+
return status;
|
|
1172
|
+
}, []);
|
|
1173
|
+
return (jsx(BlockWrapper, { className: className, defaultPadding: "p-default", ...rest, children: jsxs("div", { className: "container max-w-[978px]", children: [title ? (jsx(Heading, { headingType: "h3", title: title, className: "mb-4 sm:mb-8 sm:text-center" })) : null, COMPONENTS_MAP[typeForm]({ button, link, onSubmit: handleSubmit }), responseType ? jsx(ResponseNotification, { responseType: responseType }) : null] }) }));
|
|
1174
|
+
});
|
|
339
1175
|
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
1176
|
+
const iconBgStyles = {
|
|
1177
|
+
'': 'bg-main-divider group-data-secondary:bg-white/30',
|
|
1178
|
+
primary: 'bg-main-divider',
|
|
1179
|
+
secondary: 'bg-secondary-light',
|
|
1180
|
+
opacity: 'bg-white/30',
|
|
1181
|
+
};
|
|
1182
|
+
const RoundedIcon = JSX(({ className, defaultIconSize = 44, iconBgVersion = 'primary', size, icon, ...rest }) => {
|
|
1183
|
+
const widthAndHeight = String(size?.width || defaultIconSize);
|
|
1184
|
+
return icon ? (jsx("div", { style: {
|
|
1185
|
+
width: `${widthAndHeight}px`,
|
|
1186
|
+
height: `${widthAndHeight}px`,
|
|
1187
|
+
}, className: style('rounded-icon object-fit flex justify-center items-center ', iconBgStyles[iconBgVersion], className), children: jsx(Icon, { ...rest, width: "54%", height: "54%", name: icon }) })) : null;
|
|
352
1188
|
});
|
|
353
1189
|
|
|
354
|
-
const
|
|
1190
|
+
const defaultIconSize = 56;
|
|
1191
|
+
|
|
1192
|
+
const BenefitsBlock = JSX(({ className = '', title, benefitList, ...rest }) => (jsxs(BlockWrapper, { className: className, defaultPadding: "p-default", ...rest, children: [title ? jsx(Heading, { headingType: "h3", as: "h2", className: "text-center", title: title }) : null, benefitList?.length ? (jsx("div", { className: "flex flex-wrap w-full sm:justify-center mt-m gap-xl", role: "list", children: benefitList.map(renderBenefit) })) : null] })));
|
|
1193
|
+
const renderBenefit = (benefit, i) => (jsxs("div", { className: "flex gap-s items-center md:basis-1/2 md:max-w-[400px]", role: "listitem", children: [benefit?.icon?.icon ? (jsx(RoundedIcon, { className: "shrink-0", defaultIconSize: defaultIconSize, iconBgVersion: benefit?.iconBgVersion || '', ...benefit?.icon })) : null, benefit?.icon?.src ? jsx(Img, { className: "shrink-0", image: benefit.icon }) : null, benefit?.label ? (jsxs("div", { className: "sm:h-full", children: [jsx(Heading, { headingType: "h6", children: benefit.label }), renderDescription$3(benefit.description)] })) : null] }, String(i)));
|
|
1194
|
+
const renderDescription$3 = (description) => {
|
|
1195
|
+
const benefitType = description?.benefitType || null;
|
|
1196
|
+
return description && benefitType ? (jsx("div", { className: "mt-2 text-l font-light text-secondary-text group-data-secondary:text-white/80", children: benefitType === 'list'
|
|
1197
|
+
? renderListBenefit(description)
|
|
1198
|
+
: renderTextBenefit(description) })) : null;
|
|
1199
|
+
};
|
|
1200
|
+
const renderTextBenefit = (description) => description?.name || null;
|
|
1201
|
+
const renderListBenefit = (description) => {
|
|
1202
|
+
const listStyleType = description?.bullets ? 'list-disc pl-6' : '';
|
|
1203
|
+
return description?.items && description.items.length > 0 ? (jsx("ul", { className: listStyleType, children: description.items.map((_, i) => (jsx("li", { children: _ }, `benefitListItem-${i}`))) })) : null;
|
|
1204
|
+
};
|
|
355
1205
|
|
|
356
1206
|
const headlineVersionStyles = {
|
|
357
1207
|
XXL: {
|
|
@@ -548,257 +1398,50 @@
|
|
|
548
1398
|
scrollBy(containerRef.current)(itemCount, 1);
|
|
549
1399
|
}
|
|
550
1400
|
}, [itemCount, isCyclic, canScrollRight]);
|
|
551
|
-
return [
|
|
552
|
-
containerRef,
|
|
553
|
-
{
|
|
554
|
-
scrollLeft,
|
|
555
|
-
scrollRight,
|
|
556
|
-
canScrollLeft: isCyclic || canScrollLeft,
|
|
557
|
-
canScrollRight: isCyclic || canScrollRight,
|
|
558
|
-
visibleIndicesRange: [minIndex, maxIndex],
|
|
559
|
-
handleVisibleIndicesChange,
|
|
560
|
-
},
|
|
561
|
-
];
|
|
562
|
-
};
|
|
563
|
-
|
|
564
|
-
const DEFAULT_GAP = 14;
|
|
565
|
-
/*
|
|
566
|
-
Horizontal padding used on a container above SwipeListControl.
|
|
567
|
-
Same value used on a SwipeListControlChildren container to compensate it
|
|
568
|
-
and get rid of a clipping effect caused by overflow: hidden.
|
|
569
|
-
*/
|
|
570
|
-
const DEFAULT_PADDING = 16;
|
|
571
|
-
const SwipeListControl = JSX(({ className, version, gap = DEFAULT_GAP, padding = DEFAULT_PADDING, showDots = true, minHeight, children, onVisibleIndicesChange, listType = 'horizontal-list', }) => {
|
|
572
|
-
const itemCount = Array.isArray(children) ? children.length : 0;
|
|
573
|
-
const [containerRef, scroll] = useSwipeListScroll({
|
|
574
|
-
itemCount,
|
|
575
|
-
onVisibleIndicesChange,
|
|
576
|
-
});
|
|
577
|
-
const [activeIndex] = scroll.visibleIndicesRange;
|
|
578
|
-
return (jsxs("div", { className: style(className, listType === 'vertical-list' ? 'relative h-full' : ''), children: [jsx(SwipeListContainer, { containerRef: containerRef, activeIndex: activeIndex, visibleItemCount: 1, gap: gap, padding: padding, onVisibleIndicesChange: scroll.handleVisibleIndicesChange, listType: listType, minHeight: minHeight, children: children }), showDots ? (jsx(SwipeListControlDots, { containerRef: containerRef, activeIndex: activeIndex, dotCount: itemCount, listType: listType, version: version })) : null] }));
|
|
579
|
-
});
|
|
580
|
-
|
|
581
|
-
function useRouter() {
|
|
582
|
-
return useRouter._impl();
|
|
583
|
-
}
|
|
584
|
-
useRouter._impl = () => ({
|
|
585
|
-
href: globalThis.location?.href || '/',
|
|
586
|
-
pathname: globalThis.location?.pathname || '/',
|
|
587
|
-
query: {},
|
|
588
|
-
push: () => {
|
|
589
|
-
// Do nothing
|
|
590
|
-
},
|
|
591
|
-
replace: () => {
|
|
592
|
-
// Do nothing
|
|
593
|
-
},
|
|
594
|
-
back: () => {
|
|
595
|
-
// Do nothing
|
|
596
|
-
},
|
|
597
|
-
});
|
|
598
|
-
useRouter.setup = (impl) => {
|
|
599
|
-
useRouter._impl = impl;
|
|
600
|
-
};
|
|
601
|
-
|
|
602
|
-
const dirname = (path) => path?.split('/').slice(0, -1).join('/');
|
|
603
|
-
|
|
604
|
-
const isURL = (href) => Boolean(href?.includes(':'));
|
|
605
|
-
const isLocalURL = (href, target) => Boolean(href && !isURL(href) && (!target || target === '_self'));
|
|
606
|
-
const isHash = (href) => Boolean(href?.startsWith('#'));
|
|
607
|
-
const withoutQuery = (href) => (href || '').replace(/\?.*/, '').replace(/\/$/, '');
|
|
608
|
-
const joinPath = (...path) => path.filter(Boolean).join('/').replace(/\/+/g, '/');
|
|
609
|
-
|
|
610
|
-
var url = /*#__PURE__*/Object.freeze({
|
|
611
|
-
__proto__: null,
|
|
612
|
-
isURL: isURL,
|
|
613
|
-
isLocalURL: isLocalURL,
|
|
614
|
-
isHash: isHash,
|
|
615
|
-
withoutQuery: withoutQuery,
|
|
616
|
-
joinPath: joinPath
|
|
617
|
-
});
|
|
618
|
-
|
|
619
|
-
const adjustHref = (router) => (href, basePath = projectSettings.BASE_PATH) => {
|
|
620
|
-
if (!href || isURL(href) || hasPrefix(href, projectSettings.CDN)) {
|
|
621
|
-
return href;
|
|
622
|
-
}
|
|
623
|
-
const isRelativeToBase = href.startsWith('/');
|
|
624
|
-
return joinPath(hasPrefix(href, basePath) ? '' : basePath, isRelativeToBase ? '/' : dirname(router.pathname), href);
|
|
625
|
-
};
|
|
626
|
-
const hasPrefix = (href, prefix) => prefix && href && href.startsWith(prefix);
|
|
627
|
-
|
|
628
|
-
const svgUseStyleMap = {
|
|
629
|
-
normal: '',
|
|
630
|
-
color: 'text-primary-main',
|
|
631
|
-
black: 'text-black',
|
|
632
|
-
white: 'text-black',
|
|
633
|
-
};
|
|
634
|
-
const Icon = JSX(({ className = '', imageClassName = '', name = '', alt = `Иконка ${name}`, title = alt, iconVersion = 'color', ...imgProps }) => {
|
|
635
|
-
const router = useRouter();
|
|
636
|
-
const href = adjustHref(router)(joinPath(projectSettings.CDN, '/icons', `${name}.svg`));
|
|
637
|
-
if (iconVersion !== 'normal') {
|
|
638
|
-
return (jsx(Background, { className: className, children: jsxs("svg", { className: style(getSvgSize(imgProps.width), svgUseStyleMap[iconVersion], iconVersion === 'white' ? 'invert' : '', imageClassName), ...imgProps, "aria-hidden": "true", children: [title ? jsx("title", { children: title }) : null, alt ? jsx("desc", { children: alt }) : null, jsx("use", { href: `${href}#icon`, xlinkHref: `${href}#icon` })] }) }));
|
|
639
|
-
}
|
|
640
|
-
if (!className.includes('h-')) {
|
|
641
|
-
imgProps['style'] = { height: `${imgProps.height}px` };
|
|
642
|
-
}
|
|
643
|
-
return (jsx("img", { className: className, src: href, alt: alt, title: title, "aria-hidden": "true", ...imgProps }));
|
|
644
|
-
});
|
|
645
|
-
const getSvgSize = (width) => (width ? '' : 'w-full h-full');
|
|
646
|
-
const Background = JSX(({ className, children }) => className ? jsx("div", { className: className, children: children }) : children);
|
|
647
|
-
|
|
648
|
-
const sourcesComparator = (a, b) => a?.media && b?.media ? a.media - b.media : 0;
|
|
649
|
-
const ImgAsPicture = JSX(({ className = '', image, imageClassName = '', pathPrefix }) => {
|
|
650
|
-
const router = useRouter();
|
|
651
|
-
return (jsxs("picture", { className: className, children: [image?.sources?.length
|
|
652
|
-
? image.sources
|
|
653
|
-
.filter((_) => _?.src)
|
|
654
|
-
.sort(sourcesComparator)
|
|
655
|
-
.map(({ src, format, media }, index) => (jsx("source", { srcSet: adjustSrc(router, pathPrefix)(src), type: formatToMimeType(format), media: media ? `(max-width: ${media}px)` : '', ...image.size }, `${index}_${src}`)))
|
|
656
|
-
: null, image?.src
|
|
657
|
-
? renderImg({ ...image, src: adjustSrc(router, pathPrefix)(image.src) }, imageClassName)
|
|
658
|
-
: null] }));
|
|
659
|
-
});
|
|
660
|
-
const renderImg = (image, imageClassName = '') => (jsx("img", { src: image.src, className: style('object-contain', imageClassName), alt: image.alt || image.title, title: image.title || '', style: {
|
|
661
|
-
width: image.size?.width ? `${image.size?.width}px` : '100%',
|
|
662
|
-
height: image.size?.height ? `${image.size?.height}px` : 'auto',
|
|
663
|
-
}, ...image.size }));
|
|
664
|
-
const adjustSrc = (router, pathPrefix) => (src) => src && !isURL(src) ? adjustHref(router)(joinPath(pathPrefix, src)) : src;
|
|
665
|
-
const formatToMimeType = (format) => format ? `image/${String(format)}` : undefined;
|
|
666
|
-
|
|
667
|
-
const Img = JSX(({ className = '', image, imageClassName = '', pathPrefix, ...iconProps }) => {
|
|
668
|
-
if (!image?.src && !image?.icon) {
|
|
669
|
-
return null;
|
|
670
|
-
}
|
|
671
|
-
return image.icon ? (jsx(Icon, { className: className, imageClassName: imageClassName, iconVersion: image?.iconVersion, name: image.icon, ...iconProps })) : (jsx(ImgAsPicture, { className: className, imageClassName: imageClassName, image: image, pathPrefix: pathPrefix }));
|
|
672
|
-
});
|
|
673
|
-
|
|
674
|
-
const Text = JSX(({ children, ...styleProps }) => (jsx("span", { className: style('font-sans', Object.values(styleProps)), children: children })));
|
|
675
|
-
|
|
676
|
-
const bonusBenefitAlign = 'text-left';
|
|
677
|
-
|
|
678
|
-
const bonusBenefitStyles = 'justify-between p-4 h-full border border-gray';
|
|
679
|
-
|
|
680
|
-
const renderBonusBenefit = ({ icon, title, description }, i) => (jsxs("div", { className: style('flex flex-col', bonusBenefitStyles, !description && !title ? 'justify-center' : ''), children: [title ? (jsx(Text, { size: "text-h6", font: "font-normal", align: bonusBenefitAlign, children: title })) : null, icon ? jsx(Img, { image: icon, height: "180", className: "w-auto" }) : null, description ? (jsx(Text, { size: "text-h6", font: "font-normal", align: bonusBenefitAlign, children: description })) : null] }, String(i)));
|
|
681
|
-
|
|
682
|
-
const renderBonusBenefits = (bonusBenefits, columnsCount, cardTextAlign) => (jsx(SwipeListControl, { children: bonusBenefits.map((_, i) => renderBonusBenefit({ ..._ }, i)) }));
|
|
683
|
-
|
|
684
|
-
const BonusBenefitsBlock = JSX(({ bonusBenefits, cardTextAlign = 'center', className = '', columnsCount = '4', subtitle, title, ...rest }) => (jsxs(BlockWrapper, { className: style('p-default', className), defaultPadding: "p-default", ...rest, children: [jsx(Headline, { className: "mb-4 sm:mb-8", isPadding: false, title: title, description: subtitle, headlineVersion: "M" }), bonusBenefits?.length
|
|
685
|
-
? renderBonusBenefits(bonusBenefits)
|
|
686
|
-
: null] })));
|
|
687
|
-
|
|
688
|
-
const useDialog = (id = '') => ({
|
|
689
|
-
open: (message) => defaultEventBus.fire('dialog', { type: 'open', id, message }),
|
|
690
|
-
close: () => defaultEventBus.fire('dialog', { type: 'close' }),
|
|
691
|
-
});
|
|
692
|
-
|
|
693
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
694
|
-
const handlerDecorator = (handler, targetContent) => {
|
|
695
|
-
return handlerDecorator._impl(handler, targetContent);
|
|
696
|
-
};
|
|
697
|
-
handlerDecorator._impl = (handler) => handler;
|
|
698
|
-
handlerDecorator.setup = (impl) => {
|
|
699
|
-
handlerDecorator._impl = impl;
|
|
700
|
-
};
|
|
701
|
-
|
|
702
|
-
function useLink(params = {}) {
|
|
703
|
-
const { isRemote, basePath } = params;
|
|
704
|
-
const router = useRouter();
|
|
705
|
-
const { close } = useDialog();
|
|
706
|
-
return (props) => ({
|
|
707
|
-
...props,
|
|
708
|
-
href: isRemote && !basePath ? props.href : adjustHref(router)(props.href, basePath),
|
|
709
|
-
'aria-label': props.text,
|
|
710
|
-
onClick: handlerDecorator(handleHref(props), props),
|
|
711
|
-
});
|
|
712
|
-
function handleHref({ href, target, onClick }) {
|
|
713
|
-
return (ev) => {
|
|
714
|
-
onClick && onClick(ev);
|
|
715
|
-
if (!href || isRemote || !isLocalURL(href, target)) {
|
|
716
|
-
// Default routing
|
|
717
|
-
return;
|
|
718
|
-
}
|
|
719
|
-
close();
|
|
720
|
-
// Client routing
|
|
721
|
-
ev?.preventDefault();
|
|
722
|
-
router.push(href);
|
|
723
|
-
};
|
|
724
|
-
}
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
const buttonStyleMap = {
|
|
728
|
-
primary: 'text-white bg-primary-main hover:bg-primary-hover active:bg-primary-active',
|
|
729
|
-
secondary: 'text-primary-main bg-main-divider hover:text-white hover:bg-primary-hover active:bg-primary-active',
|
|
730
|
-
white: 'text-primary-main bg-white hover:text-white hover:bg-primary-hover active:bg-white active:text-primary-main',
|
|
731
|
-
link: '',
|
|
732
|
-
transparent: '',
|
|
733
|
-
gray: 'text-primary-main bg-main-divider hover:text-white hover:bg-primary-hover active:bg-primary-active',
|
|
734
|
-
'': '',
|
|
735
|
-
};
|
|
736
|
-
const DisabledStyle = 'bg-main-divider text-main-disabled';
|
|
737
|
-
const buttonDisabledStyleMap = {
|
|
738
|
-
primary: DisabledStyle,
|
|
739
|
-
secondary: DisabledStyle,
|
|
740
|
-
white: DisabledStyle,
|
|
741
|
-
link: '',
|
|
742
|
-
transparent: '',
|
|
743
|
-
gray: DisabledStyle,
|
|
744
|
-
'': '',
|
|
745
|
-
};
|
|
746
|
-
const buttonStyle = 'text-center font-sans select-none';
|
|
747
|
-
const iconStyleMap = {
|
|
748
|
-
primary: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
749
|
-
secondary: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
750
|
-
white: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
751
|
-
link: '',
|
|
752
|
-
transparent: '',
|
|
753
|
-
gray: 'group-hover/btn:brightness-0 group-hover/btn:invert',
|
|
754
|
-
'': '',
|
|
1401
|
+
return [
|
|
1402
|
+
containerRef,
|
|
1403
|
+
{
|
|
1404
|
+
scrollLeft,
|
|
1405
|
+
scrollRight,
|
|
1406
|
+
canScrollLeft: isCyclic || canScrollLeft,
|
|
1407
|
+
canScrollRight: isCyclic || canScrollRight,
|
|
1408
|
+
visibleIndicesRange: [minIndex, maxIndex],
|
|
1409
|
+
handleVisibleIndicesChange,
|
|
1410
|
+
},
|
|
1411
|
+
];
|
|
755
1412
|
};
|
|
756
1413
|
|
|
757
|
-
const
|
|
758
|
-
|
|
759
|
-
|
|
1414
|
+
const DEFAULT_GAP = 14;
|
|
1415
|
+
/*
|
|
1416
|
+
Horizontal padding used on a container above SwipeListControl.
|
|
1417
|
+
Same value used on a SwipeListControlChildren container to compensate it
|
|
1418
|
+
and get rid of a clipping effect caused by overflow: hidden.
|
|
1419
|
+
*/
|
|
1420
|
+
const DEFAULT_PADDING = 16;
|
|
1421
|
+
const SwipeListControl = JSX(({ className, version, gap = DEFAULT_GAP, padding = DEFAULT_PADDING, showDots = true, minHeight, children, onVisibleIndicesChange, listType = 'horizontal-list', }) => {
|
|
1422
|
+
const itemCount = Array.isArray(children) ? children.length : 0;
|
|
1423
|
+
const [containerRef, scroll] = useSwipeListScroll({
|
|
1424
|
+
itemCount,
|
|
1425
|
+
onVisibleIndicesChange,
|
|
1426
|
+
});
|
|
1427
|
+
const [activeIndex] = scroll.visibleIndicesRange;
|
|
1428
|
+
return (jsxs("div", { className: style(className, listType === 'vertical-list' ? 'relative h-full' : ''), children: [jsx(SwipeListContainer, { containerRef: containerRef, activeIndex: activeIndex, visibleItemCount: 1, gap: gap, padding: padding, onVisibleIndicesChange: scroll.handleVisibleIndicesChange, listType: listType, minHeight: minHeight, children: children }), showDots ? (jsx(SwipeListControlDots, { containerRef: containerRef, activeIndex: activeIndex, dotCount: itemCount, listType: listType, version: version })) : null] }));
|
|
760
1429
|
});
|
|
761
|
-
const getButtonStyle = (props) => {
|
|
762
|
-
const { version, aboveText, rounded } = props;
|
|
763
|
-
if (version === 'link') {
|
|
764
|
-
return '';
|
|
765
|
-
}
|
|
766
|
-
const withTextStyle = `${aboveText ? 'py-2.5 px-9' : 'py-4 px-9'}`;
|
|
767
|
-
return [
|
|
768
|
-
'group/btn items-center justify-center',
|
|
769
|
-
isWithText(props) ? withTextStyle : 'h-12 w-12',
|
|
770
|
-
rounded ? 'rounded-full' : '',
|
|
771
|
-
].join(' ');
|
|
772
|
-
};
|
|
773
|
-
const isWithText = ({ text, aboveText, appendLeft }) => Boolean(text || aboveText || !appendLeft);
|
|
774
1430
|
|
|
775
|
-
const
|
|
776
|
-
'inline-block',
|
|
777
|
-
buttonStyle,
|
|
778
|
-
version ? buttonDisabledStyleMap[version] : '',
|
|
779
|
-
rounded ? 'rounded-full' : 'rounded-md',
|
|
780
|
-
className,
|
|
781
|
-
].join(' ');
|
|
1431
|
+
const bonusBenefitAlign = 'text-left';
|
|
782
1432
|
|
|
783
|
-
const
|
|
784
|
-
buttonStyle,
|
|
785
|
-
'border border-transparent inline-block cursor-pointer no-underline focus:border-primary-text focus:border h-fit',
|
|
786
|
-
version ? buttonStyleMap[version] : '',
|
|
787
|
-
rounded ? 'rounded-full' : 'rounded-md',
|
|
788
|
-
className,
|
|
789
|
-
].join(' ');
|
|
1433
|
+
const bonusBenefitStyles = 'justify-between p-4 h-full border border-gray';
|
|
790
1434
|
|
|
791
|
-
const
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
const DisabledButton = JSX(({ className, ariaLabel, version, rounded, children }) => (jsx("div", { role: "button", "aria-disabled": "true", "aria-label": ariaLabel, tabIndex: -1, className: getDisabledButtonClasses({ className, rounded, version }), children: children })));
|
|
1435
|
+
const renderBonusBenefit = ({ icon, title, description }, i) => (jsxs("div", { className: style('flex flex-col', bonusBenefitStyles, !description && !title ? 'justify-center' : ''), children: [title ? (jsx(Text, { size: "text-h6", font: "font-normal", align: bonusBenefitAlign, children: title })) : null, icon ? jsx(Img, { image: icon, height: "180", className: "w-auto" }) : null, description ? (jsx(Text, { size: "text-h6", font: "font-normal", align: bonusBenefitAlign, children: description })) : null] }, String(i)));
|
|
1436
|
+
|
|
1437
|
+
const renderBonusBenefits = (bonusBenefits, _columnsCount, _cardTextAlign) => (jsx(SwipeListControl, { children: bonusBenefits.map((_, i) => renderBonusBenefit({ ..._ }, i)) }));
|
|
1438
|
+
|
|
1439
|
+
const BonusBenefitsBlock = JSX(({ bonusBenefits, cardTextAlign = 'center', className = '', columnsCount = '4', subtitle, title, ...rest }) => (jsxs(BlockWrapper, { className: style('p-default', className), defaultPadding: "p-default", ...rest, children: [jsx(Headline, { className: "mb-4 sm:mb-8", isPadding: false, title: title, description: subtitle, headlineVersion: "M" }), bonusBenefits?.length
|
|
1440
|
+
? renderBonusBenefits(bonusBenefits)
|
|
1441
|
+
: null] })));
|
|
799
1442
|
|
|
800
|
-
const renderButtonsSection = (buttons, { className, buttonClassName, isVertical } = {}) => buttons?.length && buttons.some((_) => _?.text || _?.icon?.icon) ? (jsx("div", { className: style('flex', isVertical ? 'flex-col gap-xs justify-items-stretch' : 'flex-wrap gap-s', className), children: buttons.map(renderButton(buttonClassName)) })) : null;
|
|
801
|
-
const renderButton = (buttonClassName = '') => (button, index) => {
|
|
1443
|
+
const renderButtonsSection = (buttons, { className, buttonClassName, isVertical } = {}) => buttons?.length && buttons.some((_) => _?.text || _?.icon?.icon) ? (jsx("div", { className: style('flex', isVertical ? 'flex-col gap-xs justify-items-stretch' : 'flex-wrap gap-s', className), children: buttons.map(renderButton$1(buttonClassName)) })) : null;
|
|
1444
|
+
const renderButton$1 = (buttonClassName = '') => (button, index) => {
|
|
802
1445
|
const { text, icon, iconRight, version, ...rest } = button || {};
|
|
803
1446
|
const iconVersionDefault = version === 'secondary' ? 'color' : 'white';
|
|
804
1447
|
const iconVersion = icon?.iconVersion ? icon?.iconVersion : iconVersionDefault;
|
|
@@ -809,86 +1452,6 @@
|
|
|
809
1452
|
|
|
810
1453
|
const ButtonsBlock = JSX(({ buttons, className, ...rest }) => (jsx(BlockWrapper, { className: style('!bg-transparent', className), defaultPadding: "p-0", ...rest, children: renderButtonsSection(buttons) })));
|
|
811
1454
|
|
|
812
|
-
const identity = (_) => _;
|
|
813
|
-
|
|
814
|
-
const useForm = (initialState, onSubmit) => {
|
|
815
|
-
const [formState, setFormState] = useState(initialState);
|
|
816
|
-
const [isDirtyForm, setDirtyForm] = useState(false);
|
|
817
|
-
const [dirtyFieldsMap, setDirtyFieldsMap] = useState({});
|
|
818
|
-
const handlersMap = useRef({});
|
|
819
|
-
const field = useCallback((fieldName, options) => {
|
|
820
|
-
const { parse = identity, format = identity } = options || {};
|
|
821
|
-
if (!handlersMap.current) {
|
|
822
|
-
handlersMap.current = {};
|
|
823
|
-
}
|
|
824
|
-
handlersMap.current[fieldName] ||= (value) => {
|
|
825
|
-
setFormState((prev) => ({ ...prev, [fieldName]: parse(value) }));
|
|
826
|
-
setDirtyFieldsMap((prev) => ({ ...prev, [fieldName]: true }));
|
|
827
|
-
};
|
|
828
|
-
return {
|
|
829
|
-
value: format(formState[fieldName]),
|
|
830
|
-
isDirty: isDirtyForm || dirtyFieldsMap[fieldName],
|
|
831
|
-
onChange: handlersMap.current[fieldName],
|
|
832
|
-
};
|
|
833
|
-
}, [formState, isDirtyForm, dirtyFieldsMap]);
|
|
834
|
-
const reset = useCallback(() => {
|
|
835
|
-
setFormState(initialState);
|
|
836
|
-
setDirtyForm(false);
|
|
837
|
-
setDirtyFieldsMap({});
|
|
838
|
-
}, [initialState]);
|
|
839
|
-
const handleSubmit = useCallback((e) => {
|
|
840
|
-
e.preventDefault();
|
|
841
|
-
setDirtyForm(true);
|
|
842
|
-
onSubmit && onSubmit(formState);
|
|
843
|
-
}, [onSubmit, formState]);
|
|
844
|
-
return [
|
|
845
|
-
formState,
|
|
846
|
-
{
|
|
847
|
-
isDirty: isDirtyForm || Object.values(dirtyFieldsMap).some(Boolean),
|
|
848
|
-
field,
|
|
849
|
-
reset,
|
|
850
|
-
onSubmit: handleSubmit,
|
|
851
|
-
},
|
|
852
|
-
];
|
|
853
|
-
};
|
|
854
|
-
|
|
855
|
-
const useNormalizedInput = (props, { normalize, format }) => {
|
|
856
|
-
const { value, onFocus, onBlur, onChange } = props;
|
|
857
|
-
const [isFocused, setIsFocused] = useState(false);
|
|
858
|
-
const handleFocus = useCallback((e) => {
|
|
859
|
-
setIsFocused(true);
|
|
860
|
-
onFocus && onFocus(e);
|
|
861
|
-
}, []);
|
|
862
|
-
const handleBlur = useCallback(() => {
|
|
863
|
-
setIsFocused(false);
|
|
864
|
-
onChange && onChange(normalize(value));
|
|
865
|
-
onBlur && onBlur();
|
|
866
|
-
}, [onChange, value]);
|
|
867
|
-
return {
|
|
868
|
-
value: (isFocused || !format ? value : format(value)),
|
|
869
|
-
onFocus: handleFocus,
|
|
870
|
-
onBlur: handleBlur,
|
|
871
|
-
};
|
|
872
|
-
};
|
|
873
|
-
|
|
874
|
-
const clamp = (value, min, max) => Math.max(min, Math.min(value, max));
|
|
875
|
-
|
|
876
|
-
const toLocalNumberFormat = (fractionDigits = 0) => (_ = 0) => new Intl.NumberFormat('ru-RU', {
|
|
877
|
-
minimumFractionDigits: 0,
|
|
878
|
-
maximumFractionDigits: fractionDigits,
|
|
879
|
-
}).format(Number(_) || 0);
|
|
880
|
-
|
|
881
|
-
const Input = JSX(({ key, className = '', inputClassName = '', id, name, type = 'text', label, placeholder, value = '', valid = true, children, onChange, onFocus, onBlur, pattern, }) => {
|
|
882
|
-
const handleChange = useCallback((e) => {
|
|
883
|
-
onChange && onChange(e.target?.value || '');
|
|
884
|
-
}, [onChange]);
|
|
885
|
-
const paddingStyle = children ? 'pr-8' : '';
|
|
886
|
-
const validStyle = valid
|
|
887
|
-
? 'border-gray hover:border-primary-hover active:border-primary-text focus:border-primary-text'
|
|
888
|
-
: 'border-error';
|
|
889
|
-
return (jsxs("div", { className: style('relative', className), children: [jsxs("label", { children: [label ? (jsx("div", { className: "mb-2", children: jsx(Text, { size: "text-m", font: "font-light", children: label }) })) : null, jsx("input", { className: style('w-full border rounded-md text-primary-text outline-none p-4', paddingStyle, validStyle, inputClassName), id: id, name: name || id, placeholder: placeholder, type: type, value: value, onInput: handleChange, onFocus: onFocus, onBlur: onBlur, pattern: pattern }, key)] }), children] }));
|
|
890
|
-
});
|
|
891
|
-
|
|
892
1455
|
const NumberInput = JSX((props) => {
|
|
893
1456
|
const { onChange, min, max, defaultValue = '0', fractionDigits = 0, ...inputProps } = props;
|
|
894
1457
|
const normalizedProps = useNormalizedInput(props, {
|
|
@@ -1137,9 +1700,12 @@
|
|
|
1137
1700
|
label: 'Youtube',
|
|
1138
1701
|
},
|
|
1139
1702
|
];
|
|
1703
|
+
|
|
1704
|
+
const findIconByHref = (href) => ICONS_MAP.find(({ origins }) => origins?.some((_) => href?.includes(_))) || {};
|
|
1705
|
+
|
|
1140
1706
|
const MediaButton = JSX(({ buttonSize = 'default', rounded = false, icon, ...rest }) => {
|
|
1141
1707
|
const { href, version, text = '' } = rest;
|
|
1142
|
-
const { iconMapped, label } =
|
|
1708
|
+
const { iconMapped, label } = findIconByHref(href);
|
|
1143
1709
|
const iconCustom = getFilteredIcon(icon) ?? iconMapped;
|
|
1144
1710
|
return (jsx(Button, { className: style(rounded ? 'rounded-full' : 'rounded-md', 'border border-solid hover:border-transparent', 'group-data-primary:border-main-divider', 'hover:bg-primary-main hover:text-black', 'group-data-secondary:bg-white border-main-divider group-data-secondary:hover:bg-secondary-hover', 'group-data-gray:border-green', buttonStylesWithText(text, buttonSize)), "aria-label": label, rel: "noopener noreferrer", target: "_blank", text: text, version: version, ...rest, children: iconCustom && !text ? (jsx(Img, { image: iconCustom, imageClassName: "group-hover/media:text-white", width: "24", height: "24" })) : null }));
|
|
1145
1711
|
});
|
|
@@ -1178,19 +1744,17 @@
|
|
|
1178
1744
|
|
|
1179
1745
|
const getPaddingStyle = (isHighlighting = false) => isHighlighting ? 'p-default mt-6' : 'mt-6 p-default'; // Хак для мобильной версии т.к. контракт должен быть идентичный
|
|
1180
1746
|
|
|
1181
|
-
const descriptionSize = 'text-l';
|
|
1182
|
-
|
|
1183
1747
|
const renderCardInfo = (cell, i) => {
|
|
1184
1748
|
const { title, description, buttons } = cell;
|
|
1185
|
-
return (jsxs("div", { className: "py-5 border-b border-main-divider", children: [title ? (jsx("div", { className: "opacity-80", children: jsx(Text, { size: "text-m", color: "text-secondary-text", children: title }) })) : null, description ? (jsx("div", { className: "mt-1", children: jsx(Text, { size:
|
|
1749
|
+
return (jsxs("div", { className: "py-5 border-b border-main-divider", children: [title ? (jsx("div", { className: "opacity-80", children: jsx(Text, { size: "text-m", color: "text-secondary-text", children: title }) })) : null, description ? (jsx("div", { className: "mt-1", children: jsx(Text, { size: "text-xl", color: "text-primary-text", children: description }) })) : null, buttons?.length ? (jsx("div", { className: "text-primary-main", children: renderButtonsSection(buttons) })) : null] }, String(i)));
|
|
1186
1750
|
};
|
|
1187
1751
|
|
|
1188
1752
|
const VISIBLE_CELLS_COUNT = 1;
|
|
1189
|
-
const CarouselTariffsCard = JSX(({ className = '', title, icon, isHighlighting = false, button, cardCells = [], ...rest }) => {
|
|
1753
|
+
const CarouselTariffsCard = JSX(({ className = '', title, align = 'text-center', icon, isHighlighting = false, button, cardCells = [], ...rest }) => {
|
|
1190
1754
|
const cellsNode = cardCells.map(renderCardInfo);
|
|
1191
1755
|
const visibleCells = cellsNode.slice(0, VISIBLE_CELLS_COUNT);
|
|
1192
1756
|
const hiddenCells = cellsNode.slice(VISIBLE_CELLS_COUNT);
|
|
1193
|
-
return (jsxs(BlockWrapper, { className: style('relative border border-gray flex flex-col', className), defaultPadding: getPaddingStyle(isHighlighting), ...rest, children: [isHighlighting ? renderHitIcon() : null, renderIconBlock(icon), title ? jsx(Heading, { className:
|
|
1757
|
+
return (jsxs(BlockWrapper, { className: style('relative border border-gray flex flex-col', className), defaultPadding: getPaddingStyle(isHighlighting), ...rest, children: [isHighlighting ? renderHitIcon() : null, renderIconBlock(icon), title ? (jsx(Heading, { className: style('pt-xs', align), headingType: "h5", title: title })) : null, button ? jsx(Button, { className: "w-full mt-4", ...button }) : null, cardCells.length ? (jsx(Foldable, { renderFoldableSection: ({ isUnfolded }) => (jsxs("div", { children: [visibleCells, jsx(FoldableSection, { isUnfolded: isUnfolded, children: hiddenCells })] })), renderFoldButton: cardCells.length > 1 ? renderFoldButton$1 : null })) : null] }));
|
|
1194
1758
|
});
|
|
1195
1759
|
const renderIconBlock = (icon) => (jsx("div", { className: "w-[267px] min-w-[267px] self-center", children: icon?.src || icon?.icon ? jsx(Img, { image: icon }) : null }));
|
|
1196
1760
|
const renderFoldButton$1 = ({ isUnfolded, onToggle }) => (jsxs("button", { className: "w-full cursor-pointer text-primary-main pt-5 flex justify-between items-center", onClick: onToggle, children: [jsx("div", { children: isUnfolded ? 'Скрыть' : 'Подробнее о тарифе' }), jsx(Icon, { className: "text-primary-text", name: isUnfolded ? 'ArrowUpIcon' : 'ArrowDownIcon', width: "16", height: "16" })] }));
|
|
@@ -1232,16 +1796,16 @@
|
|
|
1232
1796
|
const renderColorOption = (color, i) => (jsx("div", { role: "figure", className: `w-6 h-6 ml-1 sm:ml-3 border border-solid border-main-divider rounded-full ${cardStyleMap[color]}` }, String(i)));
|
|
1233
1797
|
|
|
1234
1798
|
const CarouselProductCard = JSX(({ additionalDescription, align = 'text-center', button = {}, className = '', description, headlineSmallVersion = 'H6', href, icon, isDotted = true, isFullWidth = true, items = [], target, title, version = 'primary', ...rest }) => {
|
|
1235
|
-
return (jsxs(BlockWrapper, { className: style('h-full flex flex-col justify-between min-w-[260px]', 'box-border border-solid border border-gray', align, className), defaultPadding: "p-0", version: version, ...rest, children: [jsxs(LinkWrapper, { className: "p-s", href: href, target: target, children: [renderImage$2(icon), renderCardTitle(headlineSmallVersion, title), renderDescription$
|
|
1799
|
+
return (jsxs(BlockWrapper, { className: style('h-full flex flex-col justify-between min-w-[260px]', 'box-border border-solid border border-gray', align, className), defaultPadding: "p-0", version: version, ...rest, children: [jsxs(LinkWrapper, { className: "p-s", href: href, target: target, children: [renderImage$2(icon), renderCardTitle(headlineSmallVersion, title), renderDescription$2(description, title), renderItems(items, isDotted, version), renderAdditionalDescription(additionalDescription)] }), renderButtonsSection([button], {
|
|
1236
1800
|
className: style('p-s pt-0', isFullWidth ? '' : 'self-center min-w-[158px]'),
|
|
1237
1801
|
isVertical: isFullWidth,
|
|
1238
1802
|
})] }));
|
|
1239
1803
|
});
|
|
1240
1804
|
const renderImage$2 = (image) => (jsxs("div", { className: "flex justify-center", children: [image?.src ? jsx(Img, { className: "mb-5", image: image }) : null, image?.icon ? jsx(Img, { className: `w-8 h-8 min-w-8 mb-5`, image: image }) : null] }));
|
|
1241
1805
|
const renderCardTitle = (headlineSmallVersion, title) => title ? (jsx("div", { children: jsx(Text, { size: HEADLINE_SMALL_VERSION[headlineSmallVersion], children: title }) })) : null;
|
|
1242
|
-
const renderDescription$
|
|
1806
|
+
const renderDescription$2 = (description, title) => description ? (jsx("div", { className: title ? 'mt-2' : '', children: jsx(Paragraph, { size: "text-l", children: description }) })) : null;
|
|
1243
1807
|
const renderAdditionalDescription = (additionalDescription) => additionalDescription ? (jsx("div", { className: "mt-auto", children: jsx(Text, { size: "text-m", font: "font-light", color: "text-secondary-text group-data-secondary:text-white/80", children: additionalDescription }) })) : null;
|
|
1244
|
-
const renderItems = (items, isDotted, version = 'primary') => items?.length ? (jsx(List, { className: style('max-w-[308px] mt-2
|
|
1808
|
+
const renderItems = (items, isDotted, version = 'primary') => items?.length ? (jsx(List, { className: style('max-w-[308px] mt-2', version === 'primary' ? '!text-secondary-text' : ''), items: items.filter((item) => item?.text).map((item) => item.text), isDotted: isDotted, listItemSize: "S" })) : null;
|
|
1245
1809
|
|
|
1246
1810
|
const GRADIENT = 'bg-gradient-to-r from-main-gradient-start to-main-gradient-end';
|
|
1247
1811
|
const DIVIDER_CLASSES = 'border-main-divider border border-t-0 border-x-0';
|
|
@@ -1283,80 +1847,6 @@
|
|
|
1283
1847
|
return orientation === 'horizontal' ? (jsx(SwipeListControl, { onVisibleIndicesChange: handleSlideChange, children: tableColumns })) : (tableColumns);
|
|
1284
1848
|
});
|
|
1285
1849
|
|
|
1286
|
-
const isFilled = (_) => _ !== null && _ !== undefined;
|
|
1287
|
-
|
|
1288
|
-
const defaultCache = new Map();
|
|
1289
|
-
const applyCache = (fetcher, cache = defaultCache) => (key) => {
|
|
1290
|
-
const cachedData = cache.get(key);
|
|
1291
|
-
if (isFilled(cachedData)) {
|
|
1292
|
-
return cachedData;
|
|
1293
|
-
}
|
|
1294
|
-
const data = fetcher(key);
|
|
1295
|
-
if (isFilled(data)) {
|
|
1296
|
-
cache.set(key, Promise.resolve(data));
|
|
1297
|
-
}
|
|
1298
|
-
else {
|
|
1299
|
-
cache.delete(key);
|
|
1300
|
-
}
|
|
1301
|
-
return data;
|
|
1302
|
-
};
|
|
1303
|
-
|
|
1304
|
-
const isSimpleKey = (args) => Boolean(args && Array.isArray(args) && args.length === 1 && typeof args[0] === 'string');
|
|
1305
|
-
function useAsyncData(key, fetcher, { fallback, cache } = {}) {
|
|
1306
|
-
const args = useMemo(() => keyToArgs(key), [key]);
|
|
1307
|
-
const [simpleKey] = isSimpleKey(args) ? args : [];
|
|
1308
|
-
const [data, setData] = useState(undefined);
|
|
1309
|
-
const [error, setError] = useState(undefined);
|
|
1310
|
-
useEffect(() => {
|
|
1311
|
-
const isEmptyKey = !args.some(isFilled);
|
|
1312
|
-
if (isEmptyKey) {
|
|
1313
|
-
return;
|
|
1314
|
-
}
|
|
1315
|
-
(async () => {
|
|
1316
|
-
try {
|
|
1317
|
-
const newData = await (simpleKey
|
|
1318
|
-
? applyCache(fetcher, cache)(simpleKey)
|
|
1319
|
-
: fetcher(...args));
|
|
1320
|
-
setData(newData);
|
|
1321
|
-
setError(undefined);
|
|
1322
|
-
}
|
|
1323
|
-
catch (err) {
|
|
1324
|
-
setData(undefined);
|
|
1325
|
-
setError(err);
|
|
1326
|
-
}
|
|
1327
|
-
})();
|
|
1328
|
-
}, [fetcher, cache, args]);
|
|
1329
|
-
const fallbackData = fallback && simpleKey && fallback[simpleKey];
|
|
1330
|
-
return {
|
|
1331
|
-
data: !data && fallbackData ? fallbackData : data,
|
|
1332
|
-
error,
|
|
1333
|
-
mutate: () => Promise.resolve(undefined),
|
|
1334
|
-
isValidating: false
|
|
1335
|
-
};
|
|
1336
|
-
}
|
|
1337
|
-
function keyToArgs(key) {
|
|
1338
|
-
if (Array.isArray(key)) {
|
|
1339
|
-
return key;
|
|
1340
|
-
}
|
|
1341
|
-
else if (key instanceof Function) {
|
|
1342
|
-
return keyToArgs(key());
|
|
1343
|
-
}
|
|
1344
|
-
else {
|
|
1345
|
-
return [key];
|
|
1346
|
-
}
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
|
-
async function fetchJSONUnsafe(url, options) {
|
|
1350
|
-
const response = await fetch(url, {
|
|
1351
|
-
...options,
|
|
1352
|
-
headers: {
|
|
1353
|
-
...options?.headers,
|
|
1354
|
-
'Content-Type': 'application/json',
|
|
1355
|
-
},
|
|
1356
|
-
});
|
|
1357
|
-
return await response.json();
|
|
1358
|
-
}
|
|
1359
|
-
|
|
1360
1850
|
const EMPTY_VALUE = {};
|
|
1361
1851
|
function useSWRResource(filename, fallback = {}) {
|
|
1362
1852
|
const { data } = useAsyncData(`/wcms-resources/${filename}.json`, fetchJSONUnsafe, {
|
|
@@ -1386,19 +1876,6 @@
|
|
|
1386
1876
|
|
|
1387
1877
|
const getIconName = (isUnfolded) => isUnfolded ? 'ArrowUpSolidIcon' : 'ArrowDownSolidIcon';
|
|
1388
1878
|
|
|
1389
|
-
const labelSize = 'text-l';
|
|
1390
|
-
|
|
1391
|
-
const iconBgStyles = {
|
|
1392
|
-
primary: 'bg-main-divider',
|
|
1393
|
-
secondary: 'bg-white/30',
|
|
1394
|
-
'secondary-light': 'bg-secondary-light',
|
|
1395
|
-
};
|
|
1396
|
-
const RoundedIcon = JSX(({ iconBgVersion = 'primary', size, icon, ...rest }) => {
|
|
1397
|
-
const width = String(size?.width || 24);
|
|
1398
|
-
const height = String(size?.height || 24);
|
|
1399
|
-
return icon ? (jsx("div", { className: style('rounded-icon p-2.5', iconBgStyles[iconBgVersion]), children: jsx(Icon, { ...rest, width: width, height: height, name: icon }) })) : null;
|
|
1400
|
-
});
|
|
1401
|
-
|
|
1402
1879
|
const renderRoundedIcon = (icon, iconBgVersion) => (jsx(RoundedIcon, { ...icon, iconBgVersion: iconBgVersion }));
|
|
1403
1880
|
|
|
1404
1881
|
const rollupIconVersion = 'normal';
|
|
@@ -1429,7 +1906,7 @@
|
|
|
1429
1906
|
})) : (jsx(DefaultFoldButton, { label: label, icon: isUnfolded ? 'ArrowUpIcon' : 'ArrowDownIcon', onClick: onToggle }));
|
|
1430
1907
|
};
|
|
1431
1908
|
const renderPrimaryFoldButton = ({ label, labelIconBgVersion, icon, onToggle, labelIcon, }) => {
|
|
1432
|
-
return (jsxs("button", { className: style('border-none bg-transparent px-0 flex justify-between items-center w-full group/button', labelIcon?.icon ? 'py-2' : 'py-5'), onClick: onToggle, children: [jsxs("div", { className: "flex items-center group-hover/button:text-primary-main", children: [renderRoundedIcon(labelIcon, labelIconBgVersion), label ? (jsx(Text, { size:
|
|
1909
|
+
return (jsxs("button", { className: style('border-none bg-transparent px-0 flex justify-between items-center w-full group/button', labelIcon?.icon ? 'py-2' : 'py-5'), onClick: onToggle, children: [jsxs("div", { className: "flex items-center group-hover/button:text-primary-main gap-3", children: [renderRoundedIcon(labelIcon, labelIconBgVersion), label ? (jsx(Text, { size: "text-h6", font: "font-normal", children: label })) : null] }), icon ? jsx(Icon, { name: icon, iconVersion: rollupIconVersion, width: "24", height: "24" }) : null] }));
|
|
1433
1910
|
};
|
|
1434
1911
|
|
|
1435
1912
|
const Contacts = JSX(({ className = '', items, hasButton }) => (jsxs("div", { className: className, children: [items?.length ? items.map(renderContactsGroup) : null, hasButton ? (jsx(Button, { version: "primary", className: "mb-6 w-full", href: "https://www.rshb.ru/feedback/question/", target: "_blank", ariaLabel: "\u041E\u0431\u0440\u0430\u0442\u043D\u0430\u044F \u0441\u0432\u044F\u0437\u044C", text: "\u041E\u0431\u0440\u0430\u0442\u043D\u0430\u044F \u0441\u0432\u044F\u0437\u044C" })) : null] })));
|
|
@@ -1468,9 +1945,13 @@
|
|
|
1468
1945
|
const Footer = JSX(({ className = '', ...rest }) => {
|
|
1469
1946
|
const fallback = rest.options?.page?.fallback;
|
|
1470
1947
|
const sitemap = useSWRResource(projectSettings.SITEMAP || 'sitemap', fallback);
|
|
1471
|
-
const { relatedEnterprises, contacts, socialMedia, horizontalNavigationTitle } = useSWRResource(projectSettings.FOOTER || 'footer', fallback);
|
|
1472
|
-
return (jsxs(BlockWrapper, { tag: "footer", className: className, defaultPadding: "px-4 py-6", ...rest, children: [jsx("div", { className: "mb-4 pb-5 border-b border-main-divider", children: sitemap.topItems?.map((item, i) => (jsx(RollupItem, { label: item?.text, labelIcon: item?.icon, children: jsx(LinkList, { items: item.items, className: "my-3" }) }, String(i)))) }), jsx(Contacts, { className: "overflow-hidden", items: contacts }), jsx(SocialMedia, { className: "mb-4", media: socialMedia }),
|
|
1948
|
+
const { relatedEnterprises, contacts, socialMedia, mobileApps, horizontalNavigationTitle } = useSWRResource(projectSettings.FOOTER || 'footer', fallback);
|
|
1949
|
+
return (jsxs(BlockWrapper, { tag: "footer", className: className, defaultPadding: "px-4 py-6", ...rest, children: [jsx("div", { className: "mb-4 pb-5 border-b border-main-divider", children: sitemap.topItems?.map((item, i) => (jsx(RollupItem, { label: item?.text, labelIcon: item?.icon, children: jsx(LinkList, { items: item.items, className: "my-3" }) }, String(i)))) }), jsx(Contacts, { className: "overflow-hidden", items: contacts }), jsx(SocialMedia, { className: "mb-4", media: socialMedia }), mobileApps?.map(renderButton), jsx(HorizontalNavigation, { className: "pt-4 pb-7 border-y border-main-divider", title: horizontalNavigationTitle, links: relatedEnterprises }), jsx(TextInformation, {})] }));
|
|
1473
1950
|
});
|
|
1951
|
+
const renderButton = ({ href = '/' }, i) => {
|
|
1952
|
+
const { label } = findIconByHref(href);
|
|
1953
|
+
return (jsx(Button, { className: "w-full mb-4", text: label, version: "secondary", href: href, target: "_blank" }, String(i)));
|
|
1954
|
+
};
|
|
1474
1955
|
|
|
1475
1956
|
const ICON_VERSION_MAP = {
|
|
1476
1957
|
'bg-white': 'color',
|
|
@@ -1579,7 +2060,7 @@
|
|
|
1579
2060
|
const BaseTile = JSX(({ className, defaultPadding, padding, title = '', insetTitle = '', buttons, leftImage, rightImage, imageAlign, backImage, children, }) => (jsxs("div", { className: style('relative flex flex-col gap-lg font-sans overflow-hidden', padding || defaultPadding, className), children: [backImage ? jsx("div", { className: "absolute bottom-0 right-0 z-0", children: backImage }) : null, title ? jsx("div", { className: "relative", children: title }) : null, jsxs("div", { className: "grow relative flex flex-wrap sm:flex-nowrap justify-between items-stretch gap-lg", children: [renderImageContainer(leftImage, { imageAlign }), jsxs("div", { className: style('flex flex-col gap-lg max-w-[600px] xl:max-w-[728px]', leftImage ? '' : 'grow'), children: [insetTitle, jsx("div", { className: "grow", children: children }), buttons] }), renderImageContainer(rightImage, { className: '-order-1 sm:order-1', imageAlign })] })] })));
|
|
1580
2061
|
const renderImageContainer = (image, { className, imageAlign }) => image ? (jsx("div", { className: style('flex-shrink-0', imageAlign && imageAlignmentMap[imageAlign], className), children: image })) : null;
|
|
1581
2062
|
|
|
1582
|
-
const renderDescription$
|
|
2063
|
+
const renderDescription$1 = (description) => description ? (jsx("div", { className: "mb-5 pt-0.5 sm:mb-0 sm:pt-0", children: jsx(Text, { size: "text-xl", "font-weight": "light", children: description }) })) : null;
|
|
1583
2064
|
|
|
1584
2065
|
const renderList$1 = (items) => {
|
|
1585
2066
|
return items?.length ? (jsx(List, { items: items, className: "text-l font-light mb-2 last:mb-0" })) : (jsx("span", { className: "text-m font-light text-secondary-text", children: "\u041D\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u0430\u043C\u0435\u0440\u0443 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u043D\u0430 QR-\u043A\u043E\u0434 \u0438 \u0441\u043A\u0430\u0447\u0430\u0439\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435" }));
|
|
@@ -1587,7 +2068,7 @@
|
|
|
1587
2068
|
|
|
1588
2069
|
const MobileAppTile = JSX(({ className, padding, alignTitle = 'left', buttons = [], description, headingType = 'h4', image, items, qr, title = 'Мобильное приложение', version = 'primary', ...rest }) => {
|
|
1589
2070
|
const containerStyle = version === 'secondary' ? 'p-3.5 min-w-[120px]' : 'min-w-[92px]';
|
|
1590
|
-
return (jsx(BlockWrapper, { className: style('min-h-80', className), padding: "p-0", version: version, ...rest, children: jsxs(BaseTile, { className: "h-full", padding: padding, defaultPadding: "p-default", title: title ? (jsx(Heading, { headingType: headingType, title: title, className: style('whitespace-pre-wrap', AlignText[alignTitle]) })) : null, backImage: image?.src ? jsx(Img, { image: image }) : null, buttons: renderButtonsSection(buttons, { isVertical: buttons.length > 3 }), children: [renderDescription$
|
|
2071
|
+
return (jsx(BlockWrapper, { className: style('min-h-80', className), padding: "p-0", version: version, ...rest, children: jsxs(BaseTile, { className: "h-full", padding: padding, defaultPadding: "p-default", title: title ? (jsx(Heading, { headingType: headingType, title: title, className: style('whitespace-pre-wrap', AlignText[alignTitle]) })) : null, backImage: image?.src ? jsx(Img, { image: image }) : null, buttons: renderButtonsSection(buttons, { isVertical: buttons.length > 3 }), children: [renderDescription$1(description), jsxs("div", { className: "flex flex-1 gap-s items-center", children: [qr?.src ? (jsx("div", { className: style('flex justify-center bg-white rounded-md', containerStyle), children: jsx(Img, { className: "w-fit", image: qr }) })) : null, renderList$1(items)] })] }) }));
|
|
1591
2072
|
});
|
|
1592
2073
|
|
|
1593
2074
|
const sum = (list = []) => list.reduce((a, b) => a + b, 0);
|
|
@@ -1905,10 +2386,10 @@
|
|
|
1905
2386
|
data: colData?.[i] || [{}],
|
|
1906
2387
|
}));
|
|
1907
2388
|
|
|
1908
|
-
const TextBlock = JSX(({ className = '', title, description, iconVersion, image, __html, items = [], ...rest }) => (jsxs(BlockWrapper, { className: style('flex gap-3 bg-white group-data-secondary:bg-primary-main/10', className), ...rest, children: [iconVersion === 'small' ? jsx("div", { className: "mt-1", children: renderIcon() }) : null, iconVersion === 'big' ? renderImage(image) : null, jsxs("div", { className: "flex flex-col w-fit gap-
|
|
2389
|
+
const TextBlock = JSX(({ className = '', title, description, iconVersion, image, __html, items = [], ...rest }) => (jsxs(BlockWrapper, { className: style('flex gap-3 sm:gap-4 bg-white group-data-secondary:bg-primary-main/10', className), ...rest, children: [iconVersion === 'small' ? jsx("div", { className: "mt-1", children: renderIcon() }) : null, iconVersion === 'big' ? renderImage(image) : null, jsxs("div", { className: "flex flex-col w-fit gap-1 sm:gap-2", children: [title ? (jsx(Text, { size: "text-l", font: "font-normal", color: "text-primary-text group-data-secondary:text-white", children: title })) : null, description ? renderDescription(description) : null, items?.length ? renderList(items, true) : null, __html ? jsx(RichText, { __html: __html }) : null] })] })));
|
|
1909
2390
|
const renderIcon = () => (jsx("div", { className: `rounded-full h-4 w-4 text-center text-xs font-light bg-primary-main text-white group-data-secondary:bg-white group-data-secondary:text-primary-main`, children: "i" }));
|
|
1910
|
-
const renderImage = (image) => image?.src ? jsx(Img, { className: "h-fit", image: image }) : null;
|
|
1911
|
-
const renderDescription
|
|
2391
|
+
const renderImage = (image) => image?.src ? jsx(Img, { className: "h-fit flex-shrink-0", image: image }) : null;
|
|
2392
|
+
const renderDescription = (description) => (jsx(Paragraph, { size: "text-s", font: "font-light", color: "text-secondary-text group-data-secondary:text-white", children: description }));
|
|
1912
2393
|
const renderList = (items, bullets) => {
|
|
1913
2394
|
const listStyle = bullets ? 'list-disc pl-6' : '';
|
|
1914
2395
|
return (jsx("ul", { className: style('text-secondary-text group-data-secondary:text-white/80', listStyle), children: items.map((_, i) => (jsx("li", { children: jsx(Text, { size: "text-s", font: "font-light", children: _ }) }, `listItem-${i}`))) }));
|
|
@@ -1939,23 +2420,8 @@
|
|
|
1939
2420
|
});
|
|
1940
2421
|
VerticalLayout.childrenTypes = [];
|
|
1941
2422
|
|
|
1942
|
-
const benefitImageStyles = 'w-56 h-56 min-w-56';
|
|
1943
|
-
|
|
1944
|
-
const BenefitsBlock = JSX(({ className = '', title, benefitList, ...rest }) => (jsxs(BlockWrapper, { className: className, defaultPadding: "p-default", ...rest, children: [title ? jsx(Heading, { headingType: "h3", as: "h2", className: "text-center", title: title }) : null, benefitList?.length ? (jsx("div", { className: "sm:flex sm:flex-wrap w-full sm:justify-center sm:gap-x-m gap-y-lg sm:gap-y-0 mt-8", role: "list", children: benefitList.map(renderBenefit) })) : null] })));
|
|
1945
|
-
const renderBenefit = (benefit, i) => (jsxs("div", { className: "flex items-center sm:basis-1/2 sm:max-w-[400px] mb-14", role: "listitem", children: [benefit?.icon?.icon ? (jsx(Img, { className: style('p-3 mr-5 shrink-0 bg-main-divider text-primary-main group-data-secondary:bg-white/30 group-data-secondary:text-black', benefitImageStyles), image: benefit.icon })) : null, benefit?.icon?.src ? jsx(Img, { className: "mr-5 shrink-0", image: benefit.icon }) : null, benefit?.label ? (jsxs("div", { className: "sm:h-full", children: [jsx(Heading, { headingType: "h6", children: benefit.label }), renderDescription(benefit.description)] })) : null] }, String(i)));
|
|
1946
|
-
const renderDescription = (description) => {
|
|
1947
|
-
const benefitType = description?.benefitType || null;
|
|
1948
|
-
return description && benefitType ? (jsx("div", { className: "mt-2 text-l font-light text-secondary-text group-data-secondary:text-white/80", children: benefitType === 'list'
|
|
1949
|
-
? renderListBenefit(description)
|
|
1950
|
-
: renderTextBenefit(description) })) : null;
|
|
1951
|
-
};
|
|
1952
|
-
const renderTextBenefit = (description) => description?.name || null;
|
|
1953
|
-
const renderListBenefit = (description) => {
|
|
1954
|
-
const listStyleType = description?.bullets ? 'list-disc pl-6' : '';
|
|
1955
|
-
return description?.items && description.items.length > 0 ? (jsx("ul", { className: listStyleType, children: description.items.map((_, i) => (jsx("li", { children: _ }, `benefitListItem-${i}`))) })) : null;
|
|
1956
|
-
};
|
|
1957
|
-
|
|
1958
2423
|
const Blocks = {
|
|
2424
|
+
ApplicationForm,
|
|
1959
2425
|
ButtonsBlock,
|
|
1960
2426
|
BonusBenefitsBlock,
|
|
1961
2427
|
CardTransfer,
|
|
@@ -1988,14 +2454,6 @@
|
|
|
1988
2454
|
BenefitsBlock,
|
|
1989
2455
|
};
|
|
1990
2456
|
|
|
1991
|
-
function useBool(defaultValue = false) {
|
|
1992
|
-
const [value, setValue] = useState(defaultValue);
|
|
1993
|
-
const setTrue = useCallback(() => setValue(true), []);
|
|
1994
|
-
const setFalse = useCallback(() => setValue(false), []);
|
|
1995
|
-
const toggle = useCallback(() => setValue((_) => !_), []);
|
|
1996
|
-
return [value, { setValue, setTrue, setFalse, toggle }];
|
|
1997
|
-
}
|
|
1998
|
-
|
|
1999
2457
|
const debounce = (fn, delay = 600) => {
|
|
2000
2458
|
let timerId;
|
|
2001
2459
|
const debouncedCallback = (...args) => {
|
|
@@ -2120,7 +2578,7 @@
|
|
|
2120
2578
|
globalThis.localStorage?.setItem(COOKIE_DIALOG_ID, 'true');
|
|
2121
2579
|
close();
|
|
2122
2580
|
}, [close]);
|
|
2123
|
-
return isOpened ? (jsx("div", { className: "container z-40 fixed bottom-0 left-0 right-0 pointer-events-none", children: jsxs("div", { className: "bg-white m-6 p-6 rounded-md flex items-center pointer-events-auto shadow-[0_4px_25px_rgba(0,0,0,0.07)]", children: [jsx("div", { className: "flex-1", children: jsxs(Paragraph, { size: "text-s", font: "font-light", color: "text-primary-text", children: ["\u0410\u041E \u00AB\u0420\u043E\u0441\u0441\u0435\u043B\u044C\u0445\u043E\u0437\u0431\u0430\u043D\u043A\u00BB \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442", jsx(LinkWrapper, { isRemote: true, className: style(getStyleLinkWrapper(termLink?.href)), ...termLink, children: "cookie" }), "(\u0444\u0430\u0439\u043B\u044B \u0441 \u0434\u0430\u043D\u043D\u044B\u043C\u0438 \u043E \u043F\u0440\u043E\u0448\u043B\u044B\u0445 \u043F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u044F\u0445 \u0441\u0430\u0439\u0442\u0430) \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043E\u0432 \u0438 \u0443\u0434\u043E\u0431\u0441\u0442\u0432\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439. \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0437\u0430\u043F\u0440\u0435\u0442\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 cookie \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445 \u0441\u0432\u043E\u0435\u0433\u043E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.", jsx(LinkWrapper, { isRemote: true, className: style(getStyleLinkWrapper(personalDataPolicyLink?.href)), ...personalDataPolicyLink, children: "\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0412\u0430\u0448\u0438\u0445 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445" }), "\u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044F\u043C\u0438 \u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u0430\u043A\u043E\u043D\u0430 \u043E\u0442 27.07.2006 \u2116 152-\u04243 \u00AB\u041E \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445\u00BB."] }) }), jsx("div", { className: "w-24 flex justify-end", children: jsx(CloseButton, { className: "bg-main-gray rounded-md", onClick: handleClose }) })] }) })) : null;
|
|
2581
|
+
return isOpened ? (jsx("div", { className: "container z-40 fixed bottom-0 left-0 right-0 pointer-events-none", children: jsxs("div", { className: "bg-white m-5 p-5 sm:m-6 sm:p-6 rounded-md flex sm:items-center pointer-events-auto shadow-[0_4px_25px_rgba(0,0,0,0.07)]", children: [jsx("div", { className: "sm:flex-1", children: jsxs(Paragraph, { size: "text-s", font: "font-light", color: "text-primary-text", children: ["\u0410\u041E \u00AB\u0420\u043E\u0441\u0441\u0435\u043B\u044C\u0445\u043E\u0437\u0431\u0430\u043D\u043A\u00BB \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442", jsx(LinkWrapper, { isRemote: true, className: style(getStyleLinkWrapper(termLink?.href)), ...termLink, children: "cookie" }), "(\u0444\u0430\u0439\u043B\u044B \u0441 \u0434\u0430\u043D\u043D\u044B\u043C\u0438 \u043E \u043F\u0440\u043E\u0448\u043B\u044B\u0445 \u043F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u044F\u0445 \u0441\u0430\u0439\u0442\u0430) \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043E\u0432 \u0438 \u0443\u0434\u043E\u0431\u0441\u0442\u0432\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439. \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0437\u0430\u043F\u0440\u0435\u0442\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 cookie \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445 \u0441\u0432\u043E\u0435\u0433\u043E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.", jsx(LinkWrapper, { isRemote: true, className: style(getStyleLinkWrapper(personalDataPolicyLink?.href)), ...personalDataPolicyLink, children: "\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0412\u0430\u0448\u0438\u0445 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445" }), "\u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044F\u043C\u0438 \u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u0430\u043A\u043E\u043D\u0430 \u043E\u0442 27.07.2006 \u2116 152-\u04243 \u00AB\u041E \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445\u00BB."] }) }), jsx("div", { className: "ml-3 sm:ml-0 w-24 flex justify-end", children: jsx(CloseButton, { className: "bg-main-gray rounded-md", onClick: handleClose }) })] }) })) : null;
|
|
2124
2582
|
});
|
|
2125
2583
|
const getStyleLinkWrapper = (href) => ['inline mx-1', href ? 'text-green-dark' : ''];
|
|
2126
2584
|
|
|
@@ -2199,7 +2657,7 @@
|
|
|
2199
2657
|
|
|
2200
2658
|
const joinList = (sep) => (list) => list.reduce((acc, el, i) => (acc.length ? acc.concat({ ...sep, key: `sep-${i}` }, el) : [el]), []);
|
|
2201
2659
|
|
|
2202
|
-
const packageVersion = "0.12.
|
|
2660
|
+
const packageVersion = "0.12.9";
|
|
2203
2661
|
|
|
2204
2662
|
exports.Blocks = Blocks;
|
|
2205
2663
|
exports.ContentPage = ContentPage;
|