@axos-web-dev/shared-components 1.0.7 → 1.0.9-9.dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ATMLocator/ATMLocator.js +42 -32
- package/dist/Accordion/Accordion.css.d.ts +1 -1
- package/dist/Accordion/Accordion.css.js +1 -1
- package/dist/Accordion/Accordion.js +1 -1
- package/dist/AlertBanner/AlertBanner.css.js +1 -1
- package/dist/AlertBanner/index.js +1 -1
- package/dist/Article/Article.css.d.ts +41 -41
- package/dist/Article/Article.css.js +1 -1
- package/dist/Article/Article.js +3 -13
- package/dist/ArticlesSet/ArticlesSet.css.d.ts +16 -16
- package/dist/ArticlesSet/ArticlesSet.css.js +1 -1
- package/dist/Auth/ErrorAlert.css.d.ts +4 -0
- package/dist/Auth/ErrorAlert.css.js +11 -0
- package/dist/Auth/ErrorAlert.d.ts +14 -0
- package/dist/Auth/ErrorAlert.js +184 -0
- package/dist/Auth/Logout.d.ts +3 -0
- package/dist/Auth/Logout.js +29 -0
- package/dist/Auth/SignIn.css.d.ts +6 -0
- package/dist/Auth/SignIn.css.js +18 -0
- package/dist/Auth/SignInPassword.d.ts +15 -0
- package/dist/Auth/SignInPassword.js +118 -0
- package/dist/Auth/index.d.ts +5 -0
- package/dist/Auth/index.js +20 -0
- package/dist/Avatar/Avatar.module.js +1 -1
- package/dist/AwardsBanner/AwardsBanner.css.js +1 -1
- package/dist/AwardsItem/AwardsItem.css.js +1 -1
- package/dist/Blockquote/Blockquote.module.js +1 -1
- package/dist/BulletItem/BulletItem.css.js +1 -1
- package/dist/BulletItem/BulletItem.js +1 -1
- package/dist/Button/Button.css.d.ts +31 -18
- package/dist/Button/Button.css.js +2 -2
- package/dist/Button/Button.js +14 -4
- package/dist/Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.d.ts +12 -12
- package/dist/Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js +1 -1
- package/dist/Calculators/ApyCalculator/ApyCalculator.css.d.ts +14 -14
- package/dist/Calculators/ApyCalculator/ApyCalculator.css.js +1 -1
- package/dist/Calculators/ApyCalculator/index.js +20 -12
- package/dist/Calculators/AxosOneCalculator/BalanceAPYCalculator.css.d.ts +8 -8
- package/dist/Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js +1 -1
- package/dist/Calculators/AxosOneCalculator/index.js +19 -11
- package/dist/Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.d.ts +22 -22
- package/dist/Calculators/BalanceAPYCalculator/BalanceAPYCalculator.css.js +1 -1
- package/dist/Calculators/BalanceAPYCalculator/index.js +1 -1
- package/dist/Calculators/BuyDownCalculator/BuyDownCalculator.css.d.ts +101 -0
- package/dist/Calculators/BuyDownCalculator/BuyDownCalculator.css.js +56 -0
- package/dist/Calculators/BuyDownCalculator/index.d.ts +25 -0
- package/dist/Calculators/BuyDownCalculator/index.js +855 -0
- package/dist/Calculators/Calculator.js +29 -10
- package/dist/Calculators/MarginTradingCalculator/MarginTradingCalculator.css.js +1 -1
- package/dist/Calculators/MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.d.ts +12 -12
- package/dist/Calculators/MonthlyPaymentCalculator/MonthlyPaymentCalculator.css.js +1 -1
- package/dist/Calculators/MonthlyPaymentLVFCalculator/MonthlyPaymentCalculator.css.d.ts +12 -12
- package/dist/Calculators/MonthlyPaymentLVFCalculator/MonthlyPaymentCalculator.css.js +1 -1
- package/dist/Calculators/SummitApyCalculator/BalanceAPYCalculator.css.d.ts +8 -8
- package/dist/Calculators/SummitApyCalculator/BalanceAPYCalculator.css.js +1 -1
- package/dist/Calculators/SummitApyCalculator/index.js +1 -1
- package/dist/Calculators/calculator.css.d.ts +12 -12
- package/dist/Calculators/calculator.css.js +1 -1
- package/dist/Calculators/index.d.ts +1 -0
- package/dist/Calculators/index.js +2 -0
- package/dist/CallToActionBar/CallToActionBar.css.js +1 -1
- package/dist/CallToActionBar/index.js +3 -1
- package/dist/Carousel/Carousel.css.d.ts +20 -20
- package/dist/Carousel/Carousel.css.js +1 -1
- package/dist/Carousel/index.js +23 -13
- package/dist/Chevron/Chevron.css.d.ts +6 -6
- package/dist/Chevron/Chevron.css.js +1 -1
- package/dist/Chevron/index.js +14 -4
- package/dist/CollectInformationAlert/CollectInformationAlert.css.js +1 -1
- package/dist/CollectInformationAlert/index.js +1 -1
- package/dist/Comparison/Comparison.css.d.ts +11 -10
- package/dist/Comparison/Comparison.css.js +4 -2
- package/dist/Comparison/Comparison.js +23 -13
- package/dist/Comparison/index.js +2 -1
- package/dist/ContentBanner/ContentBanner.css.d.ts +12 -12
- package/dist/ContentBanner/ContentBanner.css.js +1 -1
- package/dist/DownloadTile/DownloadTile.css.js +1 -1
- package/dist/ExecutiveBio/ExecutiveBio.css.d.ts +31 -31
- package/dist/ExecutiveBio/ExecutiveBio.css.js +1 -1
- package/dist/ExecutiveBio/ExecutiveBio.js +16 -22
- package/dist/FaqAccordion/FaqAccordion.css.js +1 -1
- package/dist/FaqAccordion/index.js +16 -6
- package/dist/FdicCallout/FdicCallout.module.js +1 -1
- package/dist/FooterDisclosure/FooterDisclosure.css.js +1 -1
- package/dist/FooterDisclosure/LVF/LaVictorieFooter.css.js +1 -1
- package/dist/FooterDisclosure/LVF/LaVictorieFooter.js +1 -1
- package/dist/FooterSiteMap/AxosBank/FooterSiteMap.css.js +1 -1
- package/dist/FooterSiteMap/AxosBank/FooterSiteMap.js +14 -4
- package/dist/Forms/ApplicationStart.js +22 -5
- package/dist/Forms/ApplyNow.js +14 -4
- package/dist/Forms/ClearingForm.js +20 -3
- package/dist/Forms/CommercialDeposits.js +20 -3
- package/dist/Forms/CommercialLending.js +21 -4
- package/dist/Forms/CommercialPremiumFinance.d.ts +10 -0
- package/dist/Forms/CommercialPremiumFinance.js +212 -0
- package/dist/Forms/ContactCompany.js +21 -4
- package/dist/Forms/ContactCompanyTitle.js +21 -4
- package/dist/Forms/ContactUs.d.ts +1 -1
- package/dist/Forms/ContactUs.js +108 -80
- package/dist/Forms/ContactUsAAS.js +21 -6
- package/dist/Forms/ContactUsBusiness.d.ts +2 -2
- package/dist/Forms/ContactUsBusiness.js +45 -19
- package/dist/Forms/ContactUsBusinessNameEmail.d.ts +9 -0
- package/dist/Forms/ContactUsBusinessNameEmail.js +282 -0
- package/dist/Forms/ContactUsLVF.js +21 -4
- package/dist/Forms/ContactUsNMLSId.js +35 -9
- package/dist/Forms/CpraRequest.d.ts +1 -1
- package/dist/Forms/CpraRequest.js +76 -64
- package/dist/Forms/CraPublicFile.d.ts +5 -5
- package/dist/Forms/CraPublicFile.js +69 -45
- package/dist/Forms/DealerServices.js +21 -5
- package/dist/Forms/EmailOnly.js +45 -28
- package/dist/Forms/EmailUs.js +13 -3
- package/dist/Forms/FormEnums.d.ts +21 -0
- package/dist/Forms/FormEnums.js +308 -0
- package/dist/Forms/FormProps.d.ts +3 -0
- package/dist/Forms/Forms.css.d.ts +42 -42
- package/dist/Forms/Forms.css.js +1 -1
- package/dist/Forms/HoneyPot/HoneyPot.css.d.ts +1 -0
- package/dist/Forms/HoneyPot/HoneyPot.css.js +5 -0
- package/dist/Forms/HoneyPot/index.d.ts +24 -0
- package/dist/Forms/HoneyPot/index.js +71 -0
- package/dist/Forms/MortgageRate/MortgageRateForm.js +17 -7
- package/dist/Forms/MortgageRate/MortgageRateWatch.js +16 -6
- package/dist/Forms/QuickPricer/QuickPricerForm.js +20 -21
- package/dist/Forms/QuickPricer/QuickPricerResults.css.js +1 -1
- package/dist/Forms/QuickPricer/UserInformation.css.js +1 -1
- package/dist/Forms/ScheduleCall.js +21 -4
- package/dist/Forms/ScheduleCallPremier.js +21 -4
- package/dist/Forms/SuccesForm.js +31 -21
- package/dist/Forms/VendorQuestionnaire.js +12 -2
- package/dist/Forms/WcplSurvey.js +21 -4
- package/dist/Forms/index.d.ts +3 -0
- package/dist/Forms/index.js +8 -0
- package/dist/HelpArticle/HelpArticle.css.d.ts +4 -0
- package/dist/HelpArticle/HelpArticle.css.js +12 -0
- package/dist/HelpArticle/index.d.ts +1 -0
- package/dist/HelpArticle/index.js +7 -0
- package/dist/HeroBanner/HeroBanner.css.d.ts +19 -17
- package/dist/HeroBanner/HeroBanner.css.js +10 -6
- package/dist/HeroBanner/HeroBanner.d.ts +1 -1
- package/dist/HeroBanner/HeroBanner.interface.d.ts +3 -0
- package/dist/HeroBanner/HeroBanner.js +47 -1
- package/dist/HeroBanner/LargeBanner.css.d.ts +20 -20
- package/dist/HeroBanner/LargeBanner.css.js +1 -1
- package/dist/HeroBanner/SelectionBanner.css.d.ts +8 -8
- package/dist/HeroBanner/SelectionBanner.css.js +1 -1
- package/dist/HeroBanner/index.js +3 -1
- package/dist/Hyperlink/Hyperlink.css.js +1 -1
- package/dist/Hyperlink/index.js +17 -7
- package/dist/IconBillboard/IconBillboard.css.d.ts +26 -25
- package/dist/IconBillboard/IconBillboard.css.js +6 -4
- package/dist/IconBillboard/IconBillboard.d.ts +1 -2
- package/dist/IconBillboard/IconBillboard.interface.d.ts +1 -0
- package/dist/IconBillboard/IconBillboard.js +46 -80
- package/dist/IconBillboard/IconBillboardSet.js +1 -1
- package/dist/IconBillboard/index.js +3 -3
- package/dist/IconBillboard/sections/CallToActionSection.d.ts +12 -0
- package/dist/IconBillboard/sections/CallToActionSection.js +101 -0
- package/dist/IconBillboard/sections/HeaderSection.d.ts +11 -0
- package/dist/IconBillboard/sections/HeaderSection.js +23 -0
- package/dist/IconBillboard/sections/IconSection.d.ts +7 -0
- package/dist/IconBillboard/sections/IconSection.js +18 -0
- package/dist/IconBillboard/sections/ItemsSection.d.ts +11 -0
- package/dist/IconBillboard/sections/ItemsSection.js +11 -0
- package/dist/IconBillboard/sections/LayoutSection.d.ts +8 -0
- package/dist/IconBillboard/sections/LayoutSection.js +6 -0
- package/dist/ImageBillboard/ExitIntentModal/ModalWrapper.d.ts +9 -0
- package/dist/ImageBillboard/ExitIntentModal/ModalWrapper.js +85 -0
- package/dist/ImageBillboard/ExitIntentModal/useExitIntentModal.d.ts +5 -0
- package/dist/ImageBillboard/ExitIntentModal/useExitIntentModal.js +90 -0
- package/dist/ImageBillboard/ImageBillboard.css.d.ts +36 -20
- package/dist/ImageBillboard/ImageBillboard.css.js +51 -19
- package/dist/ImageBillboard/ImageBillboard.interface.d.ts +20 -2
- package/dist/ImageBillboard/ImageBillboard.js +1 -1
- package/dist/ImageBillboard/ImageBillboardSet.d.ts +1 -1
- package/dist/ImageBillboard/ImageBillboardSet.js +104 -28
- package/dist/ImageBillboard/index.js +17 -1
- package/dist/ImageLink/ImageLink.css.js +1 -1
- package/dist/ImageLink/ImageLink.d.ts +2 -2
- package/dist/ImageLink/ImageLink.js +17 -13
- package/dist/ImageLink/ImageLinkSet.js +20 -10
- package/dist/ImageLink/index.js +17 -7
- package/dist/Input/Checkbox.css.js +1 -1
- package/dist/Input/Checkbox.js +2 -1
- package/dist/Input/Dropdown.css.js +1 -1
- package/dist/Input/Input.css.d.ts +16 -16
- package/dist/Input/Input.css.js +1 -1
- package/dist/Input/Input.js +4 -1
- package/dist/Input/PercentageInput.d.ts +3 -0
- package/dist/Input/PercentageInput.js +32 -0
- package/dist/Input/RadioButton.css.js +1 -1
- package/dist/Input/RadioButton.js +12 -3
- package/dist/Inputs/Input.css.d.ts +14 -14
- package/dist/Inputs/Input.css.js +1 -1
- package/dist/Insight/Featured/CategorySelector.css.js +1 -1
- package/dist/Insight/Featured/CategorySelector.js +28 -20
- package/dist/Insight/Featured/Featured.css.js +1 -1
- package/dist/Insight/Featured/Featured.js +75 -58
- package/dist/Insight/Featured/Header.css.js +1 -1
- package/dist/Insight/Featured/Header.js +22 -12
- package/dist/Insight/Insight.css.js +1 -1
- package/dist/Interstitial/Interstitial-variants.css.d.ts +2 -2
- package/dist/Interstitial/Interstitial-variants.css.js +1 -1
- package/dist/Interstitial/Interstitial.module.js +1 -1
- package/dist/LandingPageHeader/LandingPageHeader.css.d.ts +3 -3
- package/dist/LandingPageHeader/LandingPageHeader.css.js +1 -1
- package/dist/LandingPageHeader/LandingPageHeader.js +1 -1
- package/dist/LoadingIndicator/LoadingIndicator.css.js +1 -1
- package/dist/Modal/Modal.css.js +1 -1
- package/dist/Modal/Modal.js +15 -5
- package/dist/NavigationMenu/AxosALTS/NavBar.css.js +1 -1
- package/dist/NavigationMenu/AxosALTS/NavBar.module.js +1 -1
- package/dist/NavigationMenu/AxosALTS/NavData.js +14 -4
- package/dist/NavigationMenu/AxosALTS/index.js +14 -4
- package/dist/NavigationMenu/AxosAdvisor/NavBar.css.js +1 -1
- package/dist/NavigationMenu/AxosAdvisor/NavBar.module.js +1 -1
- package/dist/NavigationMenu/AxosAdvisor/SubNavBar.js +3 -10
- package/dist/NavigationMenu/AxosAdvisor/SubNavbar.css.js +1 -1
- package/dist/NavigationMenu/AxosAdvisor/index.js +3 -11
- package/dist/NavigationMenu/AxosAdvisorServices/NavBar.css.js +1 -1
- package/dist/NavigationMenu/AxosAdvisorServices/NavBar.module.js +1 -1
- package/dist/NavigationMenu/AxosAdvisorServices/NavData.js +0 -5
- package/dist/NavigationMenu/AxosAdvisorServices/SubNavbar.css.js +1 -1
- package/dist/NavigationMenu/AxosBank/MobileMenu/MobileMenu.d.ts +2 -0
- package/dist/NavigationMenu/AxosBank/MobileMenu/MobileMenu.js +345 -0
- package/dist/NavigationMenu/AxosBank/MobileMenu/MobileMenu.module.js +53 -0
- package/dist/NavigationMenu/AxosBank/MobileMenu/MobileNavData.d.ts +272 -0
- package/dist/NavigationMenu/AxosBank/MobileMenu/MobileNavData.js +664 -0
- package/dist/NavigationMenu/AxosBank/NavBar.css.js +1 -1
- package/dist/NavigationMenu/AxosBank/NavBar.module.js +39 -81
- package/dist/NavigationMenu/AxosBank/NavData.js +14 -4
- package/dist/NavigationMenu/AxosBank/SubNavBar.js +445 -125
- package/dist/NavigationMenu/AxosBank/SubNavbar.css.js +1 -1
- package/dist/NavigationMenu/AxosBank/index.d.ts +2 -1
- package/dist/NavigationMenu/AxosBank/index.js +104 -533
- package/dist/NavigationMenu/AxosClearing/NavBar.css.js +1 -1
- package/dist/NavigationMenu/AxosClearing/NavBar.module.js +1 -1
- package/dist/NavigationMenu/AxosFiduciary/NavBar.module.js +1 -1
- package/dist/NavigationMenu/LaVictoire/NavBar.css.js +1 -1
- package/dist/NavigationMenu/LaVictoire/NavBar.module.js +1 -1
- package/dist/NavigationMenu/LaVictoire/NavData.js +14 -4
- package/dist/NavigationMenu/LaVictoire/index.js +40 -20
- package/dist/NavigationMenu/NavDataJson.d.ts +2 -0
- package/dist/NavigationMenu/NavDataJson.js +309 -0
- package/dist/NavigationMenu/Navbar.d.ts +5 -0
- package/dist/NavigationMenu/Navbar.js +195 -0
- package/dist/NavigationMenu/SignInNavButton.d.ts +1 -0
- package/dist/NavigationMenu/SignInNavButton.js +363 -0
- package/dist/PageNavItem/PageNavItem.css.d.ts +2 -2
- package/dist/PageNavItem/PageNavItem.css.js +1 -1
- package/dist/PageNavSet/PageNavigationSet.css.js +1 -1
- package/dist/Pagination/Pagination.css.js +1 -1
- package/dist/Pagination/Pagination.js +1 -1
- package/dist/SecondaryFooter/SecondaryFooter.css.js +1 -1
- package/dist/SetContainer/SetContainer.css.d.ts +17 -18
- package/dist/SetContainer/SetContainer.css.js +3 -5
- package/dist/SetContainer/SetContainer.d.ts +2 -1
- package/dist/SetContainer/SetContainer.js +27 -13
- package/dist/SetContainer/index.js +1 -2
- package/dist/SocialMediaBar/SocialMediaBar.css.js +1 -1
- package/dist/SocialMediaBar/iconsRepository.js +14 -4
- package/dist/StepItem/StepItem.css.d.ts +18 -18
- package/dist/StepItem/StepItem.css.js +1 -1
- package/dist/StepItemSet/StepItemSet.css.d.ts +14 -14
- package/dist/StepItemSet/StepItemSet.css.js +1 -1
- package/dist/StepItemSet/StepItemSet.js +2 -6
- package/dist/Tab/Tab.css.d.ts +12 -12
- package/dist/Tab/Tab.css.js +1 -1
- package/dist/Table/Table.css.d.ts +25 -25
- package/dist/Table/Table.css.js +1 -1
- package/dist/Table/Table.d.ts +3 -3
- package/dist/Table/Table.js +1 -1
- package/dist/TextBlock/TextBlock.css.js +1 -1
- package/dist/Topic/Topic.css.d.ts +4 -0
- package/dist/Topic/Topic.css.js +12 -0
- package/dist/Topic/Topic.d.ts +19 -0
- package/dist/Topic/Topic.js +24 -0
- package/dist/Topic/index.d.ts +2 -0
- package/dist/Topic/index.js +12 -0
- package/dist/TopicalNavItem/TopicalNavItem.css.js +1 -1
- package/dist/TopicalNavSet/TopicalNavSet.css.js +1 -1
- package/dist/Typography/Typography.css.js +1 -1
- package/dist/VideoTile/VideoTile.css.js +1 -1
- package/dist/VideoTile/VideoTile.interface.d.ts +4 -3
- package/dist/VideoTile/VideoTile.js +183 -28
- package/dist/VideoWrapper/VideoWrapper.css.js +1 -1
- package/dist/VideoWrapper/index.js +15 -5
- package/dist/WalnutIframe/index.d.ts +6 -0
- package/dist/WalnutIframe/index.js +21 -0
- package/dist/WalnutIframe/wrapper.module.js +14 -0
- package/dist/assets/Auth/ErrorAlert.css +37 -0
- package/dist/assets/Auth/SignIn.css +86 -0
- package/dist/assets/Button/Button.css +31 -16
- package/dist/assets/Calculators/AxosOneCalculator/BalanceAPYCalculator.css +5 -0
- package/dist/assets/Calculators/BuyDownCalculator/BuyDownCalculator.css +197 -0
- package/dist/assets/Calculators/SummitApyCalculator/BalanceAPYCalculator.css +8 -0
- package/dist/assets/CallToActionBar/CallToActionBar.css +4 -0
- package/dist/assets/Comparison/Comparison.css +9 -2
- package/dist/assets/Forms/HoneyPot/HoneyPot.css +4 -0
- package/dist/assets/HelpArticle/HelpArticle.css +70 -0
- package/dist/assets/HeroBanner/HeroBanner.css +38 -26
- package/dist/assets/HeroBanner/LargeBanner.css +3 -0
- package/dist/assets/IconBillboard/IconBillboard.css +43 -36
- package/dist/assets/ImageBillboard/ImageBillboard.css +336 -36
- package/dist/assets/Insight/Insight.css +12 -0
- package/dist/assets/NavigationMenu/AxosBank/MobileMenu/MobileMenu.css.css +191 -0
- package/dist/assets/NavigationMenu/AxosBank/NavBar.css +6 -0
- package/dist/assets/NavigationMenu/AxosBank/NavBar.css.css +114 -301
- package/dist/assets/SetContainer/SetContainer.css +44 -22
- package/dist/assets/Topic/Topic.css +54 -0
- package/dist/assets/WalnutIframe/wrapper.css.css +49 -0
- package/dist/assets/globals.css +13 -30
- package/dist/assets/utils/optimizeImage/optimizeImage.css.css +47 -0
- package/dist/globals.css.js +1 -1
- package/dist/icons/ArrowIcon/ArrowIcon.css.d.ts +3 -3
- package/dist/icons/ArrowIcon/ArrowIcon.css.js +1 -1
- package/dist/icons/CheckIcon/CheckIcon.css.d.ts +2 -2
- package/dist/icons/CheckIcon/CheckIcon.css.js +1 -1
- package/dist/icons/DownloadIcon/DownloadIcon.css.js +1 -1
- package/dist/icons/FollowIcon/FollowIcon.css.js +1 -1
- package/dist/icons/Logos/AXB.d.ts +8 -0
- package/dist/icons/Logos/AXB.js +74 -0
- package/dist/icons/Star/Star.css.js +1 -1
- package/dist/index.css.js +1 -1
- package/dist/main.d.ts +5 -0
- package/dist/main.js +69 -8
- package/dist/themes/axos.css.d.ts +38 -38
- package/dist/themes/axos.css.js +1 -1
- package/dist/themes/premier.css.js +1 -1
- package/dist/themes/victorie.css.js +1 -1
- package/dist/utils/allowedAxosDomains.js +19 -3
- package/dist/utils/appendQueryParams.js +3 -6
- package/dist/utils/{lazyImage/lazyImage.d.ts → optimizeImage/OptimizeImage.d.ts} +3 -2
- package/dist/utils/optimizeImage/OptimizeImage.js +46 -0
- package/dist/utils/optimizeImage/index.d.ts +1 -0
- package/dist/utils/optimizeImage/index.js +4 -0
- package/dist/utils/optimizeImage/optimizeImage.module.js +14 -0
- package/package.json +133 -130
- package/dist/utils/lazyImage/imageObserver.d.ts +0 -9
- package/dist/utils/lazyImage/imageObserver.js +0 -29
- package/dist/utils/lazyImage/index.d.ts +0 -2
- package/dist/utils/lazyImage/index.js +0 -7
- package/dist/utils/lazyImage/lazyImage.js +0 -26
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { Chevron } from "../Chevron/index.js";
|
|
4
|
-
import { getVariant } from "../utils/getVariant.js";
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
5
3
|
import clsx from "clsx";
|
|
6
|
-
import {
|
|
7
|
-
import "../
|
|
8
|
-
import "
|
|
9
|
-
import "
|
|
10
|
-
import {
|
|
11
|
-
|
|
4
|
+
import { useRef, useState, useEffect } from "react";
|
|
5
|
+
import { getVariant } from "../utils/getVariant.js";
|
|
6
|
+
import { content, containerIconBillboard, link_wrapper } from "./IconBillboard.css.js";
|
|
7
|
+
import { LayoutSection } from "./sections/LayoutSection.js";
|
|
8
|
+
import { IconSection } from "./sections/IconSection.js";
|
|
9
|
+
import { HeaderSection } from "./sections/HeaderSection.js";
|
|
10
|
+
import { ItemsSection } from "./sections/ItemsSection.js";
|
|
11
|
+
import { useFullClick, CallToActionSection } from "./sections/CallToActionSection.js";
|
|
12
12
|
const IconBillboard = (props) => {
|
|
13
13
|
const {
|
|
14
14
|
callToActionRow,
|
|
@@ -22,89 +22,55 @@ const IconBillboard = (props) => {
|
|
|
22
22
|
id
|
|
23
23
|
} = props;
|
|
24
24
|
const variant = getVariant(fullVariant);
|
|
25
|
+
const headingRef = useRef(null);
|
|
26
|
+
const [headingLevel, setHeadingLevel] = useState("h2");
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (headingRef.current) {
|
|
29
|
+
const section = headingRef.current.closest(".section_spacer");
|
|
30
|
+
if (section) {
|
|
31
|
+
const existingH2 = section.querySelector("h2._1r4ovbuj");
|
|
32
|
+
if (existingH2) {
|
|
33
|
+
setHeadingLevel("h3");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, []);
|
|
38
|
+
const { isClickable, handleClick, chevronText } = useFullClick(callToActionRow);
|
|
25
39
|
return /* @__PURE__ */ jsxs(
|
|
26
40
|
"div",
|
|
27
41
|
{
|
|
42
|
+
id,
|
|
43
|
+
onClick: handleClick,
|
|
44
|
+
role: isClickable ? "link" : void 0,
|
|
45
|
+
title: isClickable ? chevronText : void 0,
|
|
28
46
|
className: clsx(
|
|
29
47
|
containerIconBillboard({ variant }),
|
|
30
|
-
"
|
|
31
|
-
|
|
48
|
+
`${set ? "" : "containment"}`,
|
|
49
|
+
"billboard rounded flex_col gap_24 is_icon",
|
|
50
|
+
isClickable && link_wrapper
|
|
32
51
|
),
|
|
33
|
-
id,
|
|
34
52
|
children: [
|
|
35
|
-
/* @__PURE__ */ jsxs(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
/* @__PURE__ */ jsx("div", { children: body })
|
|
50
|
-
] }),
|
|
51
|
-
items && items?.length > 0 && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("ul", { className: clsx(list, "list_unstyled"), children: items?.map((item) => /* @__PURE__ */ jsx(BulletItem, { id: item.id, variant, children: item.content }, item.id)) }) })
|
|
53
|
+
/* @__PURE__ */ jsxs(LayoutSection, { side, children: [
|
|
54
|
+
/* @__PURE__ */ jsx(IconSection, { icon }),
|
|
55
|
+
/* @__PURE__ */ jsxs("div", { className: content, children: [
|
|
56
|
+
/* @__PURE__ */ jsx(
|
|
57
|
+
HeaderSection,
|
|
58
|
+
{
|
|
59
|
+
headline,
|
|
60
|
+
headingLevel,
|
|
61
|
+
headingRef,
|
|
62
|
+
body,
|
|
63
|
+
variant
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
/* @__PURE__ */ jsx(ItemsSection, { items, variant })
|
|
52
67
|
] })
|
|
53
68
|
] }),
|
|
54
|
-
|
|
55
|
-
({
|
|
56
|
-
id: id2,
|
|
57
|
-
variant: variant2,
|
|
58
|
-
displayText,
|
|
59
|
-
targetUrl,
|
|
60
|
-
type,
|
|
61
|
-
marketingIntersitial,
|
|
62
|
-
newTab,
|
|
63
|
-
...rest
|
|
64
|
-
}) => type === "Button" ? rest.as == "button" ? /* @__PURE__ */ jsx(
|
|
65
|
-
Button,
|
|
66
|
-
{
|
|
67
|
-
targetUrl,
|
|
68
|
-
color: getVariant(variant2),
|
|
69
|
-
size: "medium",
|
|
70
|
-
rounded: "medium",
|
|
71
|
-
marketingIntersitial,
|
|
72
|
-
newTab,
|
|
73
|
-
as: "button",
|
|
74
|
-
type: "button",
|
|
75
|
-
action: rest?.onClick,
|
|
76
|
-
children: displayText
|
|
77
|
-
},
|
|
78
|
-
id2
|
|
79
|
-
) : /* @__PURE__ */ jsx(
|
|
80
|
-
Button,
|
|
81
|
-
{
|
|
82
|
-
targetUrl,
|
|
83
|
-
color: getVariant(variant2),
|
|
84
|
-
size: "medium",
|
|
85
|
-
rounded: "medium",
|
|
86
|
-
marketingIntersitial,
|
|
87
|
-
newTab,
|
|
88
|
-
children: displayText
|
|
89
|
-
},
|
|
90
|
-
id2
|
|
91
|
-
) : /* @__PURE__ */ jsx(
|
|
92
|
-
Chevron,
|
|
93
|
-
{
|
|
94
|
-
targetUrl,
|
|
95
|
-
variant: getVariant(variant2),
|
|
96
|
-
marketingIntersitial,
|
|
97
|
-
newTab,
|
|
98
|
-
children: displayText
|
|
99
|
-
},
|
|
100
|
-
id2
|
|
101
|
-
)
|
|
102
|
-
) })
|
|
69
|
+
/* @__PURE__ */ jsx(CallToActionSection, { callToActionRow })
|
|
103
70
|
]
|
|
104
71
|
}
|
|
105
72
|
);
|
|
106
73
|
};
|
|
107
74
|
export {
|
|
108
|
-
Icon,
|
|
109
75
|
IconBillboard
|
|
110
76
|
};
|
|
@@ -22,7 +22,7 @@ const IconBillboardSet = ({
|
|
|
22
22
|
headline && /* @__PURE__ */ jsx(
|
|
23
23
|
"h2",
|
|
24
24
|
{
|
|
25
|
-
className: `
|
|
25
|
+
className: `header_1 ${header_section({ variant: billboard_variant })}`,
|
|
26
26
|
children: headline
|
|
27
27
|
}
|
|
28
28
|
),
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { billboard_icon, buttons, containerIconBillboard, content, headerIconBillboard, header_section, layout, list, listItem, section_body, section_container, section_text, title } from "./IconBillboard.css.js";
|
|
1
|
+
import { IconBillboard } from "./IconBillboard.js";
|
|
2
|
+
import { billboard_icon, buttons, containerIconBillboard, content, headerIconBillboard, header_section, layout, link_wrapper, list, listItem, section_body, section_container, section_text, title } from "./IconBillboard.css.js";
|
|
3
3
|
import { IconBillboardSet } from "./IconBillboardSet.js";
|
|
4
4
|
export {
|
|
5
|
-
Icon,
|
|
6
5
|
IconBillboard,
|
|
7
6
|
IconBillboardSet,
|
|
8
7
|
billboard_icon,
|
|
@@ -12,6 +11,7 @@ export {
|
|
|
12
11
|
headerIconBillboard,
|
|
13
12
|
header_section,
|
|
14
13
|
layout,
|
|
14
|
+
link_wrapper,
|
|
15
15
|
list,
|
|
16
16
|
listItem,
|
|
17
17
|
section_body,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ChevronProps } from '../../Chevron/Chevron.interface';
|
|
2
|
+
|
|
3
|
+
interface CallToActionSectionProps {
|
|
4
|
+
callToActionRow?: ChevronProps[];
|
|
5
|
+
}
|
|
6
|
+
export declare const useFullClick: (callToActionRow?: ChevronProps[]) => {
|
|
7
|
+
isClickable: boolean;
|
|
8
|
+
handleClick: (e: React.MouseEvent<HTMLDivElement>) => void;
|
|
9
|
+
chevronText: string | undefined;
|
|
10
|
+
};
|
|
11
|
+
export declare const CallToActionSection: ({ callToActionRow, }: CallToActionSectionProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from "../../Button/Button.js";
|
|
4
|
+
import "../../Button/Button.css.js";
|
|
5
|
+
import { useMemo } from "react";
|
|
6
|
+
import "react-use";
|
|
7
|
+
import { buttons } from "../IconBillboard.css.js";
|
|
8
|
+
import { Chevron } from "../../Chevron/index.js";
|
|
9
|
+
import { getVariant } from "../../utils/getVariant.js";
|
|
10
|
+
const useFullClick = (callToActionRow) => {
|
|
11
|
+
return useMemo(() => {
|
|
12
|
+
let chevronCount = 0;
|
|
13
|
+
let buttonCount = 0;
|
|
14
|
+
let chevronUrl;
|
|
15
|
+
let chevronText;
|
|
16
|
+
if (callToActionRow && callToActionRow.length > 0) {
|
|
17
|
+
callToActionRow.forEach((cta) => {
|
|
18
|
+
if (cta.type === "Button") {
|
|
19
|
+
buttonCount++;
|
|
20
|
+
} else {
|
|
21
|
+
chevronCount++;
|
|
22
|
+
chevronUrl = cta.targetUrl;
|
|
23
|
+
chevronText = cta.displayText;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const isClickable = chevronCount === 1 && buttonCount === 0 && typeof chevronUrl === "string" && chevronUrl.length > 0;
|
|
28
|
+
const handleClick = (e) => {
|
|
29
|
+
if (!isClickable) return;
|
|
30
|
+
const linkEl = e.currentTarget.querySelector("a");
|
|
31
|
+
if (linkEl && linkEl instanceof HTMLAnchorElement) {
|
|
32
|
+
window.location.href = linkEl.href;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
isClickable,
|
|
37
|
+
handleClick,
|
|
38
|
+
chevronText
|
|
39
|
+
};
|
|
40
|
+
}, [callToActionRow]);
|
|
41
|
+
};
|
|
42
|
+
const CallToActionSection = ({
|
|
43
|
+
callToActionRow
|
|
44
|
+
}) => {
|
|
45
|
+
if (!Array.isArray(callToActionRow) || callToActionRow.length === 0) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return /* @__PURE__ */ jsx("div", { className: buttons, children: callToActionRow.map(
|
|
49
|
+
({
|
|
50
|
+
id,
|
|
51
|
+
variant,
|
|
52
|
+
displayText,
|
|
53
|
+
targetUrl,
|
|
54
|
+
type,
|
|
55
|
+
marketingIntersitial,
|
|
56
|
+
newTab,
|
|
57
|
+
...rest
|
|
58
|
+
}) => type === "Button" ? rest.as == "button" ? /* @__PURE__ */ jsx(
|
|
59
|
+
Button,
|
|
60
|
+
{
|
|
61
|
+
targetUrl,
|
|
62
|
+
color: getVariant(variant),
|
|
63
|
+
size: "medium",
|
|
64
|
+
rounded: "medium",
|
|
65
|
+
marketingIntersitial,
|
|
66
|
+
newTab,
|
|
67
|
+
as: "button",
|
|
68
|
+
type: "button",
|
|
69
|
+
action: rest?.onClick,
|
|
70
|
+
children: displayText
|
|
71
|
+
},
|
|
72
|
+
id
|
|
73
|
+
) : /* @__PURE__ */ jsx(
|
|
74
|
+
Button,
|
|
75
|
+
{
|
|
76
|
+
targetUrl,
|
|
77
|
+
color: getVariant(variant),
|
|
78
|
+
size: "medium",
|
|
79
|
+
rounded: "medium",
|
|
80
|
+
marketingIntersitial,
|
|
81
|
+
newTab,
|
|
82
|
+
children: displayText
|
|
83
|
+
},
|
|
84
|
+
id
|
|
85
|
+
) : /* @__PURE__ */ jsx(
|
|
86
|
+
Chevron,
|
|
87
|
+
{
|
|
88
|
+
targetUrl,
|
|
89
|
+
variant: getVariant(variant),
|
|
90
|
+
marketingIntersitial,
|
|
91
|
+
newTab,
|
|
92
|
+
children: displayText
|
|
93
|
+
},
|
|
94
|
+
id
|
|
95
|
+
)
|
|
96
|
+
) });
|
|
97
|
+
};
|
|
98
|
+
export {
|
|
99
|
+
CallToActionSection,
|
|
100
|
+
useFullClick
|
|
101
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactNode, Ref } from 'react';
|
|
2
|
+
import { QuaternaryTypes } from '../../utils';
|
|
3
|
+
|
|
4
|
+
export interface HeaderSectionProps {
|
|
5
|
+
body?: ReactNode | undefined;
|
|
6
|
+
headingLevel: "h2" | "h3";
|
|
7
|
+
headingRef: Ref<HTMLHeadingElement>;
|
|
8
|
+
headline?: ReactNode | undefined;
|
|
9
|
+
variant: QuaternaryTypes;
|
|
10
|
+
}
|
|
11
|
+
export declare const HeaderSection: ({ body, headingLevel, headingRef, headline, variant, }: HeaderSectionProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { headerIconBillboard, title } from "../IconBillboard.css.js";
|
|
4
|
+
const HeaderSection = ({
|
|
5
|
+
body,
|
|
6
|
+
headingLevel,
|
|
7
|
+
headingRef,
|
|
8
|
+
headline,
|
|
9
|
+
variant
|
|
10
|
+
}) => /* @__PURE__ */ jsxs("div", { className: headerIconBillboard, children: [
|
|
11
|
+
headline && React.createElement(
|
|
12
|
+
headingLevel,
|
|
13
|
+
{
|
|
14
|
+
ref: headingRef,
|
|
15
|
+
className: `${title({ variant })}`
|
|
16
|
+
},
|
|
17
|
+
headline
|
|
18
|
+
),
|
|
19
|
+
body && /* @__PURE__ */ jsx("div", { children: body })
|
|
20
|
+
] });
|
|
21
|
+
export {
|
|
22
|
+
HeaderSection
|
|
23
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { billboard_icon } from "../IconBillboard.css.js";
|
|
3
|
+
const IconSection = ({ icon }) => {
|
|
4
|
+
if (!icon) return null;
|
|
5
|
+
return /* @__PURE__ */ jsx("div", { className: billboard_icon, role: "presentation", children: /* @__PURE__ */ jsx(
|
|
6
|
+
"img",
|
|
7
|
+
{
|
|
8
|
+
src: icon?.src,
|
|
9
|
+
alt: icon?.alt ?? "",
|
|
10
|
+
className: "img_fluid",
|
|
11
|
+
height: icon?.height,
|
|
12
|
+
width: icon?.width
|
|
13
|
+
}
|
|
14
|
+
) });
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
IconSection
|
|
18
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { QuaternaryTypes } from '../../utils';
|
|
3
|
+
|
|
4
|
+
export interface ItemsSectionProps {
|
|
5
|
+
items?: {
|
|
6
|
+
id: string;
|
|
7
|
+
content: ReactNode;
|
|
8
|
+
}[];
|
|
9
|
+
variant: QuaternaryTypes;
|
|
10
|
+
}
|
|
11
|
+
export declare const ItemsSection: ({ items, variant }: ItemsSectionProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { list } from "../IconBillboard.css.js";
|
|
4
|
+
import { BulletItem } from "../../BulletItem/BulletItem.js";
|
|
5
|
+
const ItemsSection = ({ items, variant }) => {
|
|
6
|
+
if (!items || items.length === 0) return null;
|
|
7
|
+
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("ul", { className: clsx(list, "list_unstyled"), children: items.map((item) => /* @__PURE__ */ jsx(BulletItem, { id: item.id, variant, children: item.content }, item.id)) }) });
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
ItemsSection
|
|
11
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as React, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
interface ModalWrapperProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
modalRef: React.RefObject<HTMLDivElement>;
|
|
7
|
+
}
|
|
8
|
+
export declare const ModalWrapper: ({ children, onClose, modalRef, }: ModalWrapperProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useEffect } from "react";
|
|
4
|
+
import { exit_intent_backdrop, exit_intent, modal_close_button } from "../ImageBillboard.css.js";
|
|
5
|
+
const ModalWrapper = ({
|
|
6
|
+
children,
|
|
7
|
+
onClose,
|
|
8
|
+
modalRef
|
|
9
|
+
}) => {
|
|
10
|
+
const wrapperRef = useRef(null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const originalOverflow = document.body.style.overflow;
|
|
13
|
+
document.body.style.overflow = "hidden";
|
|
14
|
+
return () => {
|
|
15
|
+
document.body.style.overflow = originalOverflow;
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const focusableSelectors = [
|
|
20
|
+
"a[href]",
|
|
21
|
+
"button:not([disabled])",
|
|
22
|
+
'[tabindex]:not([tabindex="-1"])'
|
|
23
|
+
];
|
|
24
|
+
const trapFocus = (e) => {
|
|
25
|
+
if (e.key !== "Tab") return;
|
|
26
|
+
const focusableEls = modalRef.current?.querySelectorAll(
|
|
27
|
+
focusableSelectors.join(",")
|
|
28
|
+
);
|
|
29
|
+
if (!focusableEls || focusableEls.length === 0) return;
|
|
30
|
+
const first = focusableEls[0];
|
|
31
|
+
const last = focusableEls[focusableEls.length - 1];
|
|
32
|
+
if (e.shiftKey && document.activeElement === first) {
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
last.focus();
|
|
35
|
+
} else if (!e.shiftKey && document.activeElement === last) {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
first.focus();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const focusFirst = () => {
|
|
41
|
+
const focusableEls = modalRef.current?.querySelectorAll(
|
|
42
|
+
focusableSelectors.join(",")
|
|
43
|
+
);
|
|
44
|
+
focusableEls?.[0]?.focus();
|
|
45
|
+
};
|
|
46
|
+
focusFirst();
|
|
47
|
+
document.addEventListener("keydown", trapFocus);
|
|
48
|
+
document.addEventListener("keydown", handleEscape);
|
|
49
|
+
return () => {
|
|
50
|
+
document.removeEventListener("keydown", trapFocus);
|
|
51
|
+
document.removeEventListener("keydown", handleEscape);
|
|
52
|
+
};
|
|
53
|
+
}, [modalRef]);
|
|
54
|
+
const handleEscape = (e) => {
|
|
55
|
+
if (e.key === "Escape") {
|
|
56
|
+
onClose();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return /* @__PURE__ */ jsx("div", { className: exit_intent_backdrop, role: "presentation", children: /* @__PURE__ */ jsx(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
className: exit_intent,
|
|
63
|
+
ref: modalRef,
|
|
64
|
+
role: "dialog",
|
|
65
|
+
"aria-modal": "true",
|
|
66
|
+
"aria-labelledby": "exit-intent-heading",
|
|
67
|
+
"aria-describedby": "exit-intent-description",
|
|
68
|
+
children: /* @__PURE__ */ jsxs("div", { ref: wrapperRef, className: "relative", children: [
|
|
69
|
+
/* @__PURE__ */ jsx(
|
|
70
|
+
"button",
|
|
71
|
+
{
|
|
72
|
+
"aria-label": "Close modal",
|
|
73
|
+
className: modal_close_button,
|
|
74
|
+
onClick: onClose,
|
|
75
|
+
children: "X"
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
children
|
|
79
|
+
] })
|
|
80
|
+
}
|
|
81
|
+
) });
|
|
82
|
+
};
|
|
83
|
+
export {
|
|
84
|
+
ModalWrapper
|
|
85
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useRef, useEffect } from "react";
|
|
3
|
+
const useExitIntentModal = (enabled) => {
|
|
4
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
5
|
+
const modalRef = useRef(null);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (!enabled) return;
|
|
8
|
+
const STORAGE_KEY = "exitIntentShown";
|
|
9
|
+
const sessionExpiry = 24 * 60 * 60 * 1e3;
|
|
10
|
+
const hasShown = () => {
|
|
11
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
12
|
+
if (!stored) return false;
|
|
13
|
+
const { timestamp } = JSON.parse(stored);
|
|
14
|
+
return Date.now() - timestamp < sessionExpiry;
|
|
15
|
+
};
|
|
16
|
+
const markShown = () => {
|
|
17
|
+
localStorage.setItem(
|
|
18
|
+
STORAGE_KEY,
|
|
19
|
+
JSON.stringify({ timestamp: Date.now() })
|
|
20
|
+
);
|
|
21
|
+
};
|
|
22
|
+
const showBanner = () => {
|
|
23
|
+
if (!hasShown()) {
|
|
24
|
+
setIsVisible(true);
|
|
25
|
+
markShown();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const handleMouseLeave = (e) => {
|
|
29
|
+
if (e.clientY <= 0) showBanner();
|
|
30
|
+
};
|
|
31
|
+
const handleScroll = () => {
|
|
32
|
+
const scrollY = window.scrollY;
|
|
33
|
+
const maxScroll = document.body.scrollHeight - window.innerHeight;
|
|
34
|
+
const percentScrolled = scrollY / maxScroll * 100;
|
|
35
|
+
if (percentScrolled > 60) {
|
|
36
|
+
window.addEventListener("scroll", detectScrollUp);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const detectScrollUp = () => {
|
|
40
|
+
if (window.scrollY < window.innerHeight * 0.25) {
|
|
41
|
+
showBanner();
|
|
42
|
+
window.removeEventListener("scroll", detectScrollUp);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
let inactivityTimer;
|
|
46
|
+
const resetInactivity = () => {
|
|
47
|
+
clearTimeout(inactivityTimer);
|
|
48
|
+
inactivityTimer = setTimeout(() => {
|
|
49
|
+
showBanner();
|
|
50
|
+
}, 15e3);
|
|
51
|
+
};
|
|
52
|
+
const startListeners = () => {
|
|
53
|
+
document.addEventListener("mouseleave", handleMouseLeave);
|
|
54
|
+
window.addEventListener("scroll", handleScroll);
|
|
55
|
+
document.addEventListener("mousemove", resetInactivity);
|
|
56
|
+
document.addEventListener("keydown", resetInactivity);
|
|
57
|
+
};
|
|
58
|
+
const initTimeout = setTimeout(startListeners, 1e4);
|
|
59
|
+
resetInactivity();
|
|
60
|
+
return () => {
|
|
61
|
+
clearTimeout(initTimeout);
|
|
62
|
+
clearTimeout(inactivityTimer);
|
|
63
|
+
document.removeEventListener("mouseleave", handleMouseLeave);
|
|
64
|
+
window.removeEventListener("scroll", handleScroll);
|
|
65
|
+
document.removeEventListener("mousemove", resetInactivity);
|
|
66
|
+
document.removeEventListener("keydown", resetInactivity);
|
|
67
|
+
window.removeEventListener("scroll", detectScrollUp);
|
|
68
|
+
};
|
|
69
|
+
}, [enabled]);
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (!isVisible) return;
|
|
72
|
+
const handleClickOutside = (e) => {
|
|
73
|
+
if (modalRef.current && !modalRef.current.contains(e.target)) {
|
|
74
|
+
setIsVisible(false);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
78
|
+
return () => {
|
|
79
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
80
|
+
};
|
|
81
|
+
}, [isVisible]);
|
|
82
|
+
return {
|
|
83
|
+
isVisible,
|
|
84
|
+
close: () => setIsVisible(false),
|
|
85
|
+
modalRef
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
export {
|
|
89
|
+
useExitIntentModal
|
|
90
|
+
};
|