@nuskin/react-mysite-elements 1.4.3 → 1.5.0-comx-2229.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +226 -0
  2. package/dist/common/carousel/ProductTabCarousel.d.ts +1 -1
  3. package/dist/common/icon/icons/SocialMediaIcons.styled.d.ts +5 -0
  4. package/dist/common/index.d.ts +1 -0
  5. package/dist/common/shopping-dashboard/MysiteDashboardWithNavigation.d.ts +50 -0
  6. package/dist/common/shopping-dashboard/PoDashboardWithNavigation.d.ts +4 -0
  7. package/dist/common/shopping-dashboard/ProductOfferDashboard.d.ts +4 -0
  8. package/dist/common/shopping-dashboard/ProductOfferDashboard.styled.d.ts +20 -0
  9. package/dist/common/shopping-dashboard/ShoppingDashboard.d.ts +32 -0
  10. package/dist/common/shopping-dashboard/ShoppingDashboard.styled.d.ts +20 -0
  11. package/dist/common/shopping-dashboard/TranslationContext.d.ts +10 -0
  12. package/dist/common/shopping-dashboard/TranslationKeys/ProductOfferDashboardTranslationKeys.d.ts +230 -0
  13. package/dist/common/shopping-dashboard/TranslationKeys/ShoppingDashboardTranslationKeys.d.ts +612 -0
  14. package/dist/common/shopping-dashboard/TranslationKeys/translationResolver.d.ts +8 -0
  15. package/dist/common/shopping-dashboard/fixtures/index.d.ts +1 -0
  16. package/dist/common/shopping-dashboard/fixtures/mockDashboardData.d.ts +10 -0
  17. package/dist/common/shopping-dashboard/fixtures/mockProductOfferData.d.ts +8 -0
  18. package/dist/common/shopping-dashboard/index.d.ts +42 -0
  19. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateChart.d.ts +13 -0
  20. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateChart.styled.d.ts +62 -0
  21. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateFullView.d.ts +18 -0
  22. package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateFullView.styled.d.ts +37 -0
  23. package/dist/common/shopping-dashboard/shared/DashboardHeader.d.ts +14 -0
  24. package/dist/common/shopping-dashboard/shared/DashboardHeader.styled.d.ts +48 -0
  25. package/dist/common/shopping-dashboard/shared/DataTable.d.ts +18 -0
  26. package/dist/common/shopping-dashboard/shared/DataTable.styled.d.ts +42 -0
  27. package/dist/common/shopping-dashboard/shared/FilterBar.d.ts +7 -0
  28. package/dist/common/shopping-dashboard/shared/FilterBar.styled.d.ts +12 -0
  29. package/dist/common/shopping-dashboard/shared/FullViewComponents.styled.d.ts +52 -0
  30. package/dist/common/shopping-dashboard/shared/LoadingSkeletons.d.ts +8 -0
  31. package/dist/common/shopping-dashboard/shared/LoadingSkeletons.styled.d.ts +121 -0
  32. package/dist/common/shopping-dashboard/shared/PageHeader.d.ts +32 -0
  33. package/dist/common/shopping-dashboard/shared/PageHeader.styled.d.ts +56 -0
  34. package/dist/common/shopping-dashboard/shared/Pagination.d.ts +9 -0
  35. package/dist/common/shopping-dashboard/shared/Pagination.styled.d.ts +18 -0
  36. package/dist/common/shopping-dashboard/shared/Signups/SignupsChart.d.ts +11 -0
  37. package/dist/common/shopping-dashboard/shared/Signups/SignupsChart.styled.d.ts +56 -0
  38. package/dist/common/shopping-dashboard/shared/Signups/SignupsFullView.d.ts +16 -0
  39. package/dist/common/shopping-dashboard/shared/Signups/SignupsFullView.styled.d.ts +15 -0
  40. package/dist/common/shopping-dashboard/shared/StatsCard.d.ts +13 -0
  41. package/dist/common/shopping-dashboard/shared/StatsCard.styled.d.ts +62 -0
  42. package/dist/common/shopping-dashboard/shared/TopCategories/CategoriesFullView.d.ts +15 -0
  43. package/dist/common/shopping-dashboard/shared/TopCategories/CategoriesFullView.styled.d.ts +72 -0
  44. package/dist/common/shopping-dashboard/shared/TopCategories/TopCategoriesPieChart.d.ts +11 -0
  45. package/dist/common/shopping-dashboard/shared/TopCategories/TopCategoriesPieChart.styled.d.ts +90 -0
  46. package/dist/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersFullView.d.ts +15 -0
  47. package/dist/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersFullView.styled.d.ts +86 -0
  48. package/dist/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersPieChart.d.ts +11 -0
  49. package/dist/common/shopping-dashboard/shared/TopProducts/ProductsFullView.d.ts +15 -0
  50. package/dist/common/shopping-dashboard/shared/TopProducts/ProductsFullView.styled.d.ts +48 -0
  51. package/dist/common/shopping-dashboard/shared/TopProducts/TopSellingProductsList.d.ts +11 -0
  52. package/dist/common/shopping-dashboard/shared/TopProducts/TopSellingProductsList.styled.d.ts +74 -0
  53. package/dist/common/shopping-dashboard/shared/WidgetMenu.d.ts +6 -0
  54. package/dist/common/shopping-dashboard/shared/WidgetMenu.styled.d.ts +5 -0
  55. package/dist/common/shopping-dashboard/shared/types.d.ts +13 -0
  56. package/dist/common/shopping-dashboard/shared/useViewport.d.ts +2 -0
  57. package/dist/common/shopping-dashboard/specs/CategoriesFullView.spec.d.ts +1 -0
  58. package/dist/common/shopping-dashboard/specs/ConversionRateChart.spec.d.ts +1 -0
  59. package/dist/common/shopping-dashboard/specs/ConversionRateFullView.spec.d.ts +1 -0
  60. package/dist/common/shopping-dashboard/specs/DashboardHeader.spec.d.ts +1 -0
  61. package/dist/common/shopping-dashboard/specs/DataTable.spec.d.ts +1 -0
  62. package/dist/common/shopping-dashboard/specs/FilterBar.spec.d.ts +1 -0
  63. package/dist/common/shopping-dashboard/specs/MysiteDashboardWithNavigation.spec.d.ts +1 -0
  64. package/dist/common/shopping-dashboard/specs/Pagination.spec.d.ts +1 -0
  65. package/dist/common/shopping-dashboard/specs/PoDashboardWithNavigation.spec.d.ts +1 -0
  66. package/dist/common/shopping-dashboard/specs/ProductOfferDashboard.spec.d.ts +1 -0
  67. package/dist/common/shopping-dashboard/specs/ProductsFullView.spec.d.ts +1 -0
  68. package/dist/common/shopping-dashboard/specs/ShoppingDashboard.spec.d.ts +1 -0
  69. package/dist/common/shopping-dashboard/specs/SignupsFullView.spec.d.ts +1 -0
  70. package/dist/common/shopping-dashboard/specs/TopCategoriesPieChart.spec.d.ts +1 -0
  71. package/dist/common/shopping-dashboard/specs/TopPerformingOffersFullView.spec.d.ts +1 -0
  72. package/dist/common/shopping-dashboard/specs/TopPerformingOffersPieChart.spec.d.ts +1 -0
  73. package/dist/common/shopping-dashboard/specs/TopSellingProductsList.spec.d.ts +1 -0
  74. package/dist/common/shopping-dashboard/specs/WidgetMenu.spec.d.ts +1 -0
  75. package/dist/common/shopping-dashboard/specs/dataUtils.spec.d.ts +1 -0
  76. package/dist/common/shopping-dashboard/specs/dateFormat.spec.d.ts +1 -0
  77. package/dist/common/shopping-dashboard/specs/marketOptions.spec.d.ts +1 -0
  78. package/dist/common/shopping-dashboard/specs/productOfferTranslation.spec.d.ts +1 -0
  79. package/dist/common/shopping-dashboard/specs/translationResolver.spec.d.ts +1 -0
  80. package/dist/common/shopping-dashboard/specs/trendUtils.spec.d.ts +1 -0
  81. package/dist/common/shopping-dashboard/stories/CategoriesFullView.stories.d.ts +10 -0
  82. package/dist/common/shopping-dashboard/stories/ConversionRateChart.stories.d.ts +9 -0
  83. package/dist/common/shopping-dashboard/stories/ConversionRateFullView.stories.d.ts +9 -0
  84. package/dist/common/shopping-dashboard/stories/DashboardHeader.stories.d.ts +9 -0
  85. package/dist/common/shopping-dashboard/stories/DataTable.stories.d.ts +8 -0
  86. package/dist/common/shopping-dashboard/stories/PageHeader.stories.d.ts +8 -0
  87. package/dist/common/shopping-dashboard/stories/Pagination.stories.d.ts +9 -0
  88. package/dist/common/shopping-dashboard/stories/ProductOfferDashboard.stories.d.ts +13 -0
  89. package/dist/common/shopping-dashboard/stories/ProductsFullView.stories.d.ts +9 -0
  90. package/dist/common/shopping-dashboard/stories/ShoppingDashboard.stories.d.ts +13 -0
  91. package/dist/common/shopping-dashboard/stories/SignupsChart.stories.d.ts +10 -0
  92. package/dist/common/shopping-dashboard/stories/SignupsFullView.stories.d.ts +9 -0
  93. package/dist/common/shopping-dashboard/stories/StatsCard.stories.d.ts +11 -0
  94. package/dist/common/shopping-dashboard/stories/TopCategoriesPieChart.stories.d.ts +10 -0
  95. package/dist/common/shopping-dashboard/stories/TopPerformingOffersFullView.stories.d.ts +10 -0
  96. package/dist/common/shopping-dashboard/stories/TopPerformingOffersPieChart.stories.d.ts +11 -0
  97. package/dist/common/shopping-dashboard/stories/TopSellingProductsList.stories.d.ts +11 -0
  98. package/dist/common/shopping-dashboard/utils/dataUtils.d.ts +9 -0
  99. package/dist/common/shopping-dashboard/utils/dateConstants.d.ts +5 -0
  100. package/dist/common/shopping-dashboard/utils/dateFormat.d.ts +7 -0
  101. package/dist/common/shopping-dashboard/utils/marketOptions.d.ts +4 -0
  102. package/dist/common/shopping-dashboard/utils/trendUtils.d.ts +11 -0
  103. package/dist/index.js +1 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/index.mjs +1 -1
  106. package/dist/index.mjs.map +1 -1
  107. package/package.json +6 -3
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/gitlab-runner-data/builds/nextgen-development/mysite/npm/react-mysite-elements/dist/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../src/index.ts","../src/common/card/NsProductCard.tsx","../src/common/card/styles/NsProductCard.Styled.tsx","../src/common/carousel/NsProductCarousel.tsx","../src/common/carousel/NsProductCarousel.styled.ts","../src/common/carousel/ProductTabCarousel.tsx","../src/common/Nav-Category-Navigation/NsCategoryNavigation.tsx","../src/common/Nav-Category-Navigation/NsCategoryNavigation.styled.tsx","../src/common/carousel/ProductTabCarousel.styled.tsx","../src/common/headers/MysiteHero.tsx","../src/common/headers/MysiteHero.styled.tsx","../src/common/icon/icons/PlaceholderImage.tsx","../src/common/icon/icons/ArrowDownIcon.tsx","../src/common/utils/gtmTracking.ts"],"names":["zt","Object","create","ee","defineProperty","Ht","getOwnPropertyDescriptor","$t","getOwnPropertyNames","Dt","getPrototypeOf","At","prototype","hasOwnProperty","se","e","t","exports","Wt","o","get","enumerable","ye","i","a","call","$","__esModule","value","_t","require_ReactPropTypesSecret","__commonJSMin","module","ReactPropTypesSecret","require_factoryWithThrowingShims","emptyFunction","emptyFunctionWithReset","Ge","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","err","Error","name","isRequired","getShim","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","require_prop_types","Je","ReactIs","throwOnDirectAccess","index_exports","__export","MysiteHero","NsCategoryNavigation","NsProductCard","NsProductCard_default","ProductCarousel","ProductCardCarousel","ProductTabCarousel","ProductTabCarousel_default","__toCommonJS","import_react","require","import_foundation_ui_components","import_foundation_theme","PriceComponent","L","styled","ProductCardContainer","isMobile","ImageContainer","bgColor","DefaultImage","ProductTitle","ProductBadgeContainer","AddToCartButton","disabled","isHovered","CartIcon","import_material","import_jsx_runtime","productTitle","imageDetails","className","button","onCardClick","productStatusBadge","directSellerBadge","mySitePriceComponent","testId","Ie","useState","isButtonHovered","setIsButtonHovered","Ne","useMediaQuery","handleImageError","target","noImageFallback","fallbackImage","src","v","jsxs","onClick","tabIndex","children","jsx","onError","imageSrc","Be","NsImage","alt","imageAlt","areaLabel","width","title","showButton","buttonText","stopPropagation","onMouseEnter","onMouseLeave","height","viewBox","fill","xmlns","fillRule","clipRule","d","import_react_slick","import_useMediaQuery","import_Box","SlickContainer","w","_","Box","ScrollableContainer","CardList","ControlsContainer","ViewAllWrapper","$isMobile","ProductCountWrapper","ArrowsWrapper","$isDisabled","Scrollablewrapper","CustomTypography","Fe","NsTypography","ViewAllLink","$disabled","EmptyProductCategories","ControlsHeaderRow","ProductInfoWrapper","CategoryNameWrapper","entries","renderEntry","settings","showControlButtons","allEntryLabel","allEntryLink","categoryName","emptyProductMessage","productsCountLabel","isInitialDataLoading","history","sliderRef","Z","useRef","Ye","prev","useCallback","current","slickPrev","next","slickNext","renderProductEntry","entry","index","h","directSeller","sliderSettings","dots","infinite","speed","slidesToShow","Math","min","length","slidesToScroll","swipe","draggable","arrows","responsive","breakpoint","shouldShowNavigation","renderCarouselContent","map","Ve","Slider","ref","variant","preventDefault","push","qe","NsCarouselControl","viewAllLabel","viewAllUrl","React","import_Tabs","import_Tab","import_prop_types","et","NsCategoryNavigationContainer","tt","div","TabPanel","other","z","role","hidden","id","pe","propTypes","oe","itemArray","controlledValue","onChange","it","internalValue","setInternalValue","rt","at","Tabs","orientation","event","newValue","item","nt","Tab","label","categoryId","findIndex","content","getMinHeight","$hasCategories","ProductTabCarouselContainer","D","TabsContainer","ContentContainer","LoadingContainer","NoTabsContainer","SpinnerContainer","fetchCategories","fetchProducts","showCustomCategory","emptyProductTabs","getCategoryId","categories","mt","k","isLoadingInitialData","setIsLoadingInitialData","setCategories","isCategoriesLoaded","setIsCategoriesLoaded","selectedTab","setSelectedTab","products","setProducts","loading","setLoading","shouldShowSpinner","setShouldShowSpinner","checkForExistingSpinners","existingSpinners","document","querySelectorAll","useEffect","then","data","finally","cat","N","xt","NsSpinner","getContactTextStyles","hasWhiteBackground","fontSize","fontStyle","fontWeight","lineHeight","letterSpacing","color","textDecoration","getSocialTitleStyles","textTransform","paddingLeft","getSocialIconsStyles","display","flexDirection","gap","alignItems","getContactTextMobileStyles","paddingBottom","wordBreak","overflowWrap","getSocialTitleMobileStyles","marginBottom","transition","opacity","transform","MysiteHeroContainer","F","ae","j","bannerProps","isCircularImage","backgroundClip","background","backgroundColor","position","overflow","willChange","backfaceVisibility","top","left","right","boxShadow","paddingTop","justifyContent","fontFamily","headlineFont","padding","objectFit","objectPosition","marginLeft","marginRight","boxSizing","whiteSpace","textOverflow","paragraphFont","WebkitBoxOrient","WebkitLineClamp","MysiteHeroContainerMobile","paddingRight","maxHeight","bottom","pointerEvents","BadgeContainer","Badge","backdropFilter","borderRadius","border","minHeight","ToggleButtonMobile","cursor","margin","StyledSpan","ImgTabIndex","ContactLink","BadgeValue","PlaceholderImage","R","Pt","sx","ArrowDownIcon","xe","trackGTMEvent","eventData","window","url","href","updatedEventData","prefix","includes","dataLayer","console","error","renderImageContent","placeholderClass","n","Q","p","renderBadges","showBadges","expirationDate","totalSavings","badgeClass","renderMobileContent","isScrolled","renderSocialMediaIcons","shopTitle","socialTitleText","email","phone","Typography","component","trim","Fragment","renderContactLink","renderDesktopContent","shopDescription","Tooltip","arrow","checkIfImageIsCircular","Promise","resolve","reject","imageContext","Image","crossOrigin","onload","canvas","createElement","context","getContext","drawImage","isCircular","getImageData","every","corner","Array","slice","onerror","isWhiteOrNearWhite","hex","replace","toLowerCase","test","fullHex","split","char","join","r","Number","parseInt","substring","g","b","threshold","createContactClickHandler","contactType","contactValue","contact_type","contact_value","click_element","onKeyDown","key","globalThis","protocol","handlers","socialIcons","B","setIsScrolled","isDescriptionExpanded","setIsDescriptionExpanded","setHasWhiteBackground","isImageCircular","setIsImageCircular","toggleDescription","debounceTimeout","lastScrollY","scrollY","currentScrollState","isTransitioning","lastUpdateTime","updateScrollState","newState","now","Date","clearTimeout","setTimeout","scrollTo","behavior","handleScroll","currentScrollY","abs","scrollingDown","scrollDownThreshold","scrollUpThreshold","initializeState","initialScrollY","shouldStartCompact","rafId","lastRafTime","throttledScrollHandler","requestAnimationFrame","addEventListener","passive","removeEventListener","cancelAnimationFrame","useMemo","icon","social_platform","type","social_url","open","NsLink","containerClass","getCharacterLimit","innerWidth","shouldShowToggle"],"mappings":"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","sourcesContent":["\"use strict\";var zt=Object.create;var ee=Object.defineProperty;var Ht=Object.getOwnPropertyDescriptor;var $t=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var se=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Wt=(e,t)=>{for(var o in t)ee(e,o,{get:t[o],enumerable:!0})},ye=(e,t,o,i)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let a of $t(t))!At.call(e,a)&&a!==o&&ee(e,a,{get:()=>t[a],enumerable:!(i=Ht(t,a))||i.enumerable});return e};var $=(e,t,o)=>(o=e!=null?zt(Dt(e)):{},ye(t||!e||!e.__esModule?ee(o,\"default\",{value:e,enumerable:!0}):o,e)),_t=e=>ye(ee({},\"__esModule\",{value:!0}),e);var Ge=se((vo,Ze)=>{\"use strict\";var Ot=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\";Ze.exports=Ot});var Je=se((ko,Ke)=>{\"use strict\";var Vt=Ge();function Qe(){}function Ue(){}Ue.resetWarningCache=Qe;Ke.exports=function(){function e(i,a,l,r,d,s){if(s!==Vt){var c=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw c.name=\"Invariant Violation\",c}}e.isRequired=e;function t(){return e}var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Ue,resetWarningCache:Qe};return o.PropTypes=o,o}});var et=se((Po,Xe)=>{\"use strict\";Xe.exports=Je()();var So,To});var Xt={};Wt(Xt,{MysiteHero:()=>he,NsCategoryNavigation:()=>ie,NsProductCard:()=>te,ProductCarousel:()=>G,ProductTabCarousel:()=>ht});module.exports=_t(Xt);var Ie=require(\"react\"),Be=require(\"@nuskin/foundation-ui-components\");var L=require(\"@nuskin/foundation-theme\"),we=(0,L.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 5px;\n`,Ce=(0,L.styled)(\"button\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n width: 240px;\n height: ${e=>e.isMobile?\"410px\":\"513px\"};\n overflow: hidden;\n cursor: pointer;\n border: 1px solid #ededed;\n background: var(--color-primary-n-10-primary-white, #fff);\n`,ve=(0,L.styled)(\"div\")`\n width: '240px';\n height: '240px';\n background: ${e=>e.bgColor??\"#f5f5f5\"};\n border-radius: 8px;\n overflow: hidden;\n margin-bottom: 0;\n display: flex;\n align-items: normal;\n justify-content: center;\n position: relative;\n @media (max-width: 560px) {\n width: 200px;\n height: 200px;\n align-items: unset;\n }\n`,ke=(0,L.styled)(\"img\")`\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 8px;\n display: block;\n`,Se=(0,L.styled)(\"div\")`\n width: 200px;\n margin-top: 16px;\n max-height: 66px;\n text-align: left;\n font-size: 16px;\n font-family: 'Inter', sans-serif;\n font-weight: 400;\n line-height: 22px;\n overflow: hidden;\n color: #666;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n @media (max-width: 560px) {\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n margin-top: 5px;\n max-height: 54px;\n line-height: 18px;\n }\n`,de=(0,L.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 12px;\n @media (max-width: 560px) {\n margin-bottom: 8px;\n }\n`,Te=(0,L.styled)(\"button\")`\n width: 200px;\n height: 40px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 10px;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0.14px;\n text-transform: none;\n justify-content: flex-start;\n padding-left: 31px;\n overflow: hidden;\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n text-overflow: ellipsis;\n margin-top: 8px;\n margin-bottom: 10px;\n -webkit-appearance: none;\n -webkit-tap-highlight-color: transparent;\n\n color: ${e=>e.disabled?\"#999\":\"#fff\"};\n background-color: ${e=>e.disabled?\"#e0e0e0\":!e.isMobile&&e.isHovered?\"#888\":\"#000\"};\n border: ${e=>e.disabled?\"1px solid #ccc\":\"none\"};\n cursor: ${e=>e.disabled?\"not-allowed\":\"pointer\"};\n opacity: ${e=>e.disabled?.6:1};\n transition: ${e=>e.isMobile?\"none\":\"all 0.3s ease\"};\n\n @media (max-width: 560px) {\n margin: 5px 0;\n }\n`,Pe=(0,L.styled)(\"span\")`\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n display: inline-block;\n background: none;\n transition: all 0.3s ease;\n opacity: ${e=>e.disabled?.5:1};\n`;var Ne=require(\"@mui/material\"),v=require(\"react/jsx-runtime\"),jt=({productTitle:e,imageDetails:t,className:o,button:i,onCardClick:a,productStatusBadge:l,directSellerBadge:r,mySitePriceComponent:d,testId:s})=>{let[c,u]=(0,Ie.useState)(!1),b=(0,Ne.useMediaQuery)(\"(max-width: 560px)\"),m=C=>{let M=C.target,P=t?.fallbackImage;P&&M.src!==P&&(M.src=P)};return(0,v.jsxs)(Ce,{className:o,onClick:a,tabIndex:0,\"data-testid\":\"product-card\",isMobile:b,children:[(0,v.jsx)(ve,{bgColor:t?.bgColor,onError:m,children:t?.imageSrc?(0,v.jsx)(Be.NsImage,{\"data-testid\":s??\"test-product-image\",className:t.className??\"\",src:t.imageSrc,alt:t.imageAlt,\"aria-label\":t.areaLabel??t.imageAlt,width:\"100%\"}):(0,v.jsx)(ke,{alt:\"\"})}),(0,v.jsx)(Se,{title:e,\"data-testid\":\"product-title\",children:e}),r&&(0,v.jsx)(de,{children:r}),(0,v.jsx)(de,{children:l}),(0,v.jsx)(we,{children:d}),i?.showButton&&(0,v.jsxs)(Te,{tabIndex:0,\"aria-roledescription\":\":\",\"aria-label\":i.buttonText||\"ADD TO CART\",\"data-testid\":\"add-to-cart-button\",disabled:i?.disabled??!1,isMobile:b,isHovered:c,onClick:C=>{C.stopPropagation(),i?.disabled||i.onClick?.()},onMouseEnter:()=>{!b&&!i?.disabled&&u(!0)},onMouseLeave:()=>{b||u(!1)},children:[(0,v.jsx)(Pe,{className:\"cart-icon\",disabled:i?.disabled,children:(0,v.jsx)(\"svg\",{width:\"24\",height:\"22\",viewBox:\"0 0 24 22\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,v.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M0 1.86358C0 1.26109 0.488416 0.772675 1.09091 0.772675H3.48173C4.51054 0.772675 5.39955 1.49136 5.61511 2.49733L5.71309 2.95456H22.9091C23.245 2.95456 23.5622 3.10933 23.7689 3.37411C23.9757 3.63889 24.0489 3.98415 23.9674 4.31005L22.4053 10.5583C21.9197 12.5009 20.1743 13.8636 18.172 13.8636H8.05068L8.28444 14.9546H20.7273C21.3298 14.9546 21.8182 15.443 21.8182 16.0455C21.8182 16.648 21.3298 17.1364 20.7273 17.1364H19.6364H8.18182H7.40252C6.88811 17.1364 6.4436 16.777 6.33582 16.274L3.76449 4.27405L3.48173 2.95449H1.09091C0.488416 2.95449 0 2.46608 0 1.86358ZM8.18182 17.1364C6.97683 17.1364 6 18.1132 6 19.3182C6 20.5232 6.97683 21.5 8.18182 21.5C9.3868 21.5 10.3636 20.5232 10.3636 19.3182C10.3636 18.1132 9.3868 17.1364 8.18182 17.1364ZM19.6364 17.1364C18.4314 17.1364 17.4545 18.1132 17.4545 19.3182C17.4545 20.5232 18.4314 21.5 19.6364 21.5C20.8413 21.5 21.8182 20.5232 21.8182 19.3182C21.8182 18.1132 20.8413 17.1364 19.6364 17.1364ZM7.58317 11.6818H18.172C19.1732 11.6818 20.0459 11.0005 20.2887 10.0292L21.5119 5.13638H6.18062L7.58317 11.6818Z\",fill:i?.disabled?\"#999\":\"#ffffff\"})})}),i.buttonText||\"ADD TO CART\"]})]})},te=jt;var Z=require(\"react\"),Ve=$(require(\"react-slick\")),Ye=$(require(\"@mui/material/useMediaQuery\"));var qe=require(\"@nuskin/foundation-ui-components\");var w=require(\"@nuskin/foundation-theme\"),_=$(require(\"@mui/material/Box\")),Fe=require(\"@nuskin/foundation-ui-components\"),Re=(0,w.styled)(_.default)`\n padding: 30px 0 60px;\n width: 100%;\n margin: auto;\n margin-top: 50px;\n position: relative;\n\n .slick-list {\n padding-left: 24px;\n padding-right: 24px;\n }\n .slick-slide {\n display: flex;\n justify-content: center;\n padding: 0 12px;\n box-sizing: border-box;\n }\n .slick-prev,\n .slick-next {\n display: none !important;\n }\n\n @media (max-width: 1200px) {\n max-width: 1024px;\n .slick-list {\n padding-left: 12px;\n padding-right: 12px;\n }\n .slick-slide {\n padding: 0 6px;\n }\n }\n @media (max-width: 700px) {\n max-width: 100vw;\n padding: 10px 0 50px;\n .slick-list {\n padding-left: 4px;\n padding-right: 4px;\n }\n .slick-slide {\n padding: 0 2px;\n }\n }\n @media (max-width: 560px) {\n padding: 10px 0 10px;\n margin-top: 25px;\n }\n`,Me=(0,w.styled)(\"div\")`\n overflow-x: auto;\n display: flex;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n gap: 16px;\n padding: 0 8px 16px;\n width: 100%;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #007bff;\n border-radius: 10px;\n }\n`,Ee=(0,w.styled)(\"div\")`\n display: flex;\n scroll-snap-align: start;\n justify-content: center;\n gap: 15px;\n`,Le=(0,w.styled)(_.default)`\n position: absolute;\n bottom: calc(100% + 1px);\n right: 1px;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n`,ze=(0,w.styled)(_.default)`\n display: flex;\n align-items: center;\n margin-left: auto;\n margin-right: ${({$isMobile:e})=>e?0:\"24px\"};\n\n @media (max-width: 560px) {\n margin-left: 0;\n order: 2;\n }\n`,He=(0,w.styled)(_.default)`\n display: none;\n\n @media (max-width: 560px) {\n color: #666666;\n font-family: Inter;\n font-size: 14px !important;\n font-style: normal;\n font-weight: 600;\n line-height: 18px;\n display: flex;\n align-items: center;\n order: 1;\n }\n`,$e=(0,w.styled)(_.default)`\n display: flex;\n align-items: center;\n opacity: ${({$isDisabled:e})=>e?.3:1};\n pointer-events: ${({$isDisabled:e})=>e?\"none\":\"auto\"};\n transition: opacity 0.3s ease;\n\n .carousal-prev-button,\n .carousal-next-button {\n transition: all 0.3s ease;\n border: 2px solid #000000;\n border-radius: 3px;\n padding: 9px;\n cursor: pointer;\n\n svg {\n transition: all 0.3s ease;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n\n &:hover {\n background-color: #f5f5f5;\n border: 2px solid #ddd;\n\n svg {\n opacity: 0.5;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n }\n }\n\n @media (max-width: 560px) {\n display: none;\n }\n`,go=(0,w.styled)(\"div\")`\n @media (max-width: 560px) {\n overflow-y: hidden;\n scrollbar-width: thin;\n scrollbar-color: #007bff #eee;\n &::-webkit-scrollbar {\n width: 8px;\n }\n &::-webkit-scrollbar-track {\n background: #eee;\n }\n &::-webkit-scrollbar-thumb {\n background-color: red;\n border-radius: 8px;\n border: 2px solid #eee;\n }\n }\n`,De=(0,w.styled)(Fe.NsTypography)`\n color: #666666;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 22px;\n @media (max-width: 560px) {\n margin: 0 3px;\n }\n`,Ae=(0,w.styled)(\"a\")`\n color: ${({$disabled:e})=>e?\"#999999\":\"#000000\"};\n font-family: Inter, sans-serif;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 22px;\n text-decoration: none;\n border-bottom: 1px solid ${({$disabled:e})=>e?\"#999999\":\"#000000\"};\n padding-bottom: 4px;\n transition: all 0.3s ease;\n cursor: ${({$disabled:e})=>e?\"not-allowed\":\"pointer\"};\n pointer-events: ${({$disabled:e})=>e?\"none\":\"auto\"};\n opacity: ${({$disabled:e})=>e?.5:1};\n\n @media (max-width: 560px) {\n font-size: 14px;\n line-height: 18px;\n }\n\n &:hover {\n color: ${({$disabled:e})=>e?\"#999999\":\"#666666\"};\n border-bottom: 1px solid ${({$disabled:e})=>e?\"#999999\":\"#666666\"};\n cursor: ${({$disabled:e})=>e?\"not-allowed\":\"pointer\"};\n }\n`,We=(0,w.styled)(\"div\")`\n padding-top: 20px;\n font-size: 20px;\n text-align: center;\n`,_e=(0,w.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,je=(0,w.styled)(\"div\")`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n`,Oe=(0,w.styled)(\"div\")`\n font-family: 'Lora';\n font-weight: 400;\n font-size: 22px;\n margin-left: 16px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 13px;\n`;var h=require(\"react/jsx-runtime\");function G({entries:e,renderEntry:t,settings:o={},showControlButtons:i=!0,allEntryLabel:a=\"View All\",allEntryLink:l=\"\",categoryName:r,emptyProductMessage:d=\"No Products Available For The Selected Category\",productsCountLabel:s=\"Products\",isInitialDataLoading:c,history:u}){let b=(0,Z.useRef)(null),m=(0,Ye.default)(\"(max-width: 560px)\"),C=(0,Z.useCallback)(()=>{b.current?.slickPrev()},[]),M=(0,Z.useCallback)(()=>{b.current?.slickNext()},[]),P=t??((g,S)=>(0,h.jsx)(te,{productTitle:g.productTitle,imageDetails:g.imageDetails,button:g.button,onCardClick:g.onCardClick,productStatusBadge:g.productStatusBadge,directSellerBadge:g.directSeller,mySitePriceComponent:g.mySitePriceComponent},`${g.productTitle}-${S}`)),I={dots:!0,infinite:!0,speed:500,slidesToShow:Math.min(e?.length??0,4),slidesToScroll:4,swipe:!0,draggable:!0,arrows:!0,responsive:[{breakpoint:1320,settings:{slidesToShow:Math.min(e?.length??0,3),slidesToScroll:3}},{breakpoint:900,settings:{slidesToShow:Math.min(e?.length??0,2),slidesToScroll:2}},{breakpoint:600,settings:{slidesToShow:1,slidesToScroll:1,arrows:!1}}],...o},H=(e?.length??0)>I.slidesToShow,A=()=>e?.length===0&&!c?(0,h.jsx)(We,{children:d}):m?(0,h.jsx)(Me,{children:(0,h.jsx)(Ee,{children:e.map((g,S)=>g&&P(g,S))})}):(0,h.jsx)(Ve.default,{...I,ref:b,children:e.map((g,S)=>g&&P(g,S))});return(0,h.jsxs)(Re,{children:[i&&(0,h.jsxs)(Le,{children:[(0,h.jsxs)(_e,{children:[(0,h.jsxs)(je,{children:[(0,h.jsx)(He,{children:(0,h.jsxs)(De,{variant:\"body-m\",children:[e?.length??0,\" \",s]})}),!m&&r&&(0,h.jsx)(Oe,{children:r})]}),(0,h.jsx)(ze,{$isMobile:m,children:(0,h.jsx)(Ae,{$disabled:(e?.length??0)===0,onClick:g=>{g.preventDefault(),(e?.length??0)>0&&u&&u.push(l)},children:a})})]}),!m&&(0,h.jsx)($e,{$isDisabled:!H,children:(0,h.jsx)(qe.NsCarouselControl,{prev:C,next:M,viewAllLabel:\"\",viewAllUrl:\"\"})})]}),A()]})}var k=require(\"react\"),mt=require(\"@mui/material\");var it=$(require(\"react\")),at=$(require(\"@mui/material/Tabs\")),nt=$(require(\"@mui/material/Tab\")),pe=$(require(\"@mui/material/Box\")),oe=$(et());var tt=require(\"@nuskin/foundation-theme\"),ot=tt.styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n height: 100%;\n background-color: #fff;\n .tabsStyle {\n display: flex;\n padding-top: 8.533px;\n flex-direction: column;\n align-items: flex-start;\n gap: 12.8px;\n border-right: 1px;\n border-color: divider;\n width: 200px;\n & .Mui-selected {\n font-weight: 700;\n font-size: 14px;\n font-family: 'inter', sans-serif;\n font-style: normal;\n font-height: 20px;\n border-radius: 4px;\n }\n & .MuiTabs-indicator {\n left: 0;\n background-color: #5b81a5;\n color: #5b81a5;\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .tabContainer {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n min-width: 100%;\n background-color: #fff;\n @media (max-width: 768px) {\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n }\n\n .tabStyle {\n align-items: flex-start;\n display: flex;\n text-align: left;\n font-size: 14px;\n font-family: 'inter' sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n min-height: 20px;\n padding: 1px;\n padding-left: 10px;\n margin-bottom: 10px;\n cursor: pointer;\n text-transform: none;\n }\n @media (max-width: 768px) {\n flex-direction: row;\n\n .tabsStyle {\n width: 100%;\n border-right: none;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-top: 0px;\n }\n\n .tabStyle {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 70px;\n padding: 8px 16px;\n text-align: center;\n margin: 4px;\n background-color: #fff;\n cursor: pointer;\n color: black;\n font-family: Inter;\n font-style: normal;\n font-weight: 600;\n line-height: 20px;\n }\n\n .tabStyle.Mui-selected {\n background-color: #5b81a5;\n color: #ffffff !important;\n font-weight: 700;\n border-radius: 70px;\n }\n }\n .tabPanel {\n padding: 8px;\n text-align: left;\n }\n`;var rt=require(\"@mui/material\"),z=require(\"react/jsx-runtime\");function lt(e){let{children:t,value:o,index:i,...a}=e;return(0,z.jsx)(\"div\",{role:\"tabpanel\",hidden:o!==i,id:`vertical-tabpanel-${i}`,\"aria-labelledby\":`vertical-tab-${i}`,...a,children:o===i&&(0,z.jsx)(pe.default,{className:\"tabPanel\",children:t})})}lt.propTypes={children:oe.default.node,index:oe.default.number.isRequired,value:oe.default.number.isRequired};var ie=({itemArray:e,value:t,onChange:o})=>{let[i,a]=it.useState(0),l=(0,rt.useMediaQuery)(\"(max-width:768px)\"),r=t??i;return(0,z.jsx)(ot,{children:(0,z.jsxs)(pe.default,{className:\"tabContainer\",children:[(0,z.jsx)(at.default,{orientation:l?\"horizontal\":\"vertical\",variant:\"scrollable\",value:r,onChange:(s,c)=>{o?o(s,c):a(c)},\"aria-label\":\"Vertical tabs example\",className:\"tabsStyle\",children:e.map(s=>(0,z.jsx)(nt.default,{label:s.label,className:\"tabStyle\"},s.categoryId))}),e.map(s=>(0,z.jsx)(lt,{value:r,index:e.findIndex(c=>c.categoryId===s.categoryId),children:s.content},s.categoryId))]})})};var xt=require(\"@nuskin/foundation-ui-components\");var D=require(\"@nuskin/foundation-theme\"),Yt=({isMobile:e,$hasCategories:t})=>e?\"auto\":t?\"800px\":\"auto\",st=(0,D.styled)(\"div\")`\n display: flex;\n flex-direction: ${({isMobile:e})=>e?\"column\":\"row\"};\n align-items: ${({isMobile:e})=>e?\"stretch\":\"flex-start\"};\n width: 100%;\n max-width: 1920px;\n min-height: ${Yt};\n margin: 0 auto;\n box-sizing: border-box;\n overflow: visible;\n background: #fff;\n padding: ${({isMobile:e})=>e?\"10px 16px 0px 16px\":\"50px 60px 0px 60px\"};\n\n @media (max-width: 768px) {\n padding: 10px 16px 0px 16px;\n min-height: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n padding: 30px 40px 0px 40px;\n gap: 20px;\n }\n\n transform: translateZ(0);\n will-change: auto;\n`,dt=(0,D.styled)(\"div\")`\n min-width: ${({isMobile:e})=>e?\"100%\":\"auto\"};\n height: ${({isMobile:e})=>e?\"auto\":\"100%\"};\n flex-shrink: 0;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n\n overflow-x: auto;\n overflow-y: visible;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-width: 200px;\n margin-right: 20px;\n }\n`,pt=(0,D.styled)(\"div\")`\n flex: 1;\n min-width: 0;\n height: ${({isMobile:e})=>e?\"auto\":\"100%\"};\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n min-height: 300px;\n\n -webkit-overflow-scrolling: touch;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-height: 400px;\n }\n\n contain: layout style paint;\n transform: translateZ(0);\n`,Mo=(0,D.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n padding: 20px;\n\n @media (max-width: 768px) {\n min-height: 150px;\n padding: 16px;\n }\n`,ct=(0,D.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 40px 20px;\n color: #666;\n font-size: 16px;\n\n @media (max-width: 768px) {\n padding: 20px 16px;\n font-size: 14px;\n }\n`,gt=(0,D.styled)(\"div\")`\n padding: 10px;\n display: flex;\n justify-content: center;\n`;var N=require(\"react/jsx-runtime\"),qt=({allEntryLabel:e,allEntryLink:t,renderEntry:o,settings:i,showControlButtons:a=!0,fetchCategories:l,fetchProducts:r,showCustomCategory:d=!1,emptyProductTabs:s=\"No tabs available\",emptyProductMessage:c,productsCountLabel:u,getCategoryId:b,history:m})=>{let C=(0,mt.useMediaQuery)(\"(max-width:768px)\"),[M,P]=(0,k.useState)(!0),[I,H]=(0,k.useState)([]),[A,g]=(0,k.useState)(!1),[S,le]=(0,k.useState)(0),[U,K]=(0,k.useState)([]),[W,O]=(0,k.useState)(!1),[J,y]=(0,k.useState)(!0),T=(0,k.useCallback)(()=>{let x=document.querySelectorAll('[data-testid*=\"spinner\"], .ns-spinner, [class*=\"spinner\"]');y(x.length===0)},[]);(0,k.useEffect)(()=>{W&&T()},[W,T]),(0,k.useEffect)(()=>{l().then(x=>{H(x),g(!0)})},[l]),(0,k.useEffect)(()=>{if(A)if(I.length>0){let x=I[S]?.categoryId;b&&b(x),O(!0),r(x).then(K).finally(()=>{O(!1),P(!1)})}else O(!1)},[I,S,r,A]);let E=I.map(x=>({label:x.label,content:\"\",categoryId:x.categoryId}));return(0,N.jsxs)(st,{isMobile:C,$hasCategories:I.length>0,children:[d&&(E.length>0?(0,N.jsx)(dt,{isMobile:C,children:(0,N.jsx)(ie,{itemArray:E,value:S,onChange:(x,V)=>le(V)})}):(0,N.jsx)(ct,{children:s})),(0,N.jsx)(pt,{isMobile:C,children:W?(0,N.jsx)(gt,{children:J&&(0,N.jsx)(xt.NsSpinner,{})}):(0,N.jsx)(G,{isInitialDataLoading:M,entries:U,allEntryLabel:e,allEntryLink:t,renderEntry:o?x=>o({...x,productStatusBadge:x.productStatusBadge}):void 0,settings:i,showControlButtons:a,categoryName:I[S]?.label,emptyProductMessage:c,productsCountLabel:u,history:m})})]})},ht=qt;var B=require(\"react\"),p=require(\"@mui/material\"),Q=require(\"@nuskin/foundation-ui-components\");var F=require(\"@nuskin/foundation-theme\"),j=require(\"@mui/material\"),ae=require(\"react/jsx-runtime\"),ce=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"600\",lineHeight:\"16px\",letterSpacing:\"0.12px\",color:e?\"#000000\":\"#FFFFFF\",\"& a\":{color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}}),ft=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"700\",lineHeight:\"16px\",letterSpacing:\"0.48px\",color:e?\"#000000\":\"#FFFFFF\",textTransform:\"uppercase\",paddingLeft:\"5px\"}),ut=()=>({display:\"flex\",flexDirection:\"row\",gap:\"10px\",alignItems:\"center\"}),bt=e=>({...ce(e),paddingBottom:\"11px\",wordBreak:\"break-all\",overflowWrap:\"break-word\",paddingLeft:\"5px\",\"& a\":{color:\"inherit\",textDecoration:\"none\"},\"@media (max-width: 420px)\":{fontSize:\"11px\",lineHeight:\"15px\",paddingBottom:\"8px\"},\"@media (max-width: 400px)\":{fontSize:\"10px\",lineHeight:\"14px\",paddingBottom:\"6px\"},\"@media (max-width: 375px)\":{fontSize:\"8px\",lineHeight:\"12px\",paddingBottom:\"4px\"}}),Zt=e=>({...ft(e),marginBottom:\"11px\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\",\"@media (max-width: 420px)\":{fontSize:\"11px\",lineHeight:\"14px\",marginBottom:\"8px\"},\"@media (max-width: 400px)\":{fontSize:\"10px\",lineHeight:\"12px\",marginBottom:\"5px\"},\"@media (max-width: 375px)\":{fontSize:\"8px\",lineHeight:\"11px\",marginBottom:\"4px\"}}),yt=(0,F.styled)(e=>(0,ae.jsx)(j.Box,{...e}))(({bannerProps:e,isCircularImage:t,hasWhiteBackground:o})=>({backgroundClip:\"border-box\",display:\"flex\",background:e?.backgroundColor??\"#383838\",position:\"relative\",overflow:\"hidden\",width:\"100%\",height:\"auto\",flexDirection:\"row\",alignItems:\"center\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"transform, opacity\",transform:\"translateZ(0)\",backfaceVisibility:\"hidden\",\"&.scrolled\":{top:0,left:0,right:0,boxShadow:\"0 2px 8px rgba(0,0,0,0.2)\",\".content\":{paddingTop:\"0\",justifyContent:\"center\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".body-title\":{fontSize:\"26px\",lineHeight:\"34px\",marginBottom:\"0\",fontStyle:\"normal\",fontWeight:\"400\",fontFamily:e?.headlineFont??\"Lora\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".bg-image\":{width:\"90px\",height:\"90px\",padding:t?\"2px\":\"0px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",objectFit:\"cover\",objectPosition:\"center\"},\".placeholder-image\":{\"& > div\":{width:\"90px\",height:\"90px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"}}},\".content\":{width:\"70%\",height:\"100%\",marginLeft:\"2%\",marginRight:\"auto\",display:\"flex\",flexDirection:\"column\",position:\"relative\",boxSizing:\"border-box\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".bg-image\":{width:\"252px\",height:\"252px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",padding:t?\"3px\":\"0px\",objectFit:\"cover\",objectPosition:\"center\"},\".placeholder-image\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",\"& > div\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"}},\".body-title\":{fontSize:\"32px\",lineHeight:\"38px\",marginBottom:\"8px\",fontWeight:\"400\",color:o?\"#000000\":\"#FFFFFF\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\",fontFamily:e?.headlineFont??\"Lora\",paddingLeft:\"5px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".body-text\":{fontSize:\"16px\",marginBottom:\"12px\",fontStyle:\"normal\",fontWeight:\"400\",lineHeight:\"22px\",color:o?\"#000000\":\"#FFFFFF\",fontFamily:e?.paragraphFont??\"inherit\",display:\"-webkit-box\",WebkitBoxOrient:\"vertical\",overflow:\"hidden\",WebkitLineClamp:3,textOverflow:\"ellipsis\",paddingLeft:\"5px\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\"},\".social-media\":{display:\"flex\",flexDirection:\"column\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\"},\".email-text\":ce(o),\".phone-text\":ce(o),\".social-title-text\":{...ft(o),marginBottom:\"8px\"},\".social-icons\":{...ut(),paddingBottom:\"8px\"}})),wt=(0,F.styled)(e=>(0,ae.jsx)(j.Box,{...e}))(({bannerProps:e,isCircularImage:t,hasWhiteBackground:o})=>({backgroundClip:\"border-box\",display:\"flex\",background:e?.backgroundColor??\"#383838\",position:\"relative\",overflow:\"hidden\",width:\"100%\",flexDirection:\"column\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"transform, opacity\",transform:\"translateZ(0)\",backfaceVisibility:\"hidden\",\"&.scrolled\":{top:0,left:0,right:0,boxShadow:\"0 2px 8px rgba(0,0,0,0.2)\",\".content-mobile\":{paddingTop:\"5px\",width:\"60%\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".body-title-mobile\":{fontSize:\"18px\",lineHeight:\"28px\",marginBottom:\"0\",fontStyle:\"normal\",fontWeight:\"400\",fontFamily:e?.headlineFont??\"Lora\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".bg-image-mobile\":{width:\"75px\",height:\"75px\",padding:t?\"2px\":\"0px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",objectFit:\"cover\",objectPosition:\"center\"},\".placeholder-image-mobile\":{\"& > div\":{width:\"75px !important\",height:\"75px !important\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"}}},\".image-content-mobile\":{display:\"flex\",flexDirection:\"row\",width:\"100%\",justifyContent:\"center\",alignItems:\"center\"},\".content-mobile\":{width:\"55%\",height:\"100%\",paddingTop:\"10px\",paddingRight:\"10px\",marginLeft:\"8px\",marginRight:\"auto\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",position:\"relative\",boxSizing:\"border-box\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\"@media (max-width: 420px)\":{paddingTop:\"8px\",width:\"100%\"},\"@media (max-width: 400px)\":{paddingTop:\"6px\",width:\"100%\",height:\"100%\"},\"@media (max-width: 375px)\":{paddingTop:\"4px\",width:\"100%\",height:\"100%\"}},\".bg-image-mobile\":{width:\"144px\",height:\"144px\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",objectFit:\"cover\",objectPosition:\"center\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",padding:t?\"2px\":\"0px\",\"@media (max-width: 420px)\":{width:\"120px\",height:\"120px\"},\"@media (max-width: 400px)\":{width:\"112px\",height:\"112px\"},\"@media (max-width: 375px)\":{width:\"90px\",height:\"90px\"}},\".placeholder-image-mobile\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",\"& > div\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",width:\"144px\",height:\"144px\",\"@media (max-width: 420px)\":{width:\"120px\",height:\"120px\"},\"@media (max-width: 400px)\":{width:\"110px !important\",height:\"110px !important\"},\"@media (max-width: 375px)\":{width:\"90px\",height:\"90px\"}}},\".body-title-mobile\":{fontSize:\"22px\",lineHeight:\"28px\",marginBottom:\"13px\",fontWeight:\"400\",color:o?\"#000000\":\"#FFFFFF\",fontStyle:\"normal\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\",fontFamily:e?.headlineFont??\"Lora\",paddingLeft:\"5px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\"@media (max-width: 420px)\":{fontSize:\"16px\",lineHeight:\"24px\",marginBottom:\"8px\"},\"@media (max-width: 400px)\":{fontSize:\"16px\",lineHeight:\"22px\",marginBottom:\"6px\"},\"@media (max-width: 375px)\":{fontSize:\"14px\",lineHeight:\"20px\",marginBottom:\"4px\"}},\".body-text-mobile\":{fontSize:\"14px\",padding:\"20px 25px 20px 25px\",fontStyle:\"normal\",fontWeight:\"400\",lineHeight:\"20px\",color:\"#252525\",backgroundColor:\"#E0E0E0\",fontFamily:e?.paragraphFont??\"inherit\",transition:\"all 0.25s cubic-bezier(0.4, 0, 0.2, 1)\",opacity:1,transform:\"translateY(0)\"},\".expandable-description-mobile\":{backgroundColor:\"#E0E0E0\",position:\"relative\"},\".description-content-mobile\":{fontSize:\"14px\",padding:\"10px 15px\",fontStyle:\"normal\",fontWeight:\"400\",lineHeight:\"20px\",color:\"#252525\",fontFamily:e?.paragraphFont??\"inherit\",transition:\"max-height 0.3s ease-in-out, opacity 0.3s ease-in-out\",overflow:\"hidden\",position:\"relative\",\"&.collapsed\":{maxHeight:\"50px\",display:\"-webkit-box\",WebkitLineClamp:2,WebkitBoxOrient:\"vertical\",\"&::after\":{content:'\"\"',position:\"absolute\",bottom:0,left:0,right:0,height:\"20px\",background:\"linear-gradient(transparent, rgba(224, 224, 224, 0.8), #E0E0E0)\",pointerEvents:\"none\"}},\"&.expanded\":{maxHeight:\"none\",whiteSpace:\"normal\",display:\"block\",\"&::after\":{display:\"none\"}}},\".email-text-mobile\":bt(o),\".phone-text-mobile\":bt(o),\".social-title-text-mobile\":Zt(o),\".social-icons-mobile\":{...ut(),paddingBottom:\"10px\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\",\"& img\":{width:\"24px\",height:\"24px\",\"@media (max-width: 400px)\":{width:\"20px\",height:\"20px\"},\"@media (max-width: 375px)\":{width:\"18px\",height:\"18px\"}},\"@media (max-width: 420px)\":{paddingBottom:\"8px\"},\"@media (max-width: 400px)\":{paddingBottom:\"4px\"},\"@media (max-width: 375px)\":{paddingBottom:\"3px\"}}})),Ct=(0,F.styled)(j.Box)({display:\"flex\",gap:\"12px\",marginBottom:\"16px\",paddingLeft:\"5px\",\"&.mobile-badges\":{flexDirection:\"column\",gap:\"8px\",marginBottom:\"12px\"},\"&.tablet-badges\":{flexDirection:\"row\",gap:\"12px\",marginBottom:\"8px\"}}),ge=(0,F.styled)(e=>(0,ae.jsx)(j.Box,{...e}))(({hasWhiteBackground:e})=>({backgroundColor:\"rgba(255, 255, 255, 0.2)\",backdropFilter:\"blur(10px)\",borderRadius:\"20px\",padding:\"8px 16px\",display:\"flex\",alignItems:\"center\",gap:\"4px\",border:\"1px solid rgba(255, 255, 255, 0.3)\",transition:\"all 0.3s ease\",\"&.mobile-badge\":{padding:\"6px 12px\",borderRadius:\"16px\",fontSize:\"12px\"},\"&.tablet-badge\":{padding:\"8px 16px\",borderRadius:\"20px\",fontSize:\"14px\"},\"&.total-savings-badge\":{backgroundColor:\"#4A6987\",border:\"none\",borderRadius:\"8px\",padding:\"8px 16px\",gap:\"4px\",minHeight:\"32px\",backdropFilter:\"none\",\".badge-value\":{color:\"#FFFFFF\"},\"&:hover\":{backgroundColor:\"#4A6987\",transform:\"none\",boxShadow:\"none\"}},\"&.expiration-badge\":{borderRadius:\"8px\",padding:\"8px 16px\",gap:\"4px\",minHeight:\"32px\"},\"&:hover\":{backgroundColor:\"rgba(255, 255, 255, 0.3)\",transform:\"translateY(-1px)\",boxShadow:\"0 4px 12px rgba(0, 0, 0, 0.1)\"},\".badge-text\":{color:e?\"#000000\":\"#FFFFFF\",fontWeight:\"400\",opacity:.9},\".badge-value\":{color:e?\"#000000\":\"#FFFFFF\",fontWeight:\"600\"}})),vt=(0,F.styled)(\"button\")({backgroundColor:\"#E0E0E0\",border:\"1px solid #252525\",borderRadius:\"10px\",cursor:\"pointer\",width:\"40px\",height:\"20px\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",margin:\"10px auto 5px auto\",transition:\"all 0.2s ease\",\"& .arrow-icon-mobile\":{transition:\"transform 0.3s ease\",\"&.expanded\":{transform:\"rotate(180deg)\"}}}),kt=(0,F.styled)(j.Box)`\n background: none;\n border: 2px solid transparent;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n transition: all 0.3s ease;\n\n &:hover {\n transform: scale(1.1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n &:focus,\n &:focus-within {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\n }\n\n &:hover svg {\n fill: #ffffff;\n }\n`,St=(0,F.styled)(\"span\")`\n line-height: 0.5;\n`,Tt=(0,F.styled)(\"a\")({fontSize:\"inherit\",fontFamily:\"inherit\",fontWeight:\"inherit\",lineHeight:\"inherit\",letterSpacing:\"inherit\",color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}),me=(0,F.styled)(\"span\")({});var Pt=require(\"@mui/material\"),R=require(\"react/jsx-runtime\"),It=({width:e,height:t,backgroundColor:o})=>(0,R.jsx)(Pt.Box,{sx:{width:e,height:t,display:\"flex\",justifyContent:\"center\",alignItems:\"center\",backgroundColor:o},\"data-testid\":\"placeholder-image\",children:(0,R.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"128\",height:\"129\",viewBox:\"0 0 128 129\",fill:\"none\",children:(0,R.jsxs)(\"g\",{id:\"ns_logomark\",children:[(0,R.jsx)(\"path\",{id:\"Vector\",d:\"M127.495 52.1946C125.663 47.9538 122.999 44.1171 119.661 40.9073C112.565 34.2835 102.562 31.7037 93.1175 34.0622C83.6733 36.4206 76.0882 43.3926 72.991 52.5619C71.4142 56.8414 70.6063 61.3627 70.6039 65.9196C70.6039 85.8227 70.6039 105.737 70.6039 125.662C70.6039 129.001 70.6039 129.001 66.9051 128.834C66.9051 128.2 66.9051 127.499 66.9051 126.831C66.9051 104.323 66.9051 81.8263 66.9051 59.3409C66.3415 45.3064 74.9302 32.5039 88.1888 27.6164C89.79 27.0612 91.4307 26.6259 93.0981 26.314C94.7114 25.98 96.4605 25.8465 98.0738 25.6461C96.0231 16.3291 78.9419 5.60953 65.0889 4.97504C50.3084 4.62252 36.6074 12.6365 29.7509 25.6461C31.331 25.8465 32.8779 25.9466 34.3569 26.2138C48.0999 28.544 58.7086 39.4998 60.5168 53.2298C60.8904 55.7285 61.0812 58.2508 61.0877 60.7769C61.0877 82.7507 61.0877 104.724 61.0877 126.697C61.0877 128.434 60.6842 129.169 58.8016 128.968C56.9183 128.768 57.1204 128.2 57.1204 126.965C57.1204 119.985 57.1204 113.006 57.1204 105.993C57.1204 92.1674 57.1204 78.3423 57.1204 64.5171C57.2385 56.3928 54.2457 48.5271 48.7477 42.5103C42.2429 35.5282 32.6539 32.2371 23.1959 33.7401C13.7379 35.243 5.66194 41.3411 1.67448 49.9906C1.23781 50.8254 0.867444 51.6937 0.262573 52.9293C5.79294 22.3996 32.4752 0.139867 63.7085 0.000656323C94.9411 -0.138555 121.824 21.8824 127.629 52.3616\",fill:\"#252525\"}),(0,R.jsx)(\"path\",{id:\"Vector_2\",d:\"M86.0995 124.927C86.0995 124.293 86.0995 123.858 86.0995 123.425C86.0995 111.669 86.0995 100.049 86.0995 88.1269C85.8836 82.4231 88.0775 76.89 92.1523 72.8653C97.3131 67.9567 104.984 66.7091 111.452 69.7263C117.892 72.1185 122.166 78.225 122.178 85.0541C122.372 92.1747 119.781 99.0921 114.949 104.356C107.882 113.237 98.6134 120.141 88.05 124.392C87.4217 124.616 86.782 124.805 86.1335 124.96\",fill:\"#252525\"}),(0,R.jsx)(\"path\",{id:\"Vector_3\",d:\"M41.8183 125.395C37.6149 123.224 33.6477 121.487 29.9828 119.25C21.5405 114.299 14.4778 107.331 9.43828 98.9796C6.53442 94.3985 5.34408 88.9493 6.07591 83.5852C7.056 75.2882 13.8859 68.8841 22.2829 68.3905C31.1231 67.2473 39.3527 73.0751 41.1455 81.7484C41.76 84.263 42.0762 86.8411 42.0868 89.4287C42.0868 100.516 42.0868 111.636 42.0868 122.823C42.0868 123.457 42.0867 124.059 41.8854 125.294\",fill:\"#252525\"}),(0,R.jsx)(\"path\",{id:\"Vector_4\",d:\"M51.3337 127.431C47.9713 127.431 47.6681 127.198 47.6681 124.326V76.6386C48.1096 67.937 42.9747 59.906 34.8574 56.602C25.8992 52.8557 15.5485 54.8615 8.66523 61.6779C4.28638 66.6086 1.89197 72.9696 1.94049 79.5438C1.95423 80.2444 1.78037 80.9357 1.43588 81.5476C1.06552 79.9446 0.62885 78.2081 0.426687 76.7387C-0.724024 70.4463 0.471163 63.9529 3.78906 58.472C6.09291 54.6111 9.65016 51.6434 13.8762 50.0567C22.8587 46.555 32.9393 47.1785 41.4148 51.7598C47.6592 54.8694 51.5262 61.2882 51.3337 68.2232C51.5019 87.6249 51.3337 107.027 51.3337 126.396C51.3337 126.797 51.3337 127.164 51.3337 127.532\",fill:\"#252525\"}),(0,R.jsx)(\"path\",{id:\"Vector_5\",d:\"M76.287 127.499V125.094C76.287 107.196 76.4883 89.2963 76.287 71.3966C76.0848 56.9034 84.2554 50.6588 95.7553 48.3545C101.535 47.2005 107.524 47.6393 113.071 49.6235C122.914 53.3319 128.994 63.1725 127.866 73.5672C127.631 76.2831 127.17 78.975 126.487 81.6151C125.916 78.2758 125.68 74.9364 124.772 71.597C122.808 64.3002 117.377 58.4174 110.228 55.8421C103.078 53.2668 95.1132 54.3239 88.8955 58.6734C83.0441 62.6207 79.7011 69.3237 80.086 76.3389C80.086 92.2349 80.086 108.131 80.086 124.026C80.086 127.366 80.086 127.366 76.2198 127.366\",fill:\"#252525\"})]})})});var xe=require(\"react/jsx-runtime\"),Bt=({width:e=16,height:t=16,className:o=\"\"})=>(0,xe.jsx)(\"svg\",{width:e,height:t,viewBox:\"0 0 24 24\",fill:\"currentColor\",className:o,\"data-testid\":\"arrow-down-icon\",children:(0,xe.jsx)(\"path\",{d:\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"})});function ne(e){if(typeof window>\"u\")return;let t=window.location.href,o={...e},i=t.includes(\"personal-offer\")?\"postorefront_\":\"mysite_\";o.event=i+e.event;try{window.dataLayer||(console.error(\"GTM dataLayer not available, but event logged\"),window.dataLayer=[]),window.dataLayer.push(o)}catch(a){console.error(\"Failed to track GTM event:\",a)}}var n=require(\"react/jsx-runtime\"),Nt=(e,t,o)=>{let i=o.includes(\"mobile\")?\"placeholder-image-mobile\":\"placeholder-image\";return e?.imageSrc?(0,n.jsx)(St,{tabIndex:0,children:(0,n.jsx)(Q.NsImage,{className:o,src:e.imageSrc,alt:e.imageAlt})}):(0,n.jsx)(p.Box,{className:i,children:(0,n.jsx)(It,{width:o.includes(\"mobile\")?\"144px\":\"246px\",height:o.includes(\"mobile\")?\"144px\":\"246px\",backgroundColor:t?.backgroundColor??\"#5F5F5F\"})})},Ft=(e,t,o,i,a)=>{if(!e||!t&&!a)return null;let l=o?\"mobile-badge\":\"tablet-badge\";return(0,n.jsxs)(Ct,{className:o?\"mobile-badges\":\"tablet-badges\",children:[a&&(0,n.jsx)(ge,{className:`${l} total-savings-badge`,hasWhiteBackground:i,tabIndex:0,children:(0,n.jsx)(me,{className:\"badge-value\",children:a})}),t&&(0,n.jsx)(ge,{className:`${l} expiration-badge`,hasWhiteBackground:i,tabIndex:0,children:(0,n.jsx)(me,{className:\"badge-value\",children:t})})]})},Gt=(e,t,o,i,a)=>{let{shopTitle:l,socialTitleText:r,email:d,showBadges:s,expirationDate:c,phone:u,totalSavings:b}=e;return(0,n.jsxs)(p.Box,{className:\"content-mobile\",children:[(0,n.jsx)(p.Typography,{component:\"h1\",tabIndex:l?.trim()?0:-1,className:\"body-title-mobile\",children:l}),!t&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p.Typography,{tabIndex:r?.trim()?0:-1,className:\"social-title-text-mobile\",children:r}),d?.trim()&&re(\"email\",d,\"email-text-mobile\"),u?.trim()&&re(\"phone\",u,\"phone-text-mobile\"),(0,n.jsx)(p.Box,{className:\"social-icons-mobile\",children:o}),Ft(s,c??\"\",i,a,b)]})]})},Qt=(e,t,o,i,a)=>{let{shopTitle:l,shopDescription:r,socialTitleText:d,email:s,phone:c,showBadges:u,expirationDate:b,totalSavings:m}=e;return(0,n.jsxs)(p.Box,{className:\"content\",children:[(0,n.jsx)(p.Typography,{component:\"h1\",tabIndex:l?.trim()?0:-1,className:\"body-title\",children:l}),!t&&(0,n.jsxs)(n.Fragment,{children:[r?.length>480?(0,n.jsx)(p.Tooltip,{title:r,arrow:!0,children:(0,n.jsx)(p.Typography,{tabIndex:r?.trim()?0:-1,className:\"body-text\",children:r})}):(0,n.jsx)(p.Typography,{tabIndex:r?.trim()?0:-1,className:\"body-text\",children:r}),(0,n.jsxs)(p.Box,{className:\"social-media\",children:[(0,n.jsx)(p.Typography,{tabIndex:d?.trim()?0:-1,className:\"social-title-text\",children:d}),(0,n.jsxs)(p.Box,{className:\"social-icons\",children:[o,s?.trim()&&re(\"email\",s,\"email-text\"),c?.trim()&&re(\"phone\",c,\"phone-text\")]})]}),Ft(u,b??\"\",i,a,m)]})]})},Ut=e=>new Promise((t,o)=>{let i=new Image;i.crossOrigin=\"anonymous\",i.src=e,i.onload=()=>{let a=document.createElement(\"canvas\"),l=a.getContext(\"2d\");if(!l)return o(new Error(\"Canvas not supported\"));a.width=i.width,a.height=i.height,l.drawImage(i,0,0);let d=[l.getImageData(0,0,1,1).data,l.getImageData(i.width-1,0,1,1).data,l.getImageData(0,i.height-1,1,1).data,l.getImageData(i.width-1,i.height-1,1,1).data].every(s=>Array.prototype.slice.call(s)[3]<10);t(d)},i.onerror=()=>o(new Error(\"Failed to load image\"))}),Kt=e=>{if(!e)return!1;let t=e.replace(\"#\",\"\").toLowerCase();if(!/^[0-9a-f]{3,4}$|^[0-9a-f]{6}$|^[0-9a-f]{8}$/i.test(t))return!1;let o=t;(t.length===3||t.length===4)&&(o=t.split(\"\").map(d=>d+d).join(\"\"));let i=Number.parseInt(o.substring(0,2),16),a=Number.parseInt(o.substring(2,4),16),l=Number.parseInt(o.substring(4,6),16),r=220;return i>=r&&a>=r&&l>=r},Jt=(e,t)=>({onClick:()=>{ne({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`})},onKeyDown:o=>{(o.key===\"Enter\"||o.key===\" \")&&(o.preventDefault(),ne({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`}),globalThis.location.href=`${e===\"email\"?\"mailto\":\"tel\"}:${t}`)}}),re=(e,t,o)=>{let i=e===\"email\"?\"mailto:\":\"tel:\",a=Jt(e,t);return(0,n.jsx)(p.Typography,{className:o,children:(0,n.jsx)(Tt,{href:`${i}${t}`,...a,children:t})})};function he({className:e,shopTitle:t,shopDescription:o,socialTitleText:i,imageDetails:a,email:l,phone:r,bannerProps:d,socialIcons:s,expirationDate:c,showBadges:u=!1,totalSavings:b}){let m=(0,p.useMediaQuery)(\"(max-width: 560px)\"),[C,M]=(0,B.useState)(!1),[P,I]=(0,B.useState)(!1),[H,A]=(0,B.useState)(!1),[g,S]=(0,B.useState)(!1),le=()=>{I(!P)};(0,B.useEffect)(()=>{(async()=>{if(a?.imageSrc){let T=await Ut(a.imageSrc);S(T)}else S(!1)})()},[a?.imageSrc]),(0,B.useEffect)(()=>{A(Kt(d?.backgroundColor))},[d?.backgroundColor]),(0,B.useEffect)(()=>{let y,T=window.scrollY,E=!1,x=!1,V=0,be=f=>{let X=Date.now();if(E!==f&&!x){if(X-V<100)return;x=!0,E=f,V=X,f&&I(!1),clearTimeout(y),M(f),y=setTimeout(()=>{x=!1,f&&window.scrollY<15&&window.scrollTo({top:m?20:30,behavior:\"smooth\"})},300)}},Rt=()=>{let f=window.scrollY;if(x){T=f;return}if(Math.abs(f-T)<.5)return;let q=f>T,Et=m?15:25,Lt=m?8:12;q&&f>Et&&!E?be(!0):!q&&f<Lt&&E&&be(!1),T=f},Mt=()=>{let f=window.scrollY,q=f>(m?5:10);E=q,M(q),T=f,V=Date.now()},Y=null,fe=0,ue=()=>{Y||Date.now()-fe<16||(Y=requestAnimationFrame(()=>{Rt(),fe=Date.now(),Y=null}))};return Mt(),window.addEventListener(\"scroll\",ue,{passive:!0}),()=>{window.removeEventListener(\"scroll\",ue),Y&&cancelAnimationFrame(Y),clearTimeout(y)}},[m]);let U=(0,B.useMemo)(()=>s?.map((y,T)=>(0,n.jsx)(kt,{onClick:x=>{x.preventDefault(),ne({event:\"social_click\",social_platform:y.type,social_url:y.url,click_element:\"social_icon\"}),window.open(y.url,\"_blank\")},children:(0,n.jsx)(Q.NsLink,{href:y.url,target:\"_blank\",children:(0,n.jsx)(Q.NsImage,{src:`https://www.google.com/s2/favicons?domain=${y?.url}&sz=24`,alt:`${y.type} icon`,width:\"24\",height:\"24\"},y?.type+T)})},y?.type+T)),[s]),K=`${e} ${C?\"scrolled\":\"\"}`,W={shopTitle:t,shopDescription:o,socialTitleText:i,email:l,phone:r,showBadges:u,expirationDate:c,totalSavings:b},O=()=>window.innerWidth<=380?50:window.innerWidth<=415?56:window.innerWidth<=460?62:80,J=m&&o&&o.length>O();return m?(0,n.jsxs)(wt,{className:K,\"data-testid\":\"my-site-shop-header\",bannerProps:d,isCircularImage:g,hasWhiteBackground:H,children:[(0,n.jsxs)(p.Box,{className:\"image-content-mobile\",children:[Nt(a,d??{},\"bg-image-mobile\"),Gt(W,C,U,m,H)]}),!C&&(0,n.jsxs)(p.Box,{className:\"expandable-description-mobile\",children:[(0,n.jsx)(p.Typography,{className:`description-content-mobile ${P||!J?\"expanded\":\"collapsed\"}`,children:o}),J&&(0,n.jsx)(vt,{onClick:le,children:(0,n.jsx)(Bt,{width:16,height:16,className:`arrow-icon-mobile ${P?\"expanded\":\"\"}`})})]})]}):(0,n.jsxs)(yt,{className:K,\"data-testid\":\"my-site-shop-header\",bannerProps:d,isCircularImage:g,hasWhiteBackground:H,children:[Nt(a,d??{},\"bg-image\"),Qt(W,C,U,m,H)]})}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","export * from './common';\n","import React, { ReactElement, useState } from 'react';\nimport { NsImage } from '@nuskin/foundation-ui-components';\nimport { ProductImageType } from '../types/image';\nimport {\n PriceComponent,\n ProductCardContainer,\n ImageContainer,\n DefaultImage,\n ProductTitle,\n ProductBadgeContainer,\n AddToCartButton,\n CartIcon,\n} from './styles/NsProductCard.Styled';\nimport { useMediaQuery } from '@mui/material';\nimport { NsCardButton } from './types';\n\ntype NsProductCardProps = {\n readonly productTitle: string;\n readonly imageDetails?: ProductImageType;\n readonly className?: string;\n readonly button?: NsCardButton & { disabled?: boolean };\n readonly onCardClick?: () => void;\n readonly productStatusBadge?: React.ReactNode;\n readonly directSellerBadge?: React.ReactNode;\n readonly mySitePriceComponent?: React.ReactNode;\n readonly testId?: string;\n};\n\nconst NsProductCard = ({\n productTitle,\n imageDetails,\n className,\n button,\n onCardClick,\n productStatusBadge,\n directSellerBadge,\n mySitePriceComponent,\n testId,\n}: NsProductCardProps): ReactElement => {\n const [isButtonHovered, setIsButtonHovered] = useState(false);\n const isMobile = useMediaQuery('(max-width: 560px)');\n\n const handleImageError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n const target = e.target as HTMLImageElement;\n const noImageFallback = imageDetails?.fallbackImage;\n if (noImageFallback && target.src !== noImageFallback) {\n target.src = noImageFallback;\n }\n };\n\n return (\n <ProductCardContainer\n className={className}\n onClick={onCardClick}\n tabIndex={0}\n data-testid=\"product-card\"\n isMobile={isMobile}\n >\n <ImageContainer bgColor={imageDetails?.bgColor} onError={handleImageError}>\n {imageDetails?.imageSrc ? (\n <NsImage\n data-testid={testId ?? 'test-product-image'}\n className={imageDetails.className ?? ''}\n src={imageDetails.imageSrc}\n alt={imageDetails.imageAlt}\n aria-label={imageDetails.areaLabel ?? imageDetails.imageAlt}\n width={'100%'}\n />\n ) : (\n <DefaultImage alt=\"\" />\n )}\n </ImageContainer>\n <ProductTitle title={productTitle} data-testid=\"product-title\">\n {productTitle}\n </ProductTitle>\n {directSellerBadge && <ProductBadgeContainer>{directSellerBadge}</ProductBadgeContainer>}\n <ProductBadgeContainer>{productStatusBadge}</ProductBadgeContainer>\n <PriceComponent>{mySitePriceComponent}</PriceComponent>\n {button?.showButton && (\n <AddToCartButton\n tabIndex={0}\n aria-roledescription=\":\"\n aria-label={button.buttonText || 'ADD TO CART'}\n data-testid=\"add-to-cart-button\"\n disabled={button?.disabled ?? false}\n isMobile={isMobile}\n isHovered={isButtonHovered}\n onClick={(e) => {\n e.stopPropagation();\n if (!button?.disabled) {\n button.onClick?.();\n }\n }}\n onMouseEnter={() => {\n if (!isMobile && !button?.disabled) {\n setIsButtonHovered(true);\n }\n }}\n onMouseLeave={() => {\n if (!isMobile) {\n setIsButtonHovered(false);\n }\n }}\n >\n <CartIcon className=\"cart-icon\" disabled={button?.disabled}>\n <svg width=\"24\" height=\"22\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 1.86358C0 1.26109 0.488416 0.772675 1.09091 0.772675H3.48173C4.51054 0.772675 5.39955 1.49136 5.61511 2.49733L5.71309 2.95456H22.9091C23.245 2.95456 23.5622 3.10933 23.7689 3.37411C23.9757 3.63889 24.0489 3.98415 23.9674 4.31005L22.4053 10.5583C21.9197 12.5009 20.1743 13.8636 18.172 13.8636H8.05068L8.28444 14.9546H20.7273C21.3298 14.9546 21.8182 15.443 21.8182 16.0455C21.8182 16.648 21.3298 17.1364 20.7273 17.1364H19.6364H8.18182H7.40252C6.88811 17.1364 6.4436 16.777 6.33582 16.274L3.76449 4.27405L3.48173 2.95449H1.09091C0.488416 2.95449 0 2.46608 0 1.86358ZM8.18182 17.1364C6.97683 17.1364 6 18.1132 6 19.3182C6 20.5232 6.97683 21.5 8.18182 21.5C9.3868 21.5 10.3636 20.5232 10.3636 19.3182C10.3636 18.1132 9.3868 17.1364 8.18182 17.1364ZM19.6364 17.1364C18.4314 17.1364 17.4545 18.1132 17.4545 19.3182C17.4545 20.5232 18.4314 21.5 19.6364 21.5C20.8413 21.5 21.8182 20.5232 21.8182 19.3182C21.8182 18.1132 20.8413 17.1364 19.6364 17.1364ZM7.58317 11.6818H18.172C19.1732 11.6818 20.0459 11.0005 20.2887 10.0292L21.5119 5.13638H6.18062L7.58317 11.6818Z\"\n fill={button?.disabled ? '#999' : '#ffffff'}\n />\n </svg>\n </CartIcon>\n {button.buttonText || 'ADD TO CART'}\n </AddToCartButton>\n )}\n </ProductCardContainer>\n );\n};\n\nexport default NsProductCard;\n","import { styled } from '@nuskin/foundation-theme';\n\nexport const PriceComponent = styled('div')`\n width: 200px;\n text-align: left;\n margin-bottom: 5px;\n`;\n\nexport const ProductCardContainer = styled('button')<{ isMobile: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n width: 240px;\n height: ${(props) => (props.isMobile ? '410px' : '513px')};\n overflow: hidden;\n cursor: pointer;\n border: 1px solid #ededed;\n background: var(--color-primary-n-10-primary-white, #fff);\n`;\n\nexport const ImageContainer = styled('div')<{\n bgColor?: string;\n}>`\n width: '240px';\n height: '240px';\n background: ${(props) => props.bgColor ?? '#f5f5f5'};\n border-radius: 8px;\n overflow: hidden;\n margin-bottom: 0;\n display: flex;\n align-items: normal;\n justify-content: center;\n position: relative;\n @media (max-width: 560px) {\n width: 200px;\n height: 200px;\n align-items: unset;\n }\n`;\n\nexport const DefaultImage = styled('img')`\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 8px;\n display: block;\n`;\n\nexport const ProductTitle = styled('div')`\n width: 200px;\n margin-top: 16px;\n max-height: 66px;\n text-align: left;\n font-size: 16px;\n font-family: 'Inter', sans-serif;\n font-weight: 400;\n line-height: 22px;\n overflow: hidden;\n color: #666;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n @media (max-width: 560px) {\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n margin-top: 5px;\n max-height: 54px;\n line-height: 18px;\n }\n`;\n\nexport const ProductBadgeContainer = styled('div')`\n width: 200px;\n text-align: left;\n margin-bottom: 12px;\n @media (max-width: 560px) {\n margin-bottom: 8px;\n }\n`;\n\nexport const AddToCartButton = styled('button')<{\n disabled?: boolean;\n isMobile: boolean;\n isHovered: boolean;\n}>`\n width: 200px;\n height: 40px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 10px;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0.14px;\n text-transform: none;\n justify-content: flex-start;\n padding-left: 31px;\n overflow: hidden;\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n text-overflow: ellipsis;\n margin-top: 8px;\n margin-bottom: 10px;\n -webkit-appearance: none;\n -webkit-tap-highlight-color: transparent;\n\n color: ${(props) => (props.disabled ? '#999' : '#fff')};\n background-color: ${(props) => {\n if (props.disabled) return '#e0e0e0';\n if (!props.isMobile && props.isHovered) return '#888';\n return '#000';\n }};\n border: ${(props) => (props.disabled ? '1px solid #ccc' : 'none')};\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n opacity: ${(props) => (props.disabled ? 0.6 : 1)};\n transition: ${(props) => (props.isMobile ? 'none' : 'all 0.3s ease')};\n\n @media (max-width: 560px) {\n margin: 5px 0;\n }\n`;\n\nexport const CartIcon = styled('span')<{ disabled?: boolean }>`\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n display: inline-block;\n background: none;\n transition: all 0.3s ease;\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n`;\n","import React, { ReactElement, useCallback, ReactNode, useRef } from 'react';\nimport Slider from 'react-slick';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport 'slick-carousel/slick/slick.css';\nimport { NsCardButton, NsCarouselControl } from '@nuskin/foundation-ui-components';\nimport { ProductImageType } from '../types/image';\nimport NsProductCard from '../card/NsProductCard';\nimport {\n SlickContainer,\n ControlsContainer,\n ControlsHeaderRow,\n ScrollableContainer,\n CardList,\n ViewAllWrapper,\n ProductCountWrapper,\n ArrowsWrapper,\n CustomTypography,\n ViewAllLink,\n ProductInfoWrapper,\n CategoryNameWrapper,\n EmptyProductCategories,\n} from './NsProductCarousel.styled';\n\nexport type ProductCardEntry = {\n readonly productTitle: string;\n readonly imageDetails?: ProductImageType;\n readonly button?: NsCardButton;\n readonly onCardClick?: () => void;\n readonly productStatusBadge?: React.ReactNode;\n readonly directSeller?: React.ReactNode;\n readonly mySitePriceComponent?: React.ReactNode;\n};\n\ninterface SlickSettings {\n dots?: boolean;\n infinite?: boolean;\n speed?: number;\n slidesToShow?: number;\n slidesToScroll?: number;\n swipe?: boolean;\n draggable?: boolean;\n arrows?: boolean;\n responsive?: Array<{\n breakpoint: number;\n settings: {\n slidesToShow?: number;\n slidesToScroll?: number;\n arrows?: boolean;\n };\n }>;\n}\n\ninterface ProductCardCarouselProps<T = ProductCardEntry> {\n readonly entries: T[];\n readonly settings?: SlickSettings;\n readonly showControlButtons?: boolean;\n readonly renderEntry?: (entry: T, index: number) => ReactNode;\n readonly allEntryLabel?: string;\n readonly allEntryLink?: string;\n readonly categoryName?: string;\n readonly emptyProductMessage?: string;\n readonly productsCountLabel?: string;\n readonly isInitialDataLoading?: boolean;\n readonly history?: {\n push: (path: string) => void;\n };\n}\n\nexport default function ProductCardCarousel({\n entries,\n renderEntry,\n settings = {},\n showControlButtons = true,\n allEntryLabel = 'View All',\n allEntryLink = '',\n categoryName,\n emptyProductMessage = 'No Products Available For The Selected Category',\n productsCountLabel = 'Products',\n isInitialDataLoading,\n history,\n}: ProductCardCarouselProps): ReactElement {\n const sliderRef = useRef<Slider>(null);\n const isMobile = useMediaQuery('(max-width: 560px)');\n\n const prev = useCallback(() => {\n sliderRef.current?.slickPrev();\n }, []);\n\n const next = useCallback(() => {\n sliderRef.current?.slickNext();\n }, []);\n\n const renderProductEntry =\n renderEntry ??\n ((entry: ProductCardEntry, index: number) => (\n <NsProductCard\n key={`${entry.productTitle}-${index}`}\n productTitle={entry.productTitle}\n imageDetails={entry.imageDetails}\n button={entry.button}\n onCardClick={entry.onCardClick}\n productStatusBadge={entry.productStatusBadge}\n directSellerBadge={entry.directSeller}\n mySitePriceComponent={entry.mySitePriceComponent}\n />\n ));\n\n const sliderSettings = {\n dots: true,\n infinite: true,\n speed: 500,\n slidesToShow: Math.min(entries?.length ?? 0, 4),\n slidesToScroll: 4,\n swipe: true,\n draggable: true,\n arrows: true,\n responsive: [\n {\n breakpoint: 1320,\n settings: {\n slidesToShow: Math.min(entries?.length ?? 0, 3),\n slidesToScroll: 3,\n },\n },\n {\n breakpoint: 900,\n settings: {\n slidesToShow: Math.min(entries?.length ?? 0, 2),\n slidesToScroll: 2,\n },\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n arrows: false,\n },\n },\n ],\n ...settings,\n };\n\n const shouldShowNavigation = (entries?.length ?? 0) > sliderSettings.slidesToShow;\n\n const renderCarouselContent = () => {\n if (entries?.length === 0 && !isInitialDataLoading) {\n return <EmptyProductCategories>{emptyProductMessage}</EmptyProductCategories>;\n }\n\n if (isMobile) {\n return (\n <ScrollableContainer>\n <CardList>{entries.map((entry, index) => entry && renderProductEntry(entry, index))}</CardList>\n </ScrollableContainer>\n );\n }\n\n return (\n <Slider {...sliderSettings} ref={sliderRef}>\n {entries.map((entry, index) => entry && renderProductEntry(entry, index))}\n </Slider>\n );\n };\n\n return (\n <SlickContainer>\n {showControlButtons && (\n <ControlsContainer>\n <ControlsHeaderRow>\n <ProductInfoWrapper>\n <ProductCountWrapper>\n <CustomTypography variant=\"body-m\">\n {entries?.length ?? 0} {productsCountLabel}\n </CustomTypography>\n </ProductCountWrapper>\n {!isMobile && categoryName && <CategoryNameWrapper>{categoryName}</CategoryNameWrapper>}\n </ProductInfoWrapper>\n <ViewAllWrapper $isMobile={isMobile}>\n <ViewAllLink\n $disabled={(entries?.length ?? 0) === 0}\n onClick={(e) => {\n e.preventDefault();\n if ((entries?.length ?? 0) > 0 && history) {\n history.push(allEntryLink);\n }\n }}\n >\n {allEntryLabel}\n </ViewAllLink>\n </ViewAllWrapper>\n </ControlsHeaderRow>\n {!isMobile && (\n <ArrowsWrapper $isDisabled={!shouldShowNavigation}>\n <NsCarouselControl prev={prev} next={next} viewAllLabel={''} viewAllUrl={''} />\n </ArrowsWrapper>\n )}\n </ControlsContainer>\n )}\n {renderCarouselContent()}\n </SlickContainer>\n );\n}\n","import React from 'react';\nimport { styled } from '@nuskin/foundation-theme';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport { NsTypography } from '@nuskin/foundation-ui-components';\n\nexport const SlickContainer: React.ComponentType<BoxProps> = styled(Box)`\n padding: 30px 0 60px;\n width: 100%;\n margin: auto;\n margin-top: 50px;\n position: relative;\n\n .slick-list {\n padding-left: 24px;\n padding-right: 24px;\n }\n .slick-slide {\n display: flex;\n justify-content: center;\n padding: 0 12px;\n box-sizing: border-box;\n }\n .slick-prev,\n .slick-next {\n display: none !important;\n }\n\n @media (max-width: 1200px) {\n max-width: 1024px;\n .slick-list {\n padding-left: 12px;\n padding-right: 12px;\n }\n .slick-slide {\n padding: 0 6px;\n }\n }\n @media (max-width: 700px) {\n max-width: 100vw;\n padding: 10px 0 50px;\n .slick-list {\n padding-left: 4px;\n padding-right: 4px;\n }\n .slick-slide {\n padding: 0 2px;\n }\n }\n @media (max-width: 560px) {\n padding: 10px 0 10px;\n margin-top: 25px;\n }\n`;\nexport const ScrollableContainer = styled('div')`\n overflow-x: auto;\n display: flex;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n gap: 16px;\n padding: 0 8px 16px;\n width: 100%;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #007bff;\n border-radius: 10px;\n }\n`;\n\nexport const CardList = styled('div')`\n display: flex;\n scroll-snap-align: start;\n justify-content: center;\n gap: 15px;\n`;\n\nexport const ControlsContainer: React.ComponentType<BoxProps> = styled(Box)`\n position: absolute;\n bottom: calc(100% + 1px);\n right: 1px;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n`;\n\nexport const ViewAllWrapper: React.ComponentType<BoxProps & { $isMobile?: boolean }> = styled(Box)<{\n $isMobile?: boolean;\n}>`\n display: flex;\n align-items: center;\n margin-left: auto;\n margin-right: ${({ $isMobile }) => ($isMobile ? 0 : '24px')};\n\n @media (max-width: 560px) {\n margin-left: 0;\n order: 2;\n }\n`;\n\nexport const ProductCountWrapper: React.ComponentType<BoxProps> = styled(Box)`\n display: none;\n\n @media (max-width: 560px) {\n color: #666666;\n font-family: Inter;\n font-size: 14px !important;\n font-style: normal;\n font-weight: 600;\n line-height: 18px;\n display: flex;\n align-items: center;\n order: 1;\n }\n`;\n\nexport const ArrowsWrapper: React.ComponentType<BoxProps & { $isDisabled?: boolean }> = styled(Box)<{\n $isDisabled?: boolean;\n}>`\n display: flex;\n align-items: center;\n opacity: ${({ $isDisabled }) => ($isDisabled ? 0.3 : 1)};\n pointer-events: ${({ $isDisabled }) => ($isDisabled ? 'none' : 'auto')};\n transition: opacity 0.3s ease;\n\n .carousal-prev-button,\n .carousal-next-button {\n transition: all 0.3s ease;\n border: 2px solid #000000;\n border-radius: 3px;\n padding: 9px;\n cursor: pointer;\n\n svg {\n transition: all 0.3s ease;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n\n &:hover {\n background-color: #f5f5f5;\n border: 2px solid #ddd;\n\n svg {\n opacity: 0.5;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n }\n }\n\n @media (max-width: 560px) {\n display: none;\n }\n`;\nexport const Scrollablewrapper = styled('div')`\n @media (max-width: 560px) {\n overflow-y: hidden;\n scrollbar-width: thin;\n scrollbar-color: #007bff #eee;\n &::-webkit-scrollbar {\n width: 8px;\n }\n &::-webkit-scrollbar-track {\n background: #eee;\n }\n &::-webkit-scrollbar-thumb {\n background-color: red;\n border-radius: 8px;\n border: 2px solid #eee;\n }\n }\n`;\nexport const CustomTypography = styled(NsTypography)`\n color: #666666;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 22px;\n @media (max-width: 560px) {\n margin: 0 3px;\n }\n`;\n\nexport const ViewAllLink = styled('a')<{ $disabled?: boolean }>`\n color: ${({ $disabled }) => ($disabled ? '#999999' : '#000000')};\n font-family: Inter, sans-serif;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 22px;\n text-decoration: none;\n border-bottom: 1px solid ${({ $disabled }) => ($disabled ? '#999999' : '#000000')};\n padding-bottom: 4px;\n transition: all 0.3s ease;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n pointer-events: ${({ $disabled }) => ($disabled ? 'none' : 'auto')};\n opacity: ${({ $disabled }) => ($disabled ? 0.5 : 1)};\n\n @media (max-width: 560px) {\n font-size: 14px;\n line-height: 18px;\n }\n\n &:hover {\n color: ${({ $disabled }) => ($disabled ? '#999999' : '#666666')};\n border-bottom: 1px solid ${({ $disabled }) => ($disabled ? '#999999' : '#666666')};\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n }\n`;\n\nexport const EmptyProductCategories = styled('div')`\n padding-top: 20px;\n font-size: 20px;\n text-align: center;\n`;\nexport const ControlsHeaderRow = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`;\n\nexport const ProductInfoWrapper = styled('div')`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n`;\n\nexport const CategoryNameWrapper = styled('div')`\n font-family: 'Lora';\n font-weight: 400;\n font-size: 22px;\n margin-left: 16px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 13px;\n`;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useMediaQuery } from '@mui/material';\n\nimport { NsCategoryNavigation } from '../Nav-Category-Navigation';\nimport { NsSpinner } from '@nuskin/foundation-ui-components';\nimport ProductCardCarousel, { ProductCardEntry } from './NsProductCarousel';\nimport {\n ProductTabCarouselContainer,\n TabsContainer,\n ContentContainer,\n NoTabsContainer,\n SpinnerContainer,\n} from './ProductTabCarousel.styled';\n\ninterface Category {\n label: string;\n categoryId: string;\n}\n\ninterface SlickSettings {\n dots?: boolean;\n infinite?: boolean;\n speed?: number;\n slidesToShow?: number;\n slidesToScroll?: number;\n swipe?: boolean;\n draggable?: boolean;\n arrows?: boolean;\n responsive?: Array<{\n breakpoint: number;\n settings: {\n slidesToShow?: number;\n slidesToScroll?: number;\n arrows?: boolean;\n };\n }>;\n}\n\ninterface ProductTabCarouselProps {\n readonly allEntryLabel?: string;\n readonly allEntryLink?: string;\n readonly renderEntry?: (entry: ProductCardEntry) => React.ReactNode;\n readonly settings?: SlickSettings;\n readonly showControlButtons?: boolean;\n readonly fetchCategories: () => Promise<Category[]>;\n readonly fetchProducts: (categoryId: string) => Promise<ProductCardEntry[]>;\n readonly emptyProductTabs?: string;\n readonly emptyProductMessage?: string;\n readonly showCustomCategory?: boolean;\n readonly productsCountLabel?: string;\n readonly getCategoryId: (categoryId: string) => Promise<Category[]>;\n readonly history?: {\n push: (path: string) => void;\n };\n}\n\nconst ProductTabCarousel: React.FC<ProductTabCarouselProps> = ({\n allEntryLabel,\n allEntryLink,\n renderEntry,\n settings,\n showControlButtons = true,\n fetchCategories,\n fetchProducts,\n showCustomCategory = false,\n emptyProductTabs = 'No tabs available',\n emptyProductMessage,\n productsCountLabel,\n getCategoryId,\n history,\n}) => {\n const isMobile = useMediaQuery('(max-width:768px)');\n const [isLoadingInitialData, setIsLoadingInitialData] = useState(true);\n const [categories, setCategories] = useState<Category[]>([]);\n const [isCategoriesLoaded, setIsCategoriesLoaded] = useState(false);\n const [selectedTab, setSelectedTab] = useState(0);\n const [products, setProducts] = useState<ProductCardEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [shouldShowSpinner, setShouldShowSpinner] = useState(true);\n\n const checkForExistingSpinners = useCallback(() => {\n const existingSpinners = document.querySelectorAll('[data-testid*=\"spinner\"], .ns-spinner, [class*=\"spinner\"]');\n setShouldShowSpinner(existingSpinners.length === 0);\n }, []);\n\n useEffect(() => {\n if (loading) {\n checkForExistingSpinners();\n }\n }, [loading, checkForExistingSpinners]);\n\n useEffect(() => {\n fetchCategories().then((data) => {\n setCategories(data);\n setIsCategoriesLoaded(true);\n });\n }, [fetchCategories]);\n\n useEffect(() => {\n if (!isCategoriesLoaded) return;\n\n if (categories.length > 0) {\n const categoryId = categories[selectedTab]?.categoryId;\n if (getCategoryId) {\n getCategoryId(categoryId);\n }\n\n setLoading(true);\n fetchProducts(categoryId)\n .then(setProducts)\n .finally(() => {\n setLoading(false);\n setIsLoadingInitialData(false);\n });\n } else {\n setLoading(false);\n }\n }, [categories, selectedTab, fetchProducts, isCategoriesLoaded]);\n\n const itemArray = categories.map((cat) => ({\n label: cat.label,\n content: '',\n categoryId: cat.categoryId,\n }));\n\n return (\n <ProductTabCarouselContainer isMobile={isMobile} $hasCategories={categories.length > 0}>\n {showCustomCategory &&\n (itemArray.length > 0 ? (\n <TabsContainer isMobile={isMobile}>\n <NsCategoryNavigation\n itemArray={itemArray}\n value={selectedTab}\n onChange={(_, newValue) => setSelectedTab(newValue)}\n />\n </TabsContainer>\n ) : (\n <NoTabsContainer>{emptyProductTabs}</NoTabsContainer>\n ))}\n <ContentContainer isMobile={isMobile}>\n {loading ? (\n <SpinnerContainer>{shouldShowSpinner && <NsSpinner />}</SpinnerContainer>\n ) : (\n <ProductCardCarousel\n isInitialDataLoading={isLoadingInitialData}\n entries={products}\n allEntryLabel={allEntryLabel}\n allEntryLink={allEntryLink}\n renderEntry={\n renderEntry\n ? (entry) => renderEntry({ ...entry, productStatusBadge: entry.productStatusBadge })\n : undefined\n }\n settings={settings}\n showControlButtons={showControlButtons}\n categoryName={categories[selectedTab]?.label}\n emptyProductMessage={emptyProductMessage}\n productsCountLabel={productsCountLabel}\n history={history}\n />\n )}\n </ContentContainer>\n </ProductTabCarouselContainer>\n );\n};\n\nexport default ProductTabCarousel;\n","import * as React from 'react';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Box from '@mui/material/Box';\nimport PropTypes from 'prop-types';\nimport { NsCategoryNavigationContainer } from './NsCategoryNavigation.styled';\nimport { useMediaQuery } from '@mui/material';\n\nfunction TabPanel(\n props: Readonly<{\n children?: React.ReactNode;\n value: number;\n index: number;\n [key: string]: unknown;\n }>,\n) {\n const { children, value, index, ...other } = props;\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n {...other}\n >\n {value === index && <Box className=\"tabPanel\">{children}</Box>}\n </div>\n );\n}\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.number.isRequired,\n value: PropTypes.number.isRequired,\n};\n\ninterface NsCategoryNavigationProps {\n itemArray: { label: string; content: React.ReactNode; categoryId: string }[];\n value?: number;\n onChange?: (event: React.SyntheticEvent, newValue: number) => void;\n}\n\nexport const NsCategoryNavigation: React.FC<Readonly<NsCategoryNavigationProps>> = ({\n itemArray,\n value: controlledValue,\n onChange,\n}) => {\n const [internalValue, setInternalValue] = React.useState(0);\n const isMobile = useMediaQuery('(max-width:768px)');\n const value = controlledValue ?? internalValue;\n const handleChange = (event: React.SyntheticEvent, newValue: number) => {\n if (onChange) {\n onChange(event, newValue);\n } else {\n setInternalValue(newValue);\n }\n };\n\n return (\n <NsCategoryNavigationContainer>\n <Box className=\"tabContainer\">\n <Tabs\n orientation={isMobile ? 'horizontal' : 'vertical'}\n variant=\"scrollable\"\n value={value}\n onChange={handleChange}\n aria-label=\"Vertical tabs example\"\n className=\"tabsStyle\"\n >\n {itemArray.map((item) => (\n <Tab key={item.categoryId} label={item.label} className=\"tabStyle\" />\n ))}\n </Tabs>\n {itemArray.map((item) => (\n <TabPanel\n key={item.categoryId}\n value={value}\n index={itemArray.findIndex((i) => i.categoryId === item.categoryId)}\n >\n {item.content}\n </TabPanel>\n ))}\n </Box>\n </NsCategoryNavigationContainer>\n );\n};\n","import { styled } from '@nuskin/foundation-theme';\nexport const NsCategoryNavigationContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n height: 100%;\n background-color: #fff;\n .tabsStyle {\n display: flex;\n padding-top: 8.533px;\n flex-direction: column;\n align-items: flex-start;\n gap: 12.8px;\n border-right: 1px;\n border-color: divider;\n width: 200px;\n & .Mui-selected {\n font-weight: 700;\n font-size: 14px;\n font-family: 'inter', sans-serif;\n font-style: normal;\n font-height: 20px;\n border-radius: 4px;\n }\n & .MuiTabs-indicator {\n left: 0;\n background-color: #5b81a5;\n color: #5b81a5;\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .tabContainer {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n min-width: 100%;\n background-color: #fff;\n @media (max-width: 768px) {\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n }\n\n .tabStyle {\n align-items: flex-start;\n display: flex;\n text-align: left;\n font-size: 14px;\n font-family: 'inter' sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n min-height: 20px;\n padding: 1px;\n padding-left: 10px;\n margin-bottom: 10px;\n cursor: pointer;\n text-transform: none;\n }\n @media (max-width: 768px) {\n flex-direction: row;\n\n .tabsStyle {\n width: 100%;\n border-right: none;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-top: 0px;\n }\n\n .tabStyle {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 70px;\n padding: 8px 16px;\n text-align: center;\n margin: 4px;\n background-color: #fff;\n cursor: pointer;\n color: black;\n font-family: Inter;\n font-style: normal;\n font-weight: 600;\n line-height: 20px;\n }\n\n .tabStyle.Mui-selected {\n background-color: #5b81a5;\n color: #ffffff !important;\n font-weight: 700;\n border-radius: 70px;\n }\n }\n .tabPanel {\n padding: 8px;\n text-align: left;\n }\n`;\n","import { styled } from '@nuskin/foundation-theme';\n\nconst getMinHeight = ({ isMobile, $hasCategories }: { isMobile?: boolean; $hasCategories?: boolean }) => {\n if (isMobile) return 'auto';\n return $hasCategories ? '800px' : 'auto';\n};\n\nexport const ProductTabCarouselContainer = styled('div')<{ isMobile?: boolean; $hasCategories?: boolean }>`\n display: flex;\n flex-direction: ${({ isMobile }) => (isMobile ? 'column' : 'row')};\n align-items: ${({ isMobile }) => (isMobile ? 'stretch' : 'flex-start')};\n width: 100%;\n max-width: 1920px;\n min-height: ${getMinHeight};\n margin: 0 auto;\n box-sizing: border-box;\n overflow: visible;\n background: #fff;\n padding: ${({ isMobile }) => (isMobile ? '10px 16px 0px 16px' : '50px 60px 0px 60px')};\n\n @media (max-width: 768px) {\n padding: 10px 16px 0px 16px;\n min-height: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n padding: 30px 40px 0px 40px;\n gap: 20px;\n }\n\n transform: translateZ(0);\n will-change: auto;\n`;\n\nexport const TabsContainer = styled('div')<{ isMobile?: boolean }>`\n min-width: ${({ isMobile }) => (isMobile ? '100%' : 'auto')};\n height: ${({ isMobile }) => (isMobile ? 'auto' : '100%')};\n flex-shrink: 0;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n\n overflow-x: auto;\n overflow-y: visible;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-width: 200px;\n margin-right: 20px;\n }\n`;\n\nexport const ContentContainer = styled('div')<{ isMobile?: boolean }>`\n flex: 1;\n min-width: 0;\n height: ${({ isMobile }) => (isMobile ? 'auto' : '100%')};\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n min-height: 300px;\n\n -webkit-overflow-scrolling: touch;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-height: 400px;\n }\n\n contain: layout style paint;\n transform: translateZ(0);\n`;\n\nexport const LoadingContainer = styled('div')`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n padding: 20px;\n\n @media (max-width: 768px) {\n min-height: 150px;\n padding: 16px;\n }\n`;\n\nexport const NoTabsContainer = styled('div')`\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 40px 20px;\n color: #666;\n font-size: 16px;\n\n @media (max-width: 768px) {\n padding: 20px 16px;\n font-size: 14px;\n }\n`;\nexport const SpinnerContainer = styled('div')`\n padding: 10px;\n display: flex;\n justify-content: center;\n`;\n","import React, { ReactElement, useState, useEffect, useMemo } from 'react';\nimport { Typography, Box, useMediaQuery, Tooltip } from '@mui/material';\nimport { NsLink, NsImage } from '@nuskin/foundation-ui-components';\nimport {\n MysiteHeroContainer,\n MysiteHeroContainerMobile,\n BadgeContainer,\n Badge,\n ToggleButtonMobile,\n StyledSpan,\n ImgTabIndex,\n ContactLink,\n BadgeValue,\n} from '@/common/headers/MysiteHero.styled';\nimport { PlaceholderImage } from '../icon/icons/PlaceholderImage';\nimport { ArrowDownIcon } from '../icon/icons/ArrowDownIcon';\nimport { trackGTMEvent } from '../utils/gtmTracking';\n\ntype MysiteHeroProps = {\n readonly imageDetails?: {\n imageSrc: string;\n imageAlt: string;\n bgColor: string;\n };\n readonly shopTitle: string;\n readonly shopDescription: string;\n readonly socialTitleText: string;\n readonly email: string;\n readonly phone: string;\n readonly className?: string;\n readonly bannerProps?: {\n backgroundColor?: string;\n headlineFont?: string;\n paragraphFont?: string;\n };\n readonly socialIcons?: {\n type: string;\n url: string;\n }[];\n readonly expirationDate?: string;\n readonly showBadges?: boolean;\n readonly totalSavings?: string;\n};\n\ntype ImageDetails = {\n imageSrc: string;\n imageAlt: string;\n bgColor: string;\n};\n\ntype BannerProps = {\n backgroundColor?: string;\n headlineFont?: string;\n paragraphFont?: string;\n};\n\ntype ContentProps = {\n shopTitle: string;\n shopDescription: string;\n socialTitleText: string;\n email: string;\n phone: string;\n showBadges: boolean;\n expirationDate?: string;\n totalSavings?: string;\n};\n\nconst renderImageContent = (imageDetails: ImageDetails | undefined, bannerProps: BannerProps, className: string) => {\n const placeholderClass = className.includes('mobile') ? 'placeholder-image-mobile' : 'placeholder-image';\n return imageDetails?.imageSrc ? (\n <ImgTabIndex tabIndex={0}>\n <NsImage className={className} src={imageDetails.imageSrc} alt={imageDetails.imageAlt} />\n </ImgTabIndex>\n ) : (\n <Box className={placeholderClass}>\n <PlaceholderImage\n width={className.includes('mobile') ? '144px' : '246px'}\n height={className.includes('mobile') ? '144px' : '246px'}\n backgroundColor={bannerProps?.backgroundColor ?? '#5F5F5F'}\n />\n </Box>\n );\n};\n\nconst renderBadges = (\n showBadges: boolean,\n expirationDate: string,\n isMobile: boolean,\n hasWhiteBackground: boolean,\n totalSavings?: string,\n) => {\n if (!showBadges || (!expirationDate && !totalSavings)) return null;\n\n const badgeClass = isMobile ? 'mobile-badge' : 'tablet-badge';\n const containerClass = isMobile ? 'mobile-badges' : 'tablet-badges';\n\n return (\n <BadgeContainer className={containerClass}>\n {totalSavings && (\n <Badge\n className={`${badgeClass} total-savings-badge`}\n hasWhiteBackground={hasWhiteBackground}\n tabIndex={0}\n >\n <BadgeValue className=\"badge-value\">{totalSavings}</BadgeValue>\n </Badge>\n )}\n {expirationDate && (\n <Badge\n className={`${badgeClass} expiration-badge`}\n hasWhiteBackground={hasWhiteBackground}\n tabIndex={0}\n >\n <BadgeValue className=\"badge-value\">{expirationDate}</BadgeValue>\n </Badge>\n )}\n </BadgeContainer>\n );\n};\n\nconst renderMobileContent = (\n props: ContentProps,\n isScrolled: boolean,\n renderSocialMediaIcons: React.ReactNode,\n isMobile: boolean,\n hasWhiteBackground: boolean,\n) => {\n const { shopTitle, socialTitleText, email, showBadges, expirationDate, phone, totalSavings } = props;\n\n return (\n <Box className=\"content-mobile\">\n <Typography component=\"h1\" tabIndex={shopTitle?.trim() ? 0 : -1} className=\"body-title-mobile\">\n {shopTitle}\n </Typography>\n {!isScrolled && (\n <>\n <Typography tabIndex={socialTitleText?.trim() ? 0 : -1} className=\"social-title-text-mobile\">\n {socialTitleText}\n </Typography>\n {email?.trim() && renderContactLink('email', email, 'email-text-mobile')}\n {phone?.trim() && renderContactLink('phone', phone, 'phone-text-mobile')}\n <Box className=\"social-icons-mobile\">{renderSocialMediaIcons}</Box>\n {renderBadges(showBadges, expirationDate ?? '', isMobile, hasWhiteBackground, totalSavings)}\n </>\n )}\n </Box>\n );\n};\n\nconst renderDesktopContent = (\n props: ContentProps,\n isScrolled: boolean,\n renderSocialMediaIcons: React.ReactNode,\n isMobile: boolean,\n hasWhiteBackground: boolean,\n) => {\n const { shopTitle, shopDescription, socialTitleText, email, phone, showBadges, expirationDate, totalSavings } =\n props;\n\n return (\n <Box className=\"content\">\n <Typography component=\"h1\" tabIndex={shopTitle?.trim() ? 0 : -1} className=\"body-title\">\n {shopTitle}\n </Typography>\n {!isScrolled && (\n <>\n {shopDescription?.length > 480 ? (\n <Tooltip title={shopDescription} arrow>\n <Typography tabIndex={shopDescription?.trim() ? 0 : -1} className=\"body-text\">\n {shopDescription}\n </Typography>\n </Tooltip>\n ) : (\n <Typography tabIndex={shopDescription?.trim() ? 0 : -1} className=\"body-text\">\n {shopDescription}\n </Typography>\n )}\n <Box className=\"social-media\">\n <Typography tabIndex={socialTitleText?.trim() ? 0 : -1} className=\"social-title-text\">\n {socialTitleText}\n </Typography>\n <Box className=\"social-icons\">\n {renderSocialMediaIcons}\n {email?.trim() && renderContactLink('email', email, 'email-text')}\n {phone?.trim() && renderContactLink('phone', phone, 'phone-text')}\n </Box>\n </Box>\n {renderBadges(showBadges, expirationDate ?? '', isMobile, hasWhiteBackground, totalSavings)}\n </>\n )}\n </Box>\n );\n};\n\nconst checkIfImageIsCircular = (url: string): Promise<boolean> => {\n return new Promise((resolve, reject) => {\n const imageContext = new Image();\n imageContext.crossOrigin = 'anonymous';\n imageContext.src = url;\n\n imageContext.onload = () => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) return reject(new Error('Canvas not supported'));\n\n canvas.width = imageContext.width;\n canvas.height = imageContext.height;\n\n context.drawImage(imageContext, 0, 0);\n\n const corners = [\n context.getImageData(0, 0, 1, 1).data,\n context.getImageData(imageContext.width - 1, 0, 1, 1).data,\n context.getImageData(0, imageContext.height - 1, 1, 1).data,\n context.getImageData(imageContext.width - 1, imageContext.height - 1, 1, 1).data,\n ];\n\n const isCircular = corners.every((corner) => {\n const imageArray = Array.prototype.slice.call(corner);\n const alpha = imageArray[3];\n return alpha < 10;\n });\n resolve(isCircular);\n };\n imageContext.onerror = () => reject(new Error('Failed to load image'));\n });\n};\n\nconst isWhiteOrNearWhite = (color: string | undefined): boolean => {\n if (!color) return false;\n\n const hex = color.replace('#', '').toLowerCase();\n\n /* regex pattern for hex color format: 3 chars (#fff), 4 chars (#ffff), 6 chars (#ffffff), or 8 chars (#ffffffff)*/\n if (!/^[0-9a-f]{3,4}$|^[0-9a-f]{6}$|^[0-9a-f]{8}$/i.test(hex)) return false;\n\n let fullHex = hex;\n if (hex.length === 3 || hex.length === 4) {\n fullHex = hex\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n const r = Number.parseInt(fullHex.substring(0, 2), 16);\n const g = Number.parseInt(fullHex.substring(2, 4), 16);\n const b = Number.parseInt(fullHex.substring(4, 6), 16);\n\n const threshold = 220;\n return r >= threshold && g >= threshold && b >= threshold;\n};\n\nconst createContactClickHandler = (contactType: 'email' | 'phone', contactValue: string) => ({\n onClick: () => {\n trackGTMEvent({\n event: 'contact_click',\n contact_type: contactType,\n contact_value: contactValue,\n click_element: `${contactType}_link`,\n });\n },\n onKeyDown: (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n trackGTMEvent({\n event: 'contact_click',\n contact_type: contactType,\n contact_value: contactValue,\n click_element: `${contactType}_link`,\n });\n globalThis.location.href = `${contactType === 'email' ? 'mailto' : 'tel'}:${contactValue}`;\n }\n },\n});\n\nconst renderContactLink = (contactType: 'email' | 'phone', contactValue: string, className: string) => {\n const protocol = contactType === 'email' ? 'mailto:' : 'tel:';\n const handlers = createContactClickHandler(contactType, contactValue);\n\n return (\n <Typography className={className}>\n <ContactLink href={`${protocol}${contactValue}`} {...handlers}>\n {contactValue}\n </ContactLink>\n </Typography>\n );\n};\nexport default function MysiteHero({\n className,\n shopTitle,\n shopDescription,\n socialTitleText,\n imageDetails,\n email,\n phone,\n bannerProps,\n socialIcons,\n expirationDate,\n showBadges = false,\n totalSavings,\n}: MysiteHeroProps): ReactElement {\n const isMobile = useMediaQuery('(max-width: 560px)');\n const [isScrolled, setIsScrolled] = useState(false);\n const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false);\n const [hasWhiteBackground, setHasWhiteBackground] = useState(false);\n const [isImageCircular, setIsImageCircular] = useState(false);\n\n const toggleDescription = () => {\n setIsDescriptionExpanded(!isDescriptionExpanded);\n };\n\n useEffect(() => {\n const checkImage = async () => {\n if (imageDetails?.imageSrc) {\n const isCircular = await checkIfImageIsCircular(imageDetails.imageSrc);\n setIsImageCircular(isCircular);\n } else {\n setIsImageCircular(false);\n }\n };\n\n checkImage();\n }, [imageDetails?.imageSrc]);\n\n useEffect(() => {\n setHasWhiteBackground(isWhiteOrNearWhite(bannerProps?.backgroundColor));\n }, [bannerProps?.backgroundColor]);\n\n useEffect(() => {\n let debounceTimeout: ReturnType<typeof setTimeout>;\n let lastScrollY = window.scrollY;\n let currentScrollState = false;\n let isTransitioning = false;\n let lastUpdateTime = 0;\n\n const updateScrollState = (newState: boolean) => {\n const now = Date.now();\n\n if (currentScrollState !== newState && !isTransitioning) {\n if (now - lastUpdateTime < 100) {\n return;\n }\n\n isTransitioning = true;\n currentScrollState = newState;\n lastUpdateTime = now;\n\n if (newState) {\n setIsDescriptionExpanded(false);\n }\n\n clearTimeout(debounceTimeout);\n setIsScrolled(newState);\n\n debounceTimeout = setTimeout(() => {\n isTransitioning = false;\n\n if (newState && window.scrollY < 15) {\n window.scrollTo({\n top: isMobile ? 20 : 30,\n behavior: 'smooth',\n });\n }\n }, 300);\n }\n };\n\n const handleScroll = () => {\n const currentScrollY = window.scrollY;\n\n if (isTransitioning) {\n lastScrollY = currentScrollY;\n return;\n }\n\n const scrollDelta = Math.abs(currentScrollY - lastScrollY);\n\n if (scrollDelta < 0.5) {\n return;\n }\n\n const scrollingDown = currentScrollY > lastScrollY;\n\n const scrollDownThreshold = isMobile ? 15 : 25;\n const scrollUpThreshold = isMobile ? 8 : 12;\n\n if (scrollingDown && currentScrollY > scrollDownThreshold && !currentScrollState) {\n updateScrollState(true);\n } else if (!scrollingDown && currentScrollY < scrollUpThreshold && currentScrollState) {\n updateScrollState(false);\n }\n\n lastScrollY = currentScrollY;\n };\n\n const initializeState = () => {\n const initialScrollY = window.scrollY;\n const scrollThreshold = isMobile ? 5 : 10;\n const shouldStartCompact = initialScrollY > scrollThreshold;\n\n currentScrollState = shouldStartCompact;\n setIsScrolled(shouldStartCompact);\n lastScrollY = initialScrollY;\n lastUpdateTime = Date.now();\n };\n\n let rafId: number | null = null;\n let lastRafTime = 0;\n const throttledScrollHandler = () => {\n if (rafId) return;\n\n const now = Date.now();\n if (now - lastRafTime < 16) {\n return;\n }\n\n rafId = requestAnimationFrame(() => {\n handleScroll();\n lastRafTime = Date.now();\n rafId = null;\n });\n };\n\n initializeState();\n window.addEventListener('scroll', throttledScrollHandler, { passive: true });\n\n return () => {\n window.removeEventListener('scroll', throttledScrollHandler);\n if (rafId) cancelAnimationFrame(rafId);\n clearTimeout(debounceTimeout);\n };\n }, [isMobile]);\n\n const renderSocialMediaIcons = useMemo(() => {\n return socialIcons?.map((icon, index) => {\n const handleSocialClick = (e: React.MouseEvent) => {\n e.preventDefault();\n trackGTMEvent({\n event: 'social_click',\n social_platform: icon.type,\n social_url: icon.url,\n click_element: 'social_icon',\n });\n window.open(icon.url, '_blank');\n };\n\n return (\n <StyledSpan key={icon?.type + index} onClick={handleSocialClick}>\n <NsLink href={icon.url} target=\"_blank\">\n <NsImage\n key={icon?.type + index}\n src={`https://www.google.com/s2/favicons?domain=${icon?.url}&sz=24`}\n alt={`${icon.type} icon`}\n width=\"24\"\n height=\"24\"\n />\n </NsLink>\n </StyledSpan>\n );\n });\n }, [socialIcons]);\n\n const containerClass = `${className} ${isScrolled ? 'scrolled' : ''}`;\n const props = {\n shopTitle,\n shopDescription,\n socialTitleText,\n email,\n phone,\n showBadges,\n expirationDate,\n totalSavings,\n };\n\n const getCharacterLimit = () => {\n if (window.innerWidth <= 380) return 50;\n if (window.innerWidth <= 415) return 56;\n if (window.innerWidth <= 460) return 62;\n return 80;\n };\n\n const shouldShowToggle = isMobile && shopDescription && shopDescription.length > getCharacterLimit();\n\n return isMobile ? (\n <MysiteHeroContainerMobile\n className={containerClass}\n data-testid=\"my-site-shop-header\"\n bannerProps={bannerProps}\n isCircularImage={isImageCircular}\n hasWhiteBackground={hasWhiteBackground}\n >\n <Box className=\"image-content-mobile\">\n {renderImageContent(imageDetails, bannerProps ?? {}, 'bg-image-mobile')}\n {renderMobileContent(props, isScrolled, renderSocialMediaIcons, isMobile, hasWhiteBackground)}\n </Box>\n {!isScrolled && (\n <Box className=\"expandable-description-mobile\">\n <Typography\n className={`description-content-mobile ${isDescriptionExpanded || !shouldShowToggle ? 'expanded' : 'collapsed'}`}\n >\n {shopDescription}\n </Typography>\n {shouldShowToggle && (\n <ToggleButtonMobile onClick={toggleDescription}>\n <ArrowDownIcon\n width={16}\n height={16}\n className={`arrow-icon-mobile ${isDescriptionExpanded ? 'expanded' : ''}`}\n />\n </ToggleButtonMobile>\n )}\n </Box>\n )}\n </MysiteHeroContainerMobile>\n ) : (\n <MysiteHeroContainer\n className={containerClass}\n data-testid=\"my-site-shop-header\"\n bannerProps={bannerProps}\n isCircularImage={isImageCircular}\n hasWhiteBackground={hasWhiteBackground}\n >\n {renderImageContent(imageDetails, bannerProps ?? {}, 'bg-image')}\n {renderDesktopContent(props, isScrolled, renderSocialMediaIcons, isMobile, hasWhiteBackground)}\n </MysiteHeroContainer>\n );\n}\n","import React from 'react';\nimport { styled } from '@nuskin/foundation-theme';\nimport { Box, BoxProps } from '@mui/material';\n\ninterface StyledBoxProps extends BoxProps {\n bannerProps?: {\n backgroundColor?: string;\n headlineFont?: string;\n paragraphFont?: string;\n };\n isCircularImage?: boolean;\n hasWhiteBackground?: boolean;\n}\n\ninterface BadgeProps extends BoxProps {\n hasWhiteBackground?: boolean;\n}\n\nconst getContactTextStyles = (hasWhiteBackground: boolean | undefined) => ({\n fontSize: '12px',\n fontStyle: 'normal' as const,\n fontWeight: '600',\n lineHeight: '16px',\n letterSpacing: '0.12px',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n '& a': {\n color: 'inherit',\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n});\n\nconst getSocialTitleStyles = (hasWhiteBackground: boolean | undefined) => ({\n fontSize: '12px',\n fontStyle: 'normal' as const,\n fontWeight: '700',\n lineHeight: '16px',\n letterSpacing: '0.48px',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n textTransform: 'uppercase' as const,\n paddingLeft: '5px',\n});\n\nconst getSocialIconsStyles = () => ({\n display: 'flex',\n flexDirection: 'row' as const,\n gap: '10px',\n alignItems: 'center',\n});\n\nconst getContactTextMobileStyles = (hasWhiteBackground: boolean | undefined) => ({\n ...getContactTextStyles(hasWhiteBackground),\n paddingBottom: '11px',\n wordBreak: 'break-all' as const,\n overflowWrap: 'break-word' as const,\n paddingLeft: '5px',\n '& a': {\n color: 'inherit',\n textDecoration: 'none',\n },\n '@media (max-width: 420px)': {\n fontSize: '11px',\n lineHeight: '15px',\n paddingBottom: '8px',\n },\n '@media (max-width: 400px)': {\n fontSize: '10px',\n lineHeight: '14px',\n paddingBottom: '6px',\n },\n '@media (max-width: 375px)': {\n fontSize: '8px',\n lineHeight: '12px',\n paddingBottom: '4px',\n },\n});\n\nconst getSocialTitleMobileStyles = (hasWhiteBackground: boolean | undefined) => ({\n ...getSocialTitleStyles(hasWhiteBackground),\n marginBottom: '11px',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n '@media (max-width: 420px)': {\n fontSize: '11px',\n lineHeight: '14px',\n marginBottom: '8px',\n },\n '@media (max-width: 400px)': {\n fontSize: '10px',\n lineHeight: '12px',\n marginBottom: '5px',\n },\n '@media (max-width: 375px)': {\n fontSize: '8px',\n lineHeight: '11px',\n marginBottom: '4px',\n },\n});\n\nexport const MysiteHeroContainer = styled((props: StyledBoxProps) => <Box {...props} />)(\n ({ bannerProps, isCircularImage, hasWhiteBackground }) => ({\n backgroundClip: 'border-box',\n display: 'flex',\n background: bannerProps?.backgroundColor ?? '#383838',\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n height: 'auto',\n flexDirection: 'row',\n alignItems: 'center',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'transform, opacity',\n transform: 'translateZ(0)',\n backfaceVisibility: 'hidden',\n '&.scrolled': {\n top: 0,\n left: 0,\n right: 0,\n boxShadow: '0 2px 8px rgba(0,0,0,0.2)',\n '.content': {\n paddingTop: '0',\n justifyContent: 'center',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.body-title': {\n fontSize: '26px',\n lineHeight: '34px',\n marginBottom: '0',\n fontStyle: 'normal',\n fontWeight: '400',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n\n '.bg-image': {\n width: '90px',\n height: '90px',\n padding: isCircularImage ? '2px' : '0px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n objectFit: 'cover',\n objectPosition: 'center',\n },\n '.placeholder-image': {\n '& > div': {\n width: '90px',\n height: '90px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n },\n '.content': {\n width: '70%',\n height: '100%',\n marginLeft: '2%',\n marginRight: 'auto',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n boxSizing: 'border-box',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.bg-image': {\n width: '252px',\n height: '252px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n padding: isCircularImage ? '3px' : '0px',\n objectFit: 'cover',\n objectPosition: 'center',\n },\n '.placeholder-image': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n '& > div': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n '.body-title': {\n fontSize: '32px',\n lineHeight: '38px',\n marginBottom: '8px',\n fontWeight: '400',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n paddingLeft: '5px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.body-text': {\n fontSize: '16px',\n marginBottom: '12px',\n fontStyle: 'normal',\n fontWeight: '400',\n lineHeight: '22px',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontFamily: bannerProps?.paragraphFont ?? 'inherit',\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n WebkitLineClamp: 3,\n textOverflow: 'ellipsis',\n paddingLeft: '5px',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n },\n '.social-media': {\n display: 'flex',\n flexDirection: 'column',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n },\n '.email-text': getContactTextStyles(hasWhiteBackground),\n '.phone-text': getContactTextStyles(hasWhiteBackground),\n '.social-title-text': {\n ...getSocialTitleStyles(hasWhiteBackground),\n marginBottom: '8px',\n },\n '.social-icons': {\n ...getSocialIconsStyles(),\n paddingBottom: '8px',\n },\n }),\n);\n\nexport const MysiteHeroContainerMobile = styled((props: StyledBoxProps) => <Box {...props} />)(\n ({ bannerProps, isCircularImage, hasWhiteBackground }) => ({\n backgroundClip: 'border-box',\n display: 'flex',\n background: bannerProps?.backgroundColor ?? '#383838',\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n flexDirection: 'column',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'transform, opacity',\n transform: 'translateZ(0)',\n backfaceVisibility: 'hidden',\n '&.scrolled': {\n top: 0,\n left: 0,\n right: 0,\n boxShadow: '0 2px 8px rgba(0,0,0,0.2)',\n '.content-mobile': {\n paddingTop: '5px',\n width: '60%',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.body-title-mobile': {\n fontSize: '18px',\n lineHeight: '28px',\n marginBottom: '0',\n fontStyle: 'normal',\n fontWeight: '400',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.bg-image-mobile': {\n width: '75px',\n height: '75px',\n padding: isCircularImage ? '2px' : '0px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n objectFit: 'cover',\n objectPosition: 'center',\n },\n '.placeholder-image-mobile': {\n '& > div': {\n width: '75px !important',\n height: '75px !important',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n },\n '.image-content-mobile': {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n },\n '.content-mobile': {\n width: '55%',\n height: '100%',\n paddingTop: '10px',\n paddingRight: '10px',\n marginLeft: '8px',\n marginRight: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n position: 'relative',\n boxSizing: 'border-box',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n '@media (max-width: 420px)': {\n paddingTop: '8px',\n width: '100%',\n },\n '@media (max-width: 400px)': {\n paddingTop: '6px',\n width: '100%',\n height: '100%',\n },\n '@media (max-width: 375px)': {\n paddingTop: '4px',\n width: '100%',\n height: '100%',\n },\n },\n '.bg-image-mobile': {\n width: '144px',\n height: '144px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n objectFit: 'cover',\n objectPosition: 'center',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n padding: isCircularImage ? '2px' : '0px',\n '@media (max-width: 420px)': {\n width: '120px',\n height: '120px',\n },\n '@media (max-width: 400px)': {\n width: '112px',\n height: '112px',\n },\n '@media (max-width: 375px)': {\n width: '90px',\n height: '90px',\n },\n },\n '.placeholder-image-mobile': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n '& > div': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n width: '144px',\n height: '144px',\n '@media (max-width: 420px)': {\n width: '120px',\n height: '120px',\n },\n '@media (max-width: 400px)': {\n width: '110px !important',\n height: '110px !important',\n },\n '@media (max-width: 375px)': {\n width: '90px',\n height: '90px',\n },\n },\n },\n '.body-title-mobile': {\n fontSize: '22px',\n lineHeight: '28px',\n marginBottom: '13px',\n fontWeight: '400',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontStyle: 'normal',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n paddingLeft: '5px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n '@media (max-width: 420px)': {\n fontSize: '16px',\n lineHeight: '24px',\n marginBottom: '8px',\n },\n '@media (max-width: 400px)': {\n fontSize: '16px',\n lineHeight: '22px',\n marginBottom: '6px',\n },\n '@media (max-width: 375px)': {\n fontSize: '14px',\n lineHeight: '20px',\n marginBottom: '4px',\n },\n },\n '.body-text-mobile': {\n fontSize: '14px',\n padding: '20px 25px 20px 25px',\n fontStyle: 'normal',\n fontWeight: '400',\n lineHeight: '20px',\n color: '#252525',\n backgroundColor: '#E0E0E0',\n fontFamily: bannerProps?.paragraphFont ?? 'inherit',\n transition: 'all 0.25s cubic-bezier(0.4, 0, 0.2, 1)',\n opacity: 1,\n transform: 'translateY(0)',\n },\n '.expandable-description-mobile': {\n backgroundColor: '#E0E0E0',\n position: 'relative',\n },\n '.description-content-mobile': {\n fontSize: '14px',\n padding: '10px 15px',\n fontStyle: 'normal',\n fontWeight: '400',\n lineHeight: '20px',\n color: '#252525',\n fontFamily: bannerProps?.paragraphFont ?? 'inherit',\n transition: 'max-height 0.3s ease-in-out, opacity 0.3s ease-in-out',\n overflow: 'hidden',\n position: 'relative',\n '&.collapsed': {\n maxHeight: '50px',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n height: '20px',\n background: 'linear-gradient(transparent, rgba(224, 224, 224, 0.8), #E0E0E0)',\n pointerEvents: 'none',\n },\n },\n '&.expanded': {\n maxHeight: 'none',\n whiteSpace: 'normal',\n display: 'block',\n '&::after': {\n display: 'none',\n },\n },\n },\n '.email-text-mobile': getContactTextMobileStyles(hasWhiteBackground),\n '.phone-text-mobile': getContactTextMobileStyles(hasWhiteBackground),\n '.social-title-text-mobile': getSocialTitleMobileStyles(hasWhiteBackground),\n '.social-icons-mobile': {\n ...getSocialIconsStyles(),\n paddingBottom: '10px',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n '& img': {\n width: '24px',\n height: '24px',\n '@media (max-width: 400px)': {\n width: '20px',\n height: '20px',\n },\n '@media (max-width: 375px)': {\n width: '18px',\n height: '18px',\n },\n },\n '@media (max-width: 420px)': {\n paddingBottom: '8px',\n },\n '@media (max-width: 400px)': {\n paddingBottom: '4px',\n },\n '@media (max-width: 375px)': {\n paddingBottom: '3px',\n },\n },\n }),\n);\n\nexport const BadgeContainer = styled(Box)({\n display: 'flex',\n gap: '12px',\n marginBottom: '16px',\n paddingLeft: '5px',\n\n '&.mobile-badges': {\n flexDirection: 'column',\n gap: '8px',\n marginBottom: '12px',\n },\n\n '&.tablet-badges': {\n flexDirection: 'row',\n gap: '12px',\n marginBottom: '8px',\n },\n});\n\nexport const Badge = styled((props: BadgeProps) => <Box {...props} />)(({ hasWhiteBackground }) => ({\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n backdropFilter: 'blur(10px)',\n borderRadius: '20px',\n padding: '8px 16px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n border: '1px solid rgba(255, 255, 255, 0.3)',\n transition: 'all 0.3s ease',\n\n '&.mobile-badge': {\n padding: '6px 12px',\n borderRadius: '16px',\n fontSize: '12px',\n },\n\n '&.tablet-badge': {\n padding: '8px 16px',\n borderRadius: '20px',\n fontSize: '14px',\n },\n\n '&.total-savings-badge': {\n backgroundColor: '#4A6987',\n border: 'none',\n borderRadius: '8px',\n padding: '8px 16px',\n gap: '4px',\n minHeight: '32px',\n backdropFilter: 'none',\n '.badge-value': {\n color: '#FFFFFF',\n },\n '&:hover': {\n backgroundColor: '#4A6987',\n transform: 'none',\n boxShadow: 'none',\n },\n },\n\n '&.expiration-badge': {\n borderRadius: '8px',\n padding: '8px 16px',\n gap: '4px',\n minHeight: '32px',\n },\n\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.3)',\n transform: 'translateY(-1px)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n },\n\n '.badge-text': {\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontWeight: '400',\n opacity: 0.9,\n },\n\n '.badge-value': {\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontWeight: '600',\n },\n}));\nexport const ToggleButtonMobile = styled('button')({\n backgroundColor: '#E0E0E0',\n border: '1px solid #252525',\n borderRadius: '10px',\n cursor: 'pointer',\n width: '40px',\n height: '20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '10px auto 5px auto',\n transition: 'all 0.2s ease',\n '& .arrow-icon-mobile': {\n transition: 'transform 0.3s ease',\n '&.expanded': {\n transform: 'rotate(180deg)',\n },\n },\n});\nexport const StyledSpan = styled(Box)`\n background: none;\n border: 2px solid transparent;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n transition: all 0.3s ease;\n\n &:hover {\n transform: scale(1.1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n &:focus,\n &:focus-within {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\n }\n\n &:hover svg {\n fill: #ffffff;\n }\n`;\nexport const ImgTabIndex = styled('span')`\n line-height: 0.5;\n`;\n\nexport const ContactLink = styled('a')({\n fontSize: 'inherit',\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit',\n color: 'inherit',\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n});\n\nexport const BadgeValue = styled('span')({});\n","import React from 'react';\nimport { Box } from '@mui/material';\n\ntype PlaceholderImageProps = {\n readonly width: string | number;\n readonly height: string | number;\n readonly backgroundColor: string;\n};\n\nexport const PlaceholderImage: React.FC<PlaceholderImageProps> = ({ width, height, backgroundColor }) => {\n return (\n <Box\n sx={{\n width,\n height,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor,\n }}\n data-testid=\"placeholder-image\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"129\" viewBox=\"0 0 128 129\" fill=\"none\">\n <g id=\"ns_logomark\">\n <path\n id=\"Vector\"\n d=\"M127.495 52.1946C125.663 47.9538 122.999 44.1171 119.661 40.9073C112.565 34.2835 102.562 31.7037 93.1175 34.0622C83.6733 36.4206 76.0882 43.3926 72.991 52.5619C71.4142 56.8414 70.6063 61.3627 70.6039 65.9196C70.6039 85.8227 70.6039 105.737 70.6039 125.662C70.6039 129.001 70.6039 129.001 66.9051 128.834C66.9051 128.2 66.9051 127.499 66.9051 126.831C66.9051 104.323 66.9051 81.8263 66.9051 59.3409C66.3415 45.3064 74.9302 32.5039 88.1888 27.6164C89.79 27.0612 91.4307 26.6259 93.0981 26.314C94.7114 25.98 96.4605 25.8465 98.0738 25.6461C96.0231 16.3291 78.9419 5.60953 65.0889 4.97504C50.3084 4.62252 36.6074 12.6365 29.7509 25.6461C31.331 25.8465 32.8779 25.9466 34.3569 26.2138C48.0999 28.544 58.7086 39.4998 60.5168 53.2298C60.8904 55.7285 61.0812 58.2508 61.0877 60.7769C61.0877 82.7507 61.0877 104.724 61.0877 126.697C61.0877 128.434 60.6842 129.169 58.8016 128.968C56.9183 128.768 57.1204 128.2 57.1204 126.965C57.1204 119.985 57.1204 113.006 57.1204 105.993C57.1204 92.1674 57.1204 78.3423 57.1204 64.5171C57.2385 56.3928 54.2457 48.5271 48.7477 42.5103C42.2429 35.5282 32.6539 32.2371 23.1959 33.7401C13.7379 35.243 5.66194 41.3411 1.67448 49.9906C1.23781 50.8254 0.867444 51.6937 0.262573 52.9293C5.79294 22.3996 32.4752 0.139867 63.7085 0.000656323C94.9411 -0.138555 121.824 21.8824 127.629 52.3616\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_2\"\n d=\"M86.0995 124.927C86.0995 124.293 86.0995 123.858 86.0995 123.425C86.0995 111.669 86.0995 100.049 86.0995 88.1269C85.8836 82.4231 88.0775 76.89 92.1523 72.8653C97.3131 67.9567 104.984 66.7091 111.452 69.7263C117.892 72.1185 122.166 78.225 122.178 85.0541C122.372 92.1747 119.781 99.0921 114.949 104.356C107.882 113.237 98.6134 120.141 88.05 124.392C87.4217 124.616 86.782 124.805 86.1335 124.96\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_3\"\n d=\"M41.8183 125.395C37.6149 123.224 33.6477 121.487 29.9828 119.25C21.5405 114.299 14.4778 107.331 9.43828 98.9796C6.53442 94.3985 5.34408 88.9493 6.07591 83.5852C7.056 75.2882 13.8859 68.8841 22.2829 68.3905C31.1231 67.2473 39.3527 73.0751 41.1455 81.7484C41.76 84.263 42.0762 86.8411 42.0868 89.4287C42.0868 100.516 42.0868 111.636 42.0868 122.823C42.0868 123.457 42.0867 124.059 41.8854 125.294\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_4\"\n d=\"M51.3337 127.431C47.9713 127.431 47.6681 127.198 47.6681 124.326V76.6386C48.1096 67.937 42.9747 59.906 34.8574 56.602C25.8992 52.8557 15.5485 54.8615 8.66523 61.6779C4.28638 66.6086 1.89197 72.9696 1.94049 79.5438C1.95423 80.2444 1.78037 80.9357 1.43588 81.5476C1.06552 79.9446 0.62885 78.2081 0.426687 76.7387C-0.724024 70.4463 0.471163 63.9529 3.78906 58.472C6.09291 54.6111 9.65016 51.6434 13.8762 50.0567C22.8587 46.555 32.9393 47.1785 41.4148 51.7598C47.6592 54.8694 51.5262 61.2882 51.3337 68.2232C51.5019 87.6249 51.3337 107.027 51.3337 126.396C51.3337 126.797 51.3337 127.164 51.3337 127.532\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_5\"\n d=\"M76.287 127.499V125.094C76.287 107.196 76.4883 89.2963 76.287 71.3966C76.0848 56.9034 84.2554 50.6588 95.7553 48.3545C101.535 47.2005 107.524 47.6393 113.071 49.6235C122.914 53.3319 128.994 63.1725 127.866 73.5672C127.631 76.2831 127.17 78.975 126.487 81.6151C125.916 78.2758 125.68 74.9364 124.772 71.597C122.808 64.3002 117.377 58.4174 110.228 55.8421C103.078 53.2668 95.1132 54.3239 88.8955 58.6734C83.0441 62.6207 79.7011 69.3237 80.086 76.3389C80.086 92.2349 80.086 108.131 80.086 124.026C80.086 127.366 80.086 127.366 76.2198 127.366\"\n fill=\"#252525\"\n />\n </g>\n </svg>\n </Box>\n );\n};\n","import React from 'react';\n\ntype ArrowDownIconProps = {\n readonly width?: string | number;\n readonly height?: string | number;\n readonly className?: string;\n};\n\nexport const ArrowDownIcon: React.FC<ArrowDownIconProps> = ({ width = 16, height = 16, className = '' }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n data-testid=\"arrow-down-icon\"\n >\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n );\n};\n","export interface GTMEvent {\n event: string;\n\n [key: string]: unknown;\n}\n\ndeclare global {\n interface Window {\n dataLayer: unknown[];\n }\n}\n\nexport function trackGTMEvent(eventData: GTMEvent): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const url = window.location.href;\n const updatedEventData = { ...eventData };\n\n const prefix = url.includes('personal-offer') ? 'postorefront_' : 'mysite_';\n updatedEventData.event = prefix + eventData.event;\n\n try {\n if (window.dataLayer) {\n window.dataLayer.push(updatedEventData);\n } else {\n console.error('GTM dataLayer not available, but event logged');\n window.dataLayer = [];\n window.dataLayer.push(updatedEventData);\n }\n } catch (error) {\n console.error('Failed to track GTM event:', error);\n }\n}\n"]}
1
+ {"version":3,"sources":["/gitlab-runner-data/builds/nextgen-development/mysite/npm/react-mysite-elements/dist/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../src/index.ts","../src/common/card/NsProductCard.tsx","../src/common/card/styles/NsProductCard.Styled.tsx","../src/common/carousel/NsProductCarousel.tsx","../src/common/carousel/NsProductCarousel.styled.ts","../src/common/carousel/ProductTabCarousel.tsx","../src/common/Nav-Category-Navigation/NsCategoryNavigation.tsx","../src/common/Nav-Category-Navigation/NsCategoryNavigation.styled.tsx","../src/common/carousel/ProductTabCarousel.styled.tsx","../src/common/headers/MysiteHero.tsx","../src/common/headers/MysiteHero.styled.tsx","../src/common/icon/icons/PlaceholderImage.tsx","../src/common/icon/icons/ArrowDownIcon.tsx","../src/common/utils/gtmTracking.ts","../src/common/shopping-dashboard/ShoppingDashboard.styled.tsx","../src/common/shopping-dashboard/shared/DashboardHeader.tsx","../src/common/shopping-dashboard/shared/DashboardHeader.styled.tsx","../src/common/shopping-dashboard/TranslationKeys/translationResolver.ts","../src/common/shopping-dashboard/TranslationKeys/ShoppingDashboardTranslationKeys.ts","../src/common/shopping-dashboard/utils/marketOptions.ts","../src/common/shopping-dashboard/shared/StatsCard.tsx","../src/common/shopping-dashboard/utils/trendUtils.tsx","../src/common/shopping-dashboard/shared/StatsCard.styled.tsx","../src/common/shopping-dashboard/shared/LoadingSkeletons.tsx","../src/common/shopping-dashboard/shared/LoadingSkeletons.styled.tsx","../src/common/shopping-dashboard/shared/TopProducts/TopSellingProductsList.tsx","../src/common/shopping-dashboard/utils/dataUtils.ts","../src/common/shopping-dashboard/shared/TopProducts/TopSellingProductsList.styled.tsx","../src/common/shopping-dashboard/shared/WidgetMenu.tsx","../src/common/shopping-dashboard/shared/WidgetMenu.styled.tsx","../src/common/shopping-dashboard/shared/ConversionRate/ConversionRateChart.tsx","../src/common/shopping-dashboard/shared/ConversionRate/ConversionRateChart.styled.tsx","../src/common/shopping-dashboard/utils/dateConstants.ts","../src/common/shopping-dashboard/utils/dateFormat.ts","../src/common/shopping-dashboard/shared/Signups/SignupsChart.tsx","../src/common/shopping-dashboard/shared/Signups/SignupsChart.styled.tsx","../src/common/shopping-dashboard/shared/TopCategories/TopCategoriesPieChart.tsx","../src/common/shopping-dashboard/shared/TopCategories/TopCategoriesPieChart.styled.tsx","../src/common/shopping-dashboard/ShoppingDashboard.tsx","../src/common/shopping-dashboard/MysiteDashboardWithNavigation.tsx","../src/common/shopping-dashboard/shared/TopProducts/ProductsFullView.tsx","../src/common/shopping-dashboard/shared/PageHeader.tsx","../src/common/shopping-dashboard/shared/PageHeader.styled.tsx","../src/common/shopping-dashboard/shared/DataTable.tsx","../src/common/shopping-dashboard/shared/DataTable.styled.tsx","../src/common/shopping-dashboard/shared/Pagination.tsx","../src/common/shopping-dashboard/shared/Pagination.styled.tsx","../src/common/shopping-dashboard/shared/FullViewComponents.styled.tsx","../src/common/shopping-dashboard/shared/TopProducts/ProductsFullView.styled.tsx","../src/common/shopping-dashboard/shared/useViewport.ts","../src/common/shopping-dashboard/shared/ConversionRate/ConversionRateFullView.tsx","../src/common/shopping-dashboard/shared/ConversionRate/ConversionRateFullView.styled.tsx","../src/common/shopping-dashboard/shared/Signups/SignupsFullView.tsx","../src/common/shopping-dashboard/shared/Signups/SignupsFullView.styled.tsx","../src/common/shopping-dashboard/shared/TopCategories/CategoriesFullView.tsx","../src/common/shopping-dashboard/shared/TopCategories/CategoriesFullView.styled.tsx","../src/common/shopping-dashboard/TranslationContext.tsx","../src/common/shopping-dashboard/ProductOfferDashboard.styled.tsx","../src/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersPieChart.tsx","../src/common/shopping-dashboard/TranslationKeys/ProductOfferDashboardTranslationKeys.ts","../src/common/shopping-dashboard/ProductOfferDashboard.tsx","../src/common/shopping-dashboard/PoDashboardWithNavigation.tsx","../src/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersFullView.tsx","../src/common/shopping-dashboard/shared/TopPerformingOffers/TopPerformingOffersFullView.styled.tsx","../src/common/shopping-dashboard/shared/FilterBar.styled.tsx","../src/common/shopping-dashboard/shared/FilterBar.tsx","../src/common/shopping-dashboard/fixtures/mockDashboardData.ts","../src/common/shopping-dashboard/fixtures/mockProductOfferData.ts"],"names":["Ap","Object","create","jo","defineProperty","zp","getOwnPropertyDescriptor","Bp","getOwnPropertyNames","Ep","getPrototypeOf","Hp","prototype","hasOwnProperty","fa","e","t","exports","Wp","a","get","enumerable","an","n","i","call","M","__esModule","value","_p","require_ReactPropTypesSecret","__commonJSMin","module","ReactPropTypesSecret","require_factoryWithThrowingShims","emptyFunction","emptyFunctionWithReset","Nn","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","err","Error","name","isRequired","getShim","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","require_prop_types","zn","ReactIs","throwOnDirectAccess","index_exports","__export","CategoriesFullView","ConversionRateChart","ConversionRateFullView","DATE_RANGE_LABELS","DAYS_MAP","DashboardHeader","DataTable","FilterBar","MysiteDashboardWithNavigation","MysiteHero","NsCategoryNavigation","NsProductCard","NsProductCard_default","PageHeader","Pagination","PoDashboardWithNavigation","ProductCarousel","ProductCardCarousel","ProductOfferDashboard","ProductOfferDashboardTranslationKeys","ProductTabCarousel","ProductTabCarousel_default","ProductsFullView","ShoppingDashboard","ShoppingDashboardTranslationKeys","SignupsChart","SignupsFullView","StatsCard","TopCategoriesPieChart","TopPerformingOffersFullView","TopPerformingOffersPieChart","TopSellingProductsList","TranslationProvider","WidgetMenu","buildDefaultMarketOptions","calculatePercentage","calculateTotalPages","formatDateRange","formatDateRangeLabel","formatDisplayDate","formatISODate","formatShortDate","getDateRangeLabel","getDaysFromDateRange","getTranslation","getTranslationResolver","getTrendColor","getTrendIcon","mockCategories","mockConversionData","mockOrders","mockProductOfferStats","mockSignupData","mockSignupDetails","mockStats","mockTopOffers","mockTopProducts","paginateItems","resolveMarketOptions","resolveTranslation","setTranslationResolver","sortByNumericProperty","useTranslation","useTranslationResolver","__toCommonJS","import_react","require","import_foundation_ui_components","import_foundation_theme","PriceComponent","Vt","styled","ProductCardContainer","isMobile","ImageContainer","bgColor","DefaultImage","ProductTitle","ProductBadgeContainer","AddToCartButton","disabled","isHovered","CartIcon","import_material","import_jsx_runtime","productTitle","imageDetails","className","button","onCardClick","productStatusBadge","directSellerBadge","mySitePriceComponent","testId","gn","useState","isButtonHovered","setIsButtonHovered","mn","useMediaQuery","handleImageError","target","noImageFallback","fallbackImage","src","_e","jsxs","onClick","tabIndex","children","jsx","onError","imageSrc","fn","NsImage","alt","imageAlt","areaLabel","width","title","showButton","buttonText","stopPropagation","onMouseEnter","onMouseLeave","height","viewBox","fill","xmlns","fillRule","clipRule","d","import_react_slick","import_useMediaQuery","import_Box","SlickContainer","ze","lo","Box","ScrollableContainer","CardList","ControlsContainer","ViewAllWrapper","$isMobile","ProductCountWrapper","ArrowsWrapper","$isDisabled","Scrollablewrapper","CustomTypography","hn","NsTypography","ViewAllLink","$disabled","EmptyProductCategories","ControlsHeaderRow","ProductInfoWrapper","CategoryNameWrapper","entries","renderEntry","settings","showControlButtons","allEntryLabel","allEntryLink","categoryName","emptyProductMessage","productsCountLabel","isInitialDataLoading","history","sliderRef","Vo","useRef","Fn","prev","useCallback","current","slickPrev","next","slickNext","renderProductEntry","entry","index","ve","directSeller","sliderSettings","dots","infinite","speed","slidesToShow","Math","min","length","slidesToScroll","swipe","draggable","arrows","responsive","breakpoint","shouldShowNavigation","renderCarouselContent","map","On","Slider","ref","variant","preventDefault","push","Ln","NsCarouselControl","viewAllLabel","viewAllUrl","React","import_Tabs","import_Tab","import_prop_types","En","NsCategoryNavigationContainer","Hn","div","TabPanel","other","It","role","hidden","id","ha","propTypes","Zo","itemArray","controlledValue","onChange","_n","internalValue","setInternalValue","Gn","Kn","Tabs","orientation","event","newValue","item","Un","Tab","label","categoryId","findIndex","content","getMinHeight","$hasCategories","ProductTabCarouselContainer","Zt","TabsContainer","ContentContainer","LoadingContainer","NoTabsContainer","SpinnerContainer","fetchCategories","fetchProducts","showCustomCategory","emptyProductTabs","getCategoryId","categories","Xn","Ke","isLoadingInitialData","setIsLoadingInitialData","setCategories","isCategoriesLoaded","setIsCategoriesLoaded","selectedTab","setSelectedTab","products","setProducts","loading","setLoading","shouldShowSpinner","setShouldShowSpinner","checkForExistingSpinners","existingSpinners","document","querySelectorAll","useEffect","then","data","finally","cat","ft","_","ei","NsSpinner","getContactTextStyles","hasWhiteBackground","fontSize","fontStyle","fontWeight","lineHeight","letterSpacing","color","textDecoration","getSocialTitleStyles","textTransform","paddingLeft","getSocialIconsStyles","display","flexDirection","gap","alignItems","getContactTextMobileStyles","paddingBottom","wordBreak","overflowWrap","getSocialTitleMobileStyles","marginBottom","transition","opacity","transform","MysiteHeroContainer","mt","Qo","so","bannerProps","isCircularImage","backgroundClip","background","backgroundColor","position","overflow","willChange","backfaceVisibility","top","left","right","boxShadow","paddingTop","justifyContent","fontFamily","headlineFont","padding","objectFit","objectPosition","marginLeft","marginRight","boxSizing","whiteSpace","textOverflow","paragraphFont","WebkitBoxOrient","WebkitLineClamp","MysiteHeroContainerMobile","paddingRight","maxHeight","bottom","pointerEvents","BadgeContainer","Badge","backdropFilter","borderRadius","border","minHeight","ToggleButtonMobile","cursor","margin","StyledSpan","ImgTabIndex","ContactLink","BadgeValue","PlaceholderImage","ht","ui","sx","ArrowDownIcon","wa","trackGTMEvent","eventData","window","url","href","updatedEventData","prefix","includes","dataLayer","console","error","renderImageContent","placeholderClass","A","Ao","le","renderBadges","showBadges","expirationDate","totalSavings","badgeClass","renderMobileContent","isScrolled","renderSocialMediaIcons","shopTitle","socialTitleText","email","phone","Typography","component","trim","Fragment","renderContactLink","renderDesktopContent","shopDescription","Tooltip","arrow","checkIfImageIsCircular","Promise","resolve","reject","imageContext","Image","crossOrigin","onload","canvas","createElement","context","getContext","drawImage","isCircular","getImageData","every","corner","Array","slice","onerror","isWhiteOrNearWhite","hex","replace","toLowerCase","test","fullHex","split","char","join","r","Number","parseInt","substring","g","b","threshold","createContactClickHandler","contactType","contactValue","contact_type","contact_value","click_element","onKeyDown","key","globalThis","protocol","handlers","socialIcons","st","setIsScrolled","isDescriptionExpanded","setIsDescriptionExpanded","setHasWhiteBackground","isImageCircular","setIsImageCircular","toggleDescription","debounceTimeout","lastScrollY","scrollY","currentScrollState","isTransitioning","lastUpdateTime","updateScrollState","newState","now","Date","clearTimeout","setTimeout","scrollTo","behavior","handleScroll","currentScrollY","abs","scrollingDown","scrollDownThreshold","scrollUpThreshold","initializeState","initialScrollY","shouldStartCompact","rafId","lastRafTime","throttledScrollHandler","requestAnimationFrame","addEventListener","passive","removeEventListener","cancelAnimationFrame","useMemo","icon","social_platform","type","social_url","open","NsLink","containerClass","getCharacterLimit","innerWidth","shouldShowToggle","DashboardContainer","po","StatsRow","WidgetContainer","TwoColumnGrid","ErrorContainer","import_CalendarToday","import_Public","Be","ColorUtils","getGenomeColor","HeaderContainer","theme","TitleSection","ShopTitle","DateRangeLabel","FiltersSection","FilterDropdownContainer","FilterLabel","StyledSelect","FilterIcon","LoadingIndicatorContainer","DesktopFiltersContainer","StyledCircularProgress","activeResolver","resolver","fallback","result","stats","revenue","volume","visits","subtitle","dcSv","conversionRate","trend","increased","decreased","unchanged","details","filter","dateRange","last7days","last30days","last90days","thisMonth","dateRangeLabel","market","all","marketLabel","productSort","units","byUnits","byRevenue","byVolume","signupView","members","retail","brandAffiliates","showAll","showMembers","showRetail","showBrandAffiliates","conversionType","standard","subscription","categorySort","byTrend","widget","topProducts","viewAll","empty","ariaLabel","titleAriaLabel","sortAriaLabel","noImageAriaLabel","unitsSuffix","revenueSuffix","dcSvSuffix","rank","formula","comparison","chartAriaLabel","filterAriaLabel","noData","noChange","tooltipOrders","tooltipVisits","ordersPerSiteVisits","signups","total","totalSignupsInPeriod","noTrendData","topCategories","menu","fullView","navigation","backToDashboard","backAriaLabel","dashboard","statsRow","dashboardFilters","loadingDashboard","dateRangeFilter","marketFilter","filterSuffix","columns","date","status","detailsTitle","orderId","customer","items","bv","orderTotal","totalSv","orderDetailsTitle","notAvailable","product","unitsSold","skuPrefix","noProducts","category","percentOfTotal","allCategoriesTitle","noCategoryData","dataTable","noDataAvailable","sortableColumn","pagination","previousPage","nextPage","goToPage","of","defaults","zeroTrend","noValue","markets","useMarketOptions","Ri","dateRangeLabelProp","isLoading","onDateRangeChange","onMarketChange","marketOptions","handleDateRangeChange","newDateRange","handleMarketChange","newMarket","handleFilterKeyDown","blur","getDateRangeLabelText","oe","as","Fi","htmlFor","Mi","CalendarTodayIcon","Oi","PublicIcon","find","opt","String","option","import_TrendingUp","import_TrendingDown","import_Remove","parseTrendPercent","cleanedValue","parsedValue","isFinite","resolveTrendDirection","calculateWeightedRevenueTrend","getRevenue","getTrend","reduce","accumulator","trendValue","weightedSum","weight","average","direction","formatted","toFixed","getTrendDirectionLabel","or","Li","TrendingUpIcon","$i","TrendingDownIcon","Ni","RemoveIcon","Me","StatsCardContainer","$layout","SplitTitle","SplitRow","LegendColumn","SplitTrend","LegendCaption","StatsTitle","StatsValueContainer","StatsValue","StatsSubtitle","TrendContainer","TrendIcon","TrendText","StatsCardHeader","import_Skeleton","SkeletonCard","j","SkeletonHeader","SkeletonRow","StatsCardWrapper","StatsCardHeaderRow","StatsCardBody","StatsCardSubtitle","fo","Skeleton","ProductRowInfo","ProductRowMetrics","ChartMetricRow","ChartMetricTrend","ChartAreaSkeleton","PieChartLayout","PieCircleSkeleton","LegendList","LegendRowWrapper","LegendRowInfo","DashboardLayout","DashboardHeaderRow","DashboardFilterGroup","StatsGrid","WidgetGrid","FullViewLayout","FullViewMetricCard","FullViewMetricCenter","FullViewChartArea","FullViewTableCard","FullViewTableRow","SummaryCardsGrid","StatsCardSkeleton","k","Q","ProductRowSkeleton","ProductsListSkeleton","rowKey","ChartWidgetSkeleton","LegendRowSkeleton","CategoriesPieChartSkeleton","FullViewChartSkeleton","FullViewTableSkeleton","StatsCardComponent","caption","layout","trendDirection","se","getTrendAriaLabel","directionText","gl","memo","displayName","import_ShoppingCart","itemsPerPage","ceil","currentPage","startIndex","endIndex","sort","aVal","bVal","decimalPlaces","usePaginatedItems","totalPages","Va","pageItems","formatMoney","currencyCode","locale","fractionDigits","amount","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","toLocaleString","ge","ProductsListContainer","WidgetHeader","HeaderActionsContainer","WidgetTitle","SortDropdown","ProductsList","ProductItem","ProductRank","ProductImage","ProductImagePlaceholder","ProductInfo","ProductName","ProductSubtitle","ProductMetrics","ProductValue","ProductTrend","EmptyState","EmptyStateText","import_Menu","import_MenuItem","import_ListItemIcon","import_ListItemText","import_MoreVert","import_Visibility","import_IconButton","StyledIconButton","Ll","Fl","IconButton","widgetId","onFullView","Nl","anchorEl","setAnchorEl","buttonId","menuId","handleClick","currentTarget","handleClose","handleFullView","et","size","Bl","MoreVertIcon","Vl","Menu","onClose","MenuListProps","anchorOrigin","vertical","horizontal","transformOrigin","Il","MenuItem","Al","ListItemIcon","El","VisibilityIcon","zl","ListItemText","TopSellingProductsListComponent","maxProducts","onSortChange","onTitleClick","handleSortChange","newSort","formatValue","sortBy","getSubtitle","getTrendValue","getTrendDirection","startsWith","displayedProducts","rankLabel","trendLabel","Y","Wl","ShoppingCartIcon","imageUrl","toUpperCase","Hl","import_recharts","ke","ConversionRateContainer","ChartHeader","TitleRow","ChartTitle","FilterDropdown","MetricDisplay","MetricValue","MetricTrend","FormulaDisplay","ChartContainer","TooltipContainer","TooltipLabel","TooltipValue","TooltipDetails","getMonth","getDate","AXIS_MONTH_MAP","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","formatAxisDate","dateStr","parts","start","end","toISOString","CHART_MARGIN","AXIS_TICK","LINE_DOT","ACTIVE_DOT","rateTickFormatter","CustomTooltip","active","payload","U","rate","orders","siteVisits","ConversionRateChartComponent","conversionData","conversionFilter","summaryRate","summaryChangePct","onFilterChange","handleFilterChange","mo","newFilter","noDataText","noChangeText","currentRate","at","trendInfo","latestRate","previousRate","change","percentageChange","formattedChange","formattedData","shortDate","Ue","ResponsiveContainer","LineChart","CartesianGrid","strokeDasharray","XAxis","dataKey","tick","tickLine","interval","YAxis","tickFormatter","domain","Line","stroke","strokeWidth","dot","activeDot","Ve","SignupsContainer","Legend","LegendItem","LegendColor","LegendLabel","SERIES_COLORS","SignupsChartComponent","signupData","onViewChange","handleViewChange","bo","newView","totalSignups","latestTotal","previousTotal","totalLabel","membersLabel","retailLabel","brandAffiliatesLabel","R","we","ne","CategoriesContainer","ChartAndLegendContainer","ChartWrapper","DonutCenterOverlay","DonutCenterLabel","DonutCenterValue","DonutCenterTrend","LegendContainer","LegendInfo","LegendName","LegendValue","LegendPercentage","LegendTrend","TopCategoriesPieChartComponent","sortedCategories","Fr","nextSortedCategories","nextTotalRevenue","sum","nextTrendDirection","nextFormattedTrend","totalRevenue","formattedTrend","W","wt","PieChart","Pie","cx","cy","innerRadius","outerRadius","nameKey","paddingAngle","Cell","formatter","legendTrendDirection","percentage","EMPTY_TOP_PRODUCTS","EMPTY_CONVERSION_DATA","EMPTY_SIGNUP_DATA","EMPTY_CATEGORIES","onProductSortChange","onSignupViewChange","onConversionFilterChange","onCategorySortChange","onProductsTitleClick","onConversionTitleClick","onSignupsTitleClick","onCategoriesToTitleClick","resolvedTopProducts","resolvedConversionData","resolvedSignupData","resolvedCategories","Se","metrics","import_ArrowBack","import_Language","Oe","PageHeaderWrapper","BackButtonWrapper","BackButton","LeftSection","Title","DateRange","MobileDateRange","FilterWrapper","MobileTitleWrapper","MobileTitle","buildDateRangeFilter","keys","options","buildMarketFilter","onBack","filters","renderFilterIcon","iconType","fe","Ls","$s","LanguageIcon","Fs","ArrowBackIcon","import_ArrowUpward","import_ArrowDownward","ot","TableContainer","Table","TableHeader","TableHeaderCell","sortable","TableBody","TableRow","TableCell","EmptyTableCell","SortIconContainer","isActive","onSort","sortColumn","sortDirection","getRowKey","handleSort","columnKey","handleKeyDown","getAriaSort","Ee","column","scope","Ws","ArrowDownwardIcon","Hs","ArrowUpwardIcon","colSpan","row","rowIndex","render","import_ChevronLeft","import_ChevronRight","eo","PaginationContainer","PageButton","PageInfo","NavButton","onPageChange","totalItems","handlePrevious","handleNext","action","pageNumbers","from","pages","startItem","endItem","goToPageLabel","Te","Ks","ChevronLeftIcon","page","Us","ChevronRightIcon","import_styles","Gs","PageContainer","Fe","Le","MetricChartCardSection","shadows","MetricSection","palette","text","primary","success","main","secondary","ComparisonText","ChartSection","TableSection","withCard","MobileCardName","MobileCardSubtext","MobileCardDetail","MobileCardStatus","warning","Qs","$e","Pe","ProductSku","MobileCardsContainer","DesktopTableContainer","MobileProductCard","divider","MobileCardHeader","MobileProductRank","MobileProductDetails","MobileProductName","MobileProductSku","MobileMetricsGrid","MobileMetricItem","MobileMetricLabel","MobileMetricValue","MOBILE_VIEWPORT_QUERY","useIsMobileViewport","cd","noSsr","mapProductToRow","sku","padStart","nt","setCurrentPage","setSortColumn","setSortDirection","isMobileView","handleBack","productRows","sortedRows","paginatedRows","ud","MobileOrderCard","Ge","Ye","MobileOrderHeader","MobileCustomerInfo","MobileCustomerName","MobileOrderDate","MobileOrderId","MobileOrderMetrics","MobileOrdersContainer","ComparisonTextMobile","Je","firstRate","getConversionFilterLabel","conversionFilterLabel","filteredOrders","order","customerType","paginatedOrders","getChartColor","L","kd","Sd","Ie","customerName","Td","MobileSignupsContainer","vo","ko","MobileSignupCard","SignupTrendChartContainer","toNumeric","parsed","St","normalizedSignupData","point","rawPoint","brandAffiliate","brand_affiliates","brand_affiliate","signupTotal","first","last","hasSignupTrendData","paginatedSignups","$","Fd","Ld","pe","connectNulls","signup","Gt","SummaryItemRow","SummaryItemInfo","SummaryItemName","SummaryItemSubtext","SummaryItemPercentage","TopSection","Ne","muiStyled","Re","SummaryContainer","SummaryItem","ColorDot","dotColor","SummaryInfo","SummaryName","SummaryValue","SummaryPercentage","MobileCategoriesContainer","MobileCategoryCard","Tt","totalRevenueTrendDirection","totalRevenueTrend","paginatedCategories","N","Dt","translate","Ja","DEFAULT_HISTORY_STATE_KEY","EMPTY_ORDERS","EMPTY_SIGNUPS","isRecord","isMysiteDashboardView","readViewFromState","state","stateKey","view","buildStateWithView","buildLocationWithState","pathname","search","hash","initialDateRange","initialMarket","initialProductSort","initialSignupView","initialConversionFilter","initialCategorySort","historyAdapter","historyStateKey","resetToDashboardOnMount","ae","currentView","setCurrentView","hasIntraDashboardHistoryRef","setDateRange","setMarket","setProductSort","setSignupView","setConversionFilter","setCategorySort","resolvedOrders","resolvedSignups","updateView","readCurrentView","writeCurrentView","mode","nextState","nextLocation","replaceState","pushState","listen","nextView","handlePopState","handleOpenFullView","goBack","back","nextDateRange","nextMarket","handleProductSortChange","nextProductSort","handleSignupViewChange","nextSignupView","handleConversionFilterChange","nextFilter","handleCategorySortChange","nextSort","handleProductsTitleClick","handleConversionTitleClick","handleSignupsTitleClick","handleCategoriesTitleClick","So","PoDashboardContainer","To","TopChartsRow","StatsCardStack","BottomChartsRow","offersPurchased","trendUp","trendDown","trendNeutral","comparedTo","offerSort","overall","emptyState","topPerformingOffers","statsCard","conversionChart","topOffers","widgetMenu","filterDateRange","filterMarket","backButton","columnName","columnRevenue","columnPercentage","columnTrend","trendZero","TopPerformingOffersPieChartComponent","offers","sortedOffers","ea","nextSortedOffers","offer","K","Pt","EMPTY_TOP_OFFERS","dashboardTitle","conversionSummaryRate","conversionSummaryChangePct","onOfferSortChange","onOffersTitleClick","resolvedTopOffers","He","selectedMarket","lp","te","X","SummaryTrend","TableTrendCell","MobileOffersContainer","MobileOfferCard","MobileOfferHeader","MobileOfferName","MobileOfferMetricsGrid","MobileOfferMetricItem","MobileOfferMetricLabel","MobileOfferMetricValue","MobileOfferTrendValue","Rt","paginatedOffers","P","columnTrendDirection","Mt","summaryTrendDirection","trendPercent","isProductOfferDashboardView","allProducts","allOffers","conversionFullViewData","conversionFullViewRate","conversionFullViewChangePct","initialOfferSort","ce","setOfferSort","resolvedAllProducts","resolvedAllOffers","handleOfferSortChange","handleOffersTitleClick","Uo","Do","FilterContainer","Po","setDate","mockConversionDataStandard","round","mockConversionDataSubscription","months","floor","firstNames","lastNames","toLocaleDateString","month","day","year","types","mockProductOfferStatsPositiveTrend","mockProductOfferStatsNegativeTrend","mockProductOfferStatsNeutralTrend","mockProductOfferStatsZeroOffers"],"mappings":"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","sourcesContent":["\"use strict\";var Ap=Object.create;var jo=Object.defineProperty;var zp=Object.getOwnPropertyDescriptor;var Bp=Object.getOwnPropertyNames;var Ep=Object.getPrototypeOf,Hp=Object.prototype.hasOwnProperty;var fa=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Wp=(e,t)=>{for(var a in t)jo(e,a,{get:t[a],enumerable:!0})},an=(e,t,a,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Bp(t))!Hp.call(e,i)&&i!==a&&jo(e,i,{get:()=>t[i],enumerable:!(n=zp(t,i))||n.enumerable});return e};var M=(e,t,a)=>(a=e!=null?Ap(Ep(e)):{},an(t||!e||!e.__esModule?jo(a,\"default\",{value:e,enumerable:!0}):a,e)),_p=e=>an(jo({},\"__esModule\",{value:!0}),e);var Nn=fa((yu,$n)=>{\"use strict\";var Up=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\";$n.exports=Up});var zn=fa((wu,An)=>{\"use strict\";var Gp=Nn();function Vn(){}function In(){}In.resetWarningCache=Vn;An.exports=function(){function e(n,i,p,s,c,x){if(x!==Gp){var y=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw y.name=\"Invariant Violation\",y}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:In,resetWarningCache:Vn};return a.PropTypes=a,a}});var En=fa((ku,Bn)=>{\"use strict\";Bn.exports=zn()();var Cu,vu});var qc={};Wp(qc,{CategoriesFullView:()=>Qr,ConversionRateChart:()=>Xt,ConversionRateFullView:()=>Co,DATE_RANGE_LABELS:()=>Wa,DAYS_MAP:()=>Ha,DashboardHeader:()=>uo,DataTable:()=>rt,FilterBar:()=>Vp,MysiteDashboardWithNavigation:()=>op,MysiteHero:()=>Ca,NsCategoryNavigation:()=>qo,NsProductCard:()=>Jo,PageHeader:()=>be,Pagination:()=>at,PoDashboardWithNavigation:()=>Fp,ProductCarousel:()=>Io,ProductOfferDashboard:()=>ta,ProductOfferDashboardTranslationKeys:()=>I,ProductTabCarousel:()=>ti,ProductsFullView:()=>wo,ShoppingDashboard:()=>Lr,ShoppingDashboardTranslationKeys:()=>o,SignupsChart:()=>Wo,SignupsFullView:()=>Jr,StatsCard:()=>xt,TopCategoriesPieChart:()=>_o,TopPerformingOffersFullView:()=>na,TopPerformingOffersPieChart:()=>Ko,TopSellingProductsList:()=>Qt,TranslationProvider:()=>Qd,WidgetMenu:()=>tt,buildDefaultMarketOptions:()=>Ra,calculatePercentage:()=>ml,calculateTotalPages:()=>Ia,formatDateRange:()=>as,formatDateRangeLabel:()=>me,formatDisplayDate:()=>cr,formatISODate:()=>ns,formatShortDate:()=>_a,getDateRangeLabel:()=>pr,getDaysFromDateRange:()=>rs,getTranslation:()=>r,getTranslationResolver:()=>Pi,getTrendColor:()=>Vi,getTrendIcon:()=>xe,mockCategories:()=>tn,mockConversionData:()=>Ro,mockOrders:()=>sa,mockProductOfferStats:()=>ao,mockSignupData:()=>en,mockSignupDetails:()=>on,mockStats:()=>Xa,mockTopOffers:()=>Ip,mockTopProducts:()=>la,paginateItems:()=>Aa,resolveMarketOptions:()=>Ma,resolveTranslation:()=>Bt,setTranslationResolver:()=>co,sortByNumericProperty:()=>fl,useTranslation:()=>Xd,useTranslationResolver:()=>oo});module.exports=_p(qc);var gn=require(\"react\"),fn=require(\"@nuskin/foundation-ui-components\");var Vt=require(\"@nuskin/foundation-theme\"),nn=(0,Vt.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 5px;\n`,ln=(0,Vt.styled)(\"button\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n width: 240px;\n height: ${e=>e.isMobile?\"410px\":\"513px\"};\n overflow: hidden;\n cursor: pointer;\n border: 1px solid #ededed;\n background: var(--color-primary-n-10-primary-white, #fff);\n`,sn=(0,Vt.styled)(\"div\")`\n width: '240px';\n height: '240px';\n background: ${e=>e.bgColor??\"#f5f5f5\"};\n border-radius: 8px;\n overflow: hidden;\n margin-bottom: 0;\n display: flex;\n align-items: normal;\n justify-content: center;\n position: relative;\n @media (max-width: 560px) {\n width: 200px;\n height: 200px;\n align-items: unset;\n }\n`,dn=(0,Vt.styled)(\"img\")`\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 8px;\n display: block;\n`,pn=(0,Vt.styled)(\"div\")`\n width: 200px;\n margin-top: 16px;\n max-height: 66px;\n text-align: left;\n font-size: 16px;\n font-family: 'Inter', sans-serif;\n font-weight: 400;\n line-height: 22px;\n overflow: hidden;\n color: #666;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n @media (max-width: 560px) {\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n margin-top: 5px;\n max-height: 54px;\n line-height: 18px;\n }\n`,ma=(0,Vt.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 12px;\n @media (max-width: 560px) {\n margin-bottom: 8px;\n }\n`,cn=(0,Vt.styled)(\"button\")`\n width: 200px;\n height: 40px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 10px;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0.14px;\n text-transform: none;\n justify-content: flex-start;\n padding-left: 31px;\n overflow: hidden;\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n text-overflow: ellipsis;\n margin-top: 8px;\n margin-bottom: 10px;\n -webkit-appearance: none;\n -webkit-tap-highlight-color: transparent;\n\n color: ${e=>e.disabled?\"#999\":\"#fff\"};\n background-color: ${e=>e.disabled?\"#e0e0e0\":!e.isMobile&&e.isHovered?\"#888\":\"#000\"};\n border: ${e=>e.disabled?\"1px solid #ccc\":\"none\"};\n cursor: ${e=>e.disabled?\"not-allowed\":\"pointer\"};\n opacity: ${e=>e.disabled?.6:1};\n transition: ${e=>e.isMobile?\"none\":\"all 0.3s ease\"};\n\n @media (max-width: 560px) {\n margin: 5px 0;\n }\n`,un=(0,Vt.styled)(\"span\")`\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n display: inline-block;\n background: none;\n transition: all 0.3s ease;\n opacity: ${e=>e.disabled?.5:1};\n`;var mn=require(\"@mui/material\"),_e=require(\"react/jsx-runtime\"),Kp=({productTitle:e,imageDetails:t,className:a,button:n,onCardClick:i,productStatusBadge:p,directSellerBadge:s,mySitePriceComponent:c,testId:x})=>{let[y,g]=(0,gn.useState)(!1),w=(0,mn.useMediaQuery)(\"(max-width: 560px)\"),d=b=>{let u=b.target,C=t?.fallbackImage;C&&u.src!==C&&(u.src=C)};return(0,_e.jsxs)(ln,{className:a,onClick:i,tabIndex:0,\"data-testid\":\"product-card\",isMobile:w,children:[(0,_e.jsx)(sn,{bgColor:t?.bgColor,onError:d,children:t?.imageSrc?(0,_e.jsx)(fn.NsImage,{\"data-testid\":x??\"test-product-image\",className:t.className??\"\",src:t.imageSrc,alt:t.imageAlt,\"aria-label\":t.areaLabel??t.imageAlt,width:\"100%\"}):(0,_e.jsx)(dn,{alt:\"\"})}),(0,_e.jsx)(pn,{title:e,\"data-testid\":\"product-title\",children:e}),s&&(0,_e.jsx)(ma,{children:s}),(0,_e.jsx)(ma,{children:p}),(0,_e.jsx)(nn,{children:c}),n?.showButton&&(0,_e.jsxs)(cn,{tabIndex:0,\"aria-roledescription\":\":\",\"aria-label\":n.buttonText||\"ADD TO CART\",\"data-testid\":\"add-to-cart-button\",disabled:n?.disabled??!1,isMobile:w,isHovered:y,onClick:b=>{b.stopPropagation(),n?.disabled||n.onClick?.()},onMouseEnter:()=>{!w&&!n?.disabled&&g(!0)},onMouseLeave:()=>{w||g(!1)},children:[(0,_e.jsx)(un,{className:\"cart-icon\",disabled:n?.disabled,children:(0,_e.jsx)(\"svg\",{width:\"24\",height:\"22\",viewBox:\"0 0 24 22\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,_e.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M0 1.86358C0 1.26109 0.488416 0.772675 1.09091 0.772675H3.48173C4.51054 0.772675 5.39955 1.49136 5.61511 2.49733L5.71309 2.95456H22.9091C23.245 2.95456 23.5622 3.10933 23.7689 3.37411C23.9757 3.63889 24.0489 3.98415 23.9674 4.31005L22.4053 10.5583C21.9197 12.5009 20.1743 13.8636 18.172 13.8636H8.05068L8.28444 14.9546H20.7273C21.3298 14.9546 21.8182 15.443 21.8182 16.0455C21.8182 16.648 21.3298 17.1364 20.7273 17.1364H19.6364H8.18182H7.40252C6.88811 17.1364 6.4436 16.777 6.33582 16.274L3.76449 4.27405L3.48173 2.95449H1.09091C0.488416 2.95449 0 2.46608 0 1.86358ZM8.18182 17.1364C6.97683 17.1364 6 18.1132 6 19.3182C6 20.5232 6.97683 21.5 8.18182 21.5C9.3868 21.5 10.3636 20.5232 10.3636 19.3182C10.3636 18.1132 9.3868 17.1364 8.18182 17.1364ZM19.6364 17.1364C18.4314 17.1364 17.4545 18.1132 17.4545 19.3182C17.4545 20.5232 18.4314 21.5 19.6364 21.5C20.8413 21.5 21.8182 20.5232 21.8182 19.3182C21.8182 18.1132 20.8413 17.1364 19.6364 17.1364ZM7.58317 11.6818H18.172C19.1732 11.6818 20.0459 11.0005 20.2887 10.0292L21.5119 5.13638H6.18062L7.58317 11.6818Z\",fill:n?.disabled?\"#999\":\"#ffffff\"})})}),n.buttonText||\"ADD TO CART\"]})]})},Jo=Kp;var Vo=require(\"react\"),On=M(require(\"react-slick\")),Fn=M(require(\"@mui/material/useMediaQuery\"));var Ln=require(\"@nuskin/foundation-ui-components\");var ze=require(\"@nuskin/foundation-theme\"),lo=M(require(\"@mui/material/Box\")),hn=require(\"@nuskin/foundation-ui-components\"),bn=(0,ze.styled)(lo.default)`\n padding: 30px 0 60px;\n width: 100%;\n margin: auto;\n margin-top: 50px;\n position: relative;\n\n .slick-list {\n padding-left: 24px;\n padding-right: 24px;\n }\n .slick-slide {\n display: flex;\n justify-content: center;\n padding: 0 12px;\n box-sizing: border-box;\n }\n .slick-prev,\n .slick-next {\n display: none !important;\n }\n\n @media (max-width: 1200px) {\n max-width: 1024px;\n .slick-list {\n padding-left: 12px;\n padding-right: 12px;\n }\n .slick-slide {\n padding: 0 6px;\n }\n }\n @media (max-width: 700px) {\n max-width: 100vw;\n padding: 10px 0 50px;\n .slick-list {\n padding-left: 4px;\n padding-right: 4px;\n }\n .slick-slide {\n padding: 0 2px;\n }\n }\n @media (max-width: 560px) {\n padding: 10px 0 10px;\n margin-top: 25px;\n }\n`,xn=(0,ze.styled)(\"div\")`\n overflow-x: auto;\n display: flex;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n gap: 16px;\n padding: 0 8px 16px;\n width: 100%;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #007bff;\n border-radius: 10px;\n }\n`,yn=(0,ze.styled)(\"div\")`\n display: flex;\n scroll-snap-align: start;\n justify-content: center;\n gap: 15px;\n`,wn=(0,ze.styled)(lo.default)`\n position: absolute;\n bottom: calc(100% + 1px);\n right: 1px;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n`,Cn=(0,ze.styled)(lo.default)`\n display: flex;\n align-items: center;\n margin-left: auto;\n margin-right: ${({$isMobile:e})=>e?0:\"24px\"};\n\n @media (max-width: 560px) {\n margin-left: 0;\n order: 2;\n }\n`,vn=(0,ze.styled)(lo.default)`\n display: none;\n\n @media (max-width: 560px) {\n color: #666666;\n font-family: Inter;\n font-size: 14px !important;\n font-style: normal;\n font-weight: 600;\n line-height: 18px;\n display: flex;\n align-items: center;\n order: 1;\n }\n`,kn=(0,ze.styled)(lo.default)`\n display: flex;\n align-items: center;\n opacity: ${({$isDisabled:e})=>e?.3:1};\n pointer-events: ${({$isDisabled:e})=>e?\"none\":\"auto\"};\n transition: opacity 0.3s ease;\n\n .carousal-prev-button,\n .carousal-next-button {\n transition: all 0.3s ease;\n border: 2px solid #000000;\n border-radius: 3px;\n padding: 9px;\n cursor: pointer;\n\n svg {\n transition: all 0.3s ease;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n\n &:hover {\n background-color: #f5f5f5;\n border: 2px solid #ddd;\n\n svg {\n opacity: 0.5;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n }\n }\n\n @media (max-width: 560px) {\n display: none;\n }\n`,du=(0,ze.styled)(\"div\")`\n @media (max-width: 560px) {\n overflow-y: hidden;\n scrollbar-width: thin;\n scrollbar-color: #007bff #eee;\n &::-webkit-scrollbar {\n width: 8px;\n }\n &::-webkit-scrollbar-track {\n background: #eee;\n }\n &::-webkit-scrollbar-thumb {\n background-color: red;\n border-radius: 8px;\n border: 2px solid #eee;\n }\n }\n`,Sn=(0,ze.styled)(hn.NsTypography)`\n color: #666666;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 22px;\n @media (max-width: 560px) {\n margin: 0 3px;\n }\n`,Tn=(0,ze.styled)(\"a\")`\n color: ${({$disabled:e})=>e?\"#999999\":\"#000000\"};\n font-family: Inter, sans-serif;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 22px;\n text-decoration: none;\n border-bottom: 1px solid ${({$disabled:e})=>e?\"#999999\":\"#000000\"};\n padding-bottom: 4px;\n transition: all 0.3s ease;\n cursor: ${({$disabled:e})=>e?\"not-allowed\":\"pointer\"};\n pointer-events: ${({$disabled:e})=>e?\"none\":\"auto\"};\n opacity: ${({$disabled:e})=>e?.5:1};\n\n @media (max-width: 560px) {\n font-size: 14px;\n line-height: 18px;\n }\n\n &:hover {\n color: ${({$disabled:e})=>e?\"#999999\":\"#666666\"};\n border-bottom: 1px solid ${({$disabled:e})=>e?\"#999999\":\"#666666\"};\n cursor: ${({$disabled:e})=>e?\"not-allowed\":\"pointer\"};\n }\n`,Dn=(0,ze.styled)(\"div\")`\n padding-top: 20px;\n font-size: 20px;\n text-align: center;\n`,Pn=(0,ze.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,Rn=(0,ze.styled)(\"div\")`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n`,Mn=(0,ze.styled)(\"div\")`\n font-family: 'Lora';\n font-weight: 400;\n font-size: 22px;\n margin-left: 16px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 13px;\n`;var ve=require(\"react/jsx-runtime\");function Io({entries:e,renderEntry:t,settings:a={},showControlButtons:n=!0,allEntryLabel:i=\"View All\",allEntryLink:p=\"\",categoryName:s,emptyProductMessage:c=\"No Products Available For The Selected Category\",productsCountLabel:x=\"Products\",isInitialDataLoading:y,history:g}){let w=(0,Vo.useRef)(null),d=(0,Fn.default)(\"(max-width: 560px)\"),b=(0,Vo.useCallback)(()=>{w.current?.slickPrev()},[]),u=(0,Vo.useCallback)(()=>{w.current?.slickNext()},[]),C=t??((T,O)=>(0,ve.jsx)(Jo,{productTitle:T.productTitle,imageDetails:T.imageDetails,button:T.button,onCardClick:T.onCardClick,productStatusBadge:T.productStatusBadge,directSellerBadge:T.directSeller,mySitePriceComponent:T.mySitePriceComponent},`${T.productTitle}-${O}`)),m={dots:!0,infinite:!0,speed:500,slidesToShow:Math.min(e?.length??0,4),slidesToScroll:4,swipe:!0,draggable:!0,arrows:!0,responsive:[{breakpoint:1320,settings:{slidesToShow:Math.min(e?.length??0,3),slidesToScroll:3}},{breakpoint:900,settings:{slidesToShow:Math.min(e?.length??0,2),slidesToScroll:2}},{breakpoint:600,settings:{slidesToShow:1,slidesToScroll:1,arrows:!1}}],...a},S=(e?.length??0)>m.slidesToShow,D=()=>e?.length===0&&!y?(0,ve.jsx)(Dn,{children:c}):d?(0,ve.jsx)(xn,{children:(0,ve.jsx)(yn,{children:e.map((T,O)=>T&&C(T,O))})}):(0,ve.jsx)(On.default,{...m,ref:w,children:e.map((T,O)=>T&&C(T,O))});return(0,ve.jsxs)(bn,{children:[n&&(0,ve.jsxs)(wn,{children:[(0,ve.jsxs)(Pn,{children:[(0,ve.jsxs)(Rn,{children:[(0,ve.jsx)(vn,{children:(0,ve.jsxs)(Sn,{variant:\"body-m\",children:[e?.length??0,\" \",x]})}),!d&&s&&(0,ve.jsx)(Mn,{children:s})]}),(0,ve.jsx)(Cn,{$isMobile:d,children:(0,ve.jsx)(Tn,{$disabled:(e?.length??0)===0,onClick:T=>{T.preventDefault(),(e?.length??0)>0&&g&&g.push(p)},children:i})})]}),!d&&(0,ve.jsx)(kn,{$isDisabled:!S,children:(0,ve.jsx)(Ln.NsCarouselControl,{prev:b,next:u,viewAllLabel:\"\",viewAllUrl:\"\"})})]}),D()]})}var Ke=require(\"react\"),Xn=require(\"@mui/material\");var _n=M(require(\"react\")),Kn=M(require(\"@mui/material/Tabs\")),Un=M(require(\"@mui/material/Tab\")),ha=M(require(\"@mui/material/Box\")),Zo=M(En());var Hn=require(\"@nuskin/foundation-theme\"),Wn=Hn.styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n height: 100%;\n background-color: #fff;\n .tabsStyle {\n display: flex;\n padding-top: 8.533px;\n flex-direction: column;\n align-items: flex-start;\n gap: 12.8px;\n border-right: 1px;\n border-color: divider;\n width: 200px;\n & .Mui-selected {\n font-weight: 700;\n font-size: 14px;\n font-family: 'inter', sans-serif;\n font-style: normal;\n font-height: 20px;\n border-radius: 4px;\n }\n & .MuiTabs-indicator {\n left: 0;\n background-color: #5b81a5;\n color: #5b81a5;\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .tabContainer {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n min-width: 100%;\n background-color: #fff;\n @media (max-width: 768px) {\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n }\n\n .tabStyle {\n align-items: flex-start;\n display: flex;\n text-align: left;\n font-size: 14px;\n font-family: 'inter' sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n min-height: 20px;\n padding: 1px;\n padding-left: 10px;\n margin-bottom: 10px;\n cursor: pointer;\n text-transform: none;\n }\n @media (max-width: 768px) {\n flex-direction: row;\n\n .tabsStyle {\n width: 100%;\n border-right: none;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-top: 0px;\n }\n\n .tabStyle {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 70px;\n padding: 8px 16px;\n text-align: center;\n margin: 4px;\n background-color: #fff;\n cursor: pointer;\n color: black;\n font-family: Inter;\n font-style: normal;\n font-weight: 600;\n line-height: 20px;\n }\n\n .tabStyle.Mui-selected {\n background-color: #5b81a5;\n color: #ffffff !important;\n font-weight: 700;\n border-radius: 70px;\n }\n }\n .tabPanel {\n padding: 8px;\n text-align: left;\n }\n`;var Gn=require(\"@mui/material\"),It=require(\"react/jsx-runtime\");function Yn(e){let{children:t,value:a,index:n,...i}=e;return(0,It.jsx)(\"div\",{role:\"tabpanel\",hidden:a!==n,id:`vertical-tabpanel-${n}`,\"aria-labelledby\":`vertical-tab-${n}`,...i,children:a===n&&(0,It.jsx)(ha.default,{className:\"tabPanel\",children:t})})}Yn.propTypes={children:Zo.default.node,index:Zo.default.number.isRequired,value:Zo.default.number.isRequired};var qo=({itemArray:e,value:t,onChange:a})=>{let[n,i]=_n.useState(0),p=(0,Gn.useMediaQuery)(\"(max-width:768px)\"),s=t??n;return(0,It.jsx)(Wn,{children:(0,It.jsxs)(ha.default,{className:\"tabContainer\",children:[(0,It.jsx)(Kn.default,{orientation:p?\"horizontal\":\"vertical\",variant:\"scrollable\",value:s,onChange:(x,y)=>{a?a(x,y):i(y)},\"aria-label\":\"Vertical tabs example\",className:\"tabsStyle\",children:e.map(x=>(0,It.jsx)(Un.default,{label:x.label,className:\"tabStyle\"},x.categoryId))}),e.map(x=>(0,It.jsx)(Yn,{value:s,index:e.findIndex(y=>y.categoryId===x.categoryId),children:x.content},x.categoryId))]})})};var ei=require(\"@nuskin/foundation-ui-components\");var Zt=require(\"@nuskin/foundation-theme\"),Yp=({isMobile:e,$hasCategories:t})=>e?\"auto\":t?\"800px\":\"auto\",jn=(0,Zt.styled)(\"div\")`\n display: flex;\n flex-direction: ${({isMobile:e})=>e?\"column\":\"row\"};\n align-items: ${({isMobile:e})=>e?\"stretch\":\"flex-start\"};\n width: 100%;\n max-width: 1920px;\n min-height: ${Yp};\n margin: 0 auto;\n box-sizing: border-box;\n overflow: visible;\n background: #fff;\n padding: ${({isMobile:e})=>e?\"10px 16px 0px 16px\":\"50px 60px 0px 60px\"};\n\n @media (max-width: 768px) {\n padding: 10px 16px 0px 16px;\n min-height: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n padding: 30px 40px 0px 40px;\n gap: 20px;\n }\n\n transform: translateZ(0);\n will-change: auto;\n`,Jn=(0,Zt.styled)(\"div\")`\n min-width: ${({isMobile:e})=>e?\"100%\":\"auto\"};\n height: ${({isMobile:e})=>e?\"auto\":\"100%\"};\n flex-shrink: 0;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n\n overflow-x: auto;\n overflow-y: visible;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-width: 200px;\n margin-right: 20px;\n }\n`,Zn=(0,Zt.styled)(\"div\")`\n flex: 1;\n min-width: 0;\n height: ${({isMobile:e})=>e?\"auto\":\"100%\"};\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n min-height: 300px;\n\n -webkit-overflow-scrolling: touch;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-height: 400px;\n }\n\n contain: layout style paint;\n transform: translateZ(0);\n`,Mu=(0,Zt.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n padding: 20px;\n\n @media (max-width: 768px) {\n min-height: 150px;\n padding: 16px;\n }\n`,qn=(0,Zt.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 40px 20px;\n color: #666;\n font-size: 16px;\n\n @media (max-width: 768px) {\n padding: 20px 16px;\n font-size: 14px;\n }\n`,Qn=(0,Zt.styled)(\"div\")`\n padding: 10px;\n display: flex;\n justify-content: center;\n`;var ft=require(\"react/jsx-runtime\"),jp=({allEntryLabel:e,allEntryLink:t,renderEntry:a,settings:n,showControlButtons:i=!0,fetchCategories:p,fetchProducts:s,showCustomCategory:c=!1,emptyProductTabs:x=\"No tabs available\",emptyProductMessage:y,productsCountLabel:g,getCategoryId:w,history:d})=>{let b=(0,Xn.useMediaQuery)(\"(max-width:768px)\"),[u,C]=(0,Ke.useState)(!0),[m,S]=(0,Ke.useState)([]),[D,T]=(0,Ke.useState)(!1),[O,G]=(0,Ke.useState)(0),[ee,V]=(0,Ke.useState)([]),[z,Z]=(0,Ke.useState)(!1),[F,l]=(0,Ke.useState)(!0),h=(0,Ke.useCallback)(()=>{let f=document.querySelectorAll('[data-testid*=\"spinner\"], .ns-spinner, [class*=\"spinner\"]');l(f.length===0)},[]);(0,Ke.useEffect)(()=>{z&&h()},[z,h]),(0,Ke.useEffect)(()=>{p().then(f=>{S(f),T(!0)})},[p]),(0,Ke.useEffect)(()=>{if(D)if(m.length>0){let f=m[O]?.categoryId;w&&w(f),Z(!0),s(f).then(V).finally(()=>{Z(!1),C(!1)})}else Z(!1)},[m,O,s,D]);let v=m.map(f=>({label:f.label,content:\"\",categoryId:f.categoryId}));return(0,ft.jsxs)(jn,{isMobile:b,$hasCategories:m.length>0,children:[c&&(v.length>0?(0,ft.jsx)(Jn,{isMobile:b,children:(0,ft.jsx)(qo,{itemArray:v,value:O,onChange:(f,E)=>G(E)})}):(0,ft.jsx)(qn,{children:x})),(0,ft.jsx)(Zn,{isMobile:b,children:z?(0,ft.jsx)(Qn,{children:F&&(0,ft.jsx)(ei.NsSpinner,{})}):(0,ft.jsx)(Io,{isInitialDataLoading:u,entries:ee,allEntryLabel:e,allEntryLink:t,renderEntry:a?f=>a({...f,productStatusBadge:f.productStatusBadge}):void 0,settings:n,showControlButtons:i,categoryName:m[O]?.label,emptyProductMessage:y,productsCountLabel:g,history:d})})]})},ti=jp;var st=require(\"react\"),le=require(\"@mui/material\"),Ao=require(\"@nuskin/foundation-ui-components\");var mt=require(\"@nuskin/foundation-theme\"),so=require(\"@mui/material\"),Qo=require(\"react/jsx-runtime\"),ba=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"600\",lineHeight:\"16px\",letterSpacing:\"0.12px\",color:e?\"#000000\":\"#FFFFFF\",\"& a\":{color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}}),ri=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"700\",lineHeight:\"16px\",letterSpacing:\"0.48px\",color:e?\"#000000\":\"#FFFFFF\",textTransform:\"uppercase\",paddingLeft:\"5px\"}),ai=()=>({display:\"flex\",flexDirection:\"row\",gap:\"10px\",alignItems:\"center\"}),oi=e=>({...ba(e),paddingBottom:\"11px\",wordBreak:\"break-all\",overflowWrap:\"break-word\",paddingLeft:\"5px\",\"& a\":{color:\"inherit\",textDecoration:\"none\"},\"@media (max-width: 420px)\":{fontSize:\"11px\",lineHeight:\"15px\",paddingBottom:\"8px\"},\"@media (max-width: 400px)\":{fontSize:\"10px\",lineHeight:\"14px\",paddingBottom:\"6px\"},\"@media (max-width: 375px)\":{fontSize:\"8px\",lineHeight:\"12px\",paddingBottom:\"4px\"}}),Jp=e=>({...ri(e),marginBottom:\"11px\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\",\"@media (max-width: 420px)\":{fontSize:\"11px\",lineHeight:\"14px\",marginBottom:\"8px\"},\"@media (max-width: 400px)\":{fontSize:\"10px\",lineHeight:\"12px\",marginBottom:\"5px\"},\"@media (max-width: 375px)\":{fontSize:\"8px\",lineHeight:\"11px\",marginBottom:\"4px\"}}),ni=(0,mt.styled)(e=>(0,Qo.jsx)(so.Box,{...e}))(({bannerProps:e,isCircularImage:t,hasWhiteBackground:a})=>({backgroundClip:\"border-box\",display:\"flex\",background:e?.backgroundColor??\"#383838\",position:\"relative\",overflow:\"hidden\",width:\"100%\",height:\"auto\",flexDirection:\"row\",alignItems:\"center\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"transform, opacity\",transform:\"translateZ(0)\",backfaceVisibility:\"hidden\",\"&.scrolled\":{top:0,left:0,right:0,boxShadow:\"0 2px 8px rgba(0,0,0,0.2)\",\".content\":{paddingTop:\"0\",justifyContent:\"center\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".body-title\":{fontSize:\"26px\",lineHeight:\"34px\",marginBottom:\"0\",fontStyle:\"normal\",fontWeight:\"400\",fontFamily:e?.headlineFont??\"Lora\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".bg-image\":{width:\"90px\",height:\"90px\",padding:t?\"2px\":\"0px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",objectFit:\"cover\",objectPosition:\"center\"},\".placeholder-image\":{\"& > div\":{width:\"90px\",height:\"90px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"}}},\".content\":{width:\"70%\",height:\"100%\",marginLeft:\"2%\",marginRight:\"auto\",display:\"flex\",flexDirection:\"column\",position:\"relative\",boxSizing:\"border-box\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".bg-image\":{width:\"252px\",height:\"252px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",padding:t?\"3px\":\"0px\",objectFit:\"cover\",objectPosition:\"center\"},\".placeholder-image\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",\"& > div\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"}},\".body-title\":{fontSize:\"32px\",lineHeight:\"38px\",marginBottom:\"8px\",fontWeight:\"400\",color:a?\"#000000\":\"#FFFFFF\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\",fontFamily:e?.headlineFont??\"Lora\",paddingLeft:\"5px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".body-text\":{fontSize:\"16px\",marginBottom:\"12px\",fontStyle:\"normal\",fontWeight:\"400\",lineHeight:\"22px\",color:a?\"#000000\":\"#FFFFFF\",fontFamily:e?.paragraphFont??\"inherit\",display:\"-webkit-box\",WebkitBoxOrient:\"vertical\",overflow:\"hidden\",WebkitLineClamp:3,textOverflow:\"ellipsis\",paddingLeft:\"5px\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\"},\".social-media\":{display:\"flex\",flexDirection:\"column\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\"},\".email-text\":ba(a),\".phone-text\":ba(a),\".social-title-text\":{...ri(a),marginBottom:\"8px\"},\".social-icons\":{...ai(),paddingBottom:\"8px\"}})),ii=(0,mt.styled)(e=>(0,Qo.jsx)(so.Box,{...e}))(({bannerProps:e,isCircularImage:t,hasWhiteBackground:a})=>({backgroundClip:\"border-box\",display:\"flex\",background:e?.backgroundColor??\"#383838\",position:\"relative\",overflow:\"hidden\",width:\"100%\",flexDirection:\"column\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"transform, opacity\",transform:\"translateZ(0)\",backfaceVisibility:\"hidden\",\"&.scrolled\":{top:0,left:0,right:0,boxShadow:\"0 2px 8px rgba(0,0,0,0.2)\",\".content-mobile\":{paddingTop:\"5px\",width:\"60%\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".body-title-mobile\":{fontSize:\"18px\",lineHeight:\"28px\",marginBottom:\"0\",fontStyle:\"normal\",fontWeight:\"400\",fontFamily:e?.headlineFont??\"Lora\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"},\".bg-image-mobile\":{width:\"75px\",height:\"75px\",padding:t?\"2px\":\"0px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",objectFit:\"cover\",objectPosition:\"center\"},\".placeholder-image-mobile\":{\"& > div\":{width:\"75px !important\",height:\"75px !important\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\"}}},\".image-content-mobile\":{display:\"flex\",flexDirection:\"row\",width:\"100%\",justifyContent:\"center\",alignItems:\"center\"},\".content-mobile\":{width:\"55%\",height:\"100%\",paddingTop:\"10px\",paddingRight:\"10px\",marginLeft:\"8px\",marginRight:\"auto\",display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",position:\"relative\",boxSizing:\"border-box\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\"@media (max-width: 420px)\":{paddingTop:\"8px\",width:\"100%\"},\"@media (max-width: 400px)\":{paddingTop:\"6px\",width:\"100%\",height:\"100%\"},\"@media (max-width: 375px)\":{paddingTop:\"4px\",width:\"100%\",height:\"100%\"}},\".bg-image-mobile\":{width:\"144px\",height:\"144px\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",objectFit:\"cover\",objectPosition:\"center\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",padding:t?\"2px\":\"0px\",\"@media (max-width: 420px)\":{width:\"120px\",height:\"120px\"},\"@media (max-width: 400px)\":{width:\"112px\",height:\"112px\"},\"@media (max-width: 375px)\":{width:\"90px\",height:\"90px\"}},\".placeholder-image-mobile\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",willChange:\"width, height, transform\",\"& > div\":{transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",width:\"144px\",height:\"144px\",\"@media (max-width: 420px)\":{width:\"120px\",height:\"120px\"},\"@media (max-width: 400px)\":{width:\"110px !important\",height:\"110px !important\"},\"@media (max-width: 375px)\":{width:\"90px\",height:\"90px\"}}},\".body-title-mobile\":{fontSize:\"22px\",lineHeight:\"28px\",marginBottom:\"13px\",fontWeight:\"400\",color:a?\"#000000\":\"#FFFFFF\",fontStyle:\"normal\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\",fontFamily:e?.headlineFont??\"Lora\",paddingLeft:\"5px\",transition:\"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\"@media (max-width: 420px)\":{fontSize:\"16px\",lineHeight:\"24px\",marginBottom:\"8px\"},\"@media (max-width: 400px)\":{fontSize:\"16px\",lineHeight:\"22px\",marginBottom:\"6px\"},\"@media (max-width: 375px)\":{fontSize:\"14px\",lineHeight:\"20px\",marginBottom:\"4px\"}},\".body-text-mobile\":{fontSize:\"14px\",padding:\"20px 25px 20px 25px\",fontStyle:\"normal\",fontWeight:\"400\",lineHeight:\"20px\",color:\"#252525\",backgroundColor:\"#E0E0E0\",fontFamily:e?.paragraphFont??\"inherit\",transition:\"all 0.25s cubic-bezier(0.4, 0, 0.2, 1)\",opacity:1,transform:\"translateY(0)\"},\".expandable-description-mobile\":{backgroundColor:\"#E0E0E0\",position:\"relative\"},\".description-content-mobile\":{fontSize:\"14px\",padding:\"10px 15px\",fontStyle:\"normal\",fontWeight:\"400\",lineHeight:\"20px\",color:\"#252525\",fontFamily:e?.paragraphFont??\"inherit\",transition:\"max-height 0.3s ease-in-out, opacity 0.3s ease-in-out\",overflow:\"hidden\",position:\"relative\",\"&.collapsed\":{maxHeight:\"50px\",display:\"-webkit-box\",WebkitLineClamp:2,WebkitBoxOrient:\"vertical\",\"&::after\":{content:'\"\"',position:\"absolute\",bottom:0,left:0,right:0,height:\"20px\",background:\"linear-gradient(transparent, rgba(224, 224, 224, 0.8), #E0E0E0)\",pointerEvents:\"none\"}},\"&.expanded\":{maxHeight:\"none\",whiteSpace:\"normal\",display:\"block\",\"&::after\":{display:\"none\"}}},\".email-text-mobile\":oi(a),\".phone-text-mobile\":oi(a),\".social-title-text-mobile\":Jp(a),\".social-icons-mobile\":{...ai(),paddingBottom:\"10px\",transition:\"opacity 0.3s ease-out, transform 0.3s ease-out\",opacity:1,transform:\"translateY(0)\",\"& img\":{width:\"24px\",height:\"24px\",\"@media (max-width: 400px)\":{width:\"20px\",height:\"20px\"},\"@media (max-width: 375px)\":{width:\"18px\",height:\"18px\"}},\"@media (max-width: 420px)\":{paddingBottom:\"8px\"},\"@media (max-width: 400px)\":{paddingBottom:\"4px\"},\"@media (max-width: 375px)\":{paddingBottom:\"3px\"}}})),li=(0,mt.styled)(so.Box)({display:\"flex\",gap:\"12px\",marginBottom:\"16px\",paddingLeft:\"5px\",\"&.mobile-badges\":{flexDirection:\"column\",gap:\"8px\",marginBottom:\"12px\"},\"&.tablet-badges\":{flexDirection:\"row\",gap:\"12px\",marginBottom:\"8px\"}}),xa=(0,mt.styled)(e=>(0,Qo.jsx)(so.Box,{...e}))(({hasWhiteBackground:e})=>({backgroundColor:\"rgba(255, 255, 255, 0.2)\",backdropFilter:\"blur(10px)\",borderRadius:\"20px\",padding:\"8px 16px\",display:\"flex\",alignItems:\"center\",gap:\"4px\",border:\"1px solid rgba(255, 255, 255, 0.3)\",transition:\"all 0.3s ease\",\"&.mobile-badge\":{padding:\"6px 12px\",borderRadius:\"16px\",fontSize:\"12px\"},\"&.tablet-badge\":{padding:\"8px 16px\",borderRadius:\"20px\",fontSize:\"14px\"},\"&.total-savings-badge\":{backgroundColor:\"#4A6987\",border:\"none\",borderRadius:\"8px\",padding:\"8px 16px\",gap:\"4px\",minHeight:\"32px\",backdropFilter:\"none\",\".badge-value\":{color:\"#FFFFFF\"},\"&:hover\":{backgroundColor:\"#4A6987\",transform:\"none\",boxShadow:\"none\"}},\"&.expiration-badge\":{borderRadius:\"8px\",padding:\"8px 16px\",gap:\"4px\",minHeight:\"32px\"},\"&:hover\":{backgroundColor:\"rgba(255, 255, 255, 0.3)\",transform:\"translateY(-1px)\",boxShadow:\"0 4px 12px rgba(0, 0, 0, 0.1)\"},\".badge-text\":{color:e?\"#000000\":\"#FFFFFF\",fontWeight:\"400\",opacity:.9},\".badge-value\":{color:e?\"#000000\":\"#FFFFFF\",fontWeight:\"600\"}})),si=(0,mt.styled)(\"button\")({backgroundColor:\"#E0E0E0\",border:\"1px solid #252525\",borderRadius:\"10px\",cursor:\"pointer\",width:\"40px\",height:\"20px\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",margin:\"10px auto 5px auto\",transition:\"all 0.2s ease\",\"& .arrow-icon-mobile\":{transition:\"transform 0.3s ease\",\"&.expanded\":{transform:\"rotate(180deg)\"}}}),di=(0,mt.styled)(so.Box)`\n background: none;\n border: 2px solid transparent;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n transition: all 0.3s ease;\n\n &:hover {\n transform: scale(1.1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n &:focus,\n &:focus-within {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\n }\n\n &:hover svg {\n fill: #ffffff;\n }\n`,pi=(0,mt.styled)(\"span\")`\n line-height: 0.5;\n`,ci=(0,mt.styled)(\"a\")({fontSize:\"inherit\",fontFamily:\"inherit\",fontWeight:\"inherit\",lineHeight:\"inherit\",letterSpacing:\"inherit\",color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}),ya=(0,mt.styled)(\"span\")({});var ui=require(\"@mui/material\"),ht=require(\"react/jsx-runtime\"),gi=({width:e,height:t,backgroundColor:a})=>(0,ht.jsx)(ui.Box,{sx:{width:e,height:t,display:\"flex\",justifyContent:\"center\",alignItems:\"center\",backgroundColor:a},\"data-testid\":\"placeholder-image\",children:(0,ht.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"128\",height:\"129\",viewBox:\"0 0 128 129\",fill:\"none\",children:(0,ht.jsxs)(\"g\",{id:\"ns_logomark\",children:[(0,ht.jsx)(\"path\",{id:\"Vector\",d:\"M127.495 52.1946C125.663 47.9538 122.999 44.1171 119.661 40.9073C112.565 34.2835 102.562 31.7037 93.1175 34.0622C83.6733 36.4206 76.0882 43.3926 72.991 52.5619C71.4142 56.8414 70.6063 61.3627 70.6039 65.9196C70.6039 85.8227 70.6039 105.737 70.6039 125.662C70.6039 129.001 70.6039 129.001 66.9051 128.834C66.9051 128.2 66.9051 127.499 66.9051 126.831C66.9051 104.323 66.9051 81.8263 66.9051 59.3409C66.3415 45.3064 74.9302 32.5039 88.1888 27.6164C89.79 27.0612 91.4307 26.6259 93.0981 26.314C94.7114 25.98 96.4605 25.8465 98.0738 25.6461C96.0231 16.3291 78.9419 5.60953 65.0889 4.97504C50.3084 4.62252 36.6074 12.6365 29.7509 25.6461C31.331 25.8465 32.8779 25.9466 34.3569 26.2138C48.0999 28.544 58.7086 39.4998 60.5168 53.2298C60.8904 55.7285 61.0812 58.2508 61.0877 60.7769C61.0877 82.7507 61.0877 104.724 61.0877 126.697C61.0877 128.434 60.6842 129.169 58.8016 128.968C56.9183 128.768 57.1204 128.2 57.1204 126.965C57.1204 119.985 57.1204 113.006 57.1204 105.993C57.1204 92.1674 57.1204 78.3423 57.1204 64.5171C57.2385 56.3928 54.2457 48.5271 48.7477 42.5103C42.2429 35.5282 32.6539 32.2371 23.1959 33.7401C13.7379 35.243 5.66194 41.3411 1.67448 49.9906C1.23781 50.8254 0.867444 51.6937 0.262573 52.9293C5.79294 22.3996 32.4752 0.139867 63.7085 0.000656323C94.9411 -0.138555 121.824 21.8824 127.629 52.3616\",fill:\"#252525\"}),(0,ht.jsx)(\"path\",{id:\"Vector_2\",d:\"M86.0995 124.927C86.0995 124.293 86.0995 123.858 86.0995 123.425C86.0995 111.669 86.0995 100.049 86.0995 88.1269C85.8836 82.4231 88.0775 76.89 92.1523 72.8653C97.3131 67.9567 104.984 66.7091 111.452 69.7263C117.892 72.1185 122.166 78.225 122.178 85.0541C122.372 92.1747 119.781 99.0921 114.949 104.356C107.882 113.237 98.6134 120.141 88.05 124.392C87.4217 124.616 86.782 124.805 86.1335 124.96\",fill:\"#252525\"}),(0,ht.jsx)(\"path\",{id:\"Vector_3\",d:\"M41.8183 125.395C37.6149 123.224 33.6477 121.487 29.9828 119.25C21.5405 114.299 14.4778 107.331 9.43828 98.9796C6.53442 94.3985 5.34408 88.9493 6.07591 83.5852C7.056 75.2882 13.8859 68.8841 22.2829 68.3905C31.1231 67.2473 39.3527 73.0751 41.1455 81.7484C41.76 84.263 42.0762 86.8411 42.0868 89.4287C42.0868 100.516 42.0868 111.636 42.0868 122.823C42.0868 123.457 42.0867 124.059 41.8854 125.294\",fill:\"#252525\"}),(0,ht.jsx)(\"path\",{id:\"Vector_4\",d:\"M51.3337 127.431C47.9713 127.431 47.6681 127.198 47.6681 124.326V76.6386C48.1096 67.937 42.9747 59.906 34.8574 56.602C25.8992 52.8557 15.5485 54.8615 8.66523 61.6779C4.28638 66.6086 1.89197 72.9696 1.94049 79.5438C1.95423 80.2444 1.78037 80.9357 1.43588 81.5476C1.06552 79.9446 0.62885 78.2081 0.426687 76.7387C-0.724024 70.4463 0.471163 63.9529 3.78906 58.472C6.09291 54.6111 9.65016 51.6434 13.8762 50.0567C22.8587 46.555 32.9393 47.1785 41.4148 51.7598C47.6592 54.8694 51.5262 61.2882 51.3337 68.2232C51.5019 87.6249 51.3337 107.027 51.3337 126.396C51.3337 126.797 51.3337 127.164 51.3337 127.532\",fill:\"#252525\"}),(0,ht.jsx)(\"path\",{id:\"Vector_5\",d:\"M76.287 127.499V125.094C76.287 107.196 76.4883 89.2963 76.287 71.3966C76.0848 56.9034 84.2554 50.6588 95.7553 48.3545C101.535 47.2005 107.524 47.6393 113.071 49.6235C122.914 53.3319 128.994 63.1725 127.866 73.5672C127.631 76.2831 127.17 78.975 126.487 81.6151C125.916 78.2758 125.68 74.9364 124.772 71.597C122.808 64.3002 117.377 58.4174 110.228 55.8421C103.078 53.2668 95.1132 54.3239 88.8955 58.6734C83.0441 62.6207 79.7011 69.3237 80.086 76.3389C80.086 92.2349 80.086 108.131 80.086 124.026C80.086 127.366 80.086 127.366 76.2198 127.366\",fill:\"#252525\"})]})})});var wa=require(\"react/jsx-runtime\"),fi=({width:e=16,height:t=16,className:a=\"\"})=>(0,wa.jsx)(\"svg\",{width:e,height:t,viewBox:\"0 0 24 24\",fill:\"currentColor\",className:a,\"data-testid\":\"arrow-down-icon\",children:(0,wa.jsx)(\"path\",{d:\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"})});function Xo(e){if(typeof window>\"u\")return;let t=window.location.href,a={...e},n=t.includes(\"personal-offer\")?\"postorefront_\":\"mysite_\";a.event=n+e.event;try{window.dataLayer||(console.error(\"GTM dataLayer not available, but event logged\"),window.dataLayer=[]),window.dataLayer.push(a)}catch(i){console.error(\"Failed to track GTM event:\",i)}}var A=require(\"react/jsx-runtime\"),mi=(e,t,a)=>{let n=a.includes(\"mobile\")?\"placeholder-image-mobile\":\"placeholder-image\";return e?.imageSrc?(0,A.jsx)(pi,{tabIndex:0,children:(0,A.jsx)(Ao.NsImage,{className:a,src:e.imageSrc,alt:e.imageAlt})}):(0,A.jsx)(le.Box,{className:n,children:(0,A.jsx)(gi,{width:a.includes(\"mobile\")?\"144px\":\"246px\",height:a.includes(\"mobile\")?\"144px\":\"246px\",backgroundColor:t?.backgroundColor??\"#5F5F5F\"})})},hi=(e,t,a,n,i)=>{if(!e||!t&&!i)return null;let p=a?\"mobile-badge\":\"tablet-badge\";return(0,A.jsxs)(li,{className:a?\"mobile-badges\":\"tablet-badges\",children:[i&&(0,A.jsx)(xa,{className:`${p} total-savings-badge`,hasWhiteBackground:n,tabIndex:0,children:(0,A.jsx)(ya,{className:\"badge-value\",children:i})}),t&&(0,A.jsx)(xa,{className:`${p} expiration-badge`,hasWhiteBackground:n,tabIndex:0,children:(0,A.jsx)(ya,{className:\"badge-value\",children:t})})]})},Zp=(e,t,a,n,i)=>{let{shopTitle:p,socialTitleText:s,email:c,showBadges:x,expirationDate:y,phone:g,totalSavings:w}=e;return(0,A.jsxs)(le.Box,{className:\"content-mobile\",children:[(0,A.jsx)(le.Typography,{component:\"h1\",tabIndex:p?.trim()?0:-1,className:\"body-title-mobile\",children:p}),!t&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(le.Typography,{tabIndex:s?.trim()?0:-1,className:\"social-title-text-mobile\",children:s}),c?.trim()&&er(\"email\",c,\"email-text-mobile\"),g?.trim()&&er(\"phone\",g,\"phone-text-mobile\"),(0,A.jsx)(le.Box,{className:\"social-icons-mobile\",children:a}),hi(x,y??\"\",n,i,w)]})]})},qp=(e,t,a,n,i)=>{let{shopTitle:p,shopDescription:s,socialTitleText:c,email:x,phone:y,showBadges:g,expirationDate:w,totalSavings:d}=e;return(0,A.jsxs)(le.Box,{className:\"content\",children:[(0,A.jsx)(le.Typography,{component:\"h1\",tabIndex:p?.trim()?0:-1,className:\"body-title\",children:p}),!t&&(0,A.jsxs)(A.Fragment,{children:[s?.length>480?(0,A.jsx)(le.Tooltip,{title:s,arrow:!0,children:(0,A.jsx)(le.Typography,{tabIndex:s?.trim()?0:-1,className:\"body-text\",children:s})}):(0,A.jsx)(le.Typography,{tabIndex:s?.trim()?0:-1,className:\"body-text\",children:s}),(0,A.jsxs)(le.Box,{className:\"social-media\",children:[(0,A.jsx)(le.Typography,{tabIndex:c?.trim()?0:-1,className:\"social-title-text\",children:c}),(0,A.jsxs)(le.Box,{className:\"social-icons\",children:[a,x?.trim()&&er(\"email\",x,\"email-text\"),y?.trim()&&er(\"phone\",y,\"phone-text\")]})]}),hi(g,w??\"\",n,i,d)]})]})},Qp=e=>new Promise((t,a)=>{let n=new Image;n.crossOrigin=\"anonymous\",n.src=e,n.onload=()=>{let i=document.createElement(\"canvas\"),p=i.getContext(\"2d\");if(!p)return a(new Error(\"Canvas not supported\"));i.width=n.width,i.height=n.height,p.drawImage(n,0,0);let c=[p.getImageData(0,0,1,1).data,p.getImageData(n.width-1,0,1,1).data,p.getImageData(0,n.height-1,1,1).data,p.getImageData(n.width-1,n.height-1,1,1).data].every(x=>Array.prototype.slice.call(x)[3]<10);t(c)},n.onerror=()=>a(new Error(\"Failed to load image\"))}),Xp=e=>{if(!e)return!1;let t=e.replace(\"#\",\"\").toLowerCase();if(!/^[0-9a-f]{3,4}$|^[0-9a-f]{6}$|^[0-9a-f]{8}$/i.test(t))return!1;let a=t;(t.length===3||t.length===4)&&(a=t.split(\"\").map(c=>c+c).join(\"\"));let n=Number.parseInt(a.substring(0,2),16),i=Number.parseInt(a.substring(2,4),16),p=Number.parseInt(a.substring(4,6),16),s=220;return n>=s&&i>=s&&p>=s},ec=(e,t)=>({onClick:()=>{Xo({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`})},onKeyDown:a=>{(a.key===\"Enter\"||a.key===\" \")&&(a.preventDefault(),Xo({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`}),globalThis.location.href=`${e===\"email\"?\"mailto\":\"tel\"}:${t}`)}}),er=(e,t,a)=>{let n=e===\"email\"?\"mailto:\":\"tel:\",i=ec(e,t);return(0,A.jsx)(le.Typography,{className:a,children:(0,A.jsx)(ci,{href:`${n}${t}`,...i,children:t})})};function Ca({className:e,shopTitle:t,shopDescription:a,socialTitleText:n,imageDetails:i,email:p,phone:s,bannerProps:c,socialIcons:x,expirationDate:y,showBadges:g=!1,totalSavings:w}){let d=(0,le.useMediaQuery)(\"(max-width: 560px)\"),[b,u]=(0,st.useState)(!1),[C,m]=(0,st.useState)(!1),[S,D]=(0,st.useState)(!1),[T,O]=(0,st.useState)(!1),G=()=>{m(!C)};(0,st.useEffect)(()=>{(async()=>{if(i?.imageSrc){let h=await Qp(i.imageSrc);O(h)}else O(!1)})()},[i?.imageSrc]),(0,st.useEffect)(()=>{D(Xp(c?.backgroundColor))},[c?.backgroundColor]),(0,st.useEffect)(()=>{let l,h=window.scrollY,v=!1,f=!1,E=0,ie=ue=>{let Lt=Date.now();if(v!==ue&&!f){if(Lt-E<100)return;f=!0,v=ue,E=Lt,ue&&m(!1),clearTimeout(l),u(ue),l=setTimeout(()=>{f=!1,ue&&window.scrollY<15&&window.scrollTo({top:d?20:30,behavior:\"smooth\"})},300)}},Ot=()=>{let ue=window.scrollY;if(f){h=ue;return}if(Math.abs(ue-h)<.5)return;let ut=ue>h,no=d?15:25,io=d?8:12;ut&&ue>no&&!v?ie(!0):!ut&&ue<io&&v&&ie(!1),h=ue},Ce=()=>{let ue=window.scrollY,ut=ue>(d?5:10);v=ut,u(ut),h=ue,E=Date.now()},Ze=null,Yt=0,Ft=()=>{Ze||Date.now()-Yt<16||(Ze=requestAnimationFrame(()=>{Ot(),Yt=Date.now(),Ze=null}))};return Ce(),window.addEventListener(\"scroll\",Ft,{passive:!0}),()=>{window.removeEventListener(\"scroll\",Ft),Ze&&cancelAnimationFrame(Ze),clearTimeout(l)}},[d]);let ee=(0,st.useMemo)(()=>x?.map((l,h)=>(0,A.jsx)(di,{onClick:f=>{f.preventDefault(),Xo({event:\"social_click\",social_platform:l.type,social_url:l.url,click_element:\"social_icon\"}),window.open(l.url,\"_blank\")},children:(0,A.jsx)(Ao.NsLink,{href:l.url,target:\"_blank\",children:(0,A.jsx)(Ao.NsImage,{src:`https://www.google.com/s2/favicons?domain=${l?.url}&sz=24`,alt:`${l.type} icon`,width:\"24\",height:\"24\"},l?.type+h)})},l?.type+h)),[x]),V=`${e} ${b?\"scrolled\":\"\"}`,z={shopTitle:t,shopDescription:a,socialTitleText:n,email:p,phone:s,showBadges:g,expirationDate:y,totalSavings:w},Z=()=>window.innerWidth<=380?50:window.innerWidth<=415?56:window.innerWidth<=460?62:80,F=d&&a&&a.length>Z();return d?(0,A.jsxs)(ii,{className:V,\"data-testid\":\"my-site-shop-header\",bannerProps:c,isCircularImage:T,hasWhiteBackground:S,children:[(0,A.jsxs)(le.Box,{className:\"image-content-mobile\",children:[mi(i,c??{},\"bg-image-mobile\"),Zp(z,b,ee,d,S)]}),!b&&(0,A.jsxs)(le.Box,{className:\"expandable-description-mobile\",children:[(0,A.jsx)(le.Typography,{className:`description-content-mobile ${C||!F?\"expanded\":\"collapsed\"}`,children:a}),F&&(0,A.jsx)(si,{onClick:G,children:(0,A.jsx)(fi,{width:16,height:16,className:`arrow-icon-mobile ${C?\"expanded\":\"\"}`})})]})]}):(0,A.jsxs)(ni,{className:V,\"data-testid\":\"my-site-shop-header\",bannerProps:c,isCircularImage:T,hasWhiteBackground:S,children:[mi(i,c??{},\"bg-image\"),qp(z,b,ee,d,S)]})}var po=require(\"@nuskin/foundation-theme\"),va=(0,po.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 24px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 24px;\n }\n\n @media (min-width: 1080px) {\n padding: 32px;\n }\n`,bi=(0,po.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 768px) {\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n }\n`,xi=(0,po.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 768px) {\n gap: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n }\n`,ka=(0,po.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 24px;\n }\n`,yi=(0,po.styled)(\"div\")`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;var Mi=M(require(\"@mui/icons-material/CalendarToday\")),Oi=M(require(\"@mui/icons-material/Public\")),Fi=require(\"@nuskin/foundation-ui-components\");var Be=require(\"@nuskin/foundation-theme\"),{getGenomeColor:dt}=Be.ColorUtils,wi=(0,Be.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>dt(e,\"N20\")};\n border-radius: 12px;\n min-height: 64px;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 24px;\n }\n\n @media (min-width: 1080px) {\n padding: 24px 32px;\n }\n`,Ci=(0,Be.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n gap: 12px;\n flex-wrap: wrap;\n`,vi=(0,Be.styled)(\"h1\")`\n font-size: 20px;\n font-weight: 600;\n line-height: 1.3;\n color: ${({theme:e})=>dt(e,\"N100\")};\n margin: 0;\n\n @media (min-width: 768px) {\n font-size: 24px;\n }\n\n @media (min-width: 1080px) {\n font-size: 28px;\n }\n`,ki=(0,Be.styled)(\"div\")`\n font-size: 13px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>dt(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`,Si=(0,Be.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`,Sa=(0,Be.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n`,Ta=(0,Be.styled)(\"label\")`\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n color: ${({theme:e})=>dt(e,\"N80\")};\n white-space: nowrap;\n display: none;\n\n @media (min-width: 1080px) {\n display: block;\n }\n`,Da=(0,Be.styled)(\"select\")`\n display: flex;\n align-items: center;\n gap: 12px;\n height: 40px;\n padding: 8px 12px;\n background-color: transparent;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: ${({theme:e})=>dt(e,\"N70\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n appearance: none;\n background-image: url('data:image/svg+xml;charset=UTF-8,%3csvg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"%3e%3cpath d=\"M5.625 7.3125L9 10.6875L12.375 7.3125\" stroke=\"%235f5f5f\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/%3e%3c/svg%3e');\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 32px;\n min-width: auto;\n\n &:hover {\n background-color: ${({theme:e})=>dt(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>dt(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>dt(e,\"A20\")};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n @media (min-width: 768px) {\n min-width: 160px;\n }\n\n @media (min-width: 1080px) {\n background-color: ${({theme:e})=>dt(e,\"N10\")};\n border: 1px solid ${({theme:e})=>dt(e,\"N40\")};\n border-radius: 8px;\n min-width: 180px;\n }\n`,Pa=(0,Be.styled)(\"span\")`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${({theme:e})=>dt(e,\"N70\")};\n\n svg {\n width: 16px;\n height: 16px;\n }\n`,Ti=(0,Be.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n overflow: hidden;\n\n svg,\n img,\n > * {\n width: 28px !important;\n height: 28px !important;\n max-width: 28px;\n max-height: 28px;\n }\n`,Di=(0,Be.styled)(\"div\")`\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n align-items: center;\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`,tg=(0,Be.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n`;var tr;function co(e){tr=e}function Pi(){return tr}function Bt(e){if(!tr)return e.fallback;let t;try{t=tr(e.key,e.fallback)}catch{t=void 0}return typeof t==\"string\"&&t.length>0?t:e.fallback}var o={title:{key:\"shoppingDashboard.title\",fallback:\"Shop Performance\"},error:{key:\"shoppingDashboard.error\",fallback:\"Error loading dashboard\"},stats:{revenue:{key:\"shoppingDashboard.stats.revenue\",fallback:\"Total Revenue\"},volume:{key:\"shoppingDashboard.stats.volume\",fallback:\"Volume\"},visits:{key:\"shoppingDashboard.stats.visits\",fallback:\"Site Visits\"},subtitle:{dcSv:{key:\"shoppingDashboard.stats.subtitle.dcSv\",fallback:\"DC-SV\"},conversionRate:{key:\"shoppingDashboard.stats.subtitle.conversionRate\",fallback:\"Conversion Rate\"}},trend:{increased:{key:\"shoppingDashboard.stats.trend.increased\",fallback:\"increased\"},decreased:{key:\"shoppingDashboard.stats.trend.decreased\",fallback:\"decreased\"},unchanged:{key:\"shoppingDashboard.stats.trend.unchanged\",fallback:\"unchanged\"}},details:{key:\"shoppingDashboard.stats.details\",fallback:\"details\"}},filter:{dateRange:{label:{key:\"shoppingDashboard.filter.dateRange.label\",fallback:\"Date Range\"},last7days:{key:\"shoppingDashboard.filter.dateRange.last7days\",fallback:\"Last 7 Days\"},last30days:{key:\"shoppingDashboard.filter.dateRange.last30days\",fallback:\"Last 30 Days\"},last90days:{key:\"shoppingDashboard.filter.dateRange.last90days\",fallback:\"Last 90 Days\"},thisMonth:{key:\"shoppingDashboard.filter.dateRange.thisMonth\",fallback:\"This Month\"}},dateRangeLabel:{key:\"shoppingDashboard.filter.dateRangeLabel\",fallback:\"Date Range\"},market:{label:{key:\"shoppingDashboard.filter.market.label\",fallback:\"Market\"},all:{key:\"shoppingDashboard.filter.market.all\",fallback:\"All Markets\"}},marketLabel:{key:\"shoppingDashboard.filter.marketLabel\",fallback:\"Market\"},productSort:{label:{key:\"shoppingDashboard.filter.productSort.label\",fallback:\"Sort By\"},units:{key:\"shoppingDashboard.filter.productSort.units\",fallback:\"Units\"},revenue:{key:\"shoppingDashboard.filter.productSort.revenue\",fallback:\"Revenue\"},volume:{key:\"shoppingDashboard.filter.productSort.volume\",fallback:\"Volume\"},byUnits:{key:\"shoppingDashboard.filter.productSort.byUnits\",fallback:\"By: Units\"},byRevenue:{key:\"shoppingDashboard.filter.productSort.byRevenue\",fallback:\"By: Revenue\"},byVolume:{key:\"shoppingDashboard.filter.productSort.byVolume\",fallback:\"By: Volume\"}},signupView:{label:{key:\"shoppingDashboard.filter.signupView.label\",fallback:\"Show\"},all:{key:\"shoppingDashboard.filter.signupView.all\",fallback:\"All\"},members:{key:\"shoppingDashboard.filter.signupView.members\",fallback:\"Members\"},retail:{key:\"shoppingDashboard.filter.signupView.retail\",fallback:\"Retail\"},brandAffiliates:{key:\"shoppingDashboard.filter.signupView.brandAffiliates\",fallback:\"Brand Affiliates\"},showAll:{key:\"shoppingDashboard.filter.signupView.showAll\",fallback:\"Show: All\"},showMembers:{key:\"shoppingDashboard.filter.signupView.showMembers\",fallback:\"Show: Members\"},showRetail:{key:\"shoppingDashboard.filter.signupView.showRetail\",fallback:\"Show: Retail\"},showBrandAffiliates:{key:\"shoppingDashboard.filter.signupView.showBrandAffiliates\",fallback:\"Show: Brand Affiliates\"}},conversionType:{all:{key:\"shoppingDashboard.filter.conversionType.all\",fallback:\"All\"},standard:{key:\"shoppingDashboard.filter.conversionType.standard\",fallback:\"Standard\"},subscription:{key:\"shoppingDashboard.filter.conversionType.subscription\",fallback:\"Subscription\"}},categorySort:{byRevenue:{key:\"shoppingDashboard.filter.categorySort.byRevenue\",fallback:\"By: Revenue\"},byTrend:{key:\"shoppingDashboard.filter.categorySort.byTrend\",fallback:\"By: Trend\"}}},widget:{topProducts:{title:{key:\"shoppingDashboard.widget.topProducts.title\",fallback:\"Top Selling Products\"},viewAll:{key:\"shoppingDashboard.widget.topProducts.viewAll\",fallback:\"View All Products\"},units:{key:\"shoppingDashboard.widget.topProducts.units\",fallback:\"Units\"},revenue:{key:\"shoppingDashboard.widget.topProducts.revenue\",fallback:\"Revenue\"},loading:{key:\"shoppingDashboard.widget.topProducts.loading\",fallback:\"Loading products...\"},empty:{key:\"shoppingDashboard.widget.topProducts.empty\",fallback:\"No products available\"},ariaLabel:{key:\"shoppingDashboard.widget.topProducts.ariaLabel\",fallback:\"Top Selling Products widget\"},titleAriaLabel:{key:\"shoppingDashboard.widget.topProducts.titleAriaLabel\",fallback:\"Click to view full top products details page\"},sortAriaLabel:{key:\"shoppingDashboard.widget.topProducts.sortAriaLabel\",fallback:\"Sort products by\"},noImageAriaLabel:{key:\"shoppingDashboard.widget.topProducts.noImageAriaLabel\",fallback:\"No image available\"},unitsSuffix:{key:\"shoppingDashboard.widget.topProducts.unitsSuffix\",fallback:\"units\"},revenueSuffix:{key:\"shoppingDashboard.widget.topProducts.revenueSuffix\",fallback:\"revenue\"},dcSvSuffix:{key:\"shoppingDashboard.widget.topProducts.dcSvSuffix\",fallback:\"DC-SV\"},rank:{key:\"shoppingDashboard.widget.topProducts.rank\",fallback:\"Rank\"},trend:{key:\"shoppingDashboard.widget.topProducts.trend\",fallback:\"Trend\"}},conversionRate:{title:{key:\"shoppingDashboard.widget.conversionRate.title\",fallback:\"Conversion Rate\"},formula:{key:\"shoppingDashboard.widget.conversionRate.formula\",fallback:\"Orders \\xF7 Site visits\"},comparison:{key:\"shoppingDashboard.widget.conversionRate.comparison\",fallback:\"compared to this time last month\"},chartAriaLabel:{key:\"shoppingDashboard.widget.conversionRate.chartAriaLabel\",fallback:\"Conversion Rate chart showing daily rates\"},titleAriaLabel:{key:\"shoppingDashboard.widget.conversionRate.titleAriaLabel\",fallback:\"Click to view full conversion rate details page\"},filterAriaLabel:{key:\"shoppingDashboard.widget.conversionRate.filterAriaLabel\",fallback:\"Filter conversion rate by customer type\"},noData:{key:\"shoppingDashboard.widget.conversionRate.noData\",fallback:\"No data\"},noChange:{key:\"shoppingDashboard.widget.conversionRate.noChange\",fallback:\"No change\"},tooltipOrders:{key:\"shoppingDashboard.widget.conversionRate.tooltipOrders\",fallback:\"orders\"},tooltipVisits:{key:\"shoppingDashboard.widget.conversionRate.tooltipVisits\",fallback:\"visits\"},ordersPerSiteVisits:{key:\"shoppingDashboard.widget.conversionRate.ordersPerSiteVisits\",fallback:\"Orders / Site Visits\"}},signups:{title:{key:\"shoppingDashboard.widget.signups.title\",fallback:\"Sign-ups\"},total:{key:\"shoppingDashboard.widget.signups.total\",fallback:\"Total\"},members:{key:\"shoppingDashboard.widget.signups.members\",fallback:\"Members\"},retail:{key:\"shoppingDashboard.widget.signups.retail\",fallback:\"Retail\"},brandAffiliates:{key:\"shoppingDashboard.widget.signups.brandAffiliates\",fallback:\"Brand Affiliates\"},chartAriaLabel:{key:\"shoppingDashboard.widget.signups.chartAriaLabel\",fallback:\"Signups multi-line chart showing Total, Members, Retail, and Brand Affiliates\"},titleAriaLabel:{key:\"shoppingDashboard.widget.signups.titleAriaLabel\",fallback:\"Click to view full signups details page\"},filterAriaLabel:{key:\"shoppingDashboard.widget.signups.filterAriaLabel\",fallback:\"Filter signups view\"},noData:{key:\"shoppingDashboard.widget.signups.noData\",fallback:\"No data\"},noChange:{key:\"shoppingDashboard.widget.signups.noChange\",fallback:\"No change\"},totalSignupsInPeriod:{key:\"shoppingDashboard.widget.signups.totalSignupsInPeriod\",fallback:\"Total sign-ups in period\"},noTrendData:{key:\"shoppingDashboard.widget.signups.noTrendData\",fallback:\"No sign-up trend data available.\"}},topCategories:{title:{key:\"shoppingDashboard.widget.topCategories.title\",fallback:\"Top Categories\"},revenue:{key:\"shoppingDashboard.widget.topCategories.revenue\",fallback:\"Revenue\"},units:{key:\"shoppingDashboard.widget.topCategories.units\",fallback:\"Units\"},empty:{key:\"shoppingDashboard.widget.topCategories.empty\",fallback:\"No category data available\"},chartAriaLabel:{key:\"shoppingDashboard.widget.topCategories.chartAriaLabel\",fallback:\"Top Categories donut chart showing revenue distribution by category\"},titleAriaLabel:{key:\"shoppingDashboard.widget.topCategories.titleAriaLabel\",fallback:\"Click to view full categories details page\"},sortAriaLabel:{key:\"shoppingDashboard.widget.topCategories.sortAriaLabel\",fallback:\"Sort categories by\"}},menu:{ariaLabel:{key:\"shoppingDashboard.widget.menu.ariaLabel\",fallback:\"widget options\"},fullView:{key:\"shoppingDashboard.widget.menu.fullView\",fallback:\"Full View\"}}},navigation:{backToDashboard:{key:\"shoppingDashboard.navigation.backToDashboard\",fallback:\"Back to Dashboard\"},backAriaLabel:{key:\"shoppingDashboard.navigation.backAriaLabel\",fallback:\"Back to dashboard\"}},ariaLabel:{dashboard:{key:\"shoppingDashboard.ariaLabel.dashboard\",fallback:\"Shopping Dashboard\"},statsRow:{key:\"shoppingDashboard.ariaLabel.statsRow\",fallback:\"Key performance metrics\"},dashboardFilters:{key:\"shoppingDashboard.ariaLabel.dashboardFilters\",fallback:\"Dashboard filters\"},loadingDashboard:{key:\"shoppingDashboard.ariaLabel.loadingDashboard\",fallback:\"Loading dashboard data\"},dateRangeFilter:{key:\"shoppingDashboard.ariaLabel.dateRangeFilter\",fallback:\"Date range filter, currently selected:\"},marketFilter:{key:\"shoppingDashboard.ariaLabel.marketFilter\",fallback:\"Market filter, currently selected:\"},filterSuffix:{key:\"shoppingDashboard.ariaLabel.filterSuffix\",fallback:\"filter\"}},fullView:{signups:{columns:{id:{key:\"shoppingDashboard.fullView.signups.columns.id\",fallback:\"ID\"},name:{key:\"shoppingDashboard.fullView.signups.columns.name\",fallback:\"Name\"},date:{key:\"shoppingDashboard.fullView.signups.columns.date\",fallback:\"Date\"},type:{key:\"shoppingDashboard.fullView.signups.columns.type\",fallback:\"Type\"},email:{key:\"shoppingDashboard.fullView.signups.columns.email\",fallback:\"Email\"},status:{key:\"shoppingDashboard.fullView.signups.columns.status\",fallback:\"Status\"}},detailsTitle:{key:\"shoppingDashboard.fullView.signups.detailsTitle\",fallback:\"Signup Details\"}},conversionRate:{columns:{orderId:{key:\"shoppingDashboard.fullView.conversionRate.columns.orderId\",fallback:\"Order ID\"},date:{key:\"shoppingDashboard.fullView.conversionRate.columns.date\",fallback:\"Date\"},customer:{key:\"shoppingDashboard.fullView.conversionRate.columns.customer\",fallback:\"Customer\"},type:{key:\"shoppingDashboard.fullView.conversionRate.columns.type\",fallback:\"Type\"},items:{key:\"shoppingDashboard.fullView.conversionRate.columns.items\",fallback:\"Items\"},total:{key:\"shoppingDashboard.fullView.conversionRate.columns.total\",fallback:\"Total\"},bv:{key:\"shoppingDashboard.fullView.conversionRate.columns.bv\",fallback:\"BV\"},orderTotal:{key:\"shoppingDashboard.fullView.conversionRate.columns.orderTotal\",fallback:\"Order Total\"},totalSv:{key:\"shoppingDashboard.fullView.conversionRate.columns.totalSv\",fallback:\"Total SV\"}},orderDetailsTitle:{key:\"shoppingDashboard.fullView.conversionRate.orderDetailsTitle\",fallback:\"Order Details\"},notAvailable:{key:\"shoppingDashboard.fullView.conversionRate.notAvailable\",fallback:\"N/A\"}},products:{columns:{rank:{key:\"shoppingDashboard.fullView.products.columns.rank\",fallback:\"#\"},product:{key:\"shoppingDashboard.fullView.products.columns.product\",fallback:\"Product\"},unitsSold:{key:\"shoppingDashboard.fullView.products.columns.unitsSold\",fallback:\"Units Sold\"},revenue:{key:\"shoppingDashboard.fullView.products.columns.revenue\",fallback:\"Revenue\"},volume:{key:\"shoppingDashboard.fullView.products.columns.volume\",fallback:\"Volume (DC-SV)\"}},skuPrefix:{key:\"shoppingDashboard.fullView.products.skuPrefix\",fallback:\"SKU\"},noProducts:{key:\"shoppingDashboard.fullView.products.noProducts\",fallback:\"No products available.\"}},categories:{columns:{category:{key:\"shoppingDashboard.fullView.categories.columns.category\",fallback:\"Category\"},revenue:{key:\"shoppingDashboard.fullView.categories.columns.revenue\",fallback:\"Revenue\"},percentOfTotal:{key:\"shoppingDashboard.fullView.categories.columns.percentOfTotal\",fallback:\"% of Total\"},trend:{key:\"shoppingDashboard.fullView.categories.columns.trend\",fallback:\"Trend\"}},allCategoriesTitle:{key:\"shoppingDashboard.fullView.categories.allCategoriesTitle\",fallback:\"All Categories\"},noCategoryData:{key:\"shoppingDashboard.fullView.categories.noCategoryData\",fallback:\"No category data available.\"}}},dataTable:{noDataAvailable:{key:\"shoppingDashboard.dataTable.noDataAvailable\",fallback:\"No data available\"},sortableColumn:{key:\"shoppingDashboard.dataTable.sortableColumn\",fallback:\", sortable column\"}},pagination:{previousPage:{key:\"shoppingDashboard.pagination.previousPage\",fallback:\"Previous page\"},nextPage:{key:\"shoppingDashboard.pagination.nextPage\",fallback:\"Next page\"},goToPage:{key:\"shoppingDashboard.pagination.goToPage\",fallback:\"Go to page\"},of:{key:\"shoppingDashboard.pagination.of\",fallback:\"of\"}},defaults:{zeroTrend:{key:\"shoppingDashboard.defaults.zeroTrend\",fallback:\"+0%\"},noValue:{key:\"shoppingDashboard.defaults.noValue\",fallback:\"--\"}}};function r(e){return Bt(e)}var Ri=require(\"react\");function Ra(){return[{value:\"all\",label:r(o.filter.market.all)}]}function Ma(e){return e&&e.length>0?e:Ra()}function Xe(e){return(0,Ri.useMemo)(()=>Ma(e),[e])}var oe=require(\"react/jsx-runtime\"),uo=({shopTitle:e,dateRange:t,market:a,dateRangeLabel:n,isLoading:i=!1,stats:p,markets:s,onDateRangeChange:c,onMarketChange:x})=>{let y=Xe(s),g=u=>{let C=u.target.value;c?.(C)},w=u=>{let C=u.target.value;x?.(C)},d=u=>{u.key===\"Escape\"&&u.target.blur()},b=()=>n||(p?.dateRange?p.dateRange.label:r(o.filter.dateRange.last30days));return(0,oe.jsxs)(wi,{as:\"header\",\"data-testid\":\"dashboard-header\",children:[(0,oe.jsxs)(Ci,{children:[(0,oe.jsx)(vi,{\"data-testid\":\"dashboard-shop-title\",children:e??p?.shopTitle??r(o.title)}),(0,oe.jsx)(ki,{\"aria-live\":\"polite\",\"data-testid\":\"dashboard-date-range-label\",children:b()})]}),(0,oe.jsx)(Si,{\"aria-label\":r(o.ariaLabel.dashboardFilters),\"data-testid\":\"dashboard-filters-section\",children:(0,oe.jsxs)(Di,{children:[i&&(0,oe.jsx)(Ti,{as:\"output\",\"aria-live\":\"polite\",\"aria-label\":r(o.ariaLabel.loadingDashboard),\"data-testid\":\"dashboard-loading-indicator\",children:(0,oe.jsx)(Fi.NsSpinner,{})}),(0,oe.jsxs)(Sa,{children:[(0,oe.jsx)(Ta,{htmlFor:\"filter-date-range\",children:r(o.filter.dateRangeLabel)}),(0,oe.jsx)(Pa,{\"aria-hidden\":\"true\",children:(0,oe.jsx)(Mi.default,{})}),(0,oe.jsxs)(Da,{id:\"filter-date-range\",\"data-testid\":\"filter-date-range\",value:t,onChange:g,onKeyDown:d,disabled:i,\"aria-label\":`${r(o.ariaLabel.dateRangeFilter)} ${r(o.filter.dateRange[t])}`,children:[(0,oe.jsx)(\"option\",{value:\"last7days\",children:r(o.filter.dateRange.last7days)}),(0,oe.jsx)(\"option\",{value:\"last30days\",children:r(o.filter.dateRange.last30days)}),(0,oe.jsx)(\"option\",{value:\"last90days\",children:r(o.filter.dateRange.last90days)}),(0,oe.jsx)(\"option\",{value:\"thisMonth\",children:r(o.filter.dateRange.thisMonth)})]})]}),(0,oe.jsxs)(Sa,{children:[(0,oe.jsx)(Ta,{htmlFor:\"filter-market\",children:r(o.filter.marketLabel)}),(0,oe.jsx)(Pa,{\"aria-hidden\":\"true\",children:(0,oe.jsx)(Oi.default,{})}),(0,oe.jsx)(Da,{id:\"filter-market\",\"data-testid\":\"filter-market\",value:a,onChange:w,onKeyDown:d,disabled:i,\"aria-label\":`${r(o.ariaLabel.marketFilter)} ${y.find(u=>u.value===a)?.label??String(a)}`,children:y.map(u=>(0,oe.jsx)(\"option\",{value:u.value,children:u.label},u.value))})]})]})})]})};var gl=M(require(\"react\"));var Li=M(require(\"@mui/icons-material/TrendingUp\")),$i=M(require(\"@mui/icons-material/TrendingDown\")),Ni=M(require(\"@mui/icons-material/Remove\"));var or=require(\"react/jsx-runtime\");function bt(e){if(!e)return null;let t=e.replace(\"%\",\"\").trim(),a=Number(t);return Number.isFinite(a)?a:null}function qt(e){let t=bt(e);return t===null?\"neutral\":t>0?\"up\":t<0?\"down\":\"neutral\"}function Et(e,t,a){let{weightedSum:n,weight:i}=e.reduce((c,x)=>{let y=bt(a(x));return y===null?c:{weightedSum:c.weightedSum+y*t(x),weight:c.weight+t(x)}},{weightedSum:0,weight:0}),p=i>0?n/i:0,s=\"neutral\";return p>0?s=\"up\":p<0&&(s=\"down\"),{direction:s,formatted:`${p>0?\"+\":\"\"}${p.toFixed(1)}%`}}function go(e){return e===\"up\"?r(o.stats.trend.increased):e===\"down\"?r(o.stats.trend.decreased):r(o.stats.trend.unchanged)}function xe(e){switch(e){case\"up\":return(0,or.jsx)(Li.default,{});case\"down\":return(0,or.jsx)($i.default,{});case\"neutral\":default:return(0,or.jsx)(Ni.default,{})}}function Vi(e){switch(e){case\"up\":return\"#4caf50\";case\"down\":return\"#f44336\";case\"neutral\":default:return\"#757575\"}}var Me=require(\"@nuskin/foundation-theme\"),{getGenomeColor:At}=Me.ColorUtils,rr=(0,Me.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n gap: ${({$layout:e})=>e===\"split\"?\"8px\":\"0\"};\n padding: ${({$layout:e})=>e===\"split\"?\"16px\":\"12px\"};\n background-color: ${({theme:e})=>At(e,\"N20\")};\n border: 1px solid ${({theme:e})=>At(e,\"N30\")};\n border-radius: 8px;\n min-height: ${({$layout:e})=>e===\"split\"?\"127px\":\"120px\"};\n transition: box-shadow 0.2s ease;\n\n &:hover {\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.08);\n }\n\n @media (min-width: 768px) {\n padding: ${({$layout:e})=>e===\"split\"?\"24px\":\"20px\"};\n min-height: ${({$layout:e})=>e===\"split\"?\"127px\":\"140px\"};\n }\n\n @media (min-width: 1080px) {\n padding: 24px;\n min-height: ${({$layout:e})=>e===\"split\"?\"127px\":\"160px\"};\n }\n`,Ii=(0,Me.styled)(\"div\")`\n width: 100%;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>At(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,Ai=(0,Me.styled)(\"div\")`\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n`,zi=(0,Me.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n gap: 2px;\n`,Bi=(0,Me.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n flex-shrink: 0;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#9b131a\":At(e,\"N70\")};\n\n svg {\n width: 24px;\n height: 24px;\n }\n`,Ei=(0,Me.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0.12px;\n text-align: right;\n color: ${({theme:e})=>At(e,\"N70\")};\n`,Hi=(0,Me.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>At(e,\"N70\")};\n margin-bottom: 4px;\n text-transform: capitalize;\n\n @media (min-width: 768px) {\n font-size: 13px;\n margin-bottom: 6px;\n }\n\n @media (min-width: 1080px) {\n font-size: 14px;\n }\n`,Wi=(0,Me.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n gap: 8px;\n margin-top: 8px;\n`,Oa=(0,Me.styled)(\"div\")`\n font-size: 24px;\n font-weight: 700;\n line-height: 1.2;\n color: ${({theme:e})=>At(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 28px;\n }\n\n @media (min-width: 1080px) {\n font-size: 32px;\n }\n`,_i=(0,Me.styled)(\"div\")`\n font-size: 16px;\n font-weight: 400;\n line-height: normal;\n color: ${({theme:e})=>At(e,\"N70\")};\n padding-bottom: 2px;\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,Ki=(0,Me.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n flex-shrink: 0;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#22C55E\":t===\"down\"?\"#DC2626\":At(e,\"N70\")};\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n @media (min-width: 768px) {\n font-size: 14px;\n margin-top: 12px;\n\n svg {\n width: 18px;\n height: 18px;\n }\n }\n`,Fa=(0,Me.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n`,La=(0,Me.styled)(\"span\")`\n white-space: nowrap;\n`,Ui=(0,Me.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;var Q=M(require(\"@mui/material/Skeleton\"));var j=require(\"@nuskin/foundation-theme\"),fo=M(require(\"@mui/material/Skeleton\")),ar=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`,nr=(0,j.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Gi=(0,j.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n\n @media (min-width: 768px) {\n gap: 14px;\n padding: 14px 0;\n }\n`,Yi=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 12px;\n border-radius: 8px;\n min-height: 120px;\n\n @media (min-width: 600px) {\n padding: 20px;\n min-height: 140px;\n }\n @media (min-width: 900px) {\n padding: 24px;\n min-height: 160px;\n }\n`,ji=(0,j.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`,Ji=(0,j.styled)(\"div\")`\n margin-top: 8px;\n`,Zi=(0,j.styled)(fo.default)`\n margin-top: 4px;\n`,qi=(0,j.styled)(\"div\")`\n flex: 1;\n min-width: 0;\n`,Qi=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n`,Xi=(0,j.styled)(\"div\")`\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 16px;\n`,el=(0,j.styled)(\"div\")`\n padding-top: 4px;\n`,tl=(0,j.styled)(fo.default)`\n border-radius: 8px;\n height: 220px;\n\n @media (min-width: 600px) {\n height: 280px;\n }\n @media (min-width: 900px) {\n height: 340px;\n }\n`,ol=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n @media (min-width: 600px) {\n flex-direction: row;\n gap: 24px;\n }\n`,rl=(0,j.styled)(fo.default)`\n width: 100%;\n height: 200px;\n border-radius: 8px;\n flex-shrink: 0;\n\n @media (min-width: 600px) {\n width: 200px;\n border-radius: 50%;\n }\n`,al=(0,j.styled)(\"div\")`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n`,nl=(0,j.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n`,il=(0,j.styled)(\"div\")`\n flex: 1;\n`,tc=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 24px;\n\n @media (min-width: 600px) {\n gap: 32px;\n }\n @media (min-width: 900px) {\n gap: 40px;\n }\n`,oc=(0,j.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n`,rc=(0,j.styled)(\"div\")`\n display: flex;\n gap: 16px;\n`,ac=(0,j.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n\n @media (min-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n }\n @media (min-width: 900px) {\n gap: 24px;\n }\n`,nc=(0,j.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n\n @media (min-width: 900px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 24px;\n }\n`,$a=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 24px;\n`,ll=(0,j.styled)(\"div\")`\n padding: 24px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n`,sl=(0,j.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px 0;\n gap: 8px;\n`,dl=(0,j.styled)(fo.default)`\n border-radius: 8px;\n height: 260px;\n\n @media (min-width: 600px) {\n height: 320px;\n }\n @media (min-width: 900px) {\n height: 400px;\n }\n`,Na=(0,j.styled)(\"div\")`\n padding: 20px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n`,ir=(0,j.styled)(fo.default)`\n border-radius: 4px;\n`,pl=(0,j.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n\n @media (min-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n }\n`;var k=require(\"react/jsx-runtime\"),zo=()=>(0,k.jsxs)(Yi,{\"data-testid\":\"skeleton-stats-card\",children:[(0,k.jsxs)(ji,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:80,height:18}),(0,k.jsx)(Q.default,{variant:\"text\",width:48,height:16})]}),(0,k.jsxs)(Ji,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:120,height:36}),(0,k.jsx)(Zi,{variant:\"text\",width:100,height:16})]})]}),ic=()=>(0,k.jsxs)(Gi,{children:[(0,k.jsx)(Q.default,{variant:\"rounded\",width:28,height:28}),(0,k.jsx)(Q.default,{variant:\"rounded\",width:50,height:50}),(0,k.jsxs)(qi,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:\"70%\",height:18}),(0,k.jsx)(Q.default,{variant:\"text\",width:\"50%\",height:14})]}),(0,k.jsxs)(Qi,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:80,height:18}),(0,k.jsx)(Q.default,{variant:\"text\",width:48,height:14})]})]}),cl=()=>(0,k.jsxs)(ar,{\"data-testid\":\"skeleton-products-list\",children:[(0,k.jsxs)(nr,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:160,height:22}),(0,k.jsx)(Q.default,{variant:\"rounded\",width:100,height:32})]}),[\"product-1\",\"product-2\",\"product-3\",\"product-4\",\"product-5\"].map(e=>(0,k.jsx)(ic,{},e))]}),lr=()=>(0,k.jsxs)(ar,{\"data-testid\":\"skeleton-chart-widget\",children:[(0,k.jsxs)(nr,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:140,height:22}),(0,k.jsx)(Q.default,{variant:\"rounded\",width:110,height:32})]}),(0,k.jsxs)(Xi,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:100,height:36}),(0,k.jsxs)(el,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:60,height:18}),(0,k.jsx)(Q.default,{variant:\"text\",width:140,height:14})]})]}),(0,k.jsx)(tl,{variant:\"rounded\",width:\"100%\"})]}),lc=()=>(0,k.jsxs)(nl,{children:[(0,k.jsx)(Q.default,{variant:\"circular\",width:12,height:12}),(0,k.jsxs)(il,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:\"60%\",height:16}),(0,k.jsx)(Q.default,{variant:\"text\",width:\"40%\",height:14})]}),(0,k.jsx)(Q.default,{variant:\"text\",width:36,height:18})]}),sr=()=>(0,k.jsxs)(ar,{\"data-testid\":\"skeleton-categories-pie\",children:[(0,k.jsxs)(nr,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:140,height:22}),(0,k.jsx)(Q.default,{variant:\"rounded\",width:100,height:32})]}),(0,k.jsxs)(ol,{children:[(0,k.jsx)(rl,{variant:\"circular\"}),(0,k.jsx)(al,{children:[\"legend-1\",\"legend-2\",\"legend-3\",\"legend-4\",\"legend-5\"].map(e=>(0,k.jsx)(lc,{},e))})]})]});var Ht=()=>(0,k.jsxs)($a,{\"data-testid\":\"skeleton-fullview-chart\",children:[(0,k.jsxs)(ll,{children:[(0,k.jsxs)(sl,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:140,height:52}),(0,k.jsx)(Q.default,{variant:\"text\",width:80,height:24}),(0,k.jsx)(Q.default,{variant:\"text\",width:160,height:16})]}),(0,k.jsx)(dl,{variant:\"rounded\",width:\"100%\"})]}),(0,k.jsxs)(Na,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:200,height:24}),[\"table-row-1\",\"table-row-2\",\"table-row-3\",\"table-row-4\",\"table-row-5\"].map(e=>(0,k.jsx)(ir,{variant:\"rounded\",width:\"100%\",height:44},e))]})]}),ul=()=>(0,k.jsxs)($a,{\"data-testid\":\"skeleton-fullview-table\",children:[(0,k.jsxs)(pl,{children:[(0,k.jsx)(zo,{}),(0,k.jsx)(zo,{}),(0,k.jsx)(zo,{})]}),(0,k.jsxs)(Na,{children:[(0,k.jsx)(Q.default,{variant:\"text\",width:200,height:24}),(0,k.jsx)(ir,{variant:\"rounded\",width:\"100%\",height:40}),[\"summary-row-1\",\"summary-row-2\",\"summary-row-3\",\"summary-row-4\",\"summary-row-5\",\"summary-row-6\",\"summary-row-7\",\"summary-row-8\"].map(e=>(0,k.jsx)(ir,{variant:\"rounded\",width:\"100%\",height:44},e))]})]});var se=require(\"react/jsx-runtime\"),sc=({title:e,value:t,subtitle:a,caption:n,layout:i=\"default\",trendDirection:p=\"neutral\",trendValue:s,testId:c,isLoading:x=!1})=>{if(x)return(0,se.jsx)(rr,{$layout:i,\"data-testid\":c,children:(0,se.jsx)(zo,{})});let y=()=>{let g=r(o.stats.trend.unchanged);return p===\"up\"?g=r(o.stats.trend.increased):p===\"down\"&&(g=r(o.stats.trend.decreased)),`${e} ${g} ${s??\"\"}`};return i===\"split\"?(0,se.jsxs)(rr,{as:\"article\",$layout:\"split\",\"aria-label\":`${e}: ${t}`,\"data-testid\":c,children:[(0,se.jsx)(Ii,{id:`stats-title-${c}`,children:e}),(0,se.jsxs)(Ai,{children:[(0,se.jsx)(Oa,{\"aria-describedby\":`stats-title-${c}`,\"data-testid\":`stats-value-${c}`,children:t}),(s??n)&&(0,se.jsxs)(zi,{children:[s&&(0,se.jsxs)(Bi,{as:\"output\",direction:p,\"aria-live\":\"polite\",\"aria-label\":y(),\"data-testid\":`stats-trend-${c}`,children:[(0,se.jsx)(Fa,{\"aria-hidden\":\"true\",children:xe(p)}),(0,se.jsx)(La,{children:s})]}),n&&(0,se.jsx)(Ei,{\"data-testid\":`stats-caption-${c}`,children:n})]})]})]}):(0,se.jsxs)(rr,{as:\"article\",\"aria-label\":`${e}: ${t}`,\"data-testid\":c,children:[(0,se.jsxs)(Ui,{children:[(0,se.jsx)(Hi,{id:`stats-title-${c}`,children:e}),s&&(0,se.jsxs)(Ki,{as:\"output\",direction:p,\"aria-live\":\"polite\",\"aria-label\":y(),\"data-testid\":`stats-trend-${c}`,children:[(0,se.jsx)(Fa,{\"aria-hidden\":\"true\",children:xe(p)}),(0,se.jsx)(La,{children:s})]})]}),(0,se.jsxs)(Wi,{children:[(0,se.jsx)(Oa,{\"aria-describedby\":`stats-title-${c}`,\"data-testid\":`stats-value-${c}`,children:t}),a&&(0,se.jsx)(_i,{\"aria-label\":`${e} ${r(o.stats.details)}: ${a}`,\"data-testid\":`stats-subtitle-${c}`,children:a})]})]})},xt=gl.default.memo(sc);xt.displayName=\"StatsCard\";var Hl=M(require(\"react\")),Wl=M(require(\"@mui/icons-material/ShoppingCart\"));var Va=require(\"react\");function Ia(e,t){return Math.ceil(e.length/t)}function Aa(e,t,a){let n=(t-1)*a,i=n+a;return e.slice(n,i)}function fl(e,t,a=\"desc\"){return[...e].sort((n,i)=>{let p=n[t],s=i[t];return a===\"asc\"?p-s:s-p})}function ml(e,t,a=1){return t===0?\"0.0\":(e/t*100).toFixed(a)}function yt(e,t,a){let n=(0,Va.useMemo)(()=>Ia(e,a),[e,a]),i=(0,Va.useMemo)(()=>Aa(e,t,a),[e,t,a]);return{totalPages:n,pageItems:i}}function J(e,t,a=\"en-US\",n){let i=Number.isFinite(e)?e:0;if(t)try{return new Intl.NumberFormat(a,{style:\"currency\",currency:t,...n!==void 0?{minimumFractionDigits:n,maximumFractionDigits:n}:{minimumFractionDigits:0,maximumFractionDigits:2}}).format(i)}catch{}return n!==void 0?`$${i.toFixed(n)}`:`$${i.toLocaleString()}`}var ge=require(\"@nuskin/foundation-theme\"),{getGenomeColor:re}=ge.ColorUtils,dr=(0,ge.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>re(e,\"N20\")};\n border: 1px solid ${({theme:e})=>re(e,\"N30\")};\n border-radius: 12px;\n min-height: 320px;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n\n @media (min-width: 768px) {\n padding: 20px;\n min-height: 400px;\n }\n\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`,za=(0,ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({theme:e})=>re(e,\"N40\")};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,hl=(0,ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Ba=(0,ge.styled)(\"h2\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({theme:e})=>re(e,\"N100\")};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({theme:e})=>re(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,bl=(0,ge.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>re(e,\"N20\")};\n border: 1px solid ${({theme:e})=>re(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>re(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>re(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>re(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>re(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,xl=(0,ge.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n overflow: hidden;\n list-style: none;\n margin: 0;\n padding: 0;\n\n @media (min-width: 768px) {\n gap: 14px;\n }\n`,yl=(0,ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background-color: ${({theme:e})=>re(e,\"N20\")};\n border-radius: 8px;\n transition:\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n cursor: pointer;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n list-style: none;\n\n &:not(:last-child) {\n border-bottom: 1px solid ${({theme:e})=>re(e,\"N40\")};\n }\n\n &:hover {\n background-color: ${({theme:e})=>re(e,\"N30\")};\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.06);\n }\n\n @media (min-width: 768px) {\n padding: 14px;\n gap: 14px;\n }\n`,wl=(0,ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n background-color: ${({theme:e})=>re(e,\"A10\")};\n color: ${({theme:e})=>re(e,\"A80\")};\n border-radius: 4px;\n font-size: 12px;\n font-weight: 600;\n\n @media (min-width: 768px) {\n min-width: 28px;\n height: 28px;\n font-size: 13px;\n }\n`,Cl=(0,ge.styled)(\"img\")`\n width: 40px;\n height: 40px;\n border-radius: 8px;\n object-fit: cover;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 50px;\n height: 50px;\n }\n`,vl=(0,ge.styled)(\"div\")`\n width: 40px;\n height: 40px;\n border-radius: 8px;\n background-color: ${({theme:e})=>re(e,\"N40\")};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({theme:e})=>re(e,\"N70\")};\n font-size: 10px;\n font-weight: 500;\n\n @media (min-width: 768px) {\n width: 50px;\n height: 50px;\n font-size: 11px;\n }\n`,kl=(0,ge.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex-grow: 1;\n min-width: 0;\n`,Sl=(0,ge.styled)(\"div\")`\n font-size: 13px;\n font-weight: 500;\n line-height: 1.3;\n color: ${({theme:e})=>re(e,\"N100\")};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 18ch;\n\n @media (min-width: 768px) {\n font-size: 14px;\n max-width: none;\n }\n`,Tl=(0,ge.styled)(\"div\")`\n font-size: 11px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>re(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`,Dl=(0,ge.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n`,Pl=(0,ge.styled)(\"div\")`\n font-size: 14px;\n font-weight: 600;\n line-height: 1.2;\n color: ${({theme:e})=>re(e,\"N100\")};\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`,Rl=(0,ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 500;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#22C55E\":t===\"down\"?\"#DC2626\":re(e,\"N70\")};\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n @media (min-width: 768px) {\n font-size: 12px;\n\n svg {\n width: 16px;\n height: 16px;\n }\n }\n`,Ml=(0,ge.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 40px 20px;\n text-align: center;\n color: ${({theme:e})=>re(e,\"N70\")};\n\n svg {\n width: 48px;\n height: 48px;\n color: ${({theme:e})=>re(e,\"N50\")};\n }\n`,Ol=(0,ge.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>re(e,\"N70\")};\n`;var Nl=require(\"react\"),Vl=M(require(\"@mui/material/Menu\")),Il=M(require(\"@mui/material/MenuItem\")),Al=M(require(\"@mui/material/ListItemIcon\")),zl=M(require(\"@mui/material/ListItemText\")),Bl=M(require(\"@mui/icons-material/MoreVert\")),El=M(require(\"@mui/icons-material/Visibility\"));var Fl=M(require(\"@mui/material/IconButton\")),Ll=require(\"@nuskin/foundation-theme\"),$l=(0,Ll.styled)(Fl.default)(()=>({padding:\"4px\"}));var et=require(\"react/jsx-runtime\"),tt=({widgetId:e,onFullView:t})=>{let[a,n]=(0,Nl.useState)(null),i=!!a,p=`widget-menu-button-${e}`,s=`widget-menu-${e}`,c=g=>{n(g.currentTarget)},x=()=>{n(null)},y=()=>{x(),t&&t()};return(0,et.jsxs)(et.Fragment,{children:[(0,et.jsx)($l,{id:p,\"data-testid\":`widget-menu-button-${e}`,\"aria-label\":r(o.widget.menu.ariaLabel),\"aria-controls\":i?s:void 0,\"aria-haspopup\":\"true\",\"aria-expanded\":i?\"true\":void 0,onClick:c,size:\"small\",children:(0,et.jsx)(Bl.default,{fontSize:\"small\"})}),(0,et.jsx)(Vl.default,{id:s,\"data-testid\":`widget-menu-${e}`,anchorEl:a,open:i,onClose:x,MenuListProps:{\"aria-labelledby\":p},anchorOrigin:{vertical:\"bottom\",horizontal:\"right\"},transformOrigin:{vertical:\"top\",horizontal:\"right\"},children:(0,et.jsxs)(Il.default,{onClick:y,\"data-testid\":\"widget-menu-item-fullview\",children:[(0,et.jsx)(Al.default,{children:(0,et.jsx)(El.default,{fontSize:\"small\"})}),(0,et.jsx)(zl.default,{children:r(o.widget.menu.fullView)})]})})]})};var Y=require(\"react/jsx-runtime\"),dc=({products:e,productSort:t,isLoading:a=!1,maxProducts:n=5,onSortChange:i,onTitleClick:p})=>{let s=u=>{let C=u.target.value;i?.(C)},c=(u,C)=>{switch(C){case\"units\":return`${u.unitsSold.toLocaleString()} ${r(o.widget.topProducts.unitsSuffix)}`;case\"revenue\":return J(u.revenue,u.currencyCode);case\"volume\":return`${u.volume.toLocaleString()} ${r(o.widget.topProducts.dcSvSuffix)}`;default:return`${u.unitsSold.toLocaleString()} ${r(o.widget.topProducts.unitsSuffix)}`}},x=(u,C)=>{switch(C){case\"units\":return`${J(u.revenue,u.currencyCode)} ${r(o.widget.topProducts.revenueSuffix)}`;case\"revenue\":return`${u.unitsSold.toLocaleString()} ${r(o.widget.topProducts.unitsSuffix)}`;case\"volume\":return`${J(u.revenue,u.currencyCode)} ${r(o.widget.topProducts.revenueSuffix)}`;default:return`${J(u.revenue,u.currencyCode)} ${r(o.widget.topProducts.revenueSuffix)}`}},y=(u,C)=>{let m=u.trend;if(!m)return\"\";switch(C){case\"units\":return m.units??\"\";case\"revenue\":return m.revenue??\"\";case\"volume\":return m.volume??\"\";default:return m.units??\"\"}},g=(u,C)=>{let m=y(u,C);return m?m.startsWith(\"+\")?\"up\":m.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\"},w=e.slice(0,n),d=r(o.widget.topProducts.rank),b=r(o.widget.topProducts.trend);return a&&e.length===0?(0,Y.jsx)(dr,{\"data-testid\":\"widget-top-products\",children:(0,Y.jsx)(cl,{})}):e.length===0?(0,Y.jsxs)(dr,{\"data-testid\":\"widget-top-products\",children:[(0,Y.jsx)(za,{children:(0,Y.jsx)(Ba,{children:r(o.widget.topProducts.title)})}),(0,Y.jsxs)(Ml,{\"data-testid\":\"products-empty-state\",children:[(0,Y.jsx)(Wl.default,{}),(0,Y.jsx)(Ol,{children:r(o.widget.topProducts.empty)})]})]}):(0,Y.jsxs)(dr,{as:\"section\",\"data-testid\":\"widget-top-products\",\"aria-label\":r(o.widget.topProducts.ariaLabel),children:[(0,Y.jsxs)(za,{children:[(0,Y.jsx)(Ba,{as:\"button\",onClick:p,\"aria-label\":r(o.widget.topProducts.titleAriaLabel),\"data-testid\":\"widget-title-top-products\",children:r(o.widget.topProducts.title)}),(0,Y.jsxs)(hl,{children:[(0,Y.jsxs)(bl,{id:\"product-sort\",\"data-testid\":\"product-sort-dropdown\",value:t,onChange:s,disabled:a,\"aria-label\":r(o.widget.topProducts.sortAriaLabel),children:[(0,Y.jsx)(\"option\",{value:\"units\",children:r(o.filter.productSort.byUnits)}),(0,Y.jsx)(\"option\",{value:\"revenue\",children:r(o.filter.productSort.byRevenue)}),(0,Y.jsx)(\"option\",{value:\"volume\",children:r(o.filter.productSort.byVolume)})]}),(0,Y.jsx)(tt,{widgetId:\"top-products\",onFullView:p})]})]}),(0,Y.jsx)(xl,{as:\"ul\",\"data-testid\":\"products-list\",children:w.map((u,C)=>{let m=g(u,t),S=y(u,t);return(0,Y.jsxs)(yl,{as:\"li\",\"data-testid\":`product-item-${C}`,\"aria-label\":`${d} ${u.rank}: ${u.name}, ${c(u,t)}`,children:[(0,Y.jsx)(wl,{\"aria-label\":`${d} ${u.rank}`,children:u.rank}),u.imageUrl?(0,Y.jsx)(Cl,{src:u.imageUrl,alt:u.name,loading:\"lazy\",onError:D=>{D.currentTarget.hidden=!0}}):(0,Y.jsx)(vl,{\"aria-label\":r(o.widget.topProducts.noImageAriaLabel),children:u.name.substring(0,2).toUpperCase()}),(0,Y.jsxs)(kl,{children:[(0,Y.jsx)(Sl,{title:u.name,children:u.name}),(0,Y.jsx)(Tl,{children:x(u,t)})]}),(0,Y.jsxs)(Dl,{children:[(0,Y.jsx)(Pl,{children:c(u,t)}),S&&(0,Y.jsxs)(Rl,{as:\"output\",direction:m,\"aria-live\":\"polite\",\"aria-label\":`${b}: ${go(m)} ${S}`,children:[(0,Y.jsx)(\"span\",{\"aria-hidden\":\"true\",children:xe(m)}),(0,Y.jsx)(\"span\",{children:S})]})]})]},u.id)})})]})},Qt=Hl.default.memo(dc);Qt.displayName=\"TopSellingProductsList\";var mo=M(require(\"react\")),Ue=require(\"recharts\");var ke=require(\"@nuskin/foundation-theme\"),{getGenomeColor:de}=ke.ColorUtils,Ea=(0,ke.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>de(e,\"N20\")};\n border: 1px solid ${({theme:e})=>de(e,\"N30\")};\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`,_l=(0,ke.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({theme:e})=>de(e,\"N40\")};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Kl=(0,ke.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,Ul=(0,ke.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Gl=(0,ke.styled)(\"h2\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({theme:e})=>de(e,\"N100\")};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({theme:e})=>de(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,Yl=(0,ke.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>de(e,\"N20\")};\n border: 1px solid ${({theme:e})=>de(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>de(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>de(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>de(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>de(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,jl=(0,ke.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n margin-bottom: 8px;\n`,Jl=(0,ke.styled)(\"div\")`\n font-size: 28px;\n font-weight: 700;\n line-height: 1.2;\n color: ${({theme:e})=>de(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`,Zl=(0,ke.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-top: 4px;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#DC2626\":de(e,\"N70\")};\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n .change-value {\n font-weight: 600;\n line-height: 20px;\n }\n\n .change-percent {\n font-weight: 400;\n line-height: 20px;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({theme:e})=>de(e,\"N70\")};\n letter-spacing: 0.12px;\n }\n`,ql=(0,ke.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({theme:e})=>de(e,\"N100\")};\n margin-bottom: 16px;\n letter-spacing: 0.12px;\n`,Ql=(0,ke.styled)(\"div\")`\n width: 100%;\n height: 220px;\n margin-top: 16px;\n\n @media (min-width: 768px) {\n height: 280px;\n }\n\n @media (min-width: 1080px) {\n height: 340px;\n }\n\n .recharts-cartesian-grid-horizontal line,\n .recharts-cartesian-grid-vertical line {\n stroke: ${({theme:e})=>de(e,\"N40\")};\n stroke-width: 1px;\n }\n\n .recharts-text {\n fill: ${({theme:e})=>de(e,\"N70\")};\n font-size: 10px;\n }\n\n .recharts-tooltip-wrapper {\n z-index: 100;\n }\n`,Xl=(0,ke.styled)(\"div\")`\n background-color: ${({theme:e})=>de(e,\"N100\")};\n border: 1px solid ${({theme:e})=>de(e,\"N40\")};\n border-radius: 6px;\n padding: 8px 12px;\n box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.15);\n`,es=(0,ke.styled)(\"div\")`\n font-size: 11px;\n font-weight: 600;\n color: ${({theme:e})=>de(e,\"N10\")};\n margin-bottom: 4px;\n`,ts=(0,ke.styled)(\"div\")`\n font-size: 13px;\n font-weight: 700;\n color: ${({theme:e})=>de(e,\"A10\")};\n`,os=(0,ke.styled)(\"div\")`\n font-size: 10px;\n font-weight: 400;\n color: ${({theme:e})=>de(e,\"N30\")};\n margin-top: 2px;\n`;var Ha={last7days:7,last30days:30,last90days:90,thisMonth:31},Wa={last7days:\"Last 7 Days\",last30days:\"Last 30 Days\",last90days:\"Last 90 Days\",thisMonth:\"This Month\"};function rs(e){return Ha[e]??30}function pr(e){return Wa[e]??\"Last 30 Days\"}function me(e){return pr(e)}function _a(e){return`${[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"][e.getMonth()]} ${e.getDate()}`}var pc={Jan:\"1\",Feb:\"2\",Mar:\"3\",Apr:\"4\",May:\"5\",Jun:\"6\",Jul:\"7\",Aug:\"8\",Sep:\"9\",Oct:\"10\",Nov:\"11\",Dec:\"12\"};function ur(e){let t=e.split(\" \");return t.length!==2?e:`${pc[t[0]]||t[0]}/${t[1]}`}function cr(e){let t=new Date(e);return _a(t)}function as(e,t){return`${cr(e)} - ${cr(t)}`}function ns(e){return e.toISOString().split(\"T\")[0]}var U=require(\"react/jsx-runtime\"),cc={top:5,right:10,left:-10,bottom:5},is={fontSize:10},uc={r:3,fill:\"#3B82F6\"},gc={r:5},fc=e=>`${e}%`,mc=({active:e,payload:t})=>{if(!e||!t?.length)return null;let a=t[0].payload;return(0,U.jsxs)(Xl,{children:[(0,U.jsx)(es,{children:a.date}),(0,U.jsxs)(ts,{children:[(a.rate??0).toFixed(2),\"%\"]}),(0,U.jsxs)(os,{children:[a.orders??0,\" \",r(o.widget.conversionRate.tooltipOrders),\" /\",\" \",(a.siteVisits??0).toLocaleString(),\" \",r(o.widget.conversionRate.tooltipVisits)]})]})},hc=({conversionData:e,conversionFilter:t,isLoading:a=!1,title:n,summaryRate:i,summaryChangePct:p,onFilterChange:s,onTitleClick:c})=>{let x=mo.default.useCallback(C=>{let m=C.target.value;s?.(m)},[s]),y=r(o.widget.conversionRate.noData),g=r(o.widget.conversionRate.noChange),w=mo.default.useMemo(()=>typeof i==\"number\"&&Number.isFinite(i)?i:e.at(-1)?.rate??0,[i,e]),d=mo.default.useMemo(()=>{if(p!==void 0){if(p===null||Math.abs(p)<.1)return{direction:\"neutral\",value:g};let G=p>0?\"up\":\"down\",ee=`${p>0?\"+\":\"\"}${p.toFixed(2)}%`;return{direction:G,value:ee}}if(e.length<2)return{direction:\"neutral\",value:y};let C=e.at(-1)?.rate??0,m=e[0].rate;if(m===0)return{direction:\"neutral\",value:g};let S=C-m,D=S/m*100;if(Math.abs(D)<.1)return{direction:\"neutral\",value:g};let T=S>0?\"up\":\"down\",O=`${S>0?\"+\":\"\"}${S.toFixed(2)}%`;return{direction:T,value:O}},[p,e,g,y]),b=mo.default.useMemo(()=>e.map(C=>({...C,shortDate:ur(C.date)})),[e]);if(a&&e.length===0)return(0,U.jsx)(Ea,{\"data-testid\":\"widget-conversion-rate\",children:(0,U.jsx)(lr,{})});let u=r(o.widget.conversionRate.chartAriaLabel);return(0,U.jsxs)(Ea,{as:\"section\",\"data-testid\":\"widget-conversion-rate\",\"aria-label\":u,children:[(0,U.jsxs)(_l,{children:[(0,U.jsxs)(Kl,{children:[(0,U.jsx)(Gl,{as:\"button\",onClick:c,\"aria-label\":r(o.widget.conversionRate.titleAriaLabel),\"data-testid\":\"widget-title-conversion-rate\",children:n??r(o.widget.conversionRate.title)}),(0,U.jsxs)(Ul,{children:[(0,U.jsxs)(Yl,{id:\"conversion-filter\",\"data-testid\":\"conversion-filter-dropdown\",value:t,onChange:x,disabled:a,\"aria-label\":r(o.widget.conversionRate.filterAriaLabel),children:[(0,U.jsx)(\"option\",{value:\"all\",children:r(o.filter.conversionType.all)}),(0,U.jsx)(\"option\",{value:\"standard\",children:r(o.filter.conversionType.standard)}),(0,U.jsx)(\"option\",{value:\"subscription\",children:r(o.filter.conversionType.subscription)})]}),(0,U.jsx)(tt,{widgetId:\"conversion-rate\",onFullView:c})]})]}),(0,U.jsx)(ql,{\"data-testid\":\"conversion-formula\",children:r(o.widget.conversionRate.formula)})]}),(0,U.jsxs)(jl,{children:[(0,U.jsxs)(Jl,{\"aria-label\":`${r(o.widget.conversionRate.title)}: ${w.toFixed(2)}%`,\"data-testid\":\"conversion-metric-value\",children:[w.toFixed(2),\"%\"]}),d.value!==y&&(0,U.jsxs)(Zl,{as:\"output\",direction:d.direction,\"aria-live\":\"polite\",\"aria-label\":`${go(d.direction)} ${d.value}`,\"data-testid\":\"conversion-metric-trend\",children:[(0,U.jsxs)(\"div\",{className:\"trend-line\",children:[(0,U.jsx)(\"span\",{\"aria-hidden\":\"true\",children:xe(d.direction)}),(0,U.jsx)(\"span\",{className:\"change-value\",children:d.value.replace(\"%\",\"\")}),(0,U.jsx)(\"span\",{className:\"change-percent\",children:\"%\"})]}),(0,U.jsx)(\"div\",{className:\"comparison-text\",children:r(o.widget.conversionRate.comparison)})]})]}),(0,U.jsx)(Ql,{\"data-testid\":\"conversion-chart\",children:(0,U.jsx)(Ue.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:200,children:(0,U.jsxs)(Ue.LineChart,{data:b,margin:cc,children:[(0,U.jsx)(Ue.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,U.jsx)(Ue.XAxis,{dataKey:\"shortDate\",tick:is,tickLine:!1,interval:\"preserveStartEnd\"}),(0,U.jsx)(Ue.YAxis,{tick:is,tickLine:!1,tickFormatter:fc,domain:[\"dataMin - 0.5\",\"dataMax + 0.5\"]}),(0,U.jsx)(Ue.Tooltip,{content:mc}),(0,U.jsx)(Ue.Line,{type:\"monotone\",dataKey:\"rate\",stroke:\"#3B82F6\",strokeWidth:2,dot:uc,activeDot:gc})]})})})]})},Xt=mo.default.memo(hc);Xt.displayName=\"ConversionRateChart\";var bo=M(require(\"react\")),we=require(\"recharts\");var Ve=require(\"@nuskin/foundation-theme\"),{getGenomeColor:ye}=Ve.ColorUtils,Ka=(0,Ve.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>ye(e,\"N20\")};\n border: 1px solid ${({theme:e})=>ye(e,\"N30\")};\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`,ls=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({theme:e})=>ye(e,\"N40\")};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,ss=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,ds=(0,Ve.styled)(\"h2\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({theme:e})=>ye(e,\"N100\")};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({theme:e})=>ye(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,ps=(0,Ve.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>ye(e,\"N20\")};\n border: 1px solid ${({theme:e})=>ye(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>ye(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>ye(e,\"N30\")};\n }\n &:focus {\n border-color: ${({theme:e})=>ye(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>ye(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,cs=(0,Ve.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n margin-bottom: 16px;\n`,us=(0,Ve.styled)(\"div\")`\n font-size: 28px;\n font-weight: 700;\n line-height: 1.2;\n color: ${({theme:e})=>ye(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`,gs=(0,Ve.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-top: 4px;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#DC2626\":ye(e,\"N70\")};\n\n svg {\n width: 16px;\n height: 16px;\n }\n .change-value {\n font-weight: 600;\n line-height: 20px;\n }\n .change-percent {\n font-weight: 400;\n line-height: 20px;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({theme:e})=>ye(e,\"N70\")};\n letter-spacing: 0.12px;\n }\n`,fs=(0,Ve.styled)(\"div\")`\n width: 100%;\n height: 220px;\n margin-top: 16px;\n\n @media (min-width: 768px) {\n height: 280px;\n }\n @media (min-width: 1080px) {\n height: 340px;\n }\n\n .recharts-cartesian-grid-horizontal line,\n .recharts-cartesian-grid-vertical line {\n stroke: ${({theme:e})=>ye(e,\"N40\")};\n stroke-width: 1px;\n }\n .recharts-text {\n fill: ${({theme:e})=>ye(e,\"N70\")};\n font-size: 10px;\n }\n`,ms=(0,Ve.styled)(\"div\")`\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 16px;\n padding-top: 12px;\n border-top: 1px solid ${({theme:e})=>ye(e,\"N40\")};\n`,Bo=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>ye(e,\"N30\")};\n }\n`,Eo=(0,Ve.styled)(\"div\")`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({color:e})=>e};\n flex-shrink: 0;\n`,Ho=(0,Ve.styled)(\"span\")`\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>ye(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;var R=require(\"react/jsx-runtime\"),pt={total:\"#3B82F6\",members:\"#7B92A8\",retail:\"#A3B5C7\",brandAffiliates:\"#CBD6E0\"},bc={top:5,right:10,left:-10,bottom:5},hs={fontSize:10},ho={r:2},xc=({signupData:e,signupView:t,isLoading:a=!1,title:n,onViewChange:i,onTitleClick:p})=>{let s=bo.default.useCallback(m=>{let S=m.target.value;i?.(S)},[i]),c=r(o.widget.signups.noData),x=r(o.widget.signups.noChange),y=bo.default.useMemo(()=>e.length===0?0:e[e.length-1].total,[e]),g=bo.default.useMemo(()=>{if(e.length<2)return{direction:\"neutral\",value:c};let m=e[e.length-1].total,S=e[0].total,D=m-S,T=D/S*100;if(Math.abs(T)<.1)return{direction:\"neutral\",value:x};let O=D>0?\"up\":\"down\",G=`${D>0?\"+\":\"\"}${D} (${T.toFixed(1)}%)`;return{direction:O,value:G}},[x,c,e]),w=bo.default.useMemo(()=>e.map(m=>({...m,shortDate:ur(m.date)})),[e]),d=r(o.widget.signups.total),b=r(o.widget.signups.members),u=r(o.widget.signups.retail),C=r(o.widget.signups.brandAffiliates);return a&&e.length===0?(0,R.jsx)(Ka,{\"data-testid\":\"widget-signups\",children:(0,R.jsx)(lr,{})}):(0,R.jsxs)(Ka,{as:\"section\",\"data-testid\":\"widget-signups\",\"aria-label\":r(o.widget.signups.chartAriaLabel),children:[(0,R.jsxs)(ls,{children:[(0,R.jsx)(ds,{as:\"button\",onClick:p,\"aria-label\":r(o.widget.signups.titleAriaLabel),\"data-testid\":\"widget-title-signups\",children:n??r(o.widget.signups.title)}),(0,R.jsxs)(ss,{children:[(0,R.jsxs)(ps,{id:\"signup-view\",\"data-testid\":\"signup-view-dropdown\",value:t,onChange:s,disabled:a,\"aria-label\":r(o.widget.signups.filterAriaLabel),children:[(0,R.jsx)(\"option\",{value:\"all\",children:r(o.filter.signupView.showAll)}),(0,R.jsx)(\"option\",{value:\"members\",children:r(o.filter.signupView.showMembers)}),(0,R.jsx)(\"option\",{value:\"retail\",children:r(o.filter.signupView.showRetail)}),(0,R.jsx)(\"option\",{value:\"brandAffiliates\",children:r(o.filter.signupView.showBrandAffiliates)})]}),(0,R.jsx)(tt,{widgetId:\"signups\",onFullView:p})]})]}),(0,R.jsxs)(cs,{\"data-testid\":\"signups-metric-display\",children:[(0,R.jsx)(us,{\"data-testid\":\"signups-metric-value\",\"aria-label\":`${d}: ${y.toLocaleString()}`,children:y.toLocaleString()}),g.value!==c&&(0,R.jsxs)(gs,{as:\"output\",\"data-testid\":\"signups-metric-trend\",direction:g.direction,\"aria-live\":\"polite\",\"aria-label\":`${go(g.direction)} ${g.value}`,children:[(0,R.jsxs)(\"div\",{className:\"trend-line\",children:[(0,R.jsx)(\"span\",{\"aria-hidden\":\"true\",children:xe(g.direction)}),(0,R.jsx)(\"span\",{className:\"change-value\",children:g.value.split(\" \")[0]}),(0,R.jsx)(\"span\",{className:\"change-percent\",children:g.value.split(\" \")[1]})]}),(0,R.jsx)(\"div\",{className:\"comparison-text\",children:r(o.widget.conversionRate.comparison)})]})]}),(0,R.jsx)(fs,{\"data-testid\":\"signups-chart\",children:(0,R.jsx)(we.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:200,children:(0,R.jsxs)(we.LineChart,{data:w,margin:bc,children:[(0,R.jsx)(we.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,R.jsx)(we.XAxis,{dataKey:\"shortDate\",tick:hs,tickLine:!1,interval:\"preserveStartEnd\"}),(0,R.jsx)(we.YAxis,{tick:hs,tickLine:!1}),(0,R.jsx)(we.Tooltip,{}),(t===\"all\"||t===\"members\")&&(0,R.jsx)(we.Line,{type:\"monotone\",dataKey:t===\"all\"?\"total\":\"members\",stroke:t===\"all\"?pt.total:pt.members,strokeWidth:2,dot:ho,name:t===\"all\"?d:b}),t===\"all\"&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(we.Line,{type:\"monotone\",dataKey:\"members\",stroke:pt.members,strokeWidth:2,dot:ho,name:b}),(0,R.jsx)(we.Line,{type:\"monotone\",dataKey:\"retail\",stroke:pt.retail,strokeWidth:2,dot:ho,name:u}),(0,R.jsx)(we.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:pt.brandAffiliates,strokeWidth:2,dot:ho,name:C})]}),t===\"retail\"&&(0,R.jsx)(we.Line,{type:\"monotone\",dataKey:\"retail\",stroke:pt.retail,strokeWidth:2,dot:ho,name:u}),t===\"brandAffiliates\"&&(0,R.jsx)(we.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:pt.brandAffiliates,strokeWidth:2,dot:ho,name:C})]})})}),t===\"all\"&&(0,R.jsxs)(ms,{\"data-testid\":\"signups-legend\",children:[(0,R.jsxs)(Bo,{\"data-testid\":\"legend-total\",children:[(0,R.jsx)(Eo,{color:pt.total}),(0,R.jsx)(Ho,{children:d})]}),(0,R.jsxs)(Bo,{\"data-testid\":\"legend-members\",children:[(0,R.jsx)(Eo,{color:pt.members}),(0,R.jsx)(Ho,{children:b})]}),(0,R.jsxs)(Bo,{\"data-testid\":\"legend-retail\",children:[(0,R.jsx)(Eo,{color:pt.retail}),(0,R.jsx)(Ho,{children:u})]}),(0,R.jsxs)(Bo,{\"data-testid\":\"legend-brandAffiliates\",children:[(0,R.jsx)(Eo,{color:pt.brandAffiliates}),(0,R.jsx)(Ho,{children:C})]})]})]})},Wo=bo.default.memo(xc);Wo.displayName=\"SignupsChart\";var Fr=M(require(\"react\")),wt=require(\"recharts\");var ne=require(\"@nuskin/foundation-theme\"),{getGenomeColor:he}=ne.ColorUtils,Wt=(0,ne.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>he(e,\"N20\")};\n border: 1px solid ${({theme:e})=>he(e,\"N30\")};\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`,xo=(0,ne.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({theme:e})=>he(e,\"N40\")};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,gr=(0,ne.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,yo=(0,ne.styled)(\"h2\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({theme:e})=>he(e,\"N100\")};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({theme:e})=>he(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,fr=(0,ne.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>he(e,\"N20\")};\n border: 1px solid ${({theme:e})=>he(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>he(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>he(e,\"N30\")};\n }\n &:focus {\n border-color: ${({theme:e})=>he(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>he(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,mr=(0,ne.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n @media (min-width: 768px) {\n flex-direction: row;\n gap: 24px;\n }\n`,hr=(0,ne.styled)(\"div\")`\n position: relative;\n width: 100%;\n height: 200px;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 200px;\n height: 200px;\n }\n`,br=(0,ne.styled)(\"div\")`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n pointer-events: none;\n z-index: 1;\n width: 96px;\n`,xr=(0,ne.styled)(\"div\")`\n font-size: 10px;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>he(e,\"N70\")};\n`,yr=(0,ne.styled)(\"div\")`\n margin-top: 2px;\n font-size: 16px;\n line-height: 1.2;\n font-weight: 700;\n color: ${({theme:e})=>he(e,\"N100\")};\n`,wr=(0,ne.styled)(\"div\")`\n margin-top: 2px;\n font-size: 11px;\n line-height: 1.2;\n font-weight: 600;\n color: ${({direction:e,theme:t})=>e===\"up\"?\"#2e7d32\":e===\"down\"?\"#d32f2f\":he(t,\"N70\")};\n`,Cr=(0,ne.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n`,vr=(0,ne.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>he(e,\"N30\")};\n }\n`,kr=(0,ne.styled)(\"div\")`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({color:e})=>e};\n flex-shrink: 0;\n`,Sr=(0,ne.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n`,Tr=(0,ne.styled)(\"div\")`\n font-size: 13px;\n font-weight: 500;\n color: ${({theme:e})=>he(e,\"N100\")};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`,Dr=(0,ne.styled)(\"div\")`\n font-size: 11px;\n font-weight: 400;\n color: ${({theme:e})=>he(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`,Pr=(0,ne.styled)(\"div\")`\n font-size: 14px;\n font-weight: 600;\n color: ${({theme:e})=>he(e,\"N100\")};\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`,Rr=(0,ne.styled)(\"span\")`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({direction:e})=>e===\"up\"?\"#2e7d32\":e===\"down\"?\"#d32f2f\":\"#757575\"};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`,Mr=(0,ne.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 40px 20px;\n text-align: center;\n color: ${({theme:e})=>he(e,\"N70\")};\n`,Or=(0,ne.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>he(e,\"N70\")};\n`;var W=require(\"react/jsx-runtime\"),yc=({categories:e,categorySort:t,isLoading:a=!1,title:n,onSortChange:i,onTitleClick:p})=>{let s=Fr.default.useCallback(d=>{let b=d.target.value;i?.(b)},[i]),{sortedCategories:c,totalRevenue:x,trendDirection:y,formattedTrend:g}=Fr.default.useMemo(()=>{let d=[...e].sort((m,S)=>t===\"revenue\"?S.revenue-m.revenue:(bt(S.trend?.revenue)??-1/0)-(bt(m.trend?.revenue)??-1/0)),b=d.reduce((m,S)=>m+S.revenue,0),{direction:u,formatted:C}=Et(d,m=>m.revenue,m=>m.trend?.revenue);return{sortedCategories:d,totalRevenue:b,trendDirection:u,formattedTrend:C}},[e,t]),w=c[0]?.currencyCode;return a&&e.length===0?(0,W.jsx)(Wt,{\"data-testid\":\"widget-top-categories\",children:(0,W.jsx)(sr,{})}):e.length===0?(0,W.jsxs)(Wt,{\"data-testid\":\"widget-top-categories\",children:[(0,W.jsx)(xo,{children:(0,W.jsx)(yo,{children:n??r(o.widget.topCategories.title)})}),(0,W.jsx)(Mr,{\"data-testid\":\"categories-empty-state\",children:(0,W.jsx)(Or,{children:r(o.widget.topCategories.empty)})})]}):(0,W.jsxs)(Wt,{as:\"section\",\"data-testid\":\"widget-top-categories\",\"aria-label\":r(o.widget.topCategories.chartAriaLabel),children:[(0,W.jsxs)(xo,{children:[(0,W.jsx)(yo,{as:\"button\",onClick:p,\"aria-label\":r(o.widget.topCategories.titleAriaLabel),\"data-testid\":\"widget-title-top-categories\",children:n??r(o.widget.topCategories.title)}),(0,W.jsxs)(gr,{children:[(0,W.jsxs)(fr,{id:\"category-sort\",\"data-testid\":\"category-sort-dropdown\",value:t,onChange:s,disabled:a,\"aria-label\":r(o.widget.topCategories.sortAriaLabel),children:[(0,W.jsx)(\"option\",{value:\"revenue\",children:r(o.filter.categorySort.byRevenue)}),(0,W.jsx)(\"option\",{value:\"trend\",children:r(o.filter.categorySort.byTrend)})]}),(0,W.jsx)(tt,{widgetId:\"top-categories\",onFullView:p})]})]}),(0,W.jsxs)(mr,{children:[(0,W.jsxs)(hr,{\"data-testid\":\"categories-chart\",children:[(0,W.jsx)(wt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,W.jsxs)(wt.PieChart,{children:[(0,W.jsx)(wt.Pie,{data:c,cx:\"50%\",cy:\"50%\",innerRadius:\"55%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:c.map(d=>(0,W.jsx)(wt.Cell,{fill:d.color},`cell-${d.id}`))}),(0,W.jsx)(wt.Tooltip,{formatter:d=>J(d,w)})]})}),(0,W.jsxs)(br,{\"data-testid\":\"categories-donut-center\",children:[(0,W.jsx)(xr,{children:r(o.stats.revenue)}),(0,W.jsx)(yr,{children:J(x,w)}),(0,W.jsx)(wr,{direction:y,children:g})]})]}),(0,W.jsx)(Cr,{\"data-testid\":\"categories-legend-container\",children:c.map((d,b)=>{let u=qt(d.trend?.revenue);return(0,W.jsxs)(vr,{\"data-testid\":`category-legend-${b}`,children:[(0,W.jsx)(kr,{color:d.color}),(0,W.jsxs)(Sr,{children:[(0,W.jsx)(Tr,{children:d.name}),(0,W.jsx)(Dr,{children:J(d.revenue,d.currencyCode)})]}),(0,W.jsxs)(Pr,{children:[d.percentage,\"%\"]}),d.trend?.revenue?(0,W.jsx)(Rr,{direction:u,\"data-testid\":`category-legend-trend-${b}`,\"aria-label\":d.trend.revenue,children:xe(u)}):null]},d.id)})})]})]})},_o=Fr.default.memo(yc);_o.displayName=\"TopCategoriesPieChart\";var Se=require(\"react/jsx-runtime\"),wc=[],Cc=[],vc=[],kc=[],Lr=({stats:e,topProducts:t,conversionData:a,signupData:n,categories:i,isLoading:p=!1,error:s,shopTitle:c,className:x,dateRange:y=\"last30days\",market:g=\"all\",productSort:w=\"units\",signupView:d=\"all\",conversionFilter:b=\"all\",categorySort:u=\"revenue\",markets:C,onDateRangeChange:m,onMarketChange:S,onProductSortChange:D,onSignupViewChange:T,onConversionFilterChange:O,onCategorySortChange:G,onProductsTitleClick:ee,onConversionTitleClick:V,onSignupsTitleClick:z,onCategoriesToTitleClick:Z})=>{let F=t??wc,l=a??Cc,h=n??vc,v=i??kc;if(s)return(0,Se.jsx)(va,{as:\"main\",className:x,\"aria-label\":r(o.ariaLabel.dashboard),children:(0,Se.jsxs)(yi,{\"data-testid\":\"dashboard-error\",role:\"alert\",\"aria-live\":\"assertive\",children:[(0,Se.jsxs)(\"strong\",{children:[r(o.error),\":\"]}),\" \",s]})});let f=E=>E?E.startsWith(\"+\")?\"up\":E.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\";return(0,Se.jsxs)(va,{as:\"main\",className:x,\"data-testid\":\"shopping-dashboard\",\"aria-label\":r(o.ariaLabel.dashboard),\"aria-busy\":p,children:[(0,Se.jsx)(uo,{shopTitle:c,dateRange:y,market:g,isLoading:p,stats:e,markets:C,onDateRangeChange:m,onMarketChange:S}),(0,Se.jsxs)(bi,{as:\"section\",\"data-testid\":\"stats-row\",\"aria-label\":r(o.ariaLabel.statsRow),children:[(0,Se.jsx)(xt,{title:r(o.stats.revenue),value:e?.metrics?.revenue??\"$0\",trendDirection:f(e?.trend?.revenue),trendValue:e?.trend?.revenue,testId:\"stats-card-revenue\",isLoading:p}),(0,Se.jsx)(xt,{title:r(o.stats.volume),value:e?.metrics?.volume??\"0\",subtitle:r(o.stats.subtitle.dcSv),trendDirection:f(e?.trend?.volume),trendValue:e?.trend?.volume,testId:\"stats-card-volume\",isLoading:p}),(0,Se.jsx)(xt,{title:r(o.stats.visits),value:e?.metrics?.siteVisits??\"0\",subtitle:`${e?.metrics?.conversionRate??\"0%\"} ${r(o.stats.subtitle.conversionRate)}`,trendDirection:f(e?.trend?.siteVisits),trendValue:e?.trend?.siteVisits,testId:\"stats-card-visits\",isLoading:p})]}),(0,Se.jsxs)(xi,{\"data-testid\":\"widget-container\",children:[(0,Se.jsxs)(ka,{\"data-testid\":\"widget-row-1\",children:[(0,Se.jsx)(Qt,{products:F,productSort:w,isLoading:p,maxProducts:5,onSortChange:D,onTitleClick:ee}),(0,Se.jsx)(Wo,{signupData:h,signupView:d,isLoading:p,onViewChange:T,onTitleClick:z})]}),(0,Se.jsxs)(ka,{\"data-testid\":\"widget-row-2\",children:[(0,Se.jsx)(Xt,{conversionData:l,conversionFilter:b,isLoading:p,onFilterChange:O,onTitleClick:V}),(0,Se.jsx)(_o,{categories:v,categorySort:u,isLoading:p,onSortChange:G,onTitleClick:Z})]})]})]})};var ae=M(require(\"react\"));var nt=M(require(\"react\"));var Fs=M(require(\"@mui/icons-material/ArrowBack\")),Ls=M(require(\"@mui/icons-material/CalendarToday\")),$s=M(require(\"@mui/icons-material/Language\"));var Oe=require(\"@nuskin/foundation-theme\"),{getGenomeColor:je}=Oe.ColorUtils,bs=(0,Oe.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`,xs=(0,Oe.styled)(\"div\")`\n display: flex;\n align-items: center;\n`,ys=(0,Oe.styled)(\"button\")`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0;\n border: none;\n background-color: transparent;\n color: ${({theme:e})=>je(e,\"N70\")};\n cursor: pointer;\n transition: color 0.2s ease;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n\n &:hover {\n color: ${({theme:e})=>je(e,\"N100\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>je(e,\"A70\")};\n outline-offset: 2px;\n border-radius: 4px;\n }\n\n svg {\n font-size: 16px;\n }\n\n span {\n line-height: 1;\n }\n`,ws=(0,Oe.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 16px;\n border-bottom: 1px solid ${({theme:e})=>je(e,\"N30\")};\n gap: 24px;\n\n @media (max-width: 767px) {\n align-items: flex-end;\n gap: 16px;\n }\n`,Cs=(0,Oe.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n\n @media (max-width: 767px) {\n display: none;\n }\n`,vs=(0,Oe.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({theme:e})=>je(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`,ks=(0,Oe.styled)(\"p\")`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({theme:e})=>je(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n`,Ss=(0,Oe.styled)(\"p\")`\n display: none;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({theme:e})=>je(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n flex-shrink: 0;\n }\n`,Ts=(0,Oe.styled)(\"div\")`\n display: flex;\n gap: 24px;\n align-items: center;\n flex-shrink: 0;\n\n @media (max-width: 767px) {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n`,Ds=(0,Oe.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Ps=(0,Oe.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({theme:e})=>je(e,\"N70\")};\n\n svg {\n font-size: 16px;\n }\n`,Rs=(0,Oe.styled)(\"select\")`\n min-width: 120px;\n height: 32px;\n padding: 6px 8px;\n padding-right: 24px;\n background-color: transparent;\n border: none;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: ${({theme:e})=>je(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: background-color 0.2s ease;\n appearance: none;\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path fill=\"%23667085\" d=\"M6 8L2 4h8L6 8z\"/></svg>');\n background-repeat: no-repeat;\n background-position: right 4px center;\n\n &:hover {\n background-color: ${({theme:e})=>je(e,\"N20\")};\n border-radius: 4px;\n }\n\n &:focus {\n background-color: ${({theme:e})=>je(e,\"N20\")};\n border-radius: 4px;\n outline: 2px solid ${({theme:e})=>je(e,\"A70\")};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n @media (max-width: 767px) {\n min-width: auto;\n width: auto;\n flex: none;\n padding-right: 24px;\n background-position: right 8px center;\n }\n`,Ms=(0,Oe.styled)(\"div\")`\n display: none;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`,Os=(0,Oe.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({theme:e})=>je(e,\"N100\")};\n margin: 0;\n`;var fe=require(\"react/jsx-runtime\");function Ct(e,t){return{key:\"dateRange\",label:r(t.filter.dateRange.label),value:e,icon:\"calendar\",options:[{value:\"last7days\",label:r(t.filter.dateRange.last7days)},{value:\"last30days\",label:r(t.filter.dateRange.last30days)},{value:\"last90days\",label:r(t.filter.dateRange.last90days)},{value:\"thisMonth\",label:r(t.filter.dateRange.thisMonth)}]}}function vt(e,t,a){return{key:\"market\",label:r(a.filter.market.label),value:e,icon:\"globe\",options:t.map(n=>({value:n.value,label:n.label}))}}var be=({title:e,dateRange:t,onBack:a,filters:n,onFilterChange:i})=>{let p=s=>s?(0,fe.jsxs)(Ps,{children:[s===\"calendar\"&&(0,fe.jsx)(Ls.default,{}),s===\"globe\"&&(0,fe.jsx)($s.default,{})]}):null;return(0,fe.jsxs)(bs,{\"data-testid\":\"page-header\",children:[(0,fe.jsx)(xs,{children:(0,fe.jsxs)(ys,{onClick:a,\"aria-label\":r(o.navigation.backAriaLabel),\"data-testid\":\"page-back-button\",type:\"button\",children:[(0,fe.jsx)(Fs.default,{}),(0,fe.jsx)(\"span\",{children:r(o.navigation.backToDashboard)})]})}),(0,fe.jsx)(Ms,{children:(0,fe.jsx)(Os,{children:e})}),(0,fe.jsxs)(ws,{children:[(0,fe.jsxs)(Cs,{children:[(0,fe.jsx)(vs,{\"data-testid\":\"page-header-title\",children:e}),(0,fe.jsx)(ks,{\"data-testid\":\"page-header-date-range\",children:t})]}),n&&n.length>0&&i&&(0,fe.jsx)(Ts,{\"data-testid\":\"page-header-filters\",children:n.map(s=>(0,fe.jsxs)(Ds,{children:[p(s.icon),(0,fe.jsx)(Rs,{id:`filter-${s.key}`,value:s.value,onChange:c=>i(s.key,c.target.value),disabled:s.disabled,\"aria-label\":`${s.label} ${r(o.ariaLabel.filterSuffix)}`,\"data-testid\":`filter-dropdown-${s.key}`,children:s.options.map(c=>(0,fe.jsx)(\"option\",{value:c.value,children:s.label&&s.key===\"customerType\"?`${s.label} ${c.label}`:c.label},c.value))})]},s.key))}),(0,fe.jsx)(Ss,{children:t})]})]})};var Hs=M(require(\"@mui/icons-material/ArrowUpward\")),Ws=M(require(\"@mui/icons-material/ArrowDownward\"));var ot=require(\"@nuskin/foundation-theme\"),{getGenomeColor:zt}=ot.ColorUtils,Ns=(0,ot.styled)(\"div\")`\n width: 100%;\n overflow-x: auto;\n border-radius: 8px;\n border: 1px solid ${({theme:e})=>zt(e,\"N30\")};\n`,Vs=(0,ot.styled)(\"table\")`\n width: 100%;\n border-collapse: collapse;\n`,Is=(0,ot.styled)(\"thead\")`\n background-color: ${({theme:e})=>zt(e,\"N20\")};\n border-bottom: 2px solid ${({theme:e})=>zt(e,\"N40\")};\n`,As=(0,ot.styled)(\"th\")`\n padding: 12px 16px;\n font-size: 14px;\n font-weight: 600;\n color: ${({theme:e})=>zt(e,\"N100\")};\n text-align: left;\n cursor: ${({sortable:e})=>e?\"pointer\":\"default\"};\n user-select: none;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e,sortable:t})=>t?zt(e,\"N30\"):\"transparent\"};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>zt(e,\"A70\")};\n outline-offset: -2px;\n }\n`,zs=(0,ot.styled)(\"tbody\")``,Ua=(0,ot.styled)(\"tr\")`\n border-bottom: 1px solid ${({theme:e})=>zt(e,\"N30\")};\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>zt(e,\"N20\")};\n }\n\n &:last-child {\n border-bottom: none;\n }\n`,Ga=(0,ot.styled)(\"td\")`\n padding: 12px 16px;\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>zt(e,\"N100\")};\n text-align: left;\n`,Bs=(0,ot.styled)(Ga)`\n text-align: center;\n`,Es=(0,ot.styled)(\"span\")`\n display: inline-flex;\n margin-left: 6px;\n opacity: ${({isActive:e})=>e?1:.4};\n transition: opacity 0.2s ease;\n\n svg {\n font-size: 16px;\n }\n`;var Ee=require(\"react/jsx-runtime\"),rt=({columns:e,data:t,sortable:a=!1,onSort:n,sortColumn:i,sortDirection:p=\"asc\",getRowKey:s})=>{let c=g=>{if(!a||!n)return;n(g,i===g&&p===\"asc\"?\"desc\":\"asc\")},x=(g,w)=>{(g.key===\"Enter\"||g.key===\" \")&&(g.preventDefault(),c(w))},y=g=>{if(i===g)return p===\"asc\"?\"ascending\":\"descending\"};return(0,Ee.jsx)(Ns,{\"data-testid\":\"data-table\",children:(0,Ee.jsxs)(Vs,{children:[(0,Ee.jsx)(Is,{children:(0,Ee.jsx)(\"tr\",{children:e.map(g=>(0,Ee.jsxs)(As,{scope:\"col\",sortable:a&&g.sortable,onClick:()=>g.sortable&&c(g.key),onKeyDown:w=>g.sortable&&x(w,g.key),tabIndex:a&&g.sortable?0:-1,\"aria-sort\":y(g.key),\"aria-label\":`${g.label}${g.sortable?r(o.dataTable.sortableColumn):\"\"}`,\"data-testid\":`table-header-${g.key}`,children:[g.label,a&&g.sortable&&(0,Ee.jsx)(Es,{isActive:i===g.key,children:i===g.key&&p===\"desc\"?(0,Ee.jsx)(Ws.default,{}):(0,Ee.jsx)(Hs.default,{})})]},g.key))})}),(0,Ee.jsx)(zs,{children:t.length===0?(0,Ee.jsx)(Ua,{\"data-testid\":\"table-empty-row\",children:(0,Ee.jsx)(Bs,{colSpan:e.length,children:r(o.dataTable.noDataAvailable)})}):t.map((g,w)=>(0,Ee.jsx)(Ua,{\"data-testid\":`table-row-${w}`,children:e.map(d=>(0,Ee.jsx)(Ga,{\"data-testid\":`table-cell-${d.key}`,children:d.render?d.render(g[d.key],g):g[d.key]},d.key))},s?s(g,w):w))})]})})};var Ks=M(require(\"@mui/icons-material/ChevronLeft\")),Us=M(require(\"@mui/icons-material/ChevronRight\"));var eo=require(\"@nuskin/foundation-theme\"),{getGenomeColor:ct}=eo.ColorUtils,_s=(0,eo.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n margin-top: 24px;\n`,$r=(0,eo.styled)(\"button\")`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({theme:e,isActive:t})=>t?ct(e,\"A80\"):ct(e,\"N20\")};\n color: ${({theme:e,isActive:t})=>t?\"#ffffff\":ct(e,\"N100\")};\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: ${({theme:e,isActive:t})=>t?ct(e,\"A70\"):ct(e,\"N30\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>ct(e,\"A70\")};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n`,Nr=(0,eo.styled)(\"span\")`\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>ct(e,\"N70\")};\n margin: 0 8px;\n`,Ya=(0,eo.styled)(\"button\")`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({theme:e})=>ct(e,\"N20\")};\n color: ${({theme:e})=>ct(e,\"N100\")};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: ${({theme:e})=>ct(e,\"N30\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>ct(e,\"A70\")};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n svg {\n font-size: 18px;\n }\n`;var Te=require(\"react/jsx-runtime\"),at=({currentPage:e,totalPages:t,onPageChange:a,itemsPerPage:n,totalItems:i})=>{let p=()=>{e>1&&a(e-1)},s=()=>{e<t&&a(e+1)},c=(b,u)=>{(b.key===\"Enter\"||b.key===\" \")&&(b.preventDefault(),u())},y=(()=>{if(t<=7)return Array.from({length:t},(u,C)=>C+1);let b=[];return e<=4?b.push(1,2,3,4,5):e>=t-3?b.push(t-4,t-3,t-2,t-1,t):b.push(e-1,e,e+1),b})(),g=n?(e-1)*n+1:null,w=n?Math.min(e*n,i??1/0):null,d=r(o.pagination.goToPage);return(0,Te.jsxs)(_s,{\"data-testid\":\"pagination\",children:[(0,Te.jsx)(Ya,{onClick:p,onKeyDown:b=>c(b,p),disabled:e===1,\"aria-label\":r(o.pagination.previousPage),\"data-testid\":\"pagination-previous\",type:\"button\",children:(0,Te.jsx)(Ks.default,{})}),t>7&&e>4&&(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)($r,{onClick:()=>a(1),isActive:!1,\"aria-label\":`${d} 1`,\"data-testid\":\"pagination-page-1\",type:\"button\",children:\"1\"}),(0,Te.jsx)(Nr,{children:\"...\"})]}),y.map(b=>(0,Te.jsx)($r,{onClick:()=>a(b),isActive:e===b,\"aria-label\":`${d} ${b}`,\"aria-current\":e===b?\"page\":void 0,\"data-testid\":`pagination-page-${b}`,type:\"button\",children:b},b)),t>7&&e<t-3&&(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)(Nr,{children:\"...\"}),(0,Te.jsx)($r,{onClick:()=>a(t),isActive:!1,\"aria-label\":`${d} ${t}`,\"data-testid\":`pagination-page-${t}`,type:\"button\",children:t})]}),(0,Te.jsx)(Ya,{onClick:s,onKeyDown:b=>c(b,s),disabled:e===t,\"aria-label\":r(o.pagination.nextPage),\"data-testid\":\"pagination-next\",type:\"button\",children:(0,Te.jsx)(Us.default,{})}),n&&i&&(0,Te.jsxs)(Nr,{as:\"output\",\"aria-live\":\"polite\",\"data-testid\":\"pagination-page-info\",children:[g,\"-\",w,\" \",r(o.pagination.of),\" \",i]})]})};var Fe=require(\"@mui/material/styles\"),Le=require(\"@mui/material\"),Gs=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Ys}=Gs.ColorUtils,De=(0,Fe.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 24px;\n width: 100%;\n box-sizing: border-box;\n\n @media (max-width: 767px) {\n gap: 16px;\n }\n`,Vr=(0,Fe.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>Ys(e,\"N20\")};\n border-radius: 8px;\n box-shadow: ${({theme:e})=>e.shadows[1]};\n\n @media (max-width: 767px) {\n padding: 16px;\n gap: 16px;\n }\n`,Ir=(0,Fe.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px 0;\n\n @media (max-width: 767px) {\n padding: 8px 0;\n }\n`,Ar=(0,Fe.styled)(Le.Typography)`\n font-size: 3rem;\n font-weight: 600;\n color: ${({theme:e})=>e.palette.text.primary};\n line-height: 1.2;\n\n @media (max-width: 767px) {\n font-size: 2.5rem;\n }\n`,zr=(0,Fe.styled)(Le.Box)`\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 8px;\n font-size: 1.25rem;\n font-weight: 500;\n color: ${({theme:e,direction:t})=>t===\"up\"?e.palette.success.main:t===\"down\"?e.palette.error.main:e.palette.text.secondary};\n\n svg {\n font-size: 1.5rem;\n }\n\n @media (max-width: 767px) {\n font-size: 1rem;\n\n svg {\n font-size: 1.25rem;\n }\n }\n`,Lf=(0,Fe.styled)(Le.Typography)`\n margin-top: 4px;\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n\n @media (max-width: 767px) {\n font-size: 0.8125rem;\n }\n`,Br=(0,Fe.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 0;\n\n @media (max-width: 767px) {\n gap: 8px;\n }\n`,_t=(0,Fe.styled)(\"h2\")`\n margin: 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: ${({theme:e})=>e.palette.text.primary};\n\n @media (max-width: 767px) {\n font-size: 1.125rem;\n }\n`,Er=(0,Fe.styled)(Le.Box)`\n width: 100%;\n height: 400px;\n\n @media (max-width: 767px) {\n height: 200px;\n }\n`,Kt=(0,Fe.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n ${({withCard:e=!0,theme:t})=>e&&`\n padding: 20px;\n background-color: ${Ys(t,\"N20\")};\n border-radius: 8px;\n box-shadow: ${t.shadows[1]};\n\n @media (max-width: 767px) {\n padding: 16px;\n }\n `}\n`,$f=(0,Fe.styled)(Le.Box)`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n`,Ut=(0,Fe.styled)(Le.Typography)`\n text-align: center;\n color: ${({theme:e})=>e.palette.text.secondary};\n font-size: 1rem;\n padding: 40px 20px;\n\n @media (max-width: 767px) {\n font-size: 0.875rem;\n padding: 32px 16px;\n }\n`,js=(0,Fe.styled)(Le.Typography)`\n font-weight: 600;\n font-size: 14px;\n`,Js=(0,Fe.styled)(Le.Typography)`\n font-size: 13px;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Zs=(0,Fe.styled)(Le.Typography)`\n font-size: 13px;\n`,qs=(0,Fe.styled)(Le.Typography)`\n font-size: 13px;\n color: ${({theme:e,status:t})=>t===\"Active\"?e.palette.success.main:e.palette.warning.main};\n`;var $e=require(\"@mui/material/styles\"),Pe=require(\"@mui/material\"),Qs=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Sc}=Qs.ColorUtils,Xs=(0,$e.styled)(Pe.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`,ed=(0,$e.styled)(Pe.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n`,td=(0,$e.styled)(Pe.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Hr=(0,$e.styled)(Pe.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,od=(0,$e.styled)(Pe.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,rd=(0,$e.styled)(Pe.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,ad=(0,$e.styled)(Pe.Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>Sc(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,nd=(0,$e.styled)(Pe.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n`,id=(0,$e.styled)(Pe.Typography)`\n font-size: 1rem;\n font-weight: 700;\n color: ${({theme:e})=>e.palette.primary.main};\n min-width: 24px;\n`,ld=(0,$e.styled)(Pe.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,sd=(0,$e.styled)(Pe.Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n`,dd=(0,$e.styled)(Pe.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,pd=(0,$e.styled)(Pe.Box)`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n padding-top: 12px;\n border-top: 1px solid ${({theme:e})=>e.palette.divider};\n`,Wr=(0,$e.styled)(Pe.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`,_r=(0,$e.styled)(Pe.Typography)`\n font-size: 0.625rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n text-transform: uppercase;\n`,Kr=(0,$e.styled)(Pe.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`;var cd=M(require(\"@mui/material/useMediaQuery\")),Tc=\"(max-width:767px)\";function kt(){return(0,cd.default)(Tc,{noSsr:!0})}var _=require(\"react/jsx-runtime\");function Dc(e){return{rank:e.rank,name:e.name,sku:`${r(o.fullView.products.skuPrefix)}-${e.id.replace(\"prod-\",\"\").padStart(3,\"0\")}`,units:e.unitsSold,revenue:e.revenue,volume:e.volume}}var wo=({products:e,dateRange:t,market:a,productSort:n,markets:i,isLoading:p=!1,onBack:s,onDateRangeChange:c,onMarketChange:x,onProductSortChange:y})=>{let[g,w]=(0,nt.useState)(1),[d,b]=(0,nt.useState)(n===\"revenue\"?\"revenue\":\"units\"),[u,C]=(0,nt.useState)(\"desc\"),m=10,S=kt(),D=nt.default.useCallback(()=>s?.(),[s]),T=Xe(i),O=nt.default.useMemo(()=>[Ct(t,o),vt(a,T,o),{key:\"sort\",label:r(o.filter.productSort.label),value:n,options:[{value:\"units\",label:r(o.filter.productSort.units)},{value:\"revenue\",label:r(o.filter.productSort.revenue)},{value:\"volume\",label:r(o.filter.productSort.volume)}]}],[t,a,T,n]),G=nt.default.useCallback((v,f)=>{v===\"dateRange\"?c?.(f):v===\"market\"?x?.(f):v===\"sort\"&&(y?.(f),w(1))},[c,x,y]),ee=nt.default.useCallback((v,f)=>{b(v),C(f),w(1)},[]),V=nt.default.useMemo(()=>e.map(Dc),[e]),z=nt.default.useMemo(()=>[...V].sort((v,f)=>{let E=v[d],ie=f[d];return u===\"asc\"?E-ie:ie-E}),[V,d,u]),{totalPages:Z,pageItems:F}=yt(z,g,m),l=e[0]?.currencyCode,h=nt.default.useMemo(()=>[{key:\"rank\",label:r(o.fullView.products.columns.rank),sortable:!0},{key:\"name\",label:r(o.fullView.products.columns.product),sortable:!0,render:(v,f)=>(0,_.jsxs)(Xs,{children:[(0,_.jsx)(ed,{children:f.name}),(0,_.jsx)(td,{children:f.sku})]})},{key:\"units\",label:r(o.fullView.products.columns.unitsSold),sortable:!0,render:v=>(0,_.jsx)(Hr,{children:Number(v).toLocaleString()})},{key:\"revenue\",label:r(o.fullView.products.columns.revenue),sortable:!0,render:v=>(0,_.jsx)(Hr,{children:J(Number(v),l)})},{key:\"volume\",label:r(o.fullView.products.columns.volume),sortable:!0,render:v=>(0,_.jsx)(Hr,{children:Number(v).toLocaleString()})}],[l]);return p?(0,_.jsxs)(De,{\"data-testid\":\"products-full-view\",children:[(0,_.jsx)(be,{title:r(o.widget.topProducts.title),dateRange:me(t),onBack:D,filters:O,onFilterChange:G}),(0,_.jsx)(ul,{})]}):e.length===0?(0,_.jsxs)(De,{\"data-testid\":\"products-full-view\",children:[(0,_.jsx)(be,{title:r(o.widget.topProducts.title),dateRange:me(t),onBack:D,filters:O,onFilterChange:G}),(0,_.jsx)(Ut,{\"data-testid\":\"products-fullview-empty\",children:r(o.fullView.products.noProducts)})]}):(0,_.jsxs)(De,{\"data-testid\":\"products-full-view\",children:[(0,_.jsx)(be,{title:r(o.widget.topProducts.title),dateRange:me(t),onBack:D,filters:O,onFilterChange:G}),S?(0,_.jsx)(od,{\"data-testid\":\"products-fullview-mobile-cards\",children:F.map(v=>(0,_.jsxs)(ad,{children:[(0,_.jsxs)(nd,{children:[(0,_.jsxs)(id,{children:[\"#\",v.rank]}),(0,_.jsxs)(ld,{children:[(0,_.jsx)(sd,{children:v.name}),(0,_.jsx)(dd,{children:v.sku})]})]}),(0,_.jsxs)(pd,{children:[(0,_.jsxs)(Wr,{children:[(0,_.jsx)(_r,{children:r(o.widget.topProducts.units)}),(0,_.jsx)(Kr,{children:v.units.toLocaleString()})]}),(0,_.jsxs)(Wr,{children:[(0,_.jsx)(_r,{children:r(o.widget.topProducts.revenue)}),(0,_.jsx)(Kr,{children:J(v.revenue,l)})]}),(0,_.jsxs)(Wr,{children:[(0,_.jsx)(_r,{children:r(o.filter.productSort.volume)}),(0,_.jsx)(Kr,{children:v.volume.toLocaleString()})]})]})]},v.rank))}):(0,_.jsx)(rd,{\"data-testid\":\"products-fullview-desktop-table\",children:(0,_.jsx)(rt,{columns:h,data:F,sortable:!0,onSort:ee,sortColumn:d,sortDirection:u,getRowKey:v=>v.rank})}),Z>1&&(0,_.jsx)(at,{currentPage:g,totalPages:Z,onPageChange:w,itemsPerPage:m,totalItems:z.length})]})};var Je=M(require(\"react\")),Ie=require(\"recharts\"),kd=M(require(\"@mui/icons-material/TrendingUp\")),Sd=M(require(\"@mui/icons-material/TrendingDown\"));var Ge=require(\"@mui/material/styles\"),Ye=require(\"@mui/material\"),ud=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Pc}=ud.ColorUtils,gd=(0,Ge.styled)(Ye.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>Pc(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n }\n`,fd=(0,Ge.styled)(Ye.Box)`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`,md=(0,Ge.styled)(Ye.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`,hd=(0,Ge.styled)(Ye.Typography)`\n font-size: 1rem;\n font-weight: 600;\n`,bd=(0,Ge.styled)(Ye.Typography)`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,xd=(0,Ge.styled)(\"a\")`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.primary.main};\n text-decoration: none;\n cursor: pointer;\n &:hover {\n text-decoration: underline;\n }\n`,yd=(0,Ge.styled)(Ye.Box)`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n padding-top: 12px;\n border-top: 1px solid ${({theme:e})=>e.palette.divider};\n`,Ur=(0,Ge.styled)(Ye.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n text-align: center;\n`,Gr=(0,Ge.styled)(Ye.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Yr=(0,Ge.styled)(Ye.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,wd=(0,Ge.styled)(Ye.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Cd=(0,Ge.styled)(Ye.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,vd=(0,Ge.styled)(Ye.Typography)`\n margin-top: 4px;\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n @media (max-width: 767px) {\n font-size: 0.75rem;\n }\n`;var L=require(\"react/jsx-runtime\"),Co=({conversionData:e,orders:t,summaryRate:a,summaryChangePct:n,dateRange:i,market:p,conversionFilter:s,markets:c,isLoading:x=!1,onBack:y,onDateRangeChange:g,onMarketChange:w,onConversionFilterChange:d})=>{let[b,u]=(0,Je.useState)(1),C=10,m=kt(),S=Je.default.useCallback(()=>y?.(),[y]),D=Xe(c),T=Je.default.useMemo(()=>typeof a==\"number\"&&Number.isFinite(a)?a:e.at(-1)?.rate??0,[a,e]),O=Je.default.useMemo(()=>{if(n!==void 0){if(n===null)return{direction:\"neutral\",value:r(o.defaults.zeroTrend)};let Ce=\"neutral\";return n>0?Ce=\"up\":n<0&&(Ce=\"down\"),{direction:Ce,value:`${n>=0?\"+\":\"\"}${n.toFixed(1)}%`}}if(e.length<2)return{direction:\"neutral\",value:r(o.defaults.zeroTrend)};let f=e[0].rate;if(f===0)return{direction:\"neutral\",value:r(o.defaults.zeroTrend)};let ie=((e.at(-1)?.rate??0)-f)/f*100,Ot=\"neutral\";return ie>0?Ot=\"up\":ie<0&&(Ot=\"down\"),{direction:Ot,value:`${ie>=0?\"+\":\"\"}${ie.toFixed(1)}%`}},[n,e]),G=Je.default.useCallback(f=>f===\"standard\"?r(o.filter.conversionType.standard):f===\"subscription\"?r(o.filter.conversionType.subscription):r(o.filter.conversionType.all),[]),ee=Je.default.useMemo(()=>G(s),[s,G]),V=Je.default.useMemo(()=>[Ct(i,o),vt(p,D,o),{key:\"customerType\",label:r(o.filter.signupView.label),value:s,options:[{value:\"all\",label:r(o.filter.conversionType.all)},{value:\"standard\",label:r(o.filter.conversionType.standard)},{value:\"subscription\",label:r(o.filter.conversionType.subscription)}]}],[s,i,p,D]),z=Je.default.useCallback((f,E)=>{f===\"dateRange\"?g?.(E):f===\"market\"?w?.(E):f===\"customerType\"&&(d?.(E),u(1))},[d,g,w]),Z=Je.default.useMemo(()=>s===\"all\"?t:t.filter(f=>f.customerType.toLowerCase()===s),[t,s]),{totalPages:F,pageItems:l}=yt(Z,b,C),h=Je.default.useMemo(()=>[{key:\"orderId\",label:r(o.fullView.conversionRate.columns.orderId),sortable:!0},{key:\"date\",label:r(o.fullView.conversionRate.columns.date),sortable:!0},{key:\"customerName\",label:r(o.fullView.conversionRate.columns.customer),sortable:!0},{key:\"customerType\",label:r(o.fullView.conversionRate.columns.type),sortable:!0},{key:\"items\",label:r(o.fullView.conversionRate.columns.items),sortable:!0},{key:\"total\",label:r(o.fullView.conversionRate.columns.total),sortable:!0,render:(f,E)=>J(Number(f),E.currencyCode,void 0,2)},{key:\"bv\",label:r(o.fullView.conversionRate.columns.bv),sortable:!0}],[]),v=Je.default.useCallback(()=>s===\"standard\"?\"#2e7d32\":s===\"subscription\"?\"#ed6c02\":\"#1976d2\",[s]);return x?(0,L.jsxs)(De,{\"data-testid\":\"conversion-rate-full-view\",children:[(0,L.jsx)(be,{title:r(o.widget.conversionRate.title),dateRange:me(i),onBack:S,filters:V,onFilterChange:z}),(0,L.jsx)(Ht,{})]}):(0,L.jsxs)(De,{\"data-testid\":\"conversion-rate-full-view\",children:[(0,L.jsx)(be,{title:r(o.widget.conversionRate.title),dateRange:me(i),onBack:S,filters:V,onFilterChange:z}),(0,L.jsxs)(Vr,{\"data-testid\":\"conversion-fullview-metric-chart\",children:[(0,L.jsxs)(Ir,{children:[(0,L.jsxs)(Ar,{\"data-testid\":\"conversion-rate-value\",children:[T.toFixed(1),\"%\"]}),(0,L.jsxs)(zr,{direction:O.direction,\"data-testid\":\"conversion-rate-trend\",children:[O.direction===\"up\"&&(0,L.jsx)(kd.default,{}),O.direction===\"down\"&&(0,L.jsx)(Sd.default,{}),O.value]}),(0,L.jsx)(vd,{children:r(o.widget.conversionRate.ordersPerSiteVisits)})]}),(0,L.jsx)(Br,{children:(0,L.jsx)(Er,{\"data-testid\":\"conversion-fullview-chart\",children:(0,L.jsx)(Ie.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,L.jsxs)(Ie.LineChart,{data:e,children:[(0,L.jsx)(Ie.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,L.jsx)(Ie.XAxis,{dataKey:\"date\"}),(0,L.jsx)(Ie.YAxis,{tickFormatter:f=>`${f}%`,domain:[0,\"auto\"]}),(0,L.jsx)(Ie.Tooltip,{formatter:f=>typeof f==\"number\"?`${f.toFixed(2)}%`:typeof f==\"string\"?f:r(o.fullView.conversionRate.notAvailable)}),(0,L.jsx)(Ie.Legend,{}),(0,L.jsx)(Ie.Line,{type:\"monotone\",dataKey:\"rate\",stroke:v(),strokeWidth:2,name:`${r(o.widget.conversionRate.title)} (${ee})`,dot:!1})]})})})})]}),(0,L.jsxs)(Kt,{\"data-testid\":\"conversion-fullview-table-section\",children:[(0,L.jsxs)(_t,{\"data-testid\":\"conversion-fullview-table-title\",children:[r(o.fullView.conversionRate.orderDetailsTitle),\" (\",Z.length,\")\"]}),m?(0,L.jsx)(wd,{\"data-testid\":\"conversion-fullview-mobile-orders\",children:l.map(f=>(0,L.jsxs)(gd,{children:[(0,L.jsxs)(fd,{children:[(0,L.jsxs)(md,{children:[(0,L.jsx)(hd,{children:f.customerName}),(0,L.jsx)(bd,{children:f.date})]}),(0,L.jsx)(xd,{children:f.orderId})]}),(0,L.jsxs)(yd,{children:[(0,L.jsxs)(Ur,{children:[(0,L.jsx)(Gr,{children:r(o.fullView.conversionRate.columns.items)}),(0,L.jsx)(Yr,{children:f.items})]}),(0,L.jsxs)(Ur,{children:[(0,L.jsx)(Gr,{children:r(o.fullView.conversionRate.columns.orderTotal)}),(0,L.jsxs)(Yr,{children:[\"$\",f.total.toFixed(2)]})]}),(0,L.jsxs)(Ur,{children:[(0,L.jsx)(Gr,{children:r(o.fullView.conversionRate.columns.totalSv)}),(0,L.jsx)(Yr,{children:f.bv})]})]})]},f.orderId))}):(0,L.jsx)(Cd,{\"data-testid\":\"conversion-fullview-desktop-table\",children:(0,L.jsx)(rt,{columns:h,data:l,getRowKey:f=>f.orderId})}),F>1&&(0,L.jsx)(at,{currentPage:b,totalPages:F,onPageChange:u,itemsPerPage:C,totalItems:Z.length})]})]})};var St=M(require(\"react\")),pe=require(\"recharts\"),Fd=M(require(\"@mui/icons-material/TrendingUp\")),Ld=M(require(\"@mui/icons-material/TrendingDown\"));var vo=require(\"@mui/material/styles\"),ko=require(\"@mui/material\"),Td=require(\"@nuskin/foundation-theme\");var{getGenomeColor:Rc}=Td.ColorUtils,Dd=(0,vo.styled)(ko.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Pd=(0,vo.styled)(ko.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,Rd=(0,vo.styled)(ko.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n background-color: ${({theme:e})=>Rc(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n }\n`,Md=(0,vo.styled)(Er)`\n min-height: 320px;\n\n @media (max-width: 767px) {\n min-height: 260px;\n height: 260px;\n }\n`,Od=(0,vo.styled)(ko.Typography)`\n margin-top: 4px;\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`;var $=require(\"react/jsx-runtime\"),to={total:\"#3B82F6\",members:\"#7B92A8\",retail:\"#A3B5C7\",brandAffiliates:\"#5F7388\"};function jr(e){if(typeof e==\"number\")return Number.isFinite(e)?e:0;if(typeof e==\"string\"){let t=Number(e.replace(/,/g,\"\"));return Number.isFinite(t)?t:0}return 0}var Jr=({signupData:e,signups:t,dateRange:a,market:n,signupView:i,markets:p,isLoading:s=!1,onBack:c,onDateRangeChange:x,onMarketChange:y,onSignupViewChange:g})=>{let[w,d]=(0,St.useState)(1),b=10,u=kt(),C=St.default.useCallback(()=>c?.(),[c]),m=Xe(p),S=St.default.useMemo(()=>e.map(F=>{let l=F,h=jr(l.members),v=jr(l.retail),f=jr(l.brandAffiliates??l.brandAffiliate??l.brand_affiliates??l.brand_affiliate),E=jr(l.total??l.all??l.signupTotal??l.value);return{...F,total:E>0?E:h+v+f,members:h,retail:v,brandAffiliates:f}}),[e]),D=St.default.useMemo(()=>S.length===0?0:S[S.length-1].total,[S]),T=St.default.useMemo(()=>{if(S.length<2)return{direction:\"neutral\",value:r(o.defaults.zeroTrend)};let F=S[0].total,l=S[S.length-1].total;if(F<=0)return{direction:\"neutral\",value:r(o.defaults.zeroTrend)};let h=(l-F)/F*100,v=\"neutral\";return h>0?v=\"up\":h<0&&(v=\"down\"),{direction:v,value:`${h>=0?\"+\":\"\"}${h.toFixed(1)}%`}},[S]),O=S.length>0,G=St.default.useMemo(()=>[Ct(a,o),vt(n,m,o),{key:\"signupView\",label:r(o.filter.signupView.label),value:i,options:[{value:\"all\",label:r(o.filter.signupView.all)},{value:\"members\",label:r(o.filter.signupView.members)},{value:\"retail\",label:r(o.filter.signupView.retail)},{value:\"brandAffiliates\",label:r(o.filter.signupView.brandAffiliates)}]}],[a,n,m,i]),ee=St.default.useCallback((F,l)=>{F===\"dateRange\"?x?.(l):F===\"market\"?y?.(l):F===\"signupView\"&&(g?.(l),d(1))},[x,y,g]),{totalPages:V,pageItems:z}=yt(t,w,b),Z=St.default.useMemo(()=>[{key:\"id\",label:r(o.fullView.signups.columns.id),sortable:!0},{key:\"name\",label:r(o.fullView.signups.columns.name),sortable:!0},{key:\"date\",label:r(o.fullView.signups.columns.date),sortable:!0},{key:\"type\",label:r(o.fullView.signups.columns.type),sortable:!0},{key:\"email\",label:r(o.fullView.signups.columns.email),sortable:!0},{key:\"status\",label:r(o.fullView.signups.columns.status),sortable:!0}],[]);return s?(0,$.jsxs)(De,{\"data-testid\":\"signups-full-view\",children:[(0,$.jsx)(be,{title:r(o.widget.signups.title),dateRange:me(a),onBack:C,filters:G,onFilterChange:ee}),(0,$.jsx)(Ht,{})]}):(0,$.jsxs)(De,{\"data-testid\":\"signups-full-view\",children:[(0,$.jsx)(be,{title:r(o.widget.signups.title),dateRange:me(a),onBack:C,filters:G,onFilterChange:ee}),(0,$.jsxs)(Vr,{\"data-testid\":\"signups-fullview-metric-chart\",children:[(0,$.jsxs)(Ir,{children:[(0,$.jsx)(Ar,{\"data-testid\":\"signups-total\",children:D.toLocaleString()}),(0,$.jsxs)(zr,{direction:T.direction,children:[T.direction===\"up\"&&(0,$.jsx)(Fd.default,{}),T.direction===\"down\"&&(0,$.jsx)(Ld.default,{}),T.value]}),(0,$.jsx)(Od,{children:r(o.widget.signups.totalSignupsInPeriod)})]}),(0,$.jsx)(Br,{children:O?(0,$.jsx)(Md,{\"data-testid\":\"signups-fullview-chart\",children:(0,$.jsx)(pe.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:240,children:(0,$.jsxs)(pe.LineChart,{data:S,children:[(0,$.jsx)(pe.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,$.jsx)(pe.XAxis,{dataKey:\"date\"}),(0,$.jsx)(pe.YAxis,{}),(0,$.jsx)(pe.Tooltip,{}),(0,$.jsx)(pe.Legend,{}),i===\"all\"&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"total\",stroke:to.total,strokeWidth:2,name:r(o.widget.signups.total),dot:{r:2},connectNulls:!0}),(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"members\",stroke:to.members,strokeWidth:2,name:r(o.widget.signups.members),dot:{r:2},connectNulls:!0}),(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"retail\",stroke:to.retail,strokeWidth:2,name:r(o.widget.signups.retail),dot:{r:2},connectNulls:!0}),(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:to.brandAffiliates,strokeWidth:2,name:r(o.widget.signups.brandAffiliates),dot:{r:2},connectNulls:!0})]}),i===\"members\"&&(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"members\",stroke:to.members,strokeWidth:2,name:r(o.widget.signups.members),dot:{r:2},connectNulls:!0}),i===\"retail\"&&(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"retail\",stroke:to.retail,strokeWidth:2,name:r(o.widget.signups.retail),dot:{r:2},connectNulls:!0}),i===\"brandAffiliates\"&&(0,$.jsx)(pe.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:to.brandAffiliates,strokeWidth:2,name:r(o.widget.signups.brandAffiliates),dot:{r:2},connectNulls:!0})]})})}):(0,$.jsx)(Ut,{\"data-testid\":\"signups-fullview-chart-empty\",children:r(o.widget.signups.noTrendData)})})]}),(0,$.jsxs)(Kt,{\"data-testid\":\"signups-fullview-table-section\",children:[(0,$.jsx)(_t,{\"data-testid\":\"signups-fullview-table-title\",children:`${r(o.fullView.signups.detailsTitle)} (${t.length})`}),u?(0,$.jsx)(Dd,{\"data-testid\":\"signups-fullview-mobile-cards\",children:z.map(F=>(0,$.jsxs)(Rd,{children:[(0,$.jsx)(js,{children:F.name}),(0,$.jsxs)(Js,{children:[F.date,\" - \",F.type]}),(0,$.jsx)(Zs,{children:F.email}),(0,$.jsx)(qs,{status:F.status,children:F.status})]},F.id))}):(0,$.jsx)(Pd,{\"data-testid\":\"signups-fullview-desktop-table\",children:(0,$.jsx)(rt,{columns:Z,data:z,getRowKey:F=>F.id})}),V>1&&(0,$.jsx)(at,{currentPage:w,totalPages:V,onPageChange:d,itemsPerPage:b,totalItems:t.length})]})]})};var Tt=M(require(\"react\")),Dt=require(\"recharts\");var Gt=require(\"@nuskin/foundation-theme\"),Ne=require(\"@mui/material/styles\"),Re=require(\"@mui/material\"),{getGenomeColor:ja}=Gt.ColorUtils,Zr=(0,Gt.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,$d=(0,Gt.styled)(\"div\")`\n flex: 1;\n`,Nd=(0,Gt.styled)(\"span\")`\n font-weight: 600;\n`,Vd=(0,Gt.styled)(\"span\")`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Id=(0,Gt.styled)(\"span\")`\n font-weight: 600;\n`,Ad=(0,Ne.styled)(Re.Box)`\n display: flex;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>ja(e,\"N20\")};\n border-radius: 8px;\n box-shadow: ${({theme:e})=>e.shadows[1]};\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n }\n`,zd=(0,Ne.styled)(Re.Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n\n @media (max-width: 767px) {\n width: 100%;\n height: 220px;\n }\n`,Bd=(0,Ne.styled)(Re.Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n pointer-events: none;\n z-index: 1;\n width: 120px;\n`,Ed=(0,Ne.styled)(Re.Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Hd=(0,Ne.styled)(Re.Typography)`\n margin-top: 2px;\n font-size: 1.25rem;\n line-height: 1.2;\n font-weight: 700;\n color: ${({theme:e})=>e.palette.text.primary};\n`,Wd=(0,Ne.styled)(Re.Typography)`\n margin-top: 2px;\n font-size: 0.875rem;\n line-height: 1.2;\n font-weight: 600;\n color: ${({direction:e,theme:t})=>e===\"up\"?t.palette.success.main:e===\"down\"?t.palette.error.main:t.palette.text.secondary};\n`,_d=(0,Ne.styled)(Re.Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1;\n`,Kd=(0,Ne.styled)(Re.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>ja(e,\"N30\")};\n }\n`,qr=(0,Ne.styled)(Re.Box)`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({dotColor:e})=>e};\n flex-shrink: 0;\n`,Ud=(0,Ne.styled)(Re.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,Gd=(0,Ne.styled)(Re.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,Yd=(0,Ne.styled)(Re.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,jd=(0,Ne.styled)(Re.Typography)`\n font-size: 1rem;\n font-weight: 600;\n flex-shrink: 0;\n`,Jd=(0,Ne.styled)(Re.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,Zd=(0,Ne.styled)(Re.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,qd=(0,Ne.styled)(Re.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>ja(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`;var N=require(\"react/jsx-runtime\"),Qr=({categories:e,dateRange:t,market:a,categorySort:n,markets:i,isLoading:p=!1,onBack:s,onDateRangeChange:c,onMarketChange:x,onCategorySortChange:y})=>{let[g,w]=(0,Tt.useState)(1),d=10,b=kt(),u=Tt.default.useCallback(()=>s?.(),[s]),C=Xe(i),m=Tt.default.useMemo(()=>[Ct(t,o),vt(a,C,o),{key:\"sort\",label:r(o.filter.productSort.label),value:n,options:[{value:\"revenue\",label:r(o.filter.categorySort.byRevenue)},{value:\"trend\",label:r(o.filter.categorySort.byTrend)}]}],[n,t,a,C]),S=Tt.default.useCallback((l,h)=>{l===\"dateRange\"?c?.(h):l===\"market\"?x?.(h):l===\"sort\"&&(y?.(h),w(1))},[y,c,x]),D=Tt.default.useMemo(()=>[...e].sort((l,h)=>n===\"revenue\"?h.revenue-l.revenue:(bt(h.trend?.revenue)??-1/0)-(bt(l.trend?.revenue)??-1/0)),[e,n]),{totalRevenue:T,totalRevenueTrendDirection:O,totalRevenueTrend:G}=Tt.default.useMemo(()=>{let l=D.reduce((f,E)=>f+E.revenue,0),{direction:h,formatted:v}=Et(D,f=>f.revenue,f=>f.trend?.revenue);return{totalRevenue:l,totalRevenueTrendDirection:h,totalRevenueTrend:v}},[D]),ee=Tt.default.useMemo(()=>D.slice(0,5),[D]),{totalPages:V,pageItems:z}=yt(D,g,d),Z=Tt.default.useMemo(()=>[{key:\"name\",label:r(o.fullView.categories.columns.category),sortable:!0,render:(l,h)=>(0,N.jsxs)(Zr,{children:[(0,N.jsx)(qr,{dotColor:h.color}),(0,N.jsx)(\"span\",{children:h.name})]})},{key:\"revenue\",label:r(o.fullView.categories.columns.revenue),sortable:!0,render:(l,h)=>J(Number(l),h.currencyCode)},{key:\"percentage\",label:r(o.fullView.categories.columns.percentOfTotal),sortable:!0,render:l=>`${Number(l)}%`},{key:\"trend\",label:r(o.fullView.categories.columns.trend),render:(l,h)=>h.trend?.revenue??r(o.defaults.noValue)}],[]),F=D[0]?.currencyCode;return p?(0,N.jsxs)(De,{\"data-testid\":\"categories-full-view\",children:[(0,N.jsx)(be,{title:r(o.widget.topCategories.title),dateRange:me(t),onBack:u,filters:m,onFilterChange:S}),(0,N.jsx)(Ht,{})]}):e.length===0?(0,N.jsxs)(De,{\"data-testid\":\"categories-full-view\",children:[(0,N.jsx)(be,{title:r(o.widget.topCategories.title),dateRange:me(t),onBack:u,filters:m,onFilterChange:S}),(0,N.jsx)(Ut,{\"data-testid\":\"categories-fullview-empty\",children:r(o.fullView.categories.noCategoryData)})]}):(0,N.jsxs)(De,{\"data-testid\":\"categories-full-view\",children:[(0,N.jsx)(be,{title:r(o.widget.topCategories.title),dateRange:me(t),onBack:u,filters:m,onFilterChange:S}),(0,N.jsxs)(Ad,{\"data-testid\":\"categories-fullview-top-section\",children:[(0,N.jsxs)(zd,{\"data-testid\":\"categories-fullview-chart\",children:[(0,N.jsx)(Dt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,N.jsxs)(Dt.PieChart,{children:[(0,N.jsx)(Dt.Pie,{data:D,cx:\"50%\",cy:\"50%\",innerRadius:\"50%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:D.map(l=>(0,N.jsx)(Dt.Cell,{fill:l.color},`cell-${l.id}`))}),(0,N.jsx)(Dt.Tooltip,{formatter:l=>J(l,F)})]})}),(0,N.jsxs)(Bd,{\"data-testid\":\"categories-fullview-donut-center\",children:[(0,N.jsx)(Ed,{children:r(o.stats.revenue)}),(0,N.jsx)(Hd,{children:J(T,F)}),(0,N.jsx)(Wd,{direction:O,children:G})]})]}),(0,N.jsx)(_d,{\"data-testid\":\"categories-fullview-summary\",children:ee.map(l=>(0,N.jsxs)(Kd,{children:[(0,N.jsx)(qr,{dotColor:l.color}),(0,N.jsxs)(Ud,{children:[(0,N.jsx)(Gd,{children:l.name}),(0,N.jsx)(Yd,{children:J(l.revenue,l.currencyCode)})]}),(0,N.jsxs)(jd,{children:[l.percentage,\"%\"]})]},l.id))})]}),(0,N.jsxs)(Kt,{\"data-testid\":\"categories-fullview-table-section\",children:[(0,N.jsxs)(_t,{\"data-testid\":\"categories-fullview-table-title\",children:[r(o.fullView.categories.allCategoriesTitle),\" (\",D.length,\")\"]}),b?(0,N.jsx)(Zd,{children:z.map(l=>(0,N.jsxs)(qd,{children:[(0,N.jsx)(qr,{dotColor:l.color}),(0,N.jsxs)($d,{children:[(0,N.jsx)(Nd,{children:l.name}),(0,N.jsx)(Vd,{children:J(l.revenue,l.currencyCode)})]}),(0,N.jsxs)(Id,{children:[l.percentage,\"%\"]})]},l.id))}):(0,N.jsx)(Jd,{children:(0,N.jsx)(rt,{columns:Z,data:z,sortable:!0,getRowKey:l=>l.id})}),V>1&&(0,N.jsx)(at,{currentPage:g,totalPages:V,onPageChange:w,itemsPerPage:d,totalItems:D.length})]})]})};var Ja=M(require(\"react\"));function oo(e){co(e),Ja.default.useEffect(()=>(co(e),()=>{co(void 0)}),[e])}var Qd=({translate:e,children:t})=>(oo(e),t??null);function Xd(){return Ja.default.useCallback(e=>Bt(e),[])}var So=require(\"react/jsx-runtime\"),Mc=\"shoppingDashboardView\",Oc=[],Fc=[],Lc=[],$c=[],Nc=[],Vc=[];function tp(e){return typeof e==\"object\"&&e!==null}function Ic(e){return e===\"dashboard\"||e===\"products\"||e===\"conversion-rate\"||e===\"signups\"||e===\"categories\"}function Xr(e,t){if(!tp(e))return\"dashboard\";let a=e[t];return Ic(a)?a:\"dashboard\"}function ep(e,t,a){return{...tp(e)?e:{},[t]:a}}function Ac(e,t){return{pathname:e?.pathname,search:e?.search,hash:e?.hash,state:t}}var op=({stats:e,topProducts:t,conversionData:a,signupData:n,categories:i,orders:p,signups:s,isLoading:c=!1,error:x,shopTitle:y,className:g,translate:w,initialDateRange:d=\"last30days\",initialMarket:b=\"all\",initialProductSort:u=\"units\",initialSignupView:C=\"all\",initialConversionFilter:m=\"all\",initialCategorySort:S=\"revenue\",markets:D,historyAdapter:T,historyStateKey:O=Mc,resetToDashboardOnMount:G=!0,onDateRangeChange:ee,onMarketChange:V,onProductSortChange:z,onSignupViewChange:Z,onConversionFilterChange:F,onCategorySortChange:l,onViewChange:h})=>{oo(w);let[v,f]=ae.default.useState(\"dashboard\"),E=ae.default.useRef(!1),[ie,Ot]=ae.default.useState(d),[Ce,Ze]=ae.default.useState(b),[Yt,Ft]=ae.default.useState(u),[ue,Lt]=ae.default.useState(C),[ut,no]=ae.default.useState(m),[io,Go]=ae.default.useState(S),Yo=t??Oc,Mo=a??Fc,Oo=n??Lc,Fo=i??$c,da=p??Nc,pa=s??Vc,it=ae.default.useCallback(H=>{f(H),h?.(H)},[h]),qe=ae.default.useCallback(()=>T?Xr(T.location?.state,O):typeof window>\"u\"?\"dashboard\":Xr(window.history.state,O),[T,O]),$t=ae.default.useCallback((H,We)=>{if(T){let Jt=ep(T.location?.state,O,H),rn=Ac(T.location,Jt);if(We===\"replace\"){T.replace(rn);return}T.push(rn);return}if(typeof window>\"u\")return;let Qe=ep(window.history.state,O,H);if(We===\"replace\"){window.history.replaceState(Qe,\"\");return}window.history.pushState(Qe,\"\")},[T,O]);ae.default.useEffect(()=>{if(G?($t(\"dashboard\",\"replace\"),E.current=!1,it(\"dashboard\")):it(qe()),T)return T.listen((We,Qe)=>{if(Qe===\"POP\"){let Jt=Xr(We.state,O);E.current=Jt!==\"dashboard\",it(Jt)}});let H=We=>{let Qe=Xr(We.state,O);E.current=Qe!==\"dashboard\",it(Qe)};return window.addEventListener(\"popstate\",H),()=>{window.removeEventListener(\"popstate\",H)}},[T,O,qe,G,it,$t]);let Ae=ae.default.useCallback(H=>{E.current=!0,$t(H,\"push\"),it(H)},[it,$t]),lt=ae.default.useCallback(()=>{if(v!==\"dashboard\"&&E.current){if(T){T.goBack();return}typeof window<\"u\"&&window.history.back();return}E.current=!1,$t(\"dashboard\",\"replace\"),it(\"dashboard\")},[v,T,it,$t]),Nt=ae.default.useCallback(H=>{Ot(H),ee?.(H)},[ee]),gt=ae.default.useCallback(H=>{Ze(H),V?.(H)},[V]),jt=ae.default.useCallback(H=>{Ft(H),z?.(H)},[z]),Lo=ae.default.useCallback(H=>{Lt(H),Z?.(H)},[Z]),$o=ae.default.useCallback(H=>{no(H),F?.(H)},[F]),No=ae.default.useCallback(H=>{Go(H),l?.(H)},[l]),ca=ae.default.useCallback(()=>{Ae(\"products\")},[Ae]),ua=ae.default.useCallback(()=>{Ae(\"conversion-rate\")},[Ae]),ga=ae.default.useCallback(()=>{Ae(\"signups\")},[Ae]),q=ae.default.useCallback(()=>{Ae(\"categories\")},[Ae]);return v===\"products\"?(0,So.jsx)(wo,{products:Yo,dateRange:ie,market:Ce,productSort:Yt,markets:D,isLoading:c,onBack:lt,onDateRangeChange:Nt,onMarketChange:gt,onProductSortChange:jt}):v===\"conversion-rate\"?(0,So.jsx)(Co,{conversionData:Mo,orders:da,dateRange:ie,market:Ce,conversionFilter:ut,markets:D,isLoading:c,onBack:lt,onDateRangeChange:Nt,onMarketChange:gt,onConversionFilterChange:$o}):v===\"signups\"?(0,So.jsx)(Jr,{signupData:Oo,signups:pa,dateRange:ie,market:Ce,signupView:ue,markets:D,isLoading:c,onBack:lt,onDateRangeChange:Nt,onMarketChange:gt,onSignupViewChange:Lo}):v===\"categories\"?(0,So.jsx)(Qr,{categories:Fo,dateRange:ie,market:Ce,categorySort:io,markets:D,isLoading:c,onBack:lt,onDateRangeChange:Nt,onMarketChange:gt,onCategorySortChange:No}):(0,So.jsx)(Lr,{stats:e,topProducts:Yo,conversionData:Mo,signupData:Oo,categories:Fo,isLoading:c,error:x,shopTitle:y,className:g,dateRange:ie,market:Ce,productSort:Yt,signupView:ue,conversionFilter:ut,categorySort:io,markets:D,onDateRangeChange:Nt,onMarketChange:gt,onProductSortChange:jt,onSignupViewChange:Lo,onConversionFilterChange:$o,onCategorySortChange:No,onProductsTitleClick:ca,onConversionTitleClick:ua,onSignupsTitleClick:ga,onCategoriesToTitleClick:q})};var To=require(\"@nuskin/foundation-theme\"),Za=(0,To.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n gap: 24px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n }\n`,rp=(0,To.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n`,ap=(0,To.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n gap: 24px;\n justify-content: flex-start;\n }\n`,np=(0,To.styled)(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n`,ip=(0,To.styled)(\"div\")`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;var ea=M(require(\"react\")),Pt=require(\"recharts\");var I={title:{key:\"productOfferDashboard.title\",fallback:\"Performance Overview\"},error:{key:\"productOfferDashboard.error\",fallback:\"Failed to load dashboard data. Please try again.\"},stats:{revenue:{key:\"productOfferDashboard.stats.revenue\",fallback:\"Total Revenue\"},offersPurchased:{key:\"productOfferDashboard.stats.offersPurchased\",fallback:\"Offers Purchased\"},conversionRate:{key:\"productOfferDashboard.stats.conversionRate\",fallback:\"Conversion Rate\"},trendUp:{key:\"productOfferDashboard.stats.trendUp\",fallback:\"Trending up\"},trendDown:{key:\"productOfferDashboard.stats.trendDown\",fallback:\"Trending down\"},trendNeutral:{key:\"productOfferDashboard.stats.trendNeutral\",fallback:\"No change\"},comparedTo:{key:\"productOfferDashboard.stats.comparedTo\",fallback:\"compared to this time last month\"}},filter:{dateRange:{label:{key:\"productOfferDashboard.filter.dateRange.label\",fallback:\"Date Range\"},last7days:{key:\"productOfferDashboard.filter.dateRange.last7days\",fallback:\"Last 7 Days\"},last30days:{key:\"productOfferDashboard.filter.dateRange.last30days\",fallback:\"Last 30 Days\"},last90days:{key:\"productOfferDashboard.filter.dateRange.last90days\",fallback:\"Last 90 Days\"},thisMonth:{key:\"productOfferDashboard.filter.dateRange.thisMonth\",fallback:\"This Month\"}},market:{label:{key:\"productOfferDashboard.filter.market.label\",fallback:\"Market\"},all:{key:\"productOfferDashboard.filter.market.all\",fallback:\"All Markets\"}},offerSort:{byRevenue:{key:\"productOfferDashboard.filter.offerSort.byRevenue\",fallback:\"Revenue\"},byUnits:{key:\"productOfferDashboard.filter.offerSort.byUnits\",fallback:\"Units\"}},productSort:{byUnits:{key:\"productOfferDashboard.filter.productSort.byUnits\",fallback:\"Units\"},byRevenue:{key:\"productOfferDashboard.filter.productSort.byRevenue\",fallback:\"Revenue\"},byVolume:{key:\"productOfferDashboard.filter.productSort.byVolume\",fallback:\"Volume\"}},conversionFilter:{overall:{key:\"productOfferDashboard.filter.conversionFilter.overall\",fallback:\"Overall\"}}},widget:{topProducts:{title:{key:\"productOfferDashboard.widget.topProducts.title\",fallback:\"Top Selling Products\"},emptyState:{key:\"productOfferDashboard.widget.topProducts.emptyState\",fallback:\"No products data available\"}},conversionRate:{title:{key:\"productOfferDashboard.widget.conversionRate.title\",fallback:\"Conversion Rate\"},subtitle:{key:\"productOfferDashboard.widget.conversionRate.subtitle\",fallback:\"Orders \\xF7 Site visits\"}},topPerformingOffers:{title:{key:\"productOfferDashboard.widget.topPerformingOffers.title\",fallback:\"Top Performing Offers\"},totalRevenue:{key:\"productOfferDashboard.widget.topPerformingOffers.totalRevenue\",fallback:\"Total revenue\"},emptyState:{key:\"productOfferDashboard.widget.topPerformingOffers.emptyState\",fallback:\"No offers data available\"}},menu:{fullView:{key:\"productOfferDashboard.widget.menu.fullView\",fallback:\"Full View\"}}},navigation:{back:{key:\"productOfferDashboard.navigation.back\",fallback:\"Back to Dashboard\"}},ariaLabel:{dashboard:{key:\"productOfferDashboard.ariaLabel.dashboard\",fallback:\"Product Offer Performance Dashboard\"},statsCard:{key:\"productOfferDashboard.ariaLabel.statsCard\",fallback:\"Performance metric\"},conversionChart:{key:\"productOfferDashboard.ariaLabel.conversionChart\",fallback:\"Conversion rate chart\"},topProducts:{key:\"productOfferDashboard.ariaLabel.topProducts\",fallback:\"Top selling products\"},topOffers:{key:\"productOfferDashboard.ariaLabel.topOffers\",fallback:\"Top performing offers chart\"},widgetMenu:{key:\"productOfferDashboard.ariaLabel.widgetMenu\",fallback:\"Widget options menu\"},filterDateRange:{key:\"productOfferDashboard.ariaLabel.filterDateRange\",fallback:\"Filter by date range\"},filterMarket:{key:\"productOfferDashboard.ariaLabel.filterMarket\",fallback:\"Filter by market\"},backButton:{key:\"productOfferDashboard.ariaLabel.backButton\",fallback:\"Back to dashboard overview\"}},fullView:{topOffers:{title:{key:\"productOfferDashboard.fullView.topOffers.title\",fallback:\"Top Performing Offers\"},columnName:{key:\"productOfferDashboard.fullView.topOffers.columnName\",fallback:\"Offer Name\"},columnRevenue:{key:\"productOfferDashboard.fullView.topOffers.columnRevenue\",fallback:\"Revenue\"},columnPercentage:{key:\"productOfferDashboard.fullView.topOffers.columnPercentage\",fallback:\"Share\"},columnTrend:{key:\"productOfferDashboard.fullView.topOffers.columnTrend\",fallback:\"Trend\"}}},defaults:{trendZero:{key:\"productOfferDashboard.defaults.trendZero\",fallback:\"+0%\"},noData:{key:\"productOfferDashboard.defaults.noData\",fallback:\"--\"}}};function B(e){return Bt(e)}var K=require(\"react/jsx-runtime\"),zc=({offers:e,offerSort:t,isLoading:a=!1,title:n,onSortChange:i,onTitleClick:p})=>{let s=ea.default.useCallback(d=>{let b=d.target.value;i?.(b)},[i]),{sortedOffers:c,totalRevenue:x,trendDirection:y,formattedTrend:g}=ea.default.useMemo(()=>{let d=[...e].sort((m,S)=>t===\"revenue\"?S.revenue-m.revenue:S.percentage-m.percentage),b=d.reduce((m,S)=>m+S.revenue,0),{direction:u,formatted:C}=Et(d,m=>m.revenue,m=>m.trend?.revenue);return{sortedOffers:d,totalRevenue:b,trendDirection:u,formattedTrend:C}},[e,t]),w=c[0]?.currencyCode;return a&&e.length===0?(0,K.jsx)(Wt,{\"data-testid\":\"widget-top-offers\",children:(0,K.jsx)(sr,{})}):e.length===0?(0,K.jsxs)(Wt,{\"data-testid\":\"widget-top-offers\",children:[(0,K.jsx)(xo,{children:(0,K.jsx)(yo,{children:n??B(I.widget.topPerformingOffers.title)})}),(0,K.jsx)(Mr,{\"data-testid\":\"top-offers-empty-state\",children:(0,K.jsx)(Or,{children:B(I.widget.topPerformingOffers.emptyState)})})]}):(0,K.jsxs)(Wt,{as:\"section\",\"data-testid\":\"widget-top-offers\",\"aria-label\":B(I.ariaLabel.topOffers),children:[(0,K.jsxs)(xo,{children:[(0,K.jsx)(yo,{as:\"button\",onClick:p,\"aria-label\":B(I.ariaLabel.topOffers),\"data-testid\":\"widget-title-top-offers\",children:n??B(I.widget.topPerformingOffers.title)}),(0,K.jsxs)(gr,{children:[(0,K.jsxs)(fr,{id:\"offer-sort\",\"data-testid\":\"offer-sort-dropdown\",value:t,onChange:s,disabled:a,\"aria-label\":B(I.ariaLabel.topOffers),children:[(0,K.jsx)(\"option\",{value:\"revenue\",children:B(I.filter.offerSort.byRevenue)}),(0,K.jsx)(\"option\",{value:\"units\",children:B(I.filter.offerSort.byUnits)})]}),(0,K.jsx)(tt,{widgetId:\"top-offers\",onFullView:p})]})]}),(0,K.jsxs)(mr,{children:[(0,K.jsxs)(hr,{\"data-testid\":\"top-offers-chart\",children:[(0,K.jsx)(Pt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,K.jsxs)(Pt.PieChart,{children:[(0,K.jsx)(Pt.Pie,{data:c,cx:\"50%\",cy:\"50%\",innerRadius:\"55%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:c.map(d=>(0,K.jsx)(Pt.Cell,{fill:d.color},`cell-${d.id}`))}),(0,K.jsx)(Pt.Tooltip,{formatter:d=>J(d,w)})]})}),(0,K.jsxs)(br,{\"data-testid\":\"top-offers-donut-center\",children:[(0,K.jsx)(xr,{children:B(I.widget.topPerformingOffers.totalRevenue)}),(0,K.jsx)(yr,{children:J(x,w)}),(0,K.jsx)(wr,{direction:y,children:g})]})]}),(0,K.jsx)(Cr,{\"data-testid\":\"top-offers-legend-container\",children:c.map((d,b)=>{let u=qt(d.trend?.revenue);return(0,K.jsxs)(vr,{\"data-testid\":`offer-legend-${b}`,children:[(0,K.jsx)(kr,{color:d.color}),(0,K.jsxs)(Sr,{children:[(0,K.jsx)(Tr,{children:d.name}),(0,K.jsx)(Dr,{children:J(d.revenue,d.currencyCode)})]}),(0,K.jsxs)(Pr,{children:[d.percentage,\"%\"]}),d.trend?.revenue?(0,K.jsx)(Rr,{direction:u,\"data-testid\":`offer-legend-trend-${b}`,\"aria-label\":d.trend.revenue,children:xe(u)}):null]},d.id)})})]})]})},Ko=ea.default.memo(zc);Ko.displayName=\"TopPerformingOffersPieChart\";var He=require(\"react/jsx-runtime\"),Bc=[],Ec=[],Hc=[],ta=({stats:e,topProducts:t,conversionData:a,topOffers:n,isLoading:i=!1,error:p,dashboardTitle:s,className:c,dateRange:x=\"last30days\",market:y=\"all\",productSort:g=\"units\",conversionFilter:w=\"all\",offerSort:d=\"revenue\",conversionSummaryRate:b,conversionSummaryChangePct:u,markets:C,onDateRangeChange:m,onMarketChange:S,onProductSortChange:D,onConversionFilterChange:T,onOfferSortChange:O,onProductsTitleClick:G,onConversionTitleClick:ee,onOffersTitleClick:V})=>{let z=t??Bc,Z=a??Ec,F=n??Hc,l=h=>h?h.startsWith(\"+\")&&h!==\"+0%\"?\"up\":h.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\";return p?(0,He.jsx)(Za,{as:\"main\",className:c,\"aria-label\":B(I.ariaLabel.dashboard),children:(0,He.jsxs)(ip,{\"data-testid\":\"dashboard-error\",role:\"alert\",\"aria-live\":\"assertive\",children:[(0,He.jsxs)(\"strong\",{children:[B(I.error),\":\"]}),\" \",p]})}):(0,He.jsxs)(Za,{as:\"main\",className:c,\"data-testid\":\"product-offer-dashboard\",\"aria-label\":B(I.ariaLabel.dashboard),\"aria-busy\":i,children:[(0,He.jsx)(uo,{shopTitle:s??B(I.title),dateRange:x,market:y,isLoading:i,markets:C,stats:e?{shopTitle:e.shopTitle??\"\",dateRange:e.dateRange,selectedMarket:e.selectedMarket,metrics:{revenue:e.metrics.revenue,volume:\"\",siteVisits:\"\",conversionRate:e.metrics.conversionRate},trend:{}}:void 0,onDateRangeChange:m,onMarketChange:S}),(0,He.jsxs)(rp,{\"data-testid\":\"top-charts-row\",children:[(0,He.jsx)(Xt,{conversionData:Z,conversionFilter:w,isLoading:i,summaryRate:b,summaryChangePct:u,onFilterChange:T,onTitleClick:ee}),(0,He.jsxs)(ap,{\"data-testid\":\"stats-card-stack\",children:[(0,He.jsx)(xt,{layout:\"split\",title:B(I.stats.revenue),value:e?.metrics?.revenue??\"$0\",trendDirection:l(e?.trend?.revenue),trendValue:e?.trend?.revenue,caption:B(I.stats.comparedTo),testId:\"stats-card-revenue\",isLoading:i}),(0,He.jsx)(xt,{layout:\"split\",title:B(I.stats.offersPurchased),value:e?.metrics?.offersPurchased??\"0\",trendDirection:l(e?.trend?.offersPurchased),trendValue:e?.trend?.offersPurchased,caption:B(I.stats.comparedTo),testId:\"stats-card-offers-purchased\",isLoading:i})]})]}),(0,He.jsxs)(np,{\"data-testid\":\"bottom-charts-row\",children:[(0,He.jsx)(Qt,{products:z,productSort:g,isLoading:i,maxProducts:5,onSortChange:D,onTitleClick:G}),(0,He.jsx)(Ko,{offers:F,offerSort:d,isLoading:i,onSortChange:O,onTitleClick:V})]})]})};var ce=M(require(\"react\"));var Rt=M(require(\"react\")),Mt=require(\"recharts\");var te=require(\"@mui/material/styles\"),X=require(\"@mui/material\"),lp=require(\"@nuskin/foundation-theme\"),{getGenomeColor:qa}=lp.ColorUtils,sp=(0,te.styled)(X.Box)`\n display: flex;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>qa(e,\"N20\")};\n border-radius: 8px;\n box-shadow: ${({theme:e})=>e.shadows[1]};\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n }\n`,dp=(0,te.styled)(X.Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n\n @media (max-width: 767px) {\n width: 100%;\n height: 220px;\n }\n`,pp=(0,te.styled)(X.Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n pointer-events: none;\n z-index: 1;\n width: 120px;\n`,cp=(0,te.styled)(X.Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,up=(0,te.styled)(X.Typography)`\n margin-top: 2px;\n font-size: 1.25rem;\n line-height: 1.2;\n font-weight: 700;\n color: ${({theme:e})=>e.palette.text.primary};\n`,gp=(0,te.styled)(X.Typography)`\n margin-top: 2px;\n font-size: 0.875rem;\n line-height: 1.2;\n font-weight: 600;\n color: ${({direction:e,theme:t})=>e===\"up\"?t.palette.success.main:e===\"down\"?t.palette.error.main:t.palette.text.secondary};\n`,fp=(0,te.styled)(X.Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1;\n`,mp=(0,te.styled)(X.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>qa(e,\"N30\")};\n }\n`,oa=(0,te.styled)(X.Box)`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({dotColor:e})=>e};\n flex-shrink: 0;\n`,hp=(0,te.styled)(X.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,bp=(0,te.styled)(X.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,xp=(0,te.styled)(X.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,yp=(0,te.styled)(X.Typography)`\n font-size: 1rem;\n font-weight: 600;\n flex-shrink: 0;\n`,wp=(0,te.styled)(X.Box)`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({theme:e,direction:t})=>t===\"up\"?e.palette.success.main:t===\"down\"?e.palette.error.main:e.palette.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`,Cp=(0,te.styled)(X.Box)`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-weight: 600;\n color: ${({theme:e,direction:t})=>t===\"up\"?e.palette.success.main:t===\"down\"?e.palette.error.main:e.palette.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`,vp=(0,te.styled)(X.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,kp=(0,te.styled)(X.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Sp=(0,te.styled)(X.Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>qa(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,Tp=(0,te.styled)(X.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Dp=(0,te.styled)(X.Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n color: ${({theme:e})=>e.palette.text.primary};\n word-break: break-word;\n`,Pp=(0,te.styled)(X.Box)`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n padding-top: 12px;\n border-top: 1px solid ${({theme:e})=>e.palette.divider};\n`,ra=(0,te.styled)(X.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`,aa=(0,te.styled)(X.Typography)`\n font-size: 0.625rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n text-transform: uppercase;\n`,Qa=(0,te.styled)(X.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n`,Rp=(0,te.styled)(X.Typography)`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 0.875rem;\n font-weight: 600;\n color: ${({theme:e,direction:t})=>t===\"up\"?e.palette.success.main:t===\"down\"?e.palette.error.main:e.palette.text.secondary};\n\n svg {\n width: 14px;\n height: 14px;\n font-size: 14px;\n }\n`;var P=require(\"react/jsx-runtime\"),na=({offers:e,dateRange:t,market:a,offerSort:n,markets:i,isLoading:p=!1,onBack:s,onDateRangeChange:c,onMarketChange:x,onOfferSortChange:y})=>{let[g,w]=(0,Rt.useState)(1),d=10,b=kt(),u=Rt.default.useCallback(()=>s?.(),[s]),C=Xe(i),m=Rt.default.useMemo(()=>[Ct(t,I),vt(a,C,I),{key:\"sort\",label:B(I.filter.offerSort.byRevenue),value:n,options:[{value:\"revenue\",label:B(I.filter.offerSort.byRevenue)},{value:\"units\",label:B(I.filter.offerSort.byUnits)}]}],[t,a,C,n]),S=Rt.default.useCallback((l,h)=>{l===\"dateRange\"?c?.(h):l===\"market\"?x?.(h):l===\"sort\"&&(y?.(h),w(1))},[y,c,x]),D=Rt.default.useMemo(()=>[...e].sort((l,h)=>n===\"revenue\"?h.revenue-l.revenue:h.percentage-l.percentage),[e,n]),{totalRevenue:T,totalRevenueTrendDirection:O,totalRevenueTrend:G}=Rt.default.useMemo(()=>{let l=D.reduce((f,E)=>f+E.revenue,0),{direction:h,formatted:v}=Et(D,f=>f.revenue,f=>f.trend?.revenue);return{totalRevenue:l,totalRevenueTrendDirection:h,totalRevenueTrend:v}},[D]),ee=Rt.default.useMemo(()=>D.slice(0,5),[D]),{totalPages:V,pageItems:z}=yt(D,g,d),Z=Rt.default.useMemo(()=>[{key:\"name\",label:B(I.fullView.topOffers.columnName),sortable:!0,render:(l,h)=>(0,P.jsxs)(Zr,{children:[(0,P.jsx)(oa,{dotColor:h.color}),(0,P.jsx)(\"span\",{children:h.name})]})},{key:\"revenue\",label:B(I.fullView.topOffers.columnRevenue),sortable:!0,render:(l,h)=>J(Number(l),h.currencyCode)},{key:\"percentage\",label:B(I.fullView.topOffers.columnPercentage),sortable:!0,render:l=>`${Number(l)}%`},{key:\"trend\",label:B(I.fullView.topOffers.columnTrend),render:(l,h)=>{if(!h.trend?.revenue)return B(I.defaults.noData);let v=qt(h.trend.revenue);return(0,P.jsxs)(Cp,{direction:v,children:[xe(v),(0,P.jsx)(\"span\",{children:h.trend.revenue})]})}}],[]),F=D[0]?.currencyCode;return p?(0,P.jsxs)(De,{\"data-testid\":\"top-offers-full-view\",children:[(0,P.jsx)(be,{title:B(I.fullView.topOffers.title),dateRange:me(t),onBack:u,filters:m,onFilterChange:S}),(0,P.jsx)(Ht,{})]}):e.length===0?(0,P.jsxs)(De,{\"data-testid\":\"top-offers-full-view\",children:[(0,P.jsx)(be,{title:B(I.fullView.topOffers.title),dateRange:me(t),onBack:u,filters:m,onFilterChange:S}),(0,P.jsx)(Ut,{\"data-testid\":\"top-offers-fullview-empty\",children:B(I.widget.topPerformingOffers.emptyState)})]}):(0,P.jsxs)(De,{\"data-testid\":\"top-offers-full-view\",children:[(0,P.jsx)(be,{title:B(I.fullView.topOffers.title),dateRange:me(t),onBack:u,filters:m,onFilterChange:S}),(0,P.jsxs)(sp,{\"data-testid\":\"top-offers-fullview-top-section\",children:[(0,P.jsxs)(dp,{\"data-testid\":\"top-offers-fullview-chart\",children:[(0,P.jsx)(Mt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,P.jsxs)(Mt.PieChart,{children:[(0,P.jsx)(Mt.Pie,{data:D,cx:\"50%\",cy:\"50%\",innerRadius:\"50%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:D.map(l=>(0,P.jsx)(Mt.Cell,{fill:l.color},`cell-${l.id}`))}),(0,P.jsx)(Mt.Tooltip,{formatter:l=>J(l,F)})]})}),(0,P.jsxs)(pp,{\"data-testid\":\"top-offers-fullview-donut-center\",children:[(0,P.jsx)(cp,{children:B(I.widget.topPerformingOffers.totalRevenue)}),(0,P.jsx)(up,{children:J(T,F)}),(0,P.jsx)(gp,{direction:O,children:G})]})]}),(0,P.jsx)(fp,{\"data-testid\":\"top-offers-fullview-summary\",children:ee.map(l=>{let h=qt(l.trend?.revenue);return(0,P.jsxs)(mp,{children:[(0,P.jsx)(oa,{dotColor:l.color}),(0,P.jsxs)(hp,{children:[(0,P.jsx)(bp,{children:l.name}),(0,P.jsx)(xp,{children:J(l.revenue,l.currencyCode)})]}),(0,P.jsxs)(yp,{children:[l.percentage,\"%\"]}),l.trend?.revenue?(0,P.jsx)(wp,{direction:h,\"aria-label\":l.trend.revenue,children:xe(h)}):null]},l.id)})})]}),(0,P.jsxs)(Kt,{\"data-testid\":\"top-offers-table\",children:[(0,P.jsxs)(_t,{\"data-testid\":\"top-offers-fullview-table-title\",children:[B(I.fullView.topOffers.title),\" (\",D.length,\")\"]}),b?(0,P.jsx)(kp,{children:z.map(l=>{let h=bt(l.trend?.revenue),v=\"neutral\";return h!==null&&h>0?v=\"up\":h!==null&&h<0&&(v=\"down\"),(0,P.jsxs)(Sp,{children:[(0,P.jsxs)(Tp,{children:[(0,P.jsx)(oa,{dotColor:l.color}),(0,P.jsx)(Dp,{children:l.name})]}),(0,P.jsxs)(Pp,{children:[(0,P.jsxs)(ra,{children:[(0,P.jsx)(aa,{children:B(I.fullView.topOffers.columnRevenue)}),(0,P.jsx)(Qa,{children:J(l.revenue,l.currencyCode)})]}),(0,P.jsxs)(ra,{children:[(0,P.jsx)(aa,{children:B(I.fullView.topOffers.columnPercentage)}),(0,P.jsxs)(Qa,{children:[l.percentage,\"%\"]})]}),(0,P.jsxs)(ra,{children:[(0,P.jsx)(aa,{children:B(I.fullView.topOffers.columnTrend)}),(0,P.jsx)(Rp,{direction:v,children:l.trend?.revenue?(0,P.jsxs)(P.Fragment,{children:[xe(v),(0,P.jsx)(\"span\",{children:l.trend.revenue})]}):B(I.defaults.noData)})]})]})]},l.id)})}):(0,P.jsx)(vp,{children:(0,P.jsx)(rt,{columns:Z,data:z,sortable:!0,getRowKey:l=>l.id})}),V>1&&(0,P.jsx)(at,{currentPage:g,totalPages:V,onPageChange:w,itemsPerPage:d,totalItems:D.length,\"data-testid\":\"top-offers-pagination\"})]})]})};var Uo=require(\"react/jsx-runtime\"),Wc=\"productOfferDashboardView\",_c=[],Kc=[],Uc=[],Gc=[];function Op(e){return typeof e==\"object\"&&e!==null}function Yc(e){return e===\"dashboard\"||e===\"products\"||e===\"conversion-rate\"||e===\"top-offers\"}function ia(e,t){if(!Op(e))return\"dashboard\";let a=e[t];return Yc(a)?a:\"dashboard\"}function Mp(e,t,a){return{...Op(e)?e:{},[t]:a}}function jc(e,t){return{pathname:e?.pathname,search:e?.search,hash:e?.hash,state:t}}var Fp=({stats:e,topProducts:t,conversionData:a,topOffers:n,isLoading:i=!1,error:p,dashboardTitle:s,className:c,allProducts:x,orders:y,allOffers:g,conversionSummaryRate:w,conversionSummaryChangePct:d,conversionFullViewData:b,conversionFullViewRate:u,conversionFullViewChangePct:C,initialDateRange:m=\"last30days\",initialMarket:S=\"all\",initialProductSort:D=\"units\",initialConversionFilter:T=\"all\",initialOfferSort:O=\"revenue\",markets:G,translate:ee,historyAdapter:V,historyStateKey:z=Wc,resetToDashboardOnMount:Z=!0,onDateRangeChange:F,onMarketChange:l,onProductSortChange:h,onConversionFilterChange:v,onOfferSortChange:f,onViewChange:E})=>{oo(ee);let[ie,Ot]=ce.default.useState(\"dashboard\"),Ce=ce.default.useRef(!1),[Ze,Yt]=ce.default.useState(m),[Ft,ue]=ce.default.useState(S),[Lt,ut]=ce.default.useState(D),[no,io]=ce.default.useState(T),[Go,Yo]=ce.default.useState(O),Mo=t??_c,Oo=a??Kc,Fo=n??Uc,da=x??Mo,pa=y??Gc,it=g??Fo,qe=ce.default.useCallback(q=>{Ot(q),E?.(q)},[E]),$t=ce.default.useCallback(()=>V?ia(V.location?.state,z):typeof window>\"u\"?\"dashboard\":ia(window.history.state,z),[V,z]),Ae=ce.default.useCallback((q,H)=>{if(V){let Qe=Mp(V.location?.state,z,q),Jt=jc(V.location,Qe);if(H===\"replace\"){V.replace(Jt);return}V.push(Jt);return}if(typeof window>\"u\")return;let We=Mp(window.history.state,z,q);if(H===\"replace\"){window.history.replaceState(We,\"\");return}window.history.pushState(We,\"\")},[V,z]);ce.default.useEffect(()=>{if(Z?(Ae(\"dashboard\",\"replace\"),Ce.current=!1,qe(\"dashboard\")):qe($t()),V)return V.listen((H,We)=>{if(We===\"POP\"){let Qe=ia(H.state,z);Ce.current=Qe!==\"dashboard\",qe(Qe)}});let q=H=>{let We=ia(H.state,z);Ce.current=We!==\"dashboard\",qe(We)};return window.addEventListener(\"popstate\",q),()=>{window.removeEventListener(\"popstate\",q)}},[V,z,$t,Z,qe,Ae]);let lt=ce.default.useCallback(q=>{Ce.current=!0,Ae(q,\"push\"),qe(q)},[qe,Ae]),Nt=ce.default.useCallback(()=>{if(ie!==\"dashboard\"&&Ce.current){if(V){V.goBack();return}typeof window<\"u\"&&window.history.back();return}Ce.current=!1,Ae(\"dashboard\",\"replace\"),qe(\"dashboard\")},[ie,V,qe,Ae]),gt=ce.default.useCallback(q=>{Yt(q),F?.(q)},[F]),jt=ce.default.useCallback(q=>{ue(q),l?.(q)},[l]),Lo=ce.default.useCallback(q=>{ut(q),h?.(q)},[h]),$o=ce.default.useCallback(q=>{io(q),v?.(q)},[v]),No=ce.default.useCallback(q=>{Yo(q),f?.(q)},[f]),ca=ce.default.useCallback(()=>{lt(\"products\")},[lt]),ua=ce.default.useCallback(()=>{lt(\"conversion-rate\")},[lt]),ga=ce.default.useCallback(()=>{lt(\"top-offers\")},[lt]);return ie===\"products\"?(0,Uo.jsx)(wo,{products:da,dateRange:Ze,market:Ft,productSort:Lt,markets:G,isLoading:i,onBack:Nt,onDateRangeChange:gt,onMarketChange:jt,onProductSortChange:Lo}):ie===\"conversion-rate\"?(0,Uo.jsx)(Co,{conversionData:b??Oo,orders:pa,summaryRate:u??w,summaryChangePct:C??d,dateRange:Ze,market:Ft,conversionFilter:no,markets:G,isLoading:i,onBack:Nt,onDateRangeChange:gt,onMarketChange:jt,onConversionFilterChange:$o}):ie===\"top-offers\"?(0,Uo.jsx)(na,{offers:it,dateRange:Ze,market:Ft,offerSort:Go,markets:G,isLoading:i,onBack:Nt,onDateRangeChange:gt,onMarketChange:jt,onOfferSortChange:No}):(0,Uo.jsx)(ta,{stats:e,topProducts:Mo,conversionData:Oo,topOffers:Fo,isLoading:i,error:p,dashboardTitle:s,className:c,dateRange:Ze,market:Ft,productSort:Lt,conversionFilter:no,offerSort:Go,conversionSummaryRate:w,conversionSummaryChangePct:d,markets:G,onDateRangeChange:gt,onMarketChange:jt,onProductSortChange:Lo,onConversionFilterChange:$o,onOfferSortChange:No,onProductsTitleClick:ca,onConversionTitleClick:ua,onOffersTitleClick:ga})};var Do=require(\"@nuskin/foundation-theme\"),{getGenomeColor:ro}=Do.ColorUtils,Lp=(0,Do.styled)(\"div\")`\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n`,$p=(0,Do.styled)(\"select\")`\n min-width: 160px;\n height: 40px;\n padding: 8px 12px;\n background-color: ${({theme:e})=>ro(e,\"N20\")};\n border: 1px solid ${({theme:e})=>ro(e,\"N40\")};\n border-radius: 8px;\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>ro(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>ro(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>ro(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>ro(e,\"A20\")};\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n`,Np=(0,Do.styled)(\"label\")`\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n color: ${({theme:e})=>ro(e,\"N70\")};\n`;var Po=require(\"react/jsx-runtime\"),Vp=({filters:e,onChange:t})=>(0,Po.jsx)(Lp,{\"data-testid\":\"filter-bar\",children:e.map(a=>(0,Po.jsxs)(Np,{htmlFor:`filter-${a.key}`,children:[a.label,(0,Po.jsx)($p,{id:`filter-${a.key}`,value:a.value,onChange:n=>t(a.key,n.target.value),disabled:a.disabled,\"aria-label\":`${a.label} ${r(o.ariaLabel.filterSuffix)}`,\"data-testid\":`filter-dropdown-${a.key}`,children:a.options.map(n=>(0,Po.jsx)(\"option\",{value:n.value,children:n.label},n.value))})]},a.key))});var Xa={shopTitle:\"My NuSkin Shop\",dateRange:{start:\"2026-03-01\",end:\"2026-03-31\",label:\"Mar 1 - Mar 31\"},selectedMarket:\"all\",metrics:{revenue:\"$9,453\",volume:\"1,211\",siteVisits:\"17,935\",conversionRate:\"4.2%\"},trend:{revenue:\"+12.5%\",volume:\"+8.3%\",siteVisits:\"-2.1%\"}},la=[{id:\"prod-001\",rank:1,name:\"ageLOC LumiSpa\",imageUrl:\"\",unitsSold:342,revenue:29580,volume:245,trend:{units:\"+15%\",revenue:\"+12%\",volume:\"+8%\"}},{id:\"prod-002\",rank:2,name:\"Pharmanex LifePak\",imageUrl:\"\",unitsSold:287,revenue:24395,volume:198,trend:{units:\"+8%\",revenue:\"+10%\",volume:\"+5%\"}},{id:\"prod-003\",rank:3,name:\"ageLOC Meta\",imageUrl:\"\",unitsSold:256,revenue:21760,volume:176,trend:{units:\"-3%\",revenue:\"-1%\",volume:\"-2%\"}},{id:\"prod-004\",rank:4,name:\"Nu Skin 180 System\",imageUrl:\"\",unitsSold:198,revenue:17820,volume:142,trend:{units:\"+22%\",revenue:\"+18%\",volume:\"+15%\"}},{id:\"prod-005\",rank:5,name:\"Epoch Baobab Body Butter\",imageUrl:\"\",unitsSold:176,revenue:8800,volume:88,trend:{units:\"+5%\",revenue:\"+3%\",volume:\"+2%\"}}],Ro=Array.from({length:30},(e,t)=>{let a=new Date(\"2026-03-01\");return a.setDate(a.getDate()+t),{date:`${[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"][a.getMonth()]} ${a.getDate()}`,rate:Number((4+t%15*.1).toFixed(2)),orders:200+t*13%100,siteVisits:4e3+t*97%2e3}}),Jc=Ro.map(e=>({...e,rate:Number((e.rate*1.35).toFixed(2)),orders:Math.round(e.orders*.7)})),Zc=Ro.map(e=>({...e,rate:Number((e.rate*.55).toFixed(2)),orders:Math.round(e.orders*.3)})),en=Array.from({length:30},(e,t)=>{let a=new Date(\"2026-03-01\");a.setDate(a.getDate()+t);let n=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],i=80+t*11%40,p=Math.floor(i*.4),s=Math.floor(i*.35),c=i-p-s;return{date:`${n[a.getMonth()]} ${a.getDate()}`,total:i,members:p,retail:s,brandAffiliates:c}}),tn=[{id:\"cat-001\",name:\"Favorites\",revenue:45200,percentage:29,color:\"#C95D63\",trend:{revenue:\"+8%\",units:\"+10%\"}},{id:\"cat-002\",name:\"Daily Routine\",revenue:42100,percentage:27,color:\"#6C7A9B\",trend:{revenue:\"+12%\",units:\"+15%\"}},{id:\"cat-003\",name:\"Fit & Trim Body\",revenue:34300,percentage:22,color:\"#E8975E\",trend:{revenue:\"-3%\",units:\"-1%\"}},{id:\"cat-004\",name:\"Dull Skin\",revenue:24900,percentage:16,color:\"#5F8FC4\",trend:{revenue:\"+5%\",units:\"+7%\"}},{id:\"cat-005\",name:\"Acne\",revenue:9400,percentage:6,color:\"#A2C3B3\",trend:{revenue:\"+2%\",units:\"+3%\"}}],sa=Array.from({length:50},(e,t)=>{let a=[\"Sarah\",\"John\",\"Emma\",\"Michael\",\"Olivia\",\"William\",\"Ava\",\"James\"],n=[\"Smith\",\"Johnson\",\"Williams\",\"Brown\",\"Jones\",\"Garcia\",\"Miller\",\"Davis\"],i=new Date(\"2026-03-31\");return i.setDate(i.getDate()-t%30),{orderId:`ORD-${String(1e4+t).padStart(5,\"0\")}`,date:i.toLocaleDateString(\"en-US\",{month:\"short\",day:\"numeric\",year:\"numeric\"}),customerName:`${a[t%a.length]} ${n[t%n.length]}`,customerType:t%3===0?\"Subscription\":\"Standard\",items:t%5+1,total:Number((50+t*17%200+t%10*.1).toFixed(2)),bv:30+t*9%150}}),on=Array.from({length:30},(e,t)=>{let a=[\"Alice\",\"Bob\",\"Carol\",\"David\",\"Eva\",\"Frank\",\"Grace\",\"Henry\"],n=[\"Anderson\",\"Baker\",\"Clark\",\"Davis\",\"Evans\",\"Fisher\",\"Grant\",\"Hall\"],i=[\"Member\",\"Retail\",\"Brand Affiliate\"],p=new Date(\"2026-03-31\");return p.setDate(p.getDate()-t%30),{id:`SU-${String(1e3+t).padStart(4,\"0\")}`,name:`${a[t%a.length]} ${n[t%n.length]}`,date:p.toLocaleDateString(\"en-US\",{month:\"short\",day:\"numeric\",year:\"numeric\"}),type:i[t%i.length],email:`${a[t%a.length].toLowerCase()}.${n[t%n.length].toLowerCase()}@example.com`,status:t%4===0?\"Pending\":\"Active\"}});var ao={shopTitle:\"Performance Overview\",dateRange:{start:\"2026-03-01\",end:\"2026-03-31\",label:\"Mar 1 - Mar 31\"},selectedMarket:\"all\",metrics:{revenue:\"$5,208\",offersPurchased:\"285\",conversionRate:\"4.2%\"},trend:{revenue:\"+2.3%\",offersPurchased:\"+3.7%\"}},Ah={...ao,trend:{revenue:\"+5.1%\",offersPurchased:\"+12.5%\"}},zh={...ao,trend:{revenue:\"-1.8%\",offersPurchased:\"-3.7%\"}},Bh={...ao,trend:{revenue:\"+0%\",offersPurchased:\"+0%\"}},Eh={...ao,metrics:{...ao.metrics,offersPurchased:\"0\"},trend:{revenue:\"+0%\",offersPurchased:\"+0%\"}},Ip=[{id:\"offer-1\",name:\"Winter Skincare Bundle\",revenue:2800,percentage:29,color:\"#6B8E7B\",trend:{revenue:\"-4.2%\"}},{id:\"offer-2\",name:\"Supplement Starter Pack\",revenue:2500,percentage:27,color:\"#E8915A\",trend:{revenue:\"+3.1%\"}},{id:\"offer-3\",name:\"Holiday Special Bundle\",revenue:2100,percentage:22,color:\"#C75B5B\",trend:{revenue:\"-1.5%\"}},{id:\"offer-4\",name:\"LumiSpa Cleansing Kit\",revenue:1500,percentage:16,color:\"#5B8EC7\",trend:{revenue:\"+2.8%\"}},{id:\"offer-5\",name:\"Daily Wellness Bundle\",revenue:529,percentage:6,color:\"#9B8EC7\",trend:{revenue:\"+7.2%\"}}];\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","export * from './common';\n","import React, { ReactElement, useState } from 'react';\nimport { NsImage } from '@nuskin/foundation-ui-components';\nimport { ProductImageType } from '../types/image';\nimport {\n PriceComponent,\n ProductCardContainer,\n ImageContainer,\n DefaultImage,\n ProductTitle,\n ProductBadgeContainer,\n AddToCartButton,\n CartIcon,\n} from './styles/NsProductCard.Styled';\nimport { useMediaQuery } from '@mui/material';\nimport { NsCardButton } from './types';\n\ntype NsProductCardProps = {\n readonly productTitle: string;\n readonly imageDetails?: ProductImageType;\n readonly className?: string;\n readonly button?: NsCardButton & { disabled?: boolean };\n readonly onCardClick?: () => void;\n readonly productStatusBadge?: React.ReactNode;\n readonly directSellerBadge?: React.ReactNode;\n readonly mySitePriceComponent?: React.ReactNode;\n readonly testId?: string;\n};\n\nconst NsProductCard = ({\n productTitle,\n imageDetails,\n className,\n button,\n onCardClick,\n productStatusBadge,\n directSellerBadge,\n mySitePriceComponent,\n testId,\n}: NsProductCardProps): ReactElement => {\n const [isButtonHovered, setIsButtonHovered] = useState(false);\n const isMobile = useMediaQuery('(max-width: 560px)');\n\n const handleImageError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n const target = e.target as HTMLImageElement;\n const noImageFallback = imageDetails?.fallbackImage;\n if (noImageFallback && target.src !== noImageFallback) {\n target.src = noImageFallback;\n }\n };\n\n return (\n <ProductCardContainer\n className={className}\n onClick={onCardClick}\n tabIndex={0}\n data-testid=\"product-card\"\n isMobile={isMobile}\n >\n <ImageContainer bgColor={imageDetails?.bgColor} onError={handleImageError}>\n {imageDetails?.imageSrc ? (\n <NsImage\n data-testid={testId ?? 'test-product-image'}\n className={imageDetails.className ?? ''}\n src={imageDetails.imageSrc}\n alt={imageDetails.imageAlt}\n aria-label={imageDetails.areaLabel ?? imageDetails.imageAlt}\n width={'100%'}\n />\n ) : (\n <DefaultImage alt=\"\" />\n )}\n </ImageContainer>\n <ProductTitle title={productTitle} data-testid=\"product-title\">\n {productTitle}\n </ProductTitle>\n {directSellerBadge && <ProductBadgeContainer>{directSellerBadge}</ProductBadgeContainer>}\n <ProductBadgeContainer>{productStatusBadge}</ProductBadgeContainer>\n <PriceComponent>{mySitePriceComponent}</PriceComponent>\n {button?.showButton && (\n <AddToCartButton\n tabIndex={0}\n aria-roledescription=\":\"\n aria-label={button.buttonText || 'ADD TO CART'}\n data-testid=\"add-to-cart-button\"\n disabled={button?.disabled ?? false}\n isMobile={isMobile}\n isHovered={isButtonHovered}\n onClick={(e) => {\n e.stopPropagation();\n if (!button?.disabled) {\n button.onClick?.();\n }\n }}\n onMouseEnter={() => {\n if (!isMobile && !button?.disabled) {\n setIsButtonHovered(true);\n }\n }}\n onMouseLeave={() => {\n if (!isMobile) {\n setIsButtonHovered(false);\n }\n }}\n >\n <CartIcon className=\"cart-icon\" disabled={button?.disabled}>\n <svg width=\"24\" height=\"22\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 1.86358C0 1.26109 0.488416 0.772675 1.09091 0.772675H3.48173C4.51054 0.772675 5.39955 1.49136 5.61511 2.49733L5.71309 2.95456H22.9091C23.245 2.95456 23.5622 3.10933 23.7689 3.37411C23.9757 3.63889 24.0489 3.98415 23.9674 4.31005L22.4053 10.5583C21.9197 12.5009 20.1743 13.8636 18.172 13.8636H8.05068L8.28444 14.9546H20.7273C21.3298 14.9546 21.8182 15.443 21.8182 16.0455C21.8182 16.648 21.3298 17.1364 20.7273 17.1364H19.6364H8.18182H7.40252C6.88811 17.1364 6.4436 16.777 6.33582 16.274L3.76449 4.27405L3.48173 2.95449H1.09091C0.488416 2.95449 0 2.46608 0 1.86358ZM8.18182 17.1364C6.97683 17.1364 6 18.1132 6 19.3182C6 20.5232 6.97683 21.5 8.18182 21.5C9.3868 21.5 10.3636 20.5232 10.3636 19.3182C10.3636 18.1132 9.3868 17.1364 8.18182 17.1364ZM19.6364 17.1364C18.4314 17.1364 17.4545 18.1132 17.4545 19.3182C17.4545 20.5232 18.4314 21.5 19.6364 21.5C20.8413 21.5 21.8182 20.5232 21.8182 19.3182C21.8182 18.1132 20.8413 17.1364 19.6364 17.1364ZM7.58317 11.6818H18.172C19.1732 11.6818 20.0459 11.0005 20.2887 10.0292L21.5119 5.13638H6.18062L7.58317 11.6818Z\"\n fill={button?.disabled ? '#999' : '#ffffff'}\n />\n </svg>\n </CartIcon>\n {button.buttonText || 'ADD TO CART'}\n </AddToCartButton>\n )}\n </ProductCardContainer>\n );\n};\n\nexport default NsProductCard;\n","import { styled } from '@nuskin/foundation-theme';\n\nexport const PriceComponent = styled('div')`\n width: 200px;\n text-align: left;\n margin-bottom: 5px;\n`;\n\nexport const ProductCardContainer = styled('button')<{ isMobile: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n width: 240px;\n height: ${(props) => (props.isMobile ? '410px' : '513px')};\n overflow: hidden;\n cursor: pointer;\n border: 1px solid #ededed;\n background: var(--color-primary-n-10-primary-white, #fff);\n`;\n\nexport const ImageContainer = styled('div')<{\n bgColor?: string;\n}>`\n width: '240px';\n height: '240px';\n background: ${(props) => props.bgColor ?? '#f5f5f5'};\n border-radius: 8px;\n overflow: hidden;\n margin-bottom: 0;\n display: flex;\n align-items: normal;\n justify-content: center;\n position: relative;\n @media (max-width: 560px) {\n width: 200px;\n height: 200px;\n align-items: unset;\n }\n`;\n\nexport const DefaultImage = styled('img')`\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 8px;\n display: block;\n`;\n\nexport const ProductTitle = styled('div')`\n width: 200px;\n margin-top: 16px;\n max-height: 66px;\n text-align: left;\n font-size: 16px;\n font-family: 'Inter', sans-serif;\n font-weight: 400;\n line-height: 22px;\n overflow: hidden;\n color: #666;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n @media (max-width: 560px) {\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n margin-top: 5px;\n max-height: 54px;\n line-height: 18px;\n }\n`;\n\nexport const ProductBadgeContainer = styled('div')`\n width: 200px;\n text-align: left;\n margin-bottom: 12px;\n @media (max-width: 560px) {\n margin-bottom: 8px;\n }\n`;\n\nexport const AddToCartButton = styled('button')<{\n disabled?: boolean;\n isMobile: boolean;\n isHovered: boolean;\n}>`\n width: 200px;\n height: 40px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 10px;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0.14px;\n text-transform: none;\n justify-content: flex-start;\n padding-left: 31px;\n overflow: hidden;\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n text-overflow: ellipsis;\n margin-top: 8px;\n margin-bottom: 10px;\n -webkit-appearance: none;\n -webkit-tap-highlight-color: transparent;\n\n color: ${(props) => (props.disabled ? '#999' : '#fff')};\n background-color: ${(props) => {\n if (props.disabled) return '#e0e0e0';\n if (!props.isMobile && props.isHovered) return '#888';\n return '#000';\n }};\n border: ${(props) => (props.disabled ? '1px solid #ccc' : 'none')};\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n opacity: ${(props) => (props.disabled ? 0.6 : 1)};\n transition: ${(props) => (props.isMobile ? 'none' : 'all 0.3s ease')};\n\n @media (max-width: 560px) {\n margin: 5px 0;\n }\n`;\n\nexport const CartIcon = styled('span')<{ disabled?: boolean }>`\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n display: inline-block;\n background: none;\n transition: all 0.3s ease;\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n`;\n","import React, { ReactElement, useCallback, ReactNode, useRef } from 'react';\nimport Slider from 'react-slick';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport 'slick-carousel/slick/slick.css';\nimport { NsCardButton, NsCarouselControl } from '@nuskin/foundation-ui-components';\nimport { ProductImageType } from '../types/image';\nimport NsProductCard from '../card/NsProductCard';\nimport {\n SlickContainer,\n ControlsContainer,\n ControlsHeaderRow,\n ScrollableContainer,\n CardList,\n ViewAllWrapper,\n ProductCountWrapper,\n ArrowsWrapper,\n CustomTypography,\n ViewAllLink,\n ProductInfoWrapper,\n CategoryNameWrapper,\n EmptyProductCategories,\n} from './NsProductCarousel.styled';\n\nexport type ProductCardEntry = {\n readonly productTitle: string;\n readonly imageDetails?: ProductImageType;\n readonly button?: NsCardButton;\n readonly onCardClick?: () => void;\n readonly productStatusBadge?: React.ReactNode;\n readonly directSeller?: React.ReactNode;\n readonly mySitePriceComponent?: React.ReactNode;\n};\n\ninterface SlickSettings {\n dots?: boolean;\n infinite?: boolean;\n speed?: number;\n slidesToShow?: number;\n slidesToScroll?: number;\n swipe?: boolean;\n draggable?: boolean;\n arrows?: boolean;\n responsive?: Array<{\n breakpoint: number;\n settings: {\n slidesToShow?: number;\n slidesToScroll?: number;\n arrows?: boolean;\n };\n }>;\n}\n\ninterface ProductCardCarouselProps<T = ProductCardEntry> {\n readonly entries: T[];\n readonly settings?: SlickSettings;\n readonly showControlButtons?: boolean;\n readonly renderEntry?: (entry: T, index: number) => ReactNode;\n readonly allEntryLabel?: string;\n readonly allEntryLink?: string;\n readonly categoryName?: string;\n readonly emptyProductMessage?: string;\n readonly productsCountLabel?: string;\n readonly isInitialDataLoading?: boolean;\n readonly history?: {\n push: (path: string) => void;\n };\n}\n\nexport default function ProductCardCarousel({\n entries,\n renderEntry,\n settings = {},\n showControlButtons = true,\n allEntryLabel = 'View All',\n allEntryLink = '',\n categoryName,\n emptyProductMessage = 'No Products Available For The Selected Category',\n productsCountLabel = 'Products',\n isInitialDataLoading,\n history,\n}: ProductCardCarouselProps): ReactElement {\n const sliderRef = useRef<Slider>(null);\n const isMobile = useMediaQuery('(max-width: 560px)');\n\n const prev = useCallback(() => {\n sliderRef.current?.slickPrev();\n }, []);\n\n const next = useCallback(() => {\n sliderRef.current?.slickNext();\n }, []);\n\n const renderProductEntry =\n renderEntry ??\n ((entry: ProductCardEntry, index: number) => (\n <NsProductCard\n key={`${entry.productTitle}-${index}`}\n productTitle={entry.productTitle}\n imageDetails={entry.imageDetails}\n button={entry.button}\n onCardClick={entry.onCardClick}\n productStatusBadge={entry.productStatusBadge}\n directSellerBadge={entry.directSeller}\n mySitePriceComponent={entry.mySitePriceComponent}\n />\n ));\n\n const sliderSettings = {\n dots: true,\n infinite: true,\n speed: 500,\n slidesToShow: Math.min(entries?.length ?? 0, 4),\n slidesToScroll: 4,\n swipe: true,\n draggable: true,\n arrows: true,\n responsive: [\n {\n breakpoint: 1320,\n settings: {\n slidesToShow: Math.min(entries?.length ?? 0, 3),\n slidesToScroll: 3,\n },\n },\n {\n breakpoint: 900,\n settings: {\n slidesToShow: Math.min(entries?.length ?? 0, 2),\n slidesToScroll: 2,\n },\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n arrows: false,\n },\n },\n ],\n ...settings,\n };\n\n const shouldShowNavigation = (entries?.length ?? 0) > sliderSettings.slidesToShow;\n\n const renderCarouselContent = () => {\n if (entries?.length === 0 && !isInitialDataLoading) {\n return <EmptyProductCategories>{emptyProductMessage}</EmptyProductCategories>;\n }\n\n if (isMobile) {\n return (\n <ScrollableContainer>\n <CardList>{entries.map((entry, index) => entry && renderProductEntry(entry, index))}</CardList>\n </ScrollableContainer>\n );\n }\n\n return (\n <Slider {...sliderSettings} ref={sliderRef}>\n {entries.map((entry, index) => entry && renderProductEntry(entry, index))}\n </Slider>\n );\n };\n\n return (\n <SlickContainer>\n {showControlButtons && (\n <ControlsContainer>\n <ControlsHeaderRow>\n <ProductInfoWrapper>\n <ProductCountWrapper>\n <CustomTypography variant=\"body-m\">\n {entries?.length ?? 0} {productsCountLabel}\n </CustomTypography>\n </ProductCountWrapper>\n {!isMobile && categoryName && <CategoryNameWrapper>{categoryName}</CategoryNameWrapper>}\n </ProductInfoWrapper>\n <ViewAllWrapper $isMobile={isMobile}>\n <ViewAllLink\n $disabled={(entries?.length ?? 0) === 0}\n onClick={(e) => {\n e.preventDefault();\n if ((entries?.length ?? 0) > 0 && history) {\n history.push(allEntryLink);\n }\n }}\n >\n {allEntryLabel}\n </ViewAllLink>\n </ViewAllWrapper>\n </ControlsHeaderRow>\n {!isMobile && (\n <ArrowsWrapper $isDisabled={!shouldShowNavigation}>\n <NsCarouselControl prev={prev} next={next} viewAllLabel={''} viewAllUrl={''} />\n </ArrowsWrapper>\n )}\n </ControlsContainer>\n )}\n {renderCarouselContent()}\n </SlickContainer>\n );\n}\n","import React from 'react';\nimport { styled } from '@nuskin/foundation-theme';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport { NsTypography } from '@nuskin/foundation-ui-components';\n\nexport const SlickContainer: React.ComponentType<BoxProps> = styled(Box)`\n padding: 30px 0 60px;\n width: 100%;\n margin: auto;\n margin-top: 50px;\n position: relative;\n\n .slick-list {\n padding-left: 24px;\n padding-right: 24px;\n }\n .slick-slide {\n display: flex;\n justify-content: center;\n padding: 0 12px;\n box-sizing: border-box;\n }\n .slick-prev,\n .slick-next {\n display: none !important;\n }\n\n @media (max-width: 1200px) {\n max-width: 1024px;\n .slick-list {\n padding-left: 12px;\n padding-right: 12px;\n }\n .slick-slide {\n padding: 0 6px;\n }\n }\n @media (max-width: 700px) {\n max-width: 100vw;\n padding: 10px 0 50px;\n .slick-list {\n padding-left: 4px;\n padding-right: 4px;\n }\n .slick-slide {\n padding: 0 2px;\n }\n }\n @media (max-width: 560px) {\n padding: 10px 0 10px;\n margin-top: 25px;\n }\n`;\nexport const ScrollableContainer = styled('div')`\n overflow-x: auto;\n display: flex;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n gap: 16px;\n padding: 0 8px 16px;\n width: 100%;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #007bff;\n border-radius: 10px;\n }\n`;\n\nexport const CardList = styled('div')`\n display: flex;\n scroll-snap-align: start;\n justify-content: center;\n gap: 15px;\n`;\n\nexport const ControlsContainer: React.ComponentType<BoxProps> = styled(Box)`\n position: absolute;\n bottom: calc(100% + 1px);\n right: 1px;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n`;\n\nexport const ViewAllWrapper: React.ComponentType<BoxProps & { $isMobile?: boolean }> = styled(Box)<{\n $isMobile?: boolean;\n}>`\n display: flex;\n align-items: center;\n margin-left: auto;\n margin-right: ${({ $isMobile }) => ($isMobile ? 0 : '24px')};\n\n @media (max-width: 560px) {\n margin-left: 0;\n order: 2;\n }\n`;\n\nexport const ProductCountWrapper: React.ComponentType<BoxProps> = styled(Box)`\n display: none;\n\n @media (max-width: 560px) {\n color: #666666;\n font-family: Inter;\n font-size: 14px !important;\n font-style: normal;\n font-weight: 600;\n line-height: 18px;\n display: flex;\n align-items: center;\n order: 1;\n }\n`;\n\nexport const ArrowsWrapper: React.ComponentType<BoxProps & { $isDisabled?: boolean }> = styled(Box)<{\n $isDisabled?: boolean;\n}>`\n display: flex;\n align-items: center;\n opacity: ${({ $isDisabled }) => ($isDisabled ? 0.3 : 1)};\n pointer-events: ${({ $isDisabled }) => ($isDisabled ? 'none' : 'auto')};\n transition: opacity 0.3s ease;\n\n .carousal-prev-button,\n .carousal-next-button {\n transition: all 0.3s ease;\n border: 2px solid #000000;\n border-radius: 3px;\n padding: 9px;\n cursor: pointer;\n\n svg {\n transition: all 0.3s ease;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n\n &:hover {\n background-color: #f5f5f5;\n border: 2px solid #ddd;\n\n svg {\n opacity: 0.5;\n }\n\n svg polyline {\n stroke: #000000;\n fill: none;\n }\n }\n }\n\n @media (max-width: 560px) {\n display: none;\n }\n`;\nexport const Scrollablewrapper = styled('div')`\n @media (max-width: 560px) {\n overflow-y: hidden;\n scrollbar-width: thin;\n scrollbar-color: #007bff #eee;\n &::-webkit-scrollbar {\n width: 8px;\n }\n &::-webkit-scrollbar-track {\n background: #eee;\n }\n &::-webkit-scrollbar-thumb {\n background-color: red;\n border-radius: 8px;\n border: 2px solid #eee;\n }\n }\n`;\nexport const CustomTypography = styled(NsTypography)`\n color: #666666;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 22px;\n @media (max-width: 560px) {\n margin: 0 3px;\n }\n`;\n\nexport const ViewAllLink = styled('a')<{ $disabled?: boolean }>`\n color: ${({ $disabled }) => ($disabled ? '#999999' : '#000000')};\n font-family: Inter, sans-serif;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 22px;\n text-decoration: none;\n border-bottom: 1px solid ${({ $disabled }) => ($disabled ? '#999999' : '#000000')};\n padding-bottom: 4px;\n transition: all 0.3s ease;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n pointer-events: ${({ $disabled }) => ($disabled ? 'none' : 'auto')};\n opacity: ${({ $disabled }) => ($disabled ? 0.5 : 1)};\n\n @media (max-width: 560px) {\n font-size: 14px;\n line-height: 18px;\n }\n\n &:hover {\n color: ${({ $disabled }) => ($disabled ? '#999999' : '#666666')};\n border-bottom: 1px solid ${({ $disabled }) => ($disabled ? '#999999' : '#666666')};\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n }\n`;\n\nexport const EmptyProductCategories = styled('div')`\n padding-top: 20px;\n font-size: 20px;\n text-align: center;\n`;\nexport const ControlsHeaderRow = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`;\n\nexport const ProductInfoWrapper = styled('div')`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n`;\n\nexport const CategoryNameWrapper = styled('div')`\n font-family: 'Lora';\n font-weight: 400;\n font-size: 22px;\n margin-left: 16px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 13px;\n`;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useMediaQuery } from '@mui/material';\n\nimport { NsCategoryNavigation } from '../Nav-Category-Navigation';\nimport { NsSpinner } from '@nuskin/foundation-ui-components';\nimport ProductCardCarousel, { ProductCardEntry } from './NsProductCarousel';\nimport {\n ProductTabCarouselContainer,\n TabsContainer,\n ContentContainer,\n NoTabsContainer,\n SpinnerContainer,\n} from './ProductTabCarousel.styled';\n\ninterface Category {\n label: string;\n categoryId: string;\n}\n\ninterface SlickSettings {\n dots?: boolean;\n infinite?: boolean;\n speed?: number;\n slidesToShow?: number;\n slidesToScroll?: number;\n swipe?: boolean;\n draggable?: boolean;\n arrows?: boolean;\n responsive?: Array<{\n breakpoint: number;\n settings: {\n slidesToShow?: number;\n slidesToScroll?: number;\n arrows?: boolean;\n };\n }>;\n}\n\ninterface ProductTabCarouselProps {\n readonly allEntryLabel?: string;\n readonly allEntryLink?: string;\n readonly renderEntry?: (entry: ProductCardEntry) => React.ReactNode;\n readonly settings?: SlickSettings;\n readonly showControlButtons?: boolean;\n readonly fetchCategories: () => Promise<Category[]>;\n readonly fetchProducts: (categoryId: string) => Promise<ProductCardEntry[]>;\n readonly emptyProductTabs?: string;\n readonly emptyProductMessage?: string;\n readonly showCustomCategory?: boolean;\n readonly productsCountLabel?: string;\n readonly getCategoryId?: (categoryId: string) => Promise<Category[]>;\n readonly history?: {\n push: (path: string) => void;\n };\n}\n\nconst ProductTabCarousel: React.FC<ProductTabCarouselProps> = ({\n allEntryLabel,\n allEntryLink,\n renderEntry,\n settings,\n showControlButtons = true,\n fetchCategories,\n fetchProducts,\n showCustomCategory = false,\n emptyProductTabs = 'No tabs available',\n emptyProductMessage,\n productsCountLabel,\n getCategoryId,\n history,\n}) => {\n const isMobile = useMediaQuery('(max-width:768px)');\n const [isLoadingInitialData, setIsLoadingInitialData] = useState(true);\n const [categories, setCategories] = useState<Category[]>([]);\n const [isCategoriesLoaded, setIsCategoriesLoaded] = useState(false);\n const [selectedTab, setSelectedTab] = useState(0);\n const [products, setProducts] = useState<ProductCardEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [shouldShowSpinner, setShouldShowSpinner] = useState(true);\n\n const checkForExistingSpinners = useCallback(() => {\n const existingSpinners = document.querySelectorAll('[data-testid*=\"spinner\"], .ns-spinner, [class*=\"spinner\"]');\n setShouldShowSpinner(existingSpinners.length === 0);\n }, []);\n\n useEffect(() => {\n if (loading) {\n checkForExistingSpinners();\n }\n }, [loading, checkForExistingSpinners]);\n\n useEffect(() => {\n fetchCategories().then((data) => {\n setCategories(data);\n setIsCategoriesLoaded(true);\n });\n }, [fetchCategories]);\n\n useEffect(() => {\n if (!isCategoriesLoaded) return;\n\n if (categories.length > 0) {\n const categoryId = categories[selectedTab]?.categoryId;\n if (getCategoryId) {\n getCategoryId(categoryId);\n }\n\n setLoading(true);\n fetchProducts(categoryId)\n .then(setProducts)\n .finally(() => {\n setLoading(false);\n setIsLoadingInitialData(false);\n });\n } else {\n setLoading(false);\n }\n }, [categories, selectedTab, fetchProducts, isCategoriesLoaded]);\n\n const itemArray = categories.map((cat) => ({\n label: cat.label,\n content: '',\n categoryId: cat.categoryId,\n }));\n\n return (\n <ProductTabCarouselContainer isMobile={isMobile} $hasCategories={categories.length > 0}>\n {showCustomCategory &&\n (itemArray.length > 0 ? (\n <TabsContainer isMobile={isMobile}>\n <NsCategoryNavigation\n itemArray={itemArray}\n value={selectedTab}\n onChange={(_, newValue) => setSelectedTab(newValue)}\n />\n </TabsContainer>\n ) : (\n <NoTabsContainer>{emptyProductTabs}</NoTabsContainer>\n ))}\n <ContentContainer isMobile={isMobile}>\n {loading ? (\n <SpinnerContainer>{shouldShowSpinner && <NsSpinner />}</SpinnerContainer>\n ) : (\n <ProductCardCarousel\n isInitialDataLoading={isLoadingInitialData}\n entries={products}\n allEntryLabel={allEntryLabel}\n allEntryLink={allEntryLink}\n renderEntry={\n renderEntry\n ? (entry) => renderEntry({ ...entry, productStatusBadge: entry.productStatusBadge })\n : undefined\n }\n settings={settings}\n showControlButtons={showControlButtons}\n categoryName={categories[selectedTab]?.label}\n emptyProductMessage={emptyProductMessage}\n productsCountLabel={productsCountLabel}\n history={history}\n />\n )}\n </ContentContainer>\n </ProductTabCarouselContainer>\n );\n};\n\nexport default ProductTabCarousel;\n","import * as React from 'react';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Box from '@mui/material/Box';\nimport PropTypes from 'prop-types';\nimport { NsCategoryNavigationContainer } from './NsCategoryNavigation.styled';\nimport { useMediaQuery } from '@mui/material';\n\nfunction TabPanel(\n props: Readonly<{\n children?: React.ReactNode;\n value: number;\n index: number;\n [key: string]: unknown;\n }>,\n) {\n const { children, value, index, ...other } = props;\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n {...other}\n >\n {value === index && <Box className=\"tabPanel\">{children}</Box>}\n </div>\n );\n}\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.number.isRequired,\n value: PropTypes.number.isRequired,\n};\n\ninterface NsCategoryNavigationProps {\n itemArray: { label: string; content: React.ReactNode; categoryId: string }[];\n value?: number;\n onChange?: (event: React.SyntheticEvent, newValue: number) => void;\n}\n\nexport const NsCategoryNavigation: React.FC<Readonly<NsCategoryNavigationProps>> = ({\n itemArray,\n value: controlledValue,\n onChange,\n}) => {\n const [internalValue, setInternalValue] = React.useState(0);\n const isMobile = useMediaQuery('(max-width:768px)');\n const value = controlledValue ?? internalValue;\n const handleChange = (event: React.SyntheticEvent, newValue: number) => {\n if (onChange) {\n onChange(event, newValue);\n } else {\n setInternalValue(newValue);\n }\n };\n\n return (\n <NsCategoryNavigationContainer>\n <Box className=\"tabContainer\">\n <Tabs\n orientation={isMobile ? 'horizontal' : 'vertical'}\n variant=\"scrollable\"\n value={value}\n onChange={handleChange}\n aria-label=\"Vertical tabs example\"\n className=\"tabsStyle\"\n >\n {itemArray.map((item) => (\n <Tab key={item.categoryId} label={item.label} className=\"tabStyle\" />\n ))}\n </Tabs>\n {itemArray.map((item) => (\n <TabPanel\n key={item.categoryId}\n value={value}\n index={itemArray.findIndex((i) => i.categoryId === item.categoryId)}\n >\n {item.content}\n </TabPanel>\n ))}\n </Box>\n </NsCategoryNavigationContainer>\n );\n};\n","import { styled } from '@nuskin/foundation-theme';\nexport const NsCategoryNavigationContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n height: 100%;\n background-color: #fff;\n .tabsStyle {\n display: flex;\n padding-top: 8.533px;\n flex-direction: column;\n align-items: flex-start;\n gap: 12.8px;\n border-right: 1px;\n border-color: divider;\n width: 200px;\n & .Mui-selected {\n font-weight: 700;\n font-size: 14px;\n font-family: 'inter', sans-serif;\n font-style: normal;\n font-height: 20px;\n border-radius: 4px;\n }\n & .MuiTabs-indicator {\n left: 0;\n background-color: #5b81a5;\n color: #5b81a5;\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .tabContainer {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n min-width: 100%;\n background-color: #fff;\n @media (max-width: 768px) {\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n }\n\n .tabStyle {\n align-items: flex-start;\n display: flex;\n text-align: left;\n font-size: 14px;\n font-family: 'inter' sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n min-height: 20px;\n padding: 1px;\n padding-left: 10px;\n margin-bottom: 10px;\n cursor: pointer;\n text-transform: none;\n }\n @media (max-width: 768px) {\n flex-direction: row;\n\n .tabsStyle {\n width: 100%;\n border-right: none;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-top: 0px;\n }\n\n .tabStyle {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 70px;\n padding: 8px 16px;\n text-align: center;\n margin: 4px;\n background-color: #fff;\n cursor: pointer;\n color: black;\n font-family: Inter;\n font-style: normal;\n font-weight: 600;\n line-height: 20px;\n }\n\n .tabStyle.Mui-selected {\n background-color: #5b81a5;\n color: #ffffff !important;\n font-weight: 700;\n border-radius: 70px;\n }\n }\n .tabPanel {\n padding: 8px;\n text-align: left;\n }\n`;\n","import { styled } from '@nuskin/foundation-theme';\n\nconst getMinHeight = ({ isMobile, $hasCategories }: { isMobile?: boolean; $hasCategories?: boolean }) => {\n if (isMobile) return 'auto';\n return $hasCategories ? '800px' : 'auto';\n};\n\nexport const ProductTabCarouselContainer = styled('div')<{ isMobile?: boolean; $hasCategories?: boolean }>`\n display: flex;\n flex-direction: ${({ isMobile }) => (isMobile ? 'column' : 'row')};\n align-items: ${({ isMobile }) => (isMobile ? 'stretch' : 'flex-start')};\n width: 100%;\n max-width: 1920px;\n min-height: ${getMinHeight};\n margin: 0 auto;\n box-sizing: border-box;\n overflow: visible;\n background: #fff;\n padding: ${({ isMobile }) => (isMobile ? '10px 16px 0px 16px' : '50px 60px 0px 60px')};\n\n @media (max-width: 768px) {\n padding: 10px 16px 0px 16px;\n min-height: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n padding: 30px 40px 0px 40px;\n gap: 20px;\n }\n\n transform: translateZ(0);\n will-change: auto;\n`;\n\nexport const TabsContainer = styled('div')<{ isMobile?: boolean }>`\n min-width: ${({ isMobile }) => (isMobile ? '100%' : 'auto')};\n height: ${({ isMobile }) => (isMobile ? 'auto' : '100%')};\n flex-shrink: 0;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n\n overflow-x: auto;\n overflow-y: visible;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-width: 200px;\n margin-right: 20px;\n }\n`;\n\nexport const ContentContainer = styled('div')<{ isMobile?: boolean }>`\n flex: 1;\n min-width: 0;\n height: ${({ isMobile }) => (isMobile ? 'auto' : '100%')};\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n min-height: 300px;\n\n -webkit-overflow-scrolling: touch;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n @media (min-width: 769px) and (max-width: 1024px) {\n min-height: 400px;\n }\n\n contain: layout style paint;\n transform: translateZ(0);\n`;\n\nexport const LoadingContainer = styled('div')`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n padding: 20px;\n\n @media (max-width: 768px) {\n min-height: 150px;\n padding: 16px;\n }\n`;\n\nexport const NoTabsContainer = styled('div')`\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 40px 20px;\n color: #666;\n font-size: 16px;\n\n @media (max-width: 768px) {\n padding: 20px 16px;\n font-size: 14px;\n }\n`;\nexport const SpinnerContainer = styled('div')`\n padding: 10px;\n display: flex;\n justify-content: center;\n`;\n","import React, { ReactElement, useState, useEffect, useMemo } from 'react';\nimport { Typography, Box, useMediaQuery, Tooltip } from '@mui/material';\nimport { NsLink, NsImage } from '@nuskin/foundation-ui-components';\nimport {\n MysiteHeroContainer,\n MysiteHeroContainerMobile,\n BadgeContainer,\n Badge,\n ToggleButtonMobile,\n StyledSpan,\n ImgTabIndex,\n ContactLink,\n BadgeValue,\n} from '@/common/headers/MysiteHero.styled';\nimport { PlaceholderImage } from '../icon/icons/PlaceholderImage';\nimport { ArrowDownIcon } from '../icon/icons/ArrowDownIcon';\nimport { trackGTMEvent } from '../utils/gtmTracking';\n\ntype MysiteHeroProps = {\n readonly imageDetails?: {\n imageSrc: string;\n imageAlt: string;\n bgColor: string;\n };\n readonly shopTitle: string;\n readonly shopDescription: string;\n readonly socialTitleText: string;\n readonly email: string;\n readonly phone: string;\n readonly className?: string;\n readonly bannerProps?: {\n backgroundColor?: string;\n headlineFont?: string;\n paragraphFont?: string;\n };\n readonly socialIcons?: {\n type: string;\n url: string;\n }[];\n readonly expirationDate?: string;\n readonly showBadges?: boolean;\n readonly totalSavings?: string;\n};\n\ntype ImageDetails = {\n imageSrc: string;\n imageAlt: string;\n bgColor: string;\n};\n\ntype BannerProps = {\n backgroundColor?: string;\n headlineFont?: string;\n paragraphFont?: string;\n};\n\ntype ContentProps = {\n shopTitle: string;\n shopDescription: string;\n socialTitleText: string;\n email: string;\n phone: string;\n showBadges: boolean;\n expirationDate?: string;\n totalSavings?: string;\n};\n\nconst renderImageContent = (imageDetails: ImageDetails | undefined, bannerProps: BannerProps, className: string) => {\n const placeholderClass = className.includes('mobile') ? 'placeholder-image-mobile' : 'placeholder-image';\n return imageDetails?.imageSrc ? (\n <ImgTabIndex tabIndex={0}>\n <NsImage className={className} src={imageDetails.imageSrc} alt={imageDetails.imageAlt} />\n </ImgTabIndex>\n ) : (\n <Box className={placeholderClass}>\n <PlaceholderImage\n width={className.includes('mobile') ? '144px' : '246px'}\n height={className.includes('mobile') ? '144px' : '246px'}\n backgroundColor={bannerProps?.backgroundColor ?? '#5F5F5F'}\n />\n </Box>\n );\n};\n\nconst renderBadges = (\n showBadges: boolean,\n expirationDate: string,\n isMobile: boolean,\n hasWhiteBackground: boolean,\n totalSavings?: string,\n) => {\n if (!showBadges || (!expirationDate && !totalSavings)) return null;\n\n const badgeClass = isMobile ? 'mobile-badge' : 'tablet-badge';\n const containerClass = isMobile ? 'mobile-badges' : 'tablet-badges';\n\n return (\n <BadgeContainer className={containerClass}>\n {totalSavings && (\n <Badge\n className={`${badgeClass} total-savings-badge`}\n hasWhiteBackground={hasWhiteBackground}\n tabIndex={0}\n >\n <BadgeValue className=\"badge-value\">{totalSavings}</BadgeValue>\n </Badge>\n )}\n {expirationDate && (\n <Badge\n className={`${badgeClass} expiration-badge`}\n hasWhiteBackground={hasWhiteBackground}\n tabIndex={0}\n >\n <BadgeValue className=\"badge-value\">{expirationDate}</BadgeValue>\n </Badge>\n )}\n </BadgeContainer>\n );\n};\n\nconst renderMobileContent = (\n props: ContentProps,\n isScrolled: boolean,\n renderSocialMediaIcons: React.ReactNode,\n isMobile: boolean,\n hasWhiteBackground: boolean,\n) => {\n const { shopTitle, socialTitleText, email, showBadges, expirationDate, phone, totalSavings } = props;\n\n return (\n <Box className=\"content-mobile\">\n <Typography component=\"h1\" tabIndex={shopTitle?.trim() ? 0 : -1} className=\"body-title-mobile\">\n {shopTitle}\n </Typography>\n {!isScrolled && (\n <>\n <Typography tabIndex={socialTitleText?.trim() ? 0 : -1} className=\"social-title-text-mobile\">\n {socialTitleText}\n </Typography>\n {email?.trim() && renderContactLink('email', email, 'email-text-mobile')}\n {phone?.trim() && renderContactLink('phone', phone, 'phone-text-mobile')}\n <Box className=\"social-icons-mobile\">{renderSocialMediaIcons}</Box>\n {renderBadges(showBadges, expirationDate ?? '', isMobile, hasWhiteBackground, totalSavings)}\n </>\n )}\n </Box>\n );\n};\n\nconst renderDesktopContent = (\n props: ContentProps,\n isScrolled: boolean,\n renderSocialMediaIcons: React.ReactNode,\n isMobile: boolean,\n hasWhiteBackground: boolean,\n) => {\n const { shopTitle, shopDescription, socialTitleText, email, phone, showBadges, expirationDate, totalSavings } =\n props;\n\n return (\n <Box className=\"content\">\n <Typography component=\"h1\" tabIndex={shopTitle?.trim() ? 0 : -1} className=\"body-title\">\n {shopTitle}\n </Typography>\n {!isScrolled && (\n <>\n {shopDescription?.length > 480 ? (\n <Tooltip title={shopDescription} arrow>\n <Typography tabIndex={shopDescription?.trim() ? 0 : -1} className=\"body-text\">\n {shopDescription}\n </Typography>\n </Tooltip>\n ) : (\n <Typography tabIndex={shopDescription?.trim() ? 0 : -1} className=\"body-text\">\n {shopDescription}\n </Typography>\n )}\n <Box className=\"social-media\">\n <Typography tabIndex={socialTitleText?.trim() ? 0 : -1} className=\"social-title-text\">\n {socialTitleText}\n </Typography>\n <Box className=\"social-icons\">\n {renderSocialMediaIcons}\n {email?.trim() && renderContactLink('email', email, 'email-text')}\n {phone?.trim() && renderContactLink('phone', phone, 'phone-text')}\n </Box>\n </Box>\n {renderBadges(showBadges, expirationDate ?? '', isMobile, hasWhiteBackground, totalSavings)}\n </>\n )}\n </Box>\n );\n};\n\nconst checkIfImageIsCircular = (url: string): Promise<boolean> => {\n return new Promise((resolve, reject) => {\n const imageContext = new Image();\n imageContext.crossOrigin = 'anonymous';\n imageContext.src = url;\n\n imageContext.onload = () => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) return reject(new Error('Canvas not supported'));\n\n canvas.width = imageContext.width;\n canvas.height = imageContext.height;\n\n context.drawImage(imageContext, 0, 0);\n\n const corners = [\n context.getImageData(0, 0, 1, 1).data,\n context.getImageData(imageContext.width - 1, 0, 1, 1).data,\n context.getImageData(0, imageContext.height - 1, 1, 1).data,\n context.getImageData(imageContext.width - 1, imageContext.height - 1, 1, 1).data,\n ];\n\n const isCircular = corners.every((corner) => {\n const imageArray = Array.prototype.slice.call(corner);\n const alpha = imageArray[3];\n return alpha < 10;\n });\n resolve(isCircular);\n };\n imageContext.onerror = () => reject(new Error('Failed to load image'));\n });\n};\n\nconst isWhiteOrNearWhite = (color: string | undefined): boolean => {\n if (!color) return false;\n\n const hex = color.replace('#', '').toLowerCase();\n\n /* regex pattern for hex color format: 3 chars (#fff), 4 chars (#ffff), 6 chars (#ffffff), or 8 chars (#ffffffff)*/\n if (!/^[0-9a-f]{3,4}$|^[0-9a-f]{6}$|^[0-9a-f]{8}$/i.test(hex)) return false;\n\n let fullHex = hex;\n if (hex.length === 3 || hex.length === 4) {\n fullHex = hex\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n const r = Number.parseInt(fullHex.substring(0, 2), 16);\n const g = Number.parseInt(fullHex.substring(2, 4), 16);\n const b = Number.parseInt(fullHex.substring(4, 6), 16);\n\n const threshold = 220;\n return r >= threshold && g >= threshold && b >= threshold;\n};\n\nconst createContactClickHandler = (contactType: 'email' | 'phone', contactValue: string) => ({\n onClick: () => {\n trackGTMEvent({\n event: 'contact_click',\n contact_type: contactType,\n contact_value: contactValue,\n click_element: `${contactType}_link`,\n });\n },\n onKeyDown: (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n trackGTMEvent({\n event: 'contact_click',\n contact_type: contactType,\n contact_value: contactValue,\n click_element: `${contactType}_link`,\n });\n globalThis.location.href = `${contactType === 'email' ? 'mailto' : 'tel'}:${contactValue}`;\n }\n },\n});\n\nconst renderContactLink = (contactType: 'email' | 'phone', contactValue: string, className: string) => {\n const protocol = contactType === 'email' ? 'mailto:' : 'tel:';\n const handlers = createContactClickHandler(contactType, contactValue);\n\n return (\n <Typography className={className}>\n <ContactLink href={`${protocol}${contactValue}`} {...handlers}>\n {contactValue}\n </ContactLink>\n </Typography>\n );\n};\nexport default function MysiteHero({\n className,\n shopTitle,\n shopDescription,\n socialTitleText,\n imageDetails,\n email,\n phone,\n bannerProps,\n socialIcons,\n expirationDate,\n showBadges = false,\n totalSavings,\n}: MysiteHeroProps): ReactElement {\n const isMobile = useMediaQuery('(max-width: 560px)');\n const [isScrolled, setIsScrolled] = useState(false);\n const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false);\n const [hasWhiteBackground, setHasWhiteBackground] = useState(false);\n const [isImageCircular, setIsImageCircular] = useState(false);\n\n const toggleDescription = () => {\n setIsDescriptionExpanded(!isDescriptionExpanded);\n };\n\n useEffect(() => {\n const checkImage = async () => {\n if (imageDetails?.imageSrc) {\n const isCircular = await checkIfImageIsCircular(imageDetails.imageSrc);\n setIsImageCircular(isCircular);\n } else {\n setIsImageCircular(false);\n }\n };\n\n checkImage();\n }, [imageDetails?.imageSrc]);\n\n useEffect(() => {\n setHasWhiteBackground(isWhiteOrNearWhite(bannerProps?.backgroundColor));\n }, [bannerProps?.backgroundColor]);\n\n useEffect(() => {\n let debounceTimeout: ReturnType<typeof setTimeout>;\n let lastScrollY = window.scrollY;\n let currentScrollState = false;\n let isTransitioning = false;\n let lastUpdateTime = 0;\n\n const updateScrollState = (newState: boolean) => {\n const now = Date.now();\n\n if (currentScrollState !== newState && !isTransitioning) {\n if (now - lastUpdateTime < 100) {\n return;\n }\n\n isTransitioning = true;\n currentScrollState = newState;\n lastUpdateTime = now;\n\n if (newState) {\n setIsDescriptionExpanded(false);\n }\n\n clearTimeout(debounceTimeout);\n setIsScrolled(newState);\n\n debounceTimeout = setTimeout(() => {\n isTransitioning = false;\n\n if (newState && window.scrollY < 15) {\n window.scrollTo({\n top: isMobile ? 20 : 30,\n behavior: 'smooth',\n });\n }\n }, 300);\n }\n };\n\n const handleScroll = () => {\n const currentScrollY = window.scrollY;\n\n if (isTransitioning) {\n lastScrollY = currentScrollY;\n return;\n }\n\n const scrollDelta = Math.abs(currentScrollY - lastScrollY);\n\n if (scrollDelta < 0.5) {\n return;\n }\n\n const scrollingDown = currentScrollY > lastScrollY;\n\n const scrollDownThreshold = isMobile ? 15 : 25;\n const scrollUpThreshold = isMobile ? 8 : 12;\n\n if (scrollingDown && currentScrollY > scrollDownThreshold && !currentScrollState) {\n updateScrollState(true);\n } else if (!scrollingDown && currentScrollY < scrollUpThreshold && currentScrollState) {\n updateScrollState(false);\n }\n\n lastScrollY = currentScrollY;\n };\n\n const initializeState = () => {\n const initialScrollY = window.scrollY;\n const scrollThreshold = isMobile ? 5 : 10;\n const shouldStartCompact = initialScrollY > scrollThreshold;\n\n currentScrollState = shouldStartCompact;\n setIsScrolled(shouldStartCompact);\n lastScrollY = initialScrollY;\n lastUpdateTime = Date.now();\n };\n\n let rafId: number | null = null;\n let lastRafTime = 0;\n const throttledScrollHandler = () => {\n if (rafId) return;\n\n const now = Date.now();\n if (now - lastRafTime < 16) {\n return;\n }\n\n rafId = requestAnimationFrame(() => {\n handleScroll();\n lastRafTime = Date.now();\n rafId = null;\n });\n };\n\n initializeState();\n window.addEventListener('scroll', throttledScrollHandler, { passive: true });\n\n return () => {\n window.removeEventListener('scroll', throttledScrollHandler);\n if (rafId) cancelAnimationFrame(rafId);\n clearTimeout(debounceTimeout);\n };\n }, [isMobile]);\n\n const renderSocialMediaIcons = useMemo(() => {\n return socialIcons?.map((icon, index) => {\n const handleSocialClick = (e: React.MouseEvent) => {\n e.preventDefault();\n trackGTMEvent({\n event: 'social_click',\n social_platform: icon.type,\n social_url: icon.url,\n click_element: 'social_icon',\n });\n window.open(icon.url, '_blank');\n };\n\n return (\n <StyledSpan key={icon?.type + index} onClick={handleSocialClick}>\n <NsLink href={icon.url} target=\"_blank\">\n <NsImage\n key={icon?.type + index}\n src={`https://www.google.com/s2/favicons?domain=${icon?.url}&sz=24`}\n alt={`${icon.type} icon`}\n width=\"24\"\n height=\"24\"\n />\n </NsLink>\n </StyledSpan>\n );\n });\n }, [socialIcons]);\n\n const containerClass = `${className} ${isScrolled ? 'scrolled' : ''}`;\n const props = {\n shopTitle,\n shopDescription,\n socialTitleText,\n email,\n phone,\n showBadges,\n expirationDate,\n totalSavings,\n };\n\n const getCharacterLimit = () => {\n if (window.innerWidth <= 380) return 50;\n if (window.innerWidth <= 415) return 56;\n if (window.innerWidth <= 460) return 62;\n return 80;\n };\n\n const shouldShowToggle = isMobile && shopDescription && shopDescription.length > getCharacterLimit();\n\n return isMobile ? (\n <MysiteHeroContainerMobile\n className={containerClass}\n data-testid=\"my-site-shop-header\"\n bannerProps={bannerProps}\n isCircularImage={isImageCircular}\n hasWhiteBackground={hasWhiteBackground}\n >\n <Box className=\"image-content-mobile\">\n {renderImageContent(imageDetails, bannerProps ?? {}, 'bg-image-mobile')}\n {renderMobileContent(props, isScrolled, renderSocialMediaIcons, isMobile, hasWhiteBackground)}\n </Box>\n {!isScrolled && (\n <Box className=\"expandable-description-mobile\">\n <Typography\n className={`description-content-mobile ${isDescriptionExpanded || !shouldShowToggle ? 'expanded' : 'collapsed'}`}\n >\n {shopDescription}\n </Typography>\n {shouldShowToggle && (\n <ToggleButtonMobile onClick={toggleDescription}>\n <ArrowDownIcon\n width={16}\n height={16}\n className={`arrow-icon-mobile ${isDescriptionExpanded ? 'expanded' : ''}`}\n />\n </ToggleButtonMobile>\n )}\n </Box>\n )}\n </MysiteHeroContainerMobile>\n ) : (\n <MysiteHeroContainer\n className={containerClass}\n data-testid=\"my-site-shop-header\"\n bannerProps={bannerProps}\n isCircularImage={isImageCircular}\n hasWhiteBackground={hasWhiteBackground}\n >\n {renderImageContent(imageDetails, bannerProps ?? {}, 'bg-image')}\n {renderDesktopContent(props, isScrolled, renderSocialMediaIcons, isMobile, hasWhiteBackground)}\n </MysiteHeroContainer>\n );\n}\n","import React from 'react';\nimport { styled } from '@nuskin/foundation-theme';\nimport { Box, BoxProps } from '@mui/material';\n\ninterface StyledBoxProps extends BoxProps {\n bannerProps?: {\n backgroundColor?: string;\n headlineFont?: string;\n paragraphFont?: string;\n };\n isCircularImage?: boolean;\n hasWhiteBackground?: boolean;\n}\n\ninterface BadgeProps extends BoxProps {\n hasWhiteBackground?: boolean;\n}\n\nconst getContactTextStyles = (hasWhiteBackground: boolean | undefined) => ({\n fontSize: '12px',\n fontStyle: 'normal' as const,\n fontWeight: '600',\n lineHeight: '16px',\n letterSpacing: '0.12px',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n '& a': {\n color: 'inherit',\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n});\n\nconst getSocialTitleStyles = (hasWhiteBackground: boolean | undefined) => ({\n fontSize: '12px',\n fontStyle: 'normal' as const,\n fontWeight: '700',\n lineHeight: '16px',\n letterSpacing: '0.48px',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n textTransform: 'uppercase' as const,\n paddingLeft: '5px',\n});\n\nconst getSocialIconsStyles = () => ({\n display: 'flex',\n flexDirection: 'row' as const,\n gap: '10px',\n alignItems: 'center',\n});\n\nconst getContactTextMobileStyles = (hasWhiteBackground: boolean | undefined) => ({\n ...getContactTextStyles(hasWhiteBackground),\n paddingBottom: '11px',\n wordBreak: 'break-all' as const,\n overflowWrap: 'break-word' as const,\n paddingLeft: '5px',\n '& a': {\n color: 'inherit',\n textDecoration: 'none',\n },\n '@media (max-width: 420px)': {\n fontSize: '11px',\n lineHeight: '15px',\n paddingBottom: '8px',\n },\n '@media (max-width: 400px)': {\n fontSize: '10px',\n lineHeight: '14px',\n paddingBottom: '6px',\n },\n '@media (max-width: 375px)': {\n fontSize: '8px',\n lineHeight: '12px',\n paddingBottom: '4px',\n },\n});\n\nconst getSocialTitleMobileStyles = (hasWhiteBackground: boolean | undefined) => ({\n ...getSocialTitleStyles(hasWhiteBackground),\n marginBottom: '11px',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n '@media (max-width: 420px)': {\n fontSize: '11px',\n lineHeight: '14px',\n marginBottom: '8px',\n },\n '@media (max-width: 400px)': {\n fontSize: '10px',\n lineHeight: '12px',\n marginBottom: '5px',\n },\n '@media (max-width: 375px)': {\n fontSize: '8px',\n lineHeight: '11px',\n marginBottom: '4px',\n },\n});\n\nexport const MysiteHeroContainer = styled((props: StyledBoxProps) => <Box {...props} />)(\n ({ bannerProps, isCircularImage, hasWhiteBackground }) => ({\n backgroundClip: 'border-box',\n display: 'flex',\n background: bannerProps?.backgroundColor ?? '#383838',\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n height: 'auto',\n flexDirection: 'row',\n alignItems: 'center',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'transform, opacity',\n transform: 'translateZ(0)',\n backfaceVisibility: 'hidden',\n '&.scrolled': {\n top: 0,\n left: 0,\n right: 0,\n boxShadow: '0 2px 8px rgba(0,0,0,0.2)',\n '.content': {\n paddingTop: '0',\n justifyContent: 'center',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.body-title': {\n fontSize: '26px',\n lineHeight: '34px',\n marginBottom: '0',\n fontStyle: 'normal',\n fontWeight: '400',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n\n '.bg-image': {\n width: '90px',\n height: '90px',\n padding: isCircularImage ? '2px' : '0px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n objectFit: 'cover',\n objectPosition: 'center',\n },\n '.placeholder-image': {\n '& > div': {\n width: '90px',\n height: '90px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n },\n '.content': {\n width: '70%',\n height: '100%',\n marginLeft: '2%',\n marginRight: 'auto',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n boxSizing: 'border-box',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.bg-image': {\n width: '252px',\n height: '252px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n padding: isCircularImage ? '3px' : '0px',\n objectFit: 'cover',\n objectPosition: 'center',\n },\n '.placeholder-image': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n '& > div': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n '.body-title': {\n fontSize: '32px',\n lineHeight: '38px',\n marginBottom: '8px',\n fontWeight: '400',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n paddingLeft: '5px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.body-text': {\n fontSize: '16px',\n marginBottom: '12px',\n fontStyle: 'normal',\n fontWeight: '400',\n lineHeight: '22px',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontFamily: bannerProps?.paragraphFont ?? 'inherit',\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n WebkitLineClamp: 3,\n textOverflow: 'ellipsis',\n paddingLeft: '5px',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n },\n '.social-media': {\n display: 'flex',\n flexDirection: 'column',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n },\n '.email-text': getContactTextStyles(hasWhiteBackground),\n '.phone-text': getContactTextStyles(hasWhiteBackground),\n '.social-title-text': {\n ...getSocialTitleStyles(hasWhiteBackground),\n marginBottom: '8px',\n },\n '.social-icons': {\n ...getSocialIconsStyles(),\n paddingBottom: '8px',\n },\n }),\n);\n\nexport const MysiteHeroContainerMobile = styled((props: StyledBoxProps) => <Box {...props} />)(\n ({ bannerProps, isCircularImage, hasWhiteBackground }) => ({\n backgroundClip: 'border-box',\n display: 'flex',\n background: bannerProps?.backgroundColor ?? '#383838',\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n flexDirection: 'column',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'transform, opacity',\n transform: 'translateZ(0)',\n backfaceVisibility: 'hidden',\n '&.scrolled': {\n top: 0,\n left: 0,\n right: 0,\n boxShadow: '0 2px 8px rgba(0,0,0,0.2)',\n '.content-mobile': {\n paddingTop: '5px',\n width: '60%',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.body-title-mobile': {\n fontSize: '18px',\n lineHeight: '28px',\n marginBottom: '0',\n fontStyle: 'normal',\n fontWeight: '400',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n '.bg-image-mobile': {\n width: '75px',\n height: '75px',\n padding: isCircularImage ? '2px' : '0px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n objectFit: 'cover',\n objectPosition: 'center',\n },\n '.placeholder-image-mobile': {\n '& > div': {\n width: '75px !important',\n height: '75px !important',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n },\n '.image-content-mobile': {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n },\n '.content-mobile': {\n width: '55%',\n height: '100%',\n paddingTop: '10px',\n paddingRight: '10px',\n marginLeft: '8px',\n marginRight: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n position: 'relative',\n boxSizing: 'border-box',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n '@media (max-width: 420px)': {\n paddingTop: '8px',\n width: '100%',\n },\n '@media (max-width: 400px)': {\n paddingTop: '6px',\n width: '100%',\n height: '100%',\n },\n '@media (max-width: 375px)': {\n paddingTop: '4px',\n width: '100%',\n height: '100%',\n },\n },\n '.bg-image-mobile': {\n width: '144px',\n height: '144px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n objectFit: 'cover',\n objectPosition: 'center',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n padding: isCircularImage ? '2px' : '0px',\n '@media (max-width: 420px)': {\n width: '120px',\n height: '120px',\n },\n '@media (max-width: 400px)': {\n width: '112px',\n height: '112px',\n },\n '@media (max-width: 375px)': {\n width: '90px',\n height: '90px',\n },\n },\n '.placeholder-image-mobile': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n willChange: 'width, height, transform',\n '& > div': {\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n width: '144px',\n height: '144px',\n '@media (max-width: 420px)': {\n width: '120px',\n height: '120px',\n },\n '@media (max-width: 400px)': {\n width: '110px !important',\n height: '110px !important',\n },\n '@media (max-width: 375px)': {\n width: '90px',\n height: '90px',\n },\n },\n },\n '.body-title-mobile': {\n fontSize: '22px',\n lineHeight: '28px',\n marginBottom: '13px',\n fontWeight: '400',\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontStyle: 'normal',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontFamily: bannerProps?.headlineFont ?? 'Lora',\n paddingLeft: '5px',\n transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n '@media (max-width: 420px)': {\n fontSize: '16px',\n lineHeight: '24px',\n marginBottom: '8px',\n },\n '@media (max-width: 400px)': {\n fontSize: '16px',\n lineHeight: '22px',\n marginBottom: '6px',\n },\n '@media (max-width: 375px)': {\n fontSize: '14px',\n lineHeight: '20px',\n marginBottom: '4px',\n },\n },\n '.body-text-mobile': {\n fontSize: '14px',\n padding: '20px 25px 20px 25px',\n fontStyle: 'normal',\n fontWeight: '400',\n lineHeight: '20px',\n color: '#252525',\n backgroundColor: '#E0E0E0',\n fontFamily: bannerProps?.paragraphFont ?? 'inherit',\n transition: 'all 0.25s cubic-bezier(0.4, 0, 0.2, 1)',\n opacity: 1,\n transform: 'translateY(0)',\n },\n '.expandable-description-mobile': {\n backgroundColor: '#E0E0E0',\n position: 'relative',\n },\n '.description-content-mobile': {\n fontSize: '14px',\n padding: '10px 15px',\n fontStyle: 'normal',\n fontWeight: '400',\n lineHeight: '20px',\n color: '#252525',\n fontFamily: bannerProps?.paragraphFont ?? 'inherit',\n transition: 'max-height 0.3s ease-in-out, opacity 0.3s ease-in-out',\n overflow: 'hidden',\n position: 'relative',\n '&.collapsed': {\n maxHeight: '50px',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n height: '20px',\n background: 'linear-gradient(transparent, rgba(224, 224, 224, 0.8), #E0E0E0)',\n pointerEvents: 'none',\n },\n },\n '&.expanded': {\n maxHeight: 'none',\n whiteSpace: 'normal',\n display: 'block',\n '&::after': {\n display: 'none',\n },\n },\n },\n '.email-text-mobile': getContactTextMobileStyles(hasWhiteBackground),\n '.phone-text-mobile': getContactTextMobileStyles(hasWhiteBackground),\n '.social-title-text-mobile': getSocialTitleMobileStyles(hasWhiteBackground),\n '.social-icons-mobile': {\n ...getSocialIconsStyles(),\n paddingBottom: '10px',\n transition: 'opacity 0.3s ease-out, transform 0.3s ease-out',\n opacity: 1,\n transform: 'translateY(0)',\n '& img': {\n width: '24px',\n height: '24px',\n '@media (max-width: 400px)': {\n width: '20px',\n height: '20px',\n },\n '@media (max-width: 375px)': {\n width: '18px',\n height: '18px',\n },\n },\n '@media (max-width: 420px)': {\n paddingBottom: '8px',\n },\n '@media (max-width: 400px)': {\n paddingBottom: '4px',\n },\n '@media (max-width: 375px)': {\n paddingBottom: '3px',\n },\n },\n }),\n);\n\nexport const BadgeContainer = styled(Box)({\n display: 'flex',\n gap: '12px',\n marginBottom: '16px',\n paddingLeft: '5px',\n\n '&.mobile-badges': {\n flexDirection: 'column',\n gap: '8px',\n marginBottom: '12px',\n },\n\n '&.tablet-badges': {\n flexDirection: 'row',\n gap: '12px',\n marginBottom: '8px',\n },\n});\n\nexport const Badge = styled((props: BadgeProps) => <Box {...props} />)(({ hasWhiteBackground }) => ({\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n backdropFilter: 'blur(10px)',\n borderRadius: '20px',\n padding: '8px 16px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n border: '1px solid rgba(255, 255, 255, 0.3)',\n transition: 'all 0.3s ease',\n\n '&.mobile-badge': {\n padding: '6px 12px',\n borderRadius: '16px',\n fontSize: '12px',\n },\n\n '&.tablet-badge': {\n padding: '8px 16px',\n borderRadius: '20px',\n fontSize: '14px',\n },\n\n '&.total-savings-badge': {\n backgroundColor: '#4A6987',\n border: 'none',\n borderRadius: '8px',\n padding: '8px 16px',\n gap: '4px',\n minHeight: '32px',\n backdropFilter: 'none',\n '.badge-value': {\n color: '#FFFFFF',\n },\n '&:hover': {\n backgroundColor: '#4A6987',\n transform: 'none',\n boxShadow: 'none',\n },\n },\n\n '&.expiration-badge': {\n borderRadius: '8px',\n padding: '8px 16px',\n gap: '4px',\n minHeight: '32px',\n },\n\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.3)',\n transform: 'translateY(-1px)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n },\n\n '.badge-text': {\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontWeight: '400',\n opacity: 0.9,\n },\n\n '.badge-value': {\n color: hasWhiteBackground ? '#000000' : '#FFFFFF',\n fontWeight: '600',\n },\n}));\nexport const ToggleButtonMobile = styled('button')({\n backgroundColor: '#E0E0E0',\n border: '1px solid #252525',\n borderRadius: '10px',\n cursor: 'pointer',\n width: '40px',\n height: '20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '10px auto 5px auto',\n transition: 'all 0.2s ease',\n '& .arrow-icon-mobile': {\n transition: 'transform 0.3s ease',\n '&.expanded': {\n transform: 'rotate(180deg)',\n },\n },\n});\nexport const StyledSpan = styled(Box)`\n background: none;\n border: 2px solid transparent;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n transition: all 0.3s ease;\n\n &:hover {\n transform: scale(1.1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n &:focus,\n &:focus-within {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\n }\n\n &:hover svg {\n fill: #ffffff;\n }\n`;\nexport const ImgTabIndex = styled('span')`\n line-height: 0.5;\n`;\n\nexport const ContactLink = styled('a')({\n fontSize: 'inherit',\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit',\n color: 'inherit',\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n});\n\nexport const BadgeValue = styled('span')({});\n","import React from 'react';\nimport { Box } from '@mui/material';\n\ntype PlaceholderImageProps = {\n readonly width: string | number;\n readonly height: string | number;\n readonly backgroundColor: string;\n};\n\nexport const PlaceholderImage: React.FC<PlaceholderImageProps> = ({ width, height, backgroundColor }) => {\n return (\n <Box\n sx={{\n width,\n height,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor,\n }}\n data-testid=\"placeholder-image\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"129\" viewBox=\"0 0 128 129\" fill=\"none\">\n <g id=\"ns_logomark\">\n <path\n id=\"Vector\"\n d=\"M127.495 52.1946C125.663 47.9538 122.999 44.1171 119.661 40.9073C112.565 34.2835 102.562 31.7037 93.1175 34.0622C83.6733 36.4206 76.0882 43.3926 72.991 52.5619C71.4142 56.8414 70.6063 61.3627 70.6039 65.9196C70.6039 85.8227 70.6039 105.737 70.6039 125.662C70.6039 129.001 70.6039 129.001 66.9051 128.834C66.9051 128.2 66.9051 127.499 66.9051 126.831C66.9051 104.323 66.9051 81.8263 66.9051 59.3409C66.3415 45.3064 74.9302 32.5039 88.1888 27.6164C89.79 27.0612 91.4307 26.6259 93.0981 26.314C94.7114 25.98 96.4605 25.8465 98.0738 25.6461C96.0231 16.3291 78.9419 5.60953 65.0889 4.97504C50.3084 4.62252 36.6074 12.6365 29.7509 25.6461C31.331 25.8465 32.8779 25.9466 34.3569 26.2138C48.0999 28.544 58.7086 39.4998 60.5168 53.2298C60.8904 55.7285 61.0812 58.2508 61.0877 60.7769C61.0877 82.7507 61.0877 104.724 61.0877 126.697C61.0877 128.434 60.6842 129.169 58.8016 128.968C56.9183 128.768 57.1204 128.2 57.1204 126.965C57.1204 119.985 57.1204 113.006 57.1204 105.993C57.1204 92.1674 57.1204 78.3423 57.1204 64.5171C57.2385 56.3928 54.2457 48.5271 48.7477 42.5103C42.2429 35.5282 32.6539 32.2371 23.1959 33.7401C13.7379 35.243 5.66194 41.3411 1.67448 49.9906C1.23781 50.8254 0.867444 51.6937 0.262573 52.9293C5.79294 22.3996 32.4752 0.139867 63.7085 0.000656323C94.9411 -0.138555 121.824 21.8824 127.629 52.3616\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_2\"\n d=\"M86.0995 124.927C86.0995 124.293 86.0995 123.858 86.0995 123.425C86.0995 111.669 86.0995 100.049 86.0995 88.1269C85.8836 82.4231 88.0775 76.89 92.1523 72.8653C97.3131 67.9567 104.984 66.7091 111.452 69.7263C117.892 72.1185 122.166 78.225 122.178 85.0541C122.372 92.1747 119.781 99.0921 114.949 104.356C107.882 113.237 98.6134 120.141 88.05 124.392C87.4217 124.616 86.782 124.805 86.1335 124.96\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_3\"\n d=\"M41.8183 125.395C37.6149 123.224 33.6477 121.487 29.9828 119.25C21.5405 114.299 14.4778 107.331 9.43828 98.9796C6.53442 94.3985 5.34408 88.9493 6.07591 83.5852C7.056 75.2882 13.8859 68.8841 22.2829 68.3905C31.1231 67.2473 39.3527 73.0751 41.1455 81.7484C41.76 84.263 42.0762 86.8411 42.0868 89.4287C42.0868 100.516 42.0868 111.636 42.0868 122.823C42.0868 123.457 42.0867 124.059 41.8854 125.294\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_4\"\n d=\"M51.3337 127.431C47.9713 127.431 47.6681 127.198 47.6681 124.326V76.6386C48.1096 67.937 42.9747 59.906 34.8574 56.602C25.8992 52.8557 15.5485 54.8615 8.66523 61.6779C4.28638 66.6086 1.89197 72.9696 1.94049 79.5438C1.95423 80.2444 1.78037 80.9357 1.43588 81.5476C1.06552 79.9446 0.62885 78.2081 0.426687 76.7387C-0.724024 70.4463 0.471163 63.9529 3.78906 58.472C6.09291 54.6111 9.65016 51.6434 13.8762 50.0567C22.8587 46.555 32.9393 47.1785 41.4148 51.7598C47.6592 54.8694 51.5262 61.2882 51.3337 68.2232C51.5019 87.6249 51.3337 107.027 51.3337 126.396C51.3337 126.797 51.3337 127.164 51.3337 127.532\"\n fill=\"#252525\"\n />\n <path\n id=\"Vector_5\"\n d=\"M76.287 127.499V125.094C76.287 107.196 76.4883 89.2963 76.287 71.3966C76.0848 56.9034 84.2554 50.6588 95.7553 48.3545C101.535 47.2005 107.524 47.6393 113.071 49.6235C122.914 53.3319 128.994 63.1725 127.866 73.5672C127.631 76.2831 127.17 78.975 126.487 81.6151C125.916 78.2758 125.68 74.9364 124.772 71.597C122.808 64.3002 117.377 58.4174 110.228 55.8421C103.078 53.2668 95.1132 54.3239 88.8955 58.6734C83.0441 62.6207 79.7011 69.3237 80.086 76.3389C80.086 92.2349 80.086 108.131 80.086 124.026C80.086 127.366 80.086 127.366 76.2198 127.366\"\n fill=\"#252525\"\n />\n </g>\n </svg>\n </Box>\n );\n};\n","import React from 'react';\n\ntype ArrowDownIconProps = {\n readonly width?: string | number;\n readonly height?: string | number;\n readonly className?: string;\n};\n\nexport const ArrowDownIcon: React.FC<ArrowDownIconProps> = ({ width = 16, height = 16, className = '' }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n data-testid=\"arrow-down-icon\"\n >\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n );\n};\n","export interface GTMEvent {\n event: string;\n\n [key: string]: unknown;\n}\n\ndeclare global {\n interface Window {\n dataLayer: unknown[];\n }\n}\n\nexport function trackGTMEvent(eventData: GTMEvent): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const url = window.location.href;\n const updatedEventData = { ...eventData };\n\n const prefix = url.includes('personal-offer') ? 'postorefront_' : 'mysite_';\n updatedEventData.event = prefix + eventData.event;\n\n try {\n if (window.dataLayer) {\n window.dataLayer.push(updatedEventData);\n } else {\n console.error('GTM dataLayer not available, but event logged');\n window.dataLayer = [];\n window.dataLayer.push(updatedEventData);\n }\n } catch (error) {\n console.error('Failed to track GTM event:', error);\n }\n}\n","import { styled } from '@nuskin/foundation-theme';\n\nexport const DashboardContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 24px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 24px;\n }\n\n @media (min-width: 1080px) {\n padding: 32px;\n }\n`;\n\nexport const StatsRow = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 768px) {\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n }\n`;\n\nexport const WidgetContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 768px) {\n gap: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n }\n`;\n\nexport const TwoColumnGrid = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 24px;\n }\n`;\n\nexport const ErrorContainer = styled('div')`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;\n","import React from 'react';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport PublicIcon from '@mui/icons-material/Public';\nimport { NsSpinner } from '@nuskin/foundation-ui-components';\nimport {\n HeaderContainer,\n TitleSection,\n ShopTitle,\n DateRangeLabel,\n FiltersSection,\n FilterDropdownContainer,\n FilterLabel,\n StyledSelect,\n FilterIcon,\n LoadingIndicatorContainer,\n DesktopFiltersContainer,\n} from './DashboardHeader.styled';\nimport type { DateRangeOption, MarketOption, MarketFilterOption, DashboardStats } from '../types.d';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { useMarketOptions } from '../utils/marketOptions';\n\nexport interface DashboardHeaderProps {\n readonly shopTitle?: string;\n readonly dateRange: DateRangeOption;\n readonly market: MarketOption;\n readonly dateRangeLabel?: string;\n readonly isLoading?: boolean;\n readonly stats?: DashboardStats | null;\n\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n}\n\nexport const DashboardHeader: React.FC<DashboardHeaderProps> = ({\n shopTitle,\n dateRange,\n market,\n dateRangeLabel: dateRangeLabelProp,\n isLoading = false,\n stats,\n markets,\n onDateRangeChange,\n onMarketChange,\n}) => {\n const marketOptions = useMarketOptions(markets);\n\n const handleDateRangeChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newDateRange = event.target.value as DateRangeOption;\n onDateRangeChange?.(newDateRange);\n };\n\n const handleMarketChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newMarket = event.target.value;\n onMarketChange?.(newMarket);\n };\n\n const handleFilterKeyDown = (event: React.KeyboardEvent<HTMLSelectElement>) => {\n if (event.key === 'Escape') {\n (event.target as HTMLSelectElement).blur();\n }\n };\n\n const getDateRangeLabelText = () => {\n if (dateRangeLabelProp) return dateRangeLabelProp;\n if (stats?.dateRange) return stats.dateRange.label;\n return getTranslation(Keys.filter.dateRange.last30days);\n };\n\n return (\n <HeaderContainer as=\"header\" data-testid=\"dashboard-header\">\n <TitleSection>\n <ShopTitle data-testid=\"dashboard-shop-title\">\n {shopTitle ?? stats?.shopTitle ?? getTranslation(Keys.title)}\n </ShopTitle>\n <DateRangeLabel aria-live=\"polite\" data-testid=\"dashboard-date-range-label\">\n {getDateRangeLabelText()}\n </DateRangeLabel>\n </TitleSection>\n\n <FiltersSection\n aria-label={getTranslation(Keys.ariaLabel.dashboardFilters)}\n data-testid=\"dashboard-filters-section\"\n >\n <DesktopFiltersContainer>\n {isLoading && (\n <LoadingIndicatorContainer\n as=\"output\"\n aria-live=\"polite\"\n aria-label={getTranslation(Keys.ariaLabel.loadingDashboard)}\n data-testid=\"dashboard-loading-indicator\"\n >\n <NsSpinner />\n </LoadingIndicatorContainer>\n )}\n\n <FilterDropdownContainer>\n <FilterLabel htmlFor=\"filter-date-range\">\n {getTranslation(Keys.filter.dateRangeLabel)}\n </FilterLabel>\n <FilterIcon aria-hidden=\"true\">\n <CalendarTodayIcon />\n </FilterIcon>\n <StyledSelect\n id=\"filter-date-range\"\n data-testid=\"filter-date-range\"\n value={dateRange}\n onChange={handleDateRangeChange}\n onKeyDown={handleFilterKeyDown}\n disabled={isLoading}\n aria-label={`${getTranslation(Keys.ariaLabel.dateRangeFilter)} ${getTranslation(Keys.filter.dateRange[dateRange])}`}\n >\n <option value=\"last7days\">{getTranslation(Keys.filter.dateRange.last7days)}</option>\n <option value=\"last30days\">{getTranslation(Keys.filter.dateRange.last30days)}</option>\n <option value=\"last90days\">{getTranslation(Keys.filter.dateRange.last90days)}</option>\n <option value=\"thisMonth\">{getTranslation(Keys.filter.dateRange.thisMonth)}</option>\n </StyledSelect>\n </FilterDropdownContainer>\n\n <FilterDropdownContainer>\n <FilterLabel htmlFor=\"filter-market\">{getTranslation(Keys.filter.marketLabel)}</FilterLabel>\n <FilterIcon aria-hidden=\"true\">\n <PublicIcon />\n </FilterIcon>\n <StyledSelect\n id=\"filter-market\"\n data-testid=\"filter-market\"\n value={market}\n onChange={handleMarketChange}\n onKeyDown={handleFilterKeyDown}\n disabled={isLoading}\n aria-label={`${getTranslation(Keys.ariaLabel.marketFilter)} ${\n marketOptions.find((opt) => opt.value === market)?.label ?? String(market)\n }`}\n >\n {marketOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </StyledSelect>\n </FilterDropdownContainer>\n </DesktopFiltersContainer>\n </FiltersSection>\n </HeaderContainer>\n );\n};\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const HeaderContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 12px;\n min-height: 64px;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 24px;\n }\n\n @media (min-width: 1080px) {\n padding: 24px 32px;\n }\n`;\n\nexport const TitleSection = styled('div')`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n gap: 12px;\n flex-wrap: wrap;\n`;\n\nexport const ShopTitle = styled('h1')`\n font-size: 20px;\n font-weight: 600;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n\n @media (min-width: 768px) {\n font-size: 24px;\n }\n\n @media (min-width: 1080px) {\n font-size: 28px;\n }\n`;\n\nexport const DateRangeLabel = styled('div')`\n font-size: 13px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`;\n\nexport const FiltersSection = styled('div')`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`;\n\nexport const FilterDropdownContainer = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n`;\n\nexport const FilterLabel = styled('label')`\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N80')};\n white-space: nowrap;\n display: none;\n\n @media (min-width: 1080px) {\n display: block;\n }\n`;\n\nexport const StyledSelect = styled('select')`\n display: flex;\n align-items: center;\n gap: 12px;\n height: 40px;\n padding: 8px 12px;\n background-color: transparent;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n appearance: none;\n background-image: url('data:image/svg+xml;charset=UTF-8,%3csvg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"%3e%3cpath d=\"M5.625 7.3125L9 10.6875L12.375 7.3125\" stroke=\"%235f5f5f\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/%3e%3c/svg%3e');\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 32px;\n min-width: auto;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n\n &:focus {\n border-color: ${({ theme }) => getGenomeColor(theme, 'A70')};\n box-shadow: 0 0 0 3px ${({ theme }) => getGenomeColor(theme, 'A20')};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n @media (min-width: 768px) {\n min-width: 160px;\n }\n\n @media (min-width: 1080px) {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N10')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 8px;\n min-width: 180px;\n }\n`;\n\nexport const FilterIcon = styled('span')`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nexport const LoadingIndicatorContainer = styled('div')`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n overflow: hidden;\n\n svg,\n img,\n > * {\n width: 28px !important;\n height: 28px !important;\n max-width: 28px;\n max-height: 28px;\n }\n`;\n\nexport const DesktopFiltersContainer = styled('div')`\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n align-items: center;\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`;\n\nexport const StyledCircularProgress = styled('div')`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","export type TranslationEntry = { readonly key: string; readonly fallback: string };\n\nexport type TranslateFn = (key: string, fallback: string) => string;\n\nlet activeResolver: TranslateFn | undefined;\n\nexport function setTranslationResolver(resolver: TranslateFn | undefined): void {\n activeResolver = resolver;\n}\n\nexport function getTranslationResolver(): TranslateFn | undefined {\n return activeResolver;\n}\n\nexport function resolveTranslation(entry: TranslationEntry): string {\n if (!activeResolver) {\n return entry.fallback;\n }\n let result: string | undefined;\n try {\n result = activeResolver(entry.key, entry.fallback);\n } catch {\n result = undefined;\n }\n return typeof result === 'string' && result.length > 0 ? result : entry.fallback;\n}\n","import { resolveTranslation } from './translationResolver';\n\nexport const ShoppingDashboardTranslationKeys = {\n title: {\n key: 'shoppingDashboard.title',\n fallback: 'Shop Performance',\n },\n error: {\n key: 'shoppingDashboard.error',\n fallback: 'Error loading dashboard',\n },\n stats: {\n revenue: {\n key: 'shoppingDashboard.stats.revenue',\n fallback: 'Total Revenue',\n },\n volume: {\n key: 'shoppingDashboard.stats.volume',\n fallback: 'Volume',\n },\n visits: {\n key: 'shoppingDashboard.stats.visits',\n fallback: 'Site Visits',\n },\n subtitle: {\n dcSv: {\n key: 'shoppingDashboard.stats.subtitle.dcSv',\n fallback: 'DC-SV',\n },\n conversionRate: {\n key: 'shoppingDashboard.stats.subtitle.conversionRate',\n fallback: 'Conversion Rate',\n },\n },\n trend: {\n increased: {\n key: 'shoppingDashboard.stats.trend.increased',\n fallback: 'increased',\n },\n decreased: {\n key: 'shoppingDashboard.stats.trend.decreased',\n fallback: 'decreased',\n },\n unchanged: {\n key: 'shoppingDashboard.stats.trend.unchanged',\n fallback: 'unchanged',\n },\n },\n details: {\n key: 'shoppingDashboard.stats.details',\n fallback: 'details',\n },\n },\n filter: {\n dateRange: {\n label: {\n key: 'shoppingDashboard.filter.dateRange.label',\n fallback: 'Date Range',\n },\n last7days: {\n key: 'shoppingDashboard.filter.dateRange.last7days',\n fallback: 'Last 7 Days',\n },\n last30days: {\n key: 'shoppingDashboard.filter.dateRange.last30days',\n fallback: 'Last 30 Days',\n },\n last90days: {\n key: 'shoppingDashboard.filter.dateRange.last90days',\n fallback: 'Last 90 Days',\n },\n thisMonth: {\n key: 'shoppingDashboard.filter.dateRange.thisMonth',\n fallback: 'This Month',\n },\n },\n dateRangeLabel: {\n key: 'shoppingDashboard.filter.dateRangeLabel',\n fallback: 'Date Range',\n },\n market: {\n label: {\n key: 'shoppingDashboard.filter.market.label',\n fallback: 'Market',\n },\n all: {\n key: 'shoppingDashboard.filter.market.all',\n fallback: 'All Markets',\n },\n },\n marketLabel: {\n key: 'shoppingDashboard.filter.marketLabel',\n fallback: 'Market',\n },\n productSort: {\n label: {\n key: 'shoppingDashboard.filter.productSort.label',\n fallback: 'Sort By',\n },\n units: {\n key: 'shoppingDashboard.filter.productSort.units',\n fallback: 'Units',\n },\n revenue: {\n key: 'shoppingDashboard.filter.productSort.revenue',\n fallback: 'Revenue',\n },\n volume: {\n key: 'shoppingDashboard.filter.productSort.volume',\n fallback: 'Volume',\n },\n byUnits: {\n key: 'shoppingDashboard.filter.productSort.byUnits',\n fallback: 'By: Units',\n },\n byRevenue: {\n key: 'shoppingDashboard.filter.productSort.byRevenue',\n fallback: 'By: Revenue',\n },\n byVolume: {\n key: 'shoppingDashboard.filter.productSort.byVolume',\n fallback: 'By: Volume',\n },\n },\n signupView: {\n label: {\n key: 'shoppingDashboard.filter.signupView.label',\n fallback: 'Show',\n },\n all: {\n key: 'shoppingDashboard.filter.signupView.all',\n fallback: 'All',\n },\n members: {\n key: 'shoppingDashboard.filter.signupView.members',\n fallback: 'Members',\n },\n retail: {\n key: 'shoppingDashboard.filter.signupView.retail',\n fallback: 'Retail',\n },\n brandAffiliates: {\n key: 'shoppingDashboard.filter.signupView.brandAffiliates',\n fallback: 'Brand Affiliates',\n },\n showAll: {\n key: 'shoppingDashboard.filter.signupView.showAll',\n fallback: 'Show: All',\n },\n showMembers: {\n key: 'shoppingDashboard.filter.signupView.showMembers',\n fallback: 'Show: Members',\n },\n showRetail: {\n key: 'shoppingDashboard.filter.signupView.showRetail',\n fallback: 'Show: Retail',\n },\n showBrandAffiliates: {\n key: 'shoppingDashboard.filter.signupView.showBrandAffiliates',\n fallback: 'Show: Brand Affiliates',\n },\n },\n conversionType: {\n all: {\n key: 'shoppingDashboard.filter.conversionType.all',\n fallback: 'All',\n },\n standard: {\n key: 'shoppingDashboard.filter.conversionType.standard',\n fallback: 'Standard',\n },\n subscription: {\n key: 'shoppingDashboard.filter.conversionType.subscription',\n fallback: 'Subscription',\n },\n },\n categorySort: {\n byRevenue: {\n key: 'shoppingDashboard.filter.categorySort.byRevenue',\n fallback: 'By: Revenue',\n },\n byTrend: {\n key: 'shoppingDashboard.filter.categorySort.byTrend',\n fallback: 'By: Trend',\n },\n },\n },\n widget: {\n topProducts: {\n title: {\n key: 'shoppingDashboard.widget.topProducts.title',\n fallback: 'Top Selling Products',\n },\n viewAll: {\n key: 'shoppingDashboard.widget.topProducts.viewAll',\n fallback: 'View All Products',\n },\n units: {\n key: 'shoppingDashboard.widget.topProducts.units',\n fallback: 'Units',\n },\n revenue: {\n key: 'shoppingDashboard.widget.topProducts.revenue',\n fallback: 'Revenue',\n },\n loading: {\n key: 'shoppingDashboard.widget.topProducts.loading',\n fallback: 'Loading products...',\n },\n empty: {\n key: 'shoppingDashboard.widget.topProducts.empty',\n fallback: 'No products available',\n },\n ariaLabel: {\n key: 'shoppingDashboard.widget.topProducts.ariaLabel',\n fallback: 'Top Selling Products widget',\n },\n titleAriaLabel: {\n key: 'shoppingDashboard.widget.topProducts.titleAriaLabel',\n fallback: 'Click to view full top products details page',\n },\n sortAriaLabel: {\n key: 'shoppingDashboard.widget.topProducts.sortAriaLabel',\n fallback: 'Sort products by',\n },\n noImageAriaLabel: {\n key: 'shoppingDashboard.widget.topProducts.noImageAriaLabel',\n fallback: 'No image available',\n },\n unitsSuffix: {\n key: 'shoppingDashboard.widget.topProducts.unitsSuffix',\n fallback: 'units',\n },\n revenueSuffix: {\n key: 'shoppingDashboard.widget.topProducts.revenueSuffix',\n fallback: 'revenue',\n },\n dcSvSuffix: {\n key: 'shoppingDashboard.widget.topProducts.dcSvSuffix',\n fallback: 'DC-SV',\n },\n rank: {\n key: 'shoppingDashboard.widget.topProducts.rank',\n fallback: 'Rank',\n },\n trend: {\n key: 'shoppingDashboard.widget.topProducts.trend',\n fallback: 'Trend',\n },\n },\n conversionRate: {\n title: {\n key: 'shoppingDashboard.widget.conversionRate.title',\n fallback: 'Conversion Rate',\n },\n formula: {\n key: 'shoppingDashboard.widget.conversionRate.formula',\n fallback: 'Orders \\u00F7 Site visits',\n },\n comparison: {\n key: 'shoppingDashboard.widget.conversionRate.comparison',\n fallback: 'compared to this time last month',\n },\n chartAriaLabel: {\n key: 'shoppingDashboard.widget.conversionRate.chartAriaLabel',\n fallback: 'Conversion Rate chart showing daily rates',\n },\n titleAriaLabel: {\n key: 'shoppingDashboard.widget.conversionRate.titleAriaLabel',\n fallback: 'Click to view full conversion rate details page',\n },\n filterAriaLabel: {\n key: 'shoppingDashboard.widget.conversionRate.filterAriaLabel',\n fallback: 'Filter conversion rate by customer type',\n },\n noData: {\n key: 'shoppingDashboard.widget.conversionRate.noData',\n fallback: 'No data',\n },\n noChange: {\n key: 'shoppingDashboard.widget.conversionRate.noChange',\n fallback: 'No change',\n },\n tooltipOrders: {\n key: 'shoppingDashboard.widget.conversionRate.tooltipOrders',\n fallback: 'orders',\n },\n tooltipVisits: {\n key: 'shoppingDashboard.widget.conversionRate.tooltipVisits',\n fallback: 'visits',\n },\n ordersPerSiteVisits: {\n key: 'shoppingDashboard.widget.conversionRate.ordersPerSiteVisits',\n fallback: 'Orders / Site Visits',\n },\n },\n signups: {\n title: {\n key: 'shoppingDashboard.widget.signups.title',\n fallback: 'Sign-ups',\n },\n total: {\n key: 'shoppingDashboard.widget.signups.total',\n fallback: 'Total',\n },\n members: {\n key: 'shoppingDashboard.widget.signups.members',\n fallback: 'Members',\n },\n retail: {\n key: 'shoppingDashboard.widget.signups.retail',\n fallback: 'Retail',\n },\n brandAffiliates: {\n key: 'shoppingDashboard.widget.signups.brandAffiliates',\n fallback: 'Brand Affiliates',\n },\n chartAriaLabel: {\n key: 'shoppingDashboard.widget.signups.chartAriaLabel',\n fallback: 'Signups multi-line chart showing Total, Members, Retail, and Brand Affiliates',\n },\n titleAriaLabel: {\n key: 'shoppingDashboard.widget.signups.titleAriaLabel',\n fallback: 'Click to view full signups details page',\n },\n filterAriaLabel: {\n key: 'shoppingDashboard.widget.signups.filterAriaLabel',\n fallback: 'Filter signups view',\n },\n noData: {\n key: 'shoppingDashboard.widget.signups.noData',\n fallback: 'No data',\n },\n noChange: {\n key: 'shoppingDashboard.widget.signups.noChange',\n fallback: 'No change',\n },\n totalSignupsInPeriod: {\n key: 'shoppingDashboard.widget.signups.totalSignupsInPeriod',\n fallback: 'Total sign-ups in period',\n },\n noTrendData: {\n key: 'shoppingDashboard.widget.signups.noTrendData',\n fallback: 'No sign-up trend data available.',\n },\n },\n topCategories: {\n title: {\n key: 'shoppingDashboard.widget.topCategories.title',\n fallback: 'Top Categories',\n },\n revenue: {\n key: 'shoppingDashboard.widget.topCategories.revenue',\n fallback: 'Revenue',\n },\n units: {\n key: 'shoppingDashboard.widget.topCategories.units',\n fallback: 'Units',\n },\n empty: {\n key: 'shoppingDashboard.widget.topCategories.empty',\n fallback: 'No category data available',\n },\n chartAriaLabel: {\n key: 'shoppingDashboard.widget.topCategories.chartAriaLabel',\n fallback: 'Top Categories donut chart showing revenue distribution by category',\n },\n titleAriaLabel: {\n key: 'shoppingDashboard.widget.topCategories.titleAriaLabel',\n fallback: 'Click to view full categories details page',\n },\n sortAriaLabel: {\n key: 'shoppingDashboard.widget.topCategories.sortAriaLabel',\n fallback: 'Sort categories by',\n },\n },\n menu: {\n ariaLabel: {\n key: 'shoppingDashboard.widget.menu.ariaLabel',\n fallback: 'widget options',\n },\n fullView: {\n key: 'shoppingDashboard.widget.menu.fullView',\n fallback: 'Full View',\n },\n },\n },\n navigation: {\n backToDashboard: {\n key: 'shoppingDashboard.navigation.backToDashboard',\n fallback: 'Back to Dashboard',\n },\n backAriaLabel: {\n key: 'shoppingDashboard.navigation.backAriaLabel',\n fallback: 'Back to dashboard',\n },\n },\n ariaLabel: {\n dashboard: {\n key: 'shoppingDashboard.ariaLabel.dashboard',\n fallback: 'Shopping Dashboard',\n },\n statsRow: {\n key: 'shoppingDashboard.ariaLabel.statsRow',\n fallback: 'Key performance metrics',\n },\n dashboardFilters: {\n key: 'shoppingDashboard.ariaLabel.dashboardFilters',\n fallback: 'Dashboard filters',\n },\n loadingDashboard: {\n key: 'shoppingDashboard.ariaLabel.loadingDashboard',\n fallback: 'Loading dashboard data',\n },\n dateRangeFilter: {\n key: 'shoppingDashboard.ariaLabel.dateRangeFilter',\n fallback: 'Date range filter, currently selected:',\n },\n marketFilter: {\n key: 'shoppingDashboard.ariaLabel.marketFilter',\n fallback: 'Market filter, currently selected:',\n },\n filterSuffix: {\n key: 'shoppingDashboard.ariaLabel.filterSuffix',\n fallback: 'filter',\n },\n },\n fullView: {\n signups: {\n columns: {\n id: { key: 'shoppingDashboard.fullView.signups.columns.id', fallback: 'ID' },\n name: { key: 'shoppingDashboard.fullView.signups.columns.name', fallback: 'Name' },\n date: { key: 'shoppingDashboard.fullView.signups.columns.date', fallback: 'Date' },\n type: { key: 'shoppingDashboard.fullView.signups.columns.type', fallback: 'Type' },\n email: { key: 'shoppingDashboard.fullView.signups.columns.email', fallback: 'Email' },\n status: { key: 'shoppingDashboard.fullView.signups.columns.status', fallback: 'Status' },\n },\n detailsTitle: {\n key: 'shoppingDashboard.fullView.signups.detailsTitle',\n fallback: 'Signup Details',\n },\n },\n conversionRate: {\n columns: {\n orderId: { key: 'shoppingDashboard.fullView.conversionRate.columns.orderId', fallback: 'Order ID' },\n date: { key: 'shoppingDashboard.fullView.conversionRate.columns.date', fallback: 'Date' },\n customer: { key: 'shoppingDashboard.fullView.conversionRate.columns.customer', fallback: 'Customer' },\n type: { key: 'shoppingDashboard.fullView.conversionRate.columns.type', fallback: 'Type' },\n items: { key: 'shoppingDashboard.fullView.conversionRate.columns.items', fallback: 'Items' },\n total: { key: 'shoppingDashboard.fullView.conversionRate.columns.total', fallback: 'Total' },\n bv: { key: 'shoppingDashboard.fullView.conversionRate.columns.bv', fallback: 'BV' },\n orderTotal: {\n key: 'shoppingDashboard.fullView.conversionRate.columns.orderTotal',\n fallback: 'Order Total',\n },\n totalSv: { key: 'shoppingDashboard.fullView.conversionRate.columns.totalSv', fallback: 'Total SV' },\n },\n orderDetailsTitle: {\n key: 'shoppingDashboard.fullView.conversionRate.orderDetailsTitle',\n fallback: 'Order Details',\n },\n notAvailable: {\n key: 'shoppingDashboard.fullView.conversionRate.notAvailable',\n fallback: 'N/A',\n },\n },\n products: {\n columns: {\n rank: { key: 'shoppingDashboard.fullView.products.columns.rank', fallback: '#' },\n product: { key: 'shoppingDashboard.fullView.products.columns.product', fallback: 'Product' },\n unitsSold: { key: 'shoppingDashboard.fullView.products.columns.unitsSold', fallback: 'Units Sold' },\n revenue: { key: 'shoppingDashboard.fullView.products.columns.revenue', fallback: 'Revenue' },\n volume: { key: 'shoppingDashboard.fullView.products.columns.volume', fallback: 'Volume (DC-SV)' },\n },\n skuPrefix: {\n key: 'shoppingDashboard.fullView.products.skuPrefix',\n fallback: 'SKU',\n },\n noProducts: {\n key: 'shoppingDashboard.fullView.products.noProducts',\n fallback: 'No products available.',\n },\n },\n categories: {\n columns: {\n category: { key: 'shoppingDashboard.fullView.categories.columns.category', fallback: 'Category' },\n revenue: { key: 'shoppingDashboard.fullView.categories.columns.revenue', fallback: 'Revenue' },\n percentOfTotal: {\n key: 'shoppingDashboard.fullView.categories.columns.percentOfTotal',\n fallback: '% of Total',\n },\n trend: { key: 'shoppingDashboard.fullView.categories.columns.trend', fallback: 'Trend' },\n },\n allCategoriesTitle: {\n key: 'shoppingDashboard.fullView.categories.allCategoriesTitle',\n fallback: 'All Categories',\n },\n noCategoryData: {\n key: 'shoppingDashboard.fullView.categories.noCategoryData',\n fallback: 'No category data available.',\n },\n },\n },\n dataTable: {\n noDataAvailable: {\n key: 'shoppingDashboard.dataTable.noDataAvailable',\n fallback: 'No data available',\n },\n sortableColumn: {\n key: 'shoppingDashboard.dataTable.sortableColumn',\n fallback: ', sortable column',\n },\n },\n pagination: {\n previousPage: {\n key: 'shoppingDashboard.pagination.previousPage',\n fallback: 'Previous page',\n },\n nextPage: {\n key: 'shoppingDashboard.pagination.nextPage',\n fallback: 'Next page',\n },\n goToPage: {\n key: 'shoppingDashboard.pagination.goToPage',\n fallback: 'Go to page',\n },\n of: {\n key: 'shoppingDashboard.pagination.of',\n fallback: 'of',\n },\n },\n defaults: {\n zeroTrend: {\n key: 'shoppingDashboard.defaults.zeroTrend',\n fallback: '+0%',\n },\n noValue: {\n key: 'shoppingDashboard.defaults.noValue',\n fallback: '--',\n },\n },\n} as const;\n\ntype TranslationEntry = { readonly key: string; readonly fallback: string };\n\nexport function getTranslation(entry: TranslationEntry): string {\n return resolveTranslation(entry);\n}\n","import { useMemo } from 'react';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport type { MarketFilterOption } from '../types.d';\n\nexport function buildDefaultMarketOptions(): MarketFilterOption[] {\n return [{ value: 'all', label: getTranslation(Keys.filter.market.all) }];\n}\n\nexport function resolveMarketOptions(\n markets: ReadonlyArray<MarketFilterOption> | undefined,\n): ReadonlyArray<MarketFilterOption> {\n if (markets && markets.length > 0) {\n return markets;\n }\n return buildDefaultMarketOptions();\n}\n\nexport function useMarketOptions(\n markets: ReadonlyArray<MarketFilterOption> | undefined,\n): ReadonlyArray<MarketFilterOption> {\n return useMemo(() => resolveMarketOptions(markets), [markets]);\n}\n","import React from 'react';\nimport { getTrendIcon } from '../utils/trendUtils';\nimport {\n StatsCardContainer,\n StatsTitle,\n StatsValueContainer,\n StatsValue,\n StatsSubtitle,\n TrendContainer,\n TrendIcon,\n TrendText,\n StatsCardHeader,\n SplitTitle,\n SplitRow,\n LegendColumn,\n SplitTrend,\n LegendCaption,\n} from './StatsCard.styled';\nimport { StatsCardSkeleton } from './LoadingSkeletons';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface StatsCardProps {\n readonly title: string;\n readonly value: string;\n readonly subtitle?: string;\n readonly caption?: string;\n readonly layout?: 'default' | 'split';\n readonly trendDirection?: 'up' | 'down' | 'neutral';\n readonly trendValue?: string;\n readonly testId?: string;\n readonly isLoading?: boolean;\n}\n\nconst StatsCardComponent: React.FC<StatsCardProps> = ({\n title,\n value,\n subtitle,\n caption,\n layout = 'default',\n trendDirection = 'neutral',\n trendValue,\n testId,\n isLoading = false,\n}) => {\n if (isLoading) {\n return (\n <StatsCardContainer $layout={layout} data-testid={testId}>\n <StatsCardSkeleton />\n </StatsCardContainer>\n );\n }\n\n const getTrendAriaLabel = () => {\n let directionText = getTranslation(Keys.stats.trend.unchanged);\n if (trendDirection === 'up') directionText = getTranslation(Keys.stats.trend.increased);\n else if (trendDirection === 'down') directionText = getTranslation(Keys.stats.trend.decreased);\n\n return `${title} ${directionText} ${trendValue ?? ''}`;\n };\n\n if (layout === 'split') {\n return (\n <StatsCardContainer as=\"article\" $layout=\"split\" aria-label={`${title}: ${value}`} data-testid={testId}>\n <SplitTitle id={`stats-title-${testId}`}>{title}</SplitTitle>\n <SplitRow>\n <StatsValue aria-describedby={`stats-title-${testId}`} data-testid={`stats-value-${testId}`}>\n {value}\n </StatsValue>\n {(trendValue ?? caption) && (\n <LegendColumn>\n {trendValue && (\n <SplitTrend\n as=\"output\"\n direction={trendDirection}\n aria-live=\"polite\"\n aria-label={getTrendAriaLabel()}\n data-testid={`stats-trend-${testId}`}\n >\n <TrendIcon aria-hidden=\"true\">{getTrendIcon(trendDirection)}</TrendIcon>\n <TrendText>{trendValue}</TrendText>\n </SplitTrend>\n )}\n {caption && (\n <LegendCaption data-testid={`stats-caption-${testId}`}>{caption}</LegendCaption>\n )}\n </LegendColumn>\n )}\n </SplitRow>\n </StatsCardContainer>\n );\n }\n\n return (\n <StatsCardContainer as=\"article\" aria-label={`${title}: ${value}`} data-testid={testId}>\n <StatsCardHeader>\n <StatsTitle id={`stats-title-${testId}`}>{title}</StatsTitle>\n\n {trendValue && (\n <TrendContainer\n as=\"output\"\n direction={trendDirection}\n aria-live=\"polite\"\n aria-label={getTrendAriaLabel()}\n data-testid={`stats-trend-${testId}`}\n >\n <TrendIcon aria-hidden=\"true\">{getTrendIcon(trendDirection)}</TrendIcon>\n <TrendText>{trendValue}</TrendText>\n </TrendContainer>\n )}\n </StatsCardHeader>\n\n <StatsValueContainer>\n <StatsValue aria-describedby={`stats-title-${testId}`} data-testid={`stats-value-${testId}`}>\n {value}\n </StatsValue>\n {subtitle && (\n <StatsSubtitle\n aria-label={`${title} ${getTranslation(Keys.stats.details)}: ${subtitle}`}\n data-testid={`stats-subtitle-${testId}`}\n >\n {subtitle}\n </StatsSubtitle>\n )}\n </StatsValueContainer>\n </StatsCardContainer>\n );\n};\n\nexport const StatsCard = React.memo(StatsCardComponent);\nStatsCard.displayName = 'StatsCard';\n","import React from 'react';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport type { TrendDirection } from '../shared/types';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport function parseTrendPercent(value?: string): number | null {\n if (!value) return null;\n const cleanedValue = value.replace('%', '').trim();\n const parsedValue = Number(cleanedValue);\n return Number.isFinite(parsedValue) ? parsedValue : null;\n}\n\nexport function resolveTrendDirection(value?: string): TrendDirection {\n const parsedValue = parseTrendPercent(value);\n if (parsedValue === null) return 'neutral';\n if (parsedValue > 0) return 'up';\n if (parsedValue < 0) return 'down';\n return 'neutral';\n}\n\nexport function calculateWeightedRevenueTrend<T>(\n items: readonly T[],\n getRevenue: (item: T) => number,\n getTrend: (item: T) => string | undefined,\n): { direction: TrendDirection; formatted: string } {\n const { weightedSum, weight } = items.reduce(\n (accumulator, item) => {\n const trendValue = parseTrendPercent(getTrend(item));\n if (trendValue === null) return accumulator;\n return {\n weightedSum: accumulator.weightedSum + trendValue * getRevenue(item),\n weight: accumulator.weight + getRevenue(item),\n };\n },\n { weightedSum: 0, weight: 0 },\n );\n\n const average = weight > 0 ? weightedSum / weight : 0;\n let direction: TrendDirection = 'neutral';\n if (average > 0) direction = 'up';\n else if (average < 0) direction = 'down';\n\n return { direction, formatted: `${average > 0 ? '+' : ''}${average.toFixed(1)}%` };\n}\n\nexport function getTrendDirectionLabel(direction: TrendDirection): string {\n if (direction === 'up') return getTranslation(Keys.stats.trend.increased);\n if (direction === 'down') return getTranslation(Keys.stats.trend.decreased);\n return getTranslation(Keys.stats.trend.unchanged);\n}\n\nexport function getTrendIcon(direction: TrendDirection): React.ReactNode {\n switch (direction) {\n case 'up':\n return <TrendingUpIcon />;\n case 'down':\n return <TrendingDownIcon />;\n case 'neutral':\n default:\n return <RemoveIcon />;\n }\n}\n\nexport function getTrendColor(direction: TrendDirection): string {\n switch (direction) {\n case 'up':\n return '#4caf50';\n case 'down':\n return '#f44336';\n case 'neutral':\n default:\n return '#757575';\n }\n}\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const StatsCardContainer = styled('div')<{ $layout?: 'default' | 'split' }>`\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n gap: ${({ $layout }) => ($layout === 'split' ? '8px' : '0')};\n padding: ${({ $layout }) => ($layout === 'split' ? '16px' : '12px')};\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n border-radius: 8px;\n min-height: ${({ $layout }) => ($layout === 'split' ? '127px' : '120px')};\n transition: box-shadow 0.2s ease;\n\n &:hover {\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.08);\n }\n\n @media (min-width: 768px) {\n padding: ${({ $layout }) => ($layout === 'split' ? '24px' : '20px')};\n min-height: ${({ $layout }) => ($layout === 'split' ? '127px' : '140px')};\n }\n\n @media (min-width: 1080px) {\n padding: 24px;\n min-height: ${({ $layout }) => ($layout === 'split' ? '127px' : '160px')};\n }\n`;\n\nexport const SplitTitle = styled('div')`\n width: 100%;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`;\n\nexport const SplitRow = styled('div')`\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n`;\n\nexport const LegendColumn = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n gap: 2px;\n`;\n\nexport const SplitTrend = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n flex-shrink: 0;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return '#066100';\n if (direction === 'down') return '#9b131a';\n return getGenomeColor(theme, 'N70');\n }};\n\n svg {\n width: 24px;\n height: 24px;\n }\n`;\n\nexport const LegendCaption = styled('div')`\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0.12px;\n text-align: right;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n`;\n\nexport const StatsTitle = styled('div')`\n font-size: 12px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n margin-bottom: 4px;\n text-transform: capitalize;\n\n @media (min-width: 768px) {\n font-size: 13px;\n margin-bottom: 6px;\n }\n\n @media (min-width: 1080px) {\n font-size: 14px;\n }\n`;\n\nexport const StatsValueContainer = styled('div')`\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n gap: 8px;\n margin-top: 8px;\n`;\n\nexport const StatsValue = styled('div')`\n font-size: 24px;\n font-weight: 700;\n line-height: 1.2;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n\n @media (min-width: 768px) {\n font-size: 28px;\n }\n\n @media (min-width: 1080px) {\n font-size: 32px;\n }\n`;\n\nexport const StatsSubtitle = styled('div')`\n font-size: 16px;\n font-weight: 400;\n line-height: normal;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n padding-bottom: 2px;\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`;\n\nexport const TrendContainer = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n flex-shrink: 0;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return '#22C55E';\n if (direction === 'down') return '#DC2626';\n return getGenomeColor(theme, 'N70');\n }};\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n @media (min-width: 768px) {\n font-size: 14px;\n margin-top: 12px;\n\n svg {\n width: 18px;\n height: 18px;\n }\n }\n`;\n\nexport const TrendIcon = styled('span')`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const TrendText = styled('span')`\n white-space: nowrap;\n`;\n\nexport const StatsCardHeader = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {\n SkeletonCard,\n SkeletonHeader,\n SkeletonRow,\n StatsCardWrapper,\n StatsCardHeaderRow,\n StatsCardBody,\n StatsCardSubtitle,\n ProductRowInfo,\n ProductRowMetrics,\n ChartMetricRow,\n ChartMetricTrend,\n ChartAreaSkeleton,\n PieChartLayout,\n PieCircleSkeleton,\n LegendList,\n LegendRowWrapper,\n LegendRowInfo,\n DashboardLayout,\n DashboardHeaderRow,\n DashboardFilterGroup,\n StatsGrid,\n WidgetGrid,\n FullViewLayout,\n FullViewMetricCard,\n FullViewMetricCenter,\n FullViewChartArea,\n FullViewTableCard,\n FullViewTableRow,\n SummaryCardsGrid,\n} from './LoadingSkeletons.styled';\n\nexport const StatsCardSkeleton: React.FC = () => (\n <StatsCardWrapper data-testid=\"skeleton-stats-card\">\n <StatsCardHeaderRow>\n <Skeleton variant=\"text\" width={80} height={18} />\n <Skeleton variant=\"text\" width={48} height={16} />\n </StatsCardHeaderRow>\n <StatsCardBody>\n <Skeleton variant=\"text\" width={120} height={36} />\n <StatsCardSubtitle variant=\"text\" width={100} height={16} />\n </StatsCardBody>\n </StatsCardWrapper>\n);\n\nconst ProductRowSkeleton: React.FC = () => (\n <SkeletonRow>\n <Skeleton variant=\"rounded\" width={28} height={28} />\n <Skeleton variant=\"rounded\" width={50} height={50} />\n <ProductRowInfo>\n <Skeleton variant=\"text\" width=\"70%\" height={18} />\n <Skeleton variant=\"text\" width=\"50%\" height={14} />\n </ProductRowInfo>\n <ProductRowMetrics>\n <Skeleton variant=\"text\" width={80} height={18} />\n <Skeleton variant=\"text\" width={48} height={14} />\n </ProductRowMetrics>\n </SkeletonRow>\n);\n\nexport const ProductsListSkeleton: React.FC = () => (\n <SkeletonCard data-testid=\"skeleton-products-list\">\n <SkeletonHeader>\n <Skeleton variant=\"text\" width={160} height={22} />\n <Skeleton variant=\"rounded\" width={100} height={32} />\n </SkeletonHeader>\n {['product-1', 'product-2', 'product-3', 'product-4', 'product-5'].map((rowKey) => (\n <ProductRowSkeleton key={rowKey} />\n ))}\n </SkeletonCard>\n);\n\nexport const ChartWidgetSkeleton: React.FC = () => (\n <SkeletonCard data-testid=\"skeleton-chart-widget\">\n <SkeletonHeader>\n <Skeleton variant=\"text\" width={140} height={22} />\n <Skeleton variant=\"rounded\" width={110} height={32} />\n </SkeletonHeader>\n <ChartMetricRow>\n <Skeleton variant=\"text\" width={100} height={36} />\n <ChartMetricTrend>\n <Skeleton variant=\"text\" width={60} height={18} />\n <Skeleton variant=\"text\" width={140} height={14} />\n </ChartMetricTrend>\n </ChartMetricRow>\n <ChartAreaSkeleton variant=\"rounded\" width=\"100%\" />\n </SkeletonCard>\n);\n\nconst LegendRowSkeleton: React.FC = () => (\n <LegendRowWrapper>\n <Skeleton variant=\"circular\" width={12} height={12} />\n <LegendRowInfo>\n <Skeleton variant=\"text\" width=\"60%\" height={16} />\n <Skeleton variant=\"text\" width=\"40%\" height={14} />\n </LegendRowInfo>\n <Skeleton variant=\"text\" width={36} height={18} />\n </LegendRowWrapper>\n);\n\nexport const CategoriesPieChartSkeleton: React.FC = () => (\n <SkeletonCard data-testid=\"skeleton-categories-pie\">\n <SkeletonHeader>\n <Skeleton variant=\"text\" width={140} height={22} />\n <Skeleton variant=\"rounded\" width={100} height={32} />\n </SkeletonHeader>\n <PieChartLayout>\n <PieCircleSkeleton variant=\"circular\" />\n <LegendList>\n {['legend-1', 'legend-2', 'legend-3', 'legend-4', 'legend-5'].map((rowKey) => (\n <LegendRowSkeleton key={rowKey} />\n ))}\n </LegendList>\n </PieChartLayout>\n </SkeletonCard>\n);\n\nexport const DashboardSkeleton: React.FC = () => (\n <DashboardLayout data-testid=\"skeleton-dashboard\">\n <DashboardHeaderRow>\n <Skeleton variant=\"text\" width={200} height={32} />\n <DashboardFilterGroup>\n <Skeleton variant=\"rounded\" width={140} height={36} />\n <Skeleton variant=\"rounded\" width={140} height={36} />\n </DashboardFilterGroup>\n </DashboardHeaderRow>\n\n <StatsGrid>\n <StatsCardSkeleton />\n <StatsCardSkeleton />\n <StatsCardSkeleton />\n </StatsGrid>\n\n <WidgetGrid>\n <ProductsListSkeleton />\n <ChartWidgetSkeleton />\n </WidgetGrid>\n\n <WidgetGrid>\n <ChartWidgetSkeleton />\n <CategoriesPieChartSkeleton />\n </WidgetGrid>\n </DashboardLayout>\n);\n\nexport const FullViewChartSkeleton: React.FC = () => (\n <FullViewLayout data-testid=\"skeleton-fullview-chart\">\n <FullViewMetricCard>\n <FullViewMetricCenter>\n <Skeleton variant=\"text\" width={140} height={52} />\n <Skeleton variant=\"text\" width={80} height={24} />\n <Skeleton variant=\"text\" width={160} height={16} />\n </FullViewMetricCenter>\n <FullViewChartArea variant=\"rounded\" width=\"100%\" />\n </FullViewMetricCard>\n\n <FullViewTableCard>\n <Skeleton variant=\"text\" width={200} height={24} />\n {['table-row-1', 'table-row-2', 'table-row-3', 'table-row-4', 'table-row-5'].map((rowKey) => (\n <FullViewTableRow key={rowKey} variant=\"rounded\" width=\"100%\" height={44} />\n ))}\n </FullViewTableCard>\n </FullViewLayout>\n);\n\nexport const FullViewTableSkeleton: React.FC = () => (\n <FullViewLayout data-testid=\"skeleton-fullview-table\">\n <SummaryCardsGrid>\n <StatsCardSkeleton />\n <StatsCardSkeleton />\n <StatsCardSkeleton />\n </SummaryCardsGrid>\n\n <FullViewTableCard>\n <Skeleton variant=\"text\" width={200} height={24} />\n <FullViewTableRow variant=\"rounded\" width=\"100%\" height={40} />\n {[\n 'summary-row-1',\n 'summary-row-2',\n 'summary-row-3',\n 'summary-row-4',\n 'summary-row-5',\n 'summary-row-6',\n 'summary-row-7',\n 'summary-row-8',\n ].map((rowKey) => (\n <FullViewTableRow key={rowKey} variant=\"rounded\" width=\"100%\" height={44} />\n ))}\n </FullViewTableCard>\n </FullViewLayout>\n);\n","import { styled } from '@nuskin/foundation-theme';\nimport Skeleton from '@mui/material/Skeleton';\n\nexport const SkeletonCard = styled('div')`\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`;\n\nexport const SkeletonHeader = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`;\n\nexport const SkeletonRow = styled('div')`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n\n @media (min-width: 768px) {\n gap: 14px;\n padding: 14px 0;\n }\n`;\n\nexport const StatsCardWrapper = styled('div')`\n display: flex;\n flex-direction: column;\n padding: 12px;\n border-radius: 8px;\n min-height: 120px;\n\n @media (min-width: 600px) {\n padding: 20px;\n min-height: 140px;\n }\n @media (min-width: 900px) {\n padding: 24px;\n min-height: 160px;\n }\n`;\n\nexport const StatsCardHeaderRow = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n\nexport const StatsCardBody = styled('div')`\n margin-top: 8px;\n`;\n\nexport const StatsCardSubtitle = styled(Skeleton)`\n margin-top: 4px;\n`;\n\nexport const ProductRowInfo = styled('div')`\n flex: 1;\n min-width: 0;\n`;\n\nexport const ProductRowMetrics = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n`;\n\nexport const ChartMetricRow = styled('div')`\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 16px;\n`;\n\nexport const ChartMetricTrend = styled('div')`\n padding-top: 4px;\n`;\n\nexport const ChartAreaSkeleton = styled(Skeleton)`\n border-radius: 8px;\n height: 220px;\n\n @media (min-width: 600px) {\n height: 280px;\n }\n @media (min-width: 900px) {\n height: 340px;\n }\n`;\n\nexport const PieChartLayout = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n @media (min-width: 600px) {\n flex-direction: row;\n gap: 24px;\n }\n`;\n\nexport const PieCircleSkeleton = styled(Skeleton)`\n width: 100%;\n height: 200px;\n border-radius: 8px;\n flex-shrink: 0;\n\n @media (min-width: 600px) {\n width: 200px;\n border-radius: 50%;\n }\n`;\n\nexport const LegendList = styled('div')`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nexport const LegendRowWrapper = styled('div')`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n`;\n\nexport const LegendRowInfo = styled('div')`\n flex: 1;\n`;\n\nexport const DashboardLayout = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 24px;\n\n @media (min-width: 600px) {\n gap: 32px;\n }\n @media (min-width: 900px) {\n gap: 40px;\n }\n`;\n\nexport const DashboardHeaderRow = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n`;\n\nexport const DashboardFilterGroup = styled('div')`\n display: flex;\n gap: 16px;\n`;\n\nexport const StatsGrid = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n\n @media (min-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n }\n @media (min-width: 900px) {\n gap: 24px;\n }\n`;\n\nexport const WidgetGrid = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n\n @media (min-width: 900px) {\n grid-template-columns: repeat(2, 1fr);\n gap: 24px;\n }\n`;\n\nexport const FullViewLayout = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 24px;\n`;\n\nexport const FullViewMetricCard = styled('div')`\n padding: 24px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n`;\n\nexport const FullViewMetricCenter = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px 0;\n gap: 8px;\n`;\n\nexport const FullViewChartArea = styled(Skeleton)`\n border-radius: 8px;\n height: 260px;\n\n @media (min-width: 600px) {\n height: 320px;\n }\n @media (min-width: 900px) {\n height: 400px;\n }\n`;\n\nexport const FullViewTableCard = styled('div')`\n padding: 20px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n`;\n\nexport const FullViewTableRow = styled(Skeleton)`\n border-radius: 4px;\n`;\n\nexport const SummaryCardsGrid = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n\n @media (min-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n }\n`;\n","import React from 'react';\nimport ShoppingCartIcon from '@mui/icons-material/ShoppingCart';\nimport { getTrendIcon, getTrendDirectionLabel } from '../../utils/trendUtils';\nimport { formatMoney } from '../../utils/dataUtils';\nimport {\n ProductsListContainer,\n WidgetHeader,\n WidgetTitle,\n SortDropdown,\n HeaderActionsContainer,\n ProductsList,\n ProductItem,\n ProductRank,\n ProductImage,\n ProductImagePlaceholder,\n ProductInfo,\n ProductName,\n ProductSubtitle,\n ProductMetrics,\n ProductValue,\n ProductTrend,\n EmptyState,\n EmptyStateText,\n} from './TopSellingProductsList.styled';\nimport { WidgetMenu } from '../WidgetMenu';\nimport type { TopProduct, ProductSortOption } from '../../types.d';\nimport type { TrendDirection } from '../types';\nimport { ProductsListSkeleton } from '../LoadingSkeletons';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface TopSellingProductsListProps {\n readonly products: TopProduct[];\n readonly productSort: ProductSortOption;\n readonly isLoading?: boolean;\n readonly maxProducts?: number;\n readonly onSortChange?: (sort: ProductSortOption) => void;\n readonly onTitleClick?: () => void;\n}\n\nconst TopSellingProductsListComponent: React.FC<TopSellingProductsListProps> = ({\n products,\n productSort,\n isLoading = false,\n maxProducts = 5,\n onSortChange,\n onTitleClick,\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newSort = event.target.value as ProductSortOption;\n onSortChange?.(newSort);\n };\n\n const formatValue = (product: TopProduct, sortBy: ProductSortOption) => {\n switch (sortBy) {\n case 'units':\n return `${product.unitsSold.toLocaleString()} ${getTranslation(Keys.widget.topProducts.unitsSuffix)}`;\n case 'revenue':\n return formatMoney(product.revenue, product.currencyCode);\n case 'volume':\n return `${product.volume.toLocaleString()} ${getTranslation(Keys.widget.topProducts.dcSvSuffix)}`;\n default:\n return `${product.unitsSold.toLocaleString()} ${getTranslation(Keys.widget.topProducts.unitsSuffix)}`;\n }\n };\n\n const getSubtitle = (product: TopProduct, sortBy: ProductSortOption) => {\n switch (sortBy) {\n case 'units':\n return `${formatMoney(product.revenue, product.currencyCode)} ${getTranslation(Keys.widget.topProducts.revenueSuffix)}`;\n case 'revenue':\n return `${product.unitsSold.toLocaleString()} ${getTranslation(Keys.widget.topProducts.unitsSuffix)}`;\n case 'volume':\n return `${formatMoney(product.revenue, product.currencyCode)} ${getTranslation(Keys.widget.topProducts.revenueSuffix)}`;\n default:\n return `${formatMoney(product.revenue, product.currencyCode)} ${getTranslation(Keys.widget.topProducts.revenueSuffix)}`;\n }\n };\n\n const getTrendValue = (product: TopProduct, sortBy: ProductSortOption) => {\n const trend = product.trend;\n if (!trend) return '';\n switch (sortBy) {\n case 'units':\n return trend.units ?? '';\n case 'revenue':\n return trend.revenue ?? '';\n case 'volume':\n return trend.volume ?? '';\n default:\n return trend.units ?? '';\n }\n };\n\n const getTrendDirection = (product: TopProduct, sortBy: ProductSortOption): TrendDirection => {\n const trendValue = getTrendValue(product, sortBy);\n if (!trendValue) return 'neutral';\n if (trendValue.startsWith('+')) return 'up';\n if (trendValue.startsWith('-')) return 'down';\n return 'neutral';\n };\n\n const displayedProducts = products.slice(0, maxProducts);\n const rankLabel = getTranslation(Keys.widget.topProducts.rank);\n const trendLabel = getTranslation(Keys.widget.topProducts.trend);\n\n if (isLoading && products.length === 0) {\n return (\n <ProductsListContainer data-testid=\"widget-top-products\">\n <ProductsListSkeleton />\n </ProductsListContainer>\n );\n }\n\n if (products.length === 0) {\n return (\n <ProductsListContainer data-testid=\"widget-top-products\">\n <WidgetHeader>\n <WidgetTitle>{getTranslation(Keys.widget.topProducts.title)}</WidgetTitle>\n </WidgetHeader>\n <EmptyState data-testid=\"products-empty-state\">\n <ShoppingCartIcon />\n <EmptyStateText>{getTranslation(Keys.widget.topProducts.empty)}</EmptyStateText>\n </EmptyState>\n </ProductsListContainer>\n );\n }\n\n return (\n <ProductsListContainer\n as=\"section\"\n data-testid=\"widget-top-products\"\n aria-label={getTranslation(Keys.widget.topProducts.ariaLabel)}\n >\n <WidgetHeader>\n <WidgetTitle\n as=\"button\"\n onClick={onTitleClick}\n aria-label={getTranslation(Keys.widget.topProducts.titleAriaLabel)}\n data-testid=\"widget-title-top-products\"\n >\n {getTranslation(Keys.widget.topProducts.title)}\n </WidgetTitle>\n <HeaderActionsContainer>\n <SortDropdown\n id=\"product-sort\"\n data-testid=\"product-sort-dropdown\"\n value={productSort}\n onChange={handleSortChange}\n disabled={isLoading}\n aria-label={getTranslation(Keys.widget.topProducts.sortAriaLabel)}\n >\n <option value=\"units\">{getTranslation(Keys.filter.productSort.byUnits)}</option>\n <option value=\"revenue\">{getTranslation(Keys.filter.productSort.byRevenue)}</option>\n <option value=\"volume\">{getTranslation(Keys.filter.productSort.byVolume)}</option>\n </SortDropdown>\n <WidgetMenu widgetId=\"top-products\" onFullView={onTitleClick} />\n </HeaderActionsContainer>\n </WidgetHeader>\n\n <ProductsList as=\"ul\" data-testid=\"products-list\">\n {displayedProducts.map((product, index) => {\n const trendDirection = getTrendDirection(product, productSort);\n const trendValue = getTrendValue(product, productSort);\n\n return (\n <ProductItem\n as=\"li\"\n key={product.id}\n data-testid={`product-item-${index}`}\n aria-label={`${rankLabel} ${product.rank}: ${product.name}, ${formatValue(product, productSort)}`}\n >\n <ProductRank aria-label={`${rankLabel} ${product.rank}`}>{product.rank}</ProductRank>\n\n {product.imageUrl ? (\n <ProductImage\n src={product.imageUrl}\n alt={product.name}\n loading=\"lazy\"\n onError={(e) => {\n e.currentTarget.hidden = true;\n }}\n />\n ) : (\n <ProductImagePlaceholder\n aria-label={getTranslation(Keys.widget.topProducts.noImageAriaLabel)}\n >\n {product.name.substring(0, 2).toUpperCase()}\n </ProductImagePlaceholder>\n )}\n\n <ProductInfo>\n <ProductName title={product.name}>{product.name}</ProductName>\n <ProductSubtitle>{getSubtitle(product, productSort)}</ProductSubtitle>\n </ProductInfo>\n\n <ProductMetrics>\n <ProductValue>{formatValue(product, productSort)}</ProductValue>\n {trendValue && (\n <ProductTrend\n as=\"output\"\n direction={trendDirection}\n aria-live=\"polite\"\n aria-label={`${trendLabel}: ${getTrendDirectionLabel(trendDirection)} ${trendValue}`}\n >\n <span aria-hidden=\"true\">{getTrendIcon(trendDirection)}</span>\n <span>{trendValue}</span>\n </ProductTrend>\n )}\n </ProductMetrics>\n </ProductItem>\n );\n })}\n </ProductsList>\n </ProductsListContainer>\n );\n};\n\nexport const TopSellingProductsList = React.memo(TopSellingProductsListComponent);\nTopSellingProductsList.displayName = 'TopSellingProductsList';\n","import { useMemo } from 'react';\n\nexport function calculateTotalPages<T>(items: T[], itemsPerPage: number): number {\n return Math.ceil(items.length / itemsPerPage);\n}\n\nexport function paginateItems<T>(items: T[], currentPage: number, itemsPerPage: number): T[] {\n const startIndex = (currentPage - 1) * itemsPerPage;\n const endIndex = startIndex + itemsPerPage;\n return items.slice(startIndex, endIndex);\n}\n\nexport function sortByNumericProperty<T extends Record<string, unknown>>(\n items: T[],\n key: keyof T,\n direction: 'asc' | 'desc' = 'desc',\n): T[] {\n return [...items].sort((a, b) => {\n const aVal = a[key] as number;\n const bVal = b[key] as number;\n return direction === 'asc' ? aVal - bVal : bVal - aVal;\n });\n}\n\nexport function calculatePercentage(value: number, total: number, decimalPlaces: number = 1): string {\n if (total === 0) return '0.0';\n return ((value / total) * 100).toFixed(decimalPlaces);\n}\n\nexport function usePaginatedItems<T>(\n items: T[],\n currentPage: number,\n itemsPerPage: number,\n): { totalPages: number; pageItems: T[] } {\n const totalPages = useMemo(() => calculateTotalPages(items, itemsPerPage), [items, itemsPerPage]);\n const pageItems = useMemo(\n () => paginateItems(items, currentPage, itemsPerPage),\n [items, currentPage, itemsPerPage],\n );\n return { totalPages, pageItems };\n}\n\nexport function formatMoney(\n value: number,\n currencyCode?: string,\n locale: string = 'en-US',\n fractionDigits?: number,\n): string {\n const amount = Number.isFinite(value) ? value : 0;\n if (currencyCode) {\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n ...(fractionDigits !== undefined\n ? { minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits }\n : { minimumFractionDigits: 0, maximumFractionDigits: 2 }),\n }).format(amount);\n } catch {}\n }\n return fractionDigits !== undefined ? `$${amount.toFixed(fractionDigits)}` : `$${amount.toLocaleString()}`;\n}\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const ProductsListContainer = styled('div')`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n border-radius: 12px;\n min-height: 320px;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n\n @media (min-width: 768px) {\n padding: 20px;\n min-height: 400px;\n }\n\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`;\n\nexport const WidgetHeader = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`;\n\nexport const HeaderActionsContainer = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const WidgetTitle = styled('h2')`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({ theme }) => getGenomeColor(theme, 'A80')};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`;\n\nexport const SortDropdown = styled('select')`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n\n &:focus {\n border-color: ${({ theme }) => getGenomeColor(theme, 'A70')};\n box-shadow: 0 0 0 3px ${({ theme }) => getGenomeColor(theme, 'A20')};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n\nexport const ProductsList = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n overflow: hidden;\n list-style: none;\n margin: 0;\n padding: 0;\n\n @media (min-width: 768px) {\n gap: 14px;\n }\n`;\n\nexport const ProductItem = styled('div')`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n transition:\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n cursor: pointer;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n list-style: none;\n\n &:not(:last-child) {\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n }\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.06);\n }\n\n @media (min-width: 768px) {\n padding: 14px;\n gap: 14px;\n }\n`;\n\nexport const ProductRank = styled('div')`\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'A10')};\n color: ${({ theme }) => getGenomeColor(theme, 'A80')};\n border-radius: 4px;\n font-size: 12px;\n font-weight: 600;\n\n @media (min-width: 768px) {\n min-width: 28px;\n height: 28px;\n font-size: 13px;\n }\n`;\n\nexport const ProductImage = styled('img')`\n width: 40px;\n height: 40px;\n border-radius: 8px;\n object-fit: cover;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 50px;\n height: 50px;\n }\n`;\n\nexport const ProductImagePlaceholder = styled('div')`\n width: 40px;\n height: 40px;\n border-radius: 8px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N40')};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n font-size: 10px;\n font-weight: 500;\n\n @media (min-width: 768px) {\n width: 50px;\n height: 50px;\n font-size: 11px;\n }\n`;\n\nexport const ProductInfo = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex-grow: 1;\n min-width: 0;\n`;\n\nexport const ProductName = styled('div')`\n font-size: 13px;\n font-weight: 500;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 18ch;\n\n @media (min-width: 768px) {\n font-size: 14px;\n max-width: none;\n }\n`;\n\nexport const ProductSubtitle = styled('div')`\n font-size: 11px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`;\n\nexport const ProductMetrics = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n`;\n\nexport const ProductValue = styled('div')`\n font-size: 14px;\n font-weight: 600;\n line-height: 1.2;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`;\n\nexport const ProductTrend = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 500;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return '#22C55E';\n if (direction === 'down') return '#DC2626';\n return getGenomeColor(theme, 'N70');\n }};\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n @media (min-width: 768px) {\n font-size: 12px;\n\n svg {\n width: 16px;\n height: 16px;\n }\n }\n`;\n\nexport const EmptyState = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 40px 20px;\n text-align: center;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n svg {\n width: 48px;\n height: 48px;\n color: ${({ theme }) => getGenomeColor(theme, 'N50')};\n }\n`;\n\nexport const EmptyStateText = styled('div')`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n`;\n","import React, { useState } from 'react';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport { StyledIconButton } from './WidgetMenu.styled';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface WidgetMenuProps {\n readonly widgetId?: string;\n readonly onFullView?: () => void;\n}\n\nexport const WidgetMenu: React.FC<WidgetMenuProps> = ({ widgetId, onFullView }) => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const buttonId = `widget-menu-button-${widgetId}`;\n const menuId = `widget-menu-${widgetId}`;\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleFullView = () => {\n handleClose();\n if (onFullView) {\n onFullView();\n }\n };\n\n return (\n <>\n <StyledIconButton\n id={buttonId}\n data-testid={`widget-menu-button-${widgetId}`}\n aria-label={getTranslation(Keys.widget.menu.ariaLabel)}\n aria-controls={open ? menuId : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={handleClick}\n size=\"small\"\n >\n <MoreVertIcon fontSize=\"small\" />\n </StyledIconButton>\n <Menu\n id={menuId}\n data-testid={`widget-menu-${widgetId}`}\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n MenuListProps={{\n 'aria-labelledby': buttonId,\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem onClick={handleFullView} data-testid=\"widget-menu-item-fullview\">\n <ListItemIcon>\n <VisibilityIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{getTranslation(Keys.widget.menu.fullView)}</ListItemText>\n </MenuItem>\n </Menu>\n </>\n );\n};\n","import IconButton from '@mui/material/IconButton';\nimport { styled } from '@nuskin/foundation-theme';\n\nexport const StyledIconButton = styled(IconButton)(() => ({\n padding: '4px',\n}));\n","import React from 'react';\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\nimport { WidgetMenu } from '../WidgetMenu';\nimport { getTrendIcon, getTrendDirectionLabel } from '../../utils/trendUtils';\nimport {\n ConversionRateContainer,\n ChartHeader,\n ChartTitle,\n FilterDropdown,\n MetricDisplay,\n MetricValue,\n MetricTrend,\n FormulaDisplay,\n ChartContainer,\n TooltipContainer,\n TooltipLabel,\n TooltipValue,\n TooltipDetails,\n TitleRow,\n HeaderActionsContainer,\n} from './ConversionRateChart.styled';\nimport type { ConversionDataPoint, ConversionFilterOption } from '../../types.d';\nimport { ChartWidgetSkeleton } from '../LoadingSkeletons';\nimport { formatAxisDate } from '../../utils/dateFormat';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface ConversionRateChartProps {\n readonly conversionData: ConversionDataPoint[];\n readonly conversionFilter: ConversionFilterOption;\n readonly isLoading?: boolean;\n readonly title?: string;\n readonly summaryRate?: number;\n readonly summaryChangePct?: number | null;\n readonly onFilterChange?: (filter: ConversionFilterOption) => void;\n readonly onTitleClick?: () => void;\n}\n\nconst CHART_MARGIN = { top: 5, right: 10, left: -10, bottom: 5 };\nconst AXIS_TICK = { fontSize: 10 };\nconst LINE_DOT = { r: 3, fill: '#3B82F6' };\nconst ACTIVE_DOT = { r: 5 };\n\ninterface CustomTooltipProps {\n readonly active?: boolean;\n readonly payload?: Array<{ payload?: unknown }>;\n}\n\nconst rateTickFormatter = (value: number | string): string => `${value}%`;\n\nconst CustomTooltip: React.FC<CustomTooltipProps> = ({ active, payload }) => {\n if (!active || !payload?.length) return null;\n const data = payload[0].payload as ConversionDataPoint;\n return (\n <TooltipContainer>\n <TooltipLabel>{data.date}</TooltipLabel>\n <TooltipValue>{(data.rate ?? 0).toFixed(2)}%</TooltipValue>\n <TooltipDetails>\n {data.orders ?? 0} {getTranslation(Keys.widget.conversionRate.tooltipOrders)} /{' '}\n {(data.siteVisits ?? 0).toLocaleString()} {getTranslation(Keys.widget.conversionRate.tooltipVisits)}\n </TooltipDetails>\n </TooltipContainer>\n );\n};\n\nconst ConversionRateChartComponent: React.FC<ConversionRateChartProps> = ({\n conversionData,\n conversionFilter,\n isLoading = false,\n title,\n summaryRate,\n summaryChangePct,\n onFilterChange,\n onTitleClick,\n}) => {\n const handleFilterChange = React.useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newFilter = event.target.value as ConversionFilterOption;\n onFilterChange?.(newFilter);\n },\n [onFilterChange],\n );\n\n const noDataText = getTranslation(Keys.widget.conversionRate.noData);\n const noChangeText = getTranslation(Keys.widget.conversionRate.noChange);\n\n const currentRate = React.useMemo(() => {\n if (typeof summaryRate === 'number' && Number.isFinite(summaryRate)) return summaryRate;\n return conversionData.at(-1)?.rate ?? 0;\n }, [summaryRate, conversionData]);\n\n const trendInfo = React.useMemo((): { direction: 'up' | 'down' | 'neutral'; value: string } => {\n if (summaryChangePct !== undefined) {\n if (summaryChangePct === null || Math.abs(summaryChangePct) < 0.1) {\n return { direction: 'neutral', value: noChangeText };\n }\n const direction = summaryChangePct > 0 ? 'up' : 'down';\n const formatted = `${summaryChangePct > 0 ? '+' : ''}${summaryChangePct.toFixed(2)}%`;\n return { direction, value: formatted };\n }\n if (conversionData.length < 2) return { direction: 'neutral', value: noDataText };\n const latestRate = conversionData.at(-1)?.rate ?? 0;\n const previousRate = conversionData[0].rate;\n if (previousRate === 0) return { direction: 'neutral', value: noChangeText };\n const change = latestRate - previousRate;\n const percentageChange = (change / previousRate) * 100;\n if (Math.abs(percentageChange) < 0.1) return { direction: 'neutral', value: noChangeText };\n const direction = change > 0 ? 'up' : 'down';\n const formattedChange = `${change > 0 ? '+' : ''}${change.toFixed(2)}%`;\n return { direction, value: formattedChange };\n }, [summaryChangePct, conversionData, noChangeText, noDataText]);\n\n const formattedData = React.useMemo(\n () => conversionData.map((item) => ({ ...item, shortDate: formatAxisDate(item.date) })),\n [conversionData],\n );\n\n if (isLoading && conversionData.length === 0) {\n return (\n <ConversionRateContainer data-testid=\"widget-conversion-rate\">\n <ChartWidgetSkeleton />\n </ConversionRateContainer>\n );\n }\n\n const chartAriaLabel = getTranslation(Keys.widget.conversionRate.chartAriaLabel);\n\n return (\n <ConversionRateContainer as=\"section\" data-testid=\"widget-conversion-rate\" aria-label={chartAriaLabel}>\n <ChartHeader>\n <TitleRow>\n <ChartTitle\n as=\"button\"\n onClick={onTitleClick}\n aria-label={getTranslation(Keys.widget.conversionRate.titleAriaLabel)}\n data-testid=\"widget-title-conversion-rate\"\n >\n {title ?? getTranslation(Keys.widget.conversionRate.title)}\n </ChartTitle>\n <HeaderActionsContainer>\n <FilterDropdown\n id=\"conversion-filter\"\n data-testid=\"conversion-filter-dropdown\"\n value={conversionFilter}\n onChange={handleFilterChange}\n disabled={isLoading}\n aria-label={getTranslation(Keys.widget.conversionRate.filterAriaLabel)}\n >\n <option value=\"all\">{getTranslation(Keys.filter.conversionType.all)}</option>\n <option value=\"standard\">{getTranslation(Keys.filter.conversionType.standard)}</option>\n <option value=\"subscription\">\n {getTranslation(Keys.filter.conversionType.subscription)}\n </option>\n </FilterDropdown>\n <WidgetMenu widgetId=\"conversion-rate\" onFullView={onTitleClick} />\n </HeaderActionsContainer>\n </TitleRow>\n <FormulaDisplay data-testid=\"conversion-formula\">\n {getTranslation(Keys.widget.conversionRate.formula)}\n </FormulaDisplay>\n </ChartHeader>\n\n <MetricDisplay>\n <MetricValue\n aria-label={`${getTranslation(Keys.widget.conversionRate.title)}: ${currentRate.toFixed(2)}%`}\n data-testid=\"conversion-metric-value\"\n >\n {currentRate.toFixed(2)}%\n </MetricValue>\n {trendInfo.value !== noDataText && (\n <MetricTrend\n as=\"output\"\n direction={trendInfo.direction}\n aria-live=\"polite\"\n aria-label={`${getTrendDirectionLabel(trendInfo.direction)} ${trendInfo.value}`}\n data-testid=\"conversion-metric-trend\"\n >\n <div className=\"trend-line\">\n <span aria-hidden=\"true\">{getTrendIcon(trendInfo.direction)}</span>\n <span className=\"change-value\">{trendInfo.value.replace('%', '')}</span>\n <span className=\"change-percent\">%</span>\n </div>\n <div className=\"comparison-text\">{getTranslation(Keys.widget.conversionRate.comparison)}</div>\n </MetricTrend>\n )}\n </MetricDisplay>\n\n <ChartContainer data-testid=\"conversion-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\" minHeight={200}>\n <LineChart data={formattedData} margin={CHART_MARGIN}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"shortDate\" tick={AXIS_TICK} tickLine={false} interval=\"preserveStartEnd\" />\n <YAxis\n tick={AXIS_TICK}\n tickLine={false}\n tickFormatter={rateTickFormatter}\n domain={['dataMin - 0.5', 'dataMax + 0.5']}\n />\n <Tooltip content={CustomTooltip} />\n <Line\n type=\"monotone\"\n dataKey=\"rate\"\n stroke=\"#3B82F6\"\n strokeWidth={2}\n dot={LINE_DOT}\n activeDot={ACTIVE_DOT}\n />\n </LineChart>\n </ResponsiveContainer>\n </ChartContainer>\n </ConversionRateContainer>\n );\n};\n\nexport const ConversionRateChart = React.memo(ConversionRateChartComponent);\nConversionRateChart.displayName = 'ConversionRateChart';\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const ConversionRateContainer = styled('div')`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`;\n\nexport const ChartHeader = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`;\n\nexport const TitleRow = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`;\n\nexport const HeaderActionsContainer = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const ChartTitle = styled('h2')`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({ theme }) => getGenomeColor(theme, 'A80')};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`;\n\nexport const FilterDropdown = styled('select')`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n\n &:focus {\n border-color: ${({ theme }) => getGenomeColor(theme, 'A70')};\n box-shadow: 0 0 0 3px ${({ theme }) => getGenomeColor(theme, 'A20')};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n\nexport const MetricDisplay = styled('div')`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n margin-bottom: 8px;\n`;\n\nexport const MetricValue = styled('div')`\n font-size: 28px;\n font-weight: 700;\n line-height: 1.2;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`;\n\nexport const MetricTrend = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-top: 4px;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return '#066100';\n if (direction === 'down') return '#DC2626';\n return getGenomeColor(theme, 'N70');\n }};\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n .change-value {\n font-weight: 600;\n line-height: 20px;\n }\n\n .change-percent {\n font-weight: 400;\n line-height: 20px;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n letter-spacing: 0.12px;\n }\n`;\n\nexport const FormulaDisplay = styled('div')`\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin-bottom: 16px;\n letter-spacing: 0.12px;\n`;\n\nexport const ChartContainer = styled('div')`\n width: 100%;\n height: 220px;\n margin-top: 16px;\n\n @media (min-width: 768px) {\n height: 280px;\n }\n\n @media (min-width: 1080px) {\n height: 340px;\n }\n\n .recharts-cartesian-grid-horizontal line,\n .recharts-cartesian-grid-vertical line {\n stroke: ${({ theme }) => getGenomeColor(theme, 'N40')};\n stroke-width: 1px;\n }\n\n .recharts-text {\n fill: ${({ theme }) => getGenomeColor(theme, 'N70')};\n font-size: 10px;\n }\n\n .recharts-tooltip-wrapper {\n z-index: 100;\n }\n`;\n\nexport const TooltipContainer = styled('div')`\n background-color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 6px;\n padding: 8px 12px;\n box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.15);\n`;\n\nexport const TooltipLabel = styled('div')`\n font-size: 11px;\n font-weight: 600;\n color: ${({ theme }) => getGenomeColor(theme, 'N10')};\n margin-bottom: 4px;\n`;\n\nexport const TooltipValue = styled('div')`\n font-size: 13px;\n font-weight: 700;\n color: ${({ theme }) => getGenomeColor(theme, 'A10')};\n`;\n\nexport const TooltipDetails = styled('div')`\n font-size: 10px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n margin-top: 2px;\n`;\n","import type { DateRangeOption } from '../types.d';\n\nexport const DAYS_MAP: Record<DateRangeOption, number> = {\n last7days: 7,\n last30days: 30,\n last90days: 90,\n thisMonth: 31,\n};\n\nexport const DATE_RANGE_LABELS: Record<DateRangeOption, string> = {\n last7days: 'Last 7 Days',\n last30days: 'Last 30 Days',\n last90days: 'Last 90 Days',\n thisMonth: 'This Month',\n};\n\nexport function getDaysFromDateRange(dateRange: DateRangeOption): number {\n return DAYS_MAP[dateRange] ?? 30;\n}\n\nexport function getDateRangeLabel(dateRange: DateRangeOption): string {\n return DATE_RANGE_LABELS[dateRange] ?? 'Last 30 Days';\n}\n","import type { DateRangeOption } from '../types.d';\nimport { getDateRangeLabel } from './dateConstants';\n\nexport function formatDateRangeLabel(dateRange: DateRangeOption): string {\n return getDateRangeLabel(dateRange);\n}\n\nexport function formatShortDate(date: Date): string {\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n return `${months[date.getMonth()]} ${date.getDate()}`;\n}\n\nconst AXIS_MONTH_MAP: Record<string, string> = {\n Jan: '1',\n Feb: '2',\n Mar: '3',\n Apr: '4',\n May: '5',\n Jun: '6',\n Jul: '7',\n Aug: '8',\n Sep: '9',\n Oct: '10',\n Nov: '11',\n Dec: '12',\n};\n\nexport function formatAxisDate(dateStr: string): string {\n const parts = dateStr.split(' ');\n if (parts.length !== 2) return dateStr;\n return `${AXIS_MONTH_MAP[parts[0]] || parts[0]}/${parts[1]}`;\n}\n\nexport function formatDisplayDate(dateStr: string): string {\n const date = new Date(dateStr);\n return formatShortDate(date);\n}\n\nexport function formatDateRange(start: string, end: string): string {\n return `${formatDisplayDate(start)} - ${formatDisplayDate(end)}`;\n}\n\nexport function formatISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n","import React from 'react';\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\nimport { getTrendIcon, getTrendDirectionLabel } from '../../utils/trendUtils';\nimport { WidgetMenu } from '../WidgetMenu';\nimport {\n SignupsContainer,\n ChartHeader,\n ChartTitle,\n FilterDropdown,\n MetricDisplay,\n MetricValue,\n MetricTrend,\n ChartContainer,\n Legend,\n LegendItem,\n LegendColor,\n LegendLabel,\n HeaderActionsContainer,\n} from './SignupsChart.styled';\nimport type { SignupDataPoint, SignupViewOption } from '../../types.d';\nimport { ChartWidgetSkeleton } from '../LoadingSkeletons';\nimport { formatAxisDate } from '../../utils/dateFormat';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface SignupsChartProps {\n readonly signupData: SignupDataPoint[];\n readonly signupView: SignupViewOption;\n readonly isLoading?: boolean;\n readonly title?: string;\n readonly onViewChange?: (view: SignupViewOption) => void;\n readonly onTitleClick?: () => void;\n}\n\nconst SERIES_COLORS = {\n total: '#3B82F6',\n members: '#7B92A8',\n retail: '#A3B5C7',\n brandAffiliates: '#CBD6E0',\n};\n\nconst CHART_MARGIN = { top: 5, right: 10, left: -10, bottom: 5 };\nconst AXIS_TICK = { fontSize: 10 };\nconst LINE_DOT = { r: 2 };\n\nconst SignupsChartComponent: React.FC<SignupsChartProps> = ({\n signupData,\n signupView,\n isLoading = false,\n title,\n onViewChange,\n onTitleClick,\n}) => {\n const handleViewChange = React.useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newView = event.target.value as SignupViewOption;\n onViewChange?.(newView);\n },\n [onViewChange],\n );\n\n const noDataText = getTranslation(Keys.widget.signups.noData);\n const noChangeText = getTranslation(Keys.widget.signups.noChange);\n\n const totalSignups = React.useMemo(() => {\n if (signupData.length === 0) return 0;\n return signupData[signupData.length - 1].total;\n }, [signupData]);\n\n const trendInfo = React.useMemo((): { direction: 'up' | 'down' | 'neutral'; value: string } => {\n if (signupData.length < 2) return { direction: 'neutral', value: noDataText };\n const latestTotal = signupData[signupData.length - 1].total;\n const previousTotal = signupData[0].total;\n const change = latestTotal - previousTotal;\n const percentageChange = (change / previousTotal) * 100;\n if (Math.abs(percentageChange) < 0.1) return { direction: 'neutral', value: noChangeText };\n const direction = change > 0 ? 'up' : 'down';\n const formattedChange = `${change > 0 ? '+' : ''}${change} (${percentageChange.toFixed(1)}%)`;\n return { direction, value: formattedChange };\n }, [noChangeText, noDataText, signupData]);\n\n const formattedData = React.useMemo(\n () => signupData.map((item) => ({ ...item, shortDate: formatAxisDate(item.date) })),\n [signupData],\n );\n const totalLabel = getTranslation(Keys.widget.signups.total);\n const membersLabel = getTranslation(Keys.widget.signups.members);\n const retailLabel = getTranslation(Keys.widget.signups.retail);\n const brandAffiliatesLabel = getTranslation(Keys.widget.signups.brandAffiliates);\n\n if (isLoading && signupData.length === 0) {\n return (\n <SignupsContainer data-testid=\"widget-signups\">\n <ChartWidgetSkeleton />\n </SignupsContainer>\n );\n }\n\n return (\n <SignupsContainer\n as=\"section\"\n data-testid=\"widget-signups\"\n aria-label={getTranslation(Keys.widget.signups.chartAriaLabel)}\n >\n <ChartHeader>\n <ChartTitle\n as=\"button\"\n onClick={onTitleClick}\n aria-label={getTranslation(Keys.widget.signups.titleAriaLabel)}\n data-testid=\"widget-title-signups\"\n >\n {title ?? getTranslation(Keys.widget.signups.title)}\n </ChartTitle>\n <HeaderActionsContainer>\n <FilterDropdown\n id=\"signup-view\"\n data-testid=\"signup-view-dropdown\"\n value={signupView}\n onChange={handleViewChange}\n disabled={isLoading}\n aria-label={getTranslation(Keys.widget.signups.filterAriaLabel)}\n >\n <option value=\"all\">{getTranslation(Keys.filter.signupView.showAll)}</option>\n <option value=\"members\">{getTranslation(Keys.filter.signupView.showMembers)}</option>\n <option value=\"retail\">{getTranslation(Keys.filter.signupView.showRetail)}</option>\n <option value=\"brandAffiliates\">\n {getTranslation(Keys.filter.signupView.showBrandAffiliates)}\n </option>\n </FilterDropdown>\n <WidgetMenu widgetId=\"signups\" onFullView={onTitleClick} />\n </HeaderActionsContainer>\n </ChartHeader>\n\n <MetricDisplay data-testid=\"signups-metric-display\">\n <MetricValue\n data-testid=\"signups-metric-value\"\n aria-label={`${totalLabel}: ${totalSignups.toLocaleString()}`}\n >\n {totalSignups.toLocaleString()}\n </MetricValue>\n {trendInfo.value !== noDataText && (\n <MetricTrend\n as=\"output\"\n data-testid=\"signups-metric-trend\"\n direction={trendInfo.direction}\n aria-live=\"polite\"\n aria-label={`${getTrendDirectionLabel(trendInfo.direction)} ${trendInfo.value}`}\n >\n <div className=\"trend-line\">\n <span aria-hidden=\"true\">{getTrendIcon(trendInfo.direction)}</span>\n <span className=\"change-value\">{trendInfo.value.split(' ')[0]}</span>\n <span className=\"change-percent\">{trendInfo.value.split(' ')[1]}</span>\n </div>\n <div className=\"comparison-text\">{getTranslation(Keys.widget.conversionRate.comparison)}</div>\n </MetricTrend>\n )}\n </MetricDisplay>\n\n <ChartContainer data-testid=\"signups-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\" minHeight={200}>\n <LineChart data={formattedData} margin={CHART_MARGIN}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"shortDate\" tick={AXIS_TICK} tickLine={false} interval=\"preserveStartEnd\" />\n <YAxis tick={AXIS_TICK} tickLine={false} />\n <Tooltip />\n {(signupView === 'all' || signupView === 'members') && (\n <Line\n type=\"monotone\"\n dataKey={signupView === 'all' ? 'total' : 'members'}\n stroke={signupView === 'all' ? SERIES_COLORS.total : SERIES_COLORS.members}\n strokeWidth={2}\n dot={LINE_DOT}\n name={signupView === 'all' ? totalLabel : membersLabel}\n />\n )}\n {signupView === 'all' && (\n <>\n <Line\n type=\"monotone\"\n dataKey=\"members\"\n stroke={SERIES_COLORS.members}\n strokeWidth={2}\n dot={LINE_DOT}\n name={membersLabel}\n />\n <Line\n type=\"monotone\"\n dataKey=\"retail\"\n stroke={SERIES_COLORS.retail}\n strokeWidth={2}\n dot={LINE_DOT}\n name={retailLabel}\n />\n <Line\n type=\"monotone\"\n dataKey=\"brandAffiliates\"\n stroke={SERIES_COLORS.brandAffiliates}\n strokeWidth={2}\n dot={LINE_DOT}\n name={brandAffiliatesLabel}\n />\n </>\n )}\n {signupView === 'retail' && (\n <Line\n type=\"monotone\"\n dataKey=\"retail\"\n stroke={SERIES_COLORS.retail}\n strokeWidth={2}\n dot={LINE_DOT}\n name={retailLabel}\n />\n )}\n {signupView === 'brandAffiliates' && (\n <Line\n type=\"monotone\"\n dataKey=\"brandAffiliates\"\n stroke={SERIES_COLORS.brandAffiliates}\n strokeWidth={2}\n dot={LINE_DOT}\n name={brandAffiliatesLabel}\n />\n )}\n </LineChart>\n </ResponsiveContainer>\n </ChartContainer>\n\n {signupView === 'all' && (\n <Legend data-testid=\"signups-legend\">\n <LegendItem data-testid=\"legend-total\">\n <LegendColor color={SERIES_COLORS.total} />\n <LegendLabel>{totalLabel}</LegendLabel>\n </LegendItem>\n <LegendItem data-testid=\"legend-members\">\n <LegendColor color={SERIES_COLORS.members} />\n <LegendLabel>{membersLabel}</LegendLabel>\n </LegendItem>\n <LegendItem data-testid=\"legend-retail\">\n <LegendColor color={SERIES_COLORS.retail} />\n <LegendLabel>{retailLabel}</LegendLabel>\n </LegendItem>\n <LegendItem data-testid=\"legend-brandAffiliates\">\n <LegendColor color={SERIES_COLORS.brandAffiliates} />\n <LegendLabel>{brandAffiliatesLabel}</LegendLabel>\n </LegendItem>\n </Legend>\n )}\n </SignupsContainer>\n );\n};\n\nexport const SignupsChart = React.memo(SignupsChartComponent);\nSignupsChart.displayName = 'SignupsChart';\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const SignupsContainer = styled('div')`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`;\n\nexport const ChartHeader = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`;\n\nexport const HeaderActionsContainer = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const ChartTitle = styled('h2')`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({ theme }) => getGenomeColor(theme, 'A80')};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`;\n\nexport const FilterDropdown = styled('select')`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n &:focus {\n border-color: ${({ theme }) => getGenomeColor(theme, 'A70')};\n box-shadow: 0 0 0 3px ${({ theme }) => getGenomeColor(theme, 'A20')};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n\nexport const MetricDisplay = styled('div')`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n margin-bottom: 16px;\n`;\n\nexport const MetricValue = styled('div')`\n font-size: 28px;\n font-weight: 700;\n line-height: 1.2;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`;\n\nexport const MetricTrend = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-top: 4px;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return '#066100';\n if (direction === 'down') return '#DC2626';\n return getGenomeColor(theme, 'N70');\n }};\n\n svg {\n width: 16px;\n height: 16px;\n }\n .change-value {\n font-weight: 600;\n line-height: 20px;\n }\n .change-percent {\n font-weight: 400;\n line-height: 20px;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n letter-spacing: 0.12px;\n }\n`;\n\nexport const ChartContainer = styled('div')`\n width: 100%;\n height: 220px;\n margin-top: 16px;\n\n @media (min-width: 768px) {\n height: 280px;\n }\n @media (min-width: 1080px) {\n height: 340px;\n }\n\n .recharts-cartesian-grid-horizontal line,\n .recharts-cartesian-grid-vertical line {\n stroke: ${({ theme }) => getGenomeColor(theme, 'N40')};\n stroke-width: 1px;\n }\n .recharts-text {\n fill: ${({ theme }) => getGenomeColor(theme, 'N70')};\n font-size: 10px;\n }\n`;\n\nexport const Legend = styled('div')`\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 16px;\n padding-top: 12px;\n border-top: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n`;\n\nexport const LegendItem = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n`;\n\nexport const LegendColor = styled('div')<{ color: string }>`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({ color }) => color};\n flex-shrink: 0;\n`;\n\nexport const LegendLabel = styled('span')`\n font-size: 12px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n","import React from 'react';\nimport { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts';\nimport { WidgetMenu } from '../WidgetMenu';\nimport {\n CategoriesContainer,\n ChartHeader,\n ChartTitle,\n SortDropdown,\n ChartAndLegendContainer,\n ChartWrapper,\n LegendContainer,\n LegendItem,\n LegendColor,\n LegendInfo,\n LegendName,\n LegendValue,\n LegendPercentage,\n LegendTrend,\n DonutCenterOverlay,\n DonutCenterLabel,\n DonutCenterValue,\n DonutCenterTrend,\n EmptyState,\n EmptyStateText,\n HeaderActionsContainer,\n} from './TopCategoriesPieChart.styled';\nimport type { CategoryRevenue, CategorySortOption } from '../../types.d';\nimport { CategoriesPieChartSkeleton } from '../LoadingSkeletons';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport {\n getTrendIcon,\n parseTrendPercent,\n resolveTrendDirection,\n calculateWeightedRevenueTrend,\n} from '../../utils/trendUtils';\nimport { formatMoney } from '../../utils/dataUtils';\n\nexport interface TopCategoriesPieChartProps {\n readonly categories: CategoryRevenue[];\n readonly categorySort: CategorySortOption;\n readonly isLoading?: boolean;\n readonly title?: string;\n readonly onSortChange?: (sort: CategorySortOption) => void;\n readonly onTitleClick?: () => void;\n}\n\nconst TopCategoriesPieChartComponent: React.FC<TopCategoriesPieChartProps> = ({\n categories,\n categorySort,\n isLoading = false,\n title,\n onSortChange,\n onTitleClick,\n}) => {\n const handleSortChange = React.useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newSort = event.target.value as CategorySortOption;\n onSortChange?.(newSort);\n },\n [onSortChange],\n );\n\n const { sortedCategories, totalRevenue, trendDirection, formattedTrend } = React.useMemo(() => {\n const nextSortedCategories = [...categories].sort((a, b) => {\n if (categorySort === 'revenue') return b.revenue - a.revenue;\n return (\n (parseTrendPercent(b.trend?.revenue) ?? -Infinity) - (parseTrendPercent(a.trend?.revenue) ?? -Infinity)\n );\n });\n\n const nextTotalRevenue = nextSortedCategories.reduce((sum, category) => sum + category.revenue, 0);\n\n const { direction: nextTrendDirection, formatted: nextFormattedTrend } = calculateWeightedRevenueTrend(\n nextSortedCategories,\n (category) => category.revenue,\n (category) => category.trend?.revenue,\n );\n\n return {\n sortedCategories: nextSortedCategories,\n totalRevenue: nextTotalRevenue,\n trendDirection: nextTrendDirection,\n formattedTrend: nextFormattedTrend,\n };\n }, [categories, categorySort]);\n\n const currencyCode = sortedCategories[0]?.currencyCode;\n\n if (isLoading && categories.length === 0) {\n return (\n <CategoriesContainer data-testid=\"widget-top-categories\">\n <CategoriesPieChartSkeleton />\n </CategoriesContainer>\n );\n }\n\n if (categories.length === 0) {\n return (\n <CategoriesContainer data-testid=\"widget-top-categories\">\n <ChartHeader>\n <ChartTitle>{title ?? getTranslation(Keys.widget.topCategories.title)}</ChartTitle>\n </ChartHeader>\n <EmptyState data-testid=\"categories-empty-state\">\n <EmptyStateText>{getTranslation(Keys.widget.topCategories.empty)}</EmptyStateText>\n </EmptyState>\n </CategoriesContainer>\n );\n }\n\n return (\n <CategoriesContainer\n as=\"section\"\n data-testid=\"widget-top-categories\"\n aria-label={getTranslation(Keys.widget.topCategories.chartAriaLabel)}\n >\n <ChartHeader>\n <ChartTitle\n as=\"button\"\n onClick={onTitleClick}\n aria-label={getTranslation(Keys.widget.topCategories.titleAriaLabel)}\n data-testid=\"widget-title-top-categories\"\n >\n {title ?? getTranslation(Keys.widget.topCategories.title)}\n </ChartTitle>\n <HeaderActionsContainer>\n <SortDropdown\n id=\"category-sort\"\n data-testid=\"category-sort-dropdown\"\n value={categorySort}\n onChange={handleSortChange}\n disabled={isLoading}\n aria-label={getTranslation(Keys.widget.topCategories.sortAriaLabel)}\n >\n <option value=\"revenue\">{getTranslation(Keys.filter.categorySort.byRevenue)}</option>\n <option value=\"trend\">{getTranslation(Keys.filter.categorySort.byTrend)}</option>\n </SortDropdown>\n <WidgetMenu widgetId=\"top-categories\" onFullView={onTitleClick} />\n </HeaderActionsContainer>\n </ChartHeader>\n\n <ChartAndLegendContainer>\n <ChartWrapper data-testid=\"categories-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={sortedCategories}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"55%\"\n outerRadius=\"85%\"\n dataKey=\"revenue\"\n nameKey=\"name\"\n paddingAngle={2}\n >\n {sortedCategories.map((entry) => (\n <Cell key={`cell-${entry.id}`} fill={entry.color} />\n ))}\n </Pie>\n <Tooltip formatter={(value: number) => formatMoney(value, currencyCode)} />\n </PieChart>\n </ResponsiveContainer>\n <DonutCenterOverlay data-testid=\"categories-donut-center\">\n <DonutCenterLabel>{getTranslation(Keys.stats.revenue)}</DonutCenterLabel>\n <DonutCenterValue>{formatMoney(totalRevenue, currencyCode)}</DonutCenterValue>\n <DonutCenterTrend direction={trendDirection}>{formattedTrend}</DonutCenterTrend>\n </DonutCenterOverlay>\n </ChartWrapper>\n\n <LegendContainer data-testid=\"categories-legend-container\">\n {sortedCategories.map((category, index) => {\n const legendTrendDirection = resolveTrendDirection(category.trend?.revenue);\n return (\n <LegendItem key={category.id} data-testid={`category-legend-${index}`}>\n <LegendColor color={category.color} />\n <LegendInfo>\n <LegendName>{category.name}</LegendName>\n <LegendValue>{formatMoney(category.revenue, category.currencyCode)}</LegendValue>\n </LegendInfo>\n <LegendPercentage>{category.percentage}%</LegendPercentage>\n {category.trend?.revenue ? (\n <LegendTrend\n direction={legendTrendDirection}\n data-testid={`category-legend-trend-${index}`}\n aria-label={category.trend.revenue}\n >\n {getTrendIcon(legendTrendDirection)}\n </LegendTrend>\n ) : null}\n </LegendItem>\n );\n })}\n </LegendContainer>\n </ChartAndLegendContainer>\n </CategoriesContainer>\n );\n};\n\nexport const TopCategoriesPieChart = React.memo(TopCategoriesPieChartComponent);\nTopCategoriesPieChart.displayName = 'TopCategoriesPieChart';\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const CategoriesContainer = styled('div')`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n border-radius: 12px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n padding: 20px;\n }\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`;\n\nexport const ChartHeader = styled('div')`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 12px;\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`;\n\nexport const HeaderActionsContainer = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const ChartTitle = styled('h2')`\n font-size: 16px;\n font-weight: 600;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border: 0;\n background: transparent;\n padding: 0;\n text-align: left;\n\n &:hover {\n text-decoration: underline;\n color: ${({ theme }) => getGenomeColor(theme, 'A80')};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`;\n\nexport const SortDropdown = styled('select')`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n &:focus {\n border-color: ${({ theme }) => getGenomeColor(theme, 'A70')};\n box-shadow: 0 0 0 3px ${({ theme }) => getGenomeColor(theme, 'A20')};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n\nexport const ChartAndLegendContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n @media (min-width: 768px) {\n flex-direction: row;\n gap: 24px;\n }\n`;\n\nexport const ChartWrapper = styled('div')`\n position: relative;\n width: 100%;\n height: 200px;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 200px;\n height: 200px;\n }\n`;\n\nexport const DonutCenterOverlay = styled('div')`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n pointer-events: none;\n z-index: 1;\n width: 96px;\n`;\n\nexport const DonutCenterLabel = styled('div')`\n font-size: 10px;\n line-height: 1.2;\n font-weight: 500;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n`;\n\nexport const DonutCenterValue = styled('div')`\n margin-top: 2px;\n font-size: 16px;\n line-height: 1.2;\n font-weight: 700;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n`;\n\nexport const DonutCenterTrend = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n margin-top: 2px;\n font-size: 11px;\n line-height: 1.2;\n font-weight: 600;\n color: ${({ direction, theme }) => {\n if (direction === 'up') return '#2e7d32';\n if (direction === 'down') return '#d32f2f';\n return getGenomeColor(theme, 'N70');\n }};\n`;\n\nexport const LegendContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n`;\n\nexport const LegendItem = styled('div')`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n`;\n\nexport const LegendColor = styled('div')<{ color: string }>`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({ color }) => color};\n flex-shrink: 0;\n`;\n\nexport const LegendInfo = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n`;\n\nexport const LegendName = styled('div')`\n font-size: 13px;\n font-weight: 500;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`;\n\nexport const LegendValue = styled('div')`\n font-size: 11px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`;\n\nexport const LegendPercentage = styled('div')`\n font-size: 14px;\n font-weight: 600;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`;\n\nexport const LegendTrend = styled('span')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({ direction }) => {\n if (direction === 'up') return '#2e7d32';\n if (direction === 'down') return '#d32f2f';\n return '#757575';\n }};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`;\n\nexport const EmptyState = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 40px 20px;\n text-align: center;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n`;\n\nexport const EmptyStateText = styled('div')`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n`;\n","import React from 'react';\nimport {\n DashboardContainer,\n StatsRow,\n WidgetContainer,\n TwoColumnGrid,\n ErrorContainer,\n} from './ShoppingDashboard.styled';\nimport { DashboardHeader } from './shared/DashboardHeader';\nimport { StatsCard } from './shared/StatsCard';\nimport { TopSellingProductsList } from './shared/TopProducts/TopSellingProductsList';\nimport { ConversionRateChart } from './shared/ConversionRate/ConversionRateChart';\nimport { SignupsChart } from './shared/Signups/SignupsChart';\nimport { TopCategoriesPieChart } from './shared/TopCategories/TopCategoriesPieChart';\nimport type {\n DashboardStats,\n TopProduct,\n ConversionDataPoint,\n SignupDataPoint,\n CategoryRevenue,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n ProductSortOption,\n SignupViewOption,\n ConversionFilterOption,\n CategorySortOption,\n} from './types.d';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from './TranslationKeys/ShoppingDashboardTranslationKeys';\n\nconst EMPTY_TOP_PRODUCTS: TopProduct[] = [];\nconst EMPTY_CONVERSION_DATA: ConversionDataPoint[] = [];\nconst EMPTY_SIGNUP_DATA: SignupDataPoint[] = [];\nconst EMPTY_CATEGORIES: CategoryRevenue[] = [];\n\nexport interface ShoppingDashboardProps {\n readonly stats?: DashboardStats | null;\n readonly topProducts?: TopProduct[];\n readonly conversionData?: ConversionDataPoint[];\n readonly signupData?: SignupDataPoint[];\n readonly categories?: CategoryRevenue[];\n readonly isLoading?: boolean;\n readonly error?: string | null;\n readonly shopTitle?: string;\n readonly className?: string;\n\n readonly dateRange?: DateRangeOption;\n readonly market?: MarketOption;\n readonly productSort?: ProductSortOption;\n readonly signupView?: SignupViewOption;\n readonly conversionFilter?: ConversionFilterOption;\n readonly categorySort?: CategorySortOption;\n\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onProductSortChange?: (sort: ProductSortOption) => void;\n readonly onSignupViewChange?: (view: SignupViewOption) => void;\n readonly onConversionFilterChange?: (filter: ConversionFilterOption) => void;\n readonly onCategorySortChange?: (sort: CategorySortOption) => void;\n\n readonly onProductsTitleClick?: () => void;\n readonly onConversionTitleClick?: () => void;\n readonly onSignupsTitleClick?: () => void;\n readonly onCategoriesToTitleClick?: () => void;\n}\n\nexport const ShoppingDashboard: React.FC<ShoppingDashboardProps> = ({\n stats,\n topProducts,\n conversionData,\n signupData,\n categories,\n isLoading = false,\n error,\n shopTitle,\n className,\n dateRange = 'last30days',\n market = 'all',\n productSort = 'units',\n signupView = 'all',\n conversionFilter = 'all',\n categorySort = 'revenue',\n markets,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n onSignupViewChange,\n onConversionFilterChange,\n onCategorySortChange,\n onProductsTitleClick,\n onConversionTitleClick,\n onSignupsTitleClick,\n onCategoriesToTitleClick,\n}) => {\n const resolvedTopProducts = topProducts ?? EMPTY_TOP_PRODUCTS;\n const resolvedConversionData = conversionData ?? EMPTY_CONVERSION_DATA;\n const resolvedSignupData = signupData ?? EMPTY_SIGNUP_DATA;\n const resolvedCategories = categories ?? EMPTY_CATEGORIES;\n\n if (error) {\n return (\n <DashboardContainer as=\"main\" className={className} aria-label={getTranslation(Keys.ariaLabel.dashboard)}>\n <ErrorContainer data-testid=\"dashboard-error\" role=\"alert\" aria-live=\"assertive\">\n <strong>{getTranslation(Keys.error)}:</strong> {error}\n </ErrorContainer>\n </DashboardContainer>\n );\n }\n\n const getTrendDirection = (trendValue?: string): 'up' | 'down' | 'neutral' => {\n if (!trendValue) return 'neutral';\n if (trendValue.startsWith('+')) return 'up';\n if (trendValue.startsWith('-')) return 'down';\n return 'neutral';\n };\n\n return (\n <DashboardContainer\n as=\"main\"\n className={className}\n data-testid=\"shopping-dashboard\"\n aria-label={getTranslation(Keys.ariaLabel.dashboard)}\n aria-busy={isLoading}\n >\n <DashboardHeader\n shopTitle={shopTitle}\n dateRange={dateRange}\n market={market}\n isLoading={isLoading}\n stats={stats}\n markets={markets}\n onDateRangeChange={onDateRangeChange}\n onMarketChange={onMarketChange}\n />\n\n <StatsRow as=\"section\" data-testid=\"stats-row\" aria-label={getTranslation(Keys.ariaLabel.statsRow)}>\n <StatsCard\n title={getTranslation(Keys.stats.revenue)}\n value={stats?.metrics?.revenue ?? '$0'}\n trendDirection={getTrendDirection(stats?.trend?.revenue)}\n trendValue={stats?.trend?.revenue}\n testId=\"stats-card-revenue\"\n isLoading={isLoading}\n />\n <StatsCard\n title={getTranslation(Keys.stats.volume)}\n value={stats?.metrics?.volume ?? '0'}\n subtitle={getTranslation(Keys.stats.subtitle.dcSv)}\n trendDirection={getTrendDirection(stats?.trend?.volume)}\n trendValue={stats?.trend?.volume}\n testId=\"stats-card-volume\"\n isLoading={isLoading}\n />\n <StatsCard\n title={getTranslation(Keys.stats.visits)}\n value={stats?.metrics?.siteVisits ?? '0'}\n subtitle={`${stats?.metrics?.conversionRate ?? '0%'} ${getTranslation(Keys.stats.subtitle.conversionRate)}`}\n trendDirection={getTrendDirection(stats?.trend?.siteVisits)}\n trendValue={stats?.trend?.siteVisits}\n testId=\"stats-card-visits\"\n isLoading={isLoading}\n />\n </StatsRow>\n\n <WidgetContainer data-testid=\"widget-container\">\n <TwoColumnGrid data-testid=\"widget-row-1\">\n <TopSellingProductsList\n products={resolvedTopProducts}\n productSort={productSort}\n isLoading={isLoading}\n maxProducts={5}\n onSortChange={onProductSortChange}\n onTitleClick={onProductsTitleClick}\n />\n <SignupsChart\n signupData={resolvedSignupData}\n signupView={signupView}\n isLoading={isLoading}\n onViewChange={onSignupViewChange}\n onTitleClick={onSignupsTitleClick}\n />\n </TwoColumnGrid>\n\n <TwoColumnGrid data-testid=\"widget-row-2\">\n <ConversionRateChart\n conversionData={resolvedConversionData}\n conversionFilter={conversionFilter}\n isLoading={isLoading}\n onFilterChange={onConversionFilterChange}\n onTitleClick={onConversionTitleClick}\n />\n <TopCategoriesPieChart\n categories={resolvedCategories}\n categorySort={categorySort}\n isLoading={isLoading}\n onSortChange={onCategorySortChange}\n onTitleClick={onCategoriesToTitleClick}\n />\n </TwoColumnGrid>\n </WidgetContainer>\n </DashboardContainer>\n );\n};\n\nexport default ShoppingDashboard;\n","import React from 'react';\nimport { ShoppingDashboard } from './ShoppingDashboard';\nimport { ProductsFullView } from './shared/TopProducts/ProductsFullView';\nimport { ConversionRateFullView } from './shared/ConversionRate/ConversionRateFullView';\nimport { SignupsFullView } from './shared/Signups/SignupsFullView';\nimport { CategoriesFullView } from './shared/TopCategories/CategoriesFullView';\nimport { useTranslationResolver } from './TranslationContext';\nimport type { TranslateFn } from './TranslationKeys/translationResolver';\nimport type {\n DashboardStats,\n TopProduct,\n ConversionDataPoint,\n SignupDataPoint,\n CategoryRevenue,\n OrderHistory,\n SignupDetail,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n ProductSortOption,\n SignupViewOption,\n ConversionFilterOption,\n CategorySortOption,\n FullViewWidgetType,\n} from './types.d';\n\ntype ViewMode = 'push' | 'replace';\n\nexport type MysiteDashboardView = 'dashboard' | FullViewWidgetType;\n\nexport interface MysiteDashboardHistoryLocation {\n readonly pathname?: string;\n readonly search?: string;\n readonly hash?: string;\n readonly state?: unknown;\n}\n\nexport interface MysiteDashboardHistoryAdapter {\n readonly location?: MysiteDashboardHistoryLocation;\n push(location: MysiteDashboardHistoryLocation): void;\n replace(location: MysiteDashboardHistoryLocation): void;\n goBack(): void;\n listen(listener: (location: MysiteDashboardHistoryLocation, action: string) => void): () => void;\n}\n\nexport interface MysiteDashboardWithNavigationProps {\n readonly stats?: DashboardStats | null;\n readonly topProducts?: TopProduct[];\n readonly conversionData?: ConversionDataPoint[];\n readonly signupData?: SignupDataPoint[];\n readonly categories?: CategoryRevenue[];\n readonly orders?: OrderHistory[];\n readonly signups?: SignupDetail[];\n readonly isLoading?: boolean;\n readonly error?: string | null;\n readonly shopTitle?: string;\n readonly className?: string;\n\n readonly translate?: TranslateFn;\n\n readonly initialDateRange?: DateRangeOption;\n readonly initialMarket?: MarketOption;\n readonly initialProductSort?: ProductSortOption;\n readonly initialSignupView?: SignupViewOption;\n readonly initialConversionFilter?: ConversionFilterOption;\n readonly initialCategorySort?: CategorySortOption;\n\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n\n readonly historyAdapter?: MysiteDashboardHistoryAdapter;\n readonly historyStateKey?: string;\n readonly resetToDashboardOnMount?: boolean;\n\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onProductSortChange?: (sort: ProductSortOption) => void;\n readonly onSignupViewChange?: (view: SignupViewOption) => void;\n readonly onConversionFilterChange?: (filter: ConversionFilterOption) => void;\n readonly onCategorySortChange?: (sort: CategorySortOption) => void;\n readonly onViewChange?: (view: MysiteDashboardView) => void;\n}\n\nconst DEFAULT_HISTORY_STATE_KEY = 'shoppingDashboardView';\n\nconst EMPTY_TOP_PRODUCTS: TopProduct[] = [];\nconst EMPTY_CONVERSION_DATA: ConversionDataPoint[] = [];\nconst EMPTY_SIGNUP_DATA: SignupDataPoint[] = [];\nconst EMPTY_CATEGORIES: CategoryRevenue[] = [];\nconst EMPTY_ORDERS: OrderHistory[] = [];\nconst EMPTY_SIGNUPS: SignupDetail[] = [];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isMysiteDashboardView(value: unknown): value is MysiteDashboardView {\n return (\n value === 'dashboard' ||\n value === 'products' ||\n value === 'conversion-rate' ||\n value === 'signups' ||\n value === 'categories'\n );\n}\n\nfunction readViewFromState(state: unknown, stateKey: string): MysiteDashboardView {\n if (!isRecord(state)) {\n return 'dashboard';\n }\n\n const view = state[stateKey];\n return isMysiteDashboardView(view) ? view : 'dashboard';\n}\n\nfunction buildStateWithView(state: unknown, stateKey: string, view: MysiteDashboardView): Record<string, unknown> {\n const currentState = isRecord(state) ? state : {};\n\n return {\n ...currentState,\n [stateKey]: view,\n };\n}\n\nfunction buildLocationWithState(\n location: MysiteDashboardHistoryLocation | undefined,\n state: Record<string, unknown>,\n): MysiteDashboardHistoryLocation {\n return {\n pathname: location?.pathname,\n search: location?.search,\n hash: location?.hash,\n state,\n };\n}\n\nexport const MysiteDashboardWithNavigation: React.FC<MysiteDashboardWithNavigationProps> = ({\n stats,\n topProducts,\n conversionData,\n signupData,\n categories,\n orders,\n signups,\n isLoading = false,\n error,\n shopTitle,\n className,\n translate,\n initialDateRange = 'last30days',\n initialMarket = 'all',\n initialProductSort = 'units',\n initialSignupView = 'all',\n initialConversionFilter = 'all',\n initialCategorySort = 'revenue',\n markets,\n historyAdapter,\n historyStateKey = DEFAULT_HISTORY_STATE_KEY,\n resetToDashboardOnMount = true,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n onSignupViewChange,\n onConversionFilterChange,\n onCategorySortChange,\n onViewChange,\n}) => {\n useTranslationResolver(translate);\n\n const [currentView, setCurrentView] = React.useState<MysiteDashboardView>('dashboard');\n const hasIntraDashboardHistoryRef = React.useRef(false);\n const [dateRange, setDateRange] = React.useState<DateRangeOption>(initialDateRange);\n const [market, setMarket] = React.useState<MarketOption>(initialMarket);\n const [productSort, setProductSort] = React.useState<ProductSortOption>(initialProductSort);\n const [signupView, setSignupView] = React.useState<SignupViewOption>(initialSignupView);\n const [conversionFilter, setConversionFilter] = React.useState<ConversionFilterOption>(initialConversionFilter);\n const [categorySort, setCategorySort] = React.useState<CategorySortOption>(initialCategorySort);\n\n const resolvedTopProducts = topProducts ?? EMPTY_TOP_PRODUCTS;\n const resolvedConversionData = conversionData ?? EMPTY_CONVERSION_DATA;\n const resolvedSignupData = signupData ?? EMPTY_SIGNUP_DATA;\n const resolvedCategories = categories ?? EMPTY_CATEGORIES;\n const resolvedOrders = orders ?? EMPTY_ORDERS;\n const resolvedSignups = signups ?? EMPTY_SIGNUPS;\n\n const updateView = React.useCallback(\n (view: MysiteDashboardView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange],\n );\n\n const readCurrentView = React.useCallback((): MysiteDashboardView => {\n if (historyAdapter) {\n return readViewFromState(historyAdapter.location?.state, historyStateKey);\n }\n\n if (typeof window === 'undefined') {\n return 'dashboard';\n }\n\n return readViewFromState(window.history.state, historyStateKey);\n }, [historyAdapter, historyStateKey]);\n\n const writeCurrentView = React.useCallback(\n (view: MysiteDashboardView, mode: ViewMode) => {\n if (historyAdapter) {\n const nextState = buildStateWithView(historyAdapter.location?.state, historyStateKey, view);\n const nextLocation = buildLocationWithState(historyAdapter.location, nextState);\n\n if (mode === 'replace') {\n historyAdapter.replace(nextLocation);\n return;\n }\n\n historyAdapter.push(nextLocation);\n return;\n }\n\n if (typeof window === 'undefined') {\n return;\n }\n\n const nextState = buildStateWithView(window.history.state, historyStateKey, view);\n\n if (mode === 'replace') {\n window.history.replaceState(nextState, '');\n return;\n }\n\n window.history.pushState(nextState, '');\n },\n [historyAdapter, historyStateKey],\n );\n\n React.useEffect(() => {\n if (resetToDashboardOnMount) {\n writeCurrentView('dashboard', 'replace');\n hasIntraDashboardHistoryRef.current = false;\n updateView('dashboard');\n } else {\n updateView(readCurrentView());\n }\n\n if (historyAdapter) {\n return historyAdapter.listen((location, action) => {\n if (action === 'POP') {\n const nextView = readViewFromState(location.state, historyStateKey);\n hasIntraDashboardHistoryRef.current = nextView !== 'dashboard';\n updateView(nextView);\n }\n });\n }\n\n const handlePopState = (event: PopStateEvent) => {\n const nextView = readViewFromState(event.state, historyStateKey);\n hasIntraDashboardHistoryRef.current = nextView !== 'dashboard';\n updateView(nextView);\n };\n\n window.addEventListener('popstate', handlePopState);\n return () => {\n window.removeEventListener('popstate', handlePopState);\n };\n }, [historyAdapter, historyStateKey, readCurrentView, resetToDashboardOnMount, updateView, writeCurrentView]);\n\n const handleOpenFullView = React.useCallback(\n (view: FullViewWidgetType) => {\n hasIntraDashboardHistoryRef.current = true;\n writeCurrentView(view, 'push');\n updateView(view);\n },\n [updateView, writeCurrentView],\n );\n\n const handleBack = React.useCallback(() => {\n if (currentView !== 'dashboard' && hasIntraDashboardHistoryRef.current) {\n if (historyAdapter) {\n historyAdapter.goBack();\n return;\n }\n\n if (typeof window !== 'undefined') {\n window.history.back();\n }\n\n return;\n }\n\n hasIntraDashboardHistoryRef.current = false;\n writeCurrentView('dashboard', 'replace');\n updateView('dashboard');\n }, [currentView, historyAdapter, updateView, writeCurrentView]);\n\n const handleDateRangeChange = React.useCallback(\n (nextDateRange: DateRangeOption) => {\n setDateRange(nextDateRange);\n onDateRangeChange?.(nextDateRange);\n },\n [onDateRangeChange],\n );\n\n const handleMarketChange = React.useCallback(\n (nextMarket: MarketOption) => {\n setMarket(nextMarket);\n onMarketChange?.(nextMarket);\n },\n [onMarketChange],\n );\n\n const handleProductSortChange = React.useCallback(\n (nextProductSort: ProductSortOption) => {\n setProductSort(nextProductSort);\n onProductSortChange?.(nextProductSort);\n },\n [onProductSortChange],\n );\n\n const handleSignupViewChange = React.useCallback(\n (nextSignupView: SignupViewOption) => {\n setSignupView(nextSignupView);\n onSignupViewChange?.(nextSignupView);\n },\n [onSignupViewChange],\n );\n\n const handleConversionFilterChange = React.useCallback(\n (nextFilter: ConversionFilterOption) => {\n setConversionFilter(nextFilter);\n onConversionFilterChange?.(nextFilter);\n },\n [onConversionFilterChange],\n );\n\n const handleCategorySortChange = React.useCallback(\n (nextSort: CategorySortOption) => {\n setCategorySort(nextSort);\n onCategorySortChange?.(nextSort);\n },\n [onCategorySortChange],\n );\n\n const handleProductsTitleClick = React.useCallback(() => {\n handleOpenFullView('products');\n }, [handleOpenFullView]);\n\n const handleConversionTitleClick = React.useCallback(() => {\n handleOpenFullView('conversion-rate');\n }, [handleOpenFullView]);\n\n const handleSignupsTitleClick = React.useCallback(() => {\n handleOpenFullView('signups');\n }, [handleOpenFullView]);\n\n const handleCategoriesTitleClick = React.useCallback(() => {\n handleOpenFullView('categories');\n }, [handleOpenFullView]);\n\n if (currentView === 'products') {\n return (\n <ProductsFullView\n products={resolvedTopProducts}\n dateRange={dateRange}\n market={market}\n productSort={productSort}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onProductSortChange={handleProductSortChange}\n />\n );\n }\n\n if (currentView === 'conversion-rate') {\n return (\n <ConversionRateFullView\n conversionData={resolvedConversionData}\n orders={resolvedOrders}\n dateRange={dateRange}\n market={market}\n conversionFilter={conversionFilter}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onConversionFilterChange={handleConversionFilterChange}\n />\n );\n }\n\n if (currentView === 'signups') {\n return (\n <SignupsFullView\n signupData={resolvedSignupData}\n signups={resolvedSignups}\n dateRange={dateRange}\n market={market}\n signupView={signupView}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onSignupViewChange={handleSignupViewChange}\n />\n );\n }\n\n if (currentView === 'categories') {\n return (\n <CategoriesFullView\n categories={resolvedCategories}\n dateRange={dateRange}\n market={market}\n categorySort={categorySort}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onCategorySortChange={handleCategorySortChange}\n />\n );\n }\n\n return (\n <ShoppingDashboard\n stats={stats}\n topProducts={resolvedTopProducts}\n conversionData={resolvedConversionData}\n signupData={resolvedSignupData}\n categories={resolvedCategories}\n isLoading={isLoading}\n error={error}\n shopTitle={shopTitle}\n className={className}\n dateRange={dateRange}\n market={market}\n productSort={productSort}\n signupView={signupView}\n conversionFilter={conversionFilter}\n categorySort={categorySort}\n markets={markets}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onProductSortChange={handleProductSortChange}\n onSignupViewChange={handleSignupViewChange}\n onConversionFilterChange={handleConversionFilterChange}\n onCategorySortChange={handleCategorySortChange}\n onProductsTitleClick={handleProductsTitleClick}\n onConversionTitleClick={handleConversionTitleClick}\n onSignupsTitleClick={handleSignupsTitleClick}\n onCategoriesToTitleClick={handleCategoriesTitleClick}\n />\n );\n};\n\nexport default MysiteDashboardWithNavigation;\n","import React, { useState } from 'react';\nimport { PageHeader, buildDateRangeFilter, buildMarketFilter, type FilterConfig } from '../PageHeader';\nimport { DataTable, type ColumnDef } from '../DataTable';\nimport { Pagination } from '../Pagination';\nimport { usePaginatedItems, formatMoney } from '../../utils/dataUtils';\nimport { formatDateRangeLabel } from '../../utils/dateFormat';\nimport type { TopProduct, DateRangeOption, MarketOption, MarketFilterOption, ProductSortOption } from '../../types.d';\nimport { FullViewTableSkeleton } from '../LoadingSkeletons';\nimport { PageContainer, EmptyStateText } from '../FullViewComponents.styled';\nimport { useMarketOptions } from '../../utils/marketOptions';\nimport {\n ProductInfo,\n ProductName,\n ProductSku,\n MetricValue,\n MobileCardsContainer,\n DesktopTableContainer,\n MobileProductCard,\n MobileCardHeader,\n MobileProductRank,\n MobileProductDetails,\n MobileProductName,\n MobileProductSku,\n MobileMetricsGrid,\n MobileMetricItem,\n MobileMetricLabel,\n MobileMetricValue,\n} from './ProductsFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\n\ninterface ProductRow {\n rank: number;\n name: string;\n sku: string;\n units: number;\n revenue: number;\n volume: number;\n}\n\nexport interface ProductsFullViewProps {\n readonly products: TopProduct[];\n readonly dateRange: DateRangeOption;\n readonly market: MarketOption;\n readonly productSort: ProductSortOption;\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n readonly isLoading?: boolean;\n readonly onBack?: () => void;\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onProductSortChange?: (sort: ProductSortOption) => void;\n}\n\nfunction mapProductToRow(product: TopProduct): ProductRow {\n return {\n rank: product.rank,\n name: product.name,\n sku: `${getTranslation(Keys.fullView.products.skuPrefix)}-${product.id.replace('prod-', '').padStart(3, '0')}`,\n units: product.unitsSold,\n revenue: product.revenue,\n volume: product.volume,\n };\n}\n\nexport const ProductsFullView: React.FC<ProductsFullViewProps> = ({\n products,\n dateRange,\n market,\n productSort,\n markets,\n isLoading = false,\n onBack,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n const [sortColumn, setSortColumn] = useState<string>(productSort === 'revenue' ? 'revenue' : 'units');\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc');\n const itemsPerPage = 10;\n const isMobileView = useIsMobileViewport();\n\n const handleBack = React.useCallback(() => onBack?.(), [onBack]);\n\n const marketOptions = useMarketOptions(markets);\n\n const filters: FilterConfig[] = React.useMemo(\n () => [\n buildDateRangeFilter(dateRange, Keys),\n buildMarketFilter(market, marketOptions, Keys),\n {\n key: 'sort',\n label: getTranslation(Keys.filter.productSort.label),\n value: productSort,\n options: [\n { value: 'units', label: getTranslation(Keys.filter.productSort.units) },\n { value: 'revenue', label: getTranslation(Keys.filter.productSort.revenue) },\n { value: 'volume', label: getTranslation(Keys.filter.productSort.volume) },\n ],\n },\n ],\n [dateRange, market, marketOptions, productSort],\n );\n\n const handleFilterChange = React.useCallback(\n (key: string, value: string) => {\n if (key === 'dateRange') onDateRangeChange?.(value as DateRangeOption);\n else if (key === 'market') onMarketChange?.(value);\n else if (key === 'sort') {\n onProductSortChange?.(value as ProductSortOption);\n setCurrentPage(1);\n }\n },\n [onDateRangeChange, onMarketChange, onProductSortChange],\n );\n\n const handleSort = React.useCallback((columnKey: string, direction: 'asc' | 'desc') => {\n setSortColumn(columnKey);\n setSortDirection(direction);\n setCurrentPage(1);\n }, []);\n\n const productRows = React.useMemo(() => products.map(mapProductToRow), [products]);\n\n const sortedRows = React.useMemo(\n () =>\n [...productRows].sort((a, b) => {\n const aVal = a[sortColumn as keyof ProductRow] as number;\n const bVal = b[sortColumn as keyof ProductRow] as number;\n return sortDirection === 'asc' ? aVal - bVal : bVal - aVal;\n }),\n [productRows, sortColumn, sortDirection],\n );\n\n const { totalPages, pageItems: paginatedRows } = usePaginatedItems(sortedRows, currentPage, itemsPerPage);\n\n const currencyCode = products[0]?.currencyCode;\n\n const columns: ColumnDef<ProductRow>[] = React.useMemo(\n () => [\n { key: 'rank', label: getTranslation(Keys.fullView.products.columns.rank), sortable: true },\n {\n key: 'name',\n label: getTranslation(Keys.fullView.products.columns.product),\n sortable: true,\n render: (_: unknown, row: ProductRow) => (\n <ProductInfo>\n <ProductName>{row.name}</ProductName>\n <ProductSku>{row.sku}</ProductSku>\n </ProductInfo>\n ),\n },\n {\n key: 'units',\n label: getTranslation(Keys.fullView.products.columns.unitsSold),\n sortable: true,\n render: (value: unknown) => <MetricValue>{Number(value).toLocaleString()}</MetricValue>,\n },\n {\n key: 'revenue',\n label: getTranslation(Keys.fullView.products.columns.revenue),\n sortable: true,\n render: (value: unknown) => <MetricValue>{formatMoney(Number(value), currencyCode)}</MetricValue>,\n },\n {\n key: 'volume',\n label: getTranslation(Keys.fullView.products.columns.volume),\n sortable: true,\n render: (value: unknown) => <MetricValue>{Number(value).toLocaleString()}</MetricValue>,\n },\n ],\n [currencyCode],\n );\n\n if (isLoading) {\n return (\n <PageContainer data-testid=\"products-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topProducts.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <FullViewTableSkeleton />\n </PageContainer>\n );\n }\n\n if (products.length === 0) {\n return (\n <PageContainer data-testid=\"products-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topProducts.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <EmptyStateText data-testid=\"products-fullview-empty\">\n {getTranslation(Keys.fullView.products.noProducts)}\n </EmptyStateText>\n </PageContainer>\n );\n }\n\n return (\n <PageContainer data-testid=\"products-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topProducts.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n {!isMobileView ? (\n <DesktopTableContainer data-testid=\"products-fullview-desktop-table\">\n <DataTable\n columns={columns}\n data={paginatedRows}\n sortable\n onSort={handleSort}\n sortColumn={sortColumn}\n sortDirection={sortDirection}\n getRowKey={(row: ProductRow) => row.rank}\n />\n </DesktopTableContainer>\n ) : (\n <MobileCardsContainer data-testid=\"products-fullview-mobile-cards\">\n {paginatedRows.map((row) => (\n <MobileProductCard key={row.rank}>\n <MobileCardHeader>\n <MobileProductRank>#{row.rank}</MobileProductRank>\n <MobileProductDetails>\n <MobileProductName>{row.name}</MobileProductName>\n <MobileProductSku>{row.sku}</MobileProductSku>\n </MobileProductDetails>\n </MobileCardHeader>\n <MobileMetricsGrid>\n <MobileMetricItem>\n <MobileMetricLabel>\n {getTranslation(Keys.widget.topProducts.units)}\n </MobileMetricLabel>\n <MobileMetricValue>{row.units.toLocaleString()}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>\n {getTranslation(Keys.widget.topProducts.revenue)}\n </MobileMetricLabel>\n <MobileMetricValue>{formatMoney(row.revenue, currencyCode)}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>\n {getTranslation(Keys.filter.productSort.volume)}\n </MobileMetricLabel>\n <MobileMetricValue>{row.volume.toLocaleString()}</MobileMetricValue>\n </MobileMetricItem>\n </MobileMetricsGrid>\n </MobileProductCard>\n ))}\n </MobileCardsContainer>\n )}\n\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n itemsPerPage={itemsPerPage}\n totalItems={sortedRows.length}\n />\n )}\n </PageContainer>\n );\n};\n","import React from 'react';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport LanguageIcon from '@mui/icons-material/Language';\nimport {\n PageHeaderWrapper,\n BackButtonWrapper,\n BackButton,\n HeaderContainer,\n LeftSection,\n Title,\n DateRange,\n MobileDateRange,\n FiltersSection,\n FilterWrapper,\n FilterIcon,\n FilterDropdown,\n MobileTitleWrapper,\n MobileTitle,\n} from './PageHeader.styled';\nimport type { FilterConfig } from './types';\nimport type { DateRangeOption, MarketOption, MarketFilterOption } from '../types.d';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport type { FilterConfig } from './types';\n\ntype TranslationEntry = { readonly key: string; readonly fallback: string };\n\nexport interface DateRangeMarketKeys {\n readonly filter: {\n readonly dateRange: {\n readonly label: TranslationEntry;\n readonly last7days: TranslationEntry;\n readonly last30days: TranslationEntry;\n readonly last90days: TranslationEntry;\n readonly thisMonth: TranslationEntry;\n };\n readonly market: {\n readonly label: TranslationEntry;\n };\n };\n}\n\nexport function buildDateRangeFilter(dateRange: DateRangeOption, keys: DateRangeMarketKeys): FilterConfig {\n return {\n key: 'dateRange',\n label: getTranslation(keys.filter.dateRange.label),\n value: dateRange,\n icon: 'calendar',\n options: [\n { value: 'last7days', label: getTranslation(keys.filter.dateRange.last7days) },\n { value: 'last30days', label: getTranslation(keys.filter.dateRange.last30days) },\n { value: 'last90days', label: getTranslation(keys.filter.dateRange.last90days) },\n { value: 'thisMonth', label: getTranslation(keys.filter.dateRange.thisMonth) },\n ],\n };\n}\n\nexport function buildMarketFilter(\n market: MarketOption,\n marketOptions: ReadonlyArray<MarketFilterOption>,\n keys: DateRangeMarketKeys,\n): FilterConfig {\n return {\n key: 'market',\n label: getTranslation(keys.filter.market.label),\n value: market,\n icon: 'globe',\n options: marketOptions.map((option) => ({ value: option.value, label: option.label })),\n };\n}\n\nexport interface PageHeaderProps {\n readonly title: string;\n readonly dateRange: string;\n readonly onBack: () => void;\n readonly filters?: FilterConfig[];\n readonly onFilterChange?: (filterKey: string, value: string) => void;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({ title, dateRange, onBack, filters, onFilterChange }) => {\n const renderFilterIcon = (iconType?: 'calendar' | 'globe') => {\n if (!iconType) return null;\n return (\n <FilterIcon>\n {iconType === 'calendar' && <CalendarTodayIcon />}\n {iconType === 'globe' && <LanguageIcon />}\n </FilterIcon>\n );\n };\n\n return (\n <PageHeaderWrapper data-testid=\"page-header\">\n <BackButtonWrapper>\n <BackButton\n onClick={onBack}\n aria-label={getTranslation(Keys.navigation.backAriaLabel)}\n data-testid=\"page-back-button\"\n type=\"button\"\n >\n <ArrowBackIcon />\n <span>{getTranslation(Keys.navigation.backToDashboard)}</span>\n </BackButton>\n </BackButtonWrapper>\n\n <MobileTitleWrapper>\n <MobileTitle>{title}</MobileTitle>\n </MobileTitleWrapper>\n\n <HeaderContainer>\n <LeftSection>\n <Title data-testid=\"page-header-title\">{title}</Title>\n <DateRange data-testid=\"page-header-date-range\">{dateRange}</DateRange>\n </LeftSection>\n\n {filters && filters.length > 0 && onFilterChange && (\n <FiltersSection data-testid=\"page-header-filters\">\n {filters.map((filter) => (\n <FilterWrapper key={filter.key}>\n {renderFilterIcon(filter.icon)}\n <FilterDropdown\n id={`filter-${filter.key}`}\n value={filter.value}\n onChange={(e) => onFilterChange(filter.key, e.target.value)}\n disabled={filter.disabled}\n aria-label={`${filter.label} ${getTranslation(Keys.ariaLabel.filterSuffix)}`}\n data-testid={`filter-dropdown-${filter.key}`}\n >\n {filter.options.map((option) => (\n <option key={option.value} value={option.value}>\n {filter.label && filter.key === 'customerType'\n ? `${filter.label} ${option.label}`\n : option.label}\n </option>\n ))}\n </FilterDropdown>\n </FilterWrapper>\n ))}\n </FiltersSection>\n )}\n\n <MobileDateRange>{dateRange}</MobileDateRange>\n </HeaderContainer>\n </PageHeaderWrapper>\n );\n};\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const PageHeaderWrapper = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`;\n\nexport const BackButtonWrapper = styled('div')`\n display: flex;\n align-items: center;\n`;\n\nexport const BackButton = styled('button')`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0;\n border: none;\n background-color: transparent;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n cursor: pointer;\n transition: color 0.2s ease;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n\n &:hover {\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => getGenomeColor(theme, 'A70')};\n outline-offset: 2px;\n border-radius: 4px;\n }\n\n svg {\n font-size: 16px;\n }\n\n span {\n line-height: 1;\n }\n`;\n\nexport const HeaderContainer = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 16px;\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n gap: 24px;\n\n @media (max-width: 767px) {\n align-items: flex-end;\n gap: 16px;\n }\n`;\n\nexport const LeftSection = styled('div')`\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n\n @media (max-width: 767px) {\n display: none;\n }\n`;\n\nexport const Title = styled('h1')`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`;\n\nexport const DateRange = styled('p')`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n white-space: nowrap;\n`;\n\nexport const MobileDateRange = styled('p')`\n display: none;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n flex-shrink: 0;\n }\n`;\n\nexport const FiltersSection = styled('div')`\n display: flex;\n gap: 24px;\n align-items: center;\n flex-shrink: 0;\n\n @media (max-width: 767px) {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n`;\n\nexport const FilterWrapper = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const FilterIcon = styled('span')`\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n\n svg {\n font-size: 16px;\n }\n`;\n\nexport const FilterDropdown = styled('select')`\n min-width: 120px;\n height: 32px;\n padding: 6px 8px;\n padding-right: 24px;\n background-color: transparent;\n border: none;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n outline: none;\n transition: background-color 0.2s ease;\n appearance: none;\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path fill=\"%23667085\" d=\"M6 8L2 4h8L6 8z\"/></svg>');\n background-repeat: no-repeat;\n background-position: right 4px center;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 4px;\n }\n\n &:focus {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 4px;\n outline: 2px solid ${({ theme }) => getGenomeColor(theme, 'A70')};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n @media (max-width: 767px) {\n min-width: auto;\n width: auto;\n flex: none;\n padding-right: 24px;\n background-position: right 8px center;\n }\n`;\n\nexport const MobileTitleWrapper = styled('div')`\n display: none;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`;\n\nexport const MobileTitle = styled('h1')`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n`;\n","import React from 'react';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport {\n TableContainer,\n Table,\n TableHeader,\n TableHeaderCell,\n TableBody,\n TableRow,\n TableCell,\n EmptyTableCell,\n SortIconContainer,\n} from './DataTable.styled';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface ColumnDef<TData = unknown> {\n key: string;\n label: string;\n sortable?: boolean;\n render?: (value: unknown, row: TData) => React.ReactNode;\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface DataTableProps<TData = unknown> {\n readonly columns: ColumnDef<TData>[];\n readonly data: TData[];\n readonly sortable?: boolean;\n readonly onSort?: (columnKey: string, direction: 'asc' | 'desc') => void;\n readonly sortColumn?: string;\n readonly sortDirection?: 'asc' | 'desc';\n readonly getRowKey?: (row: TData, rowIndex: number) => React.Key;\n}\n\nexport const DataTable = <TData,>({\n columns,\n data,\n sortable = false,\n onSort,\n sortColumn,\n sortDirection = 'asc',\n getRowKey,\n}: DataTableProps<TData>) => {\n const handleSort = (columnKey: string) => {\n if (!sortable || !onSort) return;\n const newDirection = sortColumn === columnKey && sortDirection === 'asc' ? 'desc' : 'asc';\n onSort(columnKey, newDirection);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent, columnKey: string) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleSort(columnKey);\n }\n };\n\n const getAriaSort = (columnKey: string): 'ascending' | 'descending' | undefined => {\n if (sortColumn !== columnKey) return undefined;\n return sortDirection === 'asc' ? 'ascending' : 'descending';\n };\n\n return (\n <TableContainer data-testid=\"data-table\">\n <Table>\n <TableHeader>\n <tr>\n {columns.map((column) => (\n <TableHeaderCell\n key={column.key}\n scope=\"col\"\n sortable={sortable && column.sortable}\n onClick={() => column.sortable && handleSort(column.key)}\n onKeyDown={(e) => column.sortable && handleKeyDown(e, column.key)}\n tabIndex={sortable && column.sortable ? 0 : -1}\n aria-sort={getAriaSort(column.key)}\n aria-label={`${column.label}${column.sortable ? getTranslation(Keys.dataTable.sortableColumn) : ''}`}\n data-testid={`table-header-${column.key}`}\n >\n {column.label}\n {sortable && column.sortable && (\n <SortIconContainer isActive={sortColumn === column.key}>\n {sortColumn === column.key && sortDirection === 'desc' ? (\n <ArrowDownwardIcon />\n ) : (\n <ArrowUpwardIcon />\n )}\n </SortIconContainer>\n )}\n </TableHeaderCell>\n ))}\n </tr>\n </TableHeader>\n <TableBody>\n {data.length === 0 ? (\n <TableRow data-testid=\"table-empty-row\">\n <EmptyTableCell colSpan={columns.length}>\n {getTranslation(Keys.dataTable.noDataAvailable)}\n </EmptyTableCell>\n </TableRow>\n ) : (\n data.map((row, rowIndex) => (\n <TableRow\n key={getRowKey ? getRowKey(row, rowIndex) : rowIndex}\n data-testid={`table-row-${rowIndex}`}\n >\n {columns.map((column) => (\n <TableCell key={column.key} data-testid={`table-cell-${column.key}`}>\n {column.render\n ? column.render((row as Record<string, unknown>)[column.key], row)\n : ((row as Record<string, unknown>)[column.key] as React.ReactNode)}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </TableContainer>\n );\n};\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const TableContainer = styled('div')`\n width: 100%;\n overflow-x: auto;\n border-radius: 8px;\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n`;\n\nexport const Table = styled('table')`\n width: 100%;\n border-collapse: collapse;\n`;\n\nexport const TableHeader = styled('thead')`\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-bottom: 2px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n`;\n\nexport const TableHeaderCell = styled('th')<{ sortable?: boolean }>`\n padding: 12px 16px;\n font-size: 14px;\n font-weight: 600;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n text-align: left;\n cursor: ${({ sortable }) => (sortable ? 'pointer' : 'default')};\n user-select: none;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({ theme, sortable }) => (sortable ? getGenomeColor(theme, 'N30') : 'transparent')};\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => getGenomeColor(theme, 'A70')};\n outline-offset: -2px;\n }\n`;\n\nexport const TableBody = styled('tbody')``;\n\nexport const TableRow = styled('tr')`\n border-bottom: 1px solid ${({ theme }) => getGenomeColor(theme, 'N30')};\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nexport const TableCell = styled('td')`\n padding: 12px 16px;\n font-size: 14px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n text-align: left;\n`;\n\nexport const EmptyTableCell = styled(TableCell)`\n text-align: center;\n`;\n\nexport const SortIconContainer = styled('span')<{ isActive?: boolean }>`\n display: inline-flex;\n margin-left: 6px;\n opacity: ${({ isActive }) => (isActive ? 1 : 0.4)};\n transition: opacity 0.2s ease;\n\n svg {\n font-size: 16px;\n }\n`;\n","import React from 'react';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { PaginationContainer, PageButton, PageInfo, NavButton } from './Pagination.styled';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface PaginationProps {\n readonly currentPage: number;\n readonly totalPages: number;\n readonly onPageChange: (page: number) => void;\n readonly itemsPerPage?: number;\n readonly totalItems?: number;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n itemsPerPage,\n totalItems,\n}) => {\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent, action: () => void) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n action();\n }\n };\n\n const getPageNumbers = (): number[] => {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: number[] = [];\n if (currentPage <= 4) {\n pages.push(1, 2, 3, 4, 5);\n } else if (currentPage >= totalPages - 3) {\n pages.push(totalPages - 4, totalPages - 3, totalPages - 2, totalPages - 1, totalPages);\n } else {\n pages.push(currentPage - 1, currentPage, currentPage + 1);\n }\n\n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n const startItem = itemsPerPage ? (currentPage - 1) * itemsPerPage + 1 : null;\n const endItem = itemsPerPage ? Math.min(currentPage * itemsPerPage, totalItems ?? Infinity) : null;\n const goToPageLabel = getTranslation(Keys.pagination.goToPage);\n\n return (\n <PaginationContainer data-testid=\"pagination\">\n <NavButton\n onClick={handlePrevious}\n onKeyDown={(e) => handleKeyDown(e, handlePrevious)}\n disabled={currentPage === 1}\n aria-label={getTranslation(Keys.pagination.previousPage)}\n data-testid=\"pagination-previous\"\n type=\"button\"\n >\n <ChevronLeftIcon />\n </NavButton>\n\n {totalPages > 7 && currentPage > 4 && (\n <>\n <PageButton\n onClick={() => onPageChange(1)}\n isActive={false}\n aria-label={`${goToPageLabel} 1`}\n data-testid=\"pagination-page-1\"\n type=\"button\"\n >\n 1\n </PageButton>\n <PageInfo>...</PageInfo>\n </>\n )}\n\n {pageNumbers.map((page) => (\n <PageButton\n key={page}\n onClick={() => onPageChange(page)}\n isActive={currentPage === page}\n aria-label={`${goToPageLabel} ${page}`}\n aria-current={currentPage === page ? 'page' : undefined}\n data-testid={`pagination-page-${page}`}\n type=\"button\"\n >\n {page}\n </PageButton>\n ))}\n\n {totalPages > 7 && currentPage < totalPages - 3 && (\n <>\n <PageInfo>...</PageInfo>\n <PageButton\n onClick={() => onPageChange(totalPages)}\n isActive={false}\n aria-label={`${goToPageLabel} ${totalPages}`}\n data-testid={`pagination-page-${totalPages}`}\n type=\"button\"\n >\n {totalPages}\n </PageButton>\n </>\n )}\n\n <NavButton\n onClick={handleNext}\n onKeyDown={(e) => handleKeyDown(e, handleNext)}\n disabled={currentPage === totalPages}\n aria-label={getTranslation(Keys.pagination.nextPage)}\n data-testid=\"pagination-next\"\n type=\"button\"\n >\n <ChevronRightIcon />\n </NavButton>\n\n {itemsPerPage && totalItems && (\n <PageInfo as=\"output\" aria-live=\"polite\" data-testid=\"pagination-page-info\">\n {startItem}-{endItem} {getTranslation(Keys.pagination.of)} {totalItems}\n </PageInfo>\n )}\n </PaginationContainer>\n );\n};\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const PaginationContainer = styled('div')`\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n margin-top: 24px;\n`;\n\nexport const PageButton = styled('button')<{ isActive?: boolean }>`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({ theme, isActive }) =>\n isActive ? getGenomeColor(theme, 'A80') : getGenomeColor(theme, 'N20')};\n color: ${({ theme, isActive }) => (isActive ? '#ffffff' : getGenomeColor(theme, 'N100'))};\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: ${({ theme, isActive }) =>\n isActive ? getGenomeColor(theme, 'A70') : getGenomeColor(theme, 'N30')};\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => getGenomeColor(theme, 'A70')};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n`;\n\nexport const PageInfo = styled('span')`\n font-size: 14px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n margin: 0 8px;\n`;\n\nexport const NavButton = styled('button')`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => getGenomeColor(theme, 'A70')};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n svg {\n font-size: 18px;\n }\n`;\n","import { styled } from '@mui/material/styles';\nimport { Box, Typography } from '@mui/material';\nimport { ColorUtils } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const PageContainer = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 24px;\n width: 100%;\n box-sizing: border-box;\n\n @media (max-width: 767px) {\n gap: 16px;\n }\n`;\n\nexport const MetricChartCardSection = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n box-shadow: ${({ theme }) => theme.shadows[1]};\n\n @media (max-width: 767px) {\n padding: 16px;\n gap: 16px;\n }\n`;\n\nexport const MetricSection = styled(Box)`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px 0;\n\n @media (max-width: 767px) {\n padding: 8px 0;\n }\n`;\n\nexport const MetricValue = styled(Typography)`\n font-size: 3rem;\n font-weight: 600;\n color: ${({ theme }) => theme.palette.text.primary};\n line-height: 1.2;\n\n @media (max-width: 767px) {\n font-size: 2.5rem;\n }\n`;\n\nexport const MetricTrend = styled(Box)<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 8px;\n font-size: 1.25rem;\n font-weight: 500;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return theme.palette.success.main;\n if (direction === 'down') return theme.palette.error.main;\n return theme.palette.text.secondary;\n }};\n\n svg {\n font-size: 1.5rem;\n }\n\n @media (max-width: 767px) {\n font-size: 1rem;\n\n svg {\n font-size: 1.25rem;\n }\n }\n`;\n\nexport const ComparisonText = styled(Typography)`\n margin-top: 4px;\n font-size: 0.875rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n\n @media (max-width: 767px) {\n font-size: 0.8125rem;\n }\n`;\n\nexport const ChartSection = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 0;\n\n @media (max-width: 767px) {\n gap: 8px;\n }\n`;\n\nexport const ChartTitle = styled('h2')`\n margin: 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: ${({ theme }) => theme.palette.text.primary};\n\n @media (max-width: 767px) {\n font-size: 1.125rem;\n }\n`;\n\nexport const ChartContainer = styled(Box)`\n width: 100%;\n height: 400px;\n\n @media (max-width: 767px) {\n height: 200px;\n }\n`;\n\nexport const TableSection = styled(Box)<{ withCard?: boolean }>`\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n ${({ withCard = true, theme }) =>\n withCard &&\n `\n padding: 20px;\n background-color: ${getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n box-shadow: ${theme.shadows[1]};\n\n @media (max-width: 767px) {\n padding: 16px;\n }\n `}\n`;\n\nexport const LoadingContainer = styled(Box)`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n`;\n\nexport const EmptyStateText = styled(Typography)`\n text-align: center;\n color: ${({ theme }) => theme.palette.text.secondary};\n font-size: 1rem;\n padding: 40px 20px;\n\n @media (max-width: 767px) {\n font-size: 0.875rem;\n padding: 32px 16px;\n }\n`;\n\nexport const MobileCardName = styled(Typography)`\n font-weight: 600;\n font-size: 14px;\n`;\n\nexport const MobileCardSubtext = styled(Typography)`\n font-size: 13px;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const MobileCardDetail = styled(Typography)`\n font-size: 13px;\n`;\n\nexport const MobileCardStatus = styled(Typography)<{ status: string }>`\n font-size: 13px;\n color: ${({ theme, status }) => (status === 'Active' ? theme.palette.success.main : theme.palette.warning.main)};\n`;\n","import { styled } from '@mui/material/styles';\nimport { Box, Typography } from '@mui/material';\nimport { ColorUtils } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const ProductInfo = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nexport const ProductName = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.primary};\n`;\n\nexport const ProductSku = styled(Typography)`\n font-size: 0.75rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const MetricValue = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`;\n\nexport const MobileCardsContainer = styled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`;\n\nexport const DesktopTableContainer = styled(Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`;\n\nexport const MobileProductCard = styled(Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => theme.palette.divider};\n border-radius: 8px;\n`;\n\nexport const MobileCardHeader = styled(Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n`;\n\nexport const MobileProductRank = styled(Typography)`\n font-size: 1rem;\n font-weight: 700;\n color: ${({ theme }) => theme.palette.primary.main};\n min-width: 24px;\n`;\n\nexport const MobileProductDetails = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`;\n\nexport const MobileProductName = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n`;\n\nexport const MobileProductSku = styled(Typography)`\n font-size: 0.75rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const MobileMetricsGrid = styled(Box)`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n padding-top: 12px;\n border-top: 1px solid ${({ theme }) => theme.palette.divider};\n`;\n\nexport const MobileMetricItem = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`;\n\nexport const MobileMetricLabel = styled(Typography)`\n font-size: 0.625rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n text-transform: uppercase;\n`;\n\nexport const MobileMetricValue = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`;\n","import useMediaQuery from '@mui/material/useMediaQuery';\n\nexport const MOBILE_VIEWPORT_QUERY = '(max-width:767px)';\n\nexport function useIsMobileViewport(): boolean {\n return useMediaQuery(MOBILE_VIEWPORT_QUERY, { noSsr: true });\n}\n","import React, { useState } from 'react';\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport { PageHeader, buildDateRangeFilter, buildMarketFilter, type FilterConfig } from '../PageHeader';\nimport { DataTable, type ColumnDef } from '../DataTable';\nimport { Pagination } from '../Pagination';\nimport { usePaginatedItems, formatMoney } from '../../utils/dataUtils';\nimport { formatDateRangeLabel } from '../../utils/dateFormat';\nimport type {\n ConversionDataPoint,\n OrderHistory,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n ConversionFilterOption,\n} from '../../types.d';\nimport type { TrendDirection } from '../types';\nimport { FullViewChartSkeleton } from '../LoadingSkeletons';\nimport { useMarketOptions } from '../../utils/marketOptions';\nimport {\n PageContainer,\n MetricChartCardSection,\n MetricSection,\n MetricValue,\n MetricTrend,\n ChartSection,\n ChartTitle,\n ChartContainer,\n TableSection,\n} from '../FullViewComponents.styled';\nimport {\n MobileOrderCard,\n MobileOrderHeader,\n MobileCustomerInfo,\n MobileCustomerName,\n MobileOrderDate,\n MobileOrderId,\n MobileOrderMetrics,\n MobileMetricItem,\n MobileMetricLabel,\n MobileMetricValue,\n MobileOrdersContainer,\n DesktopTableContainer,\n ComparisonTextMobile,\n} from './ConversionRateFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface ConversionRateFullViewProps {\n readonly conversionData: ConversionDataPoint[];\n readonly orders: OrderHistory[];\n readonly dateRange: DateRangeOption;\n readonly market: MarketOption;\n readonly conversionFilter: ConversionFilterOption;\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n readonly isLoading?: boolean;\n readonly summaryRate?: number;\n readonly summaryChangePct?: number | null;\n readonly onBack?: () => void;\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onConversionFilterChange?: (filter: ConversionFilterOption) => void;\n}\n\nexport const ConversionRateFullView: React.FC<ConversionRateFullViewProps> = ({\n conversionData,\n orders,\n summaryRate,\n summaryChangePct,\n dateRange,\n market,\n conversionFilter,\n markets,\n isLoading = false,\n onBack,\n onDateRangeChange,\n onMarketChange,\n onConversionFilterChange,\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n const itemsPerPage = 10;\n const isMobileView = useIsMobileViewport();\n\n const handleBack = React.useCallback(() => onBack?.(), [onBack]);\n\n const marketOptions = useMarketOptions(markets);\n\n const currentRate = React.useMemo(() => {\n if (typeof summaryRate === 'number' && Number.isFinite(summaryRate)) return summaryRate;\n return conversionData.at(-1)?.rate ?? 0;\n }, [summaryRate, conversionData]);\n\n const trend = React.useMemo((): { direction: TrendDirection; value: string } => {\n if (summaryChangePct !== undefined) {\n if (summaryChangePct === null)\n return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n let direction: TrendDirection = 'neutral';\n if (summaryChangePct > 0) direction = 'up';\n else if (summaryChangePct < 0) direction = 'down';\n return { direction, value: `${summaryChangePct >= 0 ? '+' : ''}${summaryChangePct.toFixed(1)}%` };\n }\n if (conversionData.length < 2) return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const firstRate = conversionData[0].rate;\n if (firstRate === 0) return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const lastRate = conversionData.at(-1)?.rate ?? 0;\n const change = ((lastRate - firstRate) / firstRate) * 100;\n let direction: TrendDirection = 'neutral';\n if (change > 0) direction = 'up';\n else if (change < 0) direction = 'down';\n return { direction, value: `${change >= 0 ? '+' : ''}${change.toFixed(1)}%` };\n }, [summaryChangePct, conversionData]);\n\n const getConversionFilterLabel = React.useCallback((filter: ConversionFilterOption): string => {\n if (filter === 'standard') return getTranslation(Keys.filter.conversionType.standard);\n if (filter === 'subscription') return getTranslation(Keys.filter.conversionType.subscription);\n return getTranslation(Keys.filter.conversionType.all);\n }, []);\n\n const conversionFilterLabel = React.useMemo(\n () => getConversionFilterLabel(conversionFilter),\n [conversionFilter, getConversionFilterLabel],\n );\n\n const filters: FilterConfig[] = React.useMemo(\n () => [\n buildDateRangeFilter(dateRange, Keys),\n buildMarketFilter(market, marketOptions, Keys),\n {\n key: 'customerType',\n label: getTranslation(Keys.filter.signupView.label),\n value: conversionFilter,\n options: [\n { value: 'all', label: getTranslation(Keys.filter.conversionType.all) },\n { value: 'standard', label: getTranslation(Keys.filter.conversionType.standard) },\n { value: 'subscription', label: getTranslation(Keys.filter.conversionType.subscription) },\n ],\n },\n ],\n [conversionFilter, dateRange, market, marketOptions],\n );\n\n const handleFilterChange = React.useCallback(\n (key: string, value: string) => {\n if (key === 'dateRange') onDateRangeChange?.(value as DateRangeOption);\n else if (key === 'market') onMarketChange?.(value);\n else if (key === 'customerType') {\n onConversionFilterChange?.(value as ConversionFilterOption);\n setCurrentPage(1);\n }\n },\n [onConversionFilterChange, onDateRangeChange, onMarketChange],\n );\n\n const filteredOrders = React.useMemo(() => {\n if (conversionFilter === 'all') return orders;\n return orders.filter((order) => order.customerType.toLowerCase() === conversionFilter);\n }, [orders, conversionFilter]);\n\n const { totalPages, pageItems: paginatedOrders } = usePaginatedItems(filteredOrders, currentPage, itemsPerPage);\n\n const columns: ColumnDef<OrderHistory>[] = React.useMemo(\n () => [\n { key: 'orderId', label: getTranslation(Keys.fullView.conversionRate.columns.orderId), sortable: true },\n { key: 'date', label: getTranslation(Keys.fullView.conversionRate.columns.date), sortable: true },\n {\n key: 'customerName',\n label: getTranslation(Keys.fullView.conversionRate.columns.customer),\n sortable: true,\n },\n { key: 'customerType', label: getTranslation(Keys.fullView.conversionRate.columns.type), sortable: true },\n { key: 'items', label: getTranslation(Keys.fullView.conversionRate.columns.items), sortable: true },\n {\n key: 'total',\n label: getTranslation(Keys.fullView.conversionRate.columns.total),\n sortable: true,\n render: (value: unknown, row: OrderHistory) =>\n formatMoney(Number(value), row.currencyCode, undefined, 2),\n },\n { key: 'bv', label: getTranslation(Keys.fullView.conversionRate.columns.bv), sortable: true },\n ],\n [],\n );\n\n const getChartColor = React.useCallback(() => {\n if (conversionFilter === 'standard') return '#2e7d32';\n if (conversionFilter === 'subscription') return '#ed6c02';\n return '#1976d2';\n }, [conversionFilter]);\n\n if (isLoading) {\n return (\n <PageContainer data-testid=\"conversion-rate-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.conversionRate.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <FullViewChartSkeleton />\n </PageContainer>\n );\n }\n\n return (\n <PageContainer data-testid=\"conversion-rate-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.conversionRate.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n <MetricChartCardSection data-testid=\"conversion-fullview-metric-chart\">\n <MetricSection>\n <MetricValue data-testid=\"conversion-rate-value\">{currentRate.toFixed(1)}%</MetricValue>\n <MetricTrend direction={trend.direction} data-testid=\"conversion-rate-trend\">\n {trend.direction === 'up' && <TrendingUpIcon />}\n {trend.direction === 'down' && <TrendingDownIcon />}\n {trend.value}\n </MetricTrend>\n <ComparisonTextMobile>\n {getTranslation(Keys.widget.conversionRate.ordersPerSiteVisits)}\n </ComparisonTextMobile>\n </MetricSection>\n\n <ChartSection>\n <ChartContainer data-testid=\"conversion-fullview-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={conversionData}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"date\" />\n <YAxis tickFormatter={(value) => `${value}%`} domain={[0, 'auto']} />\n <Tooltip\n formatter={(value: unknown) => {\n if (typeof value === 'number') return `${value.toFixed(2)}%`;\n if (typeof value === 'string') return value;\n return getTranslation(Keys.fullView.conversionRate.notAvailable);\n }}\n />\n <Legend />\n <Line\n type=\"monotone\"\n dataKey=\"rate\"\n stroke={getChartColor()}\n strokeWidth={2}\n name={`${getTranslation(Keys.widget.conversionRate.title)} (${conversionFilterLabel})`}\n dot={false}\n />\n </LineChart>\n </ResponsiveContainer>\n </ChartContainer>\n </ChartSection>\n </MetricChartCardSection>\n\n <TableSection data-testid=\"conversion-fullview-table-section\">\n <ChartTitle data-testid=\"conversion-fullview-table-title\">\n {getTranslation(Keys.fullView.conversionRate.orderDetailsTitle)} ({filteredOrders.length})\n </ChartTitle>\n {!isMobileView ? (\n <DesktopTableContainer data-testid=\"conversion-fullview-desktop-table\">\n <DataTable\n columns={columns}\n data={paginatedOrders}\n getRowKey={(row: OrderHistory) => row.orderId}\n />\n </DesktopTableContainer>\n ) : (\n <MobileOrdersContainer data-testid=\"conversion-fullview-mobile-orders\">\n {paginatedOrders.map((order) => (\n <MobileOrderCard key={order.orderId}>\n <MobileOrderHeader>\n <MobileCustomerInfo>\n <MobileCustomerName>{order.customerName}</MobileCustomerName>\n <MobileOrderDate>{order.date}</MobileOrderDate>\n </MobileCustomerInfo>\n <MobileOrderId>{order.orderId}</MobileOrderId>\n </MobileOrderHeader>\n <MobileOrderMetrics>\n <MobileMetricItem>\n <MobileMetricLabel>\n {getTranslation(Keys.fullView.conversionRate.columns.items)}\n </MobileMetricLabel>\n <MobileMetricValue>{order.items}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>\n {getTranslation(Keys.fullView.conversionRate.columns.orderTotal)}\n </MobileMetricLabel>\n <MobileMetricValue>${order.total.toFixed(2)}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>\n {getTranslation(Keys.fullView.conversionRate.columns.totalSv)}\n </MobileMetricLabel>\n <MobileMetricValue>{order.bv}</MobileMetricValue>\n </MobileMetricItem>\n </MobileOrderMetrics>\n </MobileOrderCard>\n ))}\n </MobileOrdersContainer>\n )}\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n itemsPerPage={itemsPerPage}\n totalItems={filteredOrders.length}\n />\n )}\n </TableSection>\n </PageContainer>\n );\n};\n","import { styled } from '@mui/material/styles';\nimport { Box, Typography } from '@mui/material';\nimport { ColorUtils } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const MobileOrderCard = styled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => theme.palette.divider};\n border-radius: 8px;\n }\n`;\n\nexport const MobileOrderHeader = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n\nexport const MobileCustomerInfo = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nexport const MobileCustomerName = styled(Typography)`\n font-size: 1rem;\n font-weight: 600;\n`;\n\nexport const MobileOrderDate = styled(Typography)`\n font-size: 0.875rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const MobileOrderId = styled('a')`\n font-size: 0.875rem;\n color: ${({ theme }) => theme.palette.primary.main};\n text-decoration: none;\n cursor: pointer;\n &:hover {\n text-decoration: underline;\n }\n`;\n\nexport const MobileOrderMetrics = styled(Box)`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n padding-top: 12px;\n border-top: 1px solid ${({ theme }) => theme.palette.divider};\n`;\n\nexport const MobileMetricItem = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n text-align: center;\n`;\n\nexport const MobileMetricLabel = styled(Typography)`\n font-size: 0.75rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const MobileMetricValue = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`;\n\nexport const MobileOrdersContainer = styled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`;\n\nexport const DesktopTableContainer = styled(Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`;\n\nexport const ComparisonTextMobile = styled(Typography)`\n margin-top: 4px;\n font-size: 0.875rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n @media (max-width: 767px) {\n font-size: 0.75rem;\n }\n`;\n","import React, { useState } from 'react';\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport { PageHeader, buildDateRangeFilter, buildMarketFilter, type FilterConfig } from '../PageHeader';\nimport { DataTable, type ColumnDef } from '../DataTable';\nimport { Pagination } from '../Pagination';\nimport { usePaginatedItems } from '../../utils/dataUtils';\nimport { formatDateRangeLabel } from '../../utils/dateFormat';\nimport { useMarketOptions } from '../../utils/marketOptions';\nimport type {\n SignupDataPoint,\n SignupDetail,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n SignupViewOption,\n} from '../../types.d';\nimport { FullViewChartSkeleton } from '../LoadingSkeletons';\nimport {\n PageContainer,\n MetricChartCardSection,\n MetricSection,\n MetricValue,\n MetricTrend,\n ChartSection,\n ChartTitle,\n TableSection,\n EmptyStateText,\n MobileCardName,\n MobileCardSubtext,\n MobileCardDetail,\n MobileCardStatus,\n} from '../FullViewComponents.styled';\nimport {\n MobileSignupsContainer,\n DesktopTableContainer,\n MobileSignupCard,\n SignupTrendChartContainer,\n ComparisonTextMobile,\n} from './SignupsFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nconst SERIES_COLORS = { total: '#3B82F6', members: '#7B92A8', retail: '#A3B5C7', brandAffiliates: '#5F7388' };\n\nfunction toNumeric(value: unknown): number {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : 0;\n }\n\n if (typeof value === 'string') {\n const parsed = Number(value.replace(/,/g, ''));\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n return 0;\n}\n\nexport interface SignupsFullViewProps {\n readonly signupData: SignupDataPoint[];\n readonly signups: SignupDetail[];\n readonly dateRange: DateRangeOption;\n readonly market: MarketOption;\n readonly signupView: SignupViewOption;\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n readonly isLoading?: boolean;\n readonly onBack?: () => void;\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onSignupViewChange?: (view: SignupViewOption) => void;\n}\n\nexport const SignupsFullView: React.FC<SignupsFullViewProps> = ({\n signupData,\n signups,\n dateRange,\n market,\n signupView,\n markets,\n isLoading = false,\n onBack,\n onDateRangeChange,\n onMarketChange,\n onSignupViewChange,\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n const itemsPerPage = 10;\n const isMobileView = useIsMobileViewport();\n\n const handleBack = React.useCallback(() => onBack?.(), [onBack]);\n\n const marketOptions = useMarketOptions(markets);\n\n const normalizedSignupData = React.useMemo(\n () =>\n signupData.map((point) => {\n const rawPoint = point as unknown as Record<string, unknown>;\n const members = toNumeric(rawPoint.members);\n const retail = toNumeric(rawPoint.retail);\n const brandAffiliates = toNumeric(\n rawPoint.brandAffiliates ??\n rawPoint.brandAffiliate ??\n rawPoint.brand_affiliates ??\n rawPoint.brand_affiliate,\n );\n const total = toNumeric(rawPoint.total ?? rawPoint.all ?? rawPoint.signupTotal ?? rawPoint.value);\n\n return {\n ...point,\n total: total > 0 ? total : members + retail + brandAffiliates,\n members,\n retail,\n brandAffiliates,\n };\n }),\n [signupData],\n );\n\n const totalSignups = React.useMemo(() => {\n if (normalizedSignupData.length === 0) return 0;\n return normalizedSignupData[normalizedSignupData.length - 1].total;\n }, [normalizedSignupData]);\n\n const trend = React.useMemo((): { direction: 'up' | 'down' | 'neutral'; value: string } => {\n if (normalizedSignupData.length < 2)\n return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const first = normalizedSignupData[0].total;\n const last = normalizedSignupData[normalizedSignupData.length - 1].total;\n if (first <= 0) return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const change = ((last - first) / first) * 100;\n let direction: 'up' | 'down' | 'neutral' = 'neutral';\n if (change > 0) direction = 'up';\n else if (change < 0) direction = 'down';\n return { direction, value: `${change >= 0 ? '+' : ''}${change.toFixed(1)}%` };\n }, [normalizedSignupData]);\n\n const hasSignupTrendData = normalizedSignupData.length > 0;\n\n const filters: FilterConfig[] = React.useMemo(\n () => [\n buildDateRangeFilter(dateRange, Keys),\n buildMarketFilter(market, marketOptions, Keys),\n {\n key: 'signupView',\n label: getTranslation(Keys.filter.signupView.label),\n value: signupView,\n options: [\n { value: 'all', label: getTranslation(Keys.filter.signupView.all) },\n { value: 'members', label: getTranslation(Keys.filter.signupView.members) },\n { value: 'retail', label: getTranslation(Keys.filter.signupView.retail) },\n { value: 'brandAffiliates', label: getTranslation(Keys.filter.signupView.brandAffiliates) },\n ],\n },\n ],\n [dateRange, market, marketOptions, signupView],\n );\n\n const handleFilterChange = React.useCallback(\n (key: string, value: string) => {\n if (key === 'dateRange') onDateRangeChange?.(value as DateRangeOption);\n else if (key === 'market') onMarketChange?.(value);\n else if (key === 'signupView') {\n onSignupViewChange?.(value as SignupViewOption);\n setCurrentPage(1);\n }\n },\n [onDateRangeChange, onMarketChange, onSignupViewChange],\n );\n\n const { totalPages, pageItems: paginatedSignups } = usePaginatedItems(signups, currentPage, itemsPerPage);\n\n const columns: ColumnDef<SignupDetail>[] = React.useMemo(\n () => [\n { key: 'id', label: getTranslation(Keys.fullView.signups.columns.id), sortable: true },\n { key: 'name', label: getTranslation(Keys.fullView.signups.columns.name), sortable: true },\n { key: 'date', label: getTranslation(Keys.fullView.signups.columns.date), sortable: true },\n { key: 'type', label: getTranslation(Keys.fullView.signups.columns.type), sortable: true },\n { key: 'email', label: getTranslation(Keys.fullView.signups.columns.email), sortable: true },\n { key: 'status', label: getTranslation(Keys.fullView.signups.columns.status), sortable: true },\n ],\n [],\n );\n\n if (isLoading) {\n return (\n <PageContainer data-testid=\"signups-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.signups.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <FullViewChartSkeleton />\n </PageContainer>\n );\n }\n\n return (\n <PageContainer data-testid=\"signups-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.signups.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n <MetricChartCardSection data-testid=\"signups-fullview-metric-chart\">\n <MetricSection>\n <MetricValue data-testid=\"signups-total\">{totalSignups.toLocaleString()}</MetricValue>\n <MetricTrend direction={trend.direction}>\n {trend.direction === 'up' && <TrendingUpIcon />}\n {trend.direction === 'down' && <TrendingDownIcon />}\n {trend.value}\n </MetricTrend>\n <ComparisonTextMobile>\n {getTranslation(Keys.widget.signups.totalSignupsInPeriod)}\n </ComparisonTextMobile>\n </MetricSection>\n\n <ChartSection>\n {hasSignupTrendData ? (\n <SignupTrendChartContainer data-testid=\"signups-fullview-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\" minHeight={240}>\n <LineChart data={normalizedSignupData}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"date\" />\n <YAxis />\n <Tooltip />\n <Legend />\n {signupView === 'all' && (\n <>\n <Line\n type=\"monotone\"\n dataKey=\"total\"\n stroke={SERIES_COLORS.total}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.total)}\n dot={{ r: 2 }}\n connectNulls\n />\n <Line\n type=\"monotone\"\n dataKey=\"members\"\n stroke={SERIES_COLORS.members}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.members)}\n dot={{ r: 2 }}\n connectNulls\n />\n <Line\n type=\"monotone\"\n dataKey=\"retail\"\n stroke={SERIES_COLORS.retail}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.retail)}\n dot={{ r: 2 }}\n connectNulls\n />\n <Line\n type=\"monotone\"\n dataKey=\"brandAffiliates\"\n stroke={SERIES_COLORS.brandAffiliates}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.brandAffiliates)}\n dot={{ r: 2 }}\n connectNulls\n />\n </>\n )}\n {signupView === 'members' && (\n <Line\n type=\"monotone\"\n dataKey=\"members\"\n stroke={SERIES_COLORS.members}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.members)}\n dot={{ r: 2 }}\n connectNulls\n />\n )}\n {signupView === 'retail' && (\n <Line\n type=\"monotone\"\n dataKey=\"retail\"\n stroke={SERIES_COLORS.retail}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.retail)}\n dot={{ r: 2 }}\n connectNulls\n />\n )}\n {signupView === 'brandAffiliates' && (\n <Line\n type=\"monotone\"\n dataKey=\"brandAffiliates\"\n stroke={SERIES_COLORS.brandAffiliates}\n strokeWidth={2}\n name={getTranslation(Keys.widget.signups.brandAffiliates)}\n dot={{ r: 2 }}\n connectNulls\n />\n )}\n </LineChart>\n </ResponsiveContainer>\n </SignupTrendChartContainer>\n ) : (\n <EmptyStateText data-testid=\"signups-fullview-chart-empty\">\n {getTranslation(Keys.widget.signups.noTrendData)}\n </EmptyStateText>\n )}\n </ChartSection>\n </MetricChartCardSection>\n\n <TableSection data-testid=\"signups-fullview-table-section\">\n <ChartTitle data-testid=\"signups-fullview-table-title\">{`${getTranslation(Keys.fullView.signups.detailsTitle)} (${signups.length})`}</ChartTitle>\n {!isMobileView ? (\n <DesktopTableContainer data-testid=\"signups-fullview-desktop-table\">\n <DataTable\n columns={columns}\n data={paginatedSignups}\n getRowKey={(row: SignupDetail) => row.id}\n />\n </DesktopTableContainer>\n ) : (\n <MobileSignupsContainer data-testid=\"signups-fullview-mobile-cards\">\n {paginatedSignups.map((signup) => (\n <MobileSignupCard key={signup.id}>\n <MobileCardName>{signup.name}</MobileCardName>\n <MobileCardSubtext>\n {signup.date} - {signup.type}\n </MobileCardSubtext>\n <MobileCardDetail>{signup.email}</MobileCardDetail>\n <MobileCardStatus status={signup.status}>{signup.status}</MobileCardStatus>\n </MobileSignupCard>\n ))}\n </MobileSignupsContainer>\n )}\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n itemsPerPage={itemsPerPage}\n totalItems={signups.length}\n />\n )}\n </TableSection>\n </PageContainer>\n );\n};\n","import { styled } from '@mui/material/styles';\nimport { Box, Typography } from '@mui/material';\nimport { ColorUtils } from '@nuskin/foundation-theme';\nimport { ChartContainer } from '../FullViewComponents.styled';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const MobileSignupsContainer = styled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`;\n\nexport const DesktopTableContainer = styled(Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`;\n\nexport const MobileSignupCard = styled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => theme.palette.divider};\n border-radius: 8px;\n }\n`;\n\nexport const SignupTrendChartContainer = styled(ChartContainer)`\n min-height: 320px;\n\n @media (max-width: 767px) {\n min-height: 260px;\n height: 260px;\n }\n`;\n\nexport const ComparisonTextMobile = styled(Typography)`\n margin-top: 4px;\n font-size: 0.875rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n","import React, { useState } from 'react';\nimport { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts';\nimport { PageHeader, buildDateRangeFilter, buildMarketFilter, type FilterConfig } from '../PageHeader';\nimport { DataTable, type ColumnDef } from '../DataTable';\nimport { Pagination } from '../Pagination';\nimport { usePaginatedItems, formatMoney } from '../../utils/dataUtils';\nimport { formatDateRangeLabel } from '../../utils/dateFormat';\nimport type {\n CategoryRevenue,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n CategorySortOption,\n} from '../../types.d';\nimport { FullViewChartSkeleton } from '../LoadingSkeletons';\nimport { PageContainer, TableSection, ChartTitle, EmptyStateText } from '../FullViewComponents.styled';\nimport { useMarketOptions } from '../../utils/marketOptions';\nimport {\n SummaryItemRow,\n SummaryItemInfo,\n SummaryItemName,\n SummaryItemSubtext,\n SummaryItemPercentage,\n TopSection,\n ChartWrapper,\n DonutCenterOverlay,\n DonutCenterLabel,\n DonutCenterValue,\n DonutCenterTrend,\n SummaryContainer,\n SummaryItem,\n ColorDot,\n SummaryInfo,\n SummaryName,\n SummaryValue,\n SummaryPercentage,\n DesktopTableContainer,\n MobileCategoriesContainer,\n MobileCategoryCard,\n} from './CategoriesFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { parseTrendPercent, calculateWeightedRevenueTrend } from '../../utils/trendUtils';\n\nexport interface CategoriesFullViewProps {\n readonly categories: CategoryRevenue[];\n readonly dateRange: DateRangeOption;\n readonly market: MarketOption;\n readonly categorySort: CategorySortOption;\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n readonly isLoading?: boolean;\n readonly onBack?: () => void;\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onCategorySortChange?: (sort: CategorySortOption) => void;\n}\n\nexport const CategoriesFullView: React.FC<CategoriesFullViewProps> = ({\n categories,\n dateRange,\n market,\n categorySort,\n markets,\n isLoading = false,\n onBack,\n onDateRangeChange,\n onMarketChange,\n onCategorySortChange,\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n const itemsPerPage = 10;\n const isMobileView = useIsMobileViewport();\n\n const handleBack = React.useCallback(() => onBack?.(), [onBack]);\n\n const marketOptions = useMarketOptions(markets);\n\n const filters: FilterConfig[] = React.useMemo(\n () => [\n buildDateRangeFilter(dateRange, Keys),\n buildMarketFilter(market, marketOptions, Keys),\n {\n key: 'sort',\n label: getTranslation(Keys.filter.productSort.label),\n value: categorySort,\n options: [\n { value: 'revenue', label: getTranslation(Keys.filter.categorySort.byRevenue) },\n { value: 'trend', label: getTranslation(Keys.filter.categorySort.byTrend) },\n ],\n },\n ],\n [categorySort, dateRange, market, marketOptions],\n );\n\n const handleFilterChange = React.useCallback(\n (key: string, value: string) => {\n if (key === 'dateRange') onDateRangeChange?.(value as DateRangeOption);\n else if (key === 'market') onMarketChange?.(value);\n else if (key === 'sort') {\n onCategorySortChange?.(value as CategorySortOption);\n setCurrentPage(1);\n }\n },\n [onCategorySortChange, onDateRangeChange, onMarketChange],\n );\n\n const sortedCategories = React.useMemo(\n () =>\n [...categories].sort((a, b) => {\n if (categorySort === 'revenue') return b.revenue - a.revenue;\n return (\n (parseTrendPercent(b.trend?.revenue) ?? -Infinity) -\n (parseTrendPercent(a.trend?.revenue) ?? -Infinity)\n );\n }),\n [categories, categorySort],\n );\n\n const { totalRevenue, totalRevenueTrendDirection, totalRevenueTrend } = React.useMemo(() => {\n const nextTotalRevenue = sortedCategories.reduce((sum, category) => sum + category.revenue, 0);\n\n const { direction, formatted } = calculateWeightedRevenueTrend(\n sortedCategories,\n (category) => category.revenue,\n (category) => category.trend?.revenue,\n );\n\n return {\n totalRevenue: nextTotalRevenue,\n totalRevenueTrendDirection: direction,\n totalRevenueTrend: formatted,\n };\n }, [sortedCategories]);\n\n const topCategories = React.useMemo(() => sortedCategories.slice(0, 5), [sortedCategories]);\n\n const { totalPages, pageItems: paginatedCategories } = usePaginatedItems(\n sortedCategories,\n currentPage,\n itemsPerPage,\n );\n\n const columns: ColumnDef<CategoryRevenue>[] = React.useMemo(\n () => [\n {\n key: 'name',\n label: getTranslation(Keys.fullView.categories.columns.category),\n sortable: true,\n render: (_: unknown, row: CategoryRevenue) => (\n <SummaryItemRow>\n <ColorDot dotColor={row.color} />\n <span>{row.name}</span>\n </SummaryItemRow>\n ),\n },\n {\n key: 'revenue',\n label: getTranslation(Keys.fullView.categories.columns.revenue),\n sortable: true,\n render: (value: unknown, row: CategoryRevenue) => formatMoney(Number(value), row.currencyCode),\n },\n {\n key: 'percentage',\n label: getTranslation(Keys.fullView.categories.columns.percentOfTotal),\n sortable: true,\n render: (value: unknown) => `${Number(value)}%`,\n },\n {\n key: 'trend',\n label: getTranslation(Keys.fullView.categories.columns.trend),\n render: (_: unknown, row: CategoryRevenue) =>\n row.trend?.revenue ?? getTranslation(Keys.defaults.noValue),\n },\n ],\n [],\n );\n\n const currencyCode = sortedCategories[0]?.currencyCode;\n\n if (isLoading) {\n return (\n <PageContainer data-testid=\"categories-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topCategories.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <FullViewChartSkeleton />\n </PageContainer>\n );\n }\n\n if (categories.length === 0) {\n return (\n <PageContainer data-testid=\"categories-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topCategories.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <EmptyStateText data-testid=\"categories-fullview-empty\">\n {getTranslation(Keys.fullView.categories.noCategoryData)}\n </EmptyStateText>\n </PageContainer>\n );\n }\n\n return (\n <PageContainer data-testid=\"categories-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topCategories.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n <TopSection data-testid=\"categories-fullview-top-section\">\n <ChartWrapper data-testid=\"categories-fullview-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={sortedCategories}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"50%\"\n outerRadius=\"85%\"\n dataKey=\"revenue\"\n nameKey=\"name\"\n paddingAngle={2}\n >\n {sortedCategories.map((entry) => (\n <Cell key={`cell-${entry.id}`} fill={entry.color} />\n ))}\n </Pie>\n <Tooltip formatter={(value: number) => formatMoney(value, currencyCode)} />\n </PieChart>\n </ResponsiveContainer>\n <DonutCenterOverlay data-testid=\"categories-fullview-donut-center\">\n <DonutCenterLabel>{getTranslation(Keys.stats.revenue)}</DonutCenterLabel>\n <DonutCenterValue>{formatMoney(totalRevenue, currencyCode)}</DonutCenterValue>\n <DonutCenterTrend direction={totalRevenueTrendDirection}>{totalRevenueTrend}</DonutCenterTrend>\n </DonutCenterOverlay>\n </ChartWrapper>\n\n <SummaryContainer data-testid=\"categories-fullview-summary\">\n {topCategories.map((category) => (\n <SummaryItem key={category.id}>\n <ColorDot dotColor={category.color} />\n <SummaryInfo>\n <SummaryName>{category.name}</SummaryName>\n <SummaryValue>{formatMoney(category.revenue, category.currencyCode)}</SummaryValue>\n </SummaryInfo>\n <SummaryPercentage>{category.percentage}%</SummaryPercentage>\n </SummaryItem>\n ))}\n </SummaryContainer>\n </TopSection>\n\n <TableSection data-testid=\"categories-fullview-table-section\">\n <ChartTitle data-testid=\"categories-fullview-table-title\">\n {getTranslation(Keys.fullView.categories.allCategoriesTitle)} ({sortedCategories.length})\n </ChartTitle>\n {!isMobileView ? (\n <DesktopTableContainer>\n <DataTable\n columns={columns}\n data={paginatedCategories}\n sortable\n getRowKey={(row: CategoryRevenue) => row.id}\n />\n </DesktopTableContainer>\n ) : (\n <MobileCategoriesContainer>\n {paginatedCategories.map((category) => (\n <MobileCategoryCard key={category.id}>\n <ColorDot dotColor={category.color} />\n <SummaryItemInfo>\n <SummaryItemName>{category.name}</SummaryItemName>\n <SummaryItemSubtext>\n {formatMoney(category.revenue, category.currencyCode)}\n </SummaryItemSubtext>\n </SummaryItemInfo>\n <SummaryItemPercentage>{category.percentage}%</SummaryItemPercentage>\n </MobileCategoryCard>\n ))}\n </MobileCategoriesContainer>\n )}\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n itemsPerPage={itemsPerPage}\n totalItems={sortedCategories.length}\n />\n )}\n </TableSection>\n </PageContainer>\n );\n};\n","import { styled, ColorUtils } from '@nuskin/foundation-theme';\nimport { styled as muiStyled } from '@mui/material/styles';\nimport { Box, Typography } from '@mui/material';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const SummaryItemRow = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const SummaryItemInfo = styled('div')`\n flex: 1;\n`;\n\nexport const SummaryItemName = styled('span')`\n font-weight: 600;\n`;\n\nexport const SummaryItemSubtext = styled('span')`\n font-size: 0.875rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const SummaryItemPercentage = styled('span')`\n font-weight: 600;\n`;\n\nexport const TopSection = muiStyled(Box)`\n display: flex;\n gap: 24px;\n padding: 24px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n box-shadow: ${({ theme }) => theme.shadows[1]};\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n }\n`;\n\nexport const ChartWrapper = muiStyled(Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n\n @media (max-width: 767px) {\n width: 100%;\n height: 220px;\n }\n`;\n\nexport const DonutCenterOverlay = muiStyled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n pointer-events: none;\n z-index: 1;\n width: 120px;\n`;\n\nexport const DonutCenterLabel = muiStyled(Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const DonutCenterValue = muiStyled(Typography)`\n margin-top: 2px;\n font-size: 1.25rem;\n line-height: 1.2;\n font-weight: 700;\n color: ${({ theme }) => theme.palette.text.primary};\n`;\n\nexport const DonutCenterTrend = muiStyled(Typography)<{ direction: 'up' | 'down' | 'neutral' }>`\n margin-top: 2px;\n font-size: 0.875rem;\n line-height: 1.2;\n font-weight: 600;\n color: ${({ direction, theme }) => {\n if (direction === 'up') return theme.palette.success.main;\n if (direction === 'down') return theme.palette.error.main;\n return theme.palette.text.secondary;\n }};\n`;\n\nexport const SummaryContainer = muiStyled(Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1;\n`;\n\nexport const SummaryItem = muiStyled(Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n`;\n\nexport const ColorDot = muiStyled(Box)<{ dotColor: string }>`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({ dotColor }) => dotColor};\n flex-shrink: 0;\n`;\n\nexport const SummaryInfo = muiStyled(Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`;\n\nexport const SummaryName = muiStyled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`;\n\nexport const SummaryValue = muiStyled(Typography)`\n font-size: 0.75rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const SummaryPercentage = muiStyled(Typography)`\n font-size: 1rem;\n font-weight: 600;\n flex-shrink: 0;\n`;\n\nexport const DesktopTableContainer = muiStyled(Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`;\n\nexport const MobileCategoriesContainer = muiStyled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`;\n\nexport const MobileCategoryCard = muiStyled(Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => theme.palette.divider};\n border-radius: 8px;\n`;\n","import React from 'react';\nimport {\n resolveTranslation,\n setTranslationResolver,\n type TranslateFn,\n type TranslationEntry,\n} from './TranslationKeys/translationResolver';\n\nexport function useTranslationResolver(translate?: TranslateFn): void {\n setTranslationResolver(translate);\n\n React.useEffect(() => {\n setTranslationResolver(translate);\n return () => {\n setTranslationResolver(undefined);\n };\n }, [translate]);\n}\n\nexport interface TranslationProviderProps {\n readonly translate?: TranslateFn;\n readonly children?: React.ReactNode;\n}\n\nexport const TranslationProvider: React.FC<TranslationProviderProps> = ({ translate, children }) => {\n useTranslationResolver(translate);\n return children ?? null;\n};\n\nexport function useTranslation(): (entry: TranslationEntry) => string {\n return React.useCallback((entry: TranslationEntry) => resolveTranslation(entry), []);\n}\n\nexport type { TranslateFn, TranslationEntry };\n","import { styled } from '@nuskin/foundation-theme';\n\nexport const PoDashboardContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n box-sizing: border-box;\n\n @media (min-width: 768px) {\n gap: 24px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n }\n`;\n\nexport const TopChartsRow = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n`;\n\nexport const StatsCardStack = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n gap: 24px;\n justify-content: flex-start;\n }\n`;\n\nexport const BottomChartsRow = styled('div')`\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n\n @media (min-width: 1080px) {\n grid-template-columns: 1fr 1fr;\n gap: 24px;\n }\n`;\n\nexport const ErrorContainer = styled('div')`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;\n","import React from 'react';\nimport { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts';\nimport { WidgetMenu } from '../WidgetMenu';\nimport {\n CategoriesContainer,\n ChartHeader,\n ChartTitle,\n SortDropdown,\n ChartAndLegendContainer,\n ChartWrapper,\n LegendContainer,\n LegendItem,\n LegendColor,\n LegendInfo,\n LegendName,\n LegendValue,\n LegendPercentage,\n LegendTrend,\n DonutCenterOverlay,\n DonutCenterLabel,\n DonutCenterValue,\n DonutCenterTrend,\n EmptyState,\n EmptyStateText,\n HeaderActionsContainer,\n} from '../TopCategories/TopCategoriesPieChart.styled';\nimport type { TopPerformingOffer, OfferSortOption } from '../../types.d';\nimport { CategoriesPieChartSkeleton } from '../LoadingSkeletons';\nimport {\n getTranslation,\n ProductOfferDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ProductOfferDashboardTranslationKeys';\nimport { getTrendIcon, resolveTrendDirection, calculateWeightedRevenueTrend } from '../../utils/trendUtils';\nimport { formatMoney } from '../../utils/dataUtils';\n\nexport interface TopPerformingOffersPieChartProps {\n readonly offers: TopPerformingOffer[];\n readonly offerSort: OfferSortOption;\n readonly isLoading?: boolean;\n readonly title?: string;\n readonly onSortChange?: (sort: OfferSortOption) => void;\n readonly onTitleClick?: () => void;\n}\n\nconst TopPerformingOffersPieChartComponent: React.FC<TopPerformingOffersPieChartProps> = ({\n offers,\n offerSort,\n isLoading = false,\n title,\n onSortChange,\n onTitleClick,\n}) => {\n const handleSortChange = React.useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newSort = event.target.value as OfferSortOption;\n onSortChange?.(newSort);\n },\n [onSortChange],\n );\n\n const { sortedOffers, totalRevenue, trendDirection, formattedTrend } = React.useMemo(() => {\n const nextSortedOffers = [...offers].sort((a, b) => {\n if (offerSort === 'revenue') return b.revenue - a.revenue;\n return b.percentage - a.percentage;\n });\n\n const nextTotalRevenue = nextSortedOffers.reduce((sum, offer) => sum + offer.revenue, 0);\n\n const { direction: nextTrendDirection, formatted: nextFormattedTrend } = calculateWeightedRevenueTrend(\n nextSortedOffers,\n (offer) => offer.revenue,\n (offer) => offer.trend?.revenue,\n );\n\n return {\n sortedOffers: nextSortedOffers,\n totalRevenue: nextTotalRevenue,\n trendDirection: nextTrendDirection,\n formattedTrend: nextFormattedTrend,\n };\n }, [offers, offerSort]);\n\n const currencyCode = sortedOffers[0]?.currencyCode;\n\n if (isLoading && offers.length === 0) {\n return (\n <CategoriesContainer data-testid=\"widget-top-offers\">\n <CategoriesPieChartSkeleton />\n </CategoriesContainer>\n );\n }\n\n if (offers.length === 0) {\n return (\n <CategoriesContainer data-testid=\"widget-top-offers\">\n <ChartHeader>\n <ChartTitle>{title ?? getTranslation(Keys.widget.topPerformingOffers.title)}</ChartTitle>\n </ChartHeader>\n <EmptyState data-testid=\"top-offers-empty-state\">\n <EmptyStateText>{getTranslation(Keys.widget.topPerformingOffers.emptyState)}</EmptyStateText>\n </EmptyState>\n </CategoriesContainer>\n );\n }\n\n return (\n <CategoriesContainer\n as=\"section\"\n data-testid=\"widget-top-offers\"\n aria-label={getTranslation(Keys.ariaLabel.topOffers)}\n >\n <ChartHeader>\n <ChartTitle\n as=\"button\"\n onClick={onTitleClick}\n aria-label={getTranslation(Keys.ariaLabel.topOffers)}\n data-testid=\"widget-title-top-offers\"\n >\n {title ?? getTranslation(Keys.widget.topPerformingOffers.title)}\n </ChartTitle>\n <HeaderActionsContainer>\n <SortDropdown\n id=\"offer-sort\"\n data-testid=\"offer-sort-dropdown\"\n value={offerSort}\n onChange={handleSortChange}\n disabled={isLoading}\n aria-label={getTranslation(Keys.ariaLabel.topOffers)}\n >\n <option value=\"revenue\">{getTranslation(Keys.filter.offerSort.byRevenue)}</option>\n <option value=\"units\">{getTranslation(Keys.filter.offerSort.byUnits)}</option>\n </SortDropdown>\n <WidgetMenu widgetId=\"top-offers\" onFullView={onTitleClick} />\n </HeaderActionsContainer>\n </ChartHeader>\n\n <ChartAndLegendContainer>\n <ChartWrapper data-testid=\"top-offers-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={sortedOffers}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"55%\"\n outerRadius=\"85%\"\n dataKey=\"revenue\"\n nameKey=\"name\"\n paddingAngle={2}\n >\n {sortedOffers.map((entry) => (\n <Cell key={`cell-${entry.id}`} fill={entry.color} />\n ))}\n </Pie>\n <Tooltip formatter={(value: number) => formatMoney(value, currencyCode)} />\n </PieChart>\n </ResponsiveContainer>\n <DonutCenterOverlay data-testid=\"top-offers-donut-center\">\n <DonutCenterLabel>\n {getTranslation(Keys.widget.topPerformingOffers.totalRevenue)}\n </DonutCenterLabel>\n <DonutCenterValue>{formatMoney(totalRevenue, currencyCode)}</DonutCenterValue>\n <DonutCenterTrend direction={trendDirection}>{formattedTrend}</DonutCenterTrend>\n </DonutCenterOverlay>\n </ChartWrapper>\n\n <LegendContainer data-testid=\"top-offers-legend-container\">\n {sortedOffers.map((offer, index) => {\n const legendTrendDirection = resolveTrendDirection(offer.trend?.revenue);\n return (\n <LegendItem key={offer.id} data-testid={`offer-legend-${index}`}>\n <LegendColor color={offer.color} />\n <LegendInfo>\n <LegendName>{offer.name}</LegendName>\n <LegendValue>{formatMoney(offer.revenue, offer.currencyCode)}</LegendValue>\n </LegendInfo>\n <LegendPercentage>{offer.percentage}%</LegendPercentage>\n {offer.trend?.revenue ? (\n <LegendTrend\n direction={legendTrendDirection}\n data-testid={`offer-legend-trend-${index}`}\n aria-label={offer.trend.revenue}\n >\n {getTrendIcon(legendTrendDirection)}\n </LegendTrend>\n ) : null}\n </LegendItem>\n );\n })}\n </LegendContainer>\n </ChartAndLegendContainer>\n </CategoriesContainer>\n );\n};\n\nexport const TopPerformingOffersPieChart = React.memo(TopPerformingOffersPieChartComponent);\nTopPerformingOffersPieChart.displayName = 'TopPerformingOffersPieChart';\n","import { resolveTranslation } from './translationResolver';\n\ntype TranslationEntry = { readonly key: string; readonly fallback: string };\n\nexport const ProductOfferDashboardTranslationKeys = {\n title: { key: 'productOfferDashboard.title', fallback: 'Performance Overview' },\n error: { key: 'productOfferDashboard.error', fallback: 'Failed to load dashboard data. Please try again.' },\n\n stats: {\n revenue: { key: 'productOfferDashboard.stats.revenue', fallback: 'Total Revenue' },\n offersPurchased: { key: 'productOfferDashboard.stats.offersPurchased', fallback: 'Offers Purchased' },\n conversionRate: { key: 'productOfferDashboard.stats.conversionRate', fallback: 'Conversion Rate' },\n trendUp: { key: 'productOfferDashboard.stats.trendUp', fallback: 'Trending up' },\n trendDown: { key: 'productOfferDashboard.stats.trendDown', fallback: 'Trending down' },\n trendNeutral: { key: 'productOfferDashboard.stats.trendNeutral', fallback: 'No change' },\n comparedTo: { key: 'productOfferDashboard.stats.comparedTo', fallback: 'compared to this time last month' },\n },\n\n filter: {\n dateRange: {\n label: { key: 'productOfferDashboard.filter.dateRange.label', fallback: 'Date Range' },\n last7days: { key: 'productOfferDashboard.filter.dateRange.last7days', fallback: 'Last 7 Days' },\n last30days: { key: 'productOfferDashboard.filter.dateRange.last30days', fallback: 'Last 30 Days' },\n last90days: { key: 'productOfferDashboard.filter.dateRange.last90days', fallback: 'Last 90 Days' },\n thisMonth: { key: 'productOfferDashboard.filter.dateRange.thisMonth', fallback: 'This Month' },\n },\n market: {\n label: { key: 'productOfferDashboard.filter.market.label', fallback: 'Market' },\n all: { key: 'productOfferDashboard.filter.market.all', fallback: 'All Markets' },\n },\n offerSort: {\n byRevenue: { key: 'productOfferDashboard.filter.offerSort.byRevenue', fallback: 'Revenue' },\n byUnits: { key: 'productOfferDashboard.filter.offerSort.byUnits', fallback: 'Units' },\n },\n productSort: {\n byUnits: { key: 'productOfferDashboard.filter.productSort.byUnits', fallback: 'Units' },\n byRevenue: { key: 'productOfferDashboard.filter.productSort.byRevenue', fallback: 'Revenue' },\n byVolume: { key: 'productOfferDashboard.filter.productSort.byVolume', fallback: 'Volume' },\n },\n conversionFilter: {\n overall: { key: 'productOfferDashboard.filter.conversionFilter.overall', fallback: 'Overall' },\n },\n },\n\n widget: {\n topProducts: {\n title: { key: 'productOfferDashboard.widget.topProducts.title', fallback: 'Top Selling Products' },\n emptyState: {\n key: 'productOfferDashboard.widget.topProducts.emptyState',\n fallback: 'No products data available',\n },\n },\n conversionRate: {\n title: { key: 'productOfferDashboard.widget.conversionRate.title', fallback: 'Conversion Rate' },\n subtitle: { key: 'productOfferDashboard.widget.conversionRate.subtitle', fallback: 'Orders ÷ Site visits' },\n },\n topPerformingOffers: {\n title: { key: 'productOfferDashboard.widget.topPerformingOffers.title', fallback: 'Top Performing Offers' },\n totalRevenue: {\n key: 'productOfferDashboard.widget.topPerformingOffers.totalRevenue',\n fallback: 'Total revenue',\n },\n emptyState: {\n key: 'productOfferDashboard.widget.topPerformingOffers.emptyState',\n fallback: 'No offers data available',\n },\n },\n menu: {\n fullView: { key: 'productOfferDashboard.widget.menu.fullView', fallback: 'Full View' },\n },\n },\n\n navigation: {\n back: { key: 'productOfferDashboard.navigation.back', fallback: 'Back to Dashboard' },\n },\n\n ariaLabel: {\n dashboard: {\n key: 'productOfferDashboard.ariaLabel.dashboard',\n fallback: 'Product Offer Performance Dashboard',\n },\n statsCard: { key: 'productOfferDashboard.ariaLabel.statsCard', fallback: 'Performance metric' },\n conversionChart: { key: 'productOfferDashboard.ariaLabel.conversionChart', fallback: 'Conversion rate chart' },\n topProducts: { key: 'productOfferDashboard.ariaLabel.topProducts', fallback: 'Top selling products' },\n topOffers: { key: 'productOfferDashboard.ariaLabel.topOffers', fallback: 'Top performing offers chart' },\n widgetMenu: { key: 'productOfferDashboard.ariaLabel.widgetMenu', fallback: 'Widget options menu' },\n filterDateRange: { key: 'productOfferDashboard.ariaLabel.filterDateRange', fallback: 'Filter by date range' },\n filterMarket: { key: 'productOfferDashboard.ariaLabel.filterMarket', fallback: 'Filter by market' },\n backButton: { key: 'productOfferDashboard.ariaLabel.backButton', fallback: 'Back to dashboard overview' },\n },\n\n fullView: {\n topOffers: {\n title: { key: 'productOfferDashboard.fullView.topOffers.title', fallback: 'Top Performing Offers' },\n columnName: { key: 'productOfferDashboard.fullView.topOffers.columnName', fallback: 'Offer Name' },\n columnRevenue: { key: 'productOfferDashboard.fullView.topOffers.columnRevenue', fallback: 'Revenue' },\n columnPercentage: { key: 'productOfferDashboard.fullView.topOffers.columnPercentage', fallback: 'Share' },\n columnTrend: { key: 'productOfferDashboard.fullView.topOffers.columnTrend', fallback: 'Trend' },\n },\n },\n\n defaults: {\n trendZero: { key: 'productOfferDashboard.defaults.trendZero', fallback: '+0%' },\n noData: { key: 'productOfferDashboard.defaults.noData', fallback: '--' },\n },\n} as const;\n\nexport function getTranslation(entry: TranslationEntry): string {\n return resolveTranslation(entry);\n}\n","import React from 'react';\nimport {\n PoDashboardContainer,\n TopChartsRow,\n StatsCardStack,\n BottomChartsRow,\n ErrorContainer,\n} from './ProductOfferDashboard.styled';\nimport { DashboardHeader } from './shared/DashboardHeader';\nimport { StatsCard } from './shared/StatsCard';\nimport { TopSellingProductsList } from './shared/TopProducts/TopSellingProductsList';\nimport { ConversionRateChart } from './shared/ConversionRate/ConversionRateChart';\nimport { TopPerformingOffersPieChart } from './shared/TopPerformingOffers/TopPerformingOffersPieChart';\nimport type { ProductOfferDashboardProps, TopProduct, ConversionDataPoint, TopPerformingOffer } from './types.d';\nimport {\n getTranslation,\n ProductOfferDashboardTranslationKeys as Keys,\n} from './TranslationKeys/ProductOfferDashboardTranslationKeys';\n\nconst EMPTY_TOP_PRODUCTS: TopProduct[] = [];\nconst EMPTY_CONVERSION_DATA: ConversionDataPoint[] = [];\nconst EMPTY_TOP_OFFERS: TopPerformingOffer[] = [];\n\nexport const ProductOfferDashboard: React.FC<ProductOfferDashboardProps> = ({\n stats,\n topProducts,\n conversionData,\n topOffers,\n isLoading = false,\n error,\n dashboardTitle,\n className,\n dateRange = 'last30days',\n market = 'all',\n productSort = 'units',\n conversionFilter = 'all',\n offerSort = 'revenue',\n conversionSummaryRate,\n conversionSummaryChangePct,\n markets,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n onConversionFilterChange,\n onOfferSortChange,\n onProductsTitleClick,\n onConversionTitleClick,\n onOffersTitleClick,\n}) => {\n const resolvedTopProducts = topProducts ?? EMPTY_TOP_PRODUCTS;\n const resolvedConversionData = conversionData ?? EMPTY_CONVERSION_DATA;\n const resolvedTopOffers = topOffers ?? EMPTY_TOP_OFFERS;\n\n const getTrendDirection = (trendValue?: string): 'up' | 'down' | 'neutral' => {\n if (!trendValue) return 'neutral';\n if (trendValue.startsWith('+') && trendValue !== '+0%') return 'up';\n if (trendValue.startsWith('-')) return 'down';\n return 'neutral';\n };\n\n if (error) {\n return (\n <PoDashboardContainer as=\"main\" className={className} aria-label={getTranslation(Keys.ariaLabel.dashboard)}>\n <ErrorContainer data-testid=\"dashboard-error\" role=\"alert\" aria-live=\"assertive\">\n <strong>{getTranslation(Keys.error)}:</strong> {error}\n </ErrorContainer>\n </PoDashboardContainer>\n );\n }\n\n return (\n <PoDashboardContainer\n as=\"main\"\n className={className}\n data-testid=\"product-offer-dashboard\"\n aria-label={getTranslation(Keys.ariaLabel.dashboard)}\n aria-busy={isLoading}\n >\n <DashboardHeader\n shopTitle={dashboardTitle ?? getTranslation(Keys.title)}\n dateRange={dateRange}\n market={market}\n isLoading={isLoading}\n markets={markets}\n stats={\n stats\n ? {\n shopTitle: stats.shopTitle ?? '',\n dateRange: stats.dateRange,\n selectedMarket: stats.selectedMarket,\n metrics: {\n revenue: stats.metrics.revenue,\n volume: '',\n siteVisits: '',\n conversionRate: stats.metrics.conversionRate,\n },\n trend: {},\n }\n : undefined\n }\n onDateRangeChange={onDateRangeChange}\n onMarketChange={onMarketChange}\n />\n\n <TopChartsRow data-testid=\"top-charts-row\">\n <ConversionRateChart\n conversionData={resolvedConversionData}\n conversionFilter={conversionFilter}\n isLoading={isLoading}\n summaryRate={conversionSummaryRate}\n summaryChangePct={conversionSummaryChangePct}\n onFilterChange={onConversionFilterChange}\n onTitleClick={onConversionTitleClick}\n />\n <StatsCardStack data-testid=\"stats-card-stack\">\n <StatsCard\n layout=\"split\"\n title={getTranslation(Keys.stats.revenue)}\n value={stats?.metrics?.revenue ?? '$0'}\n trendDirection={getTrendDirection(stats?.trend?.revenue)}\n trendValue={stats?.trend?.revenue}\n caption={getTranslation(Keys.stats.comparedTo)}\n testId=\"stats-card-revenue\"\n isLoading={isLoading}\n />\n <StatsCard\n layout=\"split\"\n title={getTranslation(Keys.stats.offersPurchased)}\n value={stats?.metrics?.offersPurchased ?? '0'}\n trendDirection={getTrendDirection(stats?.trend?.offersPurchased)}\n trendValue={stats?.trend?.offersPurchased}\n caption={getTranslation(Keys.stats.comparedTo)}\n testId=\"stats-card-offers-purchased\"\n isLoading={isLoading}\n />\n </StatsCardStack>\n </TopChartsRow>\n\n <BottomChartsRow data-testid=\"bottom-charts-row\">\n <TopSellingProductsList\n products={resolvedTopProducts}\n productSort={productSort}\n isLoading={isLoading}\n maxProducts={5}\n onSortChange={onProductSortChange}\n onTitleClick={onProductsTitleClick}\n />\n <TopPerformingOffersPieChart\n offers={resolvedTopOffers}\n offerSort={offerSort}\n isLoading={isLoading}\n onSortChange={onOfferSortChange}\n onTitleClick={onOffersTitleClick}\n />\n </BottomChartsRow>\n </PoDashboardContainer>\n );\n};\n\nexport default ProductOfferDashboard;\n","import React from 'react';\nimport { ProductOfferDashboard } from './ProductOfferDashboard';\nimport { ProductsFullView } from './shared/TopProducts/ProductsFullView';\nimport { ConversionRateFullView } from './shared/ConversionRate/ConversionRateFullView';\nimport { TopPerformingOffersFullView } from './shared/TopPerformingOffers/TopPerformingOffersFullView';\nimport { useTranslationResolver } from './TranslationContext';\nimport type {\n TopProduct,\n ConversionDataPoint,\n TopPerformingOffer,\n OrderHistory,\n DateRangeOption,\n MarketOption,\n ProductSortOption,\n ConversionFilterOption,\n OfferSortOption,\n ProductOfferFullViewWidgetType,\n ProductOfferDashboardView,\n PoDashboardWithNavigationProps,\n ProductOfferDashboardHistoryLocation,\n} from './types.d';\n\ntype ViewMode = 'push' | 'replace';\n\nconst DEFAULT_HISTORY_STATE_KEY = 'productOfferDashboardView';\n\nconst EMPTY_TOP_PRODUCTS: TopProduct[] = [];\nconst EMPTY_CONVERSION_DATA: ConversionDataPoint[] = [];\nconst EMPTY_TOP_OFFERS: TopPerformingOffer[] = [];\nconst EMPTY_ORDERS: OrderHistory[] = [];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isProductOfferDashboardView(value: unknown): value is ProductOfferDashboardView {\n return value === 'dashboard' || value === 'products' || value === 'conversion-rate' || value === 'top-offers';\n}\n\nfunction readViewFromState(state: unknown, stateKey: string): ProductOfferDashboardView {\n if (!isRecord(state)) {\n return 'dashboard';\n }\n\n const view = state[stateKey];\n return isProductOfferDashboardView(view) ? view : 'dashboard';\n}\n\nfunction buildStateWithView(\n state: unknown,\n stateKey: string,\n view: ProductOfferDashboardView,\n): Record<string, unknown> {\n const currentState = isRecord(state) ? state : {};\n\n return {\n ...currentState,\n [stateKey]: view,\n };\n}\n\nfunction buildLocationWithState(\n location: ProductOfferDashboardHistoryLocation | undefined,\n state: Record<string, unknown>,\n): ProductOfferDashboardHistoryLocation {\n return {\n pathname: location?.pathname,\n search: location?.search,\n hash: location?.hash,\n state,\n };\n}\n\nexport const PoDashboardWithNavigation: React.FC<PoDashboardWithNavigationProps> = ({\n stats,\n topProducts,\n conversionData,\n topOffers,\n isLoading = false,\n error,\n dashboardTitle,\n className,\n allProducts,\n orders,\n allOffers,\n conversionSummaryRate,\n conversionSummaryChangePct,\n conversionFullViewData,\n conversionFullViewRate,\n conversionFullViewChangePct,\n initialDateRange = 'last30days',\n initialMarket = 'all',\n initialProductSort = 'units',\n initialConversionFilter = 'all',\n initialOfferSort = 'revenue',\n markets,\n translate,\n historyAdapter,\n historyStateKey = DEFAULT_HISTORY_STATE_KEY,\n resetToDashboardOnMount = true,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n onConversionFilterChange,\n onOfferSortChange,\n onViewChange,\n}) => {\n useTranslationResolver(translate);\n\n const [currentView, setCurrentView] = React.useState<ProductOfferDashboardView>('dashboard');\n const hasIntraDashboardHistoryRef = React.useRef(false);\n const [dateRange, setDateRange] = React.useState<DateRangeOption>(initialDateRange);\n const [market, setMarket] = React.useState<MarketOption>(initialMarket);\n const [productSort, setProductSort] = React.useState<ProductSortOption>(initialProductSort);\n const [conversionFilter, setConversionFilter] = React.useState<ConversionFilterOption>(initialConversionFilter);\n const [offerSort, setOfferSort] = React.useState<OfferSortOption>(initialOfferSort);\n\n const resolvedTopProducts = topProducts ?? EMPTY_TOP_PRODUCTS;\n const resolvedConversionData = conversionData ?? EMPTY_CONVERSION_DATA;\n const resolvedTopOffers = topOffers ?? EMPTY_TOP_OFFERS;\n const resolvedAllProducts = allProducts ?? resolvedTopProducts;\n const resolvedOrders = orders ?? EMPTY_ORDERS;\n const resolvedAllOffers = allOffers ?? resolvedTopOffers;\n\n const updateView = React.useCallback(\n (view: ProductOfferDashboardView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange],\n );\n\n const readCurrentView = React.useCallback((): ProductOfferDashboardView => {\n if (historyAdapter) {\n return readViewFromState(historyAdapter.location?.state, historyStateKey);\n }\n\n if (typeof window === 'undefined') {\n return 'dashboard';\n }\n\n return readViewFromState(window.history.state, historyStateKey);\n }, [historyAdapter, historyStateKey]);\n\n const writeCurrentView = React.useCallback(\n (view: ProductOfferDashboardView, mode: ViewMode) => {\n if (historyAdapter) {\n const nextState = buildStateWithView(historyAdapter.location?.state, historyStateKey, view);\n const nextLocation = buildLocationWithState(historyAdapter.location, nextState);\n\n if (mode === 'replace') {\n historyAdapter.replace(nextLocation);\n return;\n }\n\n historyAdapter.push(nextLocation);\n return;\n }\n\n if (typeof window === 'undefined') {\n return;\n }\n\n const nextState = buildStateWithView(window.history.state, historyStateKey, view);\n\n if (mode === 'replace') {\n window.history.replaceState(nextState, '');\n return;\n }\n\n window.history.pushState(nextState, '');\n },\n [historyAdapter, historyStateKey],\n );\n\n React.useEffect(() => {\n if (resetToDashboardOnMount) {\n writeCurrentView('dashboard', 'replace');\n hasIntraDashboardHistoryRef.current = false;\n updateView('dashboard');\n } else {\n updateView(readCurrentView());\n }\n\n if (historyAdapter) {\n return historyAdapter.listen((location, action) => {\n if (action === 'POP') {\n const nextView = readViewFromState(location.state, historyStateKey);\n hasIntraDashboardHistoryRef.current = nextView !== 'dashboard';\n updateView(nextView);\n }\n });\n }\n\n const handlePopState = (event: PopStateEvent) => {\n const nextView = readViewFromState(event.state, historyStateKey);\n hasIntraDashboardHistoryRef.current = nextView !== 'dashboard';\n updateView(nextView);\n };\n\n window.addEventListener('popstate', handlePopState);\n return () => {\n window.removeEventListener('popstate', handlePopState);\n };\n }, [historyAdapter, historyStateKey, readCurrentView, resetToDashboardOnMount, updateView, writeCurrentView]);\n\n const handleOpenFullView = React.useCallback(\n (view: ProductOfferFullViewWidgetType) => {\n hasIntraDashboardHistoryRef.current = true;\n writeCurrentView(view, 'push');\n updateView(view);\n },\n [updateView, writeCurrentView],\n );\n\n const handleBack = React.useCallback(() => {\n if (currentView !== 'dashboard' && hasIntraDashboardHistoryRef.current) {\n if (historyAdapter) {\n historyAdapter.goBack();\n return;\n }\n\n if (typeof window !== 'undefined') {\n window.history.back();\n }\n\n return;\n }\n\n hasIntraDashboardHistoryRef.current = false;\n writeCurrentView('dashboard', 'replace');\n updateView('dashboard');\n }, [currentView, historyAdapter, updateView, writeCurrentView]);\n\n const handleDateRangeChange = React.useCallback(\n (nextDateRange: DateRangeOption) => {\n setDateRange(nextDateRange);\n onDateRangeChange?.(nextDateRange);\n },\n [onDateRangeChange],\n );\n\n const handleMarketChange = React.useCallback(\n (nextMarket: MarketOption) => {\n setMarket(nextMarket);\n onMarketChange?.(nextMarket);\n },\n [onMarketChange],\n );\n\n const handleProductSortChange = React.useCallback(\n (nextProductSort: ProductSortOption) => {\n setProductSort(nextProductSort);\n onProductSortChange?.(nextProductSort);\n },\n [onProductSortChange],\n );\n\n const handleConversionFilterChange = React.useCallback(\n (nextFilter: ConversionFilterOption) => {\n setConversionFilter(nextFilter);\n onConversionFilterChange?.(nextFilter);\n },\n [onConversionFilterChange],\n );\n\n const handleOfferSortChange = React.useCallback(\n (nextSort: OfferSortOption) => {\n setOfferSort(nextSort);\n onOfferSortChange?.(nextSort);\n },\n [onOfferSortChange],\n );\n\n const handleProductsTitleClick = React.useCallback(() => {\n handleOpenFullView('products');\n }, [handleOpenFullView]);\n\n const handleConversionTitleClick = React.useCallback(() => {\n handleOpenFullView('conversion-rate');\n }, [handleOpenFullView]);\n\n const handleOffersTitleClick = React.useCallback(() => {\n handleOpenFullView('top-offers');\n }, [handleOpenFullView]);\n\n if (currentView === 'products') {\n return (\n <ProductsFullView\n products={resolvedAllProducts}\n dateRange={dateRange}\n market={market}\n productSort={productSort}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onProductSortChange={handleProductSortChange}\n />\n );\n }\n\n if (currentView === 'conversion-rate') {\n return (\n <ConversionRateFullView\n conversionData={conversionFullViewData ?? resolvedConversionData}\n orders={resolvedOrders}\n summaryRate={conversionFullViewRate ?? conversionSummaryRate}\n summaryChangePct={conversionFullViewChangePct ?? conversionSummaryChangePct}\n dateRange={dateRange}\n market={market}\n conversionFilter={conversionFilter}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onConversionFilterChange={handleConversionFilterChange}\n />\n );\n }\n\n if (currentView === 'top-offers') {\n return (\n <TopPerformingOffersFullView\n offers={resolvedAllOffers}\n dateRange={dateRange}\n market={market}\n offerSort={offerSort}\n markets={markets}\n isLoading={isLoading}\n onBack={handleBack}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onOfferSortChange={handleOfferSortChange}\n />\n );\n }\n\n return (\n <ProductOfferDashboard\n stats={stats}\n topProducts={resolvedTopProducts}\n conversionData={resolvedConversionData}\n topOffers={resolvedTopOffers}\n isLoading={isLoading}\n error={error}\n dashboardTitle={dashboardTitle}\n className={className}\n dateRange={dateRange}\n market={market}\n productSort={productSort}\n conversionFilter={conversionFilter}\n offerSort={offerSort}\n conversionSummaryRate={conversionSummaryRate}\n conversionSummaryChangePct={conversionSummaryChangePct}\n markets={markets}\n onDateRangeChange={handleDateRangeChange}\n onMarketChange={handleMarketChange}\n onProductSortChange={handleProductSortChange}\n onConversionFilterChange={handleConversionFilterChange}\n onOfferSortChange={handleOfferSortChange}\n onProductsTitleClick={handleProductsTitleClick}\n onConversionTitleClick={handleConversionTitleClick}\n onOffersTitleClick={handleOffersTitleClick}\n />\n );\n};\n\nexport default PoDashboardWithNavigation;\n","import React, { useState } from 'react';\nimport { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts';\nimport { PageHeader, buildDateRangeFilter, buildMarketFilter, type FilterConfig } from '../PageHeader';\nimport { DataTable, type ColumnDef } from '../DataTable';\nimport { Pagination } from '../Pagination';\nimport { usePaginatedItems, formatMoney } from '../../utils/dataUtils';\nimport { formatDateRangeLabel } from '../../utils/dateFormat';\nimport type {\n TopPerformingOffer,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n OfferSortOption,\n} from '../../types.d';\nimport { FullViewChartSkeleton } from '../LoadingSkeletons';\nimport { useMarketOptions } from '../../utils/marketOptions';\nimport { PageContainer, TableSection, ChartTitle, EmptyStateText } from '../FullViewComponents.styled';\nimport { SummaryItemRow } from '../TopCategories/CategoriesFullView.styled';\nimport {\n TopSection,\n ChartWrapper,\n DonutCenterOverlay,\n DonutCenterLabel,\n DonutCenterValue,\n DonutCenterTrend,\n SummaryContainer,\n SummaryItem,\n ColorDot,\n SummaryInfo,\n SummaryName,\n SummaryValue,\n SummaryPercentage,\n SummaryTrend,\n TableTrendCell,\n DesktopTableContainer,\n MobileOffersContainer,\n MobileOfferCard,\n MobileOfferHeader,\n MobileOfferName,\n MobileOfferMetricsGrid,\n MobileOfferMetricItem,\n MobileOfferMetricLabel,\n MobileOfferMetricValue,\n MobileOfferTrendValue,\n} from './TopPerformingOffersFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ProductOfferDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ProductOfferDashboardTranslationKeys';\nimport {\n getTrendIcon,\n parseTrendPercent,\n resolveTrendDirection,\n calculateWeightedRevenueTrend,\n} from '../../utils/trendUtils';\n\nexport interface TopPerformingOffersFullViewProps {\n readonly offers: TopPerformingOffer[];\n readonly dateRange: DateRangeOption;\n readonly market: MarketOption;\n readonly offerSort: OfferSortOption;\n readonly markets?: ReadonlyArray<MarketFilterOption>;\n readonly isLoading?: boolean;\n readonly onBack?: () => void;\n readonly onDateRangeChange?: (range: DateRangeOption) => void;\n readonly onMarketChange?: (market: MarketOption) => void;\n readonly onOfferSortChange?: (sort: OfferSortOption) => void;\n}\n\nexport const TopPerformingOffersFullView: React.FC<TopPerformingOffersFullViewProps> = ({\n offers,\n dateRange,\n market,\n offerSort,\n markets,\n isLoading = false,\n onBack,\n onDateRangeChange,\n onMarketChange,\n onOfferSortChange,\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n const itemsPerPage = 10;\n const isMobileView = useIsMobileViewport();\n\n const handleBack = React.useCallback(() => onBack?.(), [onBack]);\n\n const marketOptions = useMarketOptions(markets);\n\n const filters: FilterConfig[] = React.useMemo(\n () => [\n buildDateRangeFilter(dateRange, Keys),\n buildMarketFilter(market, marketOptions, Keys),\n {\n key: 'sort',\n label: getTranslation(Keys.filter.offerSort.byRevenue),\n value: offerSort,\n options: [\n { value: 'revenue', label: getTranslation(Keys.filter.offerSort.byRevenue) },\n { value: 'units', label: getTranslation(Keys.filter.offerSort.byUnits) },\n ],\n },\n ],\n [dateRange, market, marketOptions, offerSort],\n );\n\n const handleFilterChange = React.useCallback(\n (key: string, value: string) => {\n if (key === 'dateRange') onDateRangeChange?.(value as DateRangeOption);\n else if (key === 'market') onMarketChange?.(value);\n else if (key === 'sort') {\n onOfferSortChange?.(value as OfferSortOption);\n setCurrentPage(1);\n }\n },\n [onOfferSortChange, onDateRangeChange, onMarketChange],\n );\n\n const sortedOffers = React.useMemo(\n () =>\n [...offers].sort((a, b) => {\n if (offerSort === 'revenue') return b.revenue - a.revenue;\n return b.percentage - a.percentage;\n }),\n [offers, offerSort],\n );\n\n const { totalRevenue, totalRevenueTrendDirection, totalRevenueTrend } = React.useMemo(() => {\n const nextTotalRevenue = sortedOffers.reduce((sum, offer) => sum + offer.revenue, 0);\n\n const { direction, formatted } = calculateWeightedRevenueTrend(\n sortedOffers,\n (offer) => offer.revenue,\n (offer) => offer.trend?.revenue,\n );\n\n return {\n totalRevenue: nextTotalRevenue,\n totalRevenueTrendDirection: direction,\n totalRevenueTrend: formatted,\n };\n }, [sortedOffers]);\n\n const topOffers = React.useMemo(() => sortedOffers.slice(0, 5), [sortedOffers]);\n\n const { totalPages, pageItems: paginatedOffers } = usePaginatedItems(sortedOffers, currentPage, itemsPerPage);\n\n const columns: ColumnDef<TopPerformingOffer>[] = React.useMemo(\n () => [\n {\n key: 'name',\n label: getTranslation(Keys.fullView.topOffers.columnName),\n sortable: true,\n render: (_: unknown, row: TopPerformingOffer) => (\n <SummaryItemRow>\n <ColorDot dotColor={row.color} />\n <span>{row.name}</span>\n </SummaryItemRow>\n ),\n },\n {\n key: 'revenue',\n label: getTranslation(Keys.fullView.topOffers.columnRevenue),\n sortable: true,\n render: (value: unknown, row: TopPerformingOffer) => formatMoney(Number(value), row.currencyCode),\n },\n {\n key: 'percentage',\n label: getTranslation(Keys.fullView.topOffers.columnPercentage),\n sortable: true,\n render: (value: unknown) => `${Number(value)}%`,\n },\n {\n key: 'trend',\n label: getTranslation(Keys.fullView.topOffers.columnTrend),\n render: (_: unknown, row: TopPerformingOffer) => {\n if (!row.trend?.revenue) return getTranslation(Keys.defaults.noData);\n const columnTrendDirection = resolveTrendDirection(row.trend.revenue);\n return (\n <TableTrendCell direction={columnTrendDirection}>\n {getTrendIcon(columnTrendDirection)}\n <span>{row.trend.revenue}</span>\n </TableTrendCell>\n );\n },\n },\n ],\n [],\n );\n\n const currencyCode = sortedOffers[0]?.currencyCode;\n\n if (isLoading) {\n return (\n <PageContainer data-testid=\"top-offers-full-view\">\n <PageHeader\n title={getTranslation(Keys.fullView.topOffers.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <FullViewChartSkeleton />\n </PageContainer>\n );\n }\n\n if (offers.length === 0) {\n return (\n <PageContainer data-testid=\"top-offers-full-view\">\n <PageHeader\n title={getTranslation(Keys.fullView.topOffers.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n <EmptyStateText data-testid=\"top-offers-fullview-empty\">\n {getTranslation(Keys.widget.topPerformingOffers.emptyState)}\n </EmptyStateText>\n </PageContainer>\n );\n }\n\n return (\n <PageContainer data-testid=\"top-offers-full-view\">\n <PageHeader\n title={getTranslation(Keys.fullView.topOffers.title)}\n dateRange={formatDateRangeLabel(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n <TopSection data-testid=\"top-offers-fullview-top-section\">\n <ChartWrapper data-testid=\"top-offers-fullview-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={sortedOffers}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"50%\"\n outerRadius=\"85%\"\n dataKey=\"revenue\"\n nameKey=\"name\"\n paddingAngle={2}\n >\n {sortedOffers.map((entry) => (\n <Cell key={`cell-${entry.id}`} fill={entry.color} />\n ))}\n </Pie>\n <Tooltip formatter={(value: number) => formatMoney(value, currencyCode)} />\n </PieChart>\n </ResponsiveContainer>\n <DonutCenterOverlay data-testid=\"top-offers-fullview-donut-center\">\n <DonutCenterLabel>\n {getTranslation(Keys.widget.topPerformingOffers.totalRevenue)}\n </DonutCenterLabel>\n <DonutCenterValue>{formatMoney(totalRevenue, currencyCode)}</DonutCenterValue>\n <DonutCenterTrend direction={totalRevenueTrendDirection}>{totalRevenueTrend}</DonutCenterTrend>\n </DonutCenterOverlay>\n </ChartWrapper>\n\n <SummaryContainer data-testid=\"top-offers-fullview-summary\">\n {topOffers.map((offer) => {\n const summaryTrendDirection = resolveTrendDirection(offer.trend?.revenue);\n return (\n <SummaryItem key={offer.id}>\n <ColorDot dotColor={offer.color} />\n <SummaryInfo>\n <SummaryName>{offer.name}</SummaryName>\n <SummaryValue>{formatMoney(offer.revenue, offer.currencyCode)}</SummaryValue>\n </SummaryInfo>\n <SummaryPercentage>{offer.percentage}%</SummaryPercentage>\n {offer.trend?.revenue ? (\n <SummaryTrend direction={summaryTrendDirection} aria-label={offer.trend.revenue}>\n {getTrendIcon(summaryTrendDirection)}\n </SummaryTrend>\n ) : null}\n </SummaryItem>\n );\n })}\n </SummaryContainer>\n </TopSection>\n\n <TableSection data-testid=\"top-offers-table\">\n <ChartTitle data-testid=\"top-offers-fullview-table-title\">\n {getTranslation(Keys.fullView.topOffers.title)} ({sortedOffers.length})\n </ChartTitle>\n {!isMobileView ? (\n <DesktopTableContainer>\n <DataTable\n columns={columns}\n data={paginatedOffers}\n sortable\n getRowKey={(row: TopPerformingOffer) => row.id}\n />\n </DesktopTableContainer>\n ) : (\n <MobileOffersContainer>\n {paginatedOffers.map((offer) => {\n const trendPercent = parseTrendPercent(offer.trend?.revenue);\n let trendDirection: 'up' | 'down' | 'neutral' = 'neutral';\n if (trendPercent !== null && trendPercent > 0) trendDirection = 'up';\n else if (trendPercent !== null && trendPercent < 0) trendDirection = 'down';\n\n return (\n <MobileOfferCard key={offer.id}>\n <MobileOfferHeader>\n <ColorDot dotColor={offer.color} />\n <MobileOfferName>{offer.name}</MobileOfferName>\n </MobileOfferHeader>\n <MobileOfferMetricsGrid>\n <MobileOfferMetricItem>\n <MobileOfferMetricLabel>\n {getTranslation(Keys.fullView.topOffers.columnRevenue)}\n </MobileOfferMetricLabel>\n <MobileOfferMetricValue>\n {formatMoney(offer.revenue, offer.currencyCode)}\n </MobileOfferMetricValue>\n </MobileOfferMetricItem>\n <MobileOfferMetricItem>\n <MobileOfferMetricLabel>\n {getTranslation(Keys.fullView.topOffers.columnPercentage)}\n </MobileOfferMetricLabel>\n <MobileOfferMetricValue>{offer.percentage}%</MobileOfferMetricValue>\n </MobileOfferMetricItem>\n <MobileOfferMetricItem>\n <MobileOfferMetricLabel>\n {getTranslation(Keys.fullView.topOffers.columnTrend)}\n </MobileOfferMetricLabel>\n <MobileOfferTrendValue direction={trendDirection}>\n {offer.trend?.revenue ? (\n <>\n {getTrendIcon(trendDirection)}\n <span>{offer.trend.revenue}</span>\n </>\n ) : (\n getTranslation(Keys.defaults.noData)\n )}\n </MobileOfferTrendValue>\n </MobileOfferMetricItem>\n </MobileOfferMetricsGrid>\n </MobileOfferCard>\n );\n })}\n </MobileOffersContainer>\n )}\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n itemsPerPage={itemsPerPage}\n totalItems={sortedOffers.length}\n data-testid=\"top-offers-pagination\"\n />\n )}\n </TableSection>\n </PageContainer>\n );\n};\n","import { styled } from '@mui/material/styles';\nimport { Box, Typography } from '@mui/material';\nimport { ColorUtils } from '@nuskin/foundation-theme';\nimport type { TrendDirection } from '../types';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const TopSection = styled(Box)`\n display: flex;\n gap: 24px;\n padding: 24px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n box-shadow: ${({ theme }) => theme.shadows[1]};\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n }\n`;\n\nexport const ChartWrapper = styled(Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n\n @media (max-width: 767px) {\n width: 100%;\n height: 220px;\n }\n`;\n\nexport const DonutCenterOverlay = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n pointer-events: none;\n z-index: 1;\n width: 120px;\n`;\n\nexport const DonutCenterLabel = styled(Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const DonutCenterValue = styled(Typography)`\n margin-top: 2px;\n font-size: 1.25rem;\n line-height: 1.2;\n font-weight: 700;\n color: ${({ theme }) => theme.palette.text.primary};\n`;\n\nexport const DonutCenterTrend = styled(Typography)<{ direction: TrendDirection }>`\n margin-top: 2px;\n font-size: 0.875rem;\n line-height: 1.2;\n font-weight: 600;\n color: ${({ direction, theme }) => {\n if (direction === 'up') return theme.palette.success.main;\n if (direction === 'down') return theme.palette.error.main;\n return theme.palette.text.secondary;\n }};\n`;\n\nexport const SummaryContainer = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1;\n`;\n\nexport const SummaryItem = styled(Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n`;\n\nexport const ColorDot = styled(Box)<{ dotColor: string }>`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({ dotColor }) => dotColor};\n flex-shrink: 0;\n`;\n\nexport const SummaryInfo = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`;\n\nexport const SummaryName = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`;\n\nexport const SummaryValue = styled(Typography)`\n font-size: 0.75rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n`;\n\nexport const SummaryPercentage = styled(Typography)`\n font-size: 1rem;\n font-weight: 600;\n flex-shrink: 0;\n`;\n\nexport const SummaryTrend = styled(Box)<{ direction: TrendDirection }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return theme.palette.success.main;\n if (direction === 'down') return theme.palette.error.main;\n return theme.palette.text.secondary;\n }};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`;\n\nexport const TableTrendCell = styled(Box)<{ direction: TrendDirection }>`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-weight: 600;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return theme.palette.success.main;\n if (direction === 'down') return theme.palette.error.main;\n return theme.palette.text.secondary;\n }};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`;\n\nexport const DesktopTableContainer = styled(Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`;\n\nexport const MobileOffersContainer = styled(Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`;\n\nexport const MobileOfferCard = styled(Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => theme.palette.divider};\n border-radius: 8px;\n`;\n\nexport const MobileOfferHeader = styled(Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const MobileOfferName = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n color: ${({ theme }) => theme.palette.text.primary};\n word-break: break-word;\n`;\n\nexport const MobileOfferMetricsGrid = styled(Box)`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n padding-top: 12px;\n border-top: 1px solid ${({ theme }) => theme.palette.divider};\n`;\n\nexport const MobileOfferMetricItem = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`;\n\nexport const MobileOfferMetricLabel = styled(Typography)`\n font-size: 0.625rem;\n color: ${({ theme }) => theme.palette.text.secondary};\n text-transform: uppercase;\n`;\n\nexport const MobileOfferMetricValue = styled(Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.primary};\n`;\n\nexport const MobileOfferTrendValue = styled(Typography)<{ direction: TrendDirection }>`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 0.875rem;\n font-weight: 600;\n color: ${({ theme, direction }) => {\n if (direction === 'up') return theme.palette.success.main;\n if (direction === 'down') return theme.palette.error.main;\n return theme.palette.text.secondary;\n }};\n\n svg {\n width: 14px;\n height: 14px;\n font-size: 14px;\n }\n`;\n","import { ColorUtils, styled } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const FilterContainer = styled('div')`\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n`;\n\nexport const FilterDropdown = styled('select')`\n min-width: 160px;\n height: 40px;\n padding: 8px 12px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border: 1px solid ${({ theme }) => getGenomeColor(theme, 'N40')};\n border-radius: 8px;\n font-size: 14px;\n font-weight: 400;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({ theme }) => getGenomeColor(theme, 'N30')};\n }\n\n &:focus {\n border-color: ${({ theme }) => getGenomeColor(theme, 'A70')};\n box-shadow: 0 0 0 3px ${({ theme }) => getGenomeColor(theme, 'A20')};\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n`;\n\nexport const FilterLabel = styled('label')`\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n`;\n","import React from 'react';\nimport { FilterContainer, FilterDropdown, FilterLabel } from './FilterBar.styled';\nimport type { FilterConfig } from './types';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../TranslationKeys/ShoppingDashboardTranslationKeys';\n\nexport interface FilterBarProps {\n readonly filters: FilterConfig[];\n readonly onChange: (filterKey: string, value: string) => void;\n}\n\nexport const FilterBar: React.FC<FilterBarProps> = ({ filters, onChange }) => {\n return (\n <FilterContainer data-testid=\"filter-bar\">\n {filters.map((filter) => (\n <FilterLabel key={filter.key} htmlFor={`filter-${filter.key}`}>\n {filter.label}\n <FilterDropdown\n id={`filter-${filter.key}`}\n value={filter.value}\n onChange={(e) => onChange(filter.key, e.target.value)}\n disabled={filter.disabled}\n aria-label={`${filter.label} ${getTranslation(Keys.ariaLabel.filterSuffix)}`}\n data-testid={`filter-dropdown-${filter.key}`}\n >\n {filter.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </FilterDropdown>\n </FilterLabel>\n ))}\n </FilterContainer>\n );\n};\n","import type {\n DashboardStats,\n TopProduct,\n ConversionDataPoint,\n SignupDataPoint,\n CategoryRevenue,\n OrderHistory,\n SignupDetail,\n} from '../types.d';\n\nexport const mockStats: DashboardStats = {\n shopTitle: 'My NuSkin Shop',\n dateRange: {\n start: '2026-03-01',\n end: '2026-03-31',\n label: 'Mar 1 - Mar 31',\n },\n selectedMarket: 'all',\n metrics: {\n revenue: '$9,453',\n volume: '1,211',\n siteVisits: '17,935',\n conversionRate: '4.2%',\n },\n trend: {\n revenue: '+12.5%',\n volume: '+8.3%',\n siteVisits: '-2.1%',\n },\n};\n\nexport const mockTopProducts: TopProduct[] = [\n {\n id: 'prod-001',\n rank: 1,\n name: 'ageLOC LumiSpa',\n imageUrl: '',\n unitsSold: 342,\n revenue: 29580,\n volume: 245,\n trend: { units: '+15%', revenue: '+12%', volume: '+8%' },\n },\n {\n id: 'prod-002',\n rank: 2,\n name: 'Pharmanex LifePak',\n imageUrl: '',\n unitsSold: 287,\n revenue: 24395,\n volume: 198,\n trend: { units: '+8%', revenue: '+10%', volume: '+5%' },\n },\n {\n id: 'prod-003',\n rank: 3,\n name: 'ageLOC Meta',\n imageUrl: '',\n unitsSold: 256,\n revenue: 21760,\n volume: 176,\n trend: { units: '-3%', revenue: '-1%', volume: '-2%' },\n },\n {\n id: 'prod-004',\n rank: 4,\n name: 'Nu Skin 180 System',\n imageUrl: '',\n unitsSold: 198,\n revenue: 17820,\n volume: 142,\n trend: { units: '+22%', revenue: '+18%', volume: '+15%' },\n },\n {\n id: 'prod-005',\n rank: 5,\n name: 'Epoch Baobab Body Butter',\n imageUrl: '',\n unitsSold: 176,\n revenue: 8800,\n volume: 88,\n trend: { units: '+5%', revenue: '+3%', volume: '+2%' },\n },\n];\n\nexport const mockConversionData: ConversionDataPoint[] = Array.from({ length: 30 }, (_, i) => {\n const date = new Date('2026-03-01');\n date.setDate(date.getDate() + i);\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n return {\n date: `${months[date.getMonth()]} ${date.getDate()}`,\n rate: Number((4 + (i % 15) * 0.1).toFixed(2)),\n orders: 200 + ((i * 13) % 100),\n siteVisits: 4000 + ((i * 97) % 2000),\n };\n});\n\nexport const mockConversionDataStandard: ConversionDataPoint[] = mockConversionData.map((point) => ({\n ...point,\n rate: Number((point.rate * 1.35).toFixed(2)),\n orders: Math.round(point.orders * 0.7),\n}));\n\nexport const mockConversionDataSubscription: ConversionDataPoint[] = mockConversionData.map((point) => ({\n ...point,\n rate: Number((point.rate * 0.55).toFixed(2)),\n orders: Math.round(point.orders * 0.3),\n}));\n\nexport const mockSignupData: SignupDataPoint[] = Array.from({ length: 30 }, (_, i) => {\n const date = new Date('2026-03-01');\n date.setDate(date.getDate() + i);\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const total = 80 + ((i * 11) % 40);\n const members = Math.floor(total * 0.4);\n const retail = Math.floor(total * 0.35);\n const brandAffiliates = total - members - retail;\n return {\n date: `${months[date.getMonth()]} ${date.getDate()}`,\n total,\n members,\n retail,\n brandAffiliates,\n };\n});\n\nexport const mockCategories: CategoryRevenue[] = [\n {\n id: 'cat-001',\n name: 'Favorites',\n revenue: 45200,\n percentage: 29,\n color: '#C95D63',\n trend: { revenue: '+8%', units: '+10%' },\n },\n {\n id: 'cat-002',\n name: 'Daily Routine',\n revenue: 42100,\n percentage: 27,\n color: '#6C7A9B',\n trend: { revenue: '+12%', units: '+15%' },\n },\n {\n id: 'cat-003',\n name: 'Fit & Trim Body',\n revenue: 34300,\n percentage: 22,\n color: '#E8975E',\n trend: { revenue: '-3%', units: '-1%' },\n },\n {\n id: 'cat-004',\n name: 'Dull Skin',\n revenue: 24900,\n percentage: 16,\n color: '#5F8FC4',\n trend: { revenue: '+5%', units: '+7%' },\n },\n {\n id: 'cat-005',\n name: 'Acne',\n revenue: 9400,\n percentage: 6,\n color: '#A2C3B3',\n trend: { revenue: '+2%', units: '+3%' },\n },\n];\n\nexport const mockOrders: OrderHistory[] = Array.from({ length: 50 }, (_, i) => {\n const firstNames = ['Sarah', 'John', 'Emma', 'Michael', 'Olivia', 'William', 'Ava', 'James'];\n const lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis'];\n const date = new Date('2026-03-31');\n date.setDate(date.getDate() - (i % 30));\n return {\n orderId: `ORD-${String(10000 + i).padStart(5, '0')}`,\n date: date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }),\n customerName: `${firstNames[i % firstNames.length]} ${lastNames[i % lastNames.length]}`,\n customerType: i % 3 === 0 ? 'Subscription' : 'Standard',\n items: (i % 5) + 1,\n total: Number((50 + ((i * 17) % 200) + (i % 10) * 0.1).toFixed(2)),\n bv: 30 + ((i * 9) % 150),\n };\n});\n\nexport const mockSignupDetails: SignupDetail[] = Array.from({ length: 30 }, (_, i) => {\n const firstNames = ['Alice', 'Bob', 'Carol', 'David', 'Eva', 'Frank', 'Grace', 'Henry'];\n const lastNames = ['Anderson', 'Baker', 'Clark', 'Davis', 'Evans', 'Fisher', 'Grant', 'Hall'];\n const types: ('Member' | 'Retail' | 'Brand Affiliate')[] = ['Member', 'Retail', 'Brand Affiliate'];\n const date = new Date('2026-03-31');\n date.setDate(date.getDate() - (i % 30));\n return {\n id: `SU-${String(1000 + i).padStart(4, '0')}`,\n name: `${firstNames[i % firstNames.length]} ${lastNames[i % lastNames.length]}`,\n date: date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }),\n type: types[i % types.length],\n email: `${firstNames[i % firstNames.length].toLowerCase()}.${lastNames[i % lastNames.length].toLowerCase()}@example.com`,\n status: i % 4 === 0 ? 'Pending' : 'Active',\n };\n});\n","import type { ProductOfferDashboardStats, TopPerformingOffer } from '../types.d';\n\nexport { mockTopProducts, mockConversionData, mockOrders } from './mockDashboardData';\n\nexport const mockProductOfferStats: ProductOfferDashboardStats = {\n shopTitle: 'Performance Overview',\n dateRange: {\n start: '2026-03-01',\n end: '2026-03-31',\n label: 'Mar 1 - Mar 31',\n },\n selectedMarket: 'all',\n metrics: {\n revenue: '$5,208',\n offersPurchased: '285',\n conversionRate: '4.2%',\n },\n trend: {\n revenue: '+2.3%',\n offersPurchased: '+3.7%',\n },\n};\n\nexport const mockProductOfferStatsPositiveTrend: ProductOfferDashboardStats = {\n ...mockProductOfferStats,\n trend: {\n revenue: '+5.1%',\n offersPurchased: '+12.5%',\n },\n};\n\nexport const mockProductOfferStatsNegativeTrend: ProductOfferDashboardStats = {\n ...mockProductOfferStats,\n trend: {\n revenue: '-1.8%',\n offersPurchased: '-3.7%',\n },\n};\n\nexport const mockProductOfferStatsNeutralTrend: ProductOfferDashboardStats = {\n ...mockProductOfferStats,\n trend: {\n revenue: '+0%',\n offersPurchased: '+0%',\n },\n};\n\nexport const mockProductOfferStatsZeroOffers: ProductOfferDashboardStats = {\n ...mockProductOfferStats,\n metrics: {\n ...mockProductOfferStats.metrics,\n offersPurchased: '0',\n },\n trend: {\n revenue: '+0%',\n offersPurchased: '+0%',\n },\n};\n\nexport const mockTopOffers: TopPerformingOffer[] = [\n {\n id: 'offer-1',\n name: 'Winter Skincare Bundle',\n revenue: 2800,\n percentage: 29,\n color: '#6B8E7B',\n trend: { revenue: '-4.2%' },\n },\n {\n id: 'offer-2',\n name: 'Supplement Starter Pack',\n revenue: 2500,\n percentage: 27,\n color: '#E8915A',\n trend: { revenue: '+3.1%' },\n },\n {\n id: 'offer-3',\n name: 'Holiday Special Bundle',\n revenue: 2100,\n percentage: 22,\n color: '#C75B5B',\n trend: { revenue: '-1.5%' },\n },\n {\n id: 'offer-4',\n name: 'LumiSpa Cleansing Kit',\n revenue: 1500,\n percentage: 16,\n color: '#5B8EC7',\n trend: { revenue: '+2.8%' },\n },\n {\n id: 'offer-5',\n name: 'Daily Wellness Bundle',\n revenue: 529,\n percentage: 6,\n color: '#9B8EC7',\n trend: { revenue: '+7.2%' },\n },\n];\n"]}