@nuskin/react-mysite-elements 1.5.0-ui-fixes.12 → 1.5.0-ui-fixes.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/shopping-dashboard/MysiteDashboardWithNavigation.d.ts +1 -0
- package/dist/common/shopping-dashboard/TranslationKeys/ShoppingDashboardTranslationKeys.d.ts +6 -6
- package/dist/common/shopping-dashboard/fixtures/index.d.ts +1 -1
- package/dist/common/shopping-dashboard/fixtures/mockDashboardData.d.ts +2 -2
- package/dist/common/shopping-dashboard/shared/ConversionRate/ConversionRateFullView.d.ts +1 -0
- package/dist/common/shopping-dashboard/stories/ConversionRateChart.stories.d.ts +1 -1
- package/dist/common/shopping-dashboard/stories/ConversionRateFullView.stories.d.ts +2 -2
- package/dist/common/shopping-dashboard/utils/conversionFilter.d.ts +3 -0
- package/dist/common/shopping-dashboard/utils/conversionSeries.d.ts +6 -0
- package/dist/common/shopping-dashboard/utils/dataUtils.d.ts +6 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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","../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/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/trendUtils.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/utils/comparisonTextUtils.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/hooks/useProductOfferWidgetExports.ts","../src/common/shopping-dashboard/utils/excelExport.ts","../src/common/shopping-dashboard/utils/productOfferExport.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":["Dc","Object","create","ur","defineProperty","Pc","getOwnPropertyDescriptor","Rc","getOwnPropertyNames","Mc","getPrototypeOf","Oc","prototype","hasOwnProperty","Oa","e","t","exports","Fc","o","get","enumerable","Rn","n","i","call","R","__esModule","value","Lc","require_ReactPropTypesSecret","__commonJSMin","module","ReactPropTypesSecret","require_factoryWithThrowingShims","emptyFunction","emptyFunctionWithReset","ri","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","li","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","exportRowsToExcel","exportTopPerformingOffers","exportTopProducts","formatDateRange","formatDateRangeLabel","formatDisplayDate","formatISODate","formatShortDate","getComparedToText","getDateRangeLabel","getDaysFromDateRange","getTranslation","getTranslationResolver","getTrendColor","getTrendIcon","mockCategories","mockConversionData","mockOrders","mockProductOfferStats","mockSignupData","mockSignupDetails","mockStats","mockTopOffers","mockTopProducts","normalizeExcelFileName","normalizeExcelSheetName","paginateItems","resolveMarketOptions","resolveTranslation","setTranslationResolver","sortByNumericProperty","useProductOfferWidgetExports","useTranslation","useTranslationResolver","__toCommonJS","import_react","require","import_foundation_ui_components","import_foundation_theme","PriceComponent","_t","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","Vn","useState","isButtonHovered","setIsButtonHovered","An","useMediaQuery","handleImageError","target","noImageFallback","fallbackImage","src","je","jsxs","onClick","tabIndex","children","jsx","onError","imageSrc","En","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","_e","ho","Box","ScrollableContainer","CardList","ControlsContainer","ViewAllWrapper","$isMobile","ProductCountWrapper","ArrowsWrapper","$isDisabled","Scrollablewrapper","CustomTypography","zn","NsTypography","ViewAllLink","$disabled","EmptyProductCategories","ControlsHeaderRow","ProductInfoWrapper","CategoryNameWrapper","entries","renderEntry","settings","showControlButtons","allEntryLabel","allEntryLink","categoryName","emptyProductMessage","productsCountLabel","isInitialDataLoading","history","sliderRef","Ao","useRef","ei","prev","useCallback","current","slickPrev","next","slickNext","renderProductEntry","entry","index","ke","directSeller","sliderSettings","dots","infinite","speed","slidesToShow","Math","min","length","slidesToScroll","swipe","draggable","arrows","responsive","breakpoint","shouldShowNavigation","renderCarouselContent","map","Qn","Slider","ref","variant","preventDefault","push","ti","NsCarouselControl","viewAllLabel","viewAllUrl","React","import_Tabs","import_Tab","import_prop_types","di","NsCategoryNavigationContainer","pi","div","TabPanel","other","Ut","role","hidden","id","La","propTypes","fr","itemArray","controlledValue","onChange","ui","internalValue","setInternalValue","mi","gi","Tabs","orientation","event","newValue","item","fi","Tab","label","categoryId","findIndex","content","getMinHeight","$hasCategories","ProductTabCarouselContainer","lo","TabsContainer","ContentContainer","LoadingContainer","NoTabsContainer","SpinnerContainer","fetchCategories","fetchProducts","showCustomCategory","emptyProductTabs","getCategoryId","categories","vi","Ye","isLoadingInitialData","setIsLoadingInitialData","setCategories","isCategoriesLoaded","setIsCategoriesLoaded","selectedTab","setSelectedTab","products","setProducts","loading","setLoading","shouldShowSpinner","setShouldShowSpinner","checkForExistingSpinners","existingSpinners","document","querySelectorAll","useEffect","then","data","finally","cat","wt","_","ki","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","Ct","hr","xo","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","vt","Ii","sx","ArrowDownIcon","Va","trackGTMEvent","eventData","window","url","href","updatedEventData","prefix","includes","dataLayer","console","error","renderImageContent","placeholderClass","H","Bo","pe","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","ht","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","bo","StatsRow","WidgetContainer","TwoColumnGrid","ErrorContainer","import_CalendarMonth","import_Language","Ue","ColorUtils","getGenomeColor","HeaderContainer","theme","TitleSection","ShopTitle","DateRangeLabel","FiltersSection","FilterDropdownContainer","FilterLabel","StyledSelect","FilterIcon","LoadingIndicatorContainer","DesktopFiltersContainer","StyledCircularProgress","activeResolver","resolver","fallback","result","stats","revenue","visits","trend","increased","decreased","unchanged","details","filter","dateRange","last7days","last30days","last90days","thisMonth","market","all","productSort","signupView","showAll","showMembers","showRetail","showBrandAffiliates","conversionType","standard","subscription","widget","topProducts","viewAll","empty","ariaLabel","titleAriaLabel","sortAriaLabel","noImageAriaLabel","unitsSuffix","revenueSuffix","rank","conversionRate","formula","comparison","chartAriaLabel","filterAriaLabel","tooltipOrders","tooltipVisits","ordersPerSiteVisits","signups","total","totalSignupsInPeriod","noTrendData","compareTo","topCategories","menu","fullView","viewDetails","exportData","navigation","backToDashboard","backAriaLabel","dashboard","statsRow","dashboardFilters","loadingDashboard","dateRangeFilter","marketFilter","filterSuffix","columns","status","detailsTitle","orderId","customer","items","bv","totalSv","orderDetailsTitle","notAvailable","product","unitsSold","volume","skuPrefix","noProducts","category","percentOfTotal","allCategoriesTitle","noCategoryData","dataTable","noDataAvailable","sortableColumn","pagination","previousPage","nextPage","goToPage","of","defaults","zeroTrend","noValue","noData","noChange","byRevenue","byUnits","byVolume","byTrend","members","retail","brandAffiliates","units","date","dcSv","markets","useMarketOptions","qi","dateRangeLabel","dateRangeLabelProp","isLoading","onDateRangeChange","onMarketChange","marketOptions","handleDateRangeChange","newDateRange","handleMarketChange","newMarket","handleFilterKeyDown","blur","getDateRangeLabelText","ie","as","el","htmlFor","Xi","CalendarMonthIcon","Qi","LanguageIcon","find","opt","String","option","import_ShowChart","import_TrendingUp","import_TrendingDown","Te","StatsCardContainer","$layout","SplitTitle","SplitRow","LegendColumn","SplitTrend","direction","LegendCaption","StatsTitle","StatsValueContainer","StatsValue","ValueSubtitleWrapper","StatsSubtitle","TrendContainer","TrendIcon","TrendText","StatsCardHeader","import_Skeleton","SkeletonCard","X","SkeletonHeader","SkeletonRow","StatsCardWrapper","StatsCardHeaderRow","StatsCardBody","StatsCardSubtitle","wo","Skeleton","ProductRowInfo","ProductRowMetrics","ChartMetricRow","ChartMetricTrend","ChartAreaSkeleton","PieChartLayout","PieCircleSkeleton","LegendList","LegendRowWrapper","LegendRowInfo","DashboardLayout","DashboardHeaderRow","DashboardFilterGroup","StatsGrid","WidgetGrid","FullViewLayout","FullViewMetricCard","FullViewMetricCenter","FullViewChartArea","FullViewTableCard","FullViewTableRow","SummaryCardsGrid","StatsCardSkeleton","D","te","ProductRowSkeleton","ProductsListSkeleton","rowKey","ChartWidgetSkeleton","LegendRowSkeleton","CategoriesPieChartSkeleton","FullViewChartSkeleton","FullViewTableSkeleton","StatsCardComponent","subtitle","caption","layout","trendDirection","trendValue","se","getTrendAriaLabel","directionText","getTrendChartIcon","iconSize","Il","TrendingUpIcon","Vl","TrendingDownIcon","$l","ShowChartIcon","Nl","memo","displayName","import_ShoppingCart","import_ArrowUpward","import_ArrowDownward","import_Remove","parseTrendPercent","cleanedValue","parsedValue","isFinite","resolveTrendDirection","calculateWeightedRevenueTrend","getRevenue","getTrend","reduce","accumulator","weightedSum","weight","average","formatted","toFixed","getTrendDirectionLabel","_o","El","ArrowUpwardIcon","Al","ArrowDownwardIcon","zl","RemoveIcon","renderPieChartLabel","options","cx","cy","midAngle","innerRadius","outerRadius","percentage","RADIAN","PI","radius","x","cos","y","sin","textAnchor","dominantBaseline","itemsPerPage","ceil","currentPage","startIndex","endIndex","sort","a","aVal","bVal","decimalPlaces","usePaginatedItems","totalPages","Ja","pageItems","formatMoney","currencyCode","locale","fractionDigits","amount","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","toLocaleString","capitalizeFirstLetter","text","charAt","toUpperCase","getSignupValueByView","dataPoint","view","me","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_FileDownload","import_IconButton","Mr","StyledIconButton","IconButton","widgetId","onFullView","onExport","is","anchorEl","setAnchorEl","buttonId","menuId","handleClick","currentTarget","handleClose","handleFullView","handleExport","Be","size","ss","MoreVertIcon","ls","Menu","onClose","MenuListProps","anchorOrigin","vertical","horizontal","transformOrigin","en","MenuItem","tn","ListItemIcon","ds","VisibilityIcon","on","ListItemText","ps","FileDownloadIcon","TopSellingProductsListComponent","maxProducts","onSortChange","onTitleClick","handleSortChange","newSort","formatValue","sortBy","getSubtitle","getTrendValue","getTrendDirection","displayedProducts","rankLabel","trendLabel","Z","us","ShoppingCartIcon","imageUrl","cs","import_recharts","Se","ConversionRateContainer","ChartHeader","TitleRow","ChartTitle","FilterDropdown","MetricDisplay","MetricValue","MetricTrend","FormulaDisplay","ChartContainer","TooltipContainer","TooltipLabel","TooltipValue","TooltipDetails","DEFAULT_DATE_RANGE","getMonth","getDate","AXIS_MONTH_MAP","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","formatAxisDate","dateStr","parts","start","end","toISOString","calculateDateRangeFromOption","dateRangeOption","today","year","getFullYear","month","startDate","endDate","keys","CHART_MARGIN","AXIS_TICK","HollowDot","W","fillOpacity","stroke","strokeWidth","ActiveHollowDot","rateTickFormatter","CustomTooltip","active","payload","rate","orders","siteVisits","ConversionRateChartComponent","conversionData","conversionFilter","summaryRate","summaryChangePct","onFilterChange","handleFilterChange","vo","newFilter","noDataText","noChangeText","currentRate","at","trendInfo","latestRate","previousRate","change","percentageChange","formattedChange","formattedData","shortDate","qe","ResponsiveContainer","LineChart","CartesianGrid","strokeDasharray","XAxis","dataKey","tick","tickLine","interval","YAxis","tickFormatter","domain","Line","dot","activeDot","He","SignupsContainer","Legend","LegendItem","LegendColor","LegendLabel","SERIES_COLORS","dotComponentCache","Map","HollowDotFactory","strokeColor","has","$","set","SignupsChartComponent","signupData","onViewChange","handleViewChange","To","newView","totalSignups","lastDataPoint","latestValue","previousValue","totalLabel","membersLabel","retailLabel","brandAffiliatesLabel","we","ae","CategoriesContainer","ChartAndLegendContainer","ChartWrapper","DonutCenterOverlay","DonutCenterLabel","DonutCenterValue","DonutCenterTrend","LegendContainer","LegendInfo","LegendName","LegendValue","LegendPercentage","LegendValueWrapper","LegendTrendInline","LegendTrend","TopCategoriesPieChartComponent","categorySort","sortedCategories","Jr","nextSortedCategories","nextTotalRevenue","sum","nextTotalVolume","nextTrendDirection","nextFormattedTrend","totalRevenue","totalVolume","formattedTrend","getTrendGraphIcon","_s","Us","renderCustomLabel","Pt","PieChart","Pie","nameKey","paddingAngle","labelLine","Cell","formatter","displayValue","displayPercentage","volumeSharePct","displayTrend","EMPTY_TOP_PRODUCTS","EMPTY_CONVERSION_DATA","EMPTY_SIGNUP_DATA","EMPTY_CATEGORIES","categoriesSummaryChangePct","conversionSummaryChangePct","onProductSortChange","onSignupViewChange","onConversionFilterChange","onCategorySortChange","onProductsTitleClick","onConversionTitleClick","onSignupsTitleClick","onCategoriesToTitleClick","onProductsExport","onConversionExport","onSignupsExport","onCategoriesExport","resolvedTopProducts","resolvedConversionData","resolvedSignupData","resolvedCategories","Me","startsWith","metrics","import_ArrowBack","import_CalendarToday","Ve","PageHeaderWrapper","BackButtonWrapper","BackButton","LeftSection","Title","DateRange","MobileDateRange","FilterWrapper","MobileTitleWrapper","MobileTitle","buildDateRangeFilter","buildMarketFilter","onBack","filters","renderFilterIcon","iconType","xe","CalendarTodayIcon","ld","nd","ArrowBackIcon","dt","TableContainer","Table","TableHeader","TableHeaderCell","sortable","TableBody","TableRow","TableCell","EmptyTableCell","SortIconContainer","isActive","onSort","sortColumn","sortDirection","getRowKey","handleSort","columnKey","handleKeyDown","getAriaSort","Ke","column","scope","hd","md","colSpan","row","rowIndex","render","import_ChevronLeft","import_ChevronRight","co","PaginationContainer","PageButton","PageInfo","NavButton","onPageChange","totalItems","handlePrevious","handleNext","action","pageNumbers","from","pages","startItem","endItem","goToPageLabel","Oe","bd","ChevronLeftIcon","page","yd","ChevronRightIcon","import_styles","wd","PageContainer","Ee","Ae","MetricChartCardSection","shadows","MetricSection","palette","primary","success","main","secondary","ComparisonText","ChartSection","TableSection","withCard","MobileCardName","MobileCardSubtext","MobileCardDetail","MobileCardStatus","warning","Dd","ze","Le","ProductSku","MobileCardsContainer","DesktopTableContainer","MobileProductCard","divider","MobileCardHeader","MobileProductRank","MobileProductDetails","MobileProductName","MobileProductSku","MobileMetricsGrid","MobileMetricItem","MobileMetricLabel","MobileMetricValue","MOBILE_VIEWPORT_QUERY","useIsMobileViewport","zd","noSsr","mapProductToRow","sku","padStart","ut","setCurrentPage","setSortColumn","setSortDirection","isMobileView","handleBack","productRows","sortedRows","paginatedRows","G","Bd","ConversionTrendChartContainer","ce","Ce","MobileOrderCard","MobileOrderHeader","MobileCustomerInfo","MobileCustomerName","MobileOrderDate","MobileOrderId","MobileOrderMetrics","MobileOrdersContainer","ChartWithLegendWrapper","ChartLegendContainer","$color","ComparisonTextMobile","OrderIdColumnCell","TrendValueText","TrendComparisonText","MetricSectionWrapper","rt","changePercent","getConversionFilterLabel","conversionFilterLabel","filteredOrders","order","customerType","paginatedOrders","I","getChartColor","ap","np","Xe","customerName","ip","MobileSignupsContainer","gt","Lt","MobileSignupCard","SignupTrendChartContainer","NameColumnCell","TrendAbsoluteChangeText","TrendPercentageChangeText","toNumeric","parsed","normalizeSignupDataInput","input","isArray","apiResponse","daily","brandAffiliate","brand_affiliates","brand_affiliate","Nt","normalizedSignupData","point","rawPoint","signupTotal","absoluteChange","first","last","round","hasSignupTrendData","paginatedSignups","P","xp","bp","ye","connectNulls","hp","signup","Gt","SummaryItemRow","SummaryItemInfo","SummaryItemName","SummaryItemSubtext","SummaryItemPercentage","TopSection","Ne","muiStyled","$e","SummaryContainer","SummaryItem","ColorDot","dotColor","SummaryInfo","SummaryName","SummaryValue","SummaryPercentage","MobileCategoriesContainer","MobileCategoryCard","SummaryTrendIcon","CategoryNameColumnCell","$t","A","zp","Bp","parseFloat","isNaN","totalRevenueTrendDirection","totalRevenueTrend","paginatedCategories","It","translate","hn","DEFAULT_HISTORY_STATE_KEY","EMPTY_ORDERS","EMPTY_SIGNUPS","isRecord","isMysiteDashboardView","readViewFromState","state","stateKey","buildStateWithView","buildLocationWithState","pathname","search","hash","initialDateRange","initialMarket","initialProductSort","initialSignupView","initialConversionFilter","initialCategorySort","historyAdapter","historyStateKey","resetToDashboardOnMount","le","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","Mo","PoDashboardContainer","Oo","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","ha","nextSortedOffers","offer","j","Vt","legendTrendDirection","INVALID_SHEET_NAME_CHARS","fileName","trimmedFileName","resolvedFileName","endsWith","sheetName","normalizedSheetName","rows","Workbook","workbook","worksheet","buffer","addWorksheet","header","forEach","worksheetRow","addRow","xlsx","writeBuffer","downloadExcelBuffer","blob","Blob","Uint8Array","URL","createObjectURL","link","download","body","appendChild","click","removeChild","revokeObjectURL","topProductColumns","topOfferColumns","topProductsExportData","topOffersExportData","showTopProductsExportOption","showTopOffersExportOption","offerRows","canExportProducts","canExportOffers","onTopProductsExport","wn","onTopOffersExport","EMPTY_TOP_OFFERS","dashboardTitle","conversionSummaryRate","onOfferSortChange","onOffersTitleClick","resolvedTopOffers","Ge","selectedMarket","Zp","ne","re","SummaryTrend","TableTrendCell","MobileOffersContainer","MobileOfferCard","MobileOfferHeader","MobileOfferName","MobileOfferMetricsGrid","MobileOfferMetricItem","MobileOfferMetricLabel","MobileOfferMetricValue","MobileOfferTrendValue","Et","paginatedOffers","O","columnTrendDirection","At","summaryTrendDirection","trendPercent","isProductOfferDashboardView","allProducts","allOffers","conversionFullViewData","conversionFullViewRate","conversionFullViewChangePct","initialOfferSort","ue","setOfferSort","resolvedAllProducts","resolvedAllOffers","handleOfferSortChange","handleOffersTitleClick","Qo","Fo","FilterContainer","Lo","setDate","mockConversionDataStandard","mockConversionDataSubscription","months","floor","firstNames","lastNames","toLocaleDateString","day","types","mockProductOfferStatsPositiveTrend","mockProductOfferStatsNegativeTrend","mockProductOfferStatsNeutralTrend","mockProductOfferStatsZeroOffers"],"mappings":"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","sourcesContent":["\"use strict\";var Dc=Object.create;var ur=Object.defineProperty;var Pc=Object.getOwnPropertyDescriptor;var Rc=Object.getOwnPropertyNames;var Mc=Object.getPrototypeOf,Oc=Object.prototype.hasOwnProperty;var Oa=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fc=(e,t)=>{for(var o in t)ur(e,o,{get:t[o],enumerable:!0})},Rn=(e,t,o,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Rc(t))!Oc.call(e,i)&&i!==o&&ur(e,i,{get:()=>t[i],enumerable:!(n=Pc(t,i))||n.enumerable});return e};var R=(e,t,o)=>(o=e!=null?Dc(Mc(e)):{},Rn(t||!e||!e.__esModule?ur(o,\"default\",{value:e,enumerable:!0}):o,e)),Lc=e=>Rn(ur({},\"__esModule\",{value:!0}),e);var ri=Oa((ug,oi)=>{\"use strict\";var $c=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\";oi.exports=$c});var li=Oa((gg,ii)=>{\"use strict\";var Ic=ri();function ai(){}function ni(){}ni.resetWarningCache=ai;ii.exports=function(){function e(n,i,s,l,d,g){if(g!==Ic){var f=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 f.name=\"Invariant Violation\",f}}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:ni,resetWarningCache:ai};return o.PropTypes=o,o}});var di=Oa((hg,si)=>{\"use strict\";si.exports=li()();var fg,mg});var Uu={};Fc(Uu,{CategoriesFullView:()=>fa,ConversionRateChart:()=>po,ConversionRateFullView:()=>Ro,DATE_RANGE_LABELS:()=>nn,DAYS_MAP:()=>an,DashboardHeader:()=>yo,DataTable:()=>pt,FilterBar:()=>Tc,MysiteDashboardWithNavigation:()=>Kp,MysiteHero:()=>Ea,NsCategoryNavigation:()=>mr,NsProductCard:()=>gr,PageHeader:()=>be,Pagination:()=>ct,PoDashboardWithNavigation:()=>wc,ProductCarousel:()=>zo,ProductOfferDashboard:()=>wa,ProductOfferDashboardTranslationKeys:()=>z,ProductTabCarousel:()=>Ti,ProductsFullView:()=>Po,ShoppingDashboard:()=>Zr,ShoppingDashboardTranslationKeys:()=>r,SignupsChart:()=>Yo,SignupsFullView:()=>ca,StatsCard:()=>kt,TopCategoriesPieChart:()=>Jo,TopPerformingOffersFullView:()=>Ta,TopPerformingOffersPieChart:()=>qo,TopSellingProductsList:()=>so,TranslationProvider:()=>Hp,WidgetMenu:()=>lt,buildDefaultMarketOptions:()=>_a,calculatePercentage:()=>Wl,calculateTotalPages:()=>Za,exportRowsToExcel:()=>Xo,exportTopPerformingOffers:()=>ba,exportTopProducts:()=>xa,formatDateRange:()=>sn,formatDateRangeLabel:()=>Ps,formatDisplayDate:()=>Fr,formatISODate:()=>Lr,formatShortDate:()=>ln,getComparedToText:()=>Dt,getDateRangeLabel:()=>Or,getDaysFromDateRange:()=>Ds,getTranslation:()=>a,getTranslationResolver:()=>Zi,getTrendColor:()=>Bl,getTrendIcon:()=>Ze,mockCategories:()=>Sn,mockConversionData:()=>No,mockOrders:()=>Pa,mockProductOfferStats:()=>fo,mockSignupData:()=>Tn,mockSignupDetails:()=>Dn,mockStats:()=>kn,mockTopOffers:()=>Sc,mockTopProducts:()=>Da,normalizeExcelFileName:()=>bn,normalizeExcelSheetName:()=>yn,paginateItems:()=>qa,resolveMarketOptions:()=>Ua,resolveTranslation:()=>Je,setTranslationResolver:()=>Ho,sortByNumericProperty:()=>Hl,useProductOfferWidgetExports:()=>ya,useTranslation:()=>Wp,useTranslationResolver:()=>uo});module.exports=Lc(Uu);var Vn=require(\"react\"),En=require(\"@nuskin/foundation-ui-components\");var _t=require(\"@nuskin/foundation-theme\"),Mn=(0,_t.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 5px;\n`,On=(0,_t.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`,Fn=(0,_t.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`,Ln=(0,_t.styled)(\"img\")`\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 8px;\n display: block;\n`,Nn=(0,_t.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`,Fa=(0,_t.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=(0,_t.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`,In=(0,_t.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 An=require(\"@mui/material\"),je=require(\"react/jsx-runtime\"),Nc=({productTitle:e,imageDetails:t,className:o,button:n,onCardClick:i,productStatusBadge:s,directSellerBadge:l,mySitePriceComponent:d,testId:g})=>{let[f,u]=(0,Vn.useState)(!1),y=(0,An.useMediaQuery)(\"(max-width: 560px)\"),x=h=>{let T=h.target,F=t?.fallbackImage;F&&T.src!==F&&(T.src=F)};return(0,je.jsxs)(On,{className:o,onClick:i,tabIndex:0,\"data-testid\":\"product-card\",isMobile:y,children:[(0,je.jsx)(Fn,{bgColor:t?.bgColor,onError:x,children:t?.imageSrc?(0,je.jsx)(En.NsImage,{\"data-testid\":g??\"test-product-image\",className:t.className??\"\",src:t.imageSrc,alt:t.imageAlt,\"aria-label\":t.areaLabel??t.imageAlt,width:\"100%\"}):(0,je.jsx)(Ln,{alt:\"\"})}),(0,je.jsx)(Nn,{title:e,\"data-testid\":\"product-title\",children:e}),l&&(0,je.jsx)(Fa,{children:l}),(0,je.jsx)(Fa,{children:s}),(0,je.jsx)(Mn,{children:d}),n?.showButton&&(0,je.jsxs)($n,{tabIndex:0,\"aria-roledescription\":\":\",\"aria-label\":n.buttonText||\"ADD TO CART\",\"data-testid\":\"add-to-cart-button\",disabled:n?.disabled??!1,isMobile:y,isHovered:f,onClick:h=>{h.stopPropagation(),n?.disabled||n.onClick?.()},onMouseEnter:()=>{!y&&!n?.disabled&&u(!0)},onMouseLeave:()=>{y||u(!1)},children:[(0,je.jsx)(In,{className:\"cart-icon\",disabled:n?.disabled,children:(0,je.jsx)(\"svg\",{width:\"24\",height:\"22\",viewBox:\"0 0 24 22\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,je.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\"]})]})},gr=Nc;var Ao=require(\"react\"),Qn=R(require(\"react-slick\")),ei=R(require(\"@mui/material/useMediaQuery\"));var ti=require(\"@nuskin/foundation-ui-components\");var _e=require(\"@nuskin/foundation-theme\"),ho=R(require(\"@mui/material/Box\")),zn=require(\"@nuskin/foundation-ui-components\"),Bn=(0,_e.styled)(ho.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`,Hn=(0,_e.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`,Wn=(0,_e.styled)(\"div\")`\n display: flex;\n scroll-snap-align: start;\n justify-content: center;\n gap: 15px;\n`,_n=(0,_e.styled)(ho.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`,Un=(0,_e.styled)(ho.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`,Kn=(0,_e.styled)(ho.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`,Gn=(0,_e.styled)(ho.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`,og=(0,_e.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`,jn=(0,_e.styled)(zn.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`,Yn=(0,_e.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`,Jn=(0,_e.styled)(\"div\")`\n padding-top: 20px;\n font-size: 20px;\n text-align: center;\n`,Zn=(0,_e.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,qn=(0,_e.styled)(\"div\")`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n`,Xn=(0,_e.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 ke=require(\"react/jsx-runtime\");function zo({entries:e,renderEntry:t,settings:o={},showControlButtons:n=!0,allEntryLabel:i=\"View All\",allEntryLink:s=\"\",categoryName:l,emptyProductMessage:d=\"No Products Available For The Selected Category\",productsCountLabel:g=\"Products\",isInitialDataLoading:f,history:u}){let y=(0,Ao.useRef)(null),x=(0,ei.default)(\"(max-width: 560px)\"),h=(0,Ao.useCallback)(()=>{y.current?.slickPrev()},[]),T=(0,Ao.useCallback)(()=>{y.current?.slickNext()},[]),F=t??((v,M)=>(0,ke.jsx)(gr,{productTitle:v.productTitle,imageDetails:v.imageDetails,button:v.button,onCardClick:v.onCardClick,productStatusBadge:v.productStatusBadge,directSellerBadge:v.directSeller,mySitePriceComponent:v.mySitePriceComponent},`${v.productTitle}-${M}`)),b={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},p=(e?.length??0)>b.slidesToShow,w=()=>e?.length===0&&!f?(0,ke.jsx)(Jn,{children:d}):x?(0,ke.jsx)(Hn,{children:(0,ke.jsx)(Wn,{children:e.map((v,M)=>v&&F(v,M))})}):(0,ke.jsx)(Qn.default,{...b,ref:y,children:e.map((v,M)=>v&&F(v,M))});return(0,ke.jsxs)(Bn,{children:[n&&(0,ke.jsxs)(_n,{children:[(0,ke.jsxs)(Zn,{children:[(0,ke.jsxs)(qn,{children:[(0,ke.jsx)(Kn,{children:(0,ke.jsxs)(jn,{variant:\"body-m\",children:[e?.length??0,\" \",g]})}),!x&&l&&(0,ke.jsx)(Xn,{children:l})]}),(0,ke.jsx)(Un,{$isMobile:x,children:(0,ke.jsx)(Yn,{$disabled:(e?.length??0)===0,onClick:v=>{v.preventDefault(),(e?.length??0)>0&&u&&u.push(s)},children:i})})]}),!x&&(0,ke.jsx)(Gn,{$isDisabled:!p,children:(0,ke.jsx)(ti.NsCarouselControl,{prev:h,next:T,viewAllLabel:\"\",viewAllUrl:\"\"})})]}),w()]})}var Ye=require(\"react\"),vi=require(\"@mui/material\");var ui=R(require(\"react\")),gi=R(require(\"@mui/material/Tabs\")),fi=R(require(\"@mui/material/Tab\")),La=R(require(\"@mui/material/Box\")),fr=R(di());var pi=require(\"@nuskin/foundation-theme\"),ci=pi.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 mi=require(\"@mui/material\"),Ut=require(\"react/jsx-runtime\");function hi(e){let{children:t,value:o,index:n,...i}=e;return(0,Ut.jsx)(\"div\",{role:\"tabpanel\",hidden:o!==n,id:`vertical-tabpanel-${n}`,\"aria-labelledby\":`vertical-tab-${n}`,...i,children:o===n&&(0,Ut.jsx)(La.default,{className:\"tabPanel\",children:t})})}hi.propTypes={children:fr.default.node,index:fr.default.number.isRequired,value:fr.default.number.isRequired};var mr=({itemArray:e,value:t,onChange:o})=>{let[n,i]=ui.useState(0),s=(0,mi.useMediaQuery)(\"(max-width:768px)\"),l=t??n;return(0,Ut.jsx)(ci,{children:(0,Ut.jsxs)(La.default,{className:\"tabContainer\",children:[(0,Ut.jsx)(gi.default,{orientation:s?\"horizontal\":\"vertical\",variant:\"scrollable\",value:l,onChange:(g,f)=>{o?o(g,f):i(f)},\"aria-label\":\"Vertical tabs example\",className:\"tabsStyle\",children:e.map(g=>(0,Ut.jsx)(fi.default,{label:g.label,className:\"tabStyle\"},g.categoryId))}),e.map(g=>(0,Ut.jsx)(hi,{value:l,index:e.findIndex(f=>f.categoryId===g.categoryId),children:g.content},g.categoryId))]})})};var ki=require(\"@nuskin/foundation-ui-components\");var lo=require(\"@nuskin/foundation-theme\"),Vc=({isMobile:e,$hasCategories:t})=>e?\"auto\":t?\"800px\":\"auto\",xi=(0,lo.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: ${Vc};\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`,bi=(0,lo.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`,yi=(0,lo.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`,vg=(0,lo.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`,wi=(0,lo.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`,Ci=(0,lo.styled)(\"div\")`\n padding: 10px;\n display: flex;\n justify-content: center;\n`;var wt=require(\"react/jsx-runtime\"),Ec=({allEntryLabel:e,allEntryLink:t,renderEntry:o,settings:n,showControlButtons:i=!0,fetchCategories:s,fetchProducts:l,showCustomCategory:d=!1,emptyProductTabs:g=\"No tabs available\",emptyProductMessage:f,productsCountLabel:u,getCategoryId:y,history:x})=>{let h=(0,vi.useMediaQuery)(\"(max-width:768px)\"),[T,F]=(0,Ye.useState)(!0),[b,p]=(0,Ye.useState)([]),[w,v]=(0,Ye.useState)(!1),[M,L]=(0,Ye.useState)(0),[N,B]=(0,Ye.useState)([]),[U,q]=(0,Ye.useState)(!1),[V,c]=(0,Ye.useState)(!0),C=(0,Ye.useCallback)(()=>{let m=document.querySelectorAll('[data-testid*=\"spinner\"], .ns-spinner, [class*=\"spinner\"]');c(m.length===0)},[]);(0,Ye.useEffect)(()=>{U&&C()},[U,C]),(0,Ye.useEffect)(()=>{s().then(m=>{p(m),v(!0)})},[s]),(0,Ye.useEffect)(()=>{if(w)if(b.length>0){let m=b[M]?.categoryId;y&&y(m),q(!0),l(m).then(B).finally(()=>{q(!1),F(!1)})}else q(!1)},[b,M,l,w]);let S=b.map(m=>({label:m.label,content:\"\",categoryId:m.categoryId}));return(0,wt.jsxs)(xi,{isMobile:h,$hasCategories:b.length>0,children:[d&&(S.length>0?(0,wt.jsx)(bi,{isMobile:h,children:(0,wt.jsx)(mr,{itemArray:S,value:M,onChange:(m,k)=>L(k)})}):(0,wt.jsx)(wi,{children:g})),(0,wt.jsx)(yi,{isMobile:h,children:U?(0,wt.jsx)(Ci,{children:V&&(0,wt.jsx)(ki.NsSpinner,{})}):(0,wt.jsx)(zo,{isInitialDataLoading:T,entries:N,allEntryLabel:e,allEntryLink:t,renderEntry:o?m=>o({...m,productStatusBadge:m.productStatusBadge}):void 0,settings:n,showControlButtons:i,categoryName:b[M]?.label,emptyProductMessage:f,productsCountLabel:u,history:x})})]})},Ti=Ec;var ht=require(\"react\"),pe=require(\"@mui/material\"),Bo=require(\"@nuskin/foundation-ui-components\");var Ct=require(\"@nuskin/foundation-theme\"),xo=require(\"@mui/material\"),hr=require(\"react/jsx-runtime\"),Na=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"600\",lineHeight:\"16px\",letterSpacing:\"0.12px\",color:e?\"#000000\":\"#FFFFFF\",\"& a\":{color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}}),Di=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"700\",lineHeight:\"16px\",letterSpacing:\"0.48px\",color:e?\"#000000\":\"#FFFFFF\",textTransform:\"uppercase\",paddingLeft:\"5px\"}),Pi=()=>({display:\"flex\",flexDirection:\"row\",gap:\"10px\",alignItems:\"center\"}),Si=e=>({...Na(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\"}}),Ac=e=>({...Di(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\"}}),Ri=(0,Ct.styled)(e=>(0,hr.jsx)(xo.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\":Na(o),\".phone-text\":Na(o),\".social-title-text\":{...Di(o),marginBottom:\"8px\"},\".social-icons\":{...Pi(),paddingBottom:\"8px\"}})),Mi=(0,Ct.styled)(e=>(0,hr.jsx)(xo.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\":Si(o),\".phone-text-mobile\":Si(o),\".social-title-text-mobile\":Ac(o),\".social-icons-mobile\":{...Pi(),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\"}}})),Oi=(0,Ct.styled)(xo.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\"}}),$a=(0,Ct.styled)(e=>(0,hr.jsx)(xo.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\"}})),Fi=(0,Ct.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)\"}}}),Li=(0,Ct.styled)(xo.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`,Ni=(0,Ct.styled)(\"span\")`\n line-height: 0.5;\n`,$i=(0,Ct.styled)(\"a\")({fontSize:\"inherit\",fontFamily:\"inherit\",fontWeight:\"inherit\",lineHeight:\"inherit\",letterSpacing:\"inherit\",color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}),Ia=(0,Ct.styled)(\"span\")({});var Ii=require(\"@mui/material\"),vt=require(\"react/jsx-runtime\"),Vi=({width:e,height:t,backgroundColor:o})=>(0,vt.jsx)(Ii.Box,{sx:{width:e,height:t,display:\"flex\",justifyContent:\"center\",alignItems:\"center\",backgroundColor:o},\"data-testid\":\"placeholder-image\",children:(0,vt.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"128\",height:\"129\",viewBox:\"0 0 128 129\",fill:\"none\",children:(0,vt.jsxs)(\"g\",{id:\"ns_logomark\",children:[(0,vt.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,vt.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,vt.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,vt.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,vt.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 Va=require(\"react/jsx-runtime\"),Ei=({width:e=16,height:t=16,className:o=\"\"})=>(0,Va.jsx)(\"svg\",{width:e,height:t,viewBox:\"0 0 24 24\",fill:\"currentColor\",className:o,\"data-testid\":\"arrow-down-icon\",children:(0,Va.jsx)(\"path\",{d:\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"})});function xr(e){if(typeof window>\"u\")return;let t=window.location.href,o={...e},n=t.includes(\"personal-offer\")?\"postorefront_\":\"mysite_\";o.event=n+e.event;try{window.dataLayer||(console.error(\"GTM dataLayer not available, but event logged\"),window.dataLayer=[]),window.dataLayer.push(o)}catch(i){console.error(\"Failed to track GTM event:\",i)}}var H=require(\"react/jsx-runtime\"),Ai=(e,t,o)=>{let n=o.includes(\"mobile\")?\"placeholder-image-mobile\":\"placeholder-image\";return e?.imageSrc?(0,H.jsx)(Ni,{tabIndex:0,children:(0,H.jsx)(Bo.NsImage,{className:o,src:e.imageSrc,alt:e.imageAlt})}):(0,H.jsx)(pe.Box,{className:n,children:(0,H.jsx)(Vi,{width:o.includes(\"mobile\")?\"144px\":\"246px\",height:o.includes(\"mobile\")?\"144px\":\"246px\",backgroundColor:t?.backgroundColor??\"#5F5F5F\"})})},zi=(e,t,o,n,i)=>{if(!e||!t&&!i)return null;let s=o?\"mobile-badge\":\"tablet-badge\";return(0,H.jsxs)(Oi,{className:o?\"mobile-badges\":\"tablet-badges\",children:[i&&(0,H.jsx)($a,{className:`${s} total-savings-badge`,hasWhiteBackground:n,tabIndex:0,children:(0,H.jsx)(Ia,{className:\"badge-value\",children:i})}),t&&(0,H.jsx)($a,{className:`${s} expiration-badge`,hasWhiteBackground:n,tabIndex:0,children:(0,H.jsx)(Ia,{className:\"badge-value\",children:t})})]})},zc=(e,t,o,n,i)=>{let{shopTitle:s,socialTitleText:l,email:d,showBadges:g,expirationDate:f,phone:u,totalSavings:y}=e;return(0,H.jsxs)(pe.Box,{className:\"content-mobile\",children:[(0,H.jsx)(pe.Typography,{component:\"h1\",tabIndex:s?.trim()?0:-1,className:\"body-title-mobile\",children:s}),!t&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(pe.Typography,{tabIndex:l?.trim()?0:-1,className:\"social-title-text-mobile\",children:l}),d?.trim()&&br(\"email\",d,\"email-text-mobile\"),u?.trim()&&br(\"phone\",u,\"phone-text-mobile\"),(0,H.jsx)(pe.Box,{className:\"social-icons-mobile\",children:o}),zi(g,f??\"\",n,i,y)]})]})},Bc=(e,t,o,n,i)=>{let{shopTitle:s,shopDescription:l,socialTitleText:d,email:g,phone:f,showBadges:u,expirationDate:y,totalSavings:x}=e;return(0,H.jsxs)(pe.Box,{className:\"content\",children:[(0,H.jsx)(pe.Typography,{component:\"h1\",tabIndex:s?.trim()?0:-1,className:\"body-title\",children:s}),!t&&(0,H.jsxs)(H.Fragment,{children:[l?.length>480?(0,H.jsx)(pe.Tooltip,{title:l,arrow:!0,children:(0,H.jsx)(pe.Typography,{tabIndex:l?.trim()?0:-1,className:\"body-text\",children:l})}):(0,H.jsx)(pe.Typography,{tabIndex:l?.trim()?0:-1,className:\"body-text\",children:l}),(0,H.jsxs)(pe.Box,{className:\"social-media\",children:[(0,H.jsx)(pe.Typography,{tabIndex:d?.trim()?0:-1,className:\"social-title-text\",children:d}),(0,H.jsxs)(pe.Box,{className:\"social-icons\",children:[o,g?.trim()&&br(\"email\",g,\"email-text\"),f?.trim()&&br(\"phone\",f,\"phone-text\")]})]}),zi(u,y??\"\",n,i,x)]})]})},Hc=e=>new Promise((t,o)=>{let n=new Image;n.crossOrigin=\"anonymous\",n.src=e,n.onload=()=>{let i=document.createElement(\"canvas\"),s=i.getContext(\"2d\");if(!s)return o(new Error(\"Canvas not supported\"));i.width=n.width,i.height=n.height,s.drawImage(n,0,0);let d=[s.getImageData(0,0,1,1).data,s.getImageData(n.width-1,0,1,1).data,s.getImageData(0,n.height-1,1,1).data,s.getImageData(n.width-1,n.height-1,1,1).data].every(g=>Array.prototype.slice.call(g)[3]<10);t(d)},n.onerror=()=>o(new Error(\"Failed to load image\"))}),Wc=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 n=Number.parseInt(o.substring(0,2),16),i=Number.parseInt(o.substring(2,4),16),s=Number.parseInt(o.substring(4,6),16),l=220;return n>=l&&i>=l&&s>=l},_c=(e,t)=>({onClick:()=>{xr({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`})},onKeyDown:o=>{(o.key===\"Enter\"||o.key===\" \")&&(o.preventDefault(),xr({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`}),globalThis.location.href=`${e===\"email\"?\"mailto\":\"tel\"}:${t}`)}}),br=(e,t,o)=>{let n=e===\"email\"?\"mailto:\":\"tel:\",i=_c(e,t);return(0,H.jsx)(pe.Typography,{className:o,children:(0,H.jsx)($i,{href:`${n}${t}`,...i,children:t})})};function Ea({className:e,shopTitle:t,shopDescription:o,socialTitleText:n,imageDetails:i,email:s,phone:l,bannerProps:d,socialIcons:g,expirationDate:f,showBadges:u=!1,totalSavings:y}){let x=(0,pe.useMediaQuery)(\"(max-width: 560px)\"),[h,T]=(0,ht.useState)(!1),[F,b]=(0,ht.useState)(!1),[p,w]=(0,ht.useState)(!1),[v,M]=(0,ht.useState)(!1),L=()=>{b(!F)};(0,ht.useEffect)(()=>{(async()=>{if(i?.imageSrc){let C=await Hc(i.imageSrc);M(C)}else M(!1)})()},[i?.imageSrc]),(0,ht.useEffect)(()=>{w(Wc(d?.backgroundColor))},[d?.backgroundColor]),(0,ht.useEffect)(()=>{let c,C=window.scrollY,S=!1,m=!1,k=0,E=Q=>{let ft=Date.now();if(S!==Q&&!m){if(ft-k<100)return;m=!0,S=Q,k=ft,Q&&b(!1),clearTimeout(c),T(Q),c=setTimeout(()=>{m=!1,Q&&window.scrollY<15&&window.scrollTo({top:x?20:30,behavior:\"smooth\"})},300)}},oe=()=>{let Q=window.scrollY;if(m){C=Q;return}if(Math.abs(Q-C)<.5)return;let et=Q>C,jt=x?15:25,mo=x?8:12;et&&Q>jt&&!S?E(!0):!et&&Q<mo&&S&&E(!1),C=Q},ge=()=>{let Q=window.scrollY,et=Q>(x?5:10);S=et,T(et),C=Q,k=Date.now()},fe=null,ve=0,We=()=>{fe||Date.now()-ve<16||(fe=requestAnimationFrame(()=>{oe(),ve=Date.now(),fe=null}))};return ge(),window.addEventListener(\"scroll\",We,{passive:!0}),()=>{window.removeEventListener(\"scroll\",We),fe&&cancelAnimationFrame(fe),clearTimeout(c)}},[x]);let N=(0,ht.useMemo)(()=>g?.map((c,C)=>(0,H.jsx)(Li,{onClick:m=>{m.preventDefault(),xr({event:\"social_click\",social_platform:c.type,social_url:c.url,click_element:\"social_icon\"}),window.open(c.url,\"_blank\")},children:(0,H.jsx)(Bo.NsLink,{href:c.url,target:\"_blank\",children:(0,H.jsx)(Bo.NsImage,{src:`https://www.google.com/s2/favicons?domain=${c?.url}&sz=24`,alt:`${c.type} icon`,width:\"24\",height:\"24\"},c?.type+C)})},c?.type+C)),[g]),B=`${e} ${h?\"scrolled\":\"\"}`,U={shopTitle:t,shopDescription:o,socialTitleText:n,email:s,phone:l,showBadges:u,expirationDate:f,totalSavings:y},q=()=>window.innerWidth<=380?50:window.innerWidth<=415?56:window.innerWidth<=460?62:80,V=x&&o&&o.length>q();return x?(0,H.jsxs)(Mi,{className:B,\"data-testid\":\"my-site-shop-header\",bannerProps:d,isCircularImage:v,hasWhiteBackground:p,children:[(0,H.jsxs)(pe.Box,{className:\"image-content-mobile\",children:[Ai(i,d??{},\"bg-image-mobile\"),zc(U,h,N,x,p)]}),!h&&(0,H.jsxs)(pe.Box,{className:\"expandable-description-mobile\",children:[(0,H.jsx)(pe.Typography,{className:`description-content-mobile ${F||!V?\"expanded\":\"collapsed\"}`,children:o}),V&&(0,H.jsx)(Fi,{onClick:L,children:(0,H.jsx)(Ei,{width:16,height:16,className:`arrow-icon-mobile ${F?\"expanded\":\"\"}`})})]})]}):(0,H.jsxs)(Ri,{className:B,\"data-testid\":\"my-site-shop-header\",bannerProps:d,isCircularImage:v,hasWhiteBackground:p,children:[Ai(i,d??{},\"bg-image\"),Bc(U,h,N,x,p)]})}var bo=require(\"@nuskin/foundation-theme\"),Aa=(0,bo.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 16px;\n\n @media (min-width: 768px) {\n gap: 24px;\n padding: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n padding: 24px;\n }\n`,Bi=(0,bo.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`,Hi=(0,bo.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`,za=(0,bo.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`,Wi=(0,bo.styled)(\"div\")`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;var Xi=R(require(\"@mui/icons-material/CalendarMonth\")),Qi=R(require(\"@mui/icons-material/Language\")),el=require(\"@nuskin/foundation-ui-components\");var Ue=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Zt}=Ue.ColorUtils,_i=(0,Ue.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 16px;\n background-color: ${({theme:e})=>Zt(e,\"N20\")};\n border-radius: 12px;\n min-height: auto;\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: 16px 20px;\n gap: 16px;\n }\n\n @media (min-width: 1080px) {\n padding: 16px 24px;\n gap: 20px;\n }\n`,Ui=(0,Ue.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n gap: 12px;\n flex-wrap: wrap;\n`,Ki=(0,Ue.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({theme:e})=>Zt(e,\"N100\")};\n margin: 0;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n\n @media (min-width: 1080px) {\n font-size: 16px;\n }\n`,Gi=(0,Ue.styled)(\"div\")`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({theme:e})=>Zt(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`,ji=(0,Ue.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 24px;\n width: 100%;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`,Ba=(0,Ue.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n`,Ha=(0,Ue.styled)(\"label\")`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: 0 !important;\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n`,xt=(0,Ue.styled)(\"select\")`\n min-width: 120px;\n height: 32px;\n padding: 6px 24px 6px 8px;\n background-color: transparent;\n border: none;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: ${({theme:e})=>Zt(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 white-space: nowrap;\n flex-shrink: 0;\n\n &:hover {\n background-color: ${({theme:e})=>Zt(e,\"N20\")};\n border-radius: 4px;\n }\n\n &:focus {\n background-color: ${({theme:e})=>Zt(e,\"N20\")};\n border-radius: 4px;\n outline: 2px solid ${({theme:e})=>Zt(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 background-position: right 8px center;\n }\n`,Wa=(0,Ue.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({theme:e})=>Zt(e,\"N70\")};\n\n svg {\n font-size: 16px;\n width: 16px;\n height: 16px;\n }\n`,Yi=(0,Ue.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`,Ji=(0,Ue.styled)(\"div\")`\n display: flex;\n flex-wrap: nowrap;\n gap: 24px;\n align-items: center;\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`,Yg=(0,Ue.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n`;var yr;function Ho(e){yr=e}function Zi(){return yr}function Je(e){if(!yr)return e.fallback;let t;try{t=yr(e.key,e.fallback)}catch{t=void 0}return typeof t==\"string\"&&t.length>0?t:e.fallback}var r={title:{key:\"shoppingDashboard.title\",fallback:\"Shop Performance\"},error:{key:\"shoppingDashboard.error\",fallback:\"Error loading dashboard\"},stats:{revenue:{key:\"shoppingDashboard.stats.revenue\",fallback:\"Total Revenue\"},visits:{key:\"shoppingDashboard.stats.visits\",fallback:\"Site Visits\"},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\"}},market:{label:{key:\"shoppingDashboard.filter.market.label\",fallback:\"Market\"},all:{key:\"shoppingDashboard.filter.market.all\",fallback:\"All Markets\"}},productSort:{label:{key:\"shoppingDashboard.filter.productSort.label\",fallback:\"Sort By\"}},signupView:{label:{key:\"shoppingDashboard.filter.signupView.label\",fallback:\"Show\"},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:{standard:{key:\"shoppingDashboard.filter.conversionType.standard\",fallback:\"Standard\"},subscription:{key:\"shoppingDashboard.filter.conversionType.subscription\",fallback:\"Subscription\"}}},widget:{topProducts:{title:{key:\"shoppingDashboard.widget.topProducts.title\",fallback:\"Top Selling Products\"},viewAll:{key:\"shoppingDashboard.widget.topProducts.viewAll\",fallback:\"View All Products\"},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\"},rank:{key:\"shoppingDashboard.widget.topProducts.rank\",fallback:\"Rank\"}},conversionRate:{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\"},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\"},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\"},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.\"}},compareTo:{last7days:{key:\"shoppingDashboard.widget.compareTo.last7days\",fallback:\"compared to this time 7 days ago\"},last30days:{key:\"shoppingDashboard.widget.compareTo.last30days\",fallback:\"compared to this time last month\"},last90days:{key:\"shoppingDashboard.widget.compareTo.last90days\",fallback:\"compared to this time 90 days ago\"},thisMonth:{key:\"shoppingDashboard.widget.compareTo.thisMonth\",fallback:\"compared to this time last month\"}},topCategories:{title:{key:\"shoppingDashboard.widget.topCategories.title\",fallback:\"Top Categories\"},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\"},viewDetails:{key:\"shoppingDashboard.widget.menu.viewDetails\",fallback:\"View Details\"},exportData:{key:\"shoppingDashboard.widget.menu.exportData\",fallback:\"Export Data\"}}},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\"},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\"},customer:{key:\"shoppingDashboard.fullView.conversionRate.columns.customer\",fallback:\"Customer\"},items:{key:\"shoppingDashboard.fullView.conversionRate.columns.items\",fallback:\"Items\"},total:{key:\"shoppingDashboard.fullView.conversionRate.columns.total\",fallback:\"Order Total\"},bv:{key:\"shoppingDashboard.fullView.conversionRate.columns.bv\",fallback:\"BV\"},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\"},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\"},percentOfTotal:{key:\"shoppingDashboard.fullView.categories.columns.percentOfTotal\",fallback:\"% of Total\"}},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:\"--\"},noData:{key:\"shoppingDashboard.defaults.noData\",fallback:\"No data\"},noChange:{key:\"shoppingDashboard.defaults.noChange\",fallback:\"No change\"},byRevenue:{key:\"shoppingDashboard.defaults.byRevenue\",fallback:\"By: Revenue\"},byUnits:{key:\"shoppingDashboard.defaults.byUnits\",fallback:\"By: Units\"},byVolume:{key:\"shoppingDashboard.defaults.byVolume\",fallback:\"By: Volume\"},byTrend:{key:\"shoppingDashboard.defaults.byTrend\",fallback:\"By: Trend\"},all:{key:\"shoppingDashboard.defaults.all\",fallback:\"All\"},members:{key:\"shoppingDashboard.defaults.members\",fallback:\"Members\"},retail:{key:\"shoppingDashboard.defaults.retail\",fallback:\"Retail\"},brandAffiliates:{key:\"shoppingDashboard.defaults.brandAffiliates\",fallback:\"Brand Affiliates\"},revenue:{key:\"shoppingDashboard.defaults.revenue\",fallback:\"Revenue\"},units:{key:\"shoppingDashboard.defaults.units\",fallback:\"Units\"},volume:{key:\"shoppingDashboard.defaults.volume\",fallback:\"Volume\"},conversionRate:{key:\"shoppingDashboard.defaults.conversionRate\",fallback:\"Conversion Rate\"},trend:{key:\"shoppingDashboard.defaults.trend\",fallback:\"Trend\"},date:{key:\"shoppingDashboard.defaults.date\",fallback:\"Date\"},type:{key:\"shoppingDashboard.defaults.type\",fallback:\"Type\"},dcSv:{key:\"shoppingDashboard.defaults.dcSv\",fallback:\"DC-SV\"}}};function a(e){return Je(e)}var qi=require(\"react\");function _a(){return[{value:\"all\",label:a(r.filter.market.all)}]}function Ua(e){return e&&e.length>0?e:_a()}function it(e){return(0,qi.useMemo)(()=>Ua(e),[e])}var ie=require(\"react/jsx-runtime\"),yo=({shopTitle:e,dateRange:t,market:o,dateRangeLabel:n,isLoading:i=!1,stats:s,markets:l,onDateRangeChange:d,onMarketChange:g})=>{let f=it(l),u=T=>{let F=T.target.value;d?.(F)},y=T=>{let F=T.target.value;g?.(F)},x=T=>{T.key===\"Escape\"&&T.target.blur()},h=()=>n||(s?.dateRange?s.dateRange.label:a(r.filter.dateRange.last30days));return(0,ie.jsxs)(_i,{as:\"header\",\"data-testid\":\"dashboard-header\",children:[(0,ie.jsxs)(Ui,{children:[(0,ie.jsx)(Ki,{\"data-testid\":\"dashboard-shop-title\",children:e??s?.shopTitle??a(r.title)}),(0,ie.jsx)(Gi,{\"aria-live\":\"polite\",\"data-testid\":\"dashboard-date-range-label\",children:h()})]}),(0,ie.jsx)(ji,{\"aria-label\":a(r.ariaLabel.dashboardFilters),\"data-testid\":\"dashboard-filters-section\",children:(0,ie.jsxs)(Ji,{children:[i&&(0,ie.jsx)(Yi,{as:\"output\",\"aria-live\":\"polite\",\"aria-label\":a(r.ariaLabel.loadingDashboard),\"data-testid\":\"dashboard-loading-indicator\",children:(0,ie.jsx)(el.NsSpinner,{})}),(0,ie.jsxs)(Ba,{children:[(0,ie.jsx)(Ha,{htmlFor:\"filter-date-range\",children:a(r.filter.dateRange.label)}),(0,ie.jsx)(Wa,{\"aria-hidden\":\"true\",children:(0,ie.jsx)(Xi.default,{})}),(0,ie.jsxs)(xt,{id:\"filter-date-range\",\"data-testid\":\"filter-date-range\",value:t,onChange:u,onKeyDown:x,disabled:i,\"aria-label\":`${a(r.ariaLabel.dateRangeFilter)} ${a(r.filter.dateRange[t])}`,children:[(0,ie.jsx)(\"option\",{value:\"last7days\",children:a(r.filter.dateRange.last7days)}),(0,ie.jsx)(\"option\",{value:\"last30days\",children:a(r.filter.dateRange.last30days)}),(0,ie.jsx)(\"option\",{value:\"last90days\",children:a(r.filter.dateRange.last90days)}),(0,ie.jsx)(\"option\",{value:\"thisMonth\",children:a(r.filter.dateRange.thisMonth)})]})]}),(0,ie.jsxs)(Ba,{children:[(0,ie.jsx)(Ha,{htmlFor:\"filter-market\",children:a(r.filter.market.label)}),(0,ie.jsx)(Wa,{\"aria-hidden\":\"true\",children:(0,ie.jsx)(Qi.default,{})}),(0,ie.jsx)(xt,{id:\"filter-market\",\"data-testid\":\"filter-market\",value:o,onChange:y,onKeyDown:x,disabled:i,\"aria-label\":`${a(r.ariaLabel.marketFilter)} ${f.find(T=>T.value===o)?.label??String(o)}`,children:f.map(T=>(0,ie.jsx)(\"option\",{value:T.value,children:T.label},T.value))})]})]})})]})};var Nl=R(require(\"react\")),$l=R(require(\"@mui/icons-material/ShowChart\")),Il=R(require(\"@mui/icons-material/TrendingUp\")),Vl=R(require(\"@mui/icons-material/TrendingDown\"));var Te=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Kt}=Te.ColorUtils,wr=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n box-sizing: border-box;\n gap: ${({$layout:e})=>e===\"split\"?\"8px\":\"0\"};\n padding: ${({$layout:e})=>e===\"split\"?\"12px\":\"10px\"};\n background-color: ${({theme:e})=>Kt(e,\"N20\")};\n border: 1px solid ${({theme:e})=>Kt(e,\"N30\")};\n border-radius: 8px;\n min-height: ${({$layout:e})=>e===\"split\"?\"110px\":\"auto\"};\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\"?\"16px\":\"12px\"};\n min-height: ${({$layout:e})=>e===\"split\"?\"110px\":\"auto\"};\n }\n\n @media (min-width: 1080px) {\n padding: ${({$layout:e})=>e===\"split\"?\"16px\":\"14px\"};\n min-height: ${({$layout:e})=>e===\"split\"?\"110px\":\"auto\"};\n }\n`,tl=(0,Te.styled)(\"div\")`\n width: 100%;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>Kt(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,ol=(0,Te.styled)(\"div\")`\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n`,rl=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n gap: 2px;\n`,al=(0,Te.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\":Kt(e,\"N70\")};\n\n svg {\n width: 24px;\n height: 24px;\n }\n`,nl=(0,Te.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})=>Kt(e,\"N70\")};\n`,il=(0,Te.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.2;\n letter-spacing: 0;\n color: ${({theme:e})=>Kt(e,\"N100\")};\n margin-bottom: 2px;\n text-transform: capitalize;\n\n @media (min-width: 768px) {\n font-size: 14px;\n margin-bottom: 4px;\n }\n\n @media (min-width: 1080px) {\n font-size: 14px;\n }\n`,ll=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n justify-content: space-between;\n gap: 2px;\n margin-top: 10px;\n width: 100%;\n`,Ka=(0,Te.styled)(\"div\")`\n font-size: 20px;\n font-weight: 700;\n line-height: 1;\n color: ${({theme:e})=>Kt(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 24px;\n }\n\n @media (min-width: 1080px) {\n font-size: 28px;\n }\n`,sl=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n`,dl=(0,Te.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n color: ${({theme:e})=>Kt(e,\"N70\")};\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`,pl=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: row;\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\":Kt(e,\"N70\")};\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n @media (min-width: 768px) {\n font-size: 14px;\n\n svg {\n width: 18px;\n height: 18px;\n }\n }\n`,nf=(0,Te.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n`,Ga=(0,Te.styled)(\"span\")`\n white-space: nowrap;\n`,cl=(0,Te.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;var te=R(require(\"@mui/material/Skeleton\"));var X=require(\"@nuskin/foundation-theme\"),wo=R(require(\"@mui/material/Skeleton\")),Cr=(0,X.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`,vr=(0,X.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`,ul=(0,X.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`,gl=(0,X.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`,fl=(0,X.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`,ml=(0,X.styled)(\"div\")`\n margin-top: 8px;\n`,hl=(0,X.styled)(wo.default)`\n margin-top: 4px;\n`,xl=(0,X.styled)(\"div\")`\n flex: 1;\n min-width: 0;\n`,bl=(0,X.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n`,yl=(0,X.styled)(\"div\")`\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 16px;\n`,wl=(0,X.styled)(\"div\")`\n padding-top: 4px;\n`,Cl=(0,X.styled)(wo.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`,vl=(0,X.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`,kl=(0,X.styled)(wo.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`,Tl=(0,X.styled)(\"div\")`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n`,Sl=(0,X.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n`,Dl=(0,X.styled)(\"div\")`\n flex: 1;\n`,Uc=(0,X.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`,Kc=(0,X.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n`,Gc=(0,X.styled)(\"div\")`\n display: flex;\n gap: 16px;\n`,jc=(0,X.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`,Yc=(0,X.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`,ja=(0,X.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 24px;\n`,Pl=(0,X.styled)(\"div\")`\n padding: 24px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n`,Rl=(0,X.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px 0;\n gap: 8px;\n`,Ml=(0,X.styled)(wo.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`,Ya=(0,X.styled)(\"div\")`\n padding: 20px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n`,kr=(0,X.styled)(wo.default)`\n border-radius: 4px;\n`,Ol=(0,X.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 D=require(\"react/jsx-runtime\"),Wo=()=>(0,D.jsxs)(gl,{\"data-testid\":\"skeleton-stats-card\",children:[(0,D.jsxs)(fl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:80,height:18}),(0,D.jsx)(te.default,{variant:\"text\",width:48,height:16})]}),(0,D.jsxs)(ml,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:120,height:36}),(0,D.jsx)(hl,{variant:\"text\",width:100,height:16})]})]}),Jc=()=>(0,D.jsxs)(ul,{children:[(0,D.jsx)(te.default,{variant:\"rounded\",width:28,height:28}),(0,D.jsx)(te.default,{variant:\"rounded\",width:50,height:50}),(0,D.jsxs)(xl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:\"70%\",height:18}),(0,D.jsx)(te.default,{variant:\"text\",width:\"50%\",height:14})]}),(0,D.jsxs)(bl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:80,height:18}),(0,D.jsx)(te.default,{variant:\"text\",width:48,height:14})]})]}),Fl=()=>(0,D.jsxs)(Cr,{\"data-testid\":\"skeleton-products-list\",children:[(0,D.jsxs)(vr,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:160,height:22}),(0,D.jsx)(te.default,{variant:\"rounded\",width:100,height:32})]}),[\"product-1\",\"product-2\",\"product-3\",\"product-4\",\"product-5\"].map(e=>(0,D.jsx)(Jc,{},e))]}),Tr=()=>(0,D.jsxs)(Cr,{\"data-testid\":\"skeleton-chart-widget\",children:[(0,D.jsxs)(vr,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:140,height:22}),(0,D.jsx)(te.default,{variant:\"rounded\",width:110,height:32})]}),(0,D.jsxs)(yl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:100,height:36}),(0,D.jsxs)(wl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:60,height:18}),(0,D.jsx)(te.default,{variant:\"text\",width:140,height:14})]})]}),(0,D.jsx)(Cl,{variant:\"rounded\",width:\"100%\"})]}),Zc=()=>(0,D.jsxs)(Sl,{children:[(0,D.jsx)(te.default,{variant:\"circular\",width:12,height:12}),(0,D.jsxs)(Dl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:\"60%\",height:16}),(0,D.jsx)(te.default,{variant:\"text\",width:\"40%\",height:14})]}),(0,D.jsx)(te.default,{variant:\"text\",width:36,height:18})]}),Sr=()=>(0,D.jsxs)(Cr,{\"data-testid\":\"skeleton-categories-pie\",children:[(0,D.jsxs)(vr,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:140,height:22}),(0,D.jsx)(te.default,{variant:\"rounded\",width:100,height:32})]}),(0,D.jsxs)(vl,{children:[(0,D.jsx)(kl,{variant:\"circular\"}),(0,D.jsx)(Tl,{children:[\"legend-1\",\"legend-2\",\"legend-3\",\"legend-4\",\"legend-5\"].map(e=>(0,D.jsx)(Zc,{},e))})]})]});var qt=()=>(0,D.jsxs)(ja,{\"data-testid\":\"skeleton-fullview-chart\",children:[(0,D.jsxs)(Pl,{children:[(0,D.jsxs)(Rl,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:140,height:52}),(0,D.jsx)(te.default,{variant:\"text\",width:80,height:24}),(0,D.jsx)(te.default,{variant:\"text\",width:160,height:16})]}),(0,D.jsx)(Ml,{variant:\"rounded\",width:\"100%\"})]}),(0,D.jsxs)(Ya,{children:[(0,D.jsx)(te.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,D.jsx)(kr,{variant:\"rounded\",width:\"100%\",height:44},e))]})]}),Ll=()=>(0,D.jsxs)(ja,{\"data-testid\":\"skeleton-fullview-table\",children:[(0,D.jsxs)(Ol,{children:[(0,D.jsx)(Wo,{}),(0,D.jsx)(Wo,{}),(0,D.jsx)(Wo,{})]}),(0,D.jsxs)(Ya,{children:[(0,D.jsx)(te.default,{variant:\"text\",width:200,height:24}),(0,D.jsx)(kr,{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,D.jsx)(kr,{variant:\"rounded\",width:\"100%\",height:44},e))]})]});var se=require(\"react/jsx-runtime\"),qc=({title:e,value:t,subtitle:o,caption:n,layout:i=\"default\",trendDirection:s=\"neutral\",trendValue:l,testId:d,isLoading:g=!1})=>{if(g)return(0,se.jsx)(wr,{$layout:i,\"data-testid\":d,children:(0,se.jsx)(Wo,{})});let f=()=>{let y=a(r.stats.trend.unchanged);return s===\"up\"?y=a(r.stats.trend.increased):s===\"down\"&&(y=a(r.stats.trend.decreased)),`${e} ${y} ${l??\"\"}`},u=y=>s===\"up\"?(0,se.jsx)(Il.default,{sx:{fontSize:y},\"aria-hidden\":\"true\"}):s===\"down\"?(0,se.jsx)(Vl.default,{sx:{fontSize:y},\"aria-hidden\":\"true\"}):(0,se.jsx)($l.default,{sx:{fontSize:y},\"aria-hidden\":\"true\"});return i===\"split\"?(0,se.jsxs)(wr,{as:\"article\",$layout:\"split\",\"aria-label\":`${e}: ${t}`,\"data-testid\":d,children:[(0,se.jsx)(tl,{id:`stats-title-${d}`,children:e}),(0,se.jsxs)(ol,{children:[(0,se.jsx)(Ka,{\"aria-describedby\":`stats-title-${d}`,\"data-testid\":`stats-value-${d}`,children:t}),(l??n)&&(0,se.jsxs)(rl,{children:[l&&(0,se.jsxs)(al,{as:\"output\",direction:s,\"aria-live\":\"polite\",\"aria-label\":f(),\"data-testid\":`stats-trend-${d}`,children:[u(\"18px\"),(0,se.jsx)(Ga,{children:l})]}),n&&(0,se.jsx)(nl,{\"data-testid\":`stats-caption-${d}`,children:n})]})]})]}):(0,se.jsxs)(wr,{as:\"article\",\"aria-label\":`${e}: ${t}`,\"data-testid\":d,children:[(0,se.jsx)(cl,{children:(0,se.jsx)(il,{id:`stats-title-${d}`,children:e})}),(0,se.jsxs)(ll,{children:[(0,se.jsxs)(sl,{children:[(0,se.jsx)(Ka,{\"aria-describedby\":`stats-title-${d}`,\"data-testid\":`stats-value-${d}`,children:t}),o&&(0,se.jsx)(dl,{\"aria-label\":`${e} ${a(r.stats.details)}: ${o}`,\"data-testid\":`stats-subtitle-${d}`,children:o})]}),l&&(0,se.jsxs)(pl,{as:\"output\",direction:s,\"aria-live\":\"polite\",\"aria-label\":f(),\"data-testid\":`stats-trend-${d}`,children:[u(\"16px\"),(0,se.jsx)(Ga,{children:l})]})]})]})},kt=Nl.default.memo(qc);kt.displayName=\"StatsCard\";var cs=R(require(\"react\")),us=R(require(\"@mui/icons-material/ShoppingCart\"));var El=R(require(\"@mui/icons-material/ArrowUpward\")),Al=R(require(\"@mui/icons-material/ArrowDownward\")),zl=R(require(\"@mui/icons-material/Remove\"));var _o=require(\"react/jsx-runtime\");function Dr(e){if(!e)return null;let t=e.replace(\"%\",\"\").trim(),o=Number(t);return Number.isFinite(o)?o:null}function Tt(e){let t=Dr(e);return t===null?\"neutral\":t>0?\"up\":t<0?\"down\":\"neutral\"}function Xt(e,t,o){let{weightedSum:n,weight:i}=e.reduce((d,g)=>{let f=Dr(o(g));return f===null?d:{weightedSum:d.weightedSum+f*t(g),weight:d.weight+t(g)}},{weightedSum:0,weight:0}),s=i>0?n/i:0,l=\"neutral\";return s>0?l=\"up\":s<0&&(l=\"down\"),{direction:l,formatted:`${s>0?\"+\":\"\"}${s.toFixed(1)}%`}}function Co(e){return e===\"up\"?a(r.stats.trend.increased):e===\"down\"?a(r.stats.trend.decreased):a(r.stats.trend.unchanged)}function Ze(e){switch(e){case\"up\":return(0,_o.jsx)(El.default,{});case\"down\":return(0,_o.jsx)(Al.default,{});case\"neutral\":default:return(0,_o.jsx)(zl.default,{})}}function Bl(e){switch(e){case\"up\":return\"#4caf50\";case\"down\":return\"#f44336\";case\"neutral\":default:return\"#757575\"}}function Pr(e,t){let{cx:o,cy:n,midAngle:i,innerRadius:s,outerRadius:l,percentage:d}=e,g=Math.PI/180,f=s+(l-s)/2,u=o+f*Math.cos(-i*g),y=n+f*Math.sin(-i*g);return(0,_o.jsx)(\"text\",{x:u,y,fill:\"white\",textAnchor:\"middle\",dominantBaseline:\"middle\",fontSize:t?.fontSize??\"10\",fontWeight:t?.fontWeight??\"600\",fontFamily:\"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",letterSpacing:\"0.2\",children:`${d}%`})}var Ja=require(\"react\");function Za(e,t){return Math.ceil(e.length/t)}function qa(e,t,o){let n=(t-1)*o,i=n+o;return e.slice(n,i)}function Hl(e,t,o=\"desc\"){return[...e].sort((n,i)=>{let s=n[t],l=i[t];return o===\"asc\"?s-l:l-s})}function Wl(e,t,o=1){return t===0?\"0.0\":(e/t*100).toFixed(o)}function St(e,t,o){let n=(0,Ja.useMemo)(()=>Za(e,o),[e,o]),i=(0,Ja.useMemo)(()=>qa(e,t,o),[e,t,o]);return{totalPages:n,pageItems:i}}function J(e,t,o=\"en-US\",n){let i=Number.isFinite(e)?e:0;if(t)try{return new Intl.NumberFormat(o,{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()}`}function Uo(e){return!e||e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function Qt(e,t){switch(t){case\"members\":return e.members;case\"retail\":return e.retail;case\"brandAffiliates\":return e.brandAffiliates;case\"all\":default:return e.total}}var me=require(\"@nuskin/foundation-theme\"),{getGenomeColor:de}=me.ColorUtils,Rr=(0,me.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 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`,Xa=(0,me.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,_l=(0,me.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Qa=(0,me.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,bf=(0,me.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`,Ul=(0,me.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`,Kl=(0,me.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background-color: ${({theme:e})=>de(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})=>de(e,\"N40\")};\n }\n\n &:hover {\n background-color: ${({theme:e})=>de(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`,Gl=(0,me.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})=>de(e,\"A10\")};\n color: ${({theme:e})=>de(e,\"A80\")};\n border-radius: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n vertical-align: middle;\n\n @media (min-width: 768px) {\n min-width: 28px;\n height: 28px;\n font-size: 16px;\n }\n`,jl=(0,me.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`,Yl=(0,me.styled)(\"div\")`\n width: 40px;\n height: 40px;\n border-radius: 8px;\n background-color: ${({theme:e})=>de(e,\"N40\")};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({theme:e})=>de(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`,Jl=(0,me.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex-grow: 1;\n min-width: 0;\n`,Zl=(0,me.styled)(\"div\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({theme:e})=>de(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: 16px;\n max-width: none;\n }\n`,ql=(0,me.styled)(\"div\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>de(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`,Xl=(0,me.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n`,Ql=(0,me.styled)(\"div\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 1.2;\n color: ${({theme:e})=>de(e,\"N100\")};\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`,es=(0,me.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 11px;\n font-weight: 500;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#22C55E\":t===\"down\"?\"#DC2626\":de(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`,ts=(0,me.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})=>de(e,\"N70\")};\n\n svg {\n width: 48px;\n height: 48px;\n color: ${({theme:e})=>de(e,\"N50\")};\n }\n`,os=(0,me.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>de(e,\"N70\")};\n`;var is=require(\"react\"),ls=R(require(\"@mui/material/Menu\")),en=R(require(\"@mui/material/MenuItem\")),tn=R(require(\"@mui/material/ListItemIcon\")),on=R(require(\"@mui/material/ListItemText\")),ss=R(require(\"@mui/icons-material/MoreVert\")),ds=R(require(\"@mui/icons-material/Visibility\")),ps=R(require(\"@mui/icons-material/FileDownload\"));var as=R(require(\"@mui/material/IconButton\")),Mr=require(\"@nuskin/foundation-theme\"),{getGenomeColor:rs}=Mr.ColorUtils,ns=(0,Mr.styled)(as.default)(({theme:e})=>({padding:\"4px\",color:rs(e,\"N100\"),\"&:hover\":{backgroundColor:rs(e,\"N20\")}}));var Be=require(\"react/jsx-runtime\"),lt=({widgetId:e,onFullView:t,onExport:o})=>{let[n,i]=(0,is.useState)(null),s=!!n,l=`widget-menu-button-${e}`,d=`widget-menu-${e}`,g=x=>{i(x.currentTarget)},f=()=>{i(null)},u=()=>{f(),t&&t()},y=()=>{f(),o&&o()};return(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(ns,{id:l,\"data-testid\":`widget-menu-button-${e}`,\"aria-label\":a(r.widget.menu.ariaLabel),\"aria-controls\":s?d:void 0,\"aria-haspopup\":\"true\",\"aria-expanded\":s?\"true\":void 0,onClick:g,size:\"small\",children:(0,Be.jsx)(ss.default,{fontSize:\"small\"})}),(0,Be.jsxs)(ls.default,{id:d,\"data-testid\":`widget-menu-${e}`,anchorEl:n,open:s,onClose:f,MenuListProps:{\"aria-labelledby\":l},anchorOrigin:{vertical:\"bottom\",horizontal:\"right\"},transformOrigin:{vertical:\"top\",horizontal:\"right\"},children:[(0,Be.jsxs)(en.default,{onClick:u,\"data-testid\":\"widget-menu-item-viewdetails\",children:[(0,Be.jsx)(tn.default,{children:(0,Be.jsx)(ds.default,{fontSize:\"small\"})}),(0,Be.jsx)(on.default,{children:a(r.widget.menu.viewDetails)})]}),o&&(0,Be.jsxs)(en.default,{onClick:y,\"data-testid\":\"widget-menu-item-export\",children:[(0,Be.jsx)(tn.default,{children:(0,Be.jsx)(ps.default,{fontSize:\"small\"})}),(0,Be.jsx)(on.default,{children:a(r.widget.menu.exportData)})]})]})]})};var Z=require(\"react/jsx-runtime\"),Xc=({products:e,productSort:t,isLoading:o=!1,maxProducts:n=5,onSortChange:i,onTitleClick:s,onExport:l})=>{let d=b=>{let p=b.target.value;i?.(p)},g=(b,p)=>{switch(p){case\"units\":return`${b.unitsSold.toLocaleString()} ${a(r.widget.topProducts.unitsSuffix)}`;case\"revenue\":return J(b.revenue,b.currencyCode);case\"volume\":return`${b.volume.toLocaleString()} ${a(r.defaults.dcSv)}`;default:return`${b.unitsSold.toLocaleString()} ${a(r.widget.topProducts.unitsSuffix)}`}},f=(b,p)=>{switch(p){case\"units\":return`${J(b.revenue,b.currencyCode)} ${a(r.widget.topProducts.revenueSuffix)}`;case\"revenue\":return`${b.unitsSold.toLocaleString()} ${a(r.widget.topProducts.unitsSuffix)}`;case\"volume\":return`${J(b.revenue,b.currencyCode)} ${a(r.widget.topProducts.revenueSuffix)}`;default:return`${J(b.revenue,b.currencyCode)} ${a(r.widget.topProducts.revenueSuffix)}`}},u=(b,p)=>{let w=b.trend;if(!w)return\"\";let v=\"\";switch(p){case\"units\":v=w.units??\"\";break;case\"revenue\":v=w.revenue??\"\";break;case\"volume\":v=w.volume??\"\";break;default:v=w.units??\"\"}return v},y=(b,p)=>{let w=u(b,p);return Tt(w)},x=b=>Ze(b),h=e.slice(0,n),T=a(r.widget.topProducts.rank),F=a(r.defaults.trend);return o&&e.length===0?(0,Z.jsx)(Rr,{\"data-testid\":\"widget-top-products\",children:(0,Z.jsx)(Fl,{})}):e.length===0?(0,Z.jsxs)(Rr,{\"data-testid\":\"widget-top-products\",children:[(0,Z.jsx)(Xa,{children:(0,Z.jsx)(Qa,{children:a(r.widget.topProducts.title)})}),(0,Z.jsxs)(ts,{\"data-testid\":\"products-empty-state\",children:[(0,Z.jsx)(us.default,{}),(0,Z.jsx)(os,{children:a(r.widget.topProducts.empty)})]})]}):(0,Z.jsxs)(Rr,{as:\"section\",\"data-testid\":\"widget-top-products\",\"aria-label\":a(r.widget.topProducts.ariaLabel),children:[(0,Z.jsxs)(Xa,{children:[(0,Z.jsx)(Qa,{as:\"button\",onClick:s,\"aria-label\":a(r.widget.topProducts.titleAriaLabel),\"data-testid\":\"widget-title-top-products\",children:a(r.widget.topProducts.title)}),(0,Z.jsxs)(_l,{children:[(0,Z.jsxs)(xt,{id:\"product-sort\",\"data-testid\":\"product-sort-dropdown\",value:t,onChange:d,disabled:o,\"aria-label\":a(r.widget.topProducts.sortAriaLabel),children:[(0,Z.jsx)(\"option\",{value:\"units\",children:a(r.defaults.byUnits)}),(0,Z.jsx)(\"option\",{value:\"revenue\",children:a(r.defaults.byRevenue)}),(0,Z.jsx)(\"option\",{value:\"volume\",children:a(r.defaults.byVolume)})]}),(0,Z.jsx)(lt,{widgetId:\"top-products\",onFullView:s,onExport:l})]})]}),(0,Z.jsx)(Ul,{as:\"ul\",\"data-testid\":\"products-list\",children:h.map((b,p)=>{let w=y(b,t),v=u(b,t);return(0,Z.jsxs)(Kl,{as:\"li\",\"data-testid\":`product-item-${p}`,\"aria-label\":`${T} ${b.rank}: ${b.name}, ${g(b,t)}`,children:[(0,Z.jsx)(Gl,{\"aria-label\":`${T} ${b.rank}`,children:b.rank}),b.imageUrl?(0,Z.jsx)(jl,{src:b.imageUrl,alt:b.name,loading:\"lazy\",onError:M=>{M.currentTarget.hidden=!0}}):(0,Z.jsx)(Yl,{\"aria-label\":a(r.widget.topProducts.noImageAriaLabel),children:b.name.substring(0,2).toUpperCase()}),(0,Z.jsxs)(Jl,{children:[(0,Z.jsx)(Zl,{title:b.name,children:b.name}),(0,Z.jsx)(ql,{children:f(b,t)})]}),(0,Z.jsxs)(Xl,{children:[(0,Z.jsx)(Ql,{children:g(b,t)}),v&&(0,Z.jsxs)(es,{as:\"output\",direction:w,\"aria-live\":\"polite\",\"aria-label\":`${F}: ${Co(w)} ${v}`,children:[x(w),(0,Z.jsx)(\"span\",{children:v})]})]})]},b.id)})})]})},so=cs.default.memo(Xc);so.displayName=\"TopSellingProductsList\";var vo=R(require(\"react\")),qe=require(\"recharts\");var Se=require(\"@nuskin/foundation-theme\"),{getGenomeColor:he}=Se.ColorUtils,rn=(0,Se.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\n @media (min-width: 1080px) {\n padding: 24px;\n }\n`,gs=(0,Se.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,fs=(0,Se.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,ms=(0,Se.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,hs=(0,Se.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,Nf=(0,Se.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\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`,xs=(0,Se.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`,bs=(0,Se.styled)(\"div\")`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({theme:e})=>he(e,\"N100\")};\n margin: 0;\n padding: 0;\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`,ys=(0,Se.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#DC2626\":he(e,\"N70\")};\n\n svg {\n width: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>he(e,\"N70\")};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\n }\n`,ws=(0,Se.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({theme:e})=>he(e,\"N100\")};\n margin-bottom: 8px;\n margin-top: 0;\n letter-spacing: 0.12px;\n`,Cs=(0,Se.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})=>he(e,\"N40\")};\n stroke-width: 1px;\n }\n\n .recharts-text {\n fill: ${({theme:e})=>he(e,\"N70\")};\n font-size: 10px;\n }\n\n .recharts-tooltip-wrapper {\n z-index: 100;\n }\n`,vs=(0,Se.styled)(\"div\")`\n background-color: ${({theme:e})=>he(e,\"N100\")};\n border: 1px solid ${({theme:e})=>he(e,\"N40\")};\n border-radius: 6px;\n padding: 8px 12px;\n box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.15);\n`,ks=(0,Se.styled)(\"div\")`\n font-size: 11px;\n font-weight: 600;\n color: ${({theme:e})=>he(e,\"N10\")};\n margin-bottom: 4px;\n`,Ts=(0,Se.styled)(\"div\")`\n font-size: 13px;\n font-weight: 700;\n color: ${({theme:e})=>he(e,\"A10\")};\n`,Ss=(0,Se.styled)(\"div\")`\n font-size: 10px;\n font-weight: 400;\n color: ${({theme:e})=>he(e,\"N30\")};\n margin-top: 2px;\n`;var st=\"last30days\",an={last7days:7,last30days:30,last90days:90,thisMonth:31},nn={last7days:\"Last 7 Days\",last30days:\"Last 30 Days\",last90days:\"Last 90 Days\",thisMonth:\"This Month\"};function Ds(e){return an[e]??30}function Or(e){return nn[e]??\"Last 30 Days\"}function Ps(e){return Or(e)}function ln(e){return`${[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"][e.getMonth()]} ${e.getDate()}`}var Qc={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 Nr(e){let t=e.split(\" \");return t.length!==2?e:`${Qc[t[0]]||t[0]}/${t[1]}`}function Fr(e){let t=new Date(e);return ln(t)}function sn(e,t){return`${Fr(e)} - ${Fr(t)}`}function Lr(e){return e.toISOString().split(\"T\")[0]}function De(e){let t=new Date,o=t.getFullYear(),n=t.getMonth(),i=t.getDate(),s,l=new Date(o,n,i);switch(e){case\"last7days\":s=new Date(o,n,i-7);break;case\"last30days\":s=new Date(o,n,i-30);break;case\"last90days\":s=new Date(o,n,i-90);break;case\"thisMonth\":s=new Date(o,n,1),l=new Date(o,n+1,0);break;default:return\"N/A\"}return sn(Lr(s),Lr(l))}function Dt(e){let t=r.widget.compareTo;switch(e){case\"last7days\":return Je(t.last7days);case\"last30days\":return Je(t.last30days);case\"last90days\":return Je(t.last90days);case\"thisMonth\":return Je(t.thisMonth);default:return Je(t.last30days)}}var W=require(\"react/jsx-runtime\"),eu={top:5,right:10,left:-10,bottom:5},Rs={fontSize:10},tu=e=>{let{cx:t,cy:o,r:n=3}=e;return(0,W.jsx)(\"circle\",{cx:t,cy:o,r:n,fill:\"#FFFFFF\",fillOpacity:\"0\",stroke:\"#3B82F6\",strokeWidth:\"2\",style:{pointerEvents:\"none\"}})},ou=e=>{let{cx:t,cy:o,r:n=5}=e;return(0,W.jsx)(\"circle\",{cx:t,cy:o,r:n,fill:\"#FFFFFF\",fillOpacity:\"0\",stroke:\"#3B82F6\",strokeWidth:\"2\",style:{pointerEvents:\"none\"}})},ru=e=>`${e}%`,au=({active:e,payload:t})=>{if(!e||!t?.length)return null;let o=t[0].payload;return(0,W.jsxs)(vs,{children:[(0,W.jsx)(ks,{children:o.date}),(0,W.jsxs)(Ts,{children:[(o.rate??0).toFixed(2),\"%\"]}),(0,W.jsxs)(Ss,{children:[o.orders??0,\" \",a(r.widget.conversionRate.tooltipOrders),\" /\",\" \",(o.siteVisits??0).toLocaleString(),\" \",a(r.widget.conversionRate.tooltipVisits)]})]})},nu=({conversionData:e,conversionFilter:t,dateRange:o=st,isLoading:n=!1,title:i,summaryRate:s,summaryChangePct:l,onFilterChange:d,onTitleClick:g,onExport:f})=>{let u=vo.default.useCallback(p=>{let w=p.target.value;d?.(w)},[d]),y=a(r.defaults.noData),x=a(r.defaults.noChange),h=vo.default.useMemo(()=>typeof s==\"number\"&&Number.isFinite(s)?s:e.at(-1)?.rate??0,[s,e]),T=vo.default.useMemo(()=>{if(l!==void 0){if(l===null||Math.abs(l)<.1)return{direction:\"neutral\",value:x};let B=l>0?\"up\":\"down\",U=`${l>0?\"+\":\"\"}${l.toFixed(2)}%`;return{direction:B,value:U}}if(e.length<2)return{direction:\"neutral\",value:y};let p=e.at(-1)?.rate??0,w=e[0].rate;if(w===0)return{direction:\"neutral\",value:x};let v=p-w,M=v/w*100;if(Math.abs(M)<.1)return{direction:\"neutral\",value:x};let L=v>0?\"up\":\"down\",N=`${v>0?\"+\":\"\"}${v.toFixed(2)}%`;return{direction:L,value:N}},[l,e,x,y]),F=vo.default.useMemo(()=>e.map(p=>({...p,shortDate:Nr(p.date)})),[e]);if(n&&e.length===0)return(0,W.jsx)(rn,{\"data-testid\":\"widget-conversion-rate\",children:(0,W.jsx)(Tr,{})});let b=a(r.widget.conversionRate.chartAriaLabel);return(0,W.jsxs)(rn,{as:\"section\",\"data-testid\":\"widget-conversion-rate\",\"aria-label\":b,children:[(0,W.jsx)(gs,{children:(0,W.jsxs)(fs,{children:[(0,W.jsx)(hs,{as:\"button\",onClick:g,\"aria-label\":a(r.widget.conversionRate.titleAriaLabel),\"data-testid\":\"widget-title-conversion-rate\",children:i??a(r.defaults.conversionRate)}),(0,W.jsxs)(ms,{children:[(0,W.jsxs)(xt,{id:\"conversion-filter\",\"data-testid\":\"conversion-filter-dropdown\",value:t,onChange:u,disabled:n,\"aria-label\":a(r.widget.conversionRate.filterAriaLabel),children:[(0,W.jsx)(\"option\",{value:\"all\",children:a(r.defaults.all)}),(0,W.jsx)(\"option\",{value:\"standard\",children:a(r.filter.conversionType.standard)}),(0,W.jsx)(\"option\",{value:\"subscription\",children:a(r.filter.conversionType.subscription)})]}),(0,W.jsx)(lt,{widgetId:\"conversion-rate\",onFullView:g,onExport:f})]})]})}),(0,W.jsxs)(xs,{children:[(0,W.jsxs)(bs,{\"aria-label\":`${a(r.defaults.conversionRate)}: ${h.toFixed(2)}%`,\"data-testid\":\"conversion-metric-value\",children:[h.toFixed(2),\"%\"]}),T.value!==y&&(0,W.jsxs)(ys,{as:\"output\",direction:T.direction,\"aria-live\":\"polite\",\"aria-label\":`${Co(T.direction)} ${T.value}`,\"data-testid\":\"conversion-metric-trend\",children:[(0,W.jsxs)(\"div\",{className:\"trend-line\",children:[(0,W.jsx)(\"span\",{\"aria-hidden\":\"true\",children:Ze(T.direction)}),(0,W.jsx)(\"span\",{className:\"change-value\",children:T.value.replace(\"%\",\"\")}),(0,W.jsx)(\"span\",{className:\"change-percent\",children:\"%\"})]}),(0,W.jsx)(\"div\",{className:\"comparison-text\",children:Dt(o)})]})]}),(0,W.jsx)(ws,{\"data-testid\":\"conversion-formula\",children:a(r.widget.conversionRate.formula)}),(0,W.jsx)(Cs,{\"data-testid\":\"conversion-chart\",children:(0,W.jsx)(qe.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:200,children:(0,W.jsxs)(qe.LineChart,{data:F,margin:eu,children:[(0,W.jsx)(qe.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,W.jsx)(qe.XAxis,{dataKey:\"shortDate\",tick:Rs,tickLine:!1,interval:\"preserveStartEnd\"}),(0,W.jsx)(qe.YAxis,{tick:Rs,tickLine:!1,tickFormatter:ru,domain:[\"dataMin - 0.5\",\"dataMax + 0.5\"]}),(0,W.jsx)(qe.Tooltip,{content:au}),(0,W.jsx)(qe.Line,{type:\"monotone\",dataKey:\"rate\",stroke:\"#3B82F6\",strokeWidth:2,dot:(0,W.jsx)(tu,{}),activeDot:(0,W.jsx)(ou,{})})]})})})]})},po=vo.default.memo(nu);po.displayName=\"ConversionRateChart\";var To=R(require(\"react\")),we=require(\"recharts\");var He=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Ie}=He.ColorUtils,dn=(0,He.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>Ie(e,\"N20\")};\n border: 1px solid ${({theme:e})=>Ie(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`,Ms=(0,He.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Os=(0,He.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Fs=(0,He.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\n color: ${({theme:e})=>Ie(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})=>Ie(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,qf=(0,He.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>Ie(e,\"N20\")};\n border: 1px solid ${({theme:e})=>Ie(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>Ie(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>Ie(e,\"N30\")};\n }\n &:focus {\n border-color: ${({theme:e})=>Ie(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>Ie(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,Ls=(0,He.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`,Ns=(0,He.styled)(\"div\")`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({theme:e})=>Ie(e,\"N100\")};\n margin: 0;\n padding: 0;\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`,$s=(0,He.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#DC2626\":Ie(e,\"N70\")};\n\n svg {\n width: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>Ie(e,\"N70\")};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\n }\n`,Is=(0,He.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})=>Ie(e,\"N40\")};\n stroke-width: 1px;\n }\n .recharts-text {\n fill: ${({theme:e})=>Ie(e,\"N70\")};\n font-size: 10px;\n }\n`,Vs=(0,He.styled)(\"div\")`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 16px;\n margin-top: 16px;\n padding-top: 0;\n`,Ko=(0,He.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})=>Ie(e,\"N30\")};\n }\n`,Go=(0,He.styled)(\"div\")`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({color:e})=>e};\n flex-shrink: 0;\n`,jo=(0,He.styled)(\"span\")`\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>Ie(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;var $=require(\"react/jsx-runtime\"),Pe={total:\"#3B82F6\",members:\"#7B92A8\",retail:\"#A3B5C7\",brandAffiliates:\"#CBD6E0\"},iu={top:5,right:10,left:-10,bottom:5},Es={fontSize:10},pn=new Map,ko=e=>{if(pn.has(e))return pn.get(e);let t=o=>{let{cx:n=0,cy:i=0,r:s=2}=o;return(0,$.jsx)(\"circle\",{cx:n,cy:i,r:s,fill:\"#FFFFFF\",fillOpacity:\"0\",stroke:e,strokeWidth:\"1.5\",style:{pointerEvents:\"none\"}})};return pn.set(e,t),t},lu=({signupData:e,signupView:t,dateRange:o=st,isLoading:n=!1,title:i,onViewChange:s,onTitleClick:l,onExport:d})=>{let g=To.default.useCallback(w=>{let v=w.target.value;s?.(v)},[s]),f=a(r.defaults.noData),u=a(r.defaults.noChange),y=To.default.useMemo(()=>{if(e.length===0)return 0;let w=e[e.length-1];return Qt(w,t)},[e,t]),x=To.default.useMemo(()=>{if(e.length<2)return{direction:\"neutral\",value:f};let w=Qt(e[e.length-1],t),v=Qt(e[0],t),M=w-v,L=v===0?0:M/v*100;if(Math.abs(L)<.1)return{direction:\"neutral\",value:u};let N=M>0?\"up\":\"down\",B=`${M>0?\"+\":\"\"}${M} (${L.toFixed(1)}%)`;return{direction:N,value:B}},[u,f,e,t]),h=To.default.useMemo(()=>e.map(w=>({...w,shortDate:Nr(w.date)})),[e]),T=a(r.widget.signups.total),F=a(r.defaults.members),b=a(r.defaults.retail),p=a(r.defaults.brandAffiliates);return n&&e.length===0?(0,$.jsx)(dn,{\"data-testid\":\"widget-signups\",children:(0,$.jsx)(Tr,{})}):(0,$.jsxs)(dn,{as:\"section\",\"data-testid\":\"widget-signups\",\"aria-label\":a(r.widget.signups.chartAriaLabel),children:[(0,$.jsxs)(Ms,{children:[(0,$.jsx)(Fs,{as:\"button\",onClick:l,\"aria-label\":a(r.widget.signups.titleAriaLabel),\"data-testid\":\"widget-title-signups\",children:i??a(r.widget.signups.title)}),(0,$.jsxs)(Os,{children:[(0,$.jsxs)(xt,{id:\"signup-view\",\"data-testid\":\"signup-view-dropdown\",value:t,onChange:g,disabled:n,\"aria-label\":a(r.widget.signups.filterAriaLabel),children:[(0,$.jsx)(\"option\",{value:\"all\",children:a(r.filter.signupView.showAll)}),(0,$.jsx)(\"option\",{value:\"members\",children:a(r.filter.signupView.showMembers)}),(0,$.jsx)(\"option\",{value:\"retail\",children:a(r.filter.signupView.showRetail)}),(0,$.jsx)(\"option\",{value:\"brandAffiliates\",children:a(r.filter.signupView.showBrandAffiliates)})]}),(0,$.jsx)(lt,{widgetId:\"signups\",onFullView:l,onExport:d})]})]}),(0,$.jsxs)(Ls,{\"data-testid\":\"signups-metric-display\",children:[(0,$.jsx)(Ns,{\"data-testid\":\"signups-metric-value\",\"aria-label\":`${T}: ${y.toLocaleString()}`,children:y.toLocaleString()}),x.value!==f&&(0,$.jsxs)($s,{as:\"output\",\"data-testid\":\"signups-metric-trend\",direction:x.direction,\"aria-live\":\"polite\",\"aria-label\":`${Co(x.direction)} ${x.value}`,children:[(0,$.jsxs)(\"div\",{className:\"trend-line\",children:[(0,$.jsx)(\"span\",{\"aria-hidden\":\"true\",children:Ze(x.direction)}),(0,$.jsx)(\"span\",{className:\"change-value\",children:x.value.split(\" \")[0]}),(0,$.jsx)(\"span\",{className:\"change-percent\",children:x.value.split(\" \")[1]})]}),(0,$.jsx)(\"div\",{className:\"comparison-text\",children:Dt(o)})]})]}),(0,$.jsx)(Is,{\"data-testid\":\"signups-chart\",children:(0,$.jsx)(we.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:200,children:(0,$.jsxs)(we.LineChart,{data:h,margin:iu,children:[(0,$.jsx)(we.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,$.jsx)(we.XAxis,{dataKey:\"shortDate\",tick:Es,tickLine:!1,interval:\"preserveStartEnd\"}),(0,$.jsx)(we.YAxis,{tick:Es,tickLine:!1}),(0,$.jsx)(we.Tooltip,{}),(t===\"all\"||t===\"members\")&&(0,$.jsx)(we.Line,{type:\"monotone\",dataKey:t===\"all\"?\"total\":\"members\",stroke:t===\"all\"?Pe.total:Pe.members,strokeWidth:2,dot:ko(t===\"all\"?Pe.total:Pe.members),name:t===\"all\"?T:F}),t===\"all\"&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(we.Line,{type:\"monotone\",dataKey:\"members\",stroke:Pe.members,strokeWidth:2,dot:ko(Pe.members),name:F}),(0,$.jsx)(we.Line,{type:\"monotone\",dataKey:\"retail\",stroke:Pe.retail,strokeWidth:2,dot:ko(Pe.retail),name:b}),(0,$.jsx)(we.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:Pe.brandAffiliates,strokeWidth:2,dot:ko(Pe.brandAffiliates),name:p})]}),t===\"retail\"&&(0,$.jsx)(we.Line,{type:\"monotone\",dataKey:\"retail\",stroke:Pe.retail,strokeWidth:2,dot:ko(Pe.retail),name:b}),t===\"brandAffiliates\"&&(0,$.jsx)(we.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:Pe.brandAffiliates,strokeWidth:2,dot:ko(Pe.brandAffiliates),name:p})]})})}),t===\"all\"&&(0,$.jsxs)(Vs,{\"data-testid\":\"signups-legend\",children:[(0,$.jsxs)(Ko,{\"data-testid\":\"legend-total\",children:[(0,$.jsx)(Go,{color:Pe.total}),(0,$.jsx)(jo,{children:T})]}),(0,$.jsxs)(Ko,{\"data-testid\":\"legend-members\",children:[(0,$.jsx)(Go,{color:Pe.members}),(0,$.jsx)(jo,{children:F})]}),(0,$.jsxs)(Ko,{\"data-testid\":\"legend-retail\",children:[(0,$.jsx)(Go,{color:Pe.retail}),(0,$.jsx)(jo,{children:b})]}),(0,$.jsxs)(Ko,{\"data-testid\":\"legend-brandAffiliates\",children:[(0,$.jsx)(Go,{color:Pe.brandAffiliates}),(0,$.jsx)(jo,{children:p})]})]})]})},Yo=To.default.memo(lu);Yo.displayName=\"SignupsChart\";var Jr=R(require(\"react\")),Pt=require(\"recharts\"),_s=R(require(\"@mui/icons-material/TrendingUp\")),Us=R(require(\"@mui/icons-material/TrendingDown\"));var ae=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Re}=ae.ColorUtils,eo=(0,ae.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 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`,So=(0,ae.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,$r=(0,ae.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Do=(0,ae.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,As=(0,ae.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 &: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`,Ir=(0,ae.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 20px;\n align-items: center;\n justify-content: center;\n flex: 1;\n\n @media (min-width: 768px) {\n flex-direction: row;\n gap: 24px;\n align-items: center;\n justify-content: center;\n }\n`,Vr=(0,ae.styled)(\"div\")`\n position: relative;\n width: 100%;\n height: 220px;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 260px;\n height: 260px;\n flex: 0 0 auto;\n }\n\n @media (min-width: 1080px) {\n width: 280px;\n height: 280px;\n flex: 0 0 auto;\n }\n\n /* Style recharts pie labels (percentages inside segments) */\n svg text {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\n }\n\n text[class*='recharts'] {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\n }\n`,Er=(0,ae.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`,Ar=(0,ae.styled)(\"div\")`\n font-size: 10px;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>Re(e,\"N70\")};\n`,zr=(0,ae.styled)(\"div\")`\n margin-top: 2px;\n font-size: 16px;\n line-height: 1.2;\n font-weight: 700;\n color: ${({theme:e})=>Re(e,\"N100\")};\n`,Br=(0,ae.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n margin-top: 4px;\n font-size: 12px;\n line-height: 1.2;\n font-weight: 600;\n color: ${({direction:e,theme:t})=>e===\"up\"?\"#2e7d32\":e===\"down\"?\"#d32f2f\":Re(t,\"N70\")};\n\n svg {\n width: 14px;\n height: 14px;\n font-size: 14px;\n }\n`,Hr=(0,ae.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 0 1 auto;\n\n @media (min-width: 768px) {\n gap: 10px;\n }\n`,Wr=(0,ae.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 0;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n @media (min-width: 768px) {\n gap: 10px;\n padding: 6px 0;\n }\n\n &:hover {\n background-color: ${({theme:e})=>Re(e,\"N30\")};\n }\n`,_r=(0,ae.styled)(\"div\")`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({color:e})=>e};\n flex-shrink: 0;\n`,Ur=(0,ae.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n gap: 4px;\n flex: 1;\n min-width: 0;\n align-items: center;\n`,Kr=(0,ae.styled)(\"div\")`\n font-size: 13px;\n font-weight: 600;\n color: ${({theme:e})=>Re(e,\"N100\")};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`,Gr=(0,ae.styled)(\"div\")`\n font-size: 12px;\n font-weight: 500;\n color: ${({theme:e})=>Re(e,\"N100\")};\n flex-shrink: 0;\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,zs=(0,ae.styled)(\"div\")`\n display: none;\n`,Bs=(0,ae.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1;\n min-width: 0;\n`,Hs=(0,ae.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: 14px;\n height: 14px;\n font-size: 14px;\n }\n`,Ws=(0,ae.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`,jr=(0,ae.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`,Yr=(0,ae.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>Re(e,\"N70\")};\n`;var _=require(\"react/jsx-runtime\"),su=({categories:e,categorySort:t,isLoading:o=!1,title:n,summaryChangePct:i,onSortChange:s,onTitleClick:l,onExport:d})=>{let g=Jr.default.useCallback(p=>{let w=p.target.value;s?.(w)},[s]),{sortedCategories:f,totalRevenue:u,totalVolume:y,trendDirection:x,formattedTrend:h}=Jr.default.useMemo(()=>{let p=[...e].sort((N,B)=>t===\"revenue\"?B.revenue-N.revenue:(B.volume??0)-(N.volume??0)),w=p.reduce((N,B)=>N+B.revenue,0),v=p.reduce((N,B)=>N+(B.volume??0),0),M,L;if(i!=null)Math.abs(i)<.1?(L=\"0%\",M=\"neutral\"):(M=i>0?\"up\":\"down\",L=`${i>0?\"+\":\"\"}${i.toFixed(1)}%`);else{let{direction:N,formatted:B}=Xt(p,U=>t===\"volume\"?U.volume??0:U.revenue,U=>t===\"volume\"?U.trend?.volume:U.trend?.revenue);M=N,L=B}return{sortedCategories:p,totalRevenue:w,totalVolume:v,trendDirection:M,formattedTrend:L}},[e,t,i]),T=p=>p===\"up\"?(0,_.jsx)(_s.default,{sx:{fontSize:\"14px\"},\"aria-hidden\":\"true\"}):p===\"down\"?(0,_.jsx)(Us.default,{sx:{fontSize:\"14px\"},\"aria-hidden\":\"true\"}):null,F=p=>Pr(p,{fontSize:\"10\",fontWeight:\"600\"}),b=f[0]?.currencyCode;return o&&e.length===0?(0,_.jsx)(eo,{\"data-testid\":\"widget-top-categories\",children:(0,_.jsx)(Sr,{})}):e.length===0?(0,_.jsxs)(eo,{\"data-testid\":\"widget-top-categories\",children:[(0,_.jsx)(So,{children:(0,_.jsx)(Do,{children:n??a(r.widget.topCategories.title)})}),(0,_.jsx)(jr,{\"data-testid\":\"categories-empty-state\",children:(0,_.jsx)(Yr,{children:a(r.widget.topCategories.empty)})})]}):(0,_.jsxs)(eo,{as:\"section\",\"data-testid\":\"widget-top-categories\",\"aria-label\":a(r.widget.topCategories.chartAriaLabel),children:[(0,_.jsxs)(So,{children:[(0,_.jsx)(Do,{as:\"button\",onClick:l,\"aria-label\":a(r.widget.topCategories.titleAriaLabel),\"data-testid\":\"widget-title-top-categories\",children:n??a(r.widget.topCategories.title)}),(0,_.jsxs)($r,{children:[(0,_.jsxs)(xt,{id:\"category-sort\",\"data-testid\":\"category-sort-dropdown\",value:t,onChange:g,disabled:o,\"aria-label\":a(r.widget.topCategories.sortAriaLabel),children:[(0,_.jsx)(\"option\",{value:\"revenue\",children:a(r.defaults.byRevenue)}),(0,_.jsx)(\"option\",{value:\"volume\",children:a(r.defaults.byVolume)})]}),(0,_.jsx)(lt,{widgetId:\"top-categories\",onFullView:l,onExport:d})]})]}),(0,_.jsxs)(Ir,{children:[(0,_.jsxs)(Vr,{\"data-testid\":\"categories-chart\",children:[(0,_.jsx)(Pt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,_.jsxs)(Pt.PieChart,{children:[(0,_.jsx)(Pt.Pie,{data:f,cx:\"50%\",cy:\"50%\",innerRadius:\"55%\",outerRadius:\"85%\",dataKey:t===\"volume\"?\"volume\":\"revenue\",nameKey:\"name\",paddingAngle:2,label:F,labelLine:!1,children:f.map(p=>(0,_.jsx)(Pt.Cell,{fill:p.color},`cell-${p.id}`))}),(0,_.jsx)(Pt.Tooltip,{formatter:p=>J(p,b)})]})}),(0,_.jsxs)(Er,{\"data-testid\":\"categories-donut-center\",children:[(0,_.jsx)(Ar,{children:t===\"volume\"?a(r.defaults.volume):a(r.stats.revenue)}),(0,_.jsx)(zr,{children:t===\"volume\"?`${y.toFixed(1)} SV`:J(u,b)}),(0,_.jsxs)(Br,{direction:x,children:[T(x),(0,_.jsx)(\"span\",{children:h})]})]})]}),(0,_.jsx)(Hr,{\"data-testid\":\"categories-legend-container\",children:f.map((p,w)=>{let v=t===\"volume\"?p.volume:p.revenue,M=t===\"volume\"?p.volumeSharePct:p.percentage,L=t===\"volume\"?p.trend?.volume:p.trend?.revenue;return(0,_.jsxs)(Wr,{\"data-testid\":`category-legend-${w}`,children:[(0,_.jsx)(_r,{color:p.color}),(0,_.jsxs)(Ur,{children:[(0,_.jsx)(Kr,{children:p.name.charAt(0).toUpperCase()+p.name.slice(1)}),(0,_.jsxs)(Bs,{children:[(0,_.jsx)(Gr,{children:t===\"volume\"?`${v?.toFixed(1)} SV (${M}%)`:`${J(v??0,p.currencyCode)} (${M}%)`}),L?(0,_.jsx)(Hs,{direction:Tt(L),\"data-testid\":`category-legend-trend-${w}`,\"aria-label\":L,children:T(Tt(L))}):null]})]})]},p.id)})})]})]})},Jo=Jr.default.memo(su);Jo.displayName=\"TopCategoriesPieChart\";var Me=require(\"react/jsx-runtime\"),du=[],pu=[],cu=[],uu=[],Zr=({stats:e,topProducts:t,conversionData:o,signupData:n,categories:i,isLoading:s=!1,error:l,shopTitle:d,className:g,dateRange:f=st,market:u=\"all\",productSort:y=\"units\",signupView:x=\"all\",conversionFilter:h=\"all\",categorySort:T=\"revenue\",categoriesSummaryChangePct:F,conversionSummaryChangePct:b,markets:p,onDateRangeChange:w,onMarketChange:v,onProductSortChange:M,onSignupViewChange:L,onConversionFilterChange:N,onCategorySortChange:B,onProductsTitleClick:U,onConversionTitleClick:q,onSignupsTitleClick:V,onCategoriesToTitleClick:c,onProductsExport:C,onConversionExport:S,onSignupsExport:m,onCategoriesExport:k})=>{let E=t??du,oe=o??pu,ge=n??cu,fe=i??uu;if(l)return(0,Me.jsx)(Aa,{as:\"main\",className:g,\"aria-label\":a(r.ariaLabel.dashboard),children:(0,Me.jsxs)(Wi,{\"data-testid\":\"dashboard-error\",role:\"alert\",\"aria-live\":\"assertive\",children:[(0,Me.jsxs)(\"strong\",{children:[a(r.error),\":\"]}),\" \",l]})});let ve=We=>We?We.startsWith(\"+\")?\"up\":We.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\";return(0,Me.jsxs)(Aa,{as:\"main\",className:g,\"data-testid\":\"shopping-dashboard\",\"aria-label\":a(r.ariaLabel.dashboard),\"aria-busy\":s,children:[(0,Me.jsx)(yo,{shopTitle:d,dateRange:f,market:u,isLoading:s,stats:e,markets:p,onDateRangeChange:w,onMarketChange:v}),(0,Me.jsxs)(Bi,{as:\"section\",\"data-testid\":\"stats-row\",\"aria-label\":a(r.ariaLabel.statsRow),children:[(0,Me.jsx)(kt,{title:a(r.stats.revenue),value:e?.metrics?.revenue??\"$0\",trendDirection:ve(e?.trend?.revenue),trendValue:e?.trend?.revenue,testId:\"stats-card-revenue\",isLoading:s}),(0,Me.jsx)(kt,{title:a(r.defaults.volume),value:e?.metrics?.volume??\"0\",subtitle:a(r.defaults.dcSv),trendDirection:ve(e?.trend?.volume),trendValue:e?.trend?.volume,testId:\"stats-card-volume\",isLoading:s}),(0,Me.jsx)(kt,{title:a(r.stats.visits),value:e?.metrics?.siteVisits??\"0\",subtitle:`${e?.metrics?.conversionRate??\"0%\"} ${a(r.defaults.conversionRate)}`,trendDirection:ve(e?.trend?.siteVisits),trendValue:e?.trend?.siteVisits,testId:\"stats-card-visits\",isLoading:s})]}),(0,Me.jsxs)(Hi,{\"data-testid\":\"widget-container\",children:[(0,Me.jsxs)(za,{\"data-testid\":\"widget-row-1\",children:[(0,Me.jsx)(so,{products:E,productSort:y,isLoading:s,maxProducts:5,onSortChange:M,onTitleClick:U,onExport:C}),(0,Me.jsx)(Yo,{signupData:ge,signupView:x,dateRange:f,isLoading:s,onViewChange:L,onTitleClick:V,onExport:m})]}),(0,Me.jsxs)(za,{\"data-testid\":\"widget-row-2\",children:[(0,Me.jsx)(po,{conversionData:oe,conversionFilter:h,dateRange:f,isLoading:s,summaryChangePct:b,onFilterChange:N,onTitleClick:q,onExport:S}),(0,Me.jsx)(Jo,{categories:fe,categorySort:T,isLoading:s,summaryChangePct:F,onSortChange:B,onTitleClick:c,onExport:k})]})]})]})};var le=R(require(\"react\"));var ut=R(require(\"react\"));var nd=R(require(\"@mui/icons-material/ArrowBack\")),id=R(require(\"@mui/icons-material/CalendarToday\")),ld=R(require(\"@mui/icons-material/Language\"));var Ve=require(\"@nuskin/foundation-theme\"),{getGenomeColor:ot}=Ve.ColorUtils,Ks=(0,Ve.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`,Gs=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n`,js=(0,Ve.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})=>ot(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})=>ot(e,\"N100\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>ot(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`,Ys=(0,Ve.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})=>ot(e,\"N30\")};\n gap: 24px;\n\n @media (max-width: 767px) {\n align-items: flex-end;\n gap: 16px;\n }\n`,Js=(0,Ve.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`,Zs=(0,Ve.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({theme:e})=>ot(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`,qs=(0,Ve.styled)(\"p\")`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({theme:e})=>ot(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n`,Xs=(0,Ve.styled)(\"p\")`\n display: none;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({theme:e})=>ot(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n flex-shrink: 0;\n }\n`,Qs=(0,Ve.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`,ed=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,td=(0,Ve.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({theme:e})=>ot(e,\"N70\")};\n\n svg {\n font-size: 16px;\n }\n`,od=(0,Ve.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})=>ot(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})=>ot(e,\"N20\")};\n border-radius: 4px;\n }\n\n &:focus {\n background-color: ${({theme:e})=>ot(e,\"N20\")};\n border-radius: 4px;\n outline: 2px solid ${({theme:e})=>ot(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`,rd=(0,Ve.styled)(\"div\")`\n display: none;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`,ad=(0,Ve.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({theme:e})=>ot(e,\"N100\")};\n margin: 0;\n`;var xe=require(\"react/jsx-runtime\");function Rt(e,t){return{key:\"dateRange\",label:a(t.filter.dateRange.label),value:e,icon:\"calendar\",options:[{value:\"last7days\",label:a(t.filter.dateRange.last7days)},{value:\"last30days\",label:a(t.filter.dateRange.last30days)},{value:\"last90days\",label:a(t.filter.dateRange.last90days)},{value:\"thisMonth\",label:a(t.filter.dateRange.thisMonth)}]}}function Mt(e,t,o){return{key:\"market\",label:a(o.filter.market.label),value:e,icon:\"globe\",options:t.map(n=>({value:n.value,label:n.label}))}}var be=({title:e,dateRange:t,onBack:o,filters:n,onFilterChange:i})=>{let s=l=>l?(0,xe.jsxs)(td,{children:[l===\"calendar\"&&(0,xe.jsx)(id.default,{}),l===\"globe\"&&(0,xe.jsx)(ld.default,{})]}):null;return(0,xe.jsxs)(Ks,{\"data-testid\":\"page-header\",children:[(0,xe.jsx)(Gs,{children:(0,xe.jsxs)(js,{onClick:o,\"aria-label\":a(r.navigation.backAriaLabel),\"data-testid\":\"page-back-button\",type:\"button\",children:[(0,xe.jsx)(nd.default,{}),(0,xe.jsx)(\"span\",{children:a(r.navigation.backToDashboard)})]})}),(0,xe.jsx)(rd,{children:(0,xe.jsx)(ad,{children:e})}),(0,xe.jsxs)(Ys,{children:[(0,xe.jsxs)(Js,{children:[(0,xe.jsx)(Zs,{\"data-testid\":\"page-header-title\",children:e}),(0,xe.jsx)(qs,{\"data-testid\":\"page-header-date-range\",children:t})]}),n&&n.length>0&&i&&(0,xe.jsx)(Qs,{\"data-testid\":\"page-header-filters\",children:n.map(l=>(0,xe.jsxs)(ed,{children:[s(l.icon),(0,xe.jsx)(od,{id:`filter-${l.key}`,value:l.value,onChange:d=>i(l.key,d.target.value),disabled:l.disabled,\"aria-label\":`${l.label} ${a(r.ariaLabel.filterSuffix)}`,\"data-testid\":`filter-dropdown-${l.key}`,children:l.options.map(d=>(0,xe.jsx)(\"option\",{value:d.value,children:l.label&&l.key===\"customerType\"?`${l.label} ${d.label}`:d.label},d.value))})]},l.key))}),(0,xe.jsx)(Xs,{children:t})]})]})};var md=R(require(\"@mui/icons-material/ArrowUpward\")),hd=R(require(\"@mui/icons-material/ArrowDownward\"));var dt=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Ot}=dt.ColorUtils,sd=(0,dt.styled)(\"div\")`\n width: 100%;\n overflow-x: auto;\n border-radius: 8px;\n border: 1px solid ${({theme:e})=>Ot(e,\"N30\")};\n`,dd=(0,dt.styled)(\"table\")`\n width: 100%;\n border-collapse: collapse;\n`,pd=(0,dt.styled)(\"thead\")`\n background-color: ${({theme:e})=>Ot(e,\"N20\")};\n border-bottom: 2px solid ${({theme:e})=>Ot(e,\"N40\")};\n`,cd=(0,dt.styled)(\"th\")`\n padding: 12px 16px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n background-color: ${({theme:e})=>Ot(e,\"N20\")};\n color: ${({theme:e})=>Ot(e,\"N70\")};\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})=>Ot(e,\"N20\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>Ot(e,\"A70\")};\n outline-offset: -2px;\n }\n`,ud=(0,dt.styled)(\"tbody\")``,cn=(0,dt.styled)(\"tr\")`\n border-bottom: 1px solid ${({theme:e})=>Ot(e,\"N30\")};\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>Ot(e,\"N20\")};\n }\n\n &:last-child {\n border-bottom: none;\n }\n`,un=(0,dt.styled)(\"td\")`\n padding: 12px 16px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({theme:e})=>Ot(e,\"N70\")};\n text-align: left;\n`,gd=(0,dt.styled)(un)`\n text-align: center;\n`,fd=(0,dt.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 Ke=require(\"react/jsx-runtime\"),pt=({columns:e,data:t,sortable:o=!1,onSort:n,sortColumn:i,sortDirection:s=\"asc\",getRowKey:l})=>{let d=u=>{if(!o||!n)return;n(u,i===u&&s===\"asc\"?\"desc\":\"asc\")},g=(u,y)=>{(u.key===\"Enter\"||u.key===\" \")&&(u.preventDefault(),d(y))},f=u=>{if(i===u)return s===\"asc\"?\"ascending\":\"descending\"};return(0,Ke.jsx)(sd,{\"data-testid\":\"data-table\",children:(0,Ke.jsxs)(dd,{children:[(0,Ke.jsx)(pd,{children:(0,Ke.jsx)(\"tr\",{children:e.map(u=>(0,Ke.jsxs)(cd,{scope:\"col\",sortable:o&&u.sortable,onClick:()=>u.sortable&&d(u.key),onKeyDown:y=>u.sortable&&g(y,u.key),tabIndex:o&&u.sortable?0:-1,\"aria-sort\":f(u.key),\"aria-label\":`${u.label}${u.sortable?a(r.dataTable.sortableColumn):\"\"}`,\"data-testid\":`table-header-${u.key}`,children:[u.label,o&&u.sortable&&(0,Ke.jsx)(fd,{isActive:i===u.key,children:i===u.key&&s===\"desc\"?(0,Ke.jsx)(hd.default,{}):(0,Ke.jsx)(md.default,{})})]},u.key))})}),(0,Ke.jsx)(ud,{children:t.length===0?(0,Ke.jsx)(cn,{\"data-testid\":\"table-empty-row\",children:(0,Ke.jsx)(gd,{colSpan:e.length,children:a(r.dataTable.noDataAvailable)})}):t.map((u,y)=>(0,Ke.jsx)(cn,{\"data-testid\":`table-row-${y}`,children:e.map(x=>(0,Ke.jsx)(un,{\"data-testid\":`table-cell-${x.key}`,children:x.render?x.render(u[x.key],u):u[x.key]},x.key))},l?l(u,y):y))})]})})};var bd=R(require(\"@mui/icons-material/ChevronLeft\")),yd=R(require(\"@mui/icons-material/ChevronRight\"));var co=require(\"@nuskin/foundation-theme\"),{getGenomeColor:bt}=co.ColorUtils,xd=(0,co.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n margin-top: 24px;\n`,qr=(0,co.styled)(\"button\")`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({theme:e,isActive:t})=>t?bt(e,\"A80\"):bt(e,\"N20\")};\n color: ${({theme:e,isActive:t})=>t?\"#ffffff\":bt(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?bt(e,\"A70\"):bt(e,\"N30\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>bt(e,\"A70\")};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n`,Xr=(0,co.styled)(\"span\")`\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>bt(e,\"N70\")};\n margin: 0 8px;\n`,gn=(0,co.styled)(\"button\")`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({theme:e})=>bt(e,\"N20\")};\n color: ${({theme:e})=>bt(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})=>bt(e,\"N30\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>bt(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 Oe=require(\"react/jsx-runtime\"),ct=({currentPage:e,totalPages:t,onPageChange:o,itemsPerPage:n,totalItems:i})=>{let s=()=>{e>1&&o(e-1)},l=()=>{e<t&&o(e+1)},d=(h,T)=>{(h.key===\"Enter\"||h.key===\" \")&&(h.preventDefault(),T())},f=(()=>{if(t<=7)return Array.from({length:t},(T,F)=>F+1);let h=[];return e<=4?h.push(1,2,3,4,5):e>=t-3?h.push(t-4,t-3,t-2,t-1,t):h.push(e-1,e,e+1),h})(),u=n?(e-1)*n+1:null,y=n?Math.min(e*n,i??1/0):null,x=a(r.pagination.goToPage);return(0,Oe.jsxs)(xd,{\"data-testid\":\"pagination\",children:[(0,Oe.jsx)(gn,{onClick:s,onKeyDown:h=>d(h,s),disabled:e===1,\"aria-label\":a(r.pagination.previousPage),\"data-testid\":\"pagination-previous\",type:\"button\",children:(0,Oe.jsx)(bd.default,{})}),t>7&&e>4&&(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsx)(qr,{onClick:()=>o(1),isActive:!1,\"aria-label\":`${x} 1`,\"data-testid\":\"pagination-page-1\",type:\"button\",children:\"1\"}),(0,Oe.jsx)(Xr,{children:\"...\"})]}),f.map(h=>(0,Oe.jsx)(qr,{onClick:()=>o(h),isActive:e===h,\"aria-label\":`${x} ${h}`,\"aria-current\":e===h?\"page\":void 0,\"data-testid\":`pagination-page-${h}`,type:\"button\",children:h},h)),t>7&&e<t-3&&(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsx)(Xr,{children:\"...\"}),(0,Oe.jsx)(qr,{onClick:()=>o(t),isActive:!1,\"aria-label\":`${x} ${t}`,\"data-testid\":`pagination-page-${t}`,type:\"button\",children:t})]}),(0,Oe.jsx)(gn,{onClick:l,onKeyDown:h=>d(h,l),disabled:e===t,\"aria-label\":a(r.pagination.nextPage),\"data-testid\":\"pagination-next\",type:\"button\",children:(0,Oe.jsx)(yd.default,{})}),n&&i&&(0,Oe.jsxs)(Xr,{as:\"output\",\"aria-live\":\"polite\",\"data-testid\":\"pagination-page-info\",children:[u,\"-\",y,\" \",a(r.pagination.of),\" \",i]})]})};var Ee=require(\"@mui/material/styles\"),Ae=require(\"@mui/material\"),wd=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Cd}=wd.ColorUtils,Fe=(0,Ee.styled)(Ae.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`,Qr=(0,Ee.styled)(Ae.Box)`\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>Cd(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`,ea=(0,Ee.styled)(Ae.Box)`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 16px 0;\n gap: 10px;\n flex-wrap: nowrap;\n width: 100%;\n\n @media (max-width: 767px) {\n padding: 8px 0;\n flex-wrap: nowrap;\n align-items: center;\n }\n`,ta=(0,Ee.styled)(Ae.Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0em;\n color: ${({theme:e})=>e.palette.text.primary};\n margin: 0;\n padding: 0;\n\n @media (max-width: 767px) {\n font-size: 28px;\n line-height: 1;\n }\n`,oa=(0,Ee.styled)(Ae.Box)`\n display: flex;\n align-items: center;\n gap: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 13px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.01em;\n color: ${({theme:e,direction:t})=>t===\"up\"?e.palette.success.main:t===\"down\"?e.palette.error.main:e.palette.text.secondary};\n flex-wrap: nowrap;\n white-space: nowrap;\n\n svg {\n font-size: 13px;\n flex-shrink: 0;\n width: 13px;\n height: 13px;\n }\n\n span {\n display: inline;\n line-height: 1;\n }\n\n @media (max-width: 767px) {\n font-size: 13px;\n line-height: 1;\n flex-wrap: nowrap;\n\n svg {\n font-size: 13px;\n width: 13px;\n height: 13px;\n }\n }\n`,Hm=(0,Ee.styled)(Ae.Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>e.palette.text.secondary};\n white-space: nowrap;\n\n @media (max-width: 767px) {\n font-size: 12px;\n line-height: 1.3;\n }\n`,ra=(0,Ee.styled)(Ae.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`,to=(0,Ee.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`,Wm=(0,Ee.styled)(Ae.Box)`\n width: 90%;\n height: 450px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 250px;\n margin-bottom: 0;\n }\n`,oo=(0,Ee.styled)(Ae.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n\n ${({withCard:e=!0,theme:t})=>e&&`\n padding: 20px;\n background-color: ${Cd(t,\"N20\")};\n border-radius: 8px;\n box-shadow: ${t.shadows[1]};\n\n @media (max-width: 767px) {\n padding: 16px;\n }\n `}\n`,_m=(0,Ee.styled)(Ae.Box)`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n`,ro=(0,Ee.styled)(Ae.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`,vd=(0,Ee.styled)(Ae.Typography)`\n font-weight: 600;\n font-size: 14px;\n`,kd=(0,Ee.styled)(Ae.Typography)`\n font-size: 13px;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Td=(0,Ee.styled)(Ae.Typography)`\n font-size: 13px;\n`,Sd=(0,Ee.styled)(Ae.Typography)`\n font-size: 13px;\n color: ${({theme:e,status:t})=>t===\"Active\"?e.palette.success.main:e.palette.warning.main};\n`;var ze=require(\"@mui/material/styles\"),Le=require(\"@mui/material\"),Dd=require(\"@nuskin/foundation-theme\"),{getGenomeColor:fn}=Dd.ColorUtils,Pd=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`,Rd=(0,ze.styled)(Le.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n`,Md=(0,ze.styled)(Le.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,aa=(0,ze.styled)(Le.Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({theme:e})=>fn(e,\"N70\")};\n`,Od=(0,ze.styled)(Le.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Fd=(0,ze.styled)(Le.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,Ld=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>fn(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,Nd=(0,ze.styled)(Le.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n`,$d=(0,ze.styled)(Le.Typography)`\n font-size: 1rem;\n font-weight: 700;\n color: ${({theme:e})=>e.palette.primary.main};\n min-width: 24px;\n`,Id=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,Vd=(0,ze.styled)(Le.Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n`,Ed=(0,ze.styled)(Le.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Ad=(0,ze.styled)(Le.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`,na=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`,ia=(0,ze.styled)(Le.Typography)`\n font-size: 0.625rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n text-transform: uppercase;\n`,la=(0,ze.styled)(Le.Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({theme:e})=>fn(e,\"N70\")};\n`;var zd=R(require(\"@mui/material/useMediaQuery\")),gu=\"(max-width:767px)\";function Ft(){return(0,zd.default)(gu,{noSsr:!0})}var G=require(\"react/jsx-runtime\");function fu(e){return{rank:e.rank,name:e.name,sku:`${a(r.fullView.products.skuPrefix)}-${e.id.replace(\"prod-\",\"\").padStart(3,\"0\")}`,units:e.unitsSold,revenue:e.revenue,volume:e.volume}}var Po=({products:e,dateRange:t,market:o,productSort:n,markets:i,isLoading:s=!1,onBack:l,onDateRangeChange:d,onMarketChange:g,onProductSortChange:f})=>{let[u,y]=(0,ut.useState)(1),[x,h]=(0,ut.useState)(n===\"revenue\"?\"revenue\":\"units\"),[T,F]=(0,ut.useState)(\"desc\"),b=10,p=Ft(),w=ut.default.useCallback(()=>l?.(),[l]),v=it(i),M=ut.default.useMemo(()=>[Rt(t,r),Mt(o,v,r),{key:\"sort\",label:a(r.filter.productSort.label),value:n,options:[{value:\"units\",label:a(r.defaults.units)},{value:\"revenue\",label:a(r.defaults.revenue)},{value:\"volume\",label:a(r.defaults.volume)}]}],[t,o,v,n]),L=ut.default.useCallback((S,m)=>{S===\"dateRange\"?d?.(m):S===\"market\"?g?.(m):S===\"sort\"&&(f?.(m),y(1))},[d,g,f]),N=ut.default.useCallback((S,m)=>{h(S),F(m),y(1)},[]),B=ut.default.useMemo(()=>e.map(fu),[e]),U=ut.default.useMemo(()=>[...B].sort((S,m)=>{let k=S[x],E=m[x];return T===\"asc\"?k-E:E-k}),[B,x,T]),{totalPages:q,pageItems:V}=St(U,u,b),c=e[0]?.currencyCode,C=ut.default.useMemo(()=>[{key:\"rank\",label:a(r.fullView.products.columns.rank),sortable:!0},{key:\"name\",label:a(r.fullView.products.columns.product),sortable:!0,render:(S,m)=>(0,G.jsxs)(Pd,{children:[(0,G.jsx)(Rd,{children:m.name}),(0,G.jsx)(Md,{children:m.sku})]})},{key:\"units\",label:a(r.fullView.products.columns.unitsSold),sortable:!0,render:S=>(0,G.jsx)(aa,{children:Number(S).toLocaleString()})},{key:\"revenue\",label:a(r.defaults.revenue),sortable:!0,render:S=>(0,G.jsx)(aa,{children:J(Number(S),c)})},{key:\"volume\",label:a(r.fullView.products.columns.volume),sortable:!0,render:S=>(0,G.jsx)(aa,{children:Number(S).toLocaleString()})}],[c]);return s?(0,G.jsxs)(Fe,{\"data-testid\":\"products-full-view\",children:[(0,G.jsx)(be,{title:a(r.widget.topProducts.title),dateRange:De(t),onBack:w,filters:M,onFilterChange:L}),(0,G.jsx)(Ll,{})]}):e.length===0?(0,G.jsxs)(Fe,{\"data-testid\":\"products-full-view\",children:[(0,G.jsx)(be,{title:a(r.widget.topProducts.title),dateRange:De(t),onBack:w,filters:M,onFilterChange:L}),(0,G.jsx)(ro,{\"data-testid\":\"products-fullview-empty\",children:a(r.fullView.products.noProducts)})]}):(0,G.jsxs)(Fe,{\"data-testid\":\"products-full-view\",children:[(0,G.jsx)(be,{title:a(r.widget.topProducts.title),dateRange:De(t),onBack:w,filters:M,onFilterChange:L}),p?(0,G.jsx)(Od,{\"data-testid\":\"products-fullview-mobile-cards\",children:V.map(S=>(0,G.jsxs)(Ld,{children:[(0,G.jsxs)(Nd,{children:[(0,G.jsxs)($d,{children:[\"#\",S.rank]}),(0,G.jsxs)(Id,{children:[(0,G.jsx)(Vd,{children:S.name}),(0,G.jsx)(Ed,{children:S.sku})]})]}),(0,G.jsxs)(Ad,{children:[(0,G.jsxs)(na,{children:[(0,G.jsx)(ia,{children:a(r.defaults.units)}),(0,G.jsx)(la,{children:S.units.toLocaleString()})]}),(0,G.jsxs)(na,{children:[(0,G.jsx)(ia,{children:a(r.defaults.revenue)}),(0,G.jsx)(la,{children:J(S.revenue,c)})]}),(0,G.jsxs)(na,{children:[(0,G.jsx)(ia,{children:a(r.defaults.volume)}),(0,G.jsx)(la,{children:S.volume.toLocaleString()})]})]})]},S.rank))}):(0,G.jsx)(Fd,{\"data-testid\":\"products-fullview-desktop-table\",children:(0,G.jsx)(pt,{columns:C,data:V,sortable:!0,onSort:N,sortColumn:x,sortDirection:T,getRowKey:S=>S.rank})}),q>1&&(0,G.jsx)(ct,{currentPage:u,totalPages:q,onPageChange:y,itemsPerPage:b,totalItems:U.length})]})};var rt=R(require(\"react\")),Xe=require(\"recharts\"),ap=R(require(\"@mui/icons-material/ArrowUpward\")),np=R(require(\"@mui/icons-material/ArrowDownward\"));var ce=require(\"@mui/material/styles\"),Ce=require(\"@mui/material\"),Bd=require(\"@nuskin/foundation-theme\"),{getGenomeColor:mu}=Bd.ColorUtils,Hd=(0,ce.styled)(Ce.Box)`\n width: 100%;\n height: 370px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`,Wd=(0,ce.styled)(Ce.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})=>mu(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n }\n`,_d=(0,ce.styled)(Ce.Box)`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`,Ud=(0,ce.styled)(Ce.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`,Kd=(0,ce.styled)(Ce.Typography)`\n font-size: 1rem;\n font-weight: 600;\n`,Gd=(0,ce.styled)(Ce.Typography)`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,jd=(0,ce.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,ce.styled)(Ce.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`,sa=(0,ce.styled)(Ce.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n text-align: center;\n`,da=(0,ce.styled)(Ce.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,pa=(0,ce.styled)(Ce.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,Jd=(0,ce.styled)(Ce.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Zd=(0,ce.styled)(Ce.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,qd=(0,ce.styled)(Ce.Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`,Xd=(0,ce.styled)(Ce.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`,Qd=(0,ce.styled)(Ce.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({$color:e})=>e??\"inherit\"};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\n }\n`,nh=(0,ce.styled)(Ce.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`,ep=(0,ce.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`,tp=(0,ce.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0;\n`,op=(0,ce.styled)(\"span\")`\n margin-left: 2px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.01em;\n color: #5f5f5f;\n`,rp=(0,ce.styled)(Ce.Box)`\n display: flex;\n align-items: center;\n gap: 0;\n flex-wrap: wrap;\n`;var I=require(\"react/jsx-runtime\"),Ro=({conversionData:e,orders:t,summaryRate:o,summaryChangePct:n,dateRange:i,market:s,conversionFilter:l,markets:d,isLoading:g=!1,onBack:f,onDateRangeChange:u,onMarketChange:y,onConversionFilterChange:x})=>{let[h,T]=(0,rt.useState)(1),F=10,b=Ft(),p=rt.default.useCallback(()=>f?.(),[f]),w=it(d),v=rt.default.useMemo(()=>typeof o==\"number\"&&Number.isFinite(o)?o:e.at(-1)?.rate??0,[o,e]),M=rt.default.useMemo(()=>{if(n!==void 0){if(n===null)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let ge=\"neutral\";return n>0?ge=\"up\":n<0&&(ge=\"down\"),{direction:ge,value:`${n>=0?\"+\":\"\"}${n.toFixed(1)}%`}}if(e.length<2)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let m=e.at(-1)?.rate??0,k=e[0].rate;if(k===0)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let E=(m-k)/k*100;if(Math.abs(E)<.1)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let oe=\"neutral\";return E>0?oe=\"up\":E<0&&(oe=\"down\"),{direction:oe,value:`${E>=0?\"+\":\"\"}${E.toFixed(1)}%`}},[n,e]),L=rt.default.useCallback(m=>m===\"standard\"?a(r.filter.conversionType.standard):m===\"subscription\"?a(r.filter.conversionType.subscription):a(r.defaults.all),[]),N=rt.default.useMemo(()=>L(l),[l,L]),B=rt.default.useMemo(()=>[Rt(i,r),Mt(s,w,r),{key:\"customerType\",label:a(r.filter.signupView.label),value:l,options:[{value:\"all\",label:a(r.defaults.all)},{value:\"standard\",label:a(r.filter.conversionType.standard)},{value:\"subscription\",label:a(r.filter.conversionType.subscription)}]}],[l,i,s,w]),U=rt.default.useCallback((m,k)=>{m===\"dateRange\"?u?.(k):m===\"market\"?y?.(k):m===\"customerType\"&&(x?.(k),T(1))},[x,u,y]),q=rt.default.useMemo(()=>l===\"all\"?t:t.filter(m=>m.customerType.toLowerCase()===l),[t,l]),{totalPages:V,pageItems:c}=St(q,h,F),C=rt.default.useMemo(()=>[{key:\"orderId\",label:a(r.fullView.conversionRate.columns.orderId),sortable:!0,render:m=>(0,I.jsx)(ep,{children:m})},{key:\"date\",label:a(r.defaults.date),sortable:!0},{key:\"customerName\",label:a(r.fullView.conversionRate.columns.customer),sortable:!0},{key:\"customerType\",label:a(r.defaults.type),sortable:!0},{key:\"items\",label:a(r.fullView.conversionRate.columns.items),sortable:!0},{key:\"total\",label:a(r.fullView.conversionRate.columns.total),sortable:!0,render:(m,k)=>J(Number(m),k.currencyCode,void 0,2)},{key:\"bv\",label:a(r.fullView.conversionRate.columns.bv),sortable:!0}],[]),S=rt.default.useCallback(()=>l===\"standard\"?\"#2e7d32\":l===\"subscription\"?\"#ed6c02\":\"#1976d2\",[l]);return g?(0,I.jsxs)(Fe,{\"data-testid\":\"conversion-rate-full-view\",children:[(0,I.jsx)(be,{title:a(r.defaults.conversionRate),dateRange:De(i),onBack:p,filters:B,onFilterChange:U}),(0,I.jsx)(qt,{})]}):(0,I.jsxs)(Fe,{\"data-testid\":\"conversion-rate-full-view\",children:[(0,I.jsx)(be,{title:a(r.defaults.conversionRate),dateRange:De(i),onBack:p,filters:B,onFilterChange:U}),(0,I.jsxs)(Qr,{\"data-testid\":\"conversion-fullview-metric-chart\",children:[(0,I.jsx)(ea,{children:(0,I.jsxs)(rp,{children:[(0,I.jsxs)(ta,{\"data-testid\":\"conversion-rate-value\",style:{marginRight:\"6px\"},children:[v.toFixed(1),\"%\"]}),(0,I.jsxs)(oa,{direction:M.direction,\"data-testid\":\"conversion-rate-trend\",children:[M.direction===\"up\"&&(0,I.jsx)(ap.default,{}),M.direction===\"down\"&&(0,I.jsx)(np.default,{}),(0,I.jsx)(tp,{children:M.value}),(0,I.jsx)(op,{children:Dt(i)})]})]})}),(0,I.jsx)(ra,{children:(0,I.jsxs)(qd,{children:[(0,I.jsx)(Hd,{\"data-testid\":\"conversion-fullview-chart\",children:(0,I.jsx)(Xe.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,I.jsxs)(Xe.LineChart,{data:e,margin:{top:10,right:10,left:0,bottom:0},children:[(0,I.jsx)(Xe.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,I.jsx)(Xe.XAxis,{dataKey:\"date\"}),(0,I.jsx)(Xe.YAxis,{tickFormatter:m=>`${m}%`,domain:[0,\"auto\"]}),(0,I.jsx)(Xe.Tooltip,{formatter:m=>typeof m==\"number\"?`${m.toFixed(2)}%`:typeof m==\"string\"?m:a(r.fullView.conversionRate.notAvailable)}),(0,I.jsx)(Xe.Line,{type:\"monotone\",dataKey:\"rate\",stroke:S(),strokeWidth:2,name:`${a(r.defaults.conversionRate)} (${N})`,dot:!1})]})})}),(0,I.jsx)(Xd,{children:(0,I.jsx)(Qd,{$color:S(),children:`${a(r.defaults.conversionRate)} (${N})`})})]})})]}),(0,I.jsxs)(oo,{\"data-testid\":\"conversion-fullview-table-section\",children:[(0,I.jsxs)(to,{\"data-testid\":\"conversion-fullview-table-title\",children:[a(r.fullView.conversionRate.orderDetailsTitle),\" (\",q.length,\")\"]}),b?(0,I.jsx)(Jd,{\"data-testid\":\"conversion-fullview-mobile-orders\",children:c.map(m=>(0,I.jsxs)(Wd,{children:[(0,I.jsxs)(_d,{children:[(0,I.jsxs)(Ud,{children:[(0,I.jsx)(Kd,{children:m.customerName}),(0,I.jsx)(Gd,{children:m.date})]}),(0,I.jsx)(jd,{children:m.orderId})]}),(0,I.jsxs)(Yd,{children:[(0,I.jsxs)(sa,{children:[(0,I.jsx)(da,{children:a(r.fullView.conversionRate.columns.items)}),(0,I.jsx)(pa,{children:m.items})]}),(0,I.jsxs)(sa,{children:[(0,I.jsx)(da,{children:a(r.fullView.conversionRate.columns.total)}),(0,I.jsxs)(pa,{children:[\"$\",m.total.toFixed(2)]})]}),(0,I.jsxs)(sa,{children:[(0,I.jsx)(da,{children:a(r.fullView.conversionRate.columns.totalSv)}),(0,I.jsx)(pa,{children:m.bv})]})]})]},m.orderId))}):(0,I.jsx)(Zd,{\"data-testid\":\"conversion-fullview-desktop-table\",children:(0,I.jsx)(pt,{columns:C,data:c,getRowKey:m=>m.orderId})}),V>1&&(0,I.jsx)(ct,{currentPage:h,totalPages:V,onPageChange:T,itemsPerPage:F,totalItems:q.length})]})]})};var Nt=R(require(\"react\")),hp=require(\"@mui/material\"),ye=require(\"recharts\"),xp=R(require(\"@mui/icons-material/TrendingUp\")),bp=R(require(\"@mui/icons-material/TrendingDown\"));var gt=require(\"@mui/material/styles\"),Lt=require(\"@mui/material\"),ip=require(\"@nuskin/foundation-theme\"),{getGenomeColor:hu}=ip.ColorUtils,lp=(0,gt.styled)(Lt.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,sp=(0,gt.styled)(Lt.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,dp=(0,gt.styled)(Lt.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})=>hu(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n }\n`,pp=(0,gt.styled)(Lt.Box)`\n width: 100%;\n height: 320px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`,cp=(0,gt.styled)(Lt.Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>e.palette.text.secondary};\n white-space: nowrap;\n`,up=(0,gt.styled)(Lt.Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`,Zo=(0,gt.styled)(Lt.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`,ao=(0,gt.styled)(Lt.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({theme:e})=>e.palette.text.secondary};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\n }\n`,gp=(0,gt.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`,fp=(0,gt.styled)(\"span\")`\n font-weight: 600;\n line-height: 1;\n`,mp=(0,gt.styled)(\"span\")`\n font-weight: 400;\n line-height: 1;\n`;var P=require(\"react/jsx-runtime\"),Qe={total:\"#3B82F6\",members:\"#7B92A8\",retail:\"#A3B5C7\",brandAffiliates:\"#5F7388\"};function no(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}function xu(e){if(e==null||typeof e!=\"object\")return[];if(Array.isArray(e))return e;let t=e;return Array.isArray(t.daily)?t.daily.map(o=>({date:String(o.date??\"\"),total:no(o.total),members:no(o.members),retail:no(o.retail),brandAffiliates:no(o.brandAffiliates??o.brandAffiliate??o.brand_affiliates??o.brand_affiliate)})):[]}var ca=({signupData:e,signups:t,dateRange:o,market:n,signupView:i,markets:s,isLoading:l=!1,onBack:d,onDateRangeChange:g,onMarketChange:f,onSignupViewChange:u})=>{let[y,x]=(0,Nt.useState)(1),h=10,T=Ft(),F=Nt.default.useCallback(()=>d?.(),[d]),b=it(s),p=Nt.default.useMemo(()=>xu(e).map(c=>{let C=c,S=no(C.members),m=no(C.retail),k=no(C.brandAffiliates??C.brandAffiliate??C.brand_affiliates??C.brand_affiliate),E=no(C.total??C.all??C.signupTotal??C.value);return{...c,total:E>0?E:S+m+k,members:S,retail:m,brandAffiliates:k}}),[e]),w=Nt.default.useMemo(()=>{if(p.length===0)return 0;let V=p[p.length-1];return Qt(V,i)},[p,i]),v=Nt.default.useMemo(()=>{if(p.length<2)return{direction:\"neutral\",absoluteChange:0,percentageChange:a(r.defaults.zeroTrend)};let V=Qt(p[0],i),c=Qt(p[p.length-1],i);if(V<=0)return{direction:\"neutral\",absoluteChange:0,percentageChange:a(r.defaults.zeroTrend)};let C=c-V,S=C/V*100,m=\"neutral\";return S>0?m=\"up\":S<0&&(m=\"down\"),{direction:m,absoluteChange:Math.round(C),percentageChange:`${S>=0?\"+\":\"\"}${S.toFixed(1)}%`}},[p,i,r]),M=p.length>0,L=Nt.default.useMemo(()=>[Rt(o,r),Mt(n,b,r),{key:\"signupView\",label:a(r.filter.signupView.label),value:i,options:[{value:\"all\",label:a(r.defaults.all)},{value:\"members\",label:a(r.defaults.members)},{value:\"retail\",label:a(r.defaults.retail)},{value:\"brandAffiliates\",label:a(r.defaults.brandAffiliates)}]}],[o,n,b,i]),N=Nt.default.useCallback((V,c)=>{V===\"dateRange\"?g?.(c):V===\"market\"?f?.(c):V===\"signupView\"&&(u?.(c),x(1))},[g,f,u]),{totalPages:B,pageItems:U}=St(t,y,h),q=Nt.default.useMemo(()=>[{key:\"id\",label:a(r.fullView.signups.columns.id),sortable:!0},{key:\"name\",label:a(r.fullView.signups.columns.name),sortable:!0,render:V=>(0,P.jsx)(gp,{children:V})},{key:\"date\",label:a(r.defaults.date),sortable:!0},{key:\"type\",label:a(r.defaults.type),sortable:!0},{key:\"email\",label:a(r.fullView.signups.columns.email),sortable:!0},{key:\"status\",label:a(r.fullView.signups.columns.status),sortable:!0}],[]);return l?(0,P.jsxs)(Fe,{\"data-testid\":\"signups-full-view\",children:[(0,P.jsx)(be,{title:a(r.widget.signups.title),dateRange:De(o),onBack:F,filters:L,onFilterChange:N}),(0,P.jsx)(qt,{})]}):(0,P.jsxs)(Fe,{\"data-testid\":\"signups-full-view\",children:[(0,P.jsx)(be,{title:a(r.widget.signups.title),dateRange:De(o),onBack:F,filters:L,onFilterChange:N}),(0,P.jsxs)(Qr,{\"data-testid\":\"signups-fullview-metric-chart\",children:[(0,P.jsxs)(ea,{children:[(0,P.jsx)(ta,{\"data-testid\":\"signups-total\",children:w.toLocaleString()}),(0,P.jsxs)(oa,{direction:v.direction,children:[v.direction===\"up\"&&(0,P.jsx)(xp.default,{}),v.direction===\"down\"&&(0,P.jsx)(bp.default,{}),v.direction!==\"neutral\"&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(fp,{children:[v.absoluteChange>0?\"+\":\"\",v.absoluteChange]}),(0,P.jsx)(mp,{children:v.percentageChange})]}),v.direction===\"neutral\"&&(0,P.jsx)(\"span\",{children:v.percentageChange})]}),(0,P.jsx)(cp,{children:Dt(o)})]}),(0,P.jsx)(ra,{children:M?(0,P.jsxs)(up,{children:[(0,P.jsx)(pp,{\"data-testid\":\"signups-fullview-chart\",children:(0,P.jsx)(ye.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:240,children:(0,P.jsxs)(ye.LineChart,{data:p,children:[(0,P.jsx)(ye.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,P.jsx)(ye.XAxis,{dataKey:\"date\"}),(0,P.jsx)(ye.YAxis,{}),(0,P.jsx)(ye.Tooltip,{}),i===\"all\"&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"total\",stroke:Qe.total,strokeWidth:2,name:a(r.widget.signups.total),dot:{r:2},connectNulls:!0}),(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"members\",stroke:Qe.members,strokeWidth:2,name:a(r.defaults.members),dot:{r:2},connectNulls:!0}),(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"retail\",stroke:Qe.retail,strokeWidth:2,name:a(r.defaults.retail),dot:{r:2},connectNulls:!0}),(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:Qe.brandAffiliates,strokeWidth:2,name:a(r.defaults.brandAffiliates),dot:{r:2},connectNulls:!0})]}),i===\"members\"&&(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"members\",stroke:Qe.members,strokeWidth:2,name:a(r.defaults.members),dot:{r:2},connectNulls:!0}),i===\"retail\"&&(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"retail\",stroke:Qe.retail,strokeWidth:2,name:a(r.defaults.retail),dot:{r:2},connectNulls:!0}),i===\"brandAffiliates\"&&(0,P.jsx)(ye.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:Qe.brandAffiliates,strokeWidth:2,name:a(r.defaults.brandAffiliates),dot:{r:2},connectNulls:!0})]})})}),(0,P.jsxs)(hp.Box,{children:[i===\"all\"&&(0,P.jsxs)(Zo,{children:[(0,P.jsx)(ao,{style:{color:Qe.total},children:a(r.widget.signups.total)}),(0,P.jsx)(ao,{style:{color:Qe.members},children:a(r.defaults.members)}),(0,P.jsx)(ao,{style:{color:Qe.retail},children:a(r.defaults.retail)}),(0,P.jsx)(ao,{style:{color:Qe.brandAffiliates},children:a(r.defaults.brandAffiliates)})]}),i===\"members\"&&(0,P.jsx)(Zo,{children:(0,P.jsx)(ao,{style:{color:Qe.members},children:a(r.defaults.members)})}),i===\"retail\"&&(0,P.jsx)(Zo,{children:(0,P.jsx)(ao,{style:{color:Qe.retail},children:a(r.defaults.retail)})}),i===\"brandAffiliates\"&&(0,P.jsx)(Zo,{children:(0,P.jsx)(ao,{style:{color:Qe.brandAffiliates},children:a(r.defaults.brandAffiliates)})})]})]}):(0,P.jsx)(ro,{\"data-testid\":\"signups-fullview-chart-empty\",children:a(r.widget.signups.noTrendData)})})]}),(0,P.jsxs)(oo,{\"data-testid\":\"signups-fullview-table-section\",children:[(0,P.jsx)(to,{\"data-testid\":\"signups-fullview-table-title\",children:`${a(r.fullView.signups.detailsTitle)} (${t.length})`}),T?(0,P.jsx)(lp,{\"data-testid\":\"signups-fullview-mobile-cards\",children:U.map(V=>(0,P.jsxs)(dp,{children:[(0,P.jsx)(vd,{children:V.name}),(0,P.jsxs)(kd,{children:[V.date,\" - \",V.type]}),(0,P.jsx)(Td,{children:V.email}),(0,P.jsx)(Sd,{status:V.status,children:V.status})]},V.id))}):(0,P.jsx)(sp,{\"data-testid\":\"signups-fullview-desktop-table\",children:(0,P.jsx)(pt,{columns:q,data:U,getRowKey:V=>V.id})}),B>1&&(0,P.jsx)(ct,{currentPage:y,totalPages:B,onPageChange:x,itemsPerPage:h,totalItems:t.length})]})]})};var $t=R(require(\"react\")),It=require(\"recharts\"),zp=R(require(\"@mui/icons-material/TrendingUp\")),Bp=R(require(\"@mui/icons-material/TrendingDown\"));var Gt=require(\"@nuskin/foundation-theme\"),Ne=require(\"@mui/material/styles\"),$e=require(\"@mui/material\"),{getGenomeColor:mn}=Gt.ColorUtils,ua=(0,Gt.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,yp=(0,Gt.styled)(\"div\")`\n flex: 1;\n`,wp=(0,Gt.styled)(\"span\")`\n font-weight: 600;\n`,Cp=(0,Gt.styled)(\"span\")`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,vp=(0,Gt.styled)(\"span\")`\n font-weight: 600;\n`,kp=(0,Ne.styled)($e.Box)`\n display: flex;\n gap: 32px;\n padding: 24px;\n background-color: ${({theme:e})=>mn(e,\"N20\")};\n border-radius: 8px;\n box-shadow: ${({theme:e})=>e.shadows[1]};\n align-items: center;\n justify-content: center;\n width: 100%;\n box-sizing: border-box;\n margin: 0 auto;\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n align-items: flex-start;\n justify-content: flex-start;\n }\n`,Tp=(0,Ne.styled)($e.Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n\n @media (max-width: 767px) {\n width: 100%;\n height: 220px;\n }\n`,Sp=(0,Ne.styled)($e.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`,Dp=(0,Ne.styled)($e.Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Pp=(0,Ne.styled)($e.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`,Rp=(0,Ne.styled)($e.Typography)`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\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\"?\"#2e7d32\":e===\"down\"?\"#d32f2f\":t.palette.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`,Mp=(0,Ne.styled)($e.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 0;\n`,Op=(0,Ne.styled)($e.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n white-space: nowrap;\n min-width: 0;\n\n &:hover {\n background-color: ${({theme:e})=>mn(e,\"N30\")};\n }\n`,ga=(0,Ne.styled)($e.Box)`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({dotColor:e})=>e};\n flex-shrink: 0;\n`,$h=(0,Ne.styled)($e.Box)`\n display: none;\n`,Fp=(0,Ne.styled)($e.Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n flex-shrink: 0;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n`,Lp=(0,Ne.styled)($e.Typography)`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n flex-shrink: 0;\n white-space: nowrap;\n`,Np=(0,Ne.styled)($e.Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n flex-shrink: 0;\n color: ${({theme:e})=>e.palette.text.primary};\n`,$p=(0,Ne.styled)($e.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,Ip=(0,Ne.styled)($e.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Vp=(0,Ne.styled)($e.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>mn(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,Ep=(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: 14px;\n height: 14px;\n font-size: 14px;\n }\n`,Ap=(0,Gt.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`;var A=require(\"react/jsx-runtime\"),fa=({categories:e,dateRange:t,market:o,categorySort:n,summaryChangePct:i,markets:s,isLoading:l=!1,onBack:d,onDateRangeChange:g,onMarketChange:f,onCategorySortChange:u})=>{let[y,x]=(0,$t.useState)(1),h=10,T=Ft(),F=$t.default.useCallback(()=>d?.(),[d]),b=it(s),p=$t.default.useMemo(()=>[Rt(t,r),Mt(o,b,r),{key:\"sort\",label:a(r.filter.productSort.label),value:n,options:[{value:\"revenue\",label:a(r.defaults.byRevenue)},{value:\"trend\",label:a(r.defaults.byTrend)}]}],[n,t,o,b]),w=$t.default.useCallback((k,E)=>{k===\"dateRange\"?g?.(E):k===\"market\"?f?.(E):k===\"sort\"&&(u?.(E),x(1))},[u,g,f]),v=k=>Pr(k,{fontSize:\"12\",fontWeight:\"700\"}),M=k=>k===\"up\"?(0,A.jsx)(zp.default,{sx:{fontSize:\"16px\"},\"aria-hidden\":\"true\"}):k===\"down\"?(0,A.jsx)(Bp.default,{sx:{fontSize:\"16px\"},\"aria-hidden\":\"true\"}):null,L=k=>{if(!k)return\"neutral\";let E=Number.parseFloat(k);return Number.isNaN(E)?\"neutral\":E>0?\"up\":E<0?\"down\":\"neutral\"},N=$t.default.useMemo(()=>[...e].sort((k,E)=>n===\"revenue\"?E.revenue-k.revenue:(E.volume??0)-(k.volume??0)),[e,n]),{totalRevenue:B,totalRevenueTrendDirection:U,totalRevenueTrend:q}=$t.default.useMemo(()=>{let k=N.reduce((ge,fe)=>ge+fe.revenue,0),E,oe;if(i!=null)Math.abs(i)<.1?(oe=\"0%\",E=\"neutral\"):(E=i>0?\"up\":\"down\",oe=`${i>0?\"+\":\"\"}${i.toFixed(1)}%`);else{let{direction:ge,formatted:fe}=Xt(N,ve=>ve.revenue,ve=>ve.trend?.revenue);E=ge,oe=fe}return{totalRevenue:k,totalRevenueTrendDirection:E,totalRevenueTrend:oe}},[N,i]),V=$t.default.useMemo(()=>N.slice(0,5),[N]),{totalPages:c,pageItems:C}=St(N,y,h),S=N[0]?.currencyCode,m=$t.default.useMemo(()=>[{key:\"name\",label:a(r.fullView.categories.columns.category),sortable:!0,render:(E,oe)=>(0,A.jsxs)(ua,{children:[(0,A.jsx)(ga,{dotColor:oe.color}),(0,A.jsx)(Ap,{children:Uo(oe.name)})]})},{key:\"revenue\",label:a(r.defaults.revenue),sortable:!0,render:(E,oe)=>J(Number(E),oe.currencyCode)},{key:\"volume\",label:a(r.defaults.volume),sortable:!0,render:E=>J(Number(E??0),S)},{key:\"percentage\",label:a(r.fullView.categories.columns.percentOfTotal),sortable:!0,render:E=>`${Number(E)}%`},{key:\"trend\",label:a(r.defaults.trend),render:(E,oe)=>oe.trend?.revenue??a(r.defaults.noValue)}],[S]);return l?(0,A.jsxs)(Fe,{\"data-testid\":\"categories-full-view\",children:[(0,A.jsx)(be,{title:a(r.widget.topCategories.title),dateRange:De(t),onBack:F,filters:p,onFilterChange:w}),(0,A.jsx)(qt,{})]}):e.length===0?(0,A.jsxs)(Fe,{\"data-testid\":\"categories-full-view\",children:[(0,A.jsx)(be,{title:a(r.widget.topCategories.title),dateRange:De(t),onBack:F,filters:p,onFilterChange:w}),(0,A.jsx)(ro,{\"data-testid\":\"categories-fullview-empty\",children:a(r.fullView.categories.noCategoryData)})]}):(0,A.jsxs)(Fe,{\"data-testid\":\"categories-full-view\",children:[(0,A.jsx)(be,{title:a(r.widget.topCategories.title),dateRange:De(t),onBack:F,filters:p,onFilterChange:w}),(0,A.jsxs)(kp,{\"data-testid\":\"categories-fullview-top-section\",children:[(0,A.jsxs)(Tp,{\"data-testid\":\"categories-fullview-chart\",children:[(0,A.jsx)(It.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,A.jsxs)(It.PieChart,{children:[(0,A.jsx)(It.Pie,{data:N,cx:\"50%\",cy:\"50%\",innerRadius:\"50%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,label:v,labelLine:!1,children:N.map(k=>(0,A.jsx)(It.Cell,{fill:k.color},`cell-${k.id}`))}),(0,A.jsx)(It.Tooltip,{formatter:k=>J(k,S)})]})}),(0,A.jsxs)(Sp,{\"data-testid\":\"categories-fullview-donut-center\",children:[(0,A.jsx)(Dp,{children:a(r.stats.revenue)}),(0,A.jsx)(Pp,{children:J(B,S)}),(0,A.jsxs)(Rp,{direction:U,children:[M(U),(0,A.jsx)(\"span\",{children:q})]})]})]}),(0,A.jsx)(Mp,{\"data-testid\":\"categories-fullview-summary\",children:V.map(k=>(0,A.jsxs)(Op,{children:[(0,A.jsx)(ga,{dotColor:k.color}),(0,A.jsx)(Fp,{children:Uo(k.name)}),(0,A.jsx)(Lp,{children:J(k.revenue,k.currencyCode)}),(0,A.jsxs)(Np,{children:[\"(\",k.percentage,\"%)\"]}),k.trend?.revenue?(0,A.jsx)(Ep,{direction:L(k.trend.revenue),children:M(L(k.trend.revenue))}):null]},k.id))})]}),(0,A.jsxs)(oo,{\"data-testid\":\"categories-fullview-table-section\",children:[(0,A.jsxs)(to,{\"data-testid\":\"categories-fullview-table-title\",children:[a(r.fullView.categories.allCategoriesTitle),\" (\",N.length,\")\"]}),T?(0,A.jsx)(Ip,{children:C.map(k=>(0,A.jsxs)(Vp,{children:[(0,A.jsx)(ga,{dotColor:k.color}),(0,A.jsxs)(yp,{children:[(0,A.jsx)(wp,{children:k.name}),(0,A.jsx)(Cp,{children:J(k.revenue,k.currencyCode)})]}),(0,A.jsxs)(vp,{children:[k.percentage,\"%\"]})]},k.id))}):(0,A.jsx)($p,{children:(0,A.jsx)(pt,{columns:m,data:C,sortable:!0,getRowKey:k=>k.id})}),c>1&&(0,A.jsx)(ct,{currentPage:y,totalPages:c,onPageChange:x,itemsPerPage:h,totalItems:N.length})]})]})};var hn=R(require(\"react\"));function uo(e){hn.default.useEffect(()=>{if(e!==void 0)return Ho(e),()=>{Ho(void 0)}},[e])}var Hp=({translate:e,children:t})=>(uo(e),t??null);function Wp(){return hn.default.useCallback(e=>Je(e),[])}var Mo=require(\"react/jsx-runtime\"),bu=\"shoppingDashboardView\",yu=[],wu=[],Cu=[],vu=[],ku=[],Tu=[];function Up(e){return typeof e==\"object\"&&e!==null}function Su(e){return e===\"dashboard\"||e===\"products\"||e===\"conversion-rate\"||e===\"signups\"||e===\"categories\"}function ma(e,t){if(!Up(e))return\"dashboard\";let o=e[t];return Su(o)?o:\"dashboard\"}function _p(e,t,o){return{...Up(e)?e:{},[t]:o}}function Du(e,t){return{pathname:e?.pathname,search:e?.search,hash:e?.hash,state:t}}var Kp=({stats:e,topProducts:t,conversionData:o,signupData:n,categories:i,categoriesSummaryChangePct:s,conversionSummaryChangePct:l,orders:d,signups:g,isLoading:f=!1,error:u,shopTitle:y,className:x,translate:h,initialDateRange:T=st,initialMarket:F=\"all\",initialProductSort:b=\"units\",initialSignupView:p=\"all\",initialConversionFilter:w=\"all\",initialCategorySort:v=\"revenue\",markets:M,historyAdapter:L,historyStateKey:N=bu,resetToDashboardOnMount:B=!0,onDateRangeChange:U,onMarketChange:q,onProductSortChange:V,onSignupViewChange:c,onConversionFilterChange:C,onCategorySortChange:S,onViewChange:m,onProductsExport:k,onConversionExport:E,onSignupsExport:oe,onCategoriesExport:ge})=>{uo(h);let[fe,ve]=le.default.useState(\"dashboard\"),We=le.default.useRef(!1),[Q,ft]=le.default.useState(T),[et,jt]=le.default.useState(F),[mo,er]=le.default.useState(b),[tr,or]=le.default.useState(p),[rr,ar]=le.default.useState(w),[nr,ir]=le.default.useState(v),$o=t??yu,Io=o??wu,lr=n??Cu,sr=i??vu,Ra=d??ku,mt=g??Tu,at=le.default.useCallback(Y=>{ve(Y),m?.(Y)},[m]),zt=le.default.useCallback(()=>L?ma(L.location?.state,N):typeof window>\"u\"?\"dashboard\":ma(window.history.state,N),[L,N]),tt=le.default.useCallback((Y,Wt)=>{if(L){let cr=_p(L.location?.state,N,Y),Pn=Du(L.location,cr);if(Wt===\"replace\"){L.replace(Pn);return}L.push(Pn);return}if(typeof window>\"u\")return;let io=_p(window.history.state,N,Y);if(Wt===\"replace\"){window.history.replaceState(io,\"\");return}window.history.pushState(io,\"\")},[L,N]);le.default.useEffect(()=>{if(B?(tt(\"dashboard\",\"replace\"),We.current=!1,at(\"dashboard\")):at(zt()),L)return L.listen((Wt,io)=>{if(io===\"POP\"){let cr=ma(Wt.state,N);We.current=cr!==\"dashboard\",at(cr)}});let Y=Wt=>{let io=ma(Wt.state,N);We.current=io!==\"dashboard\",at(io)};return window.addEventListener(\"popstate\",Y),()=>{window.removeEventListener(\"popstate\",Y)}},[L,N,zt,B,at,tt]);let nt=le.default.useCallback(Y=>{We.current=!0,tt(Y,\"push\"),at(Y)},[at,tt]),Bt=le.default.useCallback(()=>{if(fe!==\"dashboard\"&&We.current){if(L){L.goBack();return}typeof window<\"u\"&&window.history.back();return}We.current=!1,tt(\"dashboard\",\"replace\"),at(\"dashboard\")},[fe,L,at,tt]),yt=le.default.useCallback(Y=>{ft(Y),U?.(Y)},[U]),Yt=le.default.useCallback(Y=>{jt(Y),q?.(Y)},[q]),Vo=le.default.useCallback(Y=>{er(Y),V?.(Y)},[V]),Eo=le.default.useCallback(Y=>{or(Y),c?.(Y)},[c]),dr=le.default.useCallback(Y=>{ar(Y),C?.(Y)},[C]),pr=le.default.useCallback(Y=>{ir(Y),S?.(Y)},[S]),Ma=le.default.useCallback(()=>{nt(\"products\")},[nt]),ee=le.default.useCallback(()=>{nt(\"conversion-rate\")},[nt]),Jt=le.default.useCallback(()=>{nt(\"signups\")},[nt]),Ht=le.default.useCallback(()=>{nt(\"categories\")},[nt]);return fe===\"products\"?(0,Mo.jsx)(Po,{products:$o,dateRange:Q,market:et,productSort:mo,markets:M,isLoading:f,onBack:Bt,onDateRangeChange:yt,onMarketChange:Yt,onProductSortChange:Vo}):fe===\"conversion-rate\"?(0,Mo.jsx)(Ro,{conversionData:Io,orders:Ra,dateRange:Q,market:et,conversionFilter:rr,markets:M,isLoading:f,onBack:Bt,onDateRangeChange:yt,onMarketChange:Yt,onConversionFilterChange:dr}):fe===\"signups\"?(0,Mo.jsx)(ca,{signupData:lr,signups:mt,dateRange:Q,market:et,signupView:tr,markets:M,isLoading:f,onBack:Bt,onDateRangeChange:yt,onMarketChange:Yt,onSignupViewChange:Eo}):fe===\"categories\"?(0,Mo.jsx)(fa,{categories:sr,dateRange:Q,market:et,categorySort:nr,summaryChangePct:s,markets:M,isLoading:f,onBack:Bt,onDateRangeChange:yt,onMarketChange:Yt,onCategorySortChange:pr}):(0,Mo.jsx)(Zr,{stats:e,topProducts:$o,conversionData:Io,signupData:lr,categories:sr,categoriesSummaryChangePct:s,conversionSummaryChangePct:l,isLoading:f,error:u,shopTitle:y,className:x,dateRange:Q,market:et,productSort:mo,signupView:tr,conversionFilter:rr,categorySort:nr,markets:M,onDateRangeChange:yt,onMarketChange:Yt,onProductSortChange:Vo,onSignupViewChange:Eo,onConversionFilterChange:dr,onCategorySortChange:pr,onProductsTitleClick:Ma,onConversionTitleClick:ee,onSignupsTitleClick:Jt,onCategoriesToTitleClick:Ht,onProductsExport:k,onConversionExport:E,onSignupsExport:oe,onCategoriesExport:ge})};var Oo=require(\"@nuskin/foundation-theme\"),xn=(0,Oo.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`,Gp=(0,Oo.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`,jp=(0,Oo.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`,Yp=(0,Oo.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`,Jp=(0,Oo.styled)(\"div\")`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;var ha=R(require(\"react\")),Vt=require(\"recharts\");var z={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:\"--\"},byRevenue:{key:\"productOfferDashboard.defaults.byRevenue\",fallback:\"Revenue\"},byUnits:{key:\"productOfferDashboard.defaults.byUnits\",fallback:\"Units\"},byVolume:{key:\"productOfferDashboard.defaults.byVolume\",fallback:\"Volume\"}}};function K(e){return Je(e)}var j=require(\"react/jsx-runtime\"),Pu=({offers:e,offerSort:t,isLoading:o=!1,title:n,onSortChange:i,onTitleClick:s,onExport:l})=>{let d=ha.default.useCallback(h=>{let T=h.target.value;i?.(T)},[i]),{sortedOffers:g,totalRevenue:f,trendDirection:u,formattedTrend:y}=ha.default.useMemo(()=>{let h=[...e].sort((p,w)=>t===\"revenue\"?w.revenue-p.revenue:w.percentage-p.percentage),T=h.reduce((p,w)=>p+w.revenue,0),{direction:F,formatted:b}=Xt(h,p=>p.revenue,p=>p.trend?.revenue);return{sortedOffers:h,totalRevenue:T,trendDirection:F,formattedTrend:b}},[e,t]),x=g[0]?.currencyCode;return o&&e.length===0?(0,j.jsx)(eo,{\"data-testid\":\"widget-top-offers\",children:(0,j.jsx)(Sr,{})}):e.length===0?(0,j.jsxs)(eo,{\"data-testid\":\"widget-top-offers\",children:[(0,j.jsx)(So,{children:(0,j.jsx)(Do,{children:n??K(z.widget.topPerformingOffers.title)})}),(0,j.jsx)(jr,{\"data-testid\":\"top-offers-empty-state\",children:(0,j.jsx)(Yr,{children:K(z.widget.topPerformingOffers.emptyState)})})]}):(0,j.jsxs)(eo,{as:\"section\",\"data-testid\":\"widget-top-offers\",\"aria-label\":K(z.ariaLabel.topOffers),children:[(0,j.jsxs)(So,{children:[(0,j.jsx)(Do,{as:\"button\",onClick:s,\"aria-label\":K(z.ariaLabel.topOffers),\"data-testid\":\"widget-title-top-offers\",children:n??K(z.widget.topPerformingOffers.title)}),(0,j.jsxs)($r,{children:[(0,j.jsxs)(As,{id:\"offer-sort\",\"data-testid\":\"offer-sort-dropdown\",value:t,onChange:d,disabled:o,\"aria-label\":K(z.ariaLabel.topOffers),children:[(0,j.jsx)(\"option\",{value:\"revenue\",children:K(z.defaults.byRevenue)}),(0,j.jsx)(\"option\",{value:\"units\",children:K(z.defaults.byUnits)})]}),(0,j.jsx)(lt,{widgetId:\"top-offers\",onFullView:s,onExport:l})]})]}),(0,j.jsxs)(Ir,{children:[(0,j.jsxs)(Vr,{\"data-testid\":\"top-offers-chart\",children:[(0,j.jsx)(Vt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,j.jsxs)(Vt.PieChart,{children:[(0,j.jsx)(Vt.Pie,{data:g,cx:\"50%\",cy:\"50%\",innerRadius:\"55%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:g.map(h=>(0,j.jsx)(Vt.Cell,{fill:h.color},`cell-${h.id}`))}),(0,j.jsx)(Vt.Tooltip,{formatter:h=>J(h,x)})]})}),(0,j.jsxs)(Er,{\"data-testid\":\"top-offers-donut-center\",children:[(0,j.jsx)(Ar,{children:K(z.widget.topPerformingOffers.totalRevenue)}),(0,j.jsx)(zr,{children:J(f,x)}),(0,j.jsx)(Br,{direction:u,children:y})]})]}),(0,j.jsx)(Hr,{\"data-testid\":\"top-offers-legend-container\",children:g.map((h,T)=>{let F=Tt(h.trend?.revenue);return(0,j.jsxs)(Wr,{\"data-testid\":`offer-legend-${T}`,children:[(0,j.jsx)(_r,{color:h.color}),(0,j.jsxs)(Ur,{children:[(0,j.jsx)(Kr,{children:Uo(h.name)}),(0,j.jsx)(Gr,{children:J(h.revenue,h.currencyCode)})]}),(0,j.jsxs)(zs,{children:[h.percentage,\"%\"]}),h.trend?.revenue?(0,j.jsx)(Ws,{direction:F,\"data-testid\":`offer-legend-trend-${T}`,\"aria-label\":h.trend.revenue,children:Ze(F)}):null]},h.id)})})]})]})},qo=ha.default.memo(Pu);qo.displayName=\"TopPerformingOffersPieChart\";var wn=R(require(\"react\"));var Ru=/[\\\\/?*[\\]:]/g;function bn(e){let t=e.trim(),o=t.length>0?t:\"export\";return o.toLowerCase().endsWith(\".xlsx\")?o:`${o}.xlsx`}function yn(e){let t=e.replace(Ru,\" \").trim();return(t.length>0?t:\"Export\").slice(0,31)}async function Xo({rows:e,columns:t,fileName:o,sheetName:n}){let{Workbook:i}=await import(\"exceljs\"),s=new i,l=s.addWorksheet(yn(n));l.columns=t.map(g=>({header:g.header,key:g.header})),e.forEach(g=>{let f={};t.forEach(u=>{f[u.header]=u.value(g)??\"\"}),l.addRow(f)});let d=await s.xlsx.writeBuffer();Mu(d,bn(o))}function Mu(e,t){let o=new Blob([new Uint8Array(e)],{type:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"}),n=URL.createObjectURL(o),i=document.createElement(\"a\");i.href=n,i.download=t,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(n)}var Ou=[{header:\"Rank\",value:e=>e.rank},{header:\"Product ID\",value:e=>e.id},{header:\"Product Name\",value:e=>e.name},{header:\"Units Sold\",value:e=>e.unitsSold},{header:\"Total Revenue\",value:e=>e.revenue},{header:\"Currency\",value:e=>e.currencyCode},{header:\"Volume DC-SV\",value:e=>e.volume},{header:\"Trend\",value:e=>e.trend?.units??e.trend?.revenue??e.trend?.volume}],Fu=[{header:\"Offer ID\",value:e=>e.id},{header:\"Offer Name\",value:e=>e.name},{header:\"Total Revenue\",value:e=>e.revenue},{header:\"Currency\",value:e=>e.currencyCode},{header:\"Total Volume\",value:e=>e.volume??e.units},{header:\"Share %\",value:e=>e.percentage},{header:\"Trend\",value:e=>e.trend?.revenue??e.trend?.units}];function xa(e){return Xo({rows:e,columns:Ou,fileName:\"top-selling-products\",sheetName:\"Top Selling Products\"})}function ba(e){return Xo({rows:e,columns:Fu,fileName:\"top-performing-offers\",sheetName:\"Top Performing Offers\"})}function ya({topProducts:e,topOffers:t,topProductsExportData:o,topOffersExportData:n,showTopProductsExportOption:i=!0,showTopOffersExportOption:s=!0,isLoading:l=!1}){let d=o??e,g=n??t,f=i&&!l&&d.length>0,u=s&&!l&&g.length>0,y=wn.default.useCallback(()=>xa(d),[d]),x=wn.default.useCallback(()=>ba(g),[g]);return{onTopProductsExport:f?y:void 0,onTopOffersExport:u?x:void 0}}var Ge=require(\"react/jsx-runtime\"),Lu=[],Nu=[],$u=[],wa=({stats:e,topProducts:t,conversionData:o,topOffers:n,isLoading:i=!1,error:s,dashboardTitle:l,className:d,dateRange:g=st,market:f=\"all\",productSort:u=\"units\",conversionFilter:y=\"all\",offerSort:x=\"revenue\",conversionSummaryRate:h,conversionSummaryChangePct:T,topProductsExportData:F,topOffersExportData:b,showTopProductsExportOption:p=!0,showTopOffersExportOption:w=!0,markets:v,onDateRangeChange:M,onMarketChange:L,onProductSortChange:N,onConversionFilterChange:B,onOfferSortChange:U,onProductsTitleClick:q,onConversionTitleClick:V,onOffersTitleClick:c})=>{let C=t??Lu,S=o??Nu,m=n??$u,{onTopProductsExport:k,onTopOffersExport:E}=ya({topProducts:C,topOffers:m,topProductsExportData:F,topOffersExportData:b,showTopProductsExportOption:p,showTopOffersExportOption:w,isLoading:i}),oe=ge=>ge?ge.startsWith(\"+\")&&ge!==\"+0%\"?\"up\":ge.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\";return s?(0,Ge.jsx)(xn,{as:\"main\",className:d,\"aria-label\":K(z.ariaLabel.dashboard),children:(0,Ge.jsxs)(Jp,{\"data-testid\":\"dashboard-error\",role:\"alert\",\"aria-live\":\"assertive\",children:[(0,Ge.jsxs)(\"strong\",{children:[K(z.error),\":\"]}),\" \",s]})}):(0,Ge.jsxs)(xn,{as:\"main\",className:d,\"data-testid\":\"product-offer-dashboard\",\"aria-label\":K(z.ariaLabel.dashboard),\"aria-busy\":i,children:[(0,Ge.jsx)(yo,{shopTitle:l??K(z.title),dateRange:g,market:f,isLoading:i,markets:v,stats:e?{shopTitle:e.shopTitle??\"\",dateRange:e.dateRange,selectedMarket:e.selectedMarket,metrics:{revenue:e.metrics.revenue,volume:\"\",siteVisits:\"\",conversionRate:e.metrics.conversionRate},trend:e.trend??{}}:void 0,onDateRangeChange:M,onMarketChange:L}),(0,Ge.jsxs)(Gp,{\"data-testid\":\"top-charts-row\",children:[(0,Ge.jsx)(po,{conversionData:S,conversionFilter:y,dateRange:g,isLoading:i,summaryRate:h,summaryChangePct:T,onFilterChange:B,onTitleClick:V}),(0,Ge.jsxs)(jp,{\"data-testid\":\"stats-card-stack\",children:[(0,Ge.jsx)(kt,{layout:\"split\",title:K(z.stats.revenue),value:e?.metrics?.revenue??\"$0\",trendDirection:oe(e?.trend?.revenue),trendValue:e?.trend?.revenue,caption:K(z.stats.comparedTo),testId:\"stats-card-revenue\",isLoading:i}),(0,Ge.jsx)(kt,{layout:\"split\",title:K(z.stats.offersPurchased),value:e?.metrics?.offersPurchased??\"0\",trendDirection:oe(e?.trend?.offersPurchased),trendValue:e?.trend?.offersPurchased,caption:K(z.stats.comparedTo),testId:\"stats-card-offers-purchased\",isLoading:i})]})]}),(0,Ge.jsxs)(Yp,{\"data-testid\":\"bottom-charts-row\",children:[(0,Ge.jsx)(so,{products:C,productSort:u,isLoading:i,maxProducts:5,onSortChange:N,onTitleClick:q,onExport:k}),(0,Ge.jsx)(qo,{offers:m,offerSort:x,isLoading:i,onSortChange:U,onTitleClick:c,onExport:E})]})]})};var ue=R(require(\"react\"));var Et=R(require(\"react\")),At=require(\"recharts\");var ne=require(\"@mui/material/styles\"),re=require(\"@mui/material\"),Zp=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Cn}=Zp.ColorUtils,qp=(0,ne.styled)(re.Box)`\n display: flex;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>Cn(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`,Xp=(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`,Qp=(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`,ec=(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`,tc=(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`,oc=(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`,rc=(0,ne.styled)(re.Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1;\n`,ac=(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})=>Cn(e,\"N30\")};\n }\n`,Ca=(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`,nc=(0,ne.styled)(re.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,ic=(0,ne.styled)(re.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,lc=(0,ne.styled)(re.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,sc=(0,ne.styled)(re.Typography)`\n font-size: 1rem;\n font-weight: 600;\n flex-shrink: 0;\n`,dc=(0,ne.styled)(re.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`,pc=(0,ne.styled)(re.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`,cc=(0,ne.styled)(re.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,uc=(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`,gc=(0,ne.styled)(re.Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>Cn(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,fc=(0,ne.styled)(re.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n`,mc=(0,ne.styled)(re.Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n color: ${({theme:e})=>e.palette.text.primary};\n word-break: break-word;\n`,hc=(0,ne.styled)(re.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`,va=(0,ne.styled)(re.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`,ka=(0,ne.styled)(re.Typography)`\n font-size: 0.625rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n text-transform: uppercase;\n`,vn=(0,ne.styled)(re.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n`,xc=(0,ne.styled)(re.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 O=require(\"react/jsx-runtime\"),Ta=({offers:e,dateRange:t,market:o,offerSort:n,markets:i,isLoading:s=!1,onBack:l,onDateRangeChange:d,onMarketChange:g,onOfferSortChange:f})=>{let[u,y]=(0,Et.useState)(1),x=10,h=Ft(),T=Et.default.useCallback(()=>l?.(),[l]),F=it(i),b=Et.default.useMemo(()=>[Rt(t,z),Mt(o,F,z),{key:\"sort\",label:K(z.defaults.byRevenue),value:n,options:[{value:\"revenue\",label:K(z.defaults.byRevenue)},{value:\"units\",label:K(z.defaults.byUnits)}]}],[t,o,F,n]),p=Et.default.useCallback((c,C)=>{c===\"dateRange\"?d?.(C):c===\"market\"?g?.(C):c===\"sort\"&&(f?.(C),y(1))},[f,d,g]),w=Et.default.useMemo(()=>[...e].sort((c,C)=>n===\"revenue\"?C.revenue-c.revenue:C.percentage-c.percentage),[e,n]),{totalRevenue:v,totalRevenueTrendDirection:M,totalRevenueTrend:L}=Et.default.useMemo(()=>{let c=w.reduce((m,k)=>m+k.revenue,0),{direction:C,formatted:S}=Xt(w,m=>m.revenue,m=>m.trend?.revenue);return{totalRevenue:c,totalRevenueTrendDirection:C,totalRevenueTrend:S}},[w]),N=Et.default.useMemo(()=>w.slice(0,5),[w]),{totalPages:B,pageItems:U}=St(w,u,x),q=Et.default.useMemo(()=>[{key:\"name\",label:K(z.fullView.topOffers.columnName),sortable:!0,render:(c,C)=>(0,O.jsxs)(ua,{children:[(0,O.jsx)(Ca,{dotColor:C.color}),(0,O.jsx)(\"span\",{children:C.name})]})},{key:\"revenue\",label:K(z.fullView.topOffers.columnRevenue),sortable:!0,render:(c,C)=>J(Number(c),C.currencyCode)},{key:\"percentage\",label:K(z.fullView.topOffers.columnPercentage),sortable:!0,render:c=>`${Number(c)}%`},{key:\"trend\",label:K(z.fullView.topOffers.columnTrend),render:(c,C)=>{if(!C.trend?.revenue)return K(z.defaults.noData);let S=Tt(C.trend.revenue);return(0,O.jsxs)(pc,{direction:S,children:[Ze(S),(0,O.jsx)(\"span\",{children:C.trend.revenue})]})}}],[]),V=w[0]?.currencyCode;return s?(0,O.jsxs)(Fe,{\"data-testid\":\"top-offers-full-view\",children:[(0,O.jsx)(be,{title:K(z.fullView.topOffers.title),dateRange:De(t),onBack:T,filters:b,onFilterChange:p}),(0,O.jsx)(qt,{})]}):e.length===0?(0,O.jsxs)(Fe,{\"data-testid\":\"top-offers-full-view\",children:[(0,O.jsx)(be,{title:K(z.fullView.topOffers.title),dateRange:De(t),onBack:T,filters:b,onFilterChange:p}),(0,O.jsx)(ro,{\"data-testid\":\"top-offers-fullview-empty\",children:K(z.widget.topPerformingOffers.emptyState)})]}):(0,O.jsxs)(Fe,{\"data-testid\":\"top-offers-full-view\",children:[(0,O.jsx)(be,{title:K(z.fullView.topOffers.title),dateRange:De(t),onBack:T,filters:b,onFilterChange:p}),(0,O.jsxs)(qp,{\"data-testid\":\"top-offers-fullview-top-section\",children:[(0,O.jsxs)(Xp,{\"data-testid\":\"top-offers-fullview-chart\",children:[(0,O.jsx)(At.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,O.jsxs)(At.PieChart,{children:[(0,O.jsx)(At.Pie,{data:w,cx:\"50%\",cy:\"50%\",innerRadius:\"50%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:w.map(c=>(0,O.jsx)(At.Cell,{fill:c.color},`cell-${c.id}`))}),(0,O.jsx)(At.Tooltip,{formatter:c=>J(c,V)})]})}),(0,O.jsxs)(Qp,{\"data-testid\":\"top-offers-fullview-donut-center\",children:[(0,O.jsx)(ec,{children:K(z.widget.topPerformingOffers.totalRevenue)}),(0,O.jsx)(tc,{children:J(v,V)}),(0,O.jsx)(oc,{direction:M,children:L})]})]}),(0,O.jsx)(rc,{\"data-testid\":\"top-offers-fullview-summary\",children:N.map(c=>{let C=Tt(c.trend?.revenue);return(0,O.jsxs)(ac,{children:[(0,O.jsx)(Ca,{dotColor:c.color}),(0,O.jsxs)(nc,{children:[(0,O.jsx)(ic,{children:c.name}),(0,O.jsx)(lc,{children:J(c.revenue,c.currencyCode)})]}),(0,O.jsxs)(sc,{children:[c.percentage,\"%\"]}),c.trend?.revenue?(0,O.jsx)(dc,{direction:C,\"aria-label\":c.trend.revenue,children:Ze(C)}):null]},c.id)})})]}),(0,O.jsxs)(oo,{\"data-testid\":\"top-offers-table\",children:[(0,O.jsxs)(to,{\"data-testid\":\"top-offers-fullview-table-title\",children:[K(z.fullView.topOffers.title),\" (\",w.length,\")\"]}),h?(0,O.jsx)(uc,{children:U.map(c=>{let C=Dr(c.trend?.revenue),S=\"neutral\";return C!==null&&C>0?S=\"up\":C!==null&&C<0&&(S=\"down\"),(0,O.jsxs)(gc,{children:[(0,O.jsxs)(fc,{children:[(0,O.jsx)(Ca,{dotColor:c.color}),(0,O.jsx)(mc,{children:c.name})]}),(0,O.jsxs)(hc,{children:[(0,O.jsxs)(va,{children:[(0,O.jsx)(ka,{children:K(z.fullView.topOffers.columnRevenue)}),(0,O.jsx)(vn,{children:J(c.revenue,c.currencyCode)})]}),(0,O.jsxs)(va,{children:[(0,O.jsx)(ka,{children:K(z.fullView.topOffers.columnPercentage)}),(0,O.jsxs)(vn,{children:[c.percentage,\"%\"]})]}),(0,O.jsxs)(va,{children:[(0,O.jsx)(ka,{children:K(z.fullView.topOffers.columnTrend)}),(0,O.jsx)(xc,{direction:S,children:c.trend?.revenue?(0,O.jsxs)(O.Fragment,{children:[Ze(S),(0,O.jsx)(\"span\",{children:c.trend.revenue})]}):K(z.defaults.noData)})]})]})]},c.id)})}):(0,O.jsx)(cc,{children:(0,O.jsx)(pt,{columns:q,data:U,sortable:!0,getRowKey:c=>c.id})}),B>1&&(0,O.jsx)(ct,{currentPage:u,totalPages:B,onPageChange:y,itemsPerPage:x,totalItems:w.length,\"data-testid\":\"top-offers-pagination\"})]})]})};var Qo=require(\"react/jsx-runtime\"),Iu=\"productOfferDashboardView\",Vu=[],Eu=[],Au=[],zu=[];function yc(e){return typeof e==\"object\"&&e!==null}function Bu(e){return e===\"dashboard\"||e===\"products\"||e===\"conversion-rate\"||e===\"top-offers\"}function Sa(e,t){if(!yc(e))return\"dashboard\";let o=e[t];return Bu(o)?o:\"dashboard\"}function bc(e,t,o){return{...yc(e)?e:{},[t]:o}}function Hu(e,t){return{pathname:e?.pathname,search:e?.search,hash:e?.hash,state:t}}var wc=({stats:e,topProducts:t,conversionData:o,topOffers:n,isLoading:i=!1,error:s,dashboardTitle:l,className:d,allProducts:g,orders:f,allOffers:u,conversionSummaryRate:y,conversionSummaryChangePct:x,conversionFullViewData:h,conversionFullViewRate:T,conversionFullViewChangePct:F,topProductsExportData:b,topOffersExportData:p,showTopProductsExportOption:w=!0,showTopOffersExportOption:v=!0,initialDateRange:M=st,initialMarket:L=\"all\",initialProductSort:N=\"units\",initialConversionFilter:B=\"all\",initialOfferSort:U=\"revenue\",markets:q,translate:V,historyAdapter:c,historyStateKey:C=Iu,resetToDashboardOnMount:S=!0,onDateRangeChange:m,onMarketChange:k,onProductSortChange:E,onConversionFilterChange:oe,onOfferSortChange:ge,onViewChange:fe})=>{uo(V);let[ve,We]=ue.default.useState(\"dashboard\"),Q=ue.default.useRef(!1),[ft,et]=ue.default.useState(M),[jt,mo]=ue.default.useState(L),[er,tr]=ue.default.useState(N),[or,rr]=ue.default.useState(B),[ar,nr]=ue.default.useState(U),ir=t??Vu,$o=o??Eu,Io=n??Au,lr=g??ir,sr=f??zu,Ra=u??Io,mt=ue.default.useCallback(ee=>{We(ee),fe?.(ee)},[fe]),at=ue.default.useCallback(()=>c?Sa(c.location?.state,C):typeof window>\"u\"?\"dashboard\":Sa(window.history.state,C),[c,C]),zt=ue.default.useCallback((ee,Jt)=>{if(c){let Y=bc(c.location?.state,C,ee),Wt=Hu(c.location,Y);if(Jt===\"replace\"){c.replace(Wt);return}c.push(Wt);return}if(typeof window>\"u\")return;let Ht=bc(window.history.state,C,ee);if(Jt===\"replace\"){window.history.replaceState(Ht,\"\");return}window.history.pushState(Ht,\"\")},[c,C]);ue.default.useEffect(()=>{if(S?(zt(\"dashboard\",\"replace\"),Q.current=!1,mt(\"dashboard\")):mt(at()),c)return c.listen((Jt,Ht)=>{if(Ht===\"POP\"){let Y=Sa(Jt.state,C);Q.current=Y!==\"dashboard\",mt(Y)}});let ee=Jt=>{let Ht=Sa(Jt.state,C);Q.current=Ht!==\"dashboard\",mt(Ht)};return window.addEventListener(\"popstate\",ee),()=>{window.removeEventListener(\"popstate\",ee)}},[c,C,at,S,mt,zt]);let tt=ue.default.useCallback(ee=>{Q.current=!0,zt(ee,\"push\"),mt(ee)},[mt,zt]),nt=ue.default.useCallback(()=>{if(ve!==\"dashboard\"&&Q.current){if(c){c.goBack();return}typeof window<\"u\"&&window.history.back();return}Q.current=!1,zt(\"dashboard\",\"replace\"),mt(\"dashboard\")},[ve,c,mt,zt]),Bt=ue.default.useCallback(ee=>{et(ee),m?.(ee)},[m]),yt=ue.default.useCallback(ee=>{mo(ee),k?.(ee)},[k]),Yt=ue.default.useCallback(ee=>{tr(ee),E?.(ee)},[E]),Vo=ue.default.useCallback(ee=>{rr(ee),oe?.(ee)},[oe]),Eo=ue.default.useCallback(ee=>{nr(ee),ge?.(ee)},[ge]),dr=ue.default.useCallback(()=>{tt(\"products\")},[tt]),pr=ue.default.useCallback(()=>{tt(\"conversion-rate\")},[tt]),Ma=ue.default.useCallback(()=>{tt(\"top-offers\")},[tt]);return ve===\"products\"?(0,Qo.jsx)(Po,{products:lr,dateRange:ft,market:jt,productSort:er,markets:q,isLoading:i,onBack:nt,onDateRangeChange:Bt,onMarketChange:yt,onProductSortChange:Yt}):ve===\"conversion-rate\"?(0,Qo.jsx)(Ro,{conversionData:h??$o,orders:sr,summaryRate:T??y,summaryChangePct:F??x,dateRange:ft,market:jt,conversionFilter:or,markets:q,isLoading:i,onBack:nt,onDateRangeChange:Bt,onMarketChange:yt,onConversionFilterChange:Vo}):ve===\"top-offers\"?(0,Qo.jsx)(Ta,{offers:Ra,dateRange:ft,market:jt,offerSort:ar,markets:q,isLoading:i,onBack:nt,onDateRangeChange:Bt,onMarketChange:yt,onOfferSortChange:Eo}):(0,Qo.jsx)(wa,{stats:e,topProducts:ir,conversionData:$o,topOffers:Io,isLoading:i,error:s,dashboardTitle:l,className:d,dateRange:ft,market:jt,productSort:er,conversionFilter:or,offerSort:ar,conversionSummaryRate:y,conversionSummaryChangePct:x,topProductsExportData:b,topOffersExportData:p,showTopProductsExportOption:w,showTopOffersExportOption:v,markets:q,onDateRangeChange:Bt,onMarketChange:yt,onProductSortChange:Yt,onConversionFilterChange:Vo,onOfferSortChange:Eo,onProductsTitleClick:dr,onConversionTitleClick:pr,onOffersTitleClick:Ma})};var Fo=require(\"@nuskin/foundation-theme\"),{getGenomeColor:go}=Fo.ColorUtils,Cc=(0,Fo.styled)(\"div\")`\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n`,vc=(0,Fo.styled)(\"select\")`\n min-width: 160px;\n height: 40px;\n padding: 8px 12px;\n background-color: ${({theme:e})=>go(e,\"N20\")};\n border: 1px solid ${({theme:e})=>go(e,\"N40\")};\n border-radius: 8px;\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>go(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>go(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>go(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>go(e,\"A20\")};\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n`,kc=(0,Fo.styled)(\"label\")`\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n color: ${({theme:e})=>go(e,\"N70\")};\n`;var Lo=require(\"react/jsx-runtime\"),Tc=({filters:e,onChange:t})=>(0,Lo.jsx)(Cc,{\"data-testid\":\"filter-bar\",children:e.map(o=>(0,Lo.jsxs)(kc,{htmlFor:`filter-${o.key}`,children:[o.label,(0,Lo.jsx)(vc,{id:`filter-${o.key}`,value:o.value,onChange:n=>t(o.key,n.target.value),disabled:o.disabled,\"aria-label\":`${o.label} ${a(r.ariaLabel.filterSuffix)}`,\"data-testid\":`filter-dropdown-${o.key}`,children:o.options.map(n=>(0,Lo.jsx)(\"option\",{value:n.value,children:n.label},n.value))})]},o.key))});var kn={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%\"}},Da=[{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%\"}}],No=Array.from({length:30},(e,t)=>{let o=new Date(\"2026-03-01\");return o.setDate(o.getDate()+t),{date:`${[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"][o.getMonth()]} ${o.getDate()}`,rate:Number((4+t%15*.1).toFixed(2)),orders:200+t*13%100,siteVisits:4e3+t*97%2e3}}),Wu=No.map(e=>({...e,rate:Number((e.rate*1.35).toFixed(2)),orders:Math.round(e.orders*.7)})),_u=No.map(e=>({...e,rate:Number((e.rate*.55).toFixed(2)),orders:Math.round(e.orders*.3)})),Tn=Array.from({length:30},(e,t)=>{let o=new Date(\"2026-03-01\");o.setDate(o.getDate()+t);let n=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],i=80+t*11%40,s=Math.floor(i*.4),l=Math.floor(i*.35),d=i-s-l;return{date:`${n[o.getMonth()]} ${o.getDate()}`,total:i,members:s,retail:l,brandAffiliates:d}}),Sn=[{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%\"}}],Pa=Array.from({length:50},(e,t)=>{let o=[\"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:`${o[t%o.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}}),Dn=Array.from({length:30},(e,t)=>{let o=[\"Alice\",\"Bob\",\"Carol\",\"David\",\"Eva\",\"Frank\",\"Grace\",\"Henry\"],n=[\"Anderson\",\"Baker\",\"Clark\",\"Davis\",\"Evans\",\"Fisher\",\"Grant\",\"Hall\"],i=[\"Member\",\"Retail\",\"Brand Affiliate\"],s=new Date(\"2026-03-31\");return s.setDate(s.getDate()-t%30),{id:`SU-${String(1e3+t).padStart(4,\"0\")}`,name:`${o[t%o.length]} ${n[t%n.length]}`,date:s.toLocaleDateString(\"en-US\",{month:\"short\",day:\"numeric\",year:\"numeric\"}),type:i[t%i.length],email:`${o[t%o.length].toLowerCase()}.${n[t%n.length].toLowerCase()}@example.com`,status:t%4===0?\"Pending\":\"Active\"}});var fo={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%\"}},nb={...fo,trend:{revenue:\"+5.1%\",offersPurchased:\"+12.5%\"}},ib={...fo,trend:{revenue:\"-1.8%\",offersPurchased:\"-3.7%\"}},lb={...fo,trend:{revenue:\"+0%\",offersPurchased:\"+0%\"}},sb={...fo,metrics:{...fo.metrics,offersPurchased:\"0\"},trend:{revenue:\"+0%\",offersPurchased:\"+0%\"}},Sc=[{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: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 16px;\n\n @media (min-width: 768px) {\n gap: 24px;\n padding: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n padding: 24px;\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 CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport LanguageIcon from '@mui/icons-material/Language';\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.dateRange.label)}\n </FilterLabel>\n <FilterIcon aria-hidden=\"true\">\n <CalendarMonthIcon />\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.market.label)}</FilterLabel>\n <FilterIcon aria-hidden=\"true\">\n <LanguageIcon />\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: 12px 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 12px;\n min-height: auto;\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: 16px 20px;\n gap: 16px;\n }\n\n @media (min-width: 1080px) {\n padding: 16px 24px;\n gap: 20px;\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: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n\n @media (min-width: 1080px) {\n font-size: 16px;\n }\n`;\n\nexport const DateRangeLabel = styled('div')`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`;\n\nexport const FiltersSection = styled('div')`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 24px;\n width: 100%;\n flex-shrink: 0;\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\n// Kept in the DOM (visually hidden) so the select stays labelled for assistive tech.\nexport const FilterLabel = styled('label')`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: 0 !important;\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n`;\n\nexport const StyledSelect = styled('select')`\n min-width: 120px;\n height: 32px;\n padding: 6px 24px 6px 8px;\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 white-space: nowrap;\n flex-shrink: 0;\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 background-position: right 8px center;\n }\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 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: nowrap;\n gap: 24px;\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 visits: {\n key: 'shoppingDashboard.stats.visits',\n fallback: 'Site Visits',\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\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\n productSort: {\n label: {\n key: 'shoppingDashboard.filter.productSort.label',\n fallback: 'Sort By',\n },\n },\n signupView: {\n label: {\n key: 'shoppingDashboard.filter.signupView.label',\n fallback: 'Show',\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 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 },\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 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 rank: {\n key: 'shoppingDashboard.widget.topProducts.rank',\n fallback: 'Rank',\n },\n },\n conversionRate: {\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 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 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 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 compareTo: {\n last7days: {\n key: 'shoppingDashboard.widget.compareTo.last7days',\n fallback: 'compared to this time 7 days ago',\n },\n last30days: {\n key: 'shoppingDashboard.widget.compareTo.last30days',\n fallback: 'compared to this time last month',\n },\n last90days: {\n key: 'shoppingDashboard.widget.compareTo.last90days',\n fallback: 'compared to this time 90 days ago',\n },\n thisMonth: {\n key: 'shoppingDashboard.widget.compareTo.thisMonth',\n fallback: 'compared to this time last month',\n },\n },\n topCategories: {\n title: {\n key: 'shoppingDashboard.widget.topCategories.title',\n fallback: 'Top Categories',\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 viewDetails: {\n key: 'shoppingDashboard.widget.menu.viewDetails',\n fallback: 'View Details',\n },\n exportData: {\n key: 'shoppingDashboard.widget.menu.exportData',\n fallback: 'Export Data',\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 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 customer: { key: 'shoppingDashboard.fullView.conversionRate.columns.customer', fallback: 'Customer' },\n items: { key: 'shoppingDashboard.fullView.conversionRate.columns.items', fallback: 'Items' },\n total: { key: 'shoppingDashboard.fullView.conversionRate.columns.total', fallback: 'Order Total' },\n bv: { key: 'shoppingDashboard.fullView.conversionRate.columns.bv', fallback: 'BV' },\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 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 percentOfTotal: {\n key: 'shoppingDashboard.fullView.categories.columns.percentOfTotal',\n fallback: '% of Total',\n },\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 noData: {\n key: 'shoppingDashboard.defaults.noData',\n fallback: 'No data',\n },\n noChange: {\n key: 'shoppingDashboard.defaults.noChange',\n fallback: 'No change',\n },\n byRevenue: {\n key: 'shoppingDashboard.defaults.byRevenue',\n fallback: 'By: Revenue',\n },\n byUnits: {\n key: 'shoppingDashboard.defaults.byUnits',\n fallback: 'By: Units',\n },\n byVolume: {\n key: 'shoppingDashboard.defaults.byVolume',\n fallback: 'By: Volume',\n },\n byTrend: {\n key: 'shoppingDashboard.defaults.byTrend',\n fallback: 'By: Trend',\n },\n all: {\n key: 'shoppingDashboard.defaults.all',\n fallback: 'All',\n },\n members: {\n key: 'shoppingDashboard.defaults.members',\n fallback: 'Members',\n },\n retail: {\n key: 'shoppingDashboard.defaults.retail',\n fallback: 'Retail',\n },\n brandAffiliates: {\n key: 'shoppingDashboard.defaults.brandAffiliates',\n fallback: 'Brand Affiliates',\n },\n revenue: {\n key: 'shoppingDashboard.defaults.revenue',\n fallback: 'Revenue',\n },\n units: {\n key: 'shoppingDashboard.defaults.units',\n fallback: 'Units',\n },\n volume: {\n key: 'shoppingDashboard.defaults.volume',\n fallback: 'Volume',\n },\n conversionRate: {\n key: 'shoppingDashboard.defaults.conversionRate',\n fallback: 'Conversion Rate',\n },\n trend: {\n key: 'shoppingDashboard.defaults.trend',\n fallback: 'Trend',\n },\n date: {\n key: 'shoppingDashboard.defaults.date',\n fallback: 'Date',\n },\n type: {\n key: 'shoppingDashboard.defaults.type',\n fallback: 'Type',\n },\n dcSv: {\n key: 'shoppingDashboard.defaults.dcSv',\n fallback: 'DC-SV',\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 ShowChartIcon from '@mui/icons-material/ShowChart';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport {\n StatsCardContainer,\n StatsTitle,\n StatsValueContainer,\n StatsValue,\n StatsSubtitle,\n ValueSubtitleWrapper,\n TrendContainer,\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 const getTrendChartIcon = (iconSize: string) => {\n if (trendDirection === 'up') {\n return <TrendingUpIcon sx={{ fontSize: iconSize }} aria-hidden=\"true\" />;\n }\n if (trendDirection === 'down') {\n return <TrendingDownIcon sx={{ fontSize: iconSize }} aria-hidden=\"true\" />;\n }\n return <ShowChartIcon sx={{ fontSize: iconSize }} aria-hidden=\"true\" />;\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 {getTrendChartIcon('18px')}\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 </StatsCardHeader>\n\n <StatsValueContainer>\n <ValueSubtitleWrapper>\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 </ValueSubtitleWrapper>\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 {getTrendChartIcon('16px')}\n <TrendText>{trendValue}</TrendText>\n </TrendContainer>\n )}\n </StatsValueContainer>\n </StatsCardContainer>\n );\n};\n\nexport const StatsCard = React.memo(StatsCardComponent);\nStatsCard.displayName = 'StatsCard';\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 justify-content: space-between;\n box-sizing: border-box;\n gap: ${({ $layout }) => ($layout === 'split' ? '8px' : '0')};\n padding: ${({ $layout }) => ($layout === 'split' ? '12px' : '10px')};\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' ? '110px' : 'auto')};\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' ? '16px' : '12px')};\n min-height: ${({ $layout }) => ($layout === 'split' ? '110px' : 'auto')};\n }\n\n @media (min-width: 1080px) {\n padding: ${({ $layout }) => ($layout === 'split' ? '16px' : '14px')};\n min-height: ${({ $layout }) => ($layout === 'split' ? '110px' : 'auto')};\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: 14px;\n font-weight: 400;\n line-height: 1.2;\n letter-spacing: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin-bottom: 2px;\n text-transform: capitalize;\n\n @media (min-width: 768px) {\n font-size: 14px;\n margin-bottom: 4px;\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 justify-content: space-between;\n gap: 2px;\n margin-top: 10px;\n width: 100%;\n`;\n\nexport const StatsValue = styled('div')`\n font-size: 20px;\n font-weight: 700;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\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 ValueSubtitleWrapper = styled('div')`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n`;\n\nexport const StatsSubtitle = styled('div')`\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`;\n\nexport const TrendContainer = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n flex-direction: row;\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\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 { getTrendDirectionLabel, resolveTrendDirection, getTrendIcon } from '../../utils/trendUtils';\nimport { formatMoney } from '../../utils/dataUtils';\nimport {\n ProductsListContainer,\n WidgetHeader,\n WidgetTitle,\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 { StyledSelect } from '../DashboardHeader.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 readonly onExport?: () => void;\n}\n\nconst TopSellingProductsListComponent: React.FC<TopSellingProductsListProps> = ({\n products,\n productSort,\n isLoading = false,\n maxProducts = 5,\n onSortChange,\n onTitleClick,\n onExport,\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.defaults.dcSv)}`;\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) {\n return '';\n }\n let value = '';\n switch (sortBy) {\n case 'units':\n value = trend.units ?? '';\n break;\n case 'revenue':\n value = trend.revenue ?? '';\n break;\n case 'volume':\n value = trend.volume ?? '';\n break;\n default:\n value = trend.units ?? '';\n }\n return value;\n };\n\n const getTrendDirection = (product: TopProduct, sortBy: ProductSortOption): TrendDirection => {\n const trendValue = getTrendValue(product, sortBy);\n // Use resolveTrendDirection which properly parses numeric value\n // This ensures \"+0%\" and \"-0%\" are treated as neutral (grey), not up/down\n return resolveTrendDirection(trendValue);\n };\n\n const getTrendChartIcon = (direction: TrendDirection) => getTrendIcon(direction);\n\n const displayedProducts = products.slice(0, maxProducts);\n const rankLabel = getTranslation(Keys.widget.topProducts.rank);\n const trendLabel = getTranslation(Keys.defaults.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 <StyledSelect\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.defaults.byUnits)}</option>\n <option value=\"revenue\">{getTranslation(Keys.defaults.byRevenue)}</option>\n <option value=\"volume\">{getTranslation(Keys.defaults.byVolume)}</option>\n </StyledSelect>\n <WidgetMenu widgetId=\"top-products\" onFullView={onTitleClick} onExport={onExport} />\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 {getTrendChartIcon(trendDirection)}\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 React from 'react';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\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 <ArrowUpwardIcon />;\n case 'down':\n return <ArrowDownwardIcon />;\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\nexport interface PieChartLabelProps {\n cx: number;\n cy: number;\n midAngle: number;\n innerRadius: number;\n outerRadius: number;\n percentage: number;\n}\n\nexport function renderPieChartLabel(\n props: PieChartLabelProps,\n options?: { fontSize?: string; fontWeight?: string },\n): React.ReactNode {\n // eslint-disable-next-line react/prop-types\n const { cx, cy, midAngle, innerRadius, outerRadius, percentage } = props;\n const RADIAN = Math.PI / 180;\n // Position label in the middle of the donut ring\n const radius = innerRadius + (outerRadius - innerRadius) / 2;\n const x = cx + radius * Math.cos(-midAngle * RADIAN);\n const y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n return (\n <text\n x={x}\n y={y}\n fill=\"white\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fontSize={options?.fontSize ?? '10'}\n fontWeight={options?.fontWeight ?? '600'}\n fontFamily=\"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\"\n letterSpacing=\"0.2\"\n >\n {`${percentage}%`}\n </text>\n );\n}\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\nexport function capitalizeFirstLetter(text: string): string {\n if (!text || text.length === 0) return text;\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n/**\n * Gets the numeric value from a SignupDataPoint based on the selected signup view.\n * Maps the signup view option to the corresponding data field:\n * - 'all' → total\n * - 'members' → members\n * - 'retail' → retail\n * - 'brandAffiliates' → brandAffiliates\n */\nexport function getSignupValueByView(\n dataPoint: {\n readonly total: number;\n readonly members: number;\n readonly retail: number;\n readonly brandAffiliates: number;\n },\n view: 'all' | 'members' | 'retail' | 'brandAffiliates',\n): number {\n switch (view) {\n case 'members':\n return dataPoint.members;\n case 'retail':\n return dataPoint.retail;\n case 'brandAffiliates':\n return dataPoint.brandAffiliates;\n case 'all':\n default:\n return dataPoint.total;\n }\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: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n vertical-align: middle;\n\n @media (min-width: 768px) {\n min-width: 28px;\n height: 28px;\n font-size: 16px;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\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: 16px;\n max-width: none;\n }\n`;\n\nexport const ProductSubtitle = styled('div')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\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 FileDownloadIcon from '@mui/icons-material/FileDownload';\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 readonly onExport?: () => void;\n}\n\nexport const WidgetMenu: React.FC<WidgetMenuProps> = ({ widgetId, onFullView, onExport }) => {\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 const handleExport = () => {\n handleClose();\n if (onExport) {\n onExport();\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-viewdetails\">\n <ListItemIcon>\n <VisibilityIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{getTranslation(Keys.widget.menu.viewDetails)}</ListItemText>\n </MenuItem>\n {onExport && (\n <MenuItem onClick={handleExport} data-testid=\"widget-menu-item-export\">\n <ListItemIcon>\n <FileDownloadIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{getTranslation(Keys.widget.menu.exportData)}</ListItemText>\n </MenuItem>\n )}\n </Menu>\n </>\n );\n};\n","import IconButton from '@mui/material/IconButton';\nimport { styled, ColorUtils } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const StyledIconButton = styled(IconButton)(({ theme }) => ({\n padding: '4px',\n color: getGenomeColor(theme, 'N100'),\n '&:hover': {\n backgroundColor: getGenomeColor(theme, 'N20'),\n },\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 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 { StyledSelect } from '../DashboardHeader.styled';\nimport type { ConversionDataPoint, ConversionFilterOption, DateRangeOption } from '../../types.d';\nimport { ChartWidgetSkeleton } from '../LoadingSkeletons';\nimport { formatAxisDate } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\nimport { DEFAULT_DATE_RANGE } from '../../utils/dateConstants';\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 dateRange?: DateRangeOption;\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 readonly onExport?: () => void;\n}\n\nconst CHART_MARGIN = { top: 5, right: 10, left: -10, bottom: 5 };\nconst AXIS_TICK = { fontSize: 10 };\n\ninterface DotProps {\n readonly cx?: number;\n readonly cy?: number;\n readonly r?: number;\n}\n\n// Custom hollow dot component for ConversionRate chart\nconst HollowDot = (props: DotProps) => {\n const { cx, cy, r = 3 } = props;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"#FFFFFF\"\n fillOpacity=\"0\"\n stroke=\"#3B82F6\"\n strokeWidth=\"2\"\n style={{ pointerEvents: 'none' }}\n />\n );\n};\n\nconst ActiveHollowDot = (props: DotProps) => {\n const { cx, cy, r = 5 } = props;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"#FFFFFF\"\n fillOpacity=\"0\"\n stroke=\"#3B82F6\"\n strokeWidth=\"2\"\n style={{ pointerEvents: 'none' }}\n />\n );\n};\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 dateRange = DEFAULT_DATE_RANGE,\n isLoading = false,\n title,\n summaryRate,\n summaryChangePct,\n onFilterChange,\n onTitleClick,\n onExport,\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.defaults.noData);\n const noChangeText = getTranslation(Keys.defaults.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.defaults.conversionRate)}\n </ChartTitle>\n <HeaderActionsContainer>\n <StyledSelect\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.defaults.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 </StyledSelect>\n <WidgetMenu widgetId=\"conversion-rate\" onFullView={onTitleClick} onExport={onExport} />\n </HeaderActionsContainer>\n </TitleRow>\n </ChartHeader>\n\n <MetricDisplay>\n <MetricValue\n aria-label={`${getTranslation(Keys.defaults.conversionRate)}: ${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\">{getComparedToText(dateRange)}</div>\n </MetricTrend>\n )}\n </MetricDisplay>\n\n <FormulaDisplay data-testid=\"conversion-formula\">\n {getTranslation(Keys.widget.conversionRate.formula)}\n </FormulaDisplay>\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={<HollowDot />}\n activeDot={<ActiveHollowDot />}\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 align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`;\n\nexport const MetricValue = styled('div')`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n padding: 0;\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: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\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: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\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: 8px;\n margin-top: 0;\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 DEFAULT_DATE_RANGE: DateRangeOption = 'last30days';\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\n/**\n * Extract and format the date range from an array of data objects.\n * Handles various date field names: 'date', 'Date', 'dateTime', etc.\n * Falls back to calculating from dateRange option if no date data is available.\n * @param data Array of objects with date information\n * @param fallbackLabel Fallback label if no dates found\n * @returns Formatted date range string (e.g., \"May 30 - Aug 27\")\n */\nexport function getActualDateRange(data: unknown[], fallbackLabel: string = 'N/A'): string {\n if (!Array.isArray(data) || data.length === 0) return fallbackLabel;\n\n try {\n // Extract first and last dates from data\n const first = data[0] as Record<string, unknown>;\n const last = data[data.length - 1] as Record<string, unknown>;\n\n // Try various date field names\n const dateFieldNames = ['date', 'Date', 'dateTime', 'eventDate', 'timestamp'];\n let startDateStr: string | undefined;\n let endDateStr: string | undefined;\n\n for (const fieldName of dateFieldNames) {\n if (first[fieldName] && !startDateStr) {\n startDateStr = String(first[fieldName]);\n }\n if (last[fieldName] && !endDateStr) {\n endDateStr = String(last[fieldName]);\n }\n }\n\n if (startDateStr && endDateStr) {\n return formatDateRange(startDateStr, endDateStr);\n }\n } catch {\n // Silently fail and return fallback\n }\n\n return fallbackLabel;\n}\n\n/**\n * Calculate and format the date range based on a DateRangeOption.\n * Used for components without time-series data (e.g., TopProducts, TopCategories)\n * @param dateRangeOption The selected date range option\n * @returns Formatted date range string (e.g., \"Aug 28 - Sep 27\" for last30days)\n */\nexport function calculateDateRangeFromOption(dateRangeOption: DateRangeOption): string {\n const today = new Date();\n const year = today.getFullYear();\n const month = today.getMonth();\n const date = today.getDate();\n\n let startDate: Date;\n let endDate = new Date(year, month, date);\n\n switch (dateRangeOption) {\n case 'last7days':\n startDate = new Date(year, month, date - 7);\n break;\n case 'last30days':\n startDate = new Date(year, month, date - 30);\n break;\n case 'last90days':\n startDate = new Date(year, month, date - 90);\n break;\n case 'thisMonth':\n startDate = new Date(year, month, 1);\n endDate = new Date(year, month + 1, 0); // Last day of current month\n break;\n default:\n return 'N/A';\n }\n\n return formatDateRange(formatISODate(startDate), formatISODate(endDate));\n}\n","import type { DateRangeOption } from '../types.d';\nimport { ShoppingDashboardTranslationKeys } from '../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { resolveTranslation } from '../TranslationKeys/translationResolver';\n\n/**\n * Generates dynamic comparison text based on the selected date range.\n * Uses translation keys for internationalization support.\n * @param dateRange The selected date range option\n * @returns Dynamic comparison text like \"compared to this time 7 days ago\"\n */\nexport function getComparedToText(dateRange: DateRangeOption): string {\n const keys = ShoppingDashboardTranslationKeys.widget.compareTo;\n\n switch (dateRange) {\n case 'last7days':\n return resolveTranslation(keys.last7days);\n case 'last30days':\n return resolveTranslation(keys.last30days);\n case 'last90days':\n return resolveTranslation(keys.last90days);\n case 'thisMonth':\n return resolveTranslation(keys.thisMonth);\n default:\n // Fallback for unknown date ranges\n return resolveTranslation(keys.last30days);\n }\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 MetricDisplay,\n MetricValue,\n MetricTrend,\n ChartContainer,\n Legend,\n LegendItem,\n LegendColor,\n LegendLabel,\n HeaderActionsContainer,\n} from './SignupsChart.styled';\nimport { StyledSelect } from '../DashboardHeader.styled';\nimport type { SignupDataPoint, SignupViewOption, DateRangeOption } from '../../types.d';\nimport { ChartWidgetSkeleton } from '../LoadingSkeletons';\nimport { formatAxisDate } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\nimport { getSignupValueByView } from '../../utils/dataUtils';\nimport { DEFAULT_DATE_RANGE } from '../../utils/dateConstants';\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 dateRange?: DateRangeOption;\n readonly isLoading?: boolean;\n readonly title?: string;\n readonly onViewChange?: (view: SignupViewOption) => void;\n readonly onTitleClick?: () => void;\n readonly onExport?: () => 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 };\n\ninterface DotProps {\n readonly cx?: number;\n readonly cy?: number;\n readonly r?: number;\n}\n\n// Cache to memoize component factories by color to prevent Recharts reconciliation issues\n// Recharts uses object identity checks for component types, so we must return the same\n// component reference for the same color across renders\nconst dotComponentCache = new Map<string, React.ComponentType<DotProps>>();\n\n// Custom hollow dot component that accepts stroke color\n// Returns cached component to maintain stable references across renders\nconst HollowDotFactory = (strokeColor: string) => {\n if (dotComponentCache.has(strokeColor)) {\n return dotComponentCache.get(strokeColor)!;\n }\n\n // eslint-disable-next-line react/display-name\n const HollowDot = (props: DotProps) => {\n const { cx = 0, cy = 0, r = 2 } = props;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"#FFFFFF\"\n fillOpacity=\"0\"\n stroke={strokeColor}\n strokeWidth=\"1.5\"\n style={{ pointerEvents: 'none' }}\n />\n );\n };\n\n dotComponentCache.set(strokeColor, HollowDot);\n return HollowDot;\n};\n\nconst SignupsChartComponent: React.FC<SignupsChartProps> = ({\n signupData,\n signupView,\n dateRange = DEFAULT_DATE_RANGE,\n isLoading = false,\n title,\n onViewChange,\n onTitleClick,\n onExport,\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.defaults.noData);\n const noChangeText = getTranslation(Keys.defaults.noChange);\n\n const totalSignups = React.useMemo(() => {\n if (signupData.length === 0) return 0;\n const lastDataPoint = signupData[signupData.length - 1];\n return getSignupValueByView(lastDataPoint, signupView);\n }, [signupData, signupView]);\n\n const trendInfo = React.useMemo((): { direction: 'up' | 'down' | 'neutral'; value: string } => {\n if (signupData.length < 2) return { direction: 'neutral', value: noDataText };\n const latestValue = getSignupValueByView(signupData[signupData.length - 1], signupView);\n const previousValue = getSignupValueByView(signupData[0], signupView);\n const change = latestValue - previousValue;\n const percentageChange = previousValue === 0 ? 0 : (change / previousValue) * 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, signupView]);\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.defaults.members);\n const retailLabel = getTranslation(Keys.defaults.retail);\n const brandAffiliatesLabel = getTranslation(Keys.defaults.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 <StyledSelect\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 </StyledSelect>\n <WidgetMenu widgetId=\"signups\" onFullView={onTitleClick} onExport={onExport} />\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\">{getComparedToText(dateRange)}</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={HollowDotFactory(\n signupView === 'all' ? SERIES_COLORS.total : SERIES_COLORS.members,\n )}\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={HollowDotFactory(SERIES_COLORS.members)}\n name={membersLabel}\n />\n <Line\n type=\"monotone\"\n dataKey=\"retail\"\n stroke={SERIES_COLORS.retail}\n strokeWidth={2}\n dot={HollowDotFactory(SERIES_COLORS.retail)}\n name={retailLabel}\n />\n <Line\n type=\"monotone\"\n dataKey=\"brandAffiliates\"\n stroke={SERIES_COLORS.brandAffiliates}\n strokeWidth={2}\n dot={HollowDotFactory(SERIES_COLORS.brandAffiliates)}\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={HollowDotFactory(SERIES_COLORS.retail)}\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={HollowDotFactory(SERIES_COLORS.brandAffiliates)}\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: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`;\n\nexport const MetricValue = styled('div')`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n padding: 0;\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: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\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: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\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 justify-content: center;\n gap: 16px;\n margin-top: 16px;\n padding-top: 0;\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 TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport { WidgetMenu } from '../WidgetMenu';\nimport {\n CategoriesContainer,\n ChartHeader,\n ChartTitle,\n ChartAndLegendContainer,\n ChartWrapper,\n LegendContainer,\n LegendItem,\n LegendColor,\n LegendInfo,\n LegendName,\n LegendValue,\n LegendValueWrapper,\n LegendTrendInline,\n DonutCenterOverlay,\n DonutCenterLabel,\n DonutCenterValue,\n DonutCenterTrend,\n EmptyState,\n EmptyStateText,\n HeaderActionsContainer,\n} from './TopCategoriesPieChart.styled';\nimport { StyledSelect } from '../DashboardHeader.styled';\nimport type { CategoryRevenue, CategorySortOption } from '../../types.d';\nimport type { TrendDirection } from '../types';\nimport { CategoriesPieChartSkeleton } from '../LoadingSkeletons';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { resolveTrendDirection, calculateWeightedRevenueTrend, renderPieChartLabel } 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 summaryChangePct?: number | null;\n readonly onSortChange?: (sort: CategorySortOption) => void;\n readonly onTitleClick?: () => void;\n readonly onExport?: () => void;\n}\n\nconst TopCategoriesPieChartComponent: React.FC<TopCategoriesPieChartProps> = ({\n categories,\n categorySort,\n isLoading = false,\n title,\n summaryChangePct,\n onSortChange,\n onTitleClick,\n onExport,\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, totalVolume, trendDirection, formattedTrend } = React.useMemo(() => {\n const nextSortedCategories = [...categories].sort((a, b) => {\n if (categorySort === 'revenue') return b.revenue - a.revenue;\n return (b.volume ?? 0) - (a.volume ?? 0);\n });\n\n const nextTotalRevenue = nextSortedCategories.reduce((sum, category) => sum + category.revenue, 0);\n const nextTotalVolume = nextSortedCategories.reduce((sum, category) => sum + (category.volume ?? 0), 0);\n\n let nextTrendDirection: TrendDirection;\n let nextFormattedTrend: string;\n\n // Use the provided summaryChangePct if available\n if (summaryChangePct !== undefined && summaryChangePct !== null) {\n if (Math.abs(summaryChangePct) < 0.1) {\n nextFormattedTrend = '0%';\n nextTrendDirection = 'neutral';\n } else {\n nextTrendDirection = summaryChangePct > 0 ? 'up' : 'down';\n nextFormattedTrend = `${summaryChangePct > 0 ? '+' : ''}${summaryChangePct.toFixed(1)}%`;\n }\n } else {\n const { direction, formatted } = calculateWeightedRevenueTrend(\n nextSortedCategories,\n (category) => (categorySort === 'volume' ? (category.volume ?? 0) : category.revenue),\n (category) => (categorySort === 'volume' ? category.trend?.volume : category.trend?.revenue),\n );\n nextTrendDirection = direction;\n nextFormattedTrend = formatted;\n }\n\n return {\n sortedCategories: nextSortedCategories,\n totalRevenue: nextTotalRevenue,\n totalVolume: nextTotalVolume,\n trendDirection: nextTrendDirection,\n formattedTrend: nextFormattedTrend,\n };\n }, [categories, categorySort, summaryChangePct]);\n\n const getTrendGraphIcon = (direction: TrendDirection) => {\n if (direction === 'up') {\n return <TrendingUpIcon sx={{ fontSize: '14px' }} aria-hidden=\"true\" />;\n }\n if (direction === 'down') {\n return <TrendingDownIcon sx={{ fontSize: '14px' }} aria-hidden=\"true\" />;\n }\n return null;\n };\n\n interface CustomLabelProps {\n cx: number;\n cy: number;\n midAngle: number;\n innerRadius: number;\n outerRadius: number;\n percentage: number;\n }\n\n const renderCustomLabel = (props: CustomLabelProps) => {\n return renderPieChartLabel(props, { fontSize: '10', fontWeight: '600' });\n };\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 <StyledSelect\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.defaults.byRevenue)}</option>\n <option value=\"volume\">{getTranslation(Keys.defaults.byVolume)}</option>\n </StyledSelect>\n <WidgetMenu widgetId=\"top-categories\" onFullView={onTitleClick} onExport={onExport} />\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={categorySort === 'volume' ? 'volume' : 'revenue'}\n nameKey=\"name\"\n paddingAngle={2}\n label={renderCustomLabel}\n labelLine={false}\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>\n {categorySort === 'volume'\n ? getTranslation(Keys.defaults.volume)\n : getTranslation(Keys.stats.revenue)}\n </DonutCenterLabel>\n <DonutCenterValue>\n {categorySort === 'volume'\n ? `${totalVolume.toFixed(1)} SV`\n : formatMoney(totalRevenue, currencyCode)}\n </DonutCenterValue>\n <DonutCenterTrend direction={trendDirection}>\n {getTrendGraphIcon(trendDirection)}\n <span>{formattedTrend}</span>\n </DonutCenterTrend>\n </DonutCenterOverlay>\n </ChartWrapper>\n\n <LegendContainer data-testid=\"categories-legend-container\">\n {sortedCategories.map((category, index) => {\n const displayValue = categorySort === 'volume' ? category.volume : category.revenue;\n const displayPercentage =\n categorySort === 'volume' ? category.volumeSharePct : category.percentage;\n const displayTrend =\n categorySort === 'volume' ? category.trend?.volume : category.trend?.revenue;\n return (\n <LegendItem key={category.id} data-testid={`category-legend-${index}`}>\n <LegendColor color={category.color} />\n <LegendInfo>\n <LegendName>\n {category.name.charAt(0).toUpperCase() + category.name.slice(1)}\n </LegendName>\n <LegendValueWrapper>\n <LegendValue>\n {categorySort === 'volume'\n ? `${displayValue?.toFixed(1)} SV (${displayPercentage}%)`\n : `${formatMoney(displayValue ?? 0, category.currencyCode)} (${displayPercentage}%)`}\n </LegendValue>\n {displayTrend ? (\n <LegendTrendInline\n direction={resolveTrendDirection(displayTrend)}\n data-testid={`category-legend-trend-${index}`}\n aria-label={displayTrend}\n >\n {getTrendGraphIcon(resolveTrendDirection(displayTrend))}\n </LegendTrendInline>\n ) : null}\n </LegendValueWrapper>\n </LegendInfo>\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: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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: 20px;\n align-items: center;\n justify-content: center;\n flex: 1;\n\n @media (min-width: 768px) {\n flex-direction: row;\n gap: 24px;\n align-items: center;\n justify-content: center;\n }\n`;\n\nexport const ChartWrapper = styled('div')`\n position: relative;\n width: 100%;\n height: 220px;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 260px;\n height: 260px;\n flex: 0 0 auto;\n }\n\n @media (min-width: 1080px) {\n width: 280px;\n height: 280px;\n flex: 0 0 auto;\n }\n\n /* Style recharts pie labels (percentages inside segments) */\n svg text {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\n }\n\n text[class*='recharts'] {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\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 display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n margin-top: 4px;\n font-size: 12px;\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 svg {\n width: 14px;\n height: 14px;\n font-size: 14px;\n }\n`;\n\nexport const LegendContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 0 1 auto;\n\n @media (min-width: 768px) {\n gap: 10px;\n }\n`;\n\nexport const LegendItem = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 0;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n @media (min-width: 768px) {\n gap: 10px;\n padding: 6px 0;\n }\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: row;\n gap: 4px;\n flex: 1;\n min-width: 0;\n align-items: center;\n`;\n\nexport const LegendName = styled('div')`\n font-size: 13px;\n font-weight: 600;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`;\n\nexport const LegendValue = styled('div')`\n font-size: 12px;\n font-weight: 500;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n flex-shrink: 0;\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n\nexport const LegendPercentage = styled('div')`\n display: none;\n`;\n\nexport const LegendValueWrapper = styled('div')`\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1;\n min-width: 0;\n`;\n\nexport const LegendTrendInline = 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: 14px;\n height: 14px;\n font-size: 14px;\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';\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 readonly categoriesSummaryChangePct?: number | null;\n readonly conversionSummaryChangePct?: number | null;\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 readonly onProductsExport?: () => void;\n readonly onConversionExport?: () => void;\n readonly onSignupsExport?: () => void;\n readonly onCategoriesExport?: () => 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 = DEFAULT_DATE_RANGE,\n market = 'all',\n productSort = 'units',\n signupView = 'all',\n conversionFilter = 'all',\n categorySort = 'revenue',\n categoriesSummaryChangePct,\n conversionSummaryChangePct,\n markets,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n onSignupViewChange,\n onConversionFilterChange,\n onCategorySortChange,\n onProductsTitleClick,\n onConversionTitleClick,\n onSignupsTitleClick,\n onCategoriesToTitleClick,\n onProductsExport,\n onConversionExport,\n onSignupsExport,\n onCategoriesExport,\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.defaults.volume)}\n value={stats?.metrics?.volume ?? '0'}\n subtitle={getTranslation(Keys.defaults.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.defaults.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 onExport={onProductsExport}\n />\n <SignupsChart\n signupData={resolvedSignupData}\n signupView={signupView}\n dateRange={dateRange}\n isLoading={isLoading}\n onViewChange={onSignupViewChange}\n onTitleClick={onSignupsTitleClick}\n onExport={onSignupsExport}\n />\n </TwoColumnGrid>\n\n <TwoColumnGrid data-testid=\"widget-row-2\">\n <ConversionRateChart\n conversionData={resolvedConversionData}\n conversionFilter={conversionFilter}\n dateRange={dateRange}\n isLoading={isLoading}\n summaryChangePct={conversionSummaryChangePct}\n onFilterChange={onConversionFilterChange}\n onTitleClick={onConversionTitleClick}\n onExport={onConversionExport}\n />\n <TopCategoriesPieChart\n categories={resolvedCategories}\n categorySort={categorySort}\n isLoading={isLoading}\n summaryChangePct={categoriesSummaryChangePct}\n onSortChange={onCategorySortChange}\n onTitleClick={onCategoriesToTitleClick}\n onExport={onCategoriesExport}\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\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 categoriesSummaryChangePct?: number | null;\n readonly conversionSummaryChangePct?: number | null;\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 readonly onProductsExport?: () => void;\n readonly onConversionExport?: () => void;\n readonly onSignupsExport?: () => void;\n readonly onCategoriesExport?: () => 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 categoriesSummaryChangePct,\n conversionSummaryChangePct,\n orders,\n signups,\n isLoading = false,\n error,\n shopTitle,\n className,\n translate,\n initialDateRange = DEFAULT_DATE_RANGE,\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 onProductsExport,\n onConversionExport,\n onSignupsExport,\n onCategoriesExport,\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 summaryChangePct={categoriesSummaryChangePct}\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 categoriesSummaryChangePct={categoriesSummaryChangePct}\n conversionSummaryChangePct={conversionSummaryChangePct}\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 onProductsExport={onProductsExport}\n onConversionExport={onConversionExport}\n onSignupsExport={onSignupsExport}\n onCategoriesExport={onCategoriesExport}\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 { calculateDateRangeFromOption } 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.defaults.units) },\n { value: 'revenue', label: getTranslation(Keys.defaults.revenue) },\n { value: 'volume', label: getTranslation(Keys.defaults.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.defaults.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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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>{getTranslation(Keys.defaults.units)}</MobileMetricLabel>\n <MobileMetricValue>{row.units.toLocaleString()}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>{getTranslation(Keys.defaults.revenue)}</MobileMetricLabel>\n <MobileMetricValue>{formatMoney(row.revenue, currencyCode)}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>{getTranslation(Keys.defaults.volume)}</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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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 }) => getGenomeColor(theme, 'N20')};\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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: row;\n align-items: center;\n padding: 16px 0;\n gap: 10px;\n flex-wrap: nowrap;\n width: 100%;\n\n @media (max-width: 767px) {\n padding: 8px 0;\n flex-wrap: nowrap;\n align-items: center;\n }\n`;\n\nexport const MetricValue = styled(Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0em;\n color: ${({ theme }) => theme.palette.text.primary};\n margin: 0;\n padding: 0;\n\n @media (max-width: 767px) {\n font-size: 28px;\n line-height: 1;\n }\n`;\n\nexport const MetricTrend = styled(Box)<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n align-items: center;\n gap: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 13px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.01em;\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 flex-wrap: nowrap;\n white-space: nowrap;\n\n svg {\n font-size: 13px;\n flex-shrink: 0;\n width: 13px;\n height: 13px;\n }\n\n span {\n display: inline;\n line-height: 1;\n }\n\n @media (max-width: 767px) {\n font-size: 13px;\n line-height: 1;\n flex-wrap: nowrap;\n\n svg {\n font-size: 13px;\n width: 13px;\n height: 13px;\n }\n }\n`;\n\nexport const ComparisonText = styled(Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => theme.palette.text.secondary};\n white-space: nowrap;\n\n @media (max-width: 767px) {\n font-size: 12px;\n line-height: 1.3;\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: 90%;\n height: 450px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 250px;\n margin-bottom: 0;\n }\n`;\n\nexport const TableSection = styled(Box)<{ withCard?: boolean }>`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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 } from 'recharts';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\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 { calculateDateRangeFromOption } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\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 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 OrderIdColumnCell,\n ConversionTrendChartContainer,\n ChartWithLegendWrapper,\n ChartLegendContainer,\n LegendItem,\n TrendValueText,\n TrendComparisonText,\n MetricSectionWrapper,\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 latestRate = conversionData.at(-1)?.rate ?? 0;\n const previousRate = conversionData[0].rate;\n if (previousRate === 0) return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const changePercent = ((latestRate - previousRate) / previousRate) * 100;\n if (Math.abs(changePercent) < 0.1) {\n return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n }\n let direction: TrendDirection = 'neutral';\n if (changePercent > 0) direction = 'up';\n else if (changePercent < 0) direction = 'down';\n return { direction, value: `${changePercent >= 0 ? '+' : ''}${changePercent.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.defaults.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.defaults.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 {\n key: 'orderId',\n label: getTranslation(Keys.fullView.conversionRate.columns.orderId),\n sortable: true,\n render: (value) => <OrderIdColumnCell>{value as React.ReactNode}</OrderIdColumnCell>,\n },\n { key: 'date', label: getTranslation(Keys.defaults.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.defaults.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.defaults.conversionRate)}\n dateRange={calculateDateRangeFromOption(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.defaults.conversionRate)}\n dateRange={calculateDateRangeFromOption(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n <MetricChartCardSection data-testid=\"conversion-fullview-metric-chart\">\n <MetricSection>\n <MetricSectionWrapper>\n <MetricValue data-testid=\"conversion-rate-value\" style={{ marginRight: '6px' }}>\n {currentRate.toFixed(1)}%\n </MetricValue>\n <MetricTrend direction={trend.direction} data-testid=\"conversion-rate-trend\">\n {trend.direction === 'up' && <ArrowUpwardIcon />}\n {trend.direction === 'down' && <ArrowDownwardIcon />}\n <TrendValueText>{trend.value}</TrendValueText>\n <TrendComparisonText>{getComparedToText(dateRange)}</TrendComparisonText>\n </MetricTrend>\n </MetricSectionWrapper>\n </MetricSection>\n\n <ChartSection>\n <ChartWithLegendWrapper>\n <ConversionTrendChartContainer data-testid=\"conversion-fullview-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={conversionData} margin={{ top: 10, right: 10, left: 0, bottom: 0 }}>\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 <Line\n type=\"monotone\"\n dataKey=\"rate\"\n stroke={getChartColor()}\n strokeWidth={2}\n name={`${getTranslation(Keys.defaults.conversionRate)} (${conversionFilterLabel})`}\n dot={false}\n />\n </LineChart>\n </ResponsiveContainer>\n </ConversionTrendChartContainer>\n <ChartLegendContainer>\n <LegendItem $color={getChartColor()}>\n {`${getTranslation(Keys.defaults.conversionRate)} (${conversionFilterLabel})`}\n </LegendItem>\n </ChartLegendContainer>\n </ChartWithLegendWrapper>\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.total)}\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 ConversionTrendChartContainer = styled(Box)`\n width: 100%;\n height: 370px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`;\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 ChartWithLegendWrapper = styled(Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`;\n\nexport const ChartLegendContainer = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`;\n\nexport const LegendItem = styled(Box)<{ $color?: string }>`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({ $color }) => $color ?? 'inherit'};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\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\nexport const OrderIdColumnCell = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`;\n\nexport const TrendValueText = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0;\n`;\n\nexport const TrendComparisonText = styled('span')`\n margin-left: 2px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.01em;\n color: #5f5f5f;\n`;\n\nexport const MetricSectionWrapper = styled(Box)`\n display: flex;\n align-items: center;\n gap: 0;\n flex-wrap: wrap;\n`;\n","import React, { useState } from 'react';\nimport { Box } from '@mui/material';\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } 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, getSignupValueByView } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\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 ChartWithLegendWrapper,\n ChartLegendContainer,\n LegendItem,\n NameColumnCell,\n TrendAbsoluteChangeText,\n TrendPercentageChangeText,\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\n/**\n * Transform API response format to SignupDataPoint array\n * Handles both direct array format and nested API response with 'daily' array\n */\nfunction normalizeSignupDataInput(input: unknown): SignupDataPoint[] {\n // Guard for nullish or non-object input\n if (input == null || typeof input !== 'object') {\n return [];\n }\n\n // If it's already an array, return it\n if (Array.isArray(input)) {\n return input;\n }\n\n // Handle API response format with 'daily' array\n const apiResponse = input as Record<string, unknown>;\n if (Array.isArray(apiResponse.daily)) {\n return (apiResponse.daily as Array<Record<string, unknown>>).map((item) => ({\n date: String(item.date ?? ''),\n total: toNumeric(item.total),\n members: toNumeric(item.members),\n retail: toNumeric(item.retail),\n brandAffiliates: toNumeric(\n item.brandAffiliates ?? item.brandAffiliate ?? item.brand_affiliates ?? item.brand_affiliate,\n ),\n }));\n }\n\n // Fallback to empty array\n return [];\n}\n\nexport interface SignupsFullViewProps {\n /**\n * Signup data - can be either:\n * 1. Direct array of SignupDataPoint (camelCase format)\n * 2. API response object with 'daily' array (snake_case format)\n */\n readonly signupData: SignupDataPoint[] | { daily?: Array<Record<string, unknown>>; [key: string]: unknown };\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 // First, transform API response format to array if needed\n const dataArray = normalizeSignupDataInput(signupData);\n\n // Then, normalize field names and values\n return dataArray.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 const totalSignups = React.useMemo(() => {\n if (normalizedSignupData.length === 0) return 0;\n const lastDataPoint = normalizedSignupData[normalizedSignupData.length - 1];\n return getSignupValueByView(lastDataPoint, signupView);\n }, [normalizedSignupData, signupView]);\n\n const trend = React.useMemo((): {\n direction: 'up' | 'down' | 'neutral';\n absoluteChange: number;\n percentageChange: string;\n } => {\n if (normalizedSignupData.length < 2)\n return {\n direction: 'neutral',\n absoluteChange: 0,\n percentageChange: getTranslation(Keys.defaults.zeroTrend),\n };\n const first = getSignupValueByView(normalizedSignupData[0], signupView);\n const last = getSignupValueByView(normalizedSignupData[normalizedSignupData.length - 1], signupView);\n if (first <= 0)\n return {\n direction: 'neutral',\n absoluteChange: 0,\n percentageChange: getTranslation(Keys.defaults.zeroTrend),\n };\n const absoluteChange = last - first;\n const percentageChange = (absoluteChange / first) * 100;\n let direction: 'up' | 'down' | 'neutral' = 'neutral';\n if (percentageChange > 0) direction = 'up';\n else if (percentageChange < 0) direction = 'down';\n return {\n direction,\n absoluteChange: Math.round(absoluteChange),\n percentageChange: `${percentageChange >= 0 ? '+' : ''}${percentageChange.toFixed(1)}%`,\n };\n }, [normalizedSignupData, signupView, Keys]);\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.defaults.all) },\n { value: 'members', label: getTranslation(Keys.defaults.members) },\n { value: 'retail', label: getTranslation(Keys.defaults.retail) },\n { value: 'brandAffiliates', label: getTranslation(Keys.defaults.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 {\n key: 'name',\n label: getTranslation(Keys.fullView.signups.columns.name),\n sortable: true,\n render: (value) => <NameColumnCell>{value as React.ReactNode}</NameColumnCell>,\n },\n { key: 'date', label: getTranslation(Keys.defaults.date), sortable: true },\n { key: 'type', label: getTranslation(Keys.defaults.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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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.direction !== 'neutral' && (\n <>\n <TrendAbsoluteChangeText>\n {trend.absoluteChange > 0 ? '+' : ''}\n {trend.absoluteChange}\n </TrendAbsoluteChangeText>\n <TrendPercentageChangeText>{trend.percentageChange}</TrendPercentageChangeText>\n </>\n )}\n {trend.direction === 'neutral' && <span>{trend.percentageChange}</span>}\n </MetricTrend>\n <ComparisonTextMobile>{getComparedToText(dateRange)}</ComparisonTextMobile>\n </MetricSection>\n\n <ChartSection>\n {hasSignupTrendData ? (\n <ChartWithLegendWrapper>\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 {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.defaults.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.defaults.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.defaults.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.defaults.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.defaults.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.defaults.brandAffiliates)}\n dot={{ r: 2 }}\n connectNulls\n />\n )}\n </LineChart>\n </ResponsiveContainer>\n </SignupTrendChartContainer>\n <Box>\n {signupView === 'all' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.total }}>\n {getTranslation(Keys.widget.signups.total)}\n </LegendItem>\n <LegendItem style={{ color: SERIES_COLORS.members }}>\n {getTranslation(Keys.defaults.members)}\n </LegendItem>\n <LegendItem style={{ color: SERIES_COLORS.retail }}>\n {getTranslation(Keys.defaults.retail)}\n </LegendItem>\n <LegendItem style={{ color: SERIES_COLORS.brandAffiliates }}>\n {getTranslation(Keys.defaults.brandAffiliates)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n {signupView === 'members' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.members }}>\n {getTranslation(Keys.defaults.members)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n {signupView === 'retail' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.retail }}>\n {getTranslation(Keys.defaults.retail)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n {signupView === 'brandAffiliates' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.brandAffiliates }}>\n {getTranslation(Keys.defaults.brandAffiliates)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n </Box>\n </ChartWithLegendWrapper>\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';\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(Box)`\n width: 100%;\n height: 320px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`;\n\nexport const ComparisonTextMobile = styled(Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => theme.palette.text.secondary};\n white-space: nowrap;\n`;\n\nexport const ChartWithLegendWrapper = styled(Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`;\n\nexport const ChartLegendContainer = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`;\n\nexport const LegendItem = styled(Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({ theme }) => theme.palette.text.secondary};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\n }\n`;\n\nexport const NameColumnCell = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`;\n\nexport const TrendAbsoluteChangeText = styled('span')`\n font-weight: 600;\n line-height: 1;\n`;\n\nexport const TrendPercentageChangeText = styled('span')`\n font-weight: 400;\n line-height: 1;\n`;\n","import React, { useState } from 'react';\nimport { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } 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, capitalizeFirstLetter } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } from '../../utils/dateFormat';\nimport type {\n CategoryRevenue,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n CategorySortOption,\n} from '../../types.d';\nimport type { TrendDirection } from '../types';\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 SummaryName,\n SummaryValue,\n SummaryPercentage,\n SummaryTrendIcon,\n DesktopTableContainer,\n MobileCategoriesContainer,\n MobileCategoryCard,\n CategoryNameColumnCell,\n} from './CategoriesFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { calculateWeightedRevenueTrend, renderPieChartLabel } 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 summaryChangePct?: number | null;\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 summaryChangePct,\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.defaults.byRevenue) },\n { value: 'trend', label: getTranslation(Keys.defaults.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 interface CustomLabelProps {\n cx: number;\n cy: number;\n midAngle: number;\n innerRadius: number;\n outerRadius: number;\n percentage: number;\n }\n\n const renderCustomLabel = (props: CustomLabelProps) => {\n return renderPieChartLabel(props, { fontSize: '12', fontWeight: '700' });\n };\n\n const getTrendIcon = (direction: TrendDirection) => {\n if (direction === 'up') {\n return <TrendingUpIcon sx={{ fontSize: '16px' }} aria-hidden=\"true\" />;\n }\n if (direction === 'down') {\n return <TrendingDownIcon sx={{ fontSize: '16px' }} aria-hidden=\"true\" />;\n }\n return null;\n };\n\n const resolveTrendDirection = (trendValue?: string): TrendDirection => {\n if (!trendValue) return 'neutral';\n const parsed = Number.parseFloat(trendValue);\n if (Number.isNaN(parsed)) return 'neutral';\n if (parsed > 0) return 'up';\n if (parsed < 0) return 'down';\n return 'neutral';\n };\n\n const sortedCategories = React.useMemo(\n () =>\n [...categories].sort((a, b) => {\n if (categorySort === 'revenue') return b.revenue - a.revenue;\n return (b.volume ?? 0) - (a.volume ?? 0);\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 let nextTrendDirection: TrendDirection;\n let nextFormattedTrend: string;\n\n // Use the provided summaryChangePct if available, otherwise calculate from items\n if (summaryChangePct !== undefined && summaryChangePct !== null) {\n if (Math.abs(summaryChangePct) < 0.1) {\n nextFormattedTrend = '0%';\n nextTrendDirection = 'neutral';\n } else {\n nextTrendDirection = summaryChangePct > 0 ? 'up' : 'down';\n nextFormattedTrend = `${summaryChangePct > 0 ? '+' : ''}${summaryChangePct.toFixed(1)}%`;\n }\n } else {\n const { direction, formatted } = calculateWeightedRevenueTrend(\n sortedCategories,\n (category) => category.revenue,\n (category) => category.trend?.revenue,\n );\n nextTrendDirection = direction;\n nextFormattedTrend = formatted;\n }\n\n return {\n totalRevenue: nextTotalRevenue,\n totalRevenueTrendDirection: nextTrendDirection,\n totalRevenueTrend: nextFormattedTrend,\n };\n }, [sortedCategories, summaryChangePct]);\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 currencyCode = sortedCategories[0]?.currencyCode;\n\n const columns: ColumnDef<CategoryRevenue>[] = React.useMemo(() => {\n const cols = [\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 <CategoryNameColumnCell>{capitalizeFirstLetter(row.name)}</CategoryNameColumnCell>\n </SummaryItemRow>\n ),\n },\n {\n key: 'revenue',\n label: getTranslation(Keys.defaults.revenue),\n sortable: true,\n render: (value: unknown, row: CategoryRevenue) => formatMoney(Number(value), row.currencyCode),\n },\n {\n key: 'volume',\n label: getTranslation(Keys.defaults.volume),\n sortable: true,\n render: (value: unknown) => formatMoney(Number(value ?? 0), 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.defaults.trend),\n render: (_: unknown, row: CategoryRevenue) =>\n row.trend?.revenue ?? getTranslation(Keys.defaults.noValue),\n },\n ];\n return cols;\n }, [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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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 label={renderCustomLabel}\n labelLine={false}\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}>\n {getTrendIcon(totalRevenueTrendDirection)}\n <span>{totalRevenueTrend}</span>\n </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 <SummaryName>{capitalizeFirstLetter(category.name)}</SummaryName>\n <SummaryValue>{formatMoney(category.revenue, category.currencyCode)}</SummaryValue>\n <SummaryPercentage>({category.percentage}%)</SummaryPercentage>\n {category.trend?.revenue ? (\n <SummaryTrendIcon direction={resolveTrendDirection(category.trend.revenue)}>\n {getTrendIcon(resolveTrendDirection(category.trend.revenue))}\n </SummaryTrendIcon>\n ) : null}\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: 32px;\n padding: 24px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n box-shadow: ${({ theme }) => theme.shadows[1]};\n align-items: center;\n justify-content: center;\n width: 100%;\n box-sizing: border-box;\n margin: 0 auto;\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n align-items: flex-start;\n justify-content: flex-start;\n }\n`;\n\nexport const ChartWrapper = muiStyled(Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\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 display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\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 '#2e7d32';\n if (direction === 'down') return '#d32f2f';\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 SummaryContainer = muiStyled(Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 0;\n`;\n\nexport const SummaryItem = muiStyled(Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n white-space: nowrap;\n min-width: 0;\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: none;\n`;\n\nexport const SummaryName = muiStyled(Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.primary};\n flex-shrink: 0;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n`;\n\nexport const SummaryValue = muiStyled(Typography)`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.secondary};\n flex-shrink: 0;\n white-space: nowrap;\n`;\n\nexport const SummaryPercentage = muiStyled(Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n flex-shrink: 0;\n color: ${({ theme }) => theme.palette.text.primary};\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\nexport const SummaryTrendIcon = muiStyled('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: 14px;\n height: 14px;\n font-size: 14px;\n }\n`;\n\nexport const CategoryNameColumnCell = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\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 // Set resolver in effect only — synchronous side effects during render are impure\n // Always call useEffect at top level - React Hook Rules require unconditional hook calls\n // This manages setup, cleanup on unmount, and updates when translate changes\n React.useEffect(() => {\n if (translate !== undefined) {\n setTranslationResolver(translate);\n return () => {\n setTranslationResolver(undefined);\n };\n }\n return undefined;\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, capitalizeFirstLetter } 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 readonly onExport?: () => void;\n}\n\nconst TopPerformingOffersPieChartComponent: React.FC<TopPerformingOffersPieChartProps> = ({\n offers,\n offerSort,\n isLoading = false,\n title,\n onSortChange,\n onTitleClick,\n onExport,\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.defaults.byRevenue)}</option>\n <option value=\"units\">{getTranslation(Keys.defaults.byUnits)}</option>\n </SortDropdown>\n <WidgetMenu widgetId=\"top-offers\" onFullView={onTitleClick} onExport={onExport} />\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>{capitalizeFirstLetter(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 byRevenue: { key: 'productOfferDashboard.defaults.byRevenue', fallback: 'Revenue' },\n byUnits: { key: 'productOfferDashboard.defaults.byUnits', fallback: 'Units' },\n byVolume: { key: 'productOfferDashboard.defaults.byVolume', fallback: 'Volume' },\n },\n} as const;\n\nexport function getTranslation(entry: TranslationEntry): string {\n return resolveTranslation(entry);\n}\n","import React from 'react';\nimport type { TopPerformingOffer, TopProduct } from '../types.d';\nimport { exportTopPerformingOffers, exportTopProducts } from '../utils/productOfferExport';\n\nexport interface ProductOfferWidgetExportOptions {\n readonly topProducts: readonly TopProduct[];\n readonly topOffers: readonly TopPerformingOffer[];\n readonly topProductsExportData?: readonly TopProduct[];\n readonly topOffersExportData?: readonly TopPerformingOffer[];\n readonly showTopProductsExportOption?: boolean;\n readonly showTopOffersExportOption?: boolean;\n readonly isLoading?: boolean;\n}\n\nexport interface ProductOfferWidgetExportHandlers {\n readonly onTopProductsExport?: () => Promise<void>;\n readonly onTopOffersExport?: () => Promise<void>;\n}\n\nexport function useProductOfferWidgetExports({\n topProducts,\n topOffers,\n topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption = true,\n showTopOffersExportOption = true,\n isLoading = false,\n}: ProductOfferWidgetExportOptions): ProductOfferWidgetExportHandlers {\n const productRows = topProductsExportData ?? topProducts;\n const offerRows = topOffersExportData ?? topOffers;\n\n const canExportProducts = showTopProductsExportOption && !isLoading && productRows.length > 0;\n const canExportOffers = showTopOffersExportOption && !isLoading && offerRows.length > 0;\n\n const onTopProductsExport = React.useCallback(() => exportTopProducts(productRows), [productRows]);\n const onTopOffersExport = React.useCallback(() => exportTopPerformingOffers(offerRows), [offerRows]);\n\n return {\n onTopProductsExport: canExportProducts ? onTopProductsExport : undefined,\n onTopOffersExport: canExportOffers ? onTopOffersExport : undefined,\n };\n}\n","export type ExcelCellValue = string | number | boolean | Date | null | undefined;\n\nexport interface ExcelExportColumn<TItem> {\n readonly header: string;\n readonly value: (item: TItem) => ExcelCellValue;\n}\n\nexport interface ExcelExportOptions<TItem> {\n readonly rows: readonly TItem[];\n readonly columns: readonly ExcelExportColumn<TItem>[];\n readonly fileName: string;\n readonly sheetName: string;\n}\n\nconst INVALID_SHEET_NAME_CHARS = /[\\\\/?*[\\]:]/g;\nconst MAX_SHEET_NAME_LENGTH = 31;\n\nexport function normalizeExcelFileName(fileName: string): string {\n const trimmedFileName = fileName.trim();\n const resolvedFileName = trimmedFileName.length > 0 ? trimmedFileName : 'export';\n return resolvedFileName.toLowerCase().endsWith('.xlsx') ? resolvedFileName : `${resolvedFileName}.xlsx`;\n}\n\nexport function normalizeExcelSheetName(sheetName: string): string {\n const normalizedSheetName = sheetName.replace(INVALID_SHEET_NAME_CHARS, ' ').trim();\n const resolvedSheetName = normalizedSheetName.length > 0 ? normalizedSheetName : 'Export';\n return resolvedSheetName.slice(0, MAX_SHEET_NAME_LENGTH);\n}\n\nexport async function exportRowsToExcel<TItem>({\n rows,\n columns,\n fileName,\n sheetName,\n}: ExcelExportOptions<TItem>): Promise<void> {\n const { Workbook } = await import('exceljs');\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(normalizeExcelSheetName(sheetName));\n\n worksheet.columns = columns.map((column) => ({ header: column.header, key: column.header }));\n rows.forEach((row) => {\n const worksheetRow: Record<string, ExcelCellValue> = {};\n\n columns.forEach((column) => {\n worksheetRow[column.header] = column.value(row) ?? '';\n });\n\n worksheet.addRow(worksheetRow);\n });\n\n const buffer = await workbook.xlsx.writeBuffer();\n downloadExcelBuffer(buffer, normalizeExcelFileName(fileName));\n}\n\nfunction downloadExcelBuffer(buffer: ArrayBuffer | Uint8Array, fileName: string): void {\n const blob = new Blob([new Uint8Array(buffer)], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = url;\n link.download = fileName;\n // Append to document.body before clicking — required for Firefox/Safari compatibility\n document.body.appendChild(link);\n link.click();\n // Clean up: remove from DOM and revoke URL\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n","import type { TopPerformingOffer, TopProduct } from '../types.d';\nimport type { ExcelExportColumn } from './excelExport';\nimport { exportRowsToExcel } from './excelExport';\n\nconst topProductColumns: readonly ExcelExportColumn<TopProduct>[] = [\n { header: 'Rank', value: (product) => product.rank },\n { header: 'Product ID', value: (product) => product.id },\n { header: 'Product Name', value: (product) => product.name },\n { header: 'Units Sold', value: (product) => product.unitsSold },\n { header: 'Total Revenue', value: (product) => product.revenue },\n { header: 'Currency', value: (product) => product.currencyCode },\n { header: 'Volume DC-SV', value: (product) => product.volume },\n { header: 'Trend', value: (product) => product.trend?.units ?? product.trend?.revenue ?? product.trend?.volume },\n];\n\nconst topOfferColumns: readonly ExcelExportColumn<TopPerformingOffer>[] = [\n { header: 'Offer ID', value: (offer) => offer.id },\n { header: 'Offer Name', value: (offer) => offer.name },\n { header: 'Total Revenue', value: (offer) => offer.revenue },\n { header: 'Currency', value: (offer) => offer.currencyCode },\n { header: 'Total Volume', value: (offer) => offer.volume ?? offer.units },\n { header: 'Share %', value: (offer) => offer.percentage },\n { header: 'Trend', value: (offer) => offer.trend?.revenue ?? offer.trend?.units },\n];\n\nexport function exportTopProducts(rows: readonly TopProduct[]): Promise<void> {\n return exportRowsToExcel({\n rows,\n columns: topProductColumns,\n fileName: 'top-selling-products',\n sheetName: 'Top Selling Products',\n });\n}\n\nexport function exportTopPerformingOffers(offers: readonly TopPerformingOffer[]): Promise<void> {\n return exportRowsToExcel({\n rows: offers,\n columns: topOfferColumns,\n fileName: 'top-performing-offers',\n sheetName: 'Top Performing Offers',\n });\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 { useProductOfferWidgetExports } from './hooks/useProductOfferWidgetExports';\nimport type { ProductOfferDashboardProps, TopProduct, ConversionDataPoint, TopPerformingOffer } from './types.d';\nimport {\n getTranslation,\n ProductOfferDashboardTranslationKeys as Keys,\n} from './TranslationKeys/ProductOfferDashboardTranslationKeys';\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 = DEFAULT_DATE_RANGE,\n market = 'all',\n productSort = 'units',\n conversionFilter = 'all',\n offerSort = 'revenue',\n conversionSummaryRate,\n conversionSummaryChangePct,\n topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption = true,\n showTopOffersExportOption = true,\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 const { onTopProductsExport, onTopOffersExport } = useProductOfferWidgetExports({\n topProducts: resolvedTopProducts,\n topOffers: resolvedTopOffers,\n topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption,\n showTopOffersExportOption,\n isLoading,\n });\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: stats.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 dateRange={dateRange}\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 onExport={onTopProductsExport}\n />\n <TopPerformingOffersPieChart\n offers={resolvedTopOffers}\n offerSort={offerSort}\n isLoading={isLoading}\n onSortChange={onOfferSortChange}\n onTitleClick={onOffersTitleClick}\n onExport={onTopOffersExport}\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\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption = true,\n showTopOffersExportOption = true,\n initialDateRange = DEFAULT_DATE_RANGE,\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 topProductsExportData={topProductsExportData}\n topOffersExportData={topOffersExportData}\n showTopProductsExportOption={showTopProductsExportOption}\n showTopOffersExportOption={showTopOffersExportOption}\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 { calculateDateRangeFromOption } 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.defaults.byRevenue),\n value: offerSort,\n options: [\n { value: 'revenue', label: getTranslation(Keys.defaults.byRevenue) },\n { value: 'units', label: getTranslation(Keys.defaults.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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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"]}
|
|
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/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/trendUtils.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/utils/comparisonTextUtils.ts","../src/common/shopping-dashboard/utils/conversionFilter.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/utils/conversionSeries.ts","../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/hooks/useProductOfferWidgetExports.ts","../src/common/shopping-dashboard/utils/excelExport.ts","../src/common/shopping-dashboard/utils/productOfferExport.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":["Nc","Object","create","gr","defineProperty","Ic","getOwnPropertyDescriptor","Vc","getOwnPropertyNames","Ec","getPrototypeOf","Ac","prototype","hasOwnProperty","$a","e","t","exports","zc","o","get","enumerable","In","n","i","call","L","__esModule","value","Bc","require_ReactPropTypesSecret","__commonJSMin","module","ReactPropTypesSecret","require_factoryWithThrowingShims","emptyFunction","emptyFunctionWithReset","pi","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","fi","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","exportRowsToExcel","exportTopPerformingOffers","exportTopProducts","formatDateRange","formatDateRangeLabel","formatDisplayDate","formatISODate","formatShortDate","getComparedToText","getDateRangeLabel","getDaysFromDateRange","getTranslation","getTranslationResolver","getTrendColor","getTrendIcon","mockCategories","mockConversionData","mockOrders","mockProductOfferStats","mockSignupData","mockSignupDetails","mockStats","mockTopOffers","mockTopProducts","normalizeExcelFileName","normalizeExcelSheetName","paginateItems","resolveMarketOptions","resolveTranslation","setTranslationResolver","sortByNumericProperty","useProductOfferWidgetExports","useTranslation","useTranslationResolver","__toCommonJS","import_react","require","import_foundation_ui_components","import_foundation_theme","PriceComponent","_t","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","_n","useState","isButtonHovered","setIsButtonHovered","Kn","useMediaQuery","handleImageError","target","noImageFallback","fallbackImage","src","Xe","jsxs","onClick","tabIndex","children","jsx","onError","imageSrc","Un","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","Ke","bo","Box","ScrollableContainer","CardList","ControlsContainer","ViewAllWrapper","$isMobile","ProductCountWrapper","ArrowsWrapper","$isDisabled","Scrollablewrapper","CustomTypography","Gn","NsTypography","ViewAllLink","$disabled","EmptyProductCategories","ControlsHeaderRow","ProductInfoWrapper","CategoryNameWrapper","entries","renderEntry","settings","showControlButtons","allEntryLabel","allEntryLink","categoryName","emptyProductMessage","productsCountLabel","isInitialDataLoading","history","sliderRef","Wo","useRef","li","prev","useCallback","current","slickPrev","next","slickNext","renderProductEntry","entry","index","ke","directSeller","sliderSettings","dots","infinite","speed","slidesToShow","Math","min","length","slidesToScroll","swipe","draggable","arrows","responsive","breakpoint","shouldShowNavigation","renderCarouselContent","map","ii","Slider","ref","variant","preventDefault","push","si","NsCarouselControl","viewAllLabel","viewAllUrl","React","import_Tabs","import_Tab","import_prop_types","hi","NsCategoryNavigationContainer","xi","div","TabPanel","other","Ut","role","hidden","id","Ia","propTypes","mr","itemArray","controlledValue","onChange","yi","internalValue","setInternalValue","vi","wi","Tabs","orientation","event","newValue","item","Ci","Tab","label","categoryId","findIndex","content","getMinHeight","$hasCategories","ProductTabCarouselContainer","lo","TabsContainer","ContentContainer","LoadingContainer","NoTabsContainer","SpinnerContainer","fetchCategories","fetchProducts","showCustomCategory","emptyProductTabs","getCategoryId","categories","Mi","qe","isLoadingInitialData","setIsLoadingInitialData","setCategories","isCategoriesLoaded","setIsCategoriesLoaded","selectedTab","setSelectedTab","products","setProducts","loading","setLoading","shouldShowSpinner","setShouldShowSpinner","checkForExistingSpinners","existingSpinners","document","querySelectorAll","useEffect","then","data","finally","cat","wt","_","Oi","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","Ct","xr","yo","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","vt","Wi","sx","ArrowDownIcon","za","trackGTMEvent","eventData","window","url","href","updatedEventData","prefix","includes","dataLayer","console","error","renderImageContent","placeholderClass","Uo","ge","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","ht","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","wo","StatsRow","WidgetContainer","TwoColumnGrid","ErrorContainer","import_CalendarMonth","import_Language","Ge","ColorUtils","getGenomeColor","HeaderContainer","theme","TitleSection","ShopTitle","DateRangeLabel","FiltersSection","FilterDropdownContainer","FilterLabel","StyledSelect","FilterIcon","LoadingIndicatorContainer","DesktopFiltersContainer","StyledCircularProgress","activeResolver","resolver","fallback","result","stats","revenue","visits","trend","increased","decreased","unchanged","details","filter","dateRange","last7days","last30days","last90days","thisMonth","market","all","productSort","signupView","showAll","showMembers","showRetail","showBrandAffiliates","conversionType","retail","member","widget","topProducts","viewAll","empty","ariaLabel","titleAriaLabel","sortAriaLabel","noImageAriaLabel","unitsSuffix","revenueSuffix","rank","conversionRate","formula","comparison","chartAriaLabel","filterAriaLabel","tooltipOrders","tooltipVisits","ordersPerSiteVisits","signups","total","totalSignupsInPeriod","noTrendData","compareTo","topCategories","menu","fullView","viewDetails","exportData","navigation","backToDashboard","backAriaLabel","dashboard","statsRow","dashboardFilters","loadingDashboard","dateRangeFilter","marketFilter","filterSuffix","columns","status","detailsTitle","orderId","customer","items","bv","totalSv","orderDetailsTitle","notAvailable","product","unitsSold","volume","skuPrefix","noProducts","category","percentOfTotal","allCategoriesTitle","noCategoryData","dataTable","noDataAvailable","sortableColumn","pagination","previousPage","nextPage","goToPage","of","defaults","zeroTrend","noValue","noData","noChange","byRevenue","byUnits","byVolume","byTrend","members","brandAffiliates","units","date","dcSv","markets","useMarketOptions","al","dateRangeLabel","dateRangeLabelProp","isLoading","onDateRangeChange","onMarketChange","marketOptions","handleDateRangeChange","newDateRange","handleMarketChange","newMarket","handleFilterKeyDown","blur","getDateRangeLabelText","se","as","ll","htmlFor","nl","CalendarMonthIcon","il","LanguageIcon","find","opt","String","option","import_ShowChart","import_TrendingUp","import_TrendingDown","Te","StatsCardContainer","$layout","SplitTitle","SplitRow","LegendColumn","SplitTrend","direction","LegendCaption","StatsTitle","StatsValueContainer","StatsValue","ValueSubtitleWrapper","StatsSubtitle","TrendContainer","TrendIcon","TrendText","StatsCardHeader","import_Skeleton","SkeletonCard","ee","SkeletonHeader","SkeletonRow","StatsCardWrapper","StatsCardHeaderRow","StatsCardBody","StatsCardSubtitle","vo","Skeleton","ProductRowInfo","ProductRowMetrics","ChartMetricRow","ChartMetricTrend","ChartAreaSkeleton","PieChartLayout","PieCircleSkeleton","LegendList","LegendRowWrapper","LegendRowInfo","DashboardLayout","DashboardHeaderRow","DashboardFilterGroup","StatsGrid","WidgetGrid","FullViewLayout","FullViewMetricCard","FullViewMetricCenter","FullViewChartArea","FullViewTableCard","FullViewTableRow","SummaryCardsGrid","StatsCardSkeleton","S","ae","ProductRowSkeleton","ProductsListSkeleton","rowKey","ChartWidgetSkeleton","LegendRowSkeleton","CategoriesPieChartSkeleton","FullViewChartSkeleton","FullViewTableSkeleton","StatsCardComponent","subtitle","caption","layout","trendDirection","trendValue","ce","getTrendAriaLabel","directionText","getTrendChartIcon","iconSize","Wl","TrendingUpIcon","_l","TrendingDownIcon","Hl","ShowChartIcon","Bl","memo","displayName","import_ShoppingCart","parseTrendPercent","cleanedValue","parsedValue","isFinite","resolveTrendDirection","calculateWeightedRevenueTrend","getRevenue","getTrend","reduce","accumulator","weightedSum","weight","average","formatted","toFixed","getTrendDirectionLabel","jo","Kl","Gl","Ul","renderPieChartLabel","options","cx","cy","midAngle","innerRadius","outerRadius","percentage","RADIAN","PI","radius","x","cos","y","sin","textAnchor","dominantBaseline","itemsPerPage","ceil","currentPage","startIndex","endIndex","sort","a","aVal","bVal","decimalPlaces","usePaginatedItems","totalPages","qa","pageItems","getLocaleFromMarketCode","marketCode","formatMoney","currencyCode","locale","fractionDigits","amount","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","toLocaleString","capitalizeFirstLetter","text","charAt","toUpperCase","getSignupValueByView","dataPoint","view","he","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_FileDownload","import_IconButton","Or","StyledIconButton","cs","IconButton","widgetId","onFullView","onExport","gs","anchorEl","setAnchorEl","buttonId","menuId","handleClick","currentTarget","handleClose","handleFullView","handleExport","He","size","ms","MoreVertIcon","fs","Menu","onClose","MenuListProps","anchorOrigin","vertical","horizontal","transformOrigin","rn","MenuItem","an","ListItemIcon","hs","VisibilityIcon","nn","ListItemText","xs","FileDownloadIcon","TopSellingProductsListComponent","maxProducts","onSortChange","onTitleClick","handleSortChange","newSort","formatValue","sortBy","getSubtitle","getTrendValue","getTrendDirection","displayedProducts","rankLabel","trendLabel","q","ys","ShoppingCartIcon","imageUrl","bs","import_recharts","Se","ConversionRateContainer","ChartHeader","TitleRow","ChartTitle","FilterDropdown","MetricDisplay","MetricValue","MetricTrend","FormulaDisplay","ChartContainer","TooltipContainer","TooltipLabel","TooltipValue","TooltipDetails","DEFAULT_DATE_RANGE","getMonth","getDate","AXIS_MONTH_MAP","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","formatAxisDate","dateStr","parts","start","end","toISOString","calculateDateRangeFromOption","dateRangeOption","today","year","getFullYear","month","startDate","endDate","keys","matchesConversionFilter","point","priceTypes","some","priceType","filterConversionData","conversionData","CHART_MARGIN","AXIS_TICK","HollowDot","U","fillOpacity","stroke","strokeWidth","ActiveHollowDot","rateTickFormatter","CustomTooltip","active","payload","rate","orders","siteVisits","ConversionRateChartComponent","conversionFilter","summaryRate","summaryChangePct","onFilterChange","handleFilterChange","po","newFilter","noDataText","noChangeText","filteredData","currentRate","at","trendInfo","latestRate","previousRate","change","percentageChange","formattedChange","formattedData","shortDate","tt","ResponsiveContainer","LineChart","CartesianGrid","strokeDasharray","XAxis","dataKey","tick","tickLine","interval","YAxis","tickFormatter","domain","Line","dot","activeDot","We","SignupsContainer","Legend","LegendItem","LegendColor","LegendLabel","SERIES_COLORS","dotComponentCache","Map","HollowDotFactory","strokeColor","has","I","set","SignupsChartComponent","signupData","onViewChange","handleViewChange","So","newView","totalSignups","lastDataPoint","latestValue","previousValue","totalLabel","membersLabel","retailLabel","brandAffiliatesLabel","Ce","ie","CategoriesContainer","ChartAndLegendContainer","ChartWrapper","DonutCenterOverlay","DonutCenterLabel","DonutCenterValue","DonutCenterTrend","LegendContainer","LegendInfo","LegendName","LegendValue","LegendPercentage","LegendValueWrapper","LegendTrendInline","LegendTrend","TopCategoriesPieChartComponent","categorySort","sortedCategories","Xr","nextSortedCategories","nextTotalRevenue","sum","nextTotalVolume","nextTrendDirection","nextFormattedTrend","totalRevenue","totalVolume","formattedTrend","getTrendGraphIcon","K","Zs","Xs","renderCustomLabel","Pt","PieChart","Pie","nameKey","paddingAngle","labelLine","Cell","formatter","displayValue","displayPercentage","volumeSharePct","displayTrend","EMPTY_TOP_PRODUCTS","EMPTY_CONVERSION_DATA","EMPTY_SIGNUP_DATA","EMPTY_CATEGORIES","categoriesSummaryChangePct","conversionSummaryChangePct","onProductSortChange","onSignupViewChange","onConversionFilterChange","onCategorySortChange","onProductsTitleClick","onConversionTitleClick","onSignupsTitleClick","onCategoriesToTitleClick","onProductsExport","onConversionExport","onSignupsExport","onCategoriesExport","resolvedTopProducts","resolvedConversionData","resolvedSignupData","resolvedCategories","Me","startsWith","metrics","import_ArrowBack","import_CalendarToday","Ve","PageHeaderWrapper","BackButtonWrapper","BackButton","LeftSection","Title","DateRange","MobileDateRange","FilterWrapper","MobileTitleWrapper","MobileTitle","buildDateRangeFilter","buildMarketFilter","onBack","filters","renderFilterIcon","iconType","be","gd","CalendarTodayIcon","fd","ud","ArrowBackIcon","import_ArrowUpward","import_ArrowDownward","pt","TableContainer","Table","TableHeader","TableHeaderCell","sortable","TableBody","TableRow","TableCell","EmptyTableCell","SortIconContainer","isActive","onSort","sortColumn","sortDirection","getRowKey","handleSort","columnKey","handleKeyDown","getAriaSort","je","column","scope","kd","ArrowDownwardIcon","vd","ArrowUpwardIcon","colSpan","row","rowIndex","render","import_ChevronLeft","import_ChevronRight","uo","PaginationContainer","PageButton","PageInfo","NavButton","onPageChange","totalItems","handlePrevious","handleNext","action","pageNumbers","from","pages","startItem","endItem","goToPageLabel","Oe","Sd","ChevronLeftIcon","page","Dd","ChevronRightIcon","import_styles","Pd","PageContainer","Ee","Ae","MetricChartCardSection","shadows","MetricSection","palette","primary","success","main","secondary","ComparisonText","ChartSection","TableSection","withCard","MobileCardName","MobileCardSubtext","MobileCardDetail","MobileCardStatus","warning","$d","ze","Le","ProductSku","MobileCardsContainer","DesktopTableContainer","MobileProductCard","divider","MobileCardHeader","MobileProductRank","MobileProductDetails","MobileProductName","MobileProductSku","MobileMetricsGrid","MobileMetricItem","MobileMetricLabel","MobileMetricValue","MOBILE_VIEWPORT_QUERY","useIsMobileViewport","Gd","noSsr","mapProductToRow","sku","padStart","gt","setCurrentPage","setSortColumn","setSortDirection","isMobileView","handleBack","productRows","sortedRows","paginatedRows","j","PRICE_TYPE_SERIES_PREFIX","PRICE_TYPE_COLORS","FALLBACK_COLORS","priceTypeSeriesKey","priceTypeColor","collectPriceTypes","forEach","ratesByPriceType","localeCompare","toSeriesPoint","series","Jd","ConversionTrendChartContainer","fe","ve","MobileOrderCard","MobileOrderHeader","MobileCustomerInfo","MobileCustomerName","MobileOrderDate","MobileOrderId","MobileOrderMetrics","MobileOrdersContainer","ChartWithLegendWrapper","ChartLegendContainer","$color","ComparisonTextMobile","OrderIdColumnCell","TrendValueText","TrendComparisonText","MetricSectionWrapper","priceTypeTrend","_e","priceTypeSeries","chartData","changePercent","getConversionFilterLabel","conversionFilterLabel","filteredOrders","order","paginatedOrders","N","getChartColor","up","gp","Ye","customerName","fp","MobileSignupsContainer","ft","Lt","MobileSignupCard","SignupTrendChartContainer","NameColumnCell","TrendAbsoluteChangeText","TrendPercentageChangeText","toNumeric","parsed","normalizeSignupDataInput","input","isArray","apiResponse","daily","brandAffiliate","brand_affiliates","brand_affiliate","$t","normalizedSignupData","rawPoint","signupTotal","absoluteChange","first","last","round","hasSignupTrendData","paginatedSignups","D","Sp","Dp","we","connectNulls","Tp","signup","Gt","SummaryItemRow","SummaryItemInfo","SummaryItemName","SummaryItemSubtext","SummaryItemPercentage","TopSection","$e","muiStyled","Ne","SummaryContainer","SummaryItem","ColorDot","dotColor","SummaryInfo","SummaryName","SummaryValue","SummaryPercentage","MobileCategoriesContainer","MobileCategoryCard","SummaryTrendIcon","CategoryNameColumnCell","Nt","z","jp","Yp","parseFloat","isNaN","totalRevenueTrendDirection","totalRevenueTrend","paginatedCategories","It","translate","kn","DEFAULT_HISTORY_STATE_KEY","EMPTY_ORDERS","EMPTY_SIGNUPS","isRecord","isMysiteDashboardView","readViewFromState","state","stateKey","buildStateWithView","buildLocationWithState","pathname","search","hash","conversionPriceTypeTrend","initialDateRange","initialMarket","initialProductSort","initialSignupView","initialConversionFilter","initialCategorySort","historyAdapter","historyStateKey","resetToDashboardOnMount","de","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","Oo","PoDashboardContainer","Fo","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","ba","nextSortedOffers","offer","Y","Vt","legendTrendDirection","INVALID_SHEET_NAME_CHARS","fileName","trimmedFileName","resolvedFileName","endsWith","sheetName","normalizedSheetName","rows","Workbook","workbook","worksheet","buffer","addWorksheet","header","worksheetRow","addRow","xlsx","writeBuffer","downloadExcelBuffer","blob","Blob","Uint8Array","URL","createObjectURL","link","download","body","appendChild","click","removeChild","revokeObjectURL","topProductColumns","topOfferColumns","topProductsExportData","topOffersExportData","showTopProductsExportOption","showTopOffersExportOption","offerRows","canExportProducts","canExportOffers","onTopProductsExport","Pn","onTopOffersExport","EMPTY_TOP_OFFERS","dashboardTitle","conversionSummaryRate","onOfferSortChange","onOffersTitleClick","resolvedTopOffers","Je","selectedMarket","ac","le","ne","SummaryTrend","TableTrendCell","MobileOffersContainer","MobileOfferCard","MobileOfferHeader","MobileOfferName","MobileOfferMetricsGrid","MobileOfferMetricItem","MobileOfferMetricLabel","MobileOfferMetricValue","MobileOfferTrendValue","Et","paginatedOffers","$","columnTrendDirection","At","summaryTrendDirection","trendPercent","isProductOfferDashboardView","allProducts","allOffers","conversionFullViewData","conversionFullViewRate","conversionFullViewChangePct","initialOfferSort","me","setOfferSort","resolvedAllProducts","resolvedAllOffers","handleOfferSortChange","handleOffersTitleClick","rr","Lo","FilterContainer","$o","setDate","mockConversionDataRetail","mockConversionDataMember","months","floor","firstNames","lastNames","toLocaleDateString","day","customerType","types","mockProductOfferStatsPositiveTrend","mockProductOfferStatsNegativeTrend","mockProductOfferStatsNeutralTrend","mockProductOfferStatsZeroOffers"],"mappings":"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","sourcesContent":["\"use strict\";var Nc=Object.create;var gr=Object.defineProperty;var Ic=Object.getOwnPropertyDescriptor;var Vc=Object.getOwnPropertyNames;var Ec=Object.getPrototypeOf,Ac=Object.prototype.hasOwnProperty;var $a=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),zc=(e,t)=>{for(var o in t)gr(e,o,{get:t[o],enumerable:!0})},In=(e,t,o,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Vc(t))!Ac.call(e,i)&&i!==o&&gr(e,i,{get:()=>t[i],enumerable:!(n=Ic(t,i))||n.enumerable});return e};var L=(e,t,o)=>(o=e!=null?Nc(Ec(e)):{},In(t||!e||!e.__esModule?gr(o,\"default\",{value:e,enumerable:!0}):o,e)),Bc=e=>In(gr({},\"__esModule\",{value:!0}),e);var pi=$a((kg,di)=>{\"use strict\";var Wc=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\";di.exports=Wc});var fi=$a((Tg,gi)=>{\"use strict\";var _c=pi();function ci(){}function ui(){}ui.resetWarningCache=ci;gi.exports=function(){function e(n,i,l,s,d,f){if(f!==_c){var h=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 h.name=\"Invariant Violation\",h}}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:ui,resetWarningCache:ci};return o.PropTypes=o,o}});var hi=$a((Pg,mi)=>{\"use strict\";mi.exports=fi()();var Sg,Dg});var tg={};zc(tg,{CategoriesFullView:()=>ha,ConversionRateChart:()=>co,ConversionRateFullView:()=>Mo,DATE_RANGE_LABELS:()=>dn,DAYS_MAP:()=>sn,DashboardHeader:()=>Co,DataTable:()=>ct,FilterBar:()=>Lc,MysiteDashboardWithNavigation:()=>Qp,MysiteHero:()=>Ba,NsCategoryNavigation:()=>hr,NsProductCard:()=>fr,PageHeader:()=>ye,Pagination:()=>ut,PoDashboardWithNavigation:()=>Rc,ProductCarousel:()=>_o,ProductOfferDashboard:()=>va,ProductOfferDashboardTranslationKeys:()=>H,ProductTabCarousel:()=>Fi,ProductsFullView:()=>Ro,ShoppingDashboard:()=>qr,ShoppingDashboardTranslationKeys:()=>r,SignupsChart:()=>qo,SignupsFullView:()=>ga,StatsCard:()=>kt,TopCategoriesPieChart:()=>Qo,TopPerformingOffersFullView:()=>Da,TopPerformingOffersPieChart:()=>tr,TopSellingProductsList:()=>so,TranslationProvider:()=>Jp,WidgetMenu:()=>st,buildDefaultMarketOptions:()=>Ga,calculatePercentage:()=>Jl,calculateTotalPages:()=>Qa,exportRowsToExcel:()=>or,exportTopPerformingOffers:()=>wa,exportTopProducts:()=>ya,formatDateRange:()=>cn,formatDateRangeLabel:()=>Ns,formatDisplayDate:()=>Lr,formatISODate:()=>$r,formatShortDate:()=>pn,getComparedToText:()=>Dt,getDateRangeLabel:()=>Fr,getDaysFromDateRange:()=>$s,getTranslation:()=>a,getTranslationResolver:()=>rl,getTrendColor:()=>jl,getTrendIcon:()=>et,mockCategories:()=>Ln,mockConversionData:()=>No,mockOrders:()=>Ma,mockProductOfferStats:()=>mo,mockSignupData:()=>Fn,mockSignupDetails:()=>$n,mockStats:()=>On,mockTopOffers:()=>$c,mockTopProducts:()=>Ra,normalizeExcelFileName:()=>Sn,normalizeExcelSheetName:()=>Dn,paginateItems:()=>en,resolveMarketOptions:()=>ja,resolveTranslation:()=>Qe,setTranslationResolver:()=>Ko,sortByNumericProperty:()=>Yl,useProductOfferWidgetExports:()=>Ca,useTranslation:()=>Zp,useTranslationResolver:()=>go});module.exports=Bc(tg);var _n=require(\"react\"),Un=require(\"@nuskin/foundation-ui-components\");var _t=require(\"@nuskin/foundation-theme\"),Vn=(0,_t.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 5px;\n`,En=(0,_t.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`,An=(0,_t.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`,zn=(0,_t.styled)(\"img\")`\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 8px;\n display: block;\n`,Bn=(0,_t.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`,Na=(0,_t.styled)(\"div\")`\n width: 200px;\n text-align: left;\n margin-bottom: 12px;\n @media (max-width: 560px) {\n margin-bottom: 8px;\n }\n`,Hn=(0,_t.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`,Wn=(0,_t.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 Kn=require(\"@mui/material\"),Xe=require(\"react/jsx-runtime\"),Hc=({productTitle:e,imageDetails:t,className:o,button:n,onCardClick:i,productStatusBadge:l,directSellerBadge:s,mySitePriceComponent:d,testId:f})=>{let[h,p]=(0,_n.useState)(!1),b=(0,Kn.useMediaQuery)(\"(max-width: 560px)\"),x=g=>{let k=g.target,R=t?.fallbackImage;R&&k.src!==R&&(k.src=R)};return(0,Xe.jsxs)(En,{className:o,onClick:i,tabIndex:0,\"data-testid\":\"product-card\",isMobile:b,children:[(0,Xe.jsx)(An,{bgColor:t?.bgColor,onError:x,children:t?.imageSrc?(0,Xe.jsx)(Un.NsImage,{\"data-testid\":f??\"test-product-image\",className:t.className??\"\",src:t.imageSrc,alt:t.imageAlt,\"aria-label\":t.areaLabel??t.imageAlt,width:\"100%\"}):(0,Xe.jsx)(zn,{alt:\"\"})}),(0,Xe.jsx)(Bn,{title:e,\"data-testid\":\"product-title\",children:e}),s&&(0,Xe.jsx)(Na,{children:s}),(0,Xe.jsx)(Na,{children:l}),(0,Xe.jsx)(Vn,{children:d}),n?.showButton&&(0,Xe.jsxs)(Hn,{tabIndex:0,\"aria-roledescription\":\":\",\"aria-label\":n.buttonText||\"ADD TO CART\",\"data-testid\":\"add-to-cart-button\",disabled:n?.disabled??!1,isMobile:b,isHovered:h,onClick:g=>{g.stopPropagation(),n?.disabled||n.onClick?.()},onMouseEnter:()=>{!b&&!n?.disabled&&p(!0)},onMouseLeave:()=>{b||p(!1)},children:[(0,Xe.jsx)(Wn,{className:\"cart-icon\",disabled:n?.disabled,children:(0,Xe.jsx)(\"svg\",{width:\"24\",height:\"22\",viewBox:\"0 0 24 22\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,Xe.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\"]})]})},fr=Hc;var Wo=require(\"react\"),ii=L(require(\"react-slick\")),li=L(require(\"@mui/material/useMediaQuery\"));var si=require(\"@nuskin/foundation-ui-components\");var Ke=require(\"@nuskin/foundation-theme\"),bo=L(require(\"@mui/material/Box\")),Gn=require(\"@nuskin/foundation-ui-components\"),jn=(0,Ke.styled)(bo.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`,Yn=(0,Ke.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`,Jn=(0,Ke.styled)(\"div\")`\n display: flex;\n scroll-snap-align: start;\n justify-content: center;\n gap: 15px;\n`,Zn=(0,Ke.styled)(bo.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`,Xn=(0,Ke.styled)(bo.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`,qn=(0,Ke.styled)(bo.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`,Qn=(0,Ke.styled)(bo.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`,gg=(0,Ke.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`,ei=(0,Ke.styled)(Gn.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`,ti=(0,Ke.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`,oi=(0,Ke.styled)(\"div\")`\n padding-top: 20px;\n font-size: 20px;\n text-align: center;\n`,ri=(0,Ke.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,ai=(0,Ke.styled)(\"div\")`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n`,ni=(0,Ke.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 ke=require(\"react/jsx-runtime\");function _o({entries:e,renderEntry:t,settings:o={},showControlButtons:n=!0,allEntryLabel:i=\"View All\",allEntryLink:l=\"\",categoryName:s,emptyProductMessage:d=\"No Products Available For The Selected Category\",productsCountLabel:f=\"Products\",isInitialDataLoading:h,history:p}){let b=(0,Wo.useRef)(null),x=(0,li.default)(\"(max-width: 560px)\"),g=(0,Wo.useCallback)(()=>{b.current?.slickPrev()},[]),k=(0,Wo.useCallback)(()=>{b.current?.slickNext()},[]),R=t??((C,M)=>(0,ke.jsx)(fr,{productTitle:C.productTitle,imageDetails:C.imageDetails,button:C.button,onCardClick:C.onCardClick,productStatusBadge:C.productStatusBadge,directSellerBadge:C.directSeller,mySitePriceComponent:C.mySitePriceComponent},`${C.productTitle}-${M}`)),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}}],...o},u=(e?.length??0)>m.slidesToShow,y=()=>e?.length===0&&!h?(0,ke.jsx)(oi,{children:d}):x?(0,ke.jsx)(Yn,{children:(0,ke.jsx)(Jn,{children:e.map((C,M)=>C&&R(C,M))})}):(0,ke.jsx)(ii.default,{...m,ref:b,children:e.map((C,M)=>C&&R(C,M))});return(0,ke.jsxs)(jn,{children:[n&&(0,ke.jsxs)(Zn,{children:[(0,ke.jsxs)(ri,{children:[(0,ke.jsxs)(ai,{children:[(0,ke.jsx)(qn,{children:(0,ke.jsxs)(ei,{variant:\"body-m\",children:[e?.length??0,\" \",f]})}),!x&&s&&(0,ke.jsx)(ni,{children:s})]}),(0,ke.jsx)(Xn,{$isMobile:x,children:(0,ke.jsx)(ti,{$disabled:(e?.length??0)===0,onClick:C=>{C.preventDefault(),(e?.length??0)>0&&p&&p.push(l)},children:i})})]}),!x&&(0,ke.jsx)(Qn,{$isDisabled:!u,children:(0,ke.jsx)(si.NsCarouselControl,{prev:g,next:k,viewAllLabel:\"\",viewAllUrl:\"\"})})]}),y()]})}var qe=require(\"react\"),Mi=require(\"@mui/material\");var yi=L(require(\"react\")),wi=L(require(\"@mui/material/Tabs\")),Ci=L(require(\"@mui/material/Tab\")),Ia=L(require(\"@mui/material/Box\")),mr=L(hi());var xi=require(\"@nuskin/foundation-theme\"),bi=xi.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 vi=require(\"@mui/material\"),Ut=require(\"react/jsx-runtime\");function ki(e){let{children:t,value:o,index:n,...i}=e;return(0,Ut.jsx)(\"div\",{role:\"tabpanel\",hidden:o!==n,id:`vertical-tabpanel-${n}`,\"aria-labelledby\":`vertical-tab-${n}`,...i,children:o===n&&(0,Ut.jsx)(Ia.default,{className:\"tabPanel\",children:t})})}ki.propTypes={children:mr.default.node,index:mr.default.number.isRequired,value:mr.default.number.isRequired};var hr=({itemArray:e,value:t,onChange:o})=>{let[n,i]=yi.useState(0),l=(0,vi.useMediaQuery)(\"(max-width:768px)\"),s=t??n;return(0,Ut.jsx)(bi,{children:(0,Ut.jsxs)(Ia.default,{className:\"tabContainer\",children:[(0,Ut.jsx)(wi.default,{orientation:l?\"horizontal\":\"vertical\",variant:\"scrollable\",value:s,onChange:(f,h)=>{o?o(f,h):i(h)},\"aria-label\":\"Vertical tabs example\",className:\"tabsStyle\",children:e.map(f=>(0,Ut.jsx)(Ci.default,{label:f.label,className:\"tabStyle\"},f.categoryId))}),e.map(f=>(0,Ut.jsx)(ki,{value:s,index:e.findIndex(h=>h.categoryId===f.categoryId),children:f.content},f.categoryId))]})})};var Oi=require(\"@nuskin/foundation-ui-components\");var lo=require(\"@nuskin/foundation-theme\"),Uc=({isMobile:e,$hasCategories:t})=>e?\"auto\":t?\"800px\":\"auto\",Ti=(0,lo.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: ${Uc};\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`,Si=(0,lo.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`,Di=(0,lo.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`,$g=(0,lo.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`,Pi=(0,lo.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`,Ri=(0,lo.styled)(\"div\")`\n padding: 10px;\n display: flex;\n justify-content: center;\n`;var wt=require(\"react/jsx-runtime\"),Kc=({allEntryLabel:e,allEntryLink:t,renderEntry:o,settings:n,showControlButtons:i=!0,fetchCategories:l,fetchProducts:s,showCustomCategory:d=!1,emptyProductTabs:f=\"No tabs available\",emptyProductMessage:h,productsCountLabel:p,getCategoryId:b,history:x})=>{let g=(0,Mi.useMediaQuery)(\"(max-width:768px)\"),[k,R]=(0,qe.useState)(!0),[m,u]=(0,qe.useState)([]),[y,C]=(0,qe.useState)(!1),[M,V]=(0,qe.useState)(0),[O,A]=(0,qe.useState)([]),[W,X]=(0,qe.useState)(!1),[E,c]=(0,qe.useState)(!0),w=(0,qe.useCallback)(()=>{let F=document.querySelectorAll('[data-testid*=\"spinner\"], .ns-spinner, [class*=\"spinner\"]');c(F.length===0)},[]);(0,qe.useEffect)(()=>{W&&w()},[W,w]),(0,qe.useEffect)(()=>{l().then(F=>{u(F),C(!0)})},[l]),(0,qe.useEffect)(()=>{if(y)if(m.length>0){let F=m[M]?.categoryId;b&&b(F),X(!0),s(F).then(A).finally(()=>{X(!1),R(!1)})}else X(!1)},[m,M,s,y]);let v=m.map(F=>({label:F.label,content:\"\",categoryId:F.categoryId}));return(0,wt.jsxs)(Ti,{isMobile:g,$hasCategories:m.length>0,children:[d&&(v.length>0?(0,wt.jsx)(Si,{isMobile:g,children:(0,wt.jsx)(hr,{itemArray:v,value:M,onChange:(F,T)=>V(T)})}):(0,wt.jsx)(Pi,{children:f})),(0,wt.jsx)(Di,{isMobile:g,children:W?(0,wt.jsx)(Ri,{children:E&&(0,wt.jsx)(Oi.NsSpinner,{})}):(0,wt.jsx)(_o,{isInitialDataLoading:k,entries:O,allEntryLabel:e,allEntryLink:t,renderEntry:o?F=>o({...F,productStatusBadge:F.productStatusBadge}):void 0,settings:n,showControlButtons:i,categoryName:m[M]?.label,emptyProductMessage:h,productsCountLabel:p,history:x})})]})},Fi=Kc;var ht=require(\"react\"),ge=require(\"@mui/material\"),Uo=require(\"@nuskin/foundation-ui-components\");var Ct=require(\"@nuskin/foundation-theme\"),yo=require(\"@mui/material\"),xr=require(\"react/jsx-runtime\"),Va=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"600\",lineHeight:\"16px\",letterSpacing:\"0.12px\",color:e?\"#000000\":\"#FFFFFF\",\"& a\":{color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}}),$i=e=>({fontSize:\"12px\",fontStyle:\"normal\",fontWeight:\"700\",lineHeight:\"16px\",letterSpacing:\"0.48px\",color:e?\"#000000\":\"#FFFFFF\",textTransform:\"uppercase\",paddingLeft:\"5px\"}),Ni=()=>({display:\"flex\",flexDirection:\"row\",gap:\"10px\",alignItems:\"center\"}),Li=e=>({...Va(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\"}}),Gc=e=>({...$i(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\"}}),Ii=(0,Ct.styled)(e=>(0,xr.jsx)(yo.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\":Va(o),\".phone-text\":Va(o),\".social-title-text\":{...$i(o),marginBottom:\"8px\"},\".social-icons\":{...Ni(),paddingBottom:\"8px\"}})),Vi=(0,Ct.styled)(e=>(0,xr.jsx)(yo.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\":Li(o),\".phone-text-mobile\":Li(o),\".social-title-text-mobile\":Gc(o),\".social-icons-mobile\":{...Ni(),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\"}}})),Ei=(0,Ct.styled)(yo.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\"}}),Ea=(0,Ct.styled)(e=>(0,xr.jsx)(yo.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\"}})),Ai=(0,Ct.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)\"}}}),zi=(0,Ct.styled)(yo.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`,Bi=(0,Ct.styled)(\"span\")`\n line-height: 0.5;\n`,Hi=(0,Ct.styled)(\"a\")({fontSize:\"inherit\",fontFamily:\"inherit\",fontWeight:\"inherit\",lineHeight:\"inherit\",letterSpacing:\"inherit\",color:\"inherit\",textDecoration:\"none\",\"&:hover\":{textDecoration:\"underline\"}}),Aa=(0,Ct.styled)(\"span\")({});var Wi=require(\"@mui/material\"),vt=require(\"react/jsx-runtime\"),_i=({width:e,height:t,backgroundColor:o})=>(0,vt.jsx)(Wi.Box,{sx:{width:e,height:t,display:\"flex\",justifyContent:\"center\",alignItems:\"center\",backgroundColor:o},\"data-testid\":\"placeholder-image\",children:(0,vt.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"128\",height:\"129\",viewBox:\"0 0 128 129\",fill:\"none\",children:(0,vt.jsxs)(\"g\",{id:\"ns_logomark\",children:[(0,vt.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,vt.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,vt.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,vt.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,vt.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 za=require(\"react/jsx-runtime\"),Ui=({width:e=16,height:t=16,className:o=\"\"})=>(0,za.jsx)(\"svg\",{width:e,height:t,viewBox:\"0 0 24 24\",fill:\"currentColor\",className:o,\"data-testid\":\"arrow-down-icon\",children:(0,za.jsx)(\"path\",{d:\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"})});function br(e){if(typeof window>\"u\")return;let t=window.location.href,o={...e},n=t.includes(\"personal-offer\")?\"postorefront_\":\"mysite_\";o.event=n+e.event;try{window.dataLayer||(console.error(\"GTM dataLayer not available, but event logged\"),window.dataLayer=[]),window.dataLayer.push(o)}catch(i){console.error(\"Failed to track GTM event:\",i)}}var _=require(\"react/jsx-runtime\"),Ki=(e,t,o)=>{let n=o.includes(\"mobile\")?\"placeholder-image-mobile\":\"placeholder-image\";return e?.imageSrc?(0,_.jsx)(Bi,{tabIndex:0,children:(0,_.jsx)(Uo.NsImage,{className:o,src:e.imageSrc,alt:e.imageAlt})}):(0,_.jsx)(ge.Box,{className:n,children:(0,_.jsx)(_i,{width:o.includes(\"mobile\")?\"144px\":\"246px\",height:o.includes(\"mobile\")?\"144px\":\"246px\",backgroundColor:t?.backgroundColor??\"#5F5F5F\"})})},Gi=(e,t,o,n,i)=>{if(!e||!t&&!i)return null;let l=o?\"mobile-badge\":\"tablet-badge\";return(0,_.jsxs)(Ei,{className:o?\"mobile-badges\":\"tablet-badges\",children:[i&&(0,_.jsx)(Ea,{className:`${l} total-savings-badge`,hasWhiteBackground:n,tabIndex:0,children:(0,_.jsx)(Aa,{className:\"badge-value\",children:i})}),t&&(0,_.jsx)(Ea,{className:`${l} expiration-badge`,hasWhiteBackground:n,tabIndex:0,children:(0,_.jsx)(Aa,{className:\"badge-value\",children:t})})]})},jc=(e,t,o,n,i)=>{let{shopTitle:l,socialTitleText:s,email:d,showBadges:f,expirationDate:h,phone:p,totalSavings:b}=e;return(0,_.jsxs)(ge.Box,{className:\"content-mobile\",children:[(0,_.jsx)(ge.Typography,{component:\"h1\",tabIndex:l?.trim()?0:-1,className:\"body-title-mobile\",children:l}),!t&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(ge.Typography,{tabIndex:s?.trim()?0:-1,className:\"social-title-text-mobile\",children:s}),d?.trim()&&yr(\"email\",d,\"email-text-mobile\"),p?.trim()&&yr(\"phone\",p,\"phone-text-mobile\"),(0,_.jsx)(ge.Box,{className:\"social-icons-mobile\",children:o}),Gi(f,h??\"\",n,i,b)]})]})},Yc=(e,t,o,n,i)=>{let{shopTitle:l,shopDescription:s,socialTitleText:d,email:f,phone:h,showBadges:p,expirationDate:b,totalSavings:x}=e;return(0,_.jsxs)(ge.Box,{className:\"content\",children:[(0,_.jsx)(ge.Typography,{component:\"h1\",tabIndex:l?.trim()?0:-1,className:\"body-title\",children:l}),!t&&(0,_.jsxs)(_.Fragment,{children:[s?.length>480?(0,_.jsx)(ge.Tooltip,{title:s,arrow:!0,children:(0,_.jsx)(ge.Typography,{tabIndex:s?.trim()?0:-1,className:\"body-text\",children:s})}):(0,_.jsx)(ge.Typography,{tabIndex:s?.trim()?0:-1,className:\"body-text\",children:s}),(0,_.jsxs)(ge.Box,{className:\"social-media\",children:[(0,_.jsx)(ge.Typography,{tabIndex:d?.trim()?0:-1,className:\"social-title-text\",children:d}),(0,_.jsxs)(ge.Box,{className:\"social-icons\",children:[o,f?.trim()&&yr(\"email\",f,\"email-text\"),h?.trim()&&yr(\"phone\",h,\"phone-text\")]})]}),Gi(p,b??\"\",n,i,x)]})]})},Jc=e=>new Promise((t,o)=>{let n=new Image;n.crossOrigin=\"anonymous\",n.src=e,n.onload=()=>{let i=document.createElement(\"canvas\"),l=i.getContext(\"2d\");if(!l)return o(new Error(\"Canvas not supported\"));i.width=n.width,i.height=n.height,l.drawImage(n,0,0);let d=[l.getImageData(0,0,1,1).data,l.getImageData(n.width-1,0,1,1).data,l.getImageData(0,n.height-1,1,1).data,l.getImageData(n.width-1,n.height-1,1,1).data].every(f=>Array.prototype.slice.call(f)[3]<10);t(d)},n.onerror=()=>o(new Error(\"Failed to load image\"))}),Zc=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 n=Number.parseInt(o.substring(0,2),16),i=Number.parseInt(o.substring(2,4),16),l=Number.parseInt(o.substring(4,6),16),s=220;return n>=s&&i>=s&&l>=s},Xc=(e,t)=>({onClick:()=>{br({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`})},onKeyDown:o=>{(o.key===\"Enter\"||o.key===\" \")&&(o.preventDefault(),br({event:\"contact_click\",contact_type:e,contact_value:t,click_element:`${e}_link`}),globalThis.location.href=`${e===\"email\"?\"mailto\":\"tel\"}:${t}`)}}),yr=(e,t,o)=>{let n=e===\"email\"?\"mailto:\":\"tel:\",i=Xc(e,t);return(0,_.jsx)(ge.Typography,{className:o,children:(0,_.jsx)(Hi,{href:`${n}${t}`,...i,children:t})})};function Ba({className:e,shopTitle:t,shopDescription:o,socialTitleText:n,imageDetails:i,email:l,phone:s,bannerProps:d,socialIcons:f,expirationDate:h,showBadges:p=!1,totalSavings:b}){let x=(0,ge.useMediaQuery)(\"(max-width: 560px)\"),[g,k]=(0,ht.useState)(!1),[R,m]=(0,ht.useState)(!1),[u,y]=(0,ht.useState)(!1),[C,M]=(0,ht.useState)(!1),V=()=>{m(!R)};(0,ht.useEffect)(()=>{(async()=>{if(i?.imageSrc){let w=await Jc(i.imageSrc);M(w)}else M(!1)})()},[i?.imageSrc]),(0,ht.useEffect)(()=>{y(Zc(d?.backgroundColor))},[d?.backgroundColor]),(0,ht.useEffect)(()=>{let c,w=window.scrollY,v=!1,F=!1,T=0,B=J=>{let Ue=Date.now();if(v!==J&&!F){if(Ue-T<100)return;F=!0,v=J,T=Ue,J&&m(!1),clearTimeout(c),k(J),c=setTimeout(()=>{F=!1,J&&window.scrollY<15&&window.scrollTo({top:x?20:30,behavior:\"smooth\"})},300)}},pe=()=>{let J=window.scrollY;if(F){w=J;return}if(Math.abs(J-w)<.5)return;let zt=J>w,it=x?15:25,Io=x?8:12;zt&&J>it&&!v?B(!0):!zt&&J<Io&&v&&B(!1),w=J},P=()=>{let J=window.scrollY,zt=J>(x?5:10);v=zt,k(zt),w=J,T=Date.now()},Q=null,oe=0,Ze=()=>{Q||Date.now()-oe<16||(Q=requestAnimationFrame(()=>{pe(),oe=Date.now(),Q=null}))};return P(),window.addEventListener(\"scroll\",Ze,{passive:!0}),()=>{window.removeEventListener(\"scroll\",Ze),Q&&cancelAnimationFrame(Q),clearTimeout(c)}},[x]);let O=(0,ht.useMemo)(()=>f?.map((c,w)=>(0,_.jsx)(zi,{onClick:F=>{F.preventDefault(),br({event:\"social_click\",social_platform:c.type,social_url:c.url,click_element:\"social_icon\"}),window.open(c.url,\"_blank\")},children:(0,_.jsx)(Uo.NsLink,{href:c.url,target:\"_blank\",children:(0,_.jsx)(Uo.NsImage,{src:`https://www.google.com/s2/favicons?domain=${c?.url}&sz=24`,alt:`${c.type} icon`,width:\"24\",height:\"24\"},c?.type+w)})},c?.type+w)),[f]),A=`${e} ${g?\"scrolled\":\"\"}`,W={shopTitle:t,shopDescription:o,socialTitleText:n,email:l,phone:s,showBadges:p,expirationDate:h,totalSavings:b},X=()=>window.innerWidth<=380?50:window.innerWidth<=415?56:window.innerWidth<=460?62:80,E=x&&o&&o.length>X();return x?(0,_.jsxs)(Vi,{className:A,\"data-testid\":\"my-site-shop-header\",bannerProps:d,isCircularImage:C,hasWhiteBackground:u,children:[(0,_.jsxs)(ge.Box,{className:\"image-content-mobile\",children:[Ki(i,d??{},\"bg-image-mobile\"),jc(W,g,O,x,u)]}),!g&&(0,_.jsxs)(ge.Box,{className:\"expandable-description-mobile\",children:[(0,_.jsx)(ge.Typography,{className:`description-content-mobile ${R||!E?\"expanded\":\"collapsed\"}`,children:o}),E&&(0,_.jsx)(Ai,{onClick:V,children:(0,_.jsx)(Ui,{width:16,height:16,className:`arrow-icon-mobile ${R?\"expanded\":\"\"}`})})]})]}):(0,_.jsxs)(Ii,{className:A,\"data-testid\":\"my-site-shop-header\",bannerProps:d,isCircularImage:C,hasWhiteBackground:u,children:[Ki(i,d??{},\"bg-image\"),Yc(W,g,O,x,u)]})}var wo=require(\"@nuskin/foundation-theme\"),Ha=(0,wo.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 16px;\n\n @media (min-width: 768px) {\n gap: 24px;\n padding: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n padding: 24px;\n }\n`,ji=(0,wo.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`,Yi=(0,wo.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`,Wa=(0,wo.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`,Ji=(0,wo.styled)(\"div\")`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;var nl=L(require(\"@mui/icons-material/CalendarMonth\")),il=L(require(\"@mui/icons-material/Language\")),ll=require(\"@nuskin/foundation-ui-components\");var Ge=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Zt}=Ge.ColorUtils,Zi=(0,Ge.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 16px;\n background-color: ${({theme:e})=>Zt(e,\"N20\")};\n border-radius: 12px;\n min-height: auto;\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: 16px 20px;\n gap: 16px;\n }\n\n @media (min-width: 1080px) {\n padding: 16px 24px;\n gap: 20px;\n }\n`,Xi=(0,Ge.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n gap: 12px;\n flex-wrap: wrap;\n`,qi=(0,Ge.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({theme:e})=>Zt(e,\"N100\")};\n margin: 0;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n\n @media (min-width: 1080px) {\n font-size: 16px;\n }\n`,Qi=(0,Ge.styled)(\"div\")`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({theme:e})=>Zt(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`,el=(0,Ge.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 24px;\n width: 100%;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`,_a=(0,Ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n`,Ua=(0,Ge.styled)(\"label\")`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: 0 !important;\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n`,xt=(0,Ge.styled)(\"select\")`\n min-width: 120px;\n height: 32px;\n padding: 6px 24px 6px 8px;\n background-color: transparent;\n border: none;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: ${({theme:e})=>Zt(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 white-space: nowrap;\n flex-shrink: 0;\n\n &:hover {\n background-color: ${({theme:e})=>Zt(e,\"N20\")};\n border-radius: 4px;\n }\n\n &:focus {\n background-color: ${({theme:e})=>Zt(e,\"N20\")};\n border-radius: 4px;\n outline: 2px solid ${({theme:e})=>Zt(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 background-position: right 8px center;\n }\n`,Ka=(0,Ge.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({theme:e})=>Zt(e,\"N70\")};\n\n svg {\n font-size: 16px;\n width: 16px;\n height: 16px;\n }\n`,tl=(0,Ge.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`,ol=(0,Ge.styled)(\"div\")`\n display: flex;\n flex-wrap: nowrap;\n gap: 24px;\n align-items: center;\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`,nf=(0,Ge.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n`;var wr;function Ko(e){wr=e}function rl(){return wr}function Qe(e){if(!wr)return e.fallback;let t;try{t=wr(e.key,e.fallback)}catch{t=void 0}return typeof t==\"string\"&&t.length>0?t:e.fallback}var r={title:{key:\"shoppingDashboard.title\",fallback:\"Shop Performance\"},error:{key:\"shoppingDashboard.error\",fallback:\"Error loading dashboard\"},stats:{revenue:{key:\"shoppingDashboard.stats.revenue\",fallback:\"Total Revenue\"},visits:{key:\"shoppingDashboard.stats.visits\",fallback:\"Site Visits\"},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\"}},market:{label:{key:\"shoppingDashboard.filter.market.label\",fallback:\"Market\"},all:{key:\"shoppingDashboard.filter.market.all\",fallback:\"All Markets\"}},productSort:{label:{key:\"shoppingDashboard.filter.productSort.label\",fallback:\"Sort By\"}},signupView:{label:{key:\"shoppingDashboard.filter.signupView.label\",fallback:\"Show\"},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:{retail:{key:\"shoppingDashboard.filter.conversionType.retail\",fallback:\"Retail\"},member:{key:\"shoppingDashboard.filter.conversionType.member\",fallback:\"Member\"}}},widget:{topProducts:{title:{key:\"shoppingDashboard.widget.topProducts.title\",fallback:\"Top Selling Products\"},viewAll:{key:\"shoppingDashboard.widget.topProducts.viewAll\",fallback:\"View All Products\"},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\"},rank:{key:\"shoppingDashboard.widget.topProducts.rank\",fallback:\"Rank\"}},conversionRate:{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\"},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\"},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\"},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.\"}},compareTo:{last7days:{key:\"shoppingDashboard.widget.compareTo.last7days\",fallback:\"compared to this time 7 days ago\"},last30days:{key:\"shoppingDashboard.widget.compareTo.last30days\",fallback:\"compared to this time last month\"},last90days:{key:\"shoppingDashboard.widget.compareTo.last90days\",fallback:\"compared to this time 90 days ago\"},thisMonth:{key:\"shoppingDashboard.widget.compareTo.thisMonth\",fallback:\"compared to this time last month\"}},topCategories:{title:{key:\"shoppingDashboard.widget.topCategories.title\",fallback:\"Top Categories\"},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\"},viewDetails:{key:\"shoppingDashboard.widget.menu.viewDetails\",fallback:\"View Details\"},exportData:{key:\"shoppingDashboard.widget.menu.exportData\",fallback:\"Export Data\"}}},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\"},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\"},customer:{key:\"shoppingDashboard.fullView.conversionRate.columns.customer\",fallback:\"Customer\"},items:{key:\"shoppingDashboard.fullView.conversionRate.columns.items\",fallback:\"Items\"},total:{key:\"shoppingDashboard.fullView.conversionRate.columns.total\",fallback:\"Order Total\"},bv:{key:\"shoppingDashboard.fullView.conversionRate.columns.bv\",fallback:\"BV\"},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\"},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\"},percentOfTotal:{key:\"shoppingDashboard.fullView.categories.columns.percentOfTotal\",fallback:\"% of Total\"}},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:\"--\"},noData:{key:\"shoppingDashboard.defaults.noData\",fallback:\"No data\"},noChange:{key:\"shoppingDashboard.defaults.noChange\",fallback:\"No change\"},byRevenue:{key:\"shoppingDashboard.defaults.byRevenue\",fallback:\"By: Revenue\"},byUnits:{key:\"shoppingDashboard.defaults.byUnits\",fallback:\"By: Units\"},byVolume:{key:\"shoppingDashboard.defaults.byVolume\",fallback:\"By: Volume\"},byTrend:{key:\"shoppingDashboard.defaults.byTrend\",fallback:\"By: Trend\"},all:{key:\"shoppingDashboard.defaults.all\",fallback:\"All\"},members:{key:\"shoppingDashboard.defaults.members\",fallback:\"Members\"},retail:{key:\"shoppingDashboard.defaults.retail\",fallback:\"Retail\"},brandAffiliates:{key:\"shoppingDashboard.defaults.brandAffiliates\",fallback:\"Brand Affiliates\"},revenue:{key:\"shoppingDashboard.defaults.revenue\",fallback:\"Revenue\"},units:{key:\"shoppingDashboard.defaults.units\",fallback:\"Units\"},volume:{key:\"shoppingDashboard.defaults.volume\",fallback:\"Volume\"},conversionRate:{key:\"shoppingDashboard.defaults.conversionRate\",fallback:\"Conversion Rate\"},trend:{key:\"shoppingDashboard.defaults.trend\",fallback:\"Trend\"},date:{key:\"shoppingDashboard.defaults.date\",fallback:\"Date\"},type:{key:\"shoppingDashboard.defaults.type\",fallback:\"Type\"},dcSv:{key:\"shoppingDashboard.defaults.dcSv\",fallback:\"DC-SV\"}}};function a(e){return Qe(e)}var al=require(\"react\");function Ga(){return[{value:\"all\",label:a(r.filter.market.all)}]}function ja(e){return e&&e.length>0?e:Ga()}function lt(e){return(0,al.useMemo)(()=>ja(e),[e])}var se=require(\"react/jsx-runtime\"),Co=({shopTitle:e,dateRange:t,market:o,dateRangeLabel:n,isLoading:i=!1,stats:l,markets:s,onDateRangeChange:d,onMarketChange:f})=>{let h=lt(s),p=k=>{let R=k.target.value;d?.(R)},b=k=>{let R=k.target.value;f?.(R)},x=k=>{k.key===\"Escape\"&&k.target.blur()},g=()=>n||(l?.dateRange?l.dateRange.label:a(r.filter.dateRange.last30days));return(0,se.jsxs)(Zi,{as:\"header\",\"data-testid\":\"dashboard-header\",children:[(0,se.jsxs)(Xi,{children:[(0,se.jsx)(qi,{\"data-testid\":\"dashboard-shop-title\",children:e??l?.shopTitle??a(r.title)}),(0,se.jsx)(Qi,{\"aria-live\":\"polite\",\"data-testid\":\"dashboard-date-range-label\",children:g()})]}),(0,se.jsx)(el,{\"aria-label\":a(r.ariaLabel.dashboardFilters),\"data-testid\":\"dashboard-filters-section\",children:(0,se.jsxs)(ol,{children:[i&&(0,se.jsx)(tl,{as:\"output\",\"aria-live\":\"polite\",\"aria-label\":a(r.ariaLabel.loadingDashboard),\"data-testid\":\"dashboard-loading-indicator\",children:(0,se.jsx)(ll.NsSpinner,{})}),(0,se.jsxs)(_a,{children:[(0,se.jsx)(Ua,{htmlFor:\"filter-date-range\",children:a(r.filter.dateRange.label)}),(0,se.jsx)(Ka,{\"aria-hidden\":\"true\",children:(0,se.jsx)(nl.default,{})}),(0,se.jsxs)(xt,{id:\"filter-date-range\",\"data-testid\":\"filter-date-range\",value:t,onChange:p,onKeyDown:x,disabled:i,\"aria-label\":`${a(r.ariaLabel.dateRangeFilter)} ${a(r.filter.dateRange[t])}`,children:[(0,se.jsx)(\"option\",{value:\"last7days\",children:a(r.filter.dateRange.last7days)}),(0,se.jsx)(\"option\",{value:\"last30days\",children:a(r.filter.dateRange.last30days)}),(0,se.jsx)(\"option\",{value:\"last90days\",children:a(r.filter.dateRange.last90days)}),(0,se.jsx)(\"option\",{value:\"thisMonth\",children:a(r.filter.dateRange.thisMonth)})]})]}),(0,se.jsxs)(_a,{children:[(0,se.jsx)(Ua,{htmlFor:\"filter-market\",children:a(r.filter.market.label)}),(0,se.jsx)(Ka,{\"aria-hidden\":\"true\",children:(0,se.jsx)(il.default,{})}),(0,se.jsx)(xt,{id:\"filter-market\",\"data-testid\":\"filter-market\",value:o,onChange:b,onKeyDown:x,disabled:i,\"aria-label\":`${a(r.ariaLabel.marketFilter)} ${h.find(k=>k.value===o)?.label??String(o)}`,children:h.map(k=>(0,se.jsx)(\"option\",{value:k.value,children:k.label},k.value))})]})]})})]})};var Bl=L(require(\"react\")),Hl=L(require(\"@mui/icons-material/ShowChart\")),Wl=L(require(\"@mui/icons-material/TrendingUp\")),_l=L(require(\"@mui/icons-material/TrendingDown\"));var Te=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Kt}=Te.ColorUtils,Cr=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n box-sizing: border-box;\n gap: ${({$layout:e})=>e===\"split\"?\"8px\":\"0\"};\n padding: ${({$layout:e})=>e===\"split\"?\"12px\":\"10px\"};\n background-color: ${({theme:e})=>Kt(e,\"N20\")};\n border: 1px solid ${({theme:e})=>Kt(e,\"N30\")};\n border-radius: 8px;\n min-height: ${({$layout:e})=>e===\"split\"?\"110px\":\"auto\"};\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\"?\"16px\":\"12px\"};\n min-height: ${({$layout:e})=>e===\"split\"?\"110px\":\"auto\"};\n }\n\n @media (min-width: 1080px) {\n padding: ${({$layout:e})=>e===\"split\"?\"16px\":\"14px\"};\n min-height: ${({$layout:e})=>e===\"split\"?\"110px\":\"auto\"};\n }\n`,sl=(0,Te.styled)(\"div\")`\n width: 100%;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>Kt(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n`,dl=(0,Te.styled)(\"div\")`\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n`,pl=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n gap: 2px;\n`,cl=(0,Te.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\":Kt(e,\"N70\")};\n\n svg {\n width: 24px;\n height: 24px;\n }\n`,ul=(0,Te.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})=>Kt(e,\"N70\")};\n`,gl=(0,Te.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.2;\n letter-spacing: 0;\n color: ${({theme:e})=>Kt(e,\"N100\")};\n margin-bottom: 2px;\n text-transform: capitalize;\n\n @media (min-width: 768px) {\n font-size: 14px;\n margin-bottom: 4px;\n }\n\n @media (min-width: 1080px) {\n font-size: 14px;\n }\n`,fl=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n justify-content: space-between;\n gap: 2px;\n margin-top: 10px;\n width: 100%;\n`,Ya=(0,Te.styled)(\"div\")`\n font-size: 20px;\n font-weight: 700;\n line-height: 1;\n color: ${({theme:e})=>Kt(e,\"N100\")};\n\n @media (min-width: 768px) {\n font-size: 24px;\n }\n\n @media (min-width: 1080px) {\n font-size: 28px;\n }\n`,ml=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n`,hl=(0,Te.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n color: ${({theme:e})=>Kt(e,\"N70\")};\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`,xl=(0,Te.styled)(\"div\")`\n display: flex;\n flex-direction: row;\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\":Kt(e,\"N70\")};\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n @media (min-width: 768px) {\n font-size: 14px;\n\n svg {\n width: 18px;\n height: 18px;\n }\n }\n`,xf=(0,Te.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n`,Ja=(0,Te.styled)(\"span\")`\n white-space: nowrap;\n`,bl=(0,Te.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;var ae=L(require(\"@mui/material/Skeleton\"));var ee=require(\"@nuskin/foundation-theme\"),vo=L(require(\"@mui/material/Skeleton\")),vr=(0,ee.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`,kr=(0,ee.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`,yl=(0,ee.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`,wl=(0,ee.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`,Cl=(0,ee.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`,vl=(0,ee.styled)(\"div\")`\n margin-top: 8px;\n`,kl=(0,ee.styled)(vo.default)`\n margin-top: 4px;\n`,Tl=(0,ee.styled)(\"div\")`\n flex: 1;\n min-width: 0;\n`,Sl=(0,ee.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n`,Dl=(0,ee.styled)(\"div\")`\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 16px;\n`,Pl=(0,ee.styled)(\"div\")`\n padding-top: 4px;\n`,Rl=(0,ee.styled)(vo.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`,Ml=(0,ee.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`,Ol=(0,ee.styled)(vo.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`,Fl=(0,ee.styled)(\"div\")`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n`,Ll=(0,ee.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n`,$l=(0,ee.styled)(\"div\")`\n flex: 1;\n`,qc=(0,ee.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`,Qc=(0,ee.styled)(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n`,eu=(0,ee.styled)(\"div\")`\n display: flex;\n gap: 16px;\n`,tu=(0,ee.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`,ou=(0,ee.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`,Za=(0,ee.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 24px;\n`,Nl=(0,ee.styled)(\"div\")`\n padding: 24px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n`,Il=(0,ee.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 16px 0;\n gap: 8px;\n`,Vl=(0,ee.styled)(vo.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`,Xa=(0,ee.styled)(\"div\")`\n padding: 20px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n`,Tr=(0,ee.styled)(vo.default)`\n border-radius: 4px;\n`,El=(0,ee.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 S=require(\"react/jsx-runtime\"),Go=()=>(0,S.jsxs)(wl,{\"data-testid\":\"skeleton-stats-card\",children:[(0,S.jsxs)(Cl,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:80,height:18}),(0,S.jsx)(ae.default,{variant:\"text\",width:48,height:16})]}),(0,S.jsxs)(vl,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:120,height:36}),(0,S.jsx)(kl,{variant:\"text\",width:100,height:16})]})]}),ru=()=>(0,S.jsxs)(yl,{children:[(0,S.jsx)(ae.default,{variant:\"rounded\",width:28,height:28}),(0,S.jsx)(ae.default,{variant:\"rounded\",width:50,height:50}),(0,S.jsxs)(Tl,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:\"70%\",height:18}),(0,S.jsx)(ae.default,{variant:\"text\",width:\"50%\",height:14})]}),(0,S.jsxs)(Sl,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:80,height:18}),(0,S.jsx)(ae.default,{variant:\"text\",width:48,height:14})]})]}),Al=()=>(0,S.jsxs)(vr,{\"data-testid\":\"skeleton-products-list\",children:[(0,S.jsxs)(kr,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:160,height:22}),(0,S.jsx)(ae.default,{variant:\"rounded\",width:100,height:32})]}),[\"product-1\",\"product-2\",\"product-3\",\"product-4\",\"product-5\"].map(e=>(0,S.jsx)(ru,{},e))]}),Sr=()=>(0,S.jsxs)(vr,{\"data-testid\":\"skeleton-chart-widget\",children:[(0,S.jsxs)(kr,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:140,height:22}),(0,S.jsx)(ae.default,{variant:\"rounded\",width:110,height:32})]}),(0,S.jsxs)(Dl,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:100,height:36}),(0,S.jsxs)(Pl,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:60,height:18}),(0,S.jsx)(ae.default,{variant:\"text\",width:140,height:14})]})]}),(0,S.jsx)(Rl,{variant:\"rounded\",width:\"100%\"})]}),au=()=>(0,S.jsxs)(Ll,{children:[(0,S.jsx)(ae.default,{variant:\"circular\",width:12,height:12}),(0,S.jsxs)($l,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:\"60%\",height:16}),(0,S.jsx)(ae.default,{variant:\"text\",width:\"40%\",height:14})]}),(0,S.jsx)(ae.default,{variant:\"text\",width:36,height:18})]}),Dr=()=>(0,S.jsxs)(vr,{\"data-testid\":\"skeleton-categories-pie\",children:[(0,S.jsxs)(kr,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:140,height:22}),(0,S.jsx)(ae.default,{variant:\"rounded\",width:100,height:32})]}),(0,S.jsxs)(Ml,{children:[(0,S.jsx)(Ol,{variant:\"circular\"}),(0,S.jsx)(Fl,{children:[\"legend-1\",\"legend-2\",\"legend-3\",\"legend-4\",\"legend-5\"].map(e=>(0,S.jsx)(au,{},e))})]})]});var Xt=()=>(0,S.jsxs)(Za,{\"data-testid\":\"skeleton-fullview-chart\",children:[(0,S.jsxs)(Nl,{children:[(0,S.jsxs)(Il,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:140,height:52}),(0,S.jsx)(ae.default,{variant:\"text\",width:80,height:24}),(0,S.jsx)(ae.default,{variant:\"text\",width:160,height:16})]}),(0,S.jsx)(Vl,{variant:\"rounded\",width:\"100%\"})]}),(0,S.jsxs)(Xa,{children:[(0,S.jsx)(ae.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,S.jsx)(Tr,{variant:\"rounded\",width:\"100%\",height:44},e))]})]}),zl=()=>(0,S.jsxs)(Za,{\"data-testid\":\"skeleton-fullview-table\",children:[(0,S.jsxs)(El,{children:[(0,S.jsx)(Go,{}),(0,S.jsx)(Go,{}),(0,S.jsx)(Go,{})]}),(0,S.jsxs)(Xa,{children:[(0,S.jsx)(ae.default,{variant:\"text\",width:200,height:24}),(0,S.jsx)(Tr,{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,S.jsx)(Tr,{variant:\"rounded\",width:\"100%\",height:44},e))]})]});var ce=require(\"react/jsx-runtime\"),nu=({title:e,value:t,subtitle:o,caption:n,layout:i=\"default\",trendDirection:l=\"neutral\",trendValue:s,testId:d,isLoading:f=!1})=>{if(f)return(0,ce.jsx)(Cr,{$layout:i,\"data-testid\":d,children:(0,ce.jsx)(Go,{})});let h=()=>{let b=a(r.stats.trend.unchanged);return l===\"up\"?b=a(r.stats.trend.increased):l===\"down\"&&(b=a(r.stats.trend.decreased)),`${e} ${b} ${s??\"\"}`},p=b=>l===\"up\"?(0,ce.jsx)(Wl.default,{sx:{fontSize:b},\"aria-hidden\":\"true\"}):l===\"down\"?(0,ce.jsx)(_l.default,{sx:{fontSize:b},\"aria-hidden\":\"true\"}):(0,ce.jsx)(Hl.default,{sx:{fontSize:b},\"aria-hidden\":\"true\"});return i===\"split\"?(0,ce.jsxs)(Cr,{as:\"article\",$layout:\"split\",\"aria-label\":`${e}: ${t}`,\"data-testid\":d,children:[(0,ce.jsx)(sl,{id:`stats-title-${d}`,children:e}),(0,ce.jsxs)(dl,{children:[(0,ce.jsx)(Ya,{\"aria-describedby\":`stats-title-${d}`,\"data-testid\":`stats-value-${d}`,children:t}),(s??n)&&(0,ce.jsxs)(pl,{children:[s&&(0,ce.jsxs)(cl,{as:\"output\",direction:l,\"aria-live\":\"polite\",\"aria-label\":h(),\"data-testid\":`stats-trend-${d}`,children:[p(\"18px\"),(0,ce.jsx)(Ja,{children:s})]}),n&&(0,ce.jsx)(ul,{\"data-testid\":`stats-caption-${d}`,children:n})]})]})]}):(0,ce.jsxs)(Cr,{as:\"article\",\"aria-label\":`${e}: ${t}`,\"data-testid\":d,children:[(0,ce.jsx)(bl,{children:(0,ce.jsx)(gl,{id:`stats-title-${d}`,children:e})}),(0,ce.jsxs)(fl,{children:[(0,ce.jsxs)(ml,{children:[(0,ce.jsx)(Ya,{\"aria-describedby\":`stats-title-${d}`,\"data-testid\":`stats-value-${d}`,children:t}),o&&(0,ce.jsx)(hl,{\"aria-label\":`${e} ${a(r.stats.details)}: ${o}`,\"data-testid\":`stats-subtitle-${d}`,children:o})]}),s&&(0,ce.jsxs)(xl,{as:\"output\",direction:l,\"aria-live\":\"polite\",\"aria-label\":h(),\"data-testid\":`stats-trend-${d}`,children:[p(\"16px\"),(0,ce.jsx)(Ja,{children:s})]})]})]})},kt=Bl.default.memo(nu);kt.displayName=\"StatsCard\";var bs=L(require(\"react\")),ys=L(require(\"@mui/icons-material/ShoppingCart\"));var Ul=L(require(\"@mui/icons-material/ShowChart\")),Kl=L(require(\"@mui/icons-material/TrendingUp\")),Gl=L(require(\"@mui/icons-material/TrendingDown\"));var jo=require(\"react/jsx-runtime\");function Pr(e){if(!e)return null;let t=e.replace(\"%\",\"\").trim(),o=Number(t);return Number.isFinite(o)?o:null}function Tt(e){let t=Pr(e);return t===null?\"neutral\":t>0?\"up\":t<0?\"down\":\"neutral\"}function qt(e,t,o){let{weightedSum:n,weight:i}=e.reduce((d,f)=>{let h=Pr(o(f));return h===null?d:{weightedSum:d.weightedSum+h*t(f),weight:d.weight+t(f)}},{weightedSum:0,weight:0}),l=i>0?n/i:0,s=\"neutral\";return l>0?s=\"up\":l<0&&(s=\"down\"),{direction:s,formatted:`${l>0?\"+\":\"\"}${l.toFixed(1)}%`}}function ko(e){return e===\"up\"?a(r.stats.trend.increased):e===\"down\"?a(r.stats.trend.decreased):a(r.stats.trend.unchanged)}function et(e){switch(e){case\"up\":return(0,jo.jsx)(Kl.default,{});case\"down\":return(0,jo.jsx)(Gl.default,{});case\"neutral\":default:return(0,jo.jsx)(Ul.default,{})}}function jl(e){switch(e){case\"up\":return\"#4caf50\";case\"down\":return\"#f44336\";case\"neutral\":default:return\"#757575\"}}function Rr(e,t){let{cx:o,cy:n,midAngle:i,innerRadius:l,outerRadius:s,percentage:d}=e,f=Math.PI/180,h=l+(s-l)/2,p=o+h*Math.cos(-i*f),b=n+h*Math.sin(-i*f);return(0,jo.jsx)(\"text\",{x:p,y:b,fill:\"white\",textAnchor:\"middle\",dominantBaseline:\"middle\",fontSize:t?.fontSize??\"10\",fontWeight:t?.fontWeight??\"600\",fontFamily:\"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",letterSpacing:\"0.2\",children:`${d}%`})}var qa=require(\"react\");function Qa(e,t){return Math.ceil(e.length/t)}function en(e,t,o){let n=(t-1)*o,i=n+o;return e.slice(n,i)}function Yl(e,t,o=\"desc\"){return[...e].sort((n,i)=>{let l=n[t],s=i[t];return o===\"asc\"?l-s:s-l})}function Jl(e,t,o=1){return t===0?\"0.0\":(e/t*100).toFixed(o)}function St(e,t,o){let n=(0,qa.useMemo)(()=>Qa(e,o),[e,o]),i=(0,qa.useMemo)(()=>en(e,t,o),[e,t,o]);return{totalPages:n,pageItems:i}}function at(e){switch(e){case\"IN\":return\"en-IN\";case\"CA\":return\"en-CA\";case\"US\":default:return\"en-US\"}}function te(e,t,o=\"en-US\",n){let i=Number.isFinite(e)?e:0;if(t)try{return new Intl.NumberFormat(o,{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()}`}function Yo(e){return!e||e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function Qt(e,t){switch(t){case\"members\":return e.members;case\"retail\":return e.retail;case\"brandAffiliates\":return e.brandAffiliates;case\"all\":default:return e.total}}var he=require(\"@nuskin/foundation-theme\"),{getGenomeColor:ue}=he.ColorUtils,Mr=(0,he.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>ue(e,\"N20\")};\n border: 1px solid ${({theme:e})=>ue(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`,tn=(0,he.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Zl=(0,he.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,on=(0,he.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\n color: ${({theme:e})=>ue(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})=>ue(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,Mf=(0,he.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>ue(e,\"N20\")};\n border: 1px solid ${({theme:e})=>ue(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>ue(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>ue(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>ue(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>ue(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,Xl=(0,he.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`,ql=(0,he.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background-color: ${({theme:e})=>ue(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})=>ue(e,\"N40\")};\n }\n\n &:hover {\n background-color: ${({theme:e})=>ue(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`,Ql=(0,he.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})=>ue(e,\"A10\")};\n color: ${({theme:e})=>ue(e,\"A80\")};\n border-radius: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n vertical-align: middle;\n\n @media (min-width: 768px) {\n min-width: 28px;\n height: 28px;\n font-size: 16px;\n }\n`,es=(0,he.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`,ts=(0,he.styled)(\"div\")`\n width: 40px;\n height: 40px;\n border-radius: 8px;\n background-color: ${({theme:e})=>ue(e,\"N40\")};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: ${({theme:e})=>ue(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`,os=(0,he.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex-grow: 1;\n min-width: 0;\n`,rs=(0,he.styled)(\"div\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({theme:e})=>ue(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: 16px;\n max-width: none;\n }\n`,as=(0,he.styled)(\"div\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>ue(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`,ns=(0,he.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n`,is=(0,he.styled)(\"div\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 1.2;\n color: ${({theme:e})=>ue(e,\"N100\")};\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`,ls=(0,he.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 11px;\n font-weight: 500;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#22C55E\":t===\"down\"?\"#DC2626\":ue(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`,ss=(0,he.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})=>ue(e,\"N70\")};\n\n svg {\n width: 48px;\n height: 48px;\n color: ${({theme:e})=>ue(e,\"N50\")};\n }\n`,ds=(0,he.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>ue(e,\"N70\")};\n`;var gs=require(\"react\"),fs=L(require(\"@mui/material/Menu\")),rn=L(require(\"@mui/material/MenuItem\")),an=L(require(\"@mui/material/ListItemIcon\")),nn=L(require(\"@mui/material/ListItemText\")),ms=L(require(\"@mui/icons-material/MoreVert\")),hs=L(require(\"@mui/icons-material/Visibility\")),xs=L(require(\"@mui/icons-material/FileDownload\"));var cs=L(require(\"@mui/material/IconButton\")),Or=require(\"@nuskin/foundation-theme\"),{getGenomeColor:ps}=Or.ColorUtils,us=(0,Or.styled)(cs.default)(({theme:e})=>({padding:\"4px\",color:ps(e,\"N100\"),\"&:hover\":{backgroundColor:ps(e,\"N20\")}}));var He=require(\"react/jsx-runtime\"),st=({widgetId:e,onFullView:t,onExport:o})=>{let[n,i]=(0,gs.useState)(null),l=!!n,s=`widget-menu-button-${e}`,d=`widget-menu-${e}`,f=x=>{i(x.currentTarget)},h=()=>{i(null)},p=()=>{h(),t&&t()},b=()=>{h(),o&&o()};return(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)(us,{id:s,\"data-testid\":`widget-menu-button-${e}`,\"aria-label\":a(r.widget.menu.ariaLabel),\"aria-controls\":l?d:void 0,\"aria-haspopup\":\"true\",\"aria-expanded\":l?\"true\":void 0,onClick:f,size:\"small\",children:(0,He.jsx)(ms.default,{fontSize:\"small\"})}),(0,He.jsxs)(fs.default,{id:d,\"data-testid\":`widget-menu-${e}`,anchorEl:n,open:l,onClose:h,MenuListProps:{\"aria-labelledby\":s},anchorOrigin:{vertical:\"bottom\",horizontal:\"right\"},transformOrigin:{vertical:\"top\",horizontal:\"right\"},children:[(0,He.jsxs)(rn.default,{onClick:p,\"data-testid\":\"widget-menu-item-viewdetails\",children:[(0,He.jsx)(an.default,{children:(0,He.jsx)(hs.default,{fontSize:\"small\"})}),(0,He.jsx)(nn.default,{children:a(r.widget.menu.viewDetails)})]}),o&&(0,He.jsxs)(rn.default,{onClick:b,\"data-testid\":\"widget-menu-item-export\",children:[(0,He.jsx)(an.default,{children:(0,He.jsx)(xs.default,{fontSize:\"small\"})}),(0,He.jsx)(nn.default,{children:a(r.widget.menu.exportData)})]})]})]})};var q=require(\"react/jsx-runtime\"),iu=({products:e,productSort:t,isLoading:o=!1,maxProducts:n=5,onSortChange:i,onTitleClick:l,onExport:s})=>{let d=m=>{let u=m.target.value;i?.(u)},f=(m,u)=>{switch(u){case\"units\":return`${m.unitsSold.toLocaleString()} ${a(r.widget.topProducts.unitsSuffix)}`;case\"revenue\":return te(m.revenue,m.currencyCode);case\"volume\":return`${m.volume.toLocaleString()} ${a(r.defaults.dcSv)}`;default:return`${m.unitsSold.toLocaleString()} ${a(r.widget.topProducts.unitsSuffix)}`}},h=(m,u)=>{switch(u){case\"units\":return`${te(m.revenue,m.currencyCode)} ${a(r.widget.topProducts.revenueSuffix)}`;case\"revenue\":return`${m.unitsSold.toLocaleString()} ${a(r.widget.topProducts.unitsSuffix)}`;case\"volume\":return`${te(m.revenue,m.currencyCode)} ${a(r.widget.topProducts.revenueSuffix)}`;default:return`${te(m.revenue,m.currencyCode)} ${a(r.widget.topProducts.revenueSuffix)}`}},p=(m,u)=>{let y=m.trend;if(!y)return\"\";let C=\"\";switch(u){case\"units\":C=y.units??\"\";break;case\"revenue\":C=y.revenue??\"\";break;case\"volume\":C=y.volume??\"\";break;default:C=y.units??\"\"}return C},b=(m,u)=>{let y=p(m,u);return Tt(y)},x=m=>et(m),g=e.slice(0,n),k=a(r.widget.topProducts.rank),R=a(r.defaults.trend);return o&&e.length===0?(0,q.jsx)(Mr,{\"data-testid\":\"widget-top-products\",children:(0,q.jsx)(Al,{})}):e.length===0?(0,q.jsxs)(Mr,{\"data-testid\":\"widget-top-products\",children:[(0,q.jsx)(tn,{children:(0,q.jsx)(on,{children:a(r.widget.topProducts.title)})}),(0,q.jsxs)(ss,{\"data-testid\":\"products-empty-state\",children:[(0,q.jsx)(ys.default,{}),(0,q.jsx)(ds,{children:a(r.widget.topProducts.empty)})]})]}):(0,q.jsxs)(Mr,{as:\"section\",\"data-testid\":\"widget-top-products\",\"aria-label\":a(r.widget.topProducts.ariaLabel),children:[(0,q.jsxs)(tn,{children:[(0,q.jsx)(on,{as:\"button\",onClick:l,\"aria-label\":a(r.widget.topProducts.titleAriaLabel),\"data-testid\":\"widget-title-top-products\",children:a(r.widget.topProducts.title)}),(0,q.jsxs)(Zl,{children:[(0,q.jsxs)(xt,{id:\"product-sort\",\"data-testid\":\"product-sort-dropdown\",value:t,onChange:d,disabled:o,\"aria-label\":a(r.widget.topProducts.sortAriaLabel),children:[(0,q.jsx)(\"option\",{value:\"units\",children:a(r.defaults.byUnits)}),(0,q.jsx)(\"option\",{value:\"revenue\",children:a(r.defaults.byRevenue)}),(0,q.jsx)(\"option\",{value:\"volume\",children:a(r.defaults.byVolume)})]}),(0,q.jsx)(st,{widgetId:\"top-products\",onFullView:l,onExport:s})]})]}),(0,q.jsx)(Xl,{as:\"ul\",\"data-testid\":\"products-list\",children:g.map((m,u)=>{let y=b(m,t),C=p(m,t);return(0,q.jsxs)(ql,{as:\"li\",\"data-testid\":`product-item-${u}`,\"aria-label\":`${k} ${m.rank}: ${m.name}, ${f(m,t)}`,children:[(0,q.jsx)(Ql,{\"aria-label\":`${k} ${m.rank}`,children:m.rank}),m.imageUrl?(0,q.jsx)(es,{src:m.imageUrl,alt:m.name,loading:\"lazy\",onError:M=>{M.currentTarget.hidden=!0}}):(0,q.jsx)(ts,{\"aria-label\":a(r.widget.topProducts.noImageAriaLabel),children:m.name.substring(0,2).toUpperCase()}),(0,q.jsxs)(os,{children:[(0,q.jsx)(rs,{title:m.name,children:m.name}),(0,q.jsx)(as,{children:h(m,t)})]}),(0,q.jsxs)(ns,{children:[(0,q.jsx)(is,{children:f(m,t)}),C&&(0,q.jsxs)(ls,{as:\"output\",direction:y,\"aria-live\":\"polite\",\"aria-label\":`${R}: ${ko(y)} ${C}`,children:[x(y),(0,q.jsx)(\"span\",{children:C})]})]})]},m.id)})})]})},so=bs.default.memo(iu);so.displayName=\"TopSellingProductsList\";var po=L(require(\"react\")),tt=require(\"recharts\");var Se=require(\"@nuskin/foundation-theme\"),{getGenomeColor:xe}=Se.ColorUtils,ln=(0,Se.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>xe(e,\"N20\")};\n border: 1px solid ${({theme:e})=>xe(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`,ws=(0,Se.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Cs=(0,Se.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n`,vs=(0,Se.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,ks=(0,Se.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\n color: ${({theme:e})=>xe(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})=>xe(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,Uf=(0,Se.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>xe(e,\"N20\")};\n border: 1px solid ${({theme:e})=>xe(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>xe(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>xe(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>xe(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>xe(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,Ts=(0,Se.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`,Ss=(0,Se.styled)(\"div\")`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({theme:e})=>xe(e,\"N100\")};\n margin: 0;\n padding: 0;\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`,Ds=(0,Se.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#DC2626\":xe(e,\"N70\")};\n\n svg {\n width: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>xe(e,\"N70\")};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\n }\n`,Ps=(0,Se.styled)(\"div\")`\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n color: ${({theme:e})=>xe(e,\"N100\")};\n margin-bottom: 8px;\n margin-top: 0;\n letter-spacing: 0.12px;\n`,Rs=(0,Se.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})=>xe(e,\"N40\")};\n stroke-width: 1px;\n }\n\n .recharts-text {\n fill: ${({theme:e})=>xe(e,\"N70\")};\n font-size: 10px;\n }\n\n .recharts-tooltip-wrapper {\n z-index: 100;\n }\n`,Ms=(0,Se.styled)(\"div\")`\n background-color: ${({theme:e})=>xe(e,\"N100\")};\n border: 1px solid ${({theme:e})=>xe(e,\"N40\")};\n border-radius: 6px;\n padding: 8px 12px;\n box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.15);\n`,Os=(0,Se.styled)(\"div\")`\n font-size: 11px;\n font-weight: 600;\n color: ${({theme:e})=>xe(e,\"N10\")};\n margin-bottom: 4px;\n`,Fs=(0,Se.styled)(\"div\")`\n font-size: 13px;\n font-weight: 700;\n color: ${({theme:e})=>xe(e,\"A10\")};\n`,Ls=(0,Se.styled)(\"div\")`\n font-size: 10px;\n font-weight: 400;\n color: ${({theme:e})=>xe(e,\"N30\")};\n margin-top: 2px;\n`;var dt=\"last30days\",sn={last7days:7,last30days:30,last90days:90,thisMonth:31},dn={last7days:\"Last 7 Days\",last30days:\"Last 30 Days\",last90days:\"Last 90 Days\",thisMonth:\"This Month\"};function $s(e){return sn[e]??30}function Fr(e){return dn[e]??\"Last 30 Days\"}function Ns(e){return Fr(e)}function pn(e){return`${[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"][e.getMonth()]} ${e.getDate()}`}var lu={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 Nr(e){let t=e.split(\" \");return t.length!==2?e:`${lu[t[0]]||t[0]}/${t[1]}`}function Lr(e){let t=new Date(e);return pn(t)}function cn(e,t){return`${Lr(e)} - ${Lr(t)}`}function $r(e){return e.toISOString().split(\"T\")[0]}function De(e){let t=new Date,o=t.getFullYear(),n=t.getMonth(),i=t.getDate(),l,s=new Date(o,n,i);switch(e){case\"last7days\":l=new Date(o,n,i-7);break;case\"last30days\":l=new Date(o,n,i-30);break;case\"last90days\":l=new Date(o,n,i-90);break;case\"thisMonth\":l=new Date(o,n,1),s=new Date(o,n+1,0);break;default:return\"N/A\"}return cn($r(l),$r(s))}function Dt(e){let t=r.widget.compareTo;switch(e){case\"last7days\":return Qe(t.last7days);case\"last30days\":return Qe(t.last30days);case\"last90days\":return Qe(t.last90days);case\"thisMonth\":return Qe(t.thisMonth);default:return Qe(t.last30days)}}function su(e,t){return t===\"all\"||e.priceTypes===void 0?!0:e.priceTypes.some(o=>o.toLowerCase()===t)}function Ir(e,t){return e.filter(o=>su(o,t))}var U=require(\"react/jsx-runtime\"),du={top:5,right:10,left:-10,bottom:5},Is={fontSize:10},pu=e=>{let{cx:t,cy:o,r:n=3}=e;return(0,U.jsx)(\"circle\",{cx:t,cy:o,r:n,fill:\"#FFFFFF\",fillOpacity:\"0\",stroke:\"#3B82F6\",strokeWidth:\"2\",style:{pointerEvents:\"none\"}})},cu=e=>{let{cx:t,cy:o,r:n=5}=e;return(0,U.jsx)(\"circle\",{cx:t,cy:o,r:n,fill:\"#FFFFFF\",fillOpacity:\"0\",stroke:\"#3B82F6\",strokeWidth:\"2\",style:{pointerEvents:\"none\"}})},uu=e=>`${e}%`,gu=({active:e,payload:t})=>{if(!e||!t?.length)return null;let o=t[0].payload;return(0,U.jsxs)(Ms,{children:[(0,U.jsx)(Os,{children:o.date}),(0,U.jsxs)(Fs,{children:[(o.rate??0).toFixed(2),\"%\"]}),(0,U.jsxs)(Ls,{children:[o.orders??0,\" \",a(r.widget.conversionRate.tooltipOrders),\" /\",\" \",(o.siteVisits??0).toLocaleString(),\" \",a(r.widget.conversionRate.tooltipVisits)]})]})},fu=({conversionData:e,conversionFilter:t,dateRange:o=dt,isLoading:n=!1,title:i,summaryRate:l,summaryChangePct:s,onFilterChange:d,onTitleClick:f,onExport:h})=>{let p=po.default.useCallback(y=>{let C=y.target.value;d?.(C)},[d]),b=a(r.defaults.noData),x=a(r.defaults.noChange),g=po.default.useMemo(()=>Ir(e,t),[e,t]),k=po.default.useMemo(()=>typeof l==\"number\"&&Number.isFinite(l)?l:g.at(-1)?.rate??0,[l,g]),R=po.default.useMemo(()=>{if(s!==void 0){if(s===null||Math.abs(s)<.1)return{direction:\"neutral\",value:x};let W=s>0?\"up\":\"down\",X=`${s>0?\"+\":\"\"}${s.toFixed(2)}%`;return{direction:W,value:X}}if(g.length<2)return{direction:\"neutral\",value:b};let y=g.at(-1)?.rate??0,C=g[0].rate;if(C===0)return{direction:\"neutral\",value:x};let M=y-C,V=M/C*100;if(Math.abs(V)<.1)return{direction:\"neutral\",value:x};let O=M>0?\"up\":\"down\",A=`${M>0?\"+\":\"\"}${M.toFixed(2)}%`;return{direction:O,value:A}},[s,g,x,b]),m=po.default.useMemo(()=>g.map(y=>({...y,shortDate:Nr(y.date)})),[g]);if(n&&e.length===0)return(0,U.jsx)(ln,{\"data-testid\":\"widget-conversion-rate\",children:(0,U.jsx)(Sr,{})});let u=a(r.widget.conversionRate.chartAriaLabel);return(0,U.jsxs)(ln,{as:\"section\",\"data-testid\":\"widget-conversion-rate\",\"aria-label\":u,children:[(0,U.jsx)(ws,{children:(0,U.jsxs)(Cs,{children:[(0,U.jsx)(ks,{as:\"button\",onClick:f,\"aria-label\":a(r.widget.conversionRate.titleAriaLabel),\"data-testid\":\"widget-title-conversion-rate\",children:i??a(r.defaults.conversionRate)}),(0,U.jsxs)(vs,{children:[(0,U.jsxs)(xt,{id:\"conversion-filter\",\"data-testid\":\"conversion-filter-dropdown\",value:t,onChange:p,disabled:n,\"aria-label\":a(r.widget.conversionRate.filterAriaLabel),children:[(0,U.jsx)(\"option\",{value:\"all\",children:a(r.defaults.all)}),(0,U.jsx)(\"option\",{value:\"retail\",children:a(r.filter.conversionType.retail)}),(0,U.jsx)(\"option\",{value:\"member\",children:a(r.filter.conversionType.member)})]}),(0,U.jsx)(st,{widgetId:\"conversion-rate\",onFullView:f,onExport:h})]})]})}),(0,U.jsxs)(Ts,{children:[(0,U.jsxs)(Ss,{\"aria-label\":`${a(r.defaults.conversionRate)}: ${k.toFixed(2)}%`,\"data-testid\":\"conversion-metric-value\",children:[k.toFixed(2),\"%\"]}),R.value!==b&&(0,U.jsxs)(Ds,{as:\"output\",direction:R.direction,\"aria-live\":\"polite\",\"aria-label\":`${ko(R.direction)} ${R.value}`,\"data-testid\":\"conversion-metric-trend\",children:[(0,U.jsxs)(\"div\",{className:\"trend-line\",children:[(0,U.jsx)(\"span\",{\"aria-hidden\":\"true\",children:et(R.direction)}),(0,U.jsx)(\"span\",{className:\"change-value\",children:R.value.replace(\"%\",\"\")}),(0,U.jsx)(\"span\",{className:\"change-percent\",children:\"%\"})]}),(0,U.jsx)(\"div\",{className:\"comparison-text\",children:Dt(o)})]})]}),(0,U.jsx)(Ps,{\"data-testid\":\"conversion-formula\",children:a(r.widget.conversionRate.formula)}),(0,U.jsx)(Rs,{\"data-testid\":\"conversion-chart\",children:(0,U.jsx)(tt.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:200,children:(0,U.jsxs)(tt.LineChart,{data:m,margin:du,children:[(0,U.jsx)(tt.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,U.jsx)(tt.XAxis,{dataKey:\"shortDate\",tick:Is,tickLine:!1,interval:\"preserveStartEnd\"}),(0,U.jsx)(tt.YAxis,{tick:Is,tickLine:!1,tickFormatter:uu,domain:[\"dataMin - 0.5\",\"dataMax + 0.5\"]}),(0,U.jsx)(tt.Tooltip,{content:gu}),(0,U.jsx)(tt.Line,{type:\"monotone\",dataKey:\"rate\",stroke:\"#3B82F6\",strokeWidth:2,dot:(0,U.jsx)(pu,{}),activeDot:(0,U.jsx)(cu,{})})]})})})]})},co=po.default.memo(fu);co.displayName=\"ConversionRateChart\";var So=L(require(\"react\")),Ce=require(\"recharts\");var We=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Ie}=We.ColorUtils,un=(0,We.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: ${({theme:e})=>Ie(e,\"N20\")};\n border: 1px solid ${({theme:e})=>Ie(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`,Vs=(0,We.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Es=(0,We.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,As=(0,We.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\n color: ${({theme:e})=>Ie(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})=>Ie(e,\"A80\")};\n }\n\n @media (min-width: 768px) {\n font-size: 18px;\n }\n\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,pm=(0,We.styled)(\"select\")`\n height: 32px;\n padding: 4px 8px;\n background-color: ${({theme:e})=>Ie(e,\"N20\")};\n border: 1px solid ${({theme:e})=>Ie(e,\"N40\")};\n border-radius: 6px;\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>Ie(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>Ie(e,\"N30\")};\n }\n &:focus {\n border-color: ${({theme:e})=>Ie(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>Ie(e,\"A20\")};\n }\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,zs=(0,We.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`,Bs=(0,We.styled)(\"div\")`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({theme:e})=>Ie(e,\"N100\")};\n margin: 0;\n padding: 0;\n\n @media (min-width: 768px) {\n font-size: 32px;\n }\n`,Hs=(0,We.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\n color: ${({theme:e,direction:t})=>t===\"up\"?\"#066100\":t===\"down\"?\"#DC2626\":Ie(e,\"N70\")};\n\n svg {\n width: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>Ie(e,\"N70\")};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\n }\n`,Ws=(0,We.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})=>Ie(e,\"N40\")};\n stroke-width: 1px;\n }\n .recharts-text {\n fill: ${({theme:e})=>Ie(e,\"N70\")};\n font-size: 10px;\n }\n`,_s=(0,We.styled)(\"div\")`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 16px;\n margin-top: 16px;\n padding-top: 0;\n`,Jo=(0,We.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})=>Ie(e,\"N30\")};\n }\n`,Zo=(0,We.styled)(\"div\")`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({color:e})=>e};\n flex-shrink: 0;\n`,Xo=(0,We.styled)(\"span\")`\n font-size: 12px;\n font-weight: 400;\n color: ${({theme:e})=>Ie(e,\"N70\")};\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;var I=require(\"react/jsx-runtime\"),Pe={total:\"#3B82F6\",members:\"#7B92A8\",retail:\"#A3B5C7\",brandAffiliates:\"#CBD6E0\"},mu={top:5,right:10,left:-10,bottom:5},Us={fontSize:10},gn=new Map,To=e=>{if(gn.has(e))return gn.get(e);let t=o=>{let{cx:n=0,cy:i=0,r:l=2}=o;return(0,I.jsx)(\"circle\",{cx:n,cy:i,r:l,fill:\"#FFFFFF\",fillOpacity:\"0\",stroke:e,strokeWidth:\"1.5\",style:{pointerEvents:\"none\"}})};return gn.set(e,t),t},hu=({signupData:e,signupView:t,dateRange:o=dt,isLoading:n=!1,title:i,onViewChange:l,onTitleClick:s,onExport:d})=>{let f=So.default.useCallback(y=>{let C=y.target.value;l?.(C)},[l]),h=a(r.defaults.noData),p=a(r.defaults.noChange),b=So.default.useMemo(()=>{if(e.length===0)return 0;let y=e[e.length-1];return Qt(y,t)},[e,t]),x=So.default.useMemo(()=>{if(e.length<2)return{direction:\"neutral\",value:h};let y=Qt(e[e.length-1],t),C=Qt(e[0],t),M=y-C,V=C===0?0:M/C*100;if(Math.abs(V)<.1)return{direction:\"neutral\",value:p};let O=M>0?\"up\":\"down\",A=`${M>0?\"+\":\"\"}${M} (${V.toFixed(1)}%)`;return{direction:O,value:A}},[p,h,e,t]),g=So.default.useMemo(()=>e.map(y=>({...y,shortDate:Nr(y.date)})),[e]),k=a(r.widget.signups.total),R=a(r.defaults.members),m=a(r.defaults.retail),u=a(r.defaults.brandAffiliates);return n&&e.length===0?(0,I.jsx)(un,{\"data-testid\":\"widget-signups\",children:(0,I.jsx)(Sr,{})}):(0,I.jsxs)(un,{as:\"section\",\"data-testid\":\"widget-signups\",\"aria-label\":a(r.widget.signups.chartAriaLabel),children:[(0,I.jsxs)(Vs,{children:[(0,I.jsx)(As,{as:\"button\",onClick:s,\"aria-label\":a(r.widget.signups.titleAriaLabel),\"data-testid\":\"widget-title-signups\",children:i??a(r.widget.signups.title)}),(0,I.jsxs)(Es,{children:[(0,I.jsxs)(xt,{id:\"signup-view\",\"data-testid\":\"signup-view-dropdown\",value:t,onChange:f,disabled:n,\"aria-label\":a(r.widget.signups.filterAriaLabel),children:[(0,I.jsx)(\"option\",{value:\"all\",children:a(r.filter.signupView.showAll)}),(0,I.jsx)(\"option\",{value:\"members\",children:a(r.filter.signupView.showMembers)}),(0,I.jsx)(\"option\",{value:\"retail\",children:a(r.filter.signupView.showRetail)}),(0,I.jsx)(\"option\",{value:\"brandAffiliates\",children:a(r.filter.signupView.showBrandAffiliates)})]}),(0,I.jsx)(st,{widgetId:\"signups\",onFullView:s,onExport:d})]})]}),(0,I.jsxs)(zs,{\"data-testid\":\"signups-metric-display\",children:[(0,I.jsx)(Bs,{\"data-testid\":\"signups-metric-value\",\"aria-label\":`${k}: ${b.toLocaleString()}`,children:b.toLocaleString()}),x.value!==h&&(0,I.jsxs)(Hs,{as:\"output\",\"data-testid\":\"signups-metric-trend\",direction:x.direction,\"aria-live\":\"polite\",\"aria-label\":`${ko(x.direction)} ${x.value}`,children:[(0,I.jsxs)(\"div\",{className:\"trend-line\",children:[(0,I.jsx)(\"span\",{\"aria-hidden\":\"true\",children:et(x.direction)}),(0,I.jsx)(\"span\",{className:\"change-value\",children:x.value.split(\" \")[0]}),(0,I.jsx)(\"span\",{className:\"change-percent\",children:x.value.split(\" \")[1]})]}),(0,I.jsx)(\"div\",{className:\"comparison-text\",children:Dt(o)})]})]}),(0,I.jsx)(Ws,{\"data-testid\":\"signups-chart\",children:(0,I.jsx)(Ce.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:200,children:(0,I.jsxs)(Ce.LineChart,{data:g,margin:mu,children:[(0,I.jsx)(Ce.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,I.jsx)(Ce.XAxis,{dataKey:\"shortDate\",tick:Us,tickLine:!1,interval:\"preserveStartEnd\"}),(0,I.jsx)(Ce.YAxis,{tick:Us,tickLine:!1}),(0,I.jsx)(Ce.Tooltip,{}),(t===\"all\"||t===\"members\")&&(0,I.jsx)(Ce.Line,{type:\"monotone\",dataKey:t===\"all\"?\"total\":\"members\",stroke:t===\"all\"?Pe.total:Pe.members,strokeWidth:2,dot:To(t===\"all\"?Pe.total:Pe.members),name:t===\"all\"?k:R}),t===\"all\"&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Ce.Line,{type:\"monotone\",dataKey:\"members\",stroke:Pe.members,strokeWidth:2,dot:To(Pe.members),name:R}),(0,I.jsx)(Ce.Line,{type:\"monotone\",dataKey:\"retail\",stroke:Pe.retail,strokeWidth:2,dot:To(Pe.retail),name:m}),(0,I.jsx)(Ce.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:Pe.brandAffiliates,strokeWidth:2,dot:To(Pe.brandAffiliates),name:u})]}),t===\"retail\"&&(0,I.jsx)(Ce.Line,{type:\"monotone\",dataKey:\"retail\",stroke:Pe.retail,strokeWidth:2,dot:To(Pe.retail),name:m}),t===\"brandAffiliates\"&&(0,I.jsx)(Ce.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:Pe.brandAffiliates,strokeWidth:2,dot:To(Pe.brandAffiliates),name:u})]})})}),t===\"all\"&&(0,I.jsxs)(_s,{\"data-testid\":\"signups-legend\",children:[(0,I.jsxs)(Jo,{\"data-testid\":\"legend-total\",children:[(0,I.jsx)(Zo,{color:Pe.total}),(0,I.jsx)(Xo,{children:k})]}),(0,I.jsxs)(Jo,{\"data-testid\":\"legend-members\",children:[(0,I.jsx)(Zo,{color:Pe.members}),(0,I.jsx)(Xo,{children:R})]}),(0,I.jsxs)(Jo,{\"data-testid\":\"legend-retail\",children:[(0,I.jsx)(Zo,{color:Pe.retail}),(0,I.jsx)(Xo,{children:m})]}),(0,I.jsxs)(Jo,{\"data-testid\":\"legend-brandAffiliates\",children:[(0,I.jsx)(Zo,{color:Pe.brandAffiliates}),(0,I.jsx)(Xo,{children:u})]})]})]})},qo=So.default.memo(hu);qo.displayName=\"SignupsChart\";var Xr=L(require(\"react\")),Pt=require(\"recharts\"),Zs=L(require(\"@mui/icons-material/TrendingUp\")),Xs=L(require(\"@mui/icons-material/TrendingDown\"));var ie=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Re}=ie.ColorUtils,eo=(0,ie.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 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`,Do=(0,ie.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n margin-bottom: 20px;\n }\n`,Vr=(0,ie.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Po=(0,ie.styled)(\"h2\")`\n font-size: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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\n @media (min-width: 1080px) {\n font-size: 18px;\n }\n`,Ks=(0,ie.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 &: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`,Er=(0,ie.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 20px;\n align-items: center;\n justify-content: center;\n flex: 1;\n\n @media (min-width: 768px) {\n flex-direction: row;\n gap: 24px;\n align-items: center;\n justify-content: center;\n }\n`,Ar=(0,ie.styled)(\"div\")`\n position: relative;\n width: 100%;\n height: 220px;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 260px;\n height: 260px;\n flex: 0 0 auto;\n }\n\n @media (min-width: 1080px) {\n width: 280px;\n height: 280px;\n flex: 0 0 auto;\n }\n\n /* Style recharts pie labels (percentages inside segments) */\n svg text {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\n }\n\n text[class*='recharts'] {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\n }\n`,zr=(0,ie.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`,Br=(0,ie.styled)(\"div\")`\n font-size: 10px;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>Re(e,\"N70\")};\n`,Hr=(0,ie.styled)(\"div\")`\n margin-top: 2px;\n font-size: 16px;\n line-height: 1.2;\n font-weight: 700;\n color: ${({theme:e})=>Re(e,\"N100\")};\n`,Wr=(0,ie.styled)(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n margin-top: 4px;\n font-size: 12px;\n line-height: 1.2;\n font-weight: 600;\n color: ${({direction:e,theme:t})=>e===\"up\"?\"#2e7d32\":e===\"down\"?\"#d32f2f\":Re(t,\"N70\")};\n\n svg {\n width: 14px;\n height: 14px;\n font-size: 14px;\n }\n`,_r=(0,ie.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 0 1 auto;\n\n @media (min-width: 768px) {\n gap: 10px;\n }\n`,Ur=(0,ie.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 0;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n @media (min-width: 768px) {\n gap: 10px;\n padding: 6px 0;\n }\n\n &:hover {\n background-color: ${({theme:e})=>Re(e,\"N30\")};\n }\n`,Kr=(0,ie.styled)(\"div\")`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({color:e})=>e};\n flex-shrink: 0;\n`,Gr=(0,ie.styled)(\"div\")`\n display: flex;\n flex-direction: row;\n gap: 4px;\n flex: 1;\n min-width: 0;\n align-items: center;\n`,jr=(0,ie.styled)(\"div\")`\n font-size: 13px;\n font-weight: 600;\n color: ${({theme:e})=>Re(e,\"N100\")};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`,Yr=(0,ie.styled)(\"div\")`\n font-size: 12px;\n font-weight: 500;\n color: ${({theme:e})=>Re(e,\"N100\")};\n flex-shrink: 0;\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`,Gs=(0,ie.styled)(\"div\")`\n display: none;\n`,js=(0,ie.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1;\n min-width: 0;\n`,Ys=(0,ie.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: 14px;\n height: 14px;\n font-size: 14px;\n }\n`,Js=(0,ie.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`,Jr=(0,ie.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`,Zr=(0,ie.styled)(\"div\")`\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: ${({theme:e})=>Re(e,\"N70\")};\n`;var K=require(\"react/jsx-runtime\"),xu=({categories:e,categorySort:t,isLoading:o=!1,title:n,summaryChangePct:i,onSortChange:l,onTitleClick:s,onExport:d})=>{let f=Xr.default.useCallback(u=>{let y=u.target.value;l?.(y)},[l]),{sortedCategories:h,totalRevenue:p,totalVolume:b,trendDirection:x,formattedTrend:g}=Xr.default.useMemo(()=>{let u=[...e].sort((O,A)=>t===\"revenue\"?A.revenue-O.revenue:(A.volume??0)-(O.volume??0)),y=u.reduce((O,A)=>O+A.revenue,0),C=u.reduce((O,A)=>O+(A.volume??0),0),M,V;if(i!=null)Math.abs(i)<.1?(V=\"0%\",M=\"neutral\"):(M=i>0?\"up\":\"down\",V=`${i>0?\"+\":\"\"}${i.toFixed(1)}%`);else{let{direction:O,formatted:A}=qt(u,W=>t===\"volume\"?W.volume??0:W.revenue,W=>t===\"volume\"?W.trend?.volume:W.trend?.revenue);M=O,V=A}return{sortedCategories:u,totalRevenue:y,totalVolume:C,trendDirection:M,formattedTrend:V}},[e,t,i]),k=u=>u===\"up\"?(0,K.jsx)(Zs.default,{sx:{fontSize:\"14px\"},\"aria-hidden\":\"true\"}):u===\"down\"?(0,K.jsx)(Xs.default,{sx:{fontSize:\"14px\"},\"aria-hidden\":\"true\"}):null,R=u=>Rr(u,{fontSize:\"10\",fontWeight:\"600\"}),m=h[0]?.currencyCode;return o&&e.length===0?(0,K.jsx)(eo,{\"data-testid\":\"widget-top-categories\",children:(0,K.jsx)(Dr,{})}):e.length===0?(0,K.jsxs)(eo,{\"data-testid\":\"widget-top-categories\",children:[(0,K.jsx)(Do,{children:(0,K.jsx)(Po,{children:n??a(r.widget.topCategories.title)})}),(0,K.jsx)(Jr,{\"data-testid\":\"categories-empty-state\",children:(0,K.jsx)(Zr,{children:a(r.widget.topCategories.empty)})})]}):(0,K.jsxs)(eo,{as:\"section\",\"data-testid\":\"widget-top-categories\",\"aria-label\":a(r.widget.topCategories.chartAriaLabel),children:[(0,K.jsxs)(Do,{children:[(0,K.jsx)(Po,{as:\"button\",onClick:s,\"aria-label\":a(r.widget.topCategories.titleAriaLabel),\"data-testid\":\"widget-title-top-categories\",children:n??a(r.widget.topCategories.title)}),(0,K.jsxs)(Vr,{children:[(0,K.jsxs)(xt,{id:\"category-sort\",\"data-testid\":\"category-sort-dropdown\",value:t,onChange:f,disabled:o,\"aria-label\":a(r.widget.topCategories.sortAriaLabel),children:[(0,K.jsx)(\"option\",{value:\"revenue\",children:a(r.defaults.byRevenue)}),(0,K.jsx)(\"option\",{value:\"volume\",children:a(r.defaults.byVolume)})]}),(0,K.jsx)(st,{widgetId:\"top-categories\",onFullView:s,onExport:d})]})]}),(0,K.jsxs)(Er,{children:[(0,K.jsxs)(Ar,{\"data-testid\":\"categories-chart\",children:[(0,K.jsx)(Pt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,K.jsxs)(Pt.PieChart,{children:[(0,K.jsx)(Pt.Pie,{data:h,cx:\"50%\",cy:\"50%\",innerRadius:\"55%\",outerRadius:\"85%\",dataKey:t===\"volume\"?\"volume\":\"revenue\",nameKey:\"name\",paddingAngle:2,label:R,labelLine:!1,children:h.map(u=>(0,K.jsx)(Pt.Cell,{fill:u.color},`cell-${u.id}`))}),(0,K.jsx)(Pt.Tooltip,{formatter:u=>te(u,m)})]})}),(0,K.jsxs)(zr,{\"data-testid\":\"categories-donut-center\",children:[(0,K.jsx)(Br,{children:t===\"volume\"?a(r.defaults.volume):a(r.stats.revenue)}),(0,K.jsx)(Hr,{children:t===\"volume\"?`${b.toFixed(1)} SV`:te(p,m)}),(0,K.jsxs)(Wr,{direction:x,children:[k(x),(0,K.jsx)(\"span\",{children:g})]})]})]}),(0,K.jsx)(_r,{\"data-testid\":\"categories-legend-container\",children:h.map((u,y)=>{let C=t===\"volume\"?u.volume:u.revenue,M=t===\"volume\"?u.volumeSharePct:u.percentage,V=t===\"volume\"?u.trend?.volume:u.trend?.revenue;return(0,K.jsxs)(Ur,{\"data-testid\":`category-legend-${y}`,children:[(0,K.jsx)(Kr,{color:u.color}),(0,K.jsxs)(Gr,{children:[(0,K.jsx)(jr,{children:u.name.charAt(0).toUpperCase()+u.name.slice(1)}),(0,K.jsxs)(js,{children:[(0,K.jsx)(Yr,{children:t===\"volume\"?`${C?.toFixed(1)} SV (${M}%)`:`${te(C??0,u.currencyCode)} (${M}%)`}),V?(0,K.jsx)(Ys,{direction:Tt(V),\"data-testid\":`category-legend-trend-${y}`,\"aria-label\":V,children:k(Tt(V))}):null]})]})]},u.id)})})]})]})},Qo=Xr.default.memo(xu);Qo.displayName=\"TopCategoriesPieChart\";var Me=require(\"react/jsx-runtime\"),bu=[],yu=[],wu=[],Cu=[],qr=({stats:e,topProducts:t,conversionData:o,signupData:n,categories:i,isLoading:l=!1,error:s,shopTitle:d,className:f,dateRange:h=dt,market:p=\"all\",productSort:b=\"units\",signupView:x=\"all\",conversionFilter:g=\"all\",categorySort:k=\"revenue\",categoriesSummaryChangePct:R,conversionSummaryChangePct:m,markets:u,onDateRangeChange:y,onMarketChange:C,onProductSortChange:M,onSignupViewChange:V,onConversionFilterChange:O,onCategorySortChange:A,onProductsTitleClick:W,onConversionTitleClick:X,onSignupsTitleClick:E,onCategoriesToTitleClick:c,onProductsExport:w,onConversionExport:v,onSignupsExport:F,onCategoriesExport:T})=>{let B=t??bu,pe=o??yu,P=n??wu,Q=i??Cu;if(s)return(0,Me.jsx)(Ha,{as:\"main\",className:f,\"aria-label\":a(r.ariaLabel.dashboard),children:(0,Me.jsxs)(Ji,{\"data-testid\":\"dashboard-error\",role:\"alert\",\"aria-live\":\"assertive\",children:[(0,Me.jsxs)(\"strong\",{children:[a(r.error),\":\"]}),\" \",s]})});let oe=Ze=>Ze?Ze.startsWith(\"+\")?\"up\":Ze.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\";return(0,Me.jsxs)(Ha,{as:\"main\",className:f,\"data-testid\":\"shopping-dashboard\",\"aria-label\":a(r.ariaLabel.dashboard),\"aria-busy\":l,children:[(0,Me.jsx)(Co,{shopTitle:d,dateRange:h,market:p,isLoading:l,stats:e,markets:u,onDateRangeChange:y,onMarketChange:C}),(0,Me.jsxs)(ji,{as:\"section\",\"data-testid\":\"stats-row\",\"aria-label\":a(r.ariaLabel.statsRow),children:[(0,Me.jsx)(kt,{title:a(r.stats.revenue),value:e?.metrics?.revenue??\"$0\",trendDirection:oe(e?.trend?.revenue),trendValue:e?.trend?.revenue,testId:\"stats-card-revenue\",isLoading:l}),(0,Me.jsx)(kt,{title:a(r.defaults.volume),value:e?.metrics?.volume??\"0\",subtitle:a(r.defaults.dcSv),trendDirection:oe(e?.trend?.volume),trendValue:e?.trend?.volume,testId:\"stats-card-volume\",isLoading:l}),(0,Me.jsx)(kt,{title:a(r.stats.visits),value:e?.metrics?.siteVisits??\"0\",subtitle:`${e?.metrics?.conversionRate??\"0%\"} ${a(r.defaults.conversionRate)}`,trendDirection:oe(e?.trend?.siteVisits),trendValue:e?.trend?.siteVisits,testId:\"stats-card-visits\",isLoading:l})]}),(0,Me.jsxs)(Yi,{\"data-testid\":\"widget-container\",children:[(0,Me.jsxs)(Wa,{\"data-testid\":\"widget-row-1\",children:[(0,Me.jsx)(so,{products:B,productSort:b,isLoading:l,maxProducts:5,onSortChange:M,onTitleClick:W,onExport:w}),(0,Me.jsx)(qo,{signupData:P,signupView:x,dateRange:h,isLoading:l,onViewChange:V,onTitleClick:E,onExport:F})]}),(0,Me.jsxs)(Wa,{\"data-testid\":\"widget-row-2\",children:[(0,Me.jsx)(co,{conversionData:pe,conversionFilter:g,dateRange:h,isLoading:l,summaryChangePct:m,onFilterChange:O,onTitleClick:X,onExport:v}),(0,Me.jsx)(Qo,{categories:Q,categorySort:k,isLoading:l,summaryChangePct:R,onSortChange:A,onTitleClick:c,onExport:T})]})]})]})};var de=L(require(\"react\"));var gt=L(require(\"react\"));var ud=L(require(\"@mui/icons-material/ArrowBack\")),gd=L(require(\"@mui/icons-material/CalendarToday\")),fd=L(require(\"@mui/icons-material/Language\"));var Ve=require(\"@nuskin/foundation-theme\"),{getGenomeColor:nt}=Ve.ColorUtils,qs=(0,Ve.styled)(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 16px;\n`,Qs=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n`,ed=(0,Ve.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})=>nt(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})=>nt(e,\"N100\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>nt(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`,td=(0,Ve.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})=>nt(e,\"N30\")};\n gap: 24px;\n\n @media (max-width: 767px) {\n align-items: flex-end;\n gap: 16px;\n }\n`,od=(0,Ve.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`,rd=(0,Ve.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({theme:e})=>nt(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`,ad=(0,Ve.styled)(\"p\")`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({theme:e})=>nt(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n`,nd=(0,Ve.styled)(\"p\")`\n display: none;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n color: ${({theme:e})=>nt(e,\"N100\")};\n margin: 0;\n white-space: nowrap;\n\n @media (max-width: 767px) {\n display: block;\n flex-shrink: 0;\n }\n`,id=(0,Ve.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`,ld=(0,Ve.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,sd=(0,Ve.styled)(\"span\")`\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({theme:e})=>nt(e,\"N70\")};\n\n svg {\n font-size: 16px;\n }\n`,dd=(0,Ve.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})=>nt(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})=>nt(e,\"N20\")};\n border-radius: 4px;\n }\n\n &:focus {\n background-color: ${({theme:e})=>nt(e,\"N20\")};\n border-radius: 4px;\n outline: 2px solid ${({theme:e})=>nt(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`,pd=(0,Ve.styled)(\"div\")`\n display: none;\n\n @media (max-width: 767px) {\n display: block;\n margin-bottom: 16px;\n }\n`,cd=(0,Ve.styled)(\"h1\")`\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n color: ${({theme:e})=>nt(e,\"N100\")};\n margin: 0;\n`;var be=require(\"react/jsx-runtime\");function Rt(e,t){return{key:\"dateRange\",label:a(t.filter.dateRange.label),value:e,icon:\"calendar\",options:[{value:\"last7days\",label:a(t.filter.dateRange.last7days)},{value:\"last30days\",label:a(t.filter.dateRange.last30days)},{value:\"last90days\",label:a(t.filter.dateRange.last90days)},{value:\"thisMonth\",label:a(t.filter.dateRange.thisMonth)}]}}function Mt(e,t,o){return{key:\"market\",label:a(o.filter.market.label),value:e,icon:\"globe\",options:t.map(n=>({value:n.value,label:n.label}))}}var ye=({title:e,dateRange:t,onBack:o,filters:n,onFilterChange:i})=>{let l=s=>s?(0,be.jsxs)(sd,{children:[s===\"calendar\"&&(0,be.jsx)(gd.default,{}),s===\"globe\"&&(0,be.jsx)(fd.default,{})]}):null;return(0,be.jsxs)(qs,{\"data-testid\":\"page-header\",children:[(0,be.jsx)(Qs,{children:(0,be.jsxs)(ed,{onClick:o,\"aria-label\":a(r.navigation.backAriaLabel),\"data-testid\":\"page-back-button\",type:\"button\",children:[(0,be.jsx)(ud.default,{}),(0,be.jsx)(\"span\",{children:a(r.navigation.backToDashboard)})]})}),(0,be.jsx)(pd,{children:(0,be.jsx)(cd,{children:e})}),(0,be.jsxs)(td,{children:[(0,be.jsxs)(od,{children:[(0,be.jsx)(rd,{\"data-testid\":\"page-header-title\",children:e}),(0,be.jsx)(ad,{\"data-testid\":\"page-header-date-range\",children:t})]}),n&&n.length>0&&i&&(0,be.jsx)(id,{\"data-testid\":\"page-header-filters\",children:n.map(s=>(0,be.jsxs)(ld,{children:[l(s.icon),(0,be.jsx)(dd,{id:`filter-${s.key}`,value:s.value,onChange:d=>i(s.key,d.target.value),disabled:s.disabled,\"aria-label\":`${s.label} ${a(r.ariaLabel.filterSuffix)}`,\"data-testid\":`filter-dropdown-${s.key}`,children:s.options.map(d=>(0,be.jsx)(\"option\",{value:d.value,children:s.label&&s.key===\"customerType\"?`${s.label} ${d.label}`:d.label},d.value))})]},s.key))}),(0,be.jsx)(nd,{children:t})]})]})};var vd=L(require(\"@mui/icons-material/ArrowUpward\")),kd=L(require(\"@mui/icons-material/ArrowDownward\"));var pt=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Ot}=pt.ColorUtils,md=(0,pt.styled)(\"div\")`\n width: 100%;\n overflow-x: auto;\n border-radius: 8px;\n border: 1px solid ${({theme:e})=>Ot(e,\"N30\")};\n`,hd=(0,pt.styled)(\"table\")`\n width: 100%;\n border-collapse: collapse;\n`,xd=(0,pt.styled)(\"thead\")`\n background-color: ${({theme:e})=>Ot(e,\"N20\")};\n border-bottom: 2px solid ${({theme:e})=>Ot(e,\"N40\")};\n`,bd=(0,pt.styled)(\"th\")`\n padding: 12px 16px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n background-color: ${({theme:e})=>Ot(e,\"N20\")};\n color: ${({theme:e})=>Ot(e,\"N70\")};\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})=>Ot(e,\"N20\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>Ot(e,\"A70\")};\n outline-offset: -2px;\n }\n`,yd=(0,pt.styled)(\"tbody\")``,fn=(0,pt.styled)(\"tr\")`\n border-bottom: 1px solid ${({theme:e})=>Ot(e,\"N30\")};\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>Ot(e,\"N20\")};\n }\n\n &:last-child {\n border-bottom: none;\n }\n`,mn=(0,pt.styled)(\"td\")`\n padding: 12px 16px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({theme:e})=>Ot(e,\"N70\")};\n text-align: left;\n`,wd=(0,pt.styled)(mn)`\n text-align: center;\n`,Cd=(0,pt.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 je=require(\"react/jsx-runtime\"),ct=({columns:e,data:t,sortable:o=!1,onSort:n,sortColumn:i,sortDirection:l=\"asc\",getRowKey:s})=>{let d=p=>{if(!o||!n)return;n(p,i===p&&l===\"asc\"?\"desc\":\"asc\")},f=(p,b)=>{(p.key===\"Enter\"||p.key===\" \")&&(p.preventDefault(),d(b))},h=p=>{if(i===p)return l===\"asc\"?\"ascending\":\"descending\"};return(0,je.jsx)(md,{\"data-testid\":\"data-table\",children:(0,je.jsxs)(hd,{children:[(0,je.jsx)(xd,{children:(0,je.jsx)(\"tr\",{children:e.map(p=>(0,je.jsxs)(bd,{scope:\"col\",sortable:o&&p.sortable,onClick:()=>p.sortable&&d(p.key),onKeyDown:b=>p.sortable&&f(b,p.key),tabIndex:o&&p.sortable?0:-1,\"aria-sort\":h(p.key),\"aria-label\":`${p.label}${p.sortable?a(r.dataTable.sortableColumn):\"\"}`,\"data-testid\":`table-header-${p.key}`,children:[p.label,o&&p.sortable&&(0,je.jsx)(Cd,{isActive:i===p.key,children:i===p.key&&l===\"desc\"?(0,je.jsx)(kd.default,{}):(0,je.jsx)(vd.default,{})})]},p.key))})}),(0,je.jsx)(yd,{children:t.length===0?(0,je.jsx)(fn,{\"data-testid\":\"table-empty-row\",children:(0,je.jsx)(wd,{colSpan:e.length,children:a(r.dataTable.noDataAvailable)})}):t.map((p,b)=>(0,je.jsx)(fn,{\"data-testid\":`table-row-${b}`,children:e.map(x=>(0,je.jsx)(mn,{\"data-testid\":`table-cell-${x.key}`,children:x.render?x.render(p[x.key],p):p[x.key]},x.key))},s?s(p,b):b))})]})})};var Sd=L(require(\"@mui/icons-material/ChevronLeft\")),Dd=L(require(\"@mui/icons-material/ChevronRight\"));var uo=require(\"@nuskin/foundation-theme\"),{getGenomeColor:bt}=uo.ColorUtils,Td=(0,uo.styled)(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n margin-top: 24px;\n`,Qr=(0,uo.styled)(\"button\")`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({theme:e,isActive:t})=>t?bt(e,\"A80\"):bt(e,\"N20\")};\n color: ${({theme:e,isActive:t})=>t?\"#ffffff\":bt(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?bt(e,\"A70\"):bt(e,\"N30\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>bt(e,\"A70\")};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n`,ea=(0,uo.styled)(\"span\")`\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>bt(e,\"N70\")};\n margin: 0 8px;\n`,hn=(0,uo.styled)(\"button\")`\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: none;\n background-color: ${({theme:e})=>bt(e,\"N20\")};\n color: ${({theme:e})=>bt(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})=>bt(e,\"N30\")};\n }\n\n &:focus {\n outline: 2px solid ${({theme:e})=>bt(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 Oe=require(\"react/jsx-runtime\"),ut=({currentPage:e,totalPages:t,onPageChange:o,itemsPerPage:n,totalItems:i})=>{let l=()=>{e>1&&o(e-1)},s=()=>{e<t&&o(e+1)},d=(g,k)=>{(g.key===\"Enter\"||g.key===\" \")&&(g.preventDefault(),k())},h=(()=>{if(t<=7)return Array.from({length:t},(k,R)=>R+1);let g=[];return e<=4?g.push(1,2,3,4,5):e>=t-3?g.push(t-4,t-3,t-2,t-1,t):g.push(e-1,e,e+1),g})(),p=n?(e-1)*n+1:null,b=n?Math.min(e*n,i??1/0):null,x=a(r.pagination.goToPage);return(0,Oe.jsxs)(Td,{\"data-testid\":\"pagination\",children:[(0,Oe.jsx)(hn,{onClick:l,onKeyDown:g=>d(g,l),disabled:e===1,\"aria-label\":a(r.pagination.previousPage),\"data-testid\":\"pagination-previous\",type:\"button\",children:(0,Oe.jsx)(Sd.default,{})}),t>7&&e>4&&(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsx)(Qr,{onClick:()=>o(1),isActive:!1,\"aria-label\":`${x} 1`,\"data-testid\":\"pagination-page-1\",type:\"button\",children:\"1\"}),(0,Oe.jsx)(ea,{children:\"...\"})]}),h.map(g=>(0,Oe.jsx)(Qr,{onClick:()=>o(g),isActive:e===g,\"aria-label\":`${x} ${g}`,\"aria-current\":e===g?\"page\":void 0,\"data-testid\":`pagination-page-${g}`,type:\"button\",children:g},g)),t>7&&e<t-3&&(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsx)(ea,{children:\"...\"}),(0,Oe.jsx)(Qr,{onClick:()=>o(t),isActive:!1,\"aria-label\":`${x} ${t}`,\"data-testid\":`pagination-page-${t}`,type:\"button\",children:t})]}),(0,Oe.jsx)(hn,{onClick:s,onKeyDown:g=>d(g,s),disabled:e===t,\"aria-label\":a(r.pagination.nextPage),\"data-testid\":\"pagination-next\",type:\"button\",children:(0,Oe.jsx)(Dd.default,{})}),n&&i&&(0,Oe.jsxs)(ea,{as:\"output\",\"aria-live\":\"polite\",\"data-testid\":\"pagination-page-info\",children:[p,\"-\",b,\" \",a(r.pagination.of),\" \",i]})]})};var Ee=require(\"@mui/material/styles\"),Ae=require(\"@mui/material\"),Pd=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Rd}=Pd.ColorUtils,Fe=(0,Ee.styled)(Ae.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`,ta=(0,Ee.styled)(Ae.Box)`\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>Rd(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`,oa=(0,Ee.styled)(Ae.Box)`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 16px 0;\n gap: 10px;\n flex-wrap: nowrap;\n width: 100%;\n\n @media (max-width: 767px) {\n padding: 8px 0;\n flex-wrap: nowrap;\n align-items: center;\n }\n`,ra=(0,Ee.styled)(Ae.Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0em;\n color: ${({theme:e})=>e.palette.text.primary};\n margin: 0;\n padding: 0;\n\n @media (max-width: 767px) {\n font-size: 28px;\n line-height: 1;\n }\n`,aa=(0,Ee.styled)(Ae.Box)`\n display: flex;\n align-items: center;\n gap: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 13px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.01em;\n color: ${({theme:e,direction:t})=>t===\"up\"?e.palette.success.main:t===\"down\"?e.palette.error.main:e.palette.text.secondary};\n flex-wrap: nowrap;\n white-space: nowrap;\n\n svg {\n font-size: 13px;\n flex-shrink: 0;\n width: 13px;\n height: 13px;\n }\n\n span {\n display: inline;\n line-height: 1;\n }\n\n @media (max-width: 767px) {\n font-size: 13px;\n line-height: 1;\n flex-wrap: nowrap;\n\n svg {\n font-size: 13px;\n width: 13px;\n height: 13px;\n }\n }\n`,eh=(0,Ee.styled)(Ae.Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>e.palette.text.secondary};\n white-space: nowrap;\n\n @media (max-width: 767px) {\n font-size: 12px;\n line-height: 1.3;\n }\n`,na=(0,Ee.styled)(Ae.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`,to=(0,Ee.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`,th=(0,Ee.styled)(Ae.Box)`\n width: 90%;\n height: 450px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 250px;\n margin-bottom: 0;\n }\n`,oo=(0,Ee.styled)(Ae.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n\n ${({withCard:e=!0,theme:t})=>e&&`\n padding: 20px;\n background-color: ${Rd(t,\"N20\")};\n border-radius: 8px;\n box-shadow: ${t.shadows[1]};\n\n @media (max-width: 767px) {\n padding: 16px;\n }\n `}\n`,oh=(0,Ee.styled)(Ae.Box)`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n`,ro=(0,Ee.styled)(Ae.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`,Md=(0,Ee.styled)(Ae.Typography)`\n font-weight: 600;\n font-size: 14px;\n`,Od=(0,Ee.styled)(Ae.Typography)`\n font-size: 13px;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Fd=(0,Ee.styled)(Ae.Typography)`\n font-size: 13px;\n`,Ld=(0,Ee.styled)(Ae.Typography)`\n font-size: 13px;\n color: ${({theme:e,status:t})=>t===\"Active\"?e.palette.success.main:e.palette.warning.main};\n`;var ze=require(\"@mui/material/styles\"),Le=require(\"@mui/material\"),$d=require(\"@nuskin/foundation-theme\"),{getGenomeColor:xn}=$d.ColorUtils,Nd=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`,Id=(0,ze.styled)(Le.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n`,Vd=(0,ze.styled)(Le.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,ia=(0,ze.styled)(Le.Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({theme:e})=>xn(e,\"N70\")};\n`,Ed=(0,ze.styled)(Le.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Ad=(0,ze.styled)(Le.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,zd=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>xn(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,Bd=(0,ze.styled)(Le.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n`,Hd=(0,ze.styled)(Le.Typography)`\n font-size: 1rem;\n font-weight: 700;\n color: ${({theme:e})=>e.palette.primary.main};\n min-width: 24px;\n`,Wd=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,_d=(0,ze.styled)(Le.Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n`,Ud=(0,ze.styled)(Le.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Kd=(0,ze.styled)(Le.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`,la=(0,ze.styled)(Le.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`,sa=(0,ze.styled)(Le.Typography)`\n font-size: 0.625rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n text-transform: uppercase;\n`,da=(0,ze.styled)(Le.Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({theme:e})=>xn(e,\"N70\")};\n`;var Gd=L(require(\"@mui/material/useMediaQuery\")),vu=\"(max-width:767px)\";function Ft(){return(0,Gd.default)(vu,{noSsr:!0})}var j=require(\"react/jsx-runtime\");function ku(e){return{rank:e.rank,name:e.name,sku:`${a(r.fullView.products.skuPrefix)}-${e.id.replace(\"prod-\",\"\").padStart(3,\"0\")}`,units:e.unitsSold,revenue:e.revenue,volume:e.volume}}var Ro=({products:e,dateRange:t,market:o,productSort:n,markets:i,isLoading:l=!1,onBack:s,onDateRangeChange:d,onMarketChange:f,onProductSortChange:h})=>{let[p,b]=(0,gt.useState)(1),[x,g]=(0,gt.useState)(n===\"revenue\"?\"revenue\":\"units\"),[k,R]=(0,gt.useState)(\"desc\"),m=10,u=Ft(),y=gt.default.useCallback(()=>s?.(),[s]),C=lt(i),M=gt.default.useMemo(()=>[Rt(t,r),Mt(o,C,r),{key:\"sort\",label:a(r.filter.productSort.label),value:n,options:[{value:\"units\",label:a(r.defaults.units)},{value:\"revenue\",label:a(r.defaults.revenue)},{value:\"volume\",label:a(r.defaults.volume)}]}],[t,o,C,n]),V=gt.default.useCallback((v,F)=>{v===\"dateRange\"?d?.(F):v===\"market\"?f?.(F):v===\"sort\"&&(h?.(F),b(1))},[d,f,h]),O=gt.default.useCallback((v,F)=>{g(v),R(F),b(1)},[]),A=gt.default.useMemo(()=>e.map(ku),[e]),W=gt.default.useMemo(()=>[...A].sort((v,F)=>{let T=v[x],B=F[x];return k===\"asc\"?T-B:B-T}),[A,x,k]),{totalPages:X,pageItems:E}=St(W,p,m),c=e[0]?.currencyCode,w=gt.default.useMemo(()=>[{key:\"rank\",label:a(r.fullView.products.columns.rank),sortable:!0},{key:\"name\",label:a(r.fullView.products.columns.product),sortable:!0,render:(v,F)=>(0,j.jsxs)(Nd,{children:[(0,j.jsx)(Id,{children:F.name}),(0,j.jsx)(Vd,{children:F.sku})]})},{key:\"units\",label:a(r.fullView.products.columns.unitsSold),sortable:!0,render:v=>(0,j.jsx)(ia,{children:Number(v).toLocaleString()})},{key:\"revenue\",label:a(r.defaults.revenue),sortable:!0,render:v=>(0,j.jsx)(ia,{children:te(Number(v),c,at(o))})},{key:\"volume\",label:a(r.fullView.products.columns.volume),sortable:!0,render:v=>(0,j.jsx)(ia,{children:Number(v).toLocaleString()})}],[c,o]);return l?(0,j.jsxs)(Fe,{\"data-testid\":\"products-full-view\",children:[(0,j.jsx)(ye,{title:a(r.widget.topProducts.title),dateRange:De(t),onBack:y,filters:M,onFilterChange:V}),(0,j.jsx)(zl,{})]}):e.length===0?(0,j.jsxs)(Fe,{\"data-testid\":\"products-full-view\",children:[(0,j.jsx)(ye,{title:a(r.widget.topProducts.title),dateRange:De(t),onBack:y,filters:M,onFilterChange:V}),(0,j.jsx)(ro,{\"data-testid\":\"products-fullview-empty\",children:a(r.fullView.products.noProducts)})]}):(0,j.jsxs)(Fe,{\"data-testid\":\"products-full-view\",children:[(0,j.jsx)(ye,{title:a(r.widget.topProducts.title),dateRange:De(t),onBack:y,filters:M,onFilterChange:V}),u?(0,j.jsx)(Ed,{\"data-testid\":\"products-fullview-mobile-cards\",children:E.map(v=>(0,j.jsxs)(zd,{children:[(0,j.jsxs)(Bd,{children:[(0,j.jsxs)(Hd,{children:[\"#\",v.rank]}),(0,j.jsxs)(Wd,{children:[(0,j.jsx)(_d,{children:v.name}),(0,j.jsx)(Ud,{children:v.sku})]})]}),(0,j.jsxs)(Kd,{children:[(0,j.jsxs)(la,{children:[(0,j.jsx)(sa,{children:a(r.defaults.units)}),(0,j.jsx)(da,{children:v.units.toLocaleString()})]}),(0,j.jsxs)(la,{children:[(0,j.jsx)(sa,{children:a(r.defaults.revenue)}),(0,j.jsx)(da,{children:te(v.revenue,c,at(o))})]}),(0,j.jsxs)(la,{children:[(0,j.jsx)(sa,{children:a(r.defaults.volume)}),(0,j.jsx)(da,{children:v.volume.toLocaleString()})]})]})]},v.rank))}):(0,j.jsx)(Ad,{\"data-testid\":\"products-fullview-desktop-table\",children:(0,j.jsx)(ct,{columns:w,data:E,sortable:!0,onSort:O,sortColumn:x,sortDirection:k,getRowKey:v=>v.rank})}),X>1&&(0,j.jsx)(ut,{currentPage:p,totalPages:X,onPageChange:b,itemsPerPage:m,totalItems:W.length})]})};var _e=L(require(\"react\")),Ye=require(\"recharts\"),up=L(require(\"@mui/icons-material/ArrowUpward\")),gp=L(require(\"@mui/icons-material/ArrowDownward\"));var Tu=\"rate__\",Su={retail:\"#2e7d32\",member:\"#ed6c02\"},jd=[\"#1976d2\",\"#9c27b0\",\"#00897b\",\"#c2185b\"];function bn(e){return`${Tu}${e}`}function yn(e,t){return Su[e.toLowerCase()]??jd[t%jd.length]}function Yd(e){let t=[];return e.forEach(o=>{Object.keys(o.ratesByPriceType??{}).forEach(n=>{t.includes(n)||t.push(n)})}),t.sort((o,n)=>o.localeCompare(n))}function wn(e,t){let o={};return t.forEach(n=>{o[bn(n)]=e.ratesByPriceType?.[n]??0}),{...e,...o}}var fe=require(\"@mui/material/styles\"),ve=require(\"@mui/material\"),Jd=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Du}=Jd.ColorUtils,Zd=(0,fe.styled)(ve.Box)`\n width: 100%;\n height: 370px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`,Xd=(0,fe.styled)(ve.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})=>Du(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n }\n`,qd=(0,fe.styled)(ve.Box)`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`,Qd=(0,fe.styled)(ve.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`,ep=(0,fe.styled)(ve.Typography)`\n font-size: 1rem;\n font-weight: 600;\n`,tp=(0,fe.styled)(ve.Typography)`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,op=(0,fe.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`,rp=(0,fe.styled)(ve.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`,pa=(0,fe.styled)(ve.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n text-align: center;\n`,ca=(0,fe.styled)(ve.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,ua=(0,fe.styled)(ve.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,ap=(0,fe.styled)(ve.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,np=(0,fe.styled)(ve.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,ip=(0,fe.styled)(ve.Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`,lp=(0,fe.styled)(ve.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`,Cn=(0,fe.styled)(ve.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({$color:e})=>e??\"inherit\"};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\n }\n`,yh=(0,fe.styled)(ve.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`,sp=(0,fe.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`,dp=(0,fe.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0;\n`,pp=(0,fe.styled)(\"span\")`\n margin-left: 2px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.01em;\n color: #5f5f5f;\n`,cp=(0,fe.styled)(ve.Box)`\n display: flex;\n align-items: center;\n gap: 0;\n flex-wrap: wrap;\n`;var N=require(\"react/jsx-runtime\"),Mo=({conversionData:e,priceTypeTrend:t,orders:o,summaryRate:n,summaryChangePct:i,dateRange:l,market:s,conversionFilter:d,markets:f,isLoading:h=!1,onBack:p,onDateRangeChange:b,onMarketChange:x,onConversionFilterChange:g})=>{let[k,R]=(0,_e.useState)(1),m=10,u=Ft(),y=_e.default.useCallback(()=>p?.(),[p]),C=lt(f),M=_e.default.useMemo(()=>Ir(e,d),[e,d]),V=_e.default.useMemo(()=>d===\"all\"?Yd(t??[]):[],[d,t]),O=_e.default.useMemo(()=>V.length>0?(t??[]).map(P=>wn(P,V)):M.map(P=>wn(P,V)),[V,t,M]),A=_e.default.useMemo(()=>typeof n==\"number\"&&Number.isFinite(n)?n:M.at(-1)?.rate??0,[n,M]),W=_e.default.useMemo(()=>{if(i!==void 0){if(i===null)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let J=\"neutral\";return i>0?J=\"up\":i<0&&(J=\"down\"),{direction:J,value:`${i>=0?\"+\":\"\"}${i.toFixed(1)}%`}}if(M.length<2)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let P=M.at(-1)?.rate??0,Q=M[0].rate;if(Q===0)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let oe=(P-Q)/Q*100;if(Math.abs(oe)<.1)return{direction:\"neutral\",value:a(r.defaults.zeroTrend)};let Ze=\"neutral\";return oe>0?Ze=\"up\":oe<0&&(Ze=\"down\"),{direction:Ze,value:`${oe>=0?\"+\":\"\"}${oe.toFixed(1)}%`}},[i,M]),X=_e.default.useCallback(P=>P===\"retail\"?a(r.filter.conversionType.retail):P===\"member\"?a(r.filter.conversionType.member):a(r.defaults.all),[]),E=_e.default.useMemo(()=>X(d),[d,X]),c=_e.default.useMemo(()=>[Rt(l,r),Mt(s,C,r),{key:\"customerType\",label:a(r.filter.signupView.label),value:d,options:[{value:\"all\",label:a(r.defaults.all)},{value:\"retail\",label:a(r.filter.conversionType.retail)},{value:\"member\",label:a(r.filter.conversionType.member)}]}],[d,l,s,C]),w=_e.default.useCallback((P,Q)=>{P===\"dateRange\"?b?.(Q):P===\"market\"?x?.(Q):P===\"customerType\"&&(g?.(Q),R(1))},[g,b,x]),v=_e.default.useMemo(()=>d===\"all\"?o:o.filter(P=>P.priceType?.toLowerCase()===d),[o,d]),{totalPages:F,pageItems:T}=St(v,k,m),B=_e.default.useMemo(()=>[{key:\"orderId\",label:a(r.fullView.conversionRate.columns.orderId),sortable:!0,render:P=>(0,N.jsx)(sp,{children:P})},{key:\"date\",label:a(r.defaults.date),sortable:!0},{key:\"customerName\",label:a(r.fullView.conversionRate.columns.customer),sortable:!0},{key:\"customerType\",label:a(r.defaults.type),sortable:!0},{key:\"items\",label:a(r.fullView.conversionRate.columns.items),sortable:!0},{key:\"total\",label:a(r.fullView.conversionRate.columns.total),sortable:!0,render:(P,Q)=>te(Number(P),Q.currencyCode,at(s),2)},{key:\"bv\",label:a(r.fullView.conversionRate.columns.bv),sortable:!0}],[s]),pe=_e.default.useCallback(()=>d===\"retail\"?\"#2e7d32\":d===\"member\"?\"#ed6c02\":\"#1976d2\",[d]);return h?(0,N.jsxs)(Fe,{\"data-testid\":\"conversion-rate-full-view\",children:[(0,N.jsx)(ye,{title:a(r.defaults.conversionRate),dateRange:De(l),onBack:y,filters:c,onFilterChange:w}),(0,N.jsx)(Xt,{})]}):(0,N.jsxs)(Fe,{\"data-testid\":\"conversion-rate-full-view\",children:[(0,N.jsx)(ye,{title:a(r.defaults.conversionRate),dateRange:De(l),onBack:y,filters:c,onFilterChange:w}),(0,N.jsxs)(ta,{\"data-testid\":\"conversion-fullview-metric-chart\",children:[(0,N.jsx)(oa,{children:(0,N.jsxs)(cp,{children:[(0,N.jsxs)(ra,{\"data-testid\":\"conversion-rate-value\",style:{marginRight:\"6px\"},children:[A.toFixed(1),\"%\"]}),(0,N.jsxs)(aa,{direction:W.direction,\"data-testid\":\"conversion-rate-trend\",children:[W.direction===\"up\"&&(0,N.jsx)(up.default,{}),W.direction===\"down\"&&(0,N.jsx)(gp.default,{}),(0,N.jsx)(dp,{children:W.value}),(0,N.jsx)(pp,{children:Dt(l)})]})]})}),(0,N.jsx)(na,{children:(0,N.jsxs)(ip,{children:[(0,N.jsx)(Zd,{\"data-testid\":\"conversion-fullview-chart\",children:(0,N.jsx)(Ye.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,N.jsxs)(Ye.LineChart,{data:O,margin:{top:10,right:10,left:0,bottom:0},children:[(0,N.jsx)(Ye.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,N.jsx)(Ye.XAxis,{dataKey:\"date\"}),(0,N.jsx)(Ye.YAxis,{tickFormatter:P=>`${P}%`,domain:[0,\"auto\"]}),(0,N.jsx)(Ye.Tooltip,{formatter:P=>typeof P==\"number\"?`${P.toFixed(2)}%`:typeof P==\"string\"?P:a(r.fullView.conversionRate.notAvailable)}),V.length>0?V.map((P,Q)=>(0,N.jsx)(Ye.Line,{type:\"monotone\",dataKey:bn(P),stroke:yn(P,Q),strokeWidth:2,name:P,dot:!1},P)):(0,N.jsx)(Ye.Line,{type:\"monotone\",dataKey:\"rate\",stroke:pe(),strokeWidth:2,name:`${a(r.defaults.conversionRate)} (${E})`,dot:!1})]})})}),(0,N.jsx)(lp,{children:V.length>0?V.map((P,Q)=>(0,N.jsx)(Cn,{$color:yn(P,Q),children:P},P)):(0,N.jsx)(Cn,{$color:pe(),children:`${a(r.defaults.conversionRate)} (${E})`})})]})})]}),(0,N.jsxs)(oo,{\"data-testid\":\"conversion-fullview-table-section\",children:[(0,N.jsxs)(to,{\"data-testid\":\"conversion-fullview-table-title\",children:[a(r.fullView.conversionRate.orderDetailsTitle),\" (\",v.length,\")\"]}),u?(0,N.jsx)(ap,{\"data-testid\":\"conversion-fullview-mobile-orders\",children:T.map(P=>(0,N.jsxs)(Xd,{children:[(0,N.jsxs)(qd,{children:[(0,N.jsxs)(Qd,{children:[(0,N.jsx)(ep,{children:P.customerName}),(0,N.jsx)(tp,{children:P.date})]}),(0,N.jsx)(op,{children:P.orderId})]}),(0,N.jsxs)(rp,{children:[(0,N.jsxs)(pa,{children:[(0,N.jsx)(ca,{children:a(r.fullView.conversionRate.columns.items)}),(0,N.jsx)(ua,{children:P.items})]}),(0,N.jsxs)(pa,{children:[(0,N.jsx)(ca,{children:a(r.fullView.conversionRate.columns.total)}),(0,N.jsxs)(ua,{children:[\"$\",P.total.toFixed(2)]})]}),(0,N.jsxs)(pa,{children:[(0,N.jsx)(ca,{children:a(r.fullView.conversionRate.columns.totalSv)}),(0,N.jsx)(ua,{children:P.bv})]})]})]},P.orderId))}):(0,N.jsx)(np,{\"data-testid\":\"conversion-fullview-desktop-table\",children:(0,N.jsx)(ct,{columns:B,data:T,getRowKey:P=>P.orderId})}),F>1&&(0,N.jsx)(ut,{currentPage:k,totalPages:F,onPageChange:R,itemsPerPage:m,totalItems:v.length})]})]})};var $t=L(require(\"react\")),Tp=require(\"@mui/material\"),we=require(\"recharts\"),Sp=L(require(\"@mui/icons-material/TrendingUp\")),Dp=L(require(\"@mui/icons-material/TrendingDown\"));var ft=require(\"@mui/material/styles\"),Lt=require(\"@mui/material\"),fp=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Pu}=fp.ColorUtils,mp=(0,ft.styled)(Lt.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,hp=(0,ft.styled)(Lt.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,xp=(0,ft.styled)(Lt.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})=>Pu(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n }\n`,bp=(0,ft.styled)(Lt.Box)`\n width: 100%;\n height: 320px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`,yp=(0,ft.styled)(Lt.Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({theme:e})=>e.palette.text.secondary};\n white-space: nowrap;\n`,wp=(0,ft.styled)(Lt.Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`,er=(0,ft.styled)(Lt.Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`,ao=(0,ft.styled)(Lt.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({theme:e})=>e.palette.text.secondary};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\n }\n`,Cp=(0,ft.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`,vp=(0,ft.styled)(\"span\")`\n font-weight: 600;\n line-height: 1;\n`,kp=(0,ft.styled)(\"span\")`\n font-weight: 400;\n line-height: 1;\n`;var D=require(\"react/jsx-runtime\"),ot={total:\"#3B82F6\",members:\"#7B92A8\",retail:\"#A3B5C7\",brandAffiliates:\"#5F7388\"};function no(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}function Ru(e){if(e==null||typeof e!=\"object\")return[];if(Array.isArray(e))return e;let t=e;return Array.isArray(t.daily)?t.daily.map(o=>({date:String(o.date??\"\"),total:no(o.total),members:no(o.members),retail:no(o.retail),brandAffiliates:no(o.brandAffiliates??o.brandAffiliate??o.brand_affiliates??o.brand_affiliate)})):[]}var ga=({signupData:e,signups:t,dateRange:o,market:n,signupView:i,markets:l,isLoading:s=!1,onBack:d,onDateRangeChange:f,onMarketChange:h,onSignupViewChange:p})=>{let[b,x]=(0,$t.useState)(1),g=10,k=Ft(),R=$t.default.useCallback(()=>d?.(),[d]),m=lt(l),u=$t.default.useMemo(()=>Ru(e).map(c=>{let w=c,v=no(w.members),F=no(w.retail),T=no(w.brandAffiliates??w.brandAffiliate??w.brand_affiliates??w.brand_affiliate),B=no(w.total??w.all??w.signupTotal??w.value);return{...c,total:B>0?B:v+F+T,members:v,retail:F,brandAffiliates:T}}),[e]),y=$t.default.useMemo(()=>{if(u.length===0)return 0;let E=u[u.length-1];return Qt(E,i)},[u,i]),C=$t.default.useMemo(()=>{if(u.length<2)return{direction:\"neutral\",absoluteChange:0,percentageChange:a(r.defaults.zeroTrend)};let E=Qt(u[0],i),c=Qt(u[u.length-1],i);if(E<=0)return{direction:\"neutral\",absoluteChange:0,percentageChange:a(r.defaults.zeroTrend)};let w=c-E,v=w/E*100,F=\"neutral\";return v>0?F=\"up\":v<0&&(F=\"down\"),{direction:F,absoluteChange:Math.round(w),percentageChange:`${v>=0?\"+\":\"\"}${v.toFixed(1)}%`}},[u,i,r]),M=u.length>0,V=$t.default.useMemo(()=>[Rt(o,r),Mt(n,m,r),{key:\"signupView\",label:a(r.filter.signupView.label),value:i,options:[{value:\"all\",label:a(r.defaults.all)},{value:\"members\",label:a(r.defaults.members)},{value:\"retail\",label:a(r.defaults.retail)},{value:\"brandAffiliates\",label:a(r.defaults.brandAffiliates)}]}],[o,n,m,i]),O=$t.default.useCallback((E,c)=>{E===\"dateRange\"?f?.(c):E===\"market\"?h?.(c):E===\"signupView\"&&(p?.(c),x(1))},[f,h,p]),{totalPages:A,pageItems:W}=St(t,b,g),X=$t.default.useMemo(()=>[{key:\"id\",label:a(r.fullView.signups.columns.id),sortable:!0},{key:\"name\",label:a(r.fullView.signups.columns.name),sortable:!0,render:E=>(0,D.jsx)(Cp,{children:E})},{key:\"date\",label:a(r.defaults.date),sortable:!0},{key:\"type\",label:a(r.defaults.type),sortable:!0},{key:\"email\",label:a(r.fullView.signups.columns.email),sortable:!0},{key:\"status\",label:a(r.fullView.signups.columns.status),sortable:!0}],[]);return s?(0,D.jsxs)(Fe,{\"data-testid\":\"signups-full-view\",children:[(0,D.jsx)(ye,{title:a(r.widget.signups.title),dateRange:De(o),onBack:R,filters:V,onFilterChange:O}),(0,D.jsx)(Xt,{})]}):(0,D.jsxs)(Fe,{\"data-testid\":\"signups-full-view\",children:[(0,D.jsx)(ye,{title:a(r.widget.signups.title),dateRange:De(o),onBack:R,filters:V,onFilterChange:O}),(0,D.jsxs)(ta,{\"data-testid\":\"signups-fullview-metric-chart\",children:[(0,D.jsxs)(oa,{children:[(0,D.jsx)(ra,{\"data-testid\":\"signups-total\",children:y.toLocaleString()}),(0,D.jsxs)(aa,{direction:C.direction,children:[C.direction===\"up\"&&(0,D.jsx)(Sp.default,{}),C.direction===\"down\"&&(0,D.jsx)(Dp.default,{}),C.direction!==\"neutral\"&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(vp,{children:[C.absoluteChange>0?\"+\":\"\",C.absoluteChange]}),(0,D.jsx)(kp,{children:C.percentageChange})]}),C.direction===\"neutral\"&&(0,D.jsx)(\"span\",{children:C.percentageChange})]}),(0,D.jsx)(yp,{children:Dt(o)})]}),(0,D.jsx)(na,{children:M?(0,D.jsxs)(wp,{children:[(0,D.jsx)(bp,{\"data-testid\":\"signups-fullview-chart\",children:(0,D.jsx)(we.ResponsiveContainer,{width:\"100%\",height:\"100%\",minHeight:240,children:(0,D.jsxs)(we.LineChart,{data:u,children:[(0,D.jsx)(we.CartesianGrid,{strokeDasharray:\"3 3\"}),(0,D.jsx)(we.XAxis,{dataKey:\"date\"}),(0,D.jsx)(we.YAxis,{}),(0,D.jsx)(we.Tooltip,{}),i===\"all\"&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"total\",stroke:ot.total,strokeWidth:2,name:a(r.widget.signups.total),dot:{r:2},connectNulls:!0}),(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"members\",stroke:ot.members,strokeWidth:2,name:a(r.defaults.members),dot:{r:2},connectNulls:!0}),(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"retail\",stroke:ot.retail,strokeWidth:2,name:a(r.defaults.retail),dot:{r:2},connectNulls:!0}),(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:ot.brandAffiliates,strokeWidth:2,name:a(r.defaults.brandAffiliates),dot:{r:2},connectNulls:!0})]}),i===\"members\"&&(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"members\",stroke:ot.members,strokeWidth:2,name:a(r.defaults.members),dot:{r:2},connectNulls:!0}),i===\"retail\"&&(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"retail\",stroke:ot.retail,strokeWidth:2,name:a(r.defaults.retail),dot:{r:2},connectNulls:!0}),i===\"brandAffiliates\"&&(0,D.jsx)(we.Line,{type:\"monotone\",dataKey:\"brandAffiliates\",stroke:ot.brandAffiliates,strokeWidth:2,name:a(r.defaults.brandAffiliates),dot:{r:2},connectNulls:!0})]})})}),(0,D.jsxs)(Tp.Box,{children:[i===\"all\"&&(0,D.jsxs)(er,{children:[(0,D.jsx)(ao,{style:{color:ot.total},children:a(r.widget.signups.total)}),(0,D.jsx)(ao,{style:{color:ot.members},children:a(r.defaults.members)}),(0,D.jsx)(ao,{style:{color:ot.retail},children:a(r.defaults.retail)}),(0,D.jsx)(ao,{style:{color:ot.brandAffiliates},children:a(r.defaults.brandAffiliates)})]}),i===\"members\"&&(0,D.jsx)(er,{children:(0,D.jsx)(ao,{style:{color:ot.members},children:a(r.defaults.members)})}),i===\"retail\"&&(0,D.jsx)(er,{children:(0,D.jsx)(ao,{style:{color:ot.retail},children:a(r.defaults.retail)})}),i===\"brandAffiliates\"&&(0,D.jsx)(er,{children:(0,D.jsx)(ao,{style:{color:ot.brandAffiliates},children:a(r.defaults.brandAffiliates)})})]})]}):(0,D.jsx)(ro,{\"data-testid\":\"signups-fullview-chart-empty\",children:a(r.widget.signups.noTrendData)})})]}),(0,D.jsxs)(oo,{\"data-testid\":\"signups-fullview-table-section\",children:[(0,D.jsx)(to,{\"data-testid\":\"signups-fullview-table-title\",children:`${a(r.fullView.signups.detailsTitle)} (${t.length})`}),k?(0,D.jsx)(mp,{\"data-testid\":\"signups-fullview-mobile-cards\",children:W.map(E=>(0,D.jsxs)(xp,{children:[(0,D.jsx)(Md,{children:E.name}),(0,D.jsxs)(Od,{children:[E.date,\" - \",E.type]}),(0,D.jsx)(Fd,{children:E.email}),(0,D.jsx)(Ld,{status:E.status,children:E.status})]},E.id))}):(0,D.jsx)(hp,{\"data-testid\":\"signups-fullview-desktop-table\",children:(0,D.jsx)(ct,{columns:X,data:W,getRowKey:E=>E.id})}),A>1&&(0,D.jsx)(ut,{currentPage:b,totalPages:A,onPageChange:x,itemsPerPage:g,totalItems:t.length})]})]})};var Nt=L(require(\"react\")),It=require(\"recharts\"),jp=L(require(\"@mui/icons-material/TrendingUp\")),Yp=L(require(\"@mui/icons-material/TrendingDown\"));var Gt=require(\"@nuskin/foundation-theme\"),$e=require(\"@mui/material/styles\"),Ne=require(\"@mui/material\"),{getGenomeColor:vn}=Gt.ColorUtils,fa=(0,Gt.styled)(\"div\")`\n display: flex;\n align-items: center;\n gap: 8px;\n`,Pp=(0,Gt.styled)(\"div\")`\n flex: 1;\n`,Rp=(0,Gt.styled)(\"span\")`\n font-weight: 600;\n`,Mp=(0,Gt.styled)(\"span\")`\n font-size: 0.875rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Op=(0,Gt.styled)(\"span\")`\n font-weight: 600;\n`,Fp=(0,$e.styled)(Ne.Box)`\n display: flex;\n gap: 32px;\n padding: 24px;\n background-color: ${({theme:e})=>vn(e,\"N20\")};\n border-radius: 8px;\n box-shadow: ${({theme:e})=>e.shadows[1]};\n align-items: center;\n justify-content: center;\n width: 100%;\n box-sizing: border-box;\n margin: 0 auto;\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n align-items: flex-start;\n justify-content: flex-start;\n }\n`,Lp=(0,$e.styled)(Ne.Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n\n @media (max-width: 767px) {\n width: 100%;\n height: 220px;\n }\n`,$p=(0,$e.styled)(Ne.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`,Np=(0,$e.styled)(Ne.Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,Ip=(0,$e.styled)(Ne.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`,Vp=(0,$e.styled)(Ne.Typography)`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\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\"?\"#2e7d32\":e===\"down\"?\"#d32f2f\":t.palette.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n`,Ep=(0,$e.styled)(Ne.Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 0;\n`,Ap=(0,$e.styled)(Ne.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n white-space: nowrap;\n min-width: 0;\n\n &:hover {\n background-color: ${({theme:e})=>vn(e,\"N30\")};\n }\n`,ma=(0,$e.styled)(Ne.Box)`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({dotColor:e})=>e};\n flex-shrink: 0;\n`,Zh=(0,$e.styled)(Ne.Box)`\n display: none;\n`,zp=(0,$e.styled)(Ne.Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n flex-shrink: 0;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n`,Bp=(0,$e.styled)(Ne.Typography)`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n flex-shrink: 0;\n white-space: nowrap;\n`,Hp=(0,$e.styled)(Ne.Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n flex-shrink: 0;\n color: ${({theme:e})=>e.palette.text.primary};\n`,Wp=(0,$e.styled)(Ne.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,_p=(0,$e.styled)(Ne.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Up=(0,$e.styled)(Ne.Box)`\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>vn(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,Kp=(0,$e.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: 14px;\n height: 14px;\n font-size: 14px;\n }\n`,Gp=(0,Gt.styled)(\"span\")`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`;var z=require(\"react/jsx-runtime\"),ha=({categories:e,dateRange:t,market:o,categorySort:n,summaryChangePct:i,markets:l,isLoading:s=!1,onBack:d,onDateRangeChange:f,onMarketChange:h,onCategorySortChange:p})=>{let[b,x]=(0,Nt.useState)(1),g=10,k=Ft(),R=Nt.default.useCallback(()=>d?.(),[d]),m=lt(l),u=Nt.default.useMemo(()=>[Rt(t,r),Mt(o,m,r),{key:\"sort\",label:a(r.filter.productSort.label),value:n,options:[{value:\"revenue\",label:a(r.defaults.byRevenue)},{value:\"trend\",label:a(r.defaults.byTrend)}]}],[n,t,o,m]),y=Nt.default.useCallback((T,B)=>{T===\"dateRange\"?f?.(B):T===\"market\"?h?.(B):T===\"sort\"&&(p?.(B),x(1))},[p,f,h]),C=T=>Rr(T,{fontSize:\"12\",fontWeight:\"700\"}),M=T=>T===\"up\"?(0,z.jsx)(jp.default,{sx:{fontSize:\"16px\"},\"aria-hidden\":\"true\"}):T===\"down\"?(0,z.jsx)(Yp.default,{sx:{fontSize:\"16px\"},\"aria-hidden\":\"true\"}):null,V=T=>{if(!T)return\"neutral\";let B=Number.parseFloat(T);return Number.isNaN(B)?\"neutral\":B>0?\"up\":B<0?\"down\":\"neutral\"},O=Nt.default.useMemo(()=>[...e].sort((T,B)=>n===\"revenue\"?B.revenue-T.revenue:(B.volume??0)-(T.volume??0)),[e,n]),{totalRevenue:A,totalRevenueTrendDirection:W,totalRevenueTrend:X}=Nt.default.useMemo(()=>{let T=O.reduce((P,Q)=>P+Q.revenue,0),B,pe;if(i!=null)Math.abs(i)<.1?(pe=\"0%\",B=\"neutral\"):(B=i>0?\"up\":\"down\",pe=`${i>0?\"+\":\"\"}${i.toFixed(1)}%`);else{let{direction:P,formatted:Q}=qt(O,oe=>oe.revenue,oe=>oe.trend?.revenue);B=P,pe=Q}return{totalRevenue:T,totalRevenueTrendDirection:B,totalRevenueTrend:pe}},[O,i]),E=Nt.default.useMemo(()=>O.slice(0,5),[O]),{totalPages:c,pageItems:w}=St(O,b,g),v=O[0]?.currencyCode,F=Nt.default.useMemo(()=>[{key:\"name\",label:a(r.fullView.categories.columns.category),sortable:!0,render:(B,pe)=>(0,z.jsxs)(fa,{children:[(0,z.jsx)(ma,{dotColor:pe.color}),(0,z.jsx)(Gp,{children:Yo(pe.name)})]})},{key:\"revenue\",label:a(r.defaults.revenue),sortable:!0,render:(B,pe)=>te(Number(B),pe.currencyCode,at(o))},{key:\"volume\",label:a(r.defaults.volume),sortable:!0,render:B=>`${Number(B??0).toLocaleString()} ${a(r.defaults.dcSv)}`},{key:\"percentage\",label:a(r.fullView.categories.columns.percentOfTotal),sortable:!0,render:B=>`${Number(B)}%`}],[v,o]);return s?(0,z.jsxs)(Fe,{\"data-testid\":\"categories-full-view\",children:[(0,z.jsx)(ye,{title:a(r.widget.topCategories.title),dateRange:De(t),onBack:R,filters:u,onFilterChange:y}),(0,z.jsx)(Xt,{})]}):e.length===0?(0,z.jsxs)(Fe,{\"data-testid\":\"categories-full-view\",children:[(0,z.jsx)(ye,{title:a(r.widget.topCategories.title),dateRange:De(t),onBack:R,filters:u,onFilterChange:y}),(0,z.jsx)(ro,{\"data-testid\":\"categories-fullview-empty\",children:a(r.fullView.categories.noCategoryData)})]}):(0,z.jsxs)(Fe,{\"data-testid\":\"categories-full-view\",children:[(0,z.jsx)(ye,{title:a(r.widget.topCategories.title),dateRange:De(t),onBack:R,filters:u,onFilterChange:y}),(0,z.jsxs)(Fp,{\"data-testid\":\"categories-fullview-top-section\",children:[(0,z.jsxs)(Lp,{\"data-testid\":\"categories-fullview-chart\",children:[(0,z.jsx)(It.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,z.jsxs)(It.PieChart,{children:[(0,z.jsx)(It.Pie,{data:O,cx:\"50%\",cy:\"50%\",innerRadius:\"50%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,label:C,labelLine:!1,children:O.map(T=>(0,z.jsx)(It.Cell,{fill:T.color},`cell-${T.id}`))}),(0,z.jsx)(It.Tooltip,{formatter:T=>te(T,v)})]})}),(0,z.jsxs)($p,{\"data-testid\":\"categories-fullview-donut-center\",children:[(0,z.jsx)(Np,{children:a(r.stats.revenue)}),(0,z.jsx)(Ip,{children:te(A,v)}),(0,z.jsxs)(Vp,{direction:W,children:[M(W),(0,z.jsx)(\"span\",{children:X})]})]})]}),(0,z.jsx)(Ep,{\"data-testid\":\"categories-fullview-summary\",children:E.map(T=>(0,z.jsxs)(Ap,{children:[(0,z.jsx)(ma,{dotColor:T.color}),(0,z.jsx)(zp,{children:Yo(T.name)}),(0,z.jsx)(Bp,{children:te(T.revenue,T.currencyCode)}),(0,z.jsxs)(Hp,{children:[\"(\",T.percentage,\"%)\"]}),T.trend?.revenue?(0,z.jsx)(Kp,{direction:V(T.trend.revenue),children:M(V(T.trend.revenue))}):null]},T.id))})]}),(0,z.jsxs)(oo,{\"data-testid\":\"categories-fullview-table-section\",children:[(0,z.jsxs)(to,{\"data-testid\":\"categories-fullview-table-title\",children:[a(r.fullView.categories.allCategoriesTitle),\" (\",O.length,\")\"]}),k?(0,z.jsx)(_p,{children:w.map(T=>(0,z.jsxs)(Up,{children:[(0,z.jsx)(ma,{dotColor:T.color}),(0,z.jsxs)(Pp,{children:[(0,z.jsx)(Rp,{children:T.name}),(0,z.jsx)(Mp,{children:te(T.revenue,T.currencyCode)})]}),(0,z.jsxs)(Op,{children:[T.percentage,\"%\"]})]},T.id))}):(0,z.jsx)(Wp,{children:(0,z.jsx)(ct,{columns:F,data:w,sortable:!0,getRowKey:T=>T.id})}),c>1&&(0,z.jsx)(ut,{currentPage:b,totalPages:c,onPageChange:x,itemsPerPage:g,totalItems:O.length})]})]})};var kn=L(require(\"react\"));function go(e){kn.default.useEffect(()=>{if(e!==void 0)return Ko(e),()=>{Ko(void 0)}},[e])}var Jp=({translate:e,children:t})=>(go(e),t??null);function Zp(){return kn.default.useCallback(e=>Qe(e),[])}var Oo=require(\"react/jsx-runtime\"),Mu=\"shoppingDashboardView\",Ou=[],Fu=[],Lu=[],$u=[],Nu=[],Iu=[];function qp(e){return typeof e==\"object\"&&e!==null}function Vu(e){return e===\"dashboard\"||e===\"products\"||e===\"conversion-rate\"||e===\"signups\"||e===\"categories\"}function xa(e,t){if(!qp(e))return\"dashboard\";let o=e[t];return Vu(o)?o:\"dashboard\"}function Xp(e,t,o){return{...qp(e)?e:{},[t]:o}}function Eu(e,t){return{pathname:e?.pathname,search:e?.search,hash:e?.hash,state:t}}var Qp=({stats:e,topProducts:t,conversionData:o,conversionPriceTypeTrend:n,signupData:i,categories:l,categoriesSummaryChangePct:s,conversionSummaryChangePct:d,orders:f,signups:h,isLoading:p=!1,error:b,shopTitle:x,className:g,translate:k,initialDateRange:R=dt,initialMarket:m=\"all\",initialProductSort:u=\"units\",initialSignupView:y=\"all\",initialConversionFilter:C=\"all\",initialCategorySort:M=\"revenue\",markets:V,historyAdapter:O,historyStateKey:A=Mu,resetToDashboardOnMount:W=!0,onDateRangeChange:X,onMarketChange:E,onProductSortChange:c,onSignupViewChange:w,onConversionFilterChange:v,onCategorySortChange:F,onViewChange:T,onProductsExport:B,onConversionExport:pe,onSignupsExport:P,onCategoriesExport:Q})=>{go(k);let[oe,Ze]=de.default.useState(\"dashboard\"),J=de.default.useRef(!1),[Ue,zt]=de.default.useState(R),[it,Io]=de.default.useState(m),[Vo,Oa]=de.default.useState(u),[Eo,Fa]=de.default.useState(y),[Ao,La]=de.default.useState(C),[zo,ar]=de.default.useState(M),Bo=t??Ou,nr=o??Fu,ir=i??Lu,lr=l??$u,mt=f??Nu,sr=h??Iu,Be=de.default.useCallback(Z=>{Ze(Z),T?.(Z)},[T]),Bt=de.default.useCallback(()=>O?xa(O.location?.state,A):typeof window>\"u\"?\"dashboard\":xa(window.history.state,A),[O,A]),yt=de.default.useCallback((Z,xo)=>{if(O){let ur=Xp(O.location?.state,A,Z),Nn=Eu(O.location,ur);if(xo===\"replace\"){O.replace(Nn);return}O.push(Nn);return}if(typeof window>\"u\")return;let io=Xp(window.history.state,A,Z);if(xo===\"replace\"){window.history.replaceState(io,\"\");return}window.history.pushState(io,\"\")},[O,A]);de.default.useEffect(()=>{if(W?(yt(\"dashboard\",\"replace\"),J.current=!1,Be(\"dashboard\")):Be(Bt()),O)return O.listen((xo,io)=>{if(io===\"POP\"){let ur=xa(xo.state,A);J.current=ur!==\"dashboard\",Be(ur)}});let Z=xo=>{let io=xa(xo.state,A);J.current=io!==\"dashboard\",Be(io)};return window.addEventListener(\"popstate\",Z),()=>{window.removeEventListener(\"popstate\",Z)}},[O,A,Bt,W,Be,yt]);let rt=de.default.useCallback(Z=>{J.current=!0,yt(Z,\"push\"),Be(Z)},[Be,yt]),Ht=de.default.useCallback(()=>{if(oe!==\"dashboard\"&&J.current){if(O){O.goBack();return}typeof window<\"u\"&&window.history.back();return}J.current=!1,yt(\"dashboard\",\"replace\"),Be(\"dashboard\")},[oe,O,Be,yt]),jt=de.default.useCallback(Z=>{zt(Z),X?.(Z)},[X]),Yt=de.default.useCallback(Z=>{Io(Z),E?.(Z)},[E]),Ho=de.default.useCallback(Z=>{Oa(Z),c?.(Z)},[c]),dr=de.default.useCallback(Z=>{Fa(Z),w?.(Z)},[w]),pr=de.default.useCallback(Z=>{La(Z),v?.(Z)},[v]),cr=de.default.useCallback(Z=>{ar(Z),F?.(Z)},[F]),re=de.default.useCallback(()=>{rt(\"products\")},[rt]),Jt=de.default.useCallback(()=>{rt(\"conversion-rate\")},[rt]),Wt=de.default.useCallback(()=>{rt(\"signups\")},[rt]),ho=de.default.useCallback(()=>{rt(\"categories\")},[rt]);return oe===\"products\"?(0,Oo.jsx)(Ro,{products:Bo,dateRange:Ue,market:it,productSort:Vo,markets:V,isLoading:p,onBack:Ht,onDateRangeChange:jt,onMarketChange:Yt,onProductSortChange:Ho}):oe===\"conversion-rate\"?(0,Oo.jsx)(Mo,{conversionData:nr,priceTypeTrend:n,orders:mt,dateRange:Ue,market:it,conversionFilter:Ao,markets:V,isLoading:p,onBack:Ht,onDateRangeChange:jt,onMarketChange:Yt,onConversionFilterChange:pr}):oe===\"signups\"?(0,Oo.jsx)(ga,{signupData:ir,signups:sr,dateRange:Ue,market:it,signupView:Eo,markets:V,isLoading:p,onBack:Ht,onDateRangeChange:jt,onMarketChange:Yt,onSignupViewChange:dr}):oe===\"categories\"?(0,Oo.jsx)(ha,{categories:lr,dateRange:Ue,market:it,categorySort:zo,summaryChangePct:s,markets:V,isLoading:p,onBack:Ht,onDateRangeChange:jt,onMarketChange:Yt,onCategorySortChange:cr}):(0,Oo.jsx)(qr,{stats:e,topProducts:Bo,conversionData:nr,signupData:ir,categories:lr,categoriesSummaryChangePct:s,conversionSummaryChangePct:d,isLoading:p,error:b,shopTitle:x,className:g,dateRange:Ue,market:it,productSort:Vo,signupView:Eo,conversionFilter:Ao,categorySort:zo,markets:V,onDateRangeChange:jt,onMarketChange:Yt,onProductSortChange:Ho,onSignupViewChange:dr,onConversionFilterChange:pr,onCategorySortChange:cr,onProductsTitleClick:re,onConversionTitleClick:Jt,onSignupsTitleClick:Wt,onCategoriesToTitleClick:ho,onProductsExport:B,onConversionExport:pe,onSignupsExport:P,onCategoriesExport:Q})};var Fo=require(\"@nuskin/foundation-theme\"),Tn=(0,Fo.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`,ec=(0,Fo.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`,tc=(0,Fo.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`,oc=(0,Fo.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`,rc=(0,Fo.styled)(\"div\")`\n padding: 24px;\n text-align: center;\n color: #d32f2f;\n background-color: #ffebee;\n border-radius: 8px;\n`;var ba=L(require(\"react\")),Vt=require(\"recharts\");var H={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:\"--\"},byRevenue:{key:\"productOfferDashboard.defaults.byRevenue\",fallback:\"Revenue\"},byUnits:{key:\"productOfferDashboard.defaults.byUnits\",fallback:\"Units\"},byVolume:{key:\"productOfferDashboard.defaults.byVolume\",fallback:\"Volume\"}}};function G(e){return Qe(e)}var Y=require(\"react/jsx-runtime\"),Au=({offers:e,offerSort:t,isLoading:o=!1,title:n,onSortChange:i,onTitleClick:l,onExport:s})=>{let d=ba.default.useCallback(g=>{let k=g.target.value;i?.(k)},[i]),{sortedOffers:f,totalRevenue:h,trendDirection:p,formattedTrend:b}=ba.default.useMemo(()=>{let g=[...e].sort((u,y)=>t===\"revenue\"?y.revenue-u.revenue:y.percentage-u.percentage),k=g.reduce((u,y)=>u+y.revenue,0),{direction:R,formatted:m}=qt(g,u=>u.revenue,u=>u.trend?.revenue);return{sortedOffers:g,totalRevenue:k,trendDirection:R,formattedTrend:m}},[e,t]),x=f[0]?.currencyCode;return o&&e.length===0?(0,Y.jsx)(eo,{\"data-testid\":\"widget-top-offers\",children:(0,Y.jsx)(Dr,{})}):e.length===0?(0,Y.jsxs)(eo,{\"data-testid\":\"widget-top-offers\",children:[(0,Y.jsx)(Do,{children:(0,Y.jsx)(Po,{children:n??G(H.widget.topPerformingOffers.title)})}),(0,Y.jsx)(Jr,{\"data-testid\":\"top-offers-empty-state\",children:(0,Y.jsx)(Zr,{children:G(H.widget.topPerformingOffers.emptyState)})})]}):(0,Y.jsxs)(eo,{as:\"section\",\"data-testid\":\"widget-top-offers\",\"aria-label\":G(H.ariaLabel.topOffers),children:[(0,Y.jsxs)(Do,{children:[(0,Y.jsx)(Po,{as:\"button\",onClick:l,\"aria-label\":G(H.ariaLabel.topOffers),\"data-testid\":\"widget-title-top-offers\",children:n??G(H.widget.topPerformingOffers.title)}),(0,Y.jsxs)(Vr,{children:[(0,Y.jsxs)(Ks,{id:\"offer-sort\",\"data-testid\":\"offer-sort-dropdown\",value:t,onChange:d,disabled:o,\"aria-label\":G(H.ariaLabel.topOffers),children:[(0,Y.jsx)(\"option\",{value:\"revenue\",children:G(H.defaults.byRevenue)}),(0,Y.jsx)(\"option\",{value:\"units\",children:G(H.defaults.byUnits)})]}),(0,Y.jsx)(st,{widgetId:\"top-offers\",onFullView:l,onExport:s})]})]}),(0,Y.jsxs)(Er,{children:[(0,Y.jsxs)(Ar,{\"data-testid\":\"top-offers-chart\",children:[(0,Y.jsx)(Vt.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,Y.jsxs)(Vt.PieChart,{children:[(0,Y.jsx)(Vt.Pie,{data:f,cx:\"50%\",cy:\"50%\",innerRadius:\"55%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:f.map(g=>(0,Y.jsx)(Vt.Cell,{fill:g.color},`cell-${g.id}`))}),(0,Y.jsx)(Vt.Tooltip,{formatter:g=>te(g,x)})]})}),(0,Y.jsxs)(zr,{\"data-testid\":\"top-offers-donut-center\",children:[(0,Y.jsx)(Br,{children:G(H.widget.topPerformingOffers.totalRevenue)}),(0,Y.jsx)(Hr,{children:te(h,x)}),(0,Y.jsx)(Wr,{direction:p,children:b})]})]}),(0,Y.jsx)(_r,{\"data-testid\":\"top-offers-legend-container\",children:f.map((g,k)=>{let R=Tt(g.trend?.revenue);return(0,Y.jsxs)(Ur,{\"data-testid\":`offer-legend-${k}`,children:[(0,Y.jsx)(Kr,{color:g.color}),(0,Y.jsxs)(Gr,{children:[(0,Y.jsx)(jr,{children:Yo(g.name)}),(0,Y.jsx)(Yr,{children:te(g.revenue,g.currencyCode)})]}),(0,Y.jsxs)(Gs,{children:[g.percentage,\"%\"]}),g.trend?.revenue?(0,Y.jsx)(Js,{direction:R,\"data-testid\":`offer-legend-trend-${k}`,\"aria-label\":g.trend.revenue,children:et(R)}):null]},g.id)})})]})]})},tr=ba.default.memo(Au);tr.displayName=\"TopPerformingOffersPieChart\";var Pn=L(require(\"react\"));var zu=/[\\\\/?*[\\]:]/g;function Sn(e){let t=e.trim(),o=t.length>0?t:\"export\";return o.toLowerCase().endsWith(\".xlsx\")?o:`${o}.xlsx`}function Dn(e){let t=e.replace(zu,\" \").trim();return(t.length>0?t:\"Export\").slice(0,31)}async function or({rows:e,columns:t,fileName:o,sheetName:n}){let{Workbook:i}=await import(\"exceljs\"),l=new i,s=l.addWorksheet(Dn(n));s.columns=t.map(f=>({header:f.header,key:f.header})),e.forEach(f=>{let h={};t.forEach(p=>{h[p.header]=p.value(f)??\"\"}),s.addRow(h)});let d=await l.xlsx.writeBuffer();Bu(d,Sn(o))}function Bu(e,t){let o=new Blob([new Uint8Array(e)],{type:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"}),n=URL.createObjectURL(o),i=document.createElement(\"a\");i.href=n,i.download=t,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(n)}var Hu=[{header:\"Rank\",value:e=>e.rank},{header:\"Product ID\",value:e=>e.id},{header:\"Product Name\",value:e=>e.name},{header:\"Units Sold\",value:e=>e.unitsSold},{header:\"Total Revenue\",value:e=>e.revenue},{header:\"Currency\",value:e=>e.currencyCode},{header:\"Volume DC-SV\",value:e=>e.volume},{header:\"Trend\",value:e=>e.trend?.units??e.trend?.revenue??e.trend?.volume}],Wu=[{header:\"Offer ID\",value:e=>e.id},{header:\"Offer Name\",value:e=>e.name},{header:\"Total Revenue\",value:e=>e.revenue},{header:\"Currency\",value:e=>e.currencyCode},{header:\"Total Volume\",value:e=>e.volume??e.units},{header:\"Share %\",value:e=>e.percentage},{header:\"Trend\",value:e=>e.trend?.revenue??e.trend?.units}];function ya(e){return or({rows:e,columns:Hu,fileName:\"top-selling-products\",sheetName:\"Top Selling Products\"})}function wa(e){return or({rows:e,columns:Wu,fileName:\"top-performing-offers\",sheetName:\"Top Performing Offers\"})}function Ca({topProducts:e,topOffers:t,topProductsExportData:o,topOffersExportData:n,showTopProductsExportOption:i=!0,showTopOffersExportOption:l=!0,isLoading:s=!1}){let d=o??e,f=n??t,h=i&&!s&&d.length>0,p=l&&!s&&f.length>0,b=Pn.default.useCallback(()=>ya(d),[d]),x=Pn.default.useCallback(()=>wa(f),[f]);return{onTopProductsExport:h?b:void 0,onTopOffersExport:p?x:void 0}}var Je=require(\"react/jsx-runtime\"),_u=[],Uu=[],Ku=[],va=({stats:e,topProducts:t,conversionData:o,topOffers:n,isLoading:i=!1,error:l,dashboardTitle:s,className:d,dateRange:f=dt,market:h=\"all\",productSort:p=\"units\",conversionFilter:b=\"all\",offerSort:x=\"revenue\",conversionSummaryRate:g,conversionSummaryChangePct:k,topProductsExportData:R,topOffersExportData:m,showTopProductsExportOption:u=!0,showTopOffersExportOption:y=!0,markets:C,onDateRangeChange:M,onMarketChange:V,onProductSortChange:O,onConversionFilterChange:A,onOfferSortChange:W,onProductsTitleClick:X,onConversionTitleClick:E,onOffersTitleClick:c})=>{let w=t??_u,v=o??Uu,F=n??Ku,{onTopProductsExport:T,onTopOffersExport:B}=Ca({topProducts:w,topOffers:F,topProductsExportData:R,topOffersExportData:m,showTopProductsExportOption:u,showTopOffersExportOption:y,isLoading:i}),pe=P=>P?P.startsWith(\"+\")&&P!==\"+0%\"?\"up\":P.startsWith(\"-\")?\"down\":\"neutral\":\"neutral\";return l?(0,Je.jsx)(Tn,{as:\"main\",className:d,\"aria-label\":G(H.ariaLabel.dashboard),children:(0,Je.jsxs)(rc,{\"data-testid\":\"dashboard-error\",role:\"alert\",\"aria-live\":\"assertive\",children:[(0,Je.jsxs)(\"strong\",{children:[G(H.error),\":\"]}),\" \",l]})}):(0,Je.jsxs)(Tn,{as:\"main\",className:d,\"data-testid\":\"product-offer-dashboard\",\"aria-label\":G(H.ariaLabel.dashboard),\"aria-busy\":i,children:[(0,Je.jsx)(Co,{shopTitle:s??G(H.title),dateRange:f,market:h,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:e.trend??{}}:void 0,onDateRangeChange:M,onMarketChange:V}),(0,Je.jsxs)(ec,{\"data-testid\":\"top-charts-row\",children:[(0,Je.jsx)(co,{conversionData:v,conversionFilter:b,dateRange:f,isLoading:i,summaryRate:g,summaryChangePct:k,onFilterChange:A,onTitleClick:E}),(0,Je.jsxs)(tc,{\"data-testid\":\"stats-card-stack\",children:[(0,Je.jsx)(kt,{layout:\"split\",title:G(H.stats.revenue),value:e?.metrics?.revenue??\"$0\",trendDirection:pe(e?.trend?.revenue),trendValue:e?.trend?.revenue,caption:G(H.stats.comparedTo),testId:\"stats-card-revenue\",isLoading:i}),(0,Je.jsx)(kt,{layout:\"split\",title:G(H.stats.offersPurchased),value:e?.metrics?.offersPurchased??\"0\",trendDirection:pe(e?.trend?.offersPurchased),trendValue:e?.trend?.offersPurchased,caption:G(H.stats.comparedTo),testId:\"stats-card-offers-purchased\",isLoading:i})]})]}),(0,Je.jsxs)(oc,{\"data-testid\":\"bottom-charts-row\",children:[(0,Je.jsx)(so,{products:w,productSort:p,isLoading:i,maxProducts:5,onSortChange:O,onTitleClick:X,onExport:T}),(0,Je.jsx)(tr,{offers:F,offerSort:x,isLoading:i,onSortChange:W,onTitleClick:c,onExport:B})]})]})};var me=L(require(\"react\"));var Et=L(require(\"react\")),At=require(\"recharts\");var le=require(\"@mui/material/styles\"),ne=require(\"@mui/material\"),ac=require(\"@nuskin/foundation-theme\"),{getGenomeColor:Rn}=ac.ColorUtils,nc=(0,le.styled)(ne.Box)`\n display: flex;\n gap: 24px;\n padding: 24px;\n background-color: ${({theme:e})=>Rn(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`,ic=(0,le.styled)(ne.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`,lc=(0,le.styled)(ne.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`,sc=(0,le.styled)(ne.Typography)`\n font-size: 0.75rem;\n line-height: 1.2;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,dc=(0,le.styled)(ne.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`,pc=(0,le.styled)(ne.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`,cc=(0,le.styled)(ne.Box)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex: 1;\n`,uc=(0,le.styled)(ne.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})=>Rn(e,\"N30\")};\n }\n`,ka=(0,le.styled)(ne.Box)`\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: ${({dotColor:e})=>e};\n flex-shrink: 0;\n`,gc=(0,le.styled)(ne.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n`,fc=(0,le.styled)(ne.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n`,mc=(0,le.styled)(ne.Typography)`\n font-size: 0.75rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n`,hc=(0,le.styled)(ne.Typography)`\n font-size: 1rem;\n font-weight: 600;\n flex-shrink: 0;\n`,xc=(0,le.styled)(ne.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`,bc=(0,le.styled)(ne.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`,yc=(0,le.styled)(ne.Box)`\n display: block;\n @media (max-width: 767px) {\n display: none;\n }\n`,wc=(0,le.styled)(ne.Box)`\n display: none;\n @media (max-width: 767px) {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n`,Cc=(0,le.styled)(ne.Box)`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px;\n background-color: ${({theme:e})=>Rn(e,\"N20\")};\n border: 1px solid ${({theme:e})=>e.palette.divider};\n border-radius: 8px;\n`,vc=(0,le.styled)(ne.Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n`,kc=(0,le.styled)(ne.Typography)`\n font-size: 0.875rem;\n font-weight: 600;\n color: ${({theme:e})=>e.palette.text.primary};\n word-break: break-word;\n`,Tc=(0,le.styled)(ne.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`,Ta=(0,le.styled)(ne.Box)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n text-align: center;\n`,Sa=(0,le.styled)(ne.Typography)`\n font-size: 0.625rem;\n color: ${({theme:e})=>e.palette.text.secondary};\n text-transform: uppercase;\n`,Mn=(0,le.styled)(ne.Typography)`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({theme:e})=>e.palette.text.primary};\n`,Sc=(0,le.styled)(ne.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 $=require(\"react/jsx-runtime\"),Da=({offers:e,dateRange:t,market:o,offerSort:n,markets:i,isLoading:l=!1,onBack:s,onDateRangeChange:d,onMarketChange:f,onOfferSortChange:h})=>{let[p,b]=(0,Et.useState)(1),x=10,g=Ft(),k=Et.default.useCallback(()=>s?.(),[s]),R=lt(i),m=Et.default.useMemo(()=>[Rt(t,H),Mt(o,R,H),{key:\"sort\",label:G(H.defaults.byRevenue),value:n,options:[{value:\"revenue\",label:G(H.defaults.byRevenue)},{value:\"units\",label:G(H.defaults.byUnits)}]}],[t,o,R,n]),u=Et.default.useCallback((c,w)=>{c===\"dateRange\"?d?.(w):c===\"market\"?f?.(w):c===\"sort\"&&(h?.(w),b(1))},[h,d,f]),y=Et.default.useMemo(()=>[...e].sort((c,w)=>n===\"revenue\"?w.revenue-c.revenue:w.percentage-c.percentage),[e,n]),{totalRevenue:C,totalRevenueTrendDirection:M,totalRevenueTrend:V}=Et.default.useMemo(()=>{let c=y.reduce((F,T)=>F+T.revenue,0),{direction:w,formatted:v}=qt(y,F=>F.revenue,F=>F.trend?.revenue);return{totalRevenue:c,totalRevenueTrendDirection:w,totalRevenueTrend:v}},[y]),O=Et.default.useMemo(()=>y.slice(0,5),[y]),{totalPages:A,pageItems:W}=St(y,p,x),X=Et.default.useMemo(()=>[{key:\"name\",label:G(H.fullView.topOffers.columnName),sortable:!0,render:(c,w)=>(0,$.jsxs)(fa,{children:[(0,$.jsx)(ka,{dotColor:w.color}),(0,$.jsx)(\"span\",{children:w.name})]})},{key:\"revenue\",label:G(H.fullView.topOffers.columnRevenue),sortable:!0,render:(c,w)=>te(Number(c),w.currencyCode,at(o))},{key:\"percentage\",label:G(H.fullView.topOffers.columnPercentage),sortable:!0,render:c=>`${Number(c)}%`},{key:\"trend\",label:G(H.fullView.topOffers.columnTrend),render:(c,w)=>{if(!w.trend?.revenue)return G(H.defaults.noData);let v=Tt(w.trend.revenue);return(0,$.jsxs)(bc,{direction:v,children:[et(v),(0,$.jsx)(\"span\",{children:w.trend.revenue})]})}}],[o]),E=y[0]?.currencyCode;return l?(0,$.jsxs)(Fe,{\"data-testid\":\"top-offers-full-view\",children:[(0,$.jsx)(ye,{title:G(H.fullView.topOffers.title),dateRange:De(t),onBack:k,filters:m,onFilterChange:u}),(0,$.jsx)(Xt,{})]}):e.length===0?(0,$.jsxs)(Fe,{\"data-testid\":\"top-offers-full-view\",children:[(0,$.jsx)(ye,{title:G(H.fullView.topOffers.title),dateRange:De(t),onBack:k,filters:m,onFilterChange:u}),(0,$.jsx)(ro,{\"data-testid\":\"top-offers-fullview-empty\",children:G(H.widget.topPerformingOffers.emptyState)})]}):(0,$.jsxs)(Fe,{\"data-testid\":\"top-offers-full-view\",children:[(0,$.jsx)(ye,{title:G(H.fullView.topOffers.title),dateRange:De(t),onBack:k,filters:m,onFilterChange:u}),(0,$.jsxs)(nc,{\"data-testid\":\"top-offers-fullview-top-section\",children:[(0,$.jsxs)(ic,{\"data-testid\":\"top-offers-fullview-chart\",children:[(0,$.jsx)(At.ResponsiveContainer,{width:\"100%\",height:\"100%\",children:(0,$.jsxs)(At.PieChart,{children:[(0,$.jsx)(At.Pie,{data:y,cx:\"50%\",cy:\"50%\",innerRadius:\"50%\",outerRadius:\"85%\",dataKey:\"revenue\",nameKey:\"name\",paddingAngle:2,children:y.map(c=>(0,$.jsx)(At.Cell,{fill:c.color},`cell-${c.id}`))}),(0,$.jsx)(At.Tooltip,{formatter:c=>te(c,E,at(o))})]})}),(0,$.jsxs)(lc,{\"data-testid\":\"top-offers-fullview-donut-center\",children:[(0,$.jsx)(sc,{children:G(H.widget.topPerformingOffers.totalRevenue)}),(0,$.jsx)(dc,{children:te(C,E,at(o))}),(0,$.jsx)(pc,{direction:M,children:V})]})]}),(0,$.jsx)(cc,{\"data-testid\":\"top-offers-fullview-summary\",children:O.map(c=>{let w=Tt(c.trend?.revenue);return(0,$.jsxs)(uc,{children:[(0,$.jsx)(ka,{dotColor:c.color}),(0,$.jsxs)(gc,{children:[(0,$.jsx)(fc,{children:c.name}),(0,$.jsx)(mc,{children:te(c.revenue,c.currencyCode,at(o))})]}),(0,$.jsxs)(hc,{children:[c.percentage,\"%\"]}),c.trend?.revenue?(0,$.jsx)(xc,{direction:w,\"aria-label\":c.trend.revenue,children:et(w)}):null]},c.id)})})]}),(0,$.jsxs)(oo,{\"data-testid\":\"top-offers-table\",children:[(0,$.jsxs)(to,{\"data-testid\":\"top-offers-fullview-table-title\",children:[G(H.fullView.topOffers.title),\" (\",y.length,\")\"]}),g?(0,$.jsx)(wc,{children:W.map(c=>{let w=Pr(c.trend?.revenue),v=\"neutral\";return w!==null&&w>0?v=\"up\":w!==null&&w<0&&(v=\"down\"),(0,$.jsxs)(Cc,{children:[(0,$.jsxs)(vc,{children:[(0,$.jsx)(ka,{dotColor:c.color}),(0,$.jsx)(kc,{children:c.name})]}),(0,$.jsxs)(Tc,{children:[(0,$.jsxs)(Ta,{children:[(0,$.jsx)(Sa,{children:G(H.fullView.topOffers.columnRevenue)}),(0,$.jsx)(Mn,{children:te(c.revenue,c.currencyCode,at(o))})]}),(0,$.jsxs)(Ta,{children:[(0,$.jsx)(Sa,{children:G(H.fullView.topOffers.columnPercentage)}),(0,$.jsxs)(Mn,{children:[c.percentage,\"%\"]})]}),(0,$.jsxs)(Ta,{children:[(0,$.jsx)(Sa,{children:G(H.fullView.topOffers.columnTrend)}),(0,$.jsx)(Sc,{direction:v,children:c.trend?.revenue?(0,$.jsxs)($.Fragment,{children:[et(v),(0,$.jsx)(\"span\",{children:c.trend.revenue})]}):G(H.defaults.noData)})]})]})]},c.id)})}):(0,$.jsx)(yc,{children:(0,$.jsx)(ct,{columns:X,data:W,sortable:!0,getRowKey:c=>c.id})}),A>1&&(0,$.jsx)(ut,{currentPage:p,totalPages:A,onPageChange:b,itemsPerPage:x,totalItems:y.length,\"data-testid\":\"top-offers-pagination\"})]})]})};var rr=require(\"react/jsx-runtime\"),Gu=\"productOfferDashboardView\",ju=[],Yu=[],Ju=[],Zu=[];function Pc(e){return typeof e==\"object\"&&e!==null}function Xu(e){return e===\"dashboard\"||e===\"products\"||e===\"conversion-rate\"||e===\"top-offers\"}function Pa(e,t){if(!Pc(e))return\"dashboard\";let o=e[t];return Xu(o)?o:\"dashboard\"}function Dc(e,t,o){return{...Pc(e)?e:{},[t]:o}}function qu(e,t){return{pathname:e?.pathname,search:e?.search,hash:e?.hash,state:t}}var Rc=({stats:e,topProducts:t,conversionData:o,topOffers:n,isLoading:i=!1,error:l,dashboardTitle:s,className:d,allProducts:f,orders:h,allOffers:p,conversionSummaryRate:b,conversionSummaryChangePct:x,conversionFullViewData:g,conversionFullViewRate:k,conversionFullViewChangePct:R,topProductsExportData:m,topOffersExportData:u,showTopProductsExportOption:y=!0,showTopOffersExportOption:C=!0,initialDateRange:M=dt,initialMarket:V=\"all\",initialProductSort:O=\"units\",initialConversionFilter:A=\"all\",initialOfferSort:W=\"revenue\",markets:X,translate:E,historyAdapter:c,historyStateKey:w=Gu,resetToDashboardOnMount:v=!0,onDateRangeChange:F,onMarketChange:T,onProductSortChange:B,onConversionFilterChange:pe,onOfferSortChange:P,onViewChange:Q})=>{go(E);let[oe,Ze]=me.default.useState(\"dashboard\"),J=me.default.useRef(!1),[Ue,zt]=me.default.useState(M),[it,Io]=me.default.useState(V),[Vo,Oa]=me.default.useState(O),[Eo,Fa]=me.default.useState(A),[Ao,La]=me.default.useState(W),zo=t??ju,ar=o??Yu,Bo=n??Ju,nr=f??zo,ir=h??Zu,lr=p??Bo,mt=me.default.useCallback(re=>{Ze(re),Q?.(re)},[Q]),sr=me.default.useCallback(()=>c?Pa(c.location?.state,w):typeof window>\"u\"?\"dashboard\":Pa(window.history.state,w),[c,w]),Be=me.default.useCallback((re,Jt)=>{if(c){let ho=Dc(c.location?.state,w,re),Z=qu(c.location,ho);if(Jt===\"replace\"){c.replace(Z);return}c.push(Z);return}if(typeof window>\"u\")return;let Wt=Dc(window.history.state,w,re);if(Jt===\"replace\"){window.history.replaceState(Wt,\"\");return}window.history.pushState(Wt,\"\")},[c,w]);me.default.useEffect(()=>{if(v?(Be(\"dashboard\",\"replace\"),J.current=!1,mt(\"dashboard\")):mt(sr()),c)return c.listen((Jt,Wt)=>{if(Wt===\"POP\"){let ho=Pa(Jt.state,w);J.current=ho!==\"dashboard\",mt(ho)}});let re=Jt=>{let Wt=Pa(Jt.state,w);J.current=Wt!==\"dashboard\",mt(Wt)};return window.addEventListener(\"popstate\",re),()=>{window.removeEventListener(\"popstate\",re)}},[c,w,sr,v,mt,Be]);let Bt=me.default.useCallback(re=>{J.current=!0,Be(re,\"push\"),mt(re)},[mt,Be]),yt=me.default.useCallback(()=>{if(oe!==\"dashboard\"&&J.current){if(c){c.goBack();return}typeof window<\"u\"&&window.history.back();return}J.current=!1,Be(\"dashboard\",\"replace\"),mt(\"dashboard\")},[oe,c,mt,Be]),rt=me.default.useCallback(re=>{zt(re),F?.(re)},[F]),Ht=me.default.useCallback(re=>{Io(re),T?.(re)},[T]),jt=me.default.useCallback(re=>{Oa(re),B?.(re)},[B]),Yt=me.default.useCallback(re=>{Fa(re),pe?.(re)},[pe]),Ho=me.default.useCallback(re=>{La(re),P?.(re)},[P]),dr=me.default.useCallback(()=>{Bt(\"products\")},[Bt]),pr=me.default.useCallback(()=>{Bt(\"conversion-rate\")},[Bt]),cr=me.default.useCallback(()=>{Bt(\"top-offers\")},[Bt]);return oe===\"products\"?(0,rr.jsx)(Ro,{products:nr,dateRange:Ue,market:it,productSort:Vo,markets:X,isLoading:i,onBack:yt,onDateRangeChange:rt,onMarketChange:Ht,onProductSortChange:jt}):oe===\"conversion-rate\"?(0,rr.jsx)(Mo,{conversionData:g??ar,orders:ir,summaryRate:k??b,summaryChangePct:R??x,dateRange:Ue,market:it,conversionFilter:Eo,markets:X,isLoading:i,onBack:yt,onDateRangeChange:rt,onMarketChange:Ht,onConversionFilterChange:Yt}):oe===\"top-offers\"?(0,rr.jsx)(Da,{offers:lr,dateRange:Ue,market:it,offerSort:Ao,markets:X,isLoading:i,onBack:yt,onDateRangeChange:rt,onMarketChange:Ht,onOfferSortChange:Ho}):(0,rr.jsx)(va,{stats:e,topProducts:zo,conversionData:ar,topOffers:Bo,isLoading:i,error:l,dashboardTitle:s,className:d,dateRange:Ue,market:it,productSort:Vo,conversionFilter:Eo,offerSort:Ao,conversionSummaryRate:b,conversionSummaryChangePct:x,topProductsExportData:m,topOffersExportData:u,showTopProductsExportOption:y,showTopOffersExportOption:C,markets:X,onDateRangeChange:rt,onMarketChange:Ht,onProductSortChange:jt,onConversionFilterChange:Yt,onOfferSortChange:Ho,onProductsTitleClick:dr,onConversionTitleClick:pr,onOffersTitleClick:cr})};var Lo=require(\"@nuskin/foundation-theme\"),{getGenomeColor:fo}=Lo.ColorUtils,Mc=(0,Lo.styled)(\"div\")`\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n`,Oc=(0,Lo.styled)(\"select\")`\n min-width: 160px;\n height: 40px;\n padding: 8px 12px;\n background-color: ${({theme:e})=>fo(e,\"N20\")};\n border: 1px solid ${({theme:e})=>fo(e,\"N40\")};\n border-radius: 8px;\n font-size: 14px;\n font-weight: 400;\n color: ${({theme:e})=>fo(e,\"N100\")};\n cursor: pointer;\n outline: none;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ${({theme:e})=>fo(e,\"N30\")};\n }\n\n &:focus {\n border-color: ${({theme:e})=>fo(e,\"A70\")};\n box-shadow: 0 0 0 3px ${({theme:e})=>fo(e,\"A20\")};\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n`,Fc=(0,Lo.styled)(\"label\")`\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n color: ${({theme:e})=>fo(e,\"N70\")};\n`;var $o=require(\"react/jsx-runtime\"),Lc=({filters:e,onChange:t})=>(0,$o.jsx)(Mc,{\"data-testid\":\"filter-bar\",children:e.map(o=>(0,$o.jsxs)(Fc,{htmlFor:`filter-${o.key}`,children:[o.label,(0,$o.jsx)(Oc,{id:`filter-${o.key}`,value:o.value,onChange:n=>t(o.key,n.target.value),disabled:o.disabled,\"aria-label\":`${o.label} ${a(r.ariaLabel.filterSuffix)}`,\"data-testid\":`filter-dropdown-${o.key}`,children:o.options.map(n=>(0,$o.jsx)(\"option\",{value:n.value,children:n.label},n.value))})]},o.key))});var On={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%\"}},Ra=[{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%\"}}],No=Array.from({length:30},(e,t)=>{let o=new Date(\"2026-03-01\");return o.setDate(o.getDate()+t),{date:`${[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"][o.getMonth()]} ${o.getDate()}`,rate:Number((4+t%15*.1).toFixed(2)),orders:200+t*13%100,siteVisits:4e3+t*97%2e3,priceTypes:t%3===0?[\"Retail\",\"Member\"]:[\"Retail\"]}}),Qu=No.map(e=>({...e,rate:Number((e.rate*1.35).toFixed(2)),orders:Math.round(e.orders*.7),priceTypes:[\"Retail\"]})),eg=No.map(e=>({...e,rate:Number((e.rate*.55).toFixed(2)),orders:Math.round(e.orders*.3),priceTypes:[\"Member\"]})),Fn=Array.from({length:30},(e,t)=>{let o=new Date(\"2026-03-01\");o.setDate(o.getDate()+t);let n=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],i=80+t*11%40,l=Math.floor(i*.4),s=Math.floor(i*.35),d=i-l-s;return{date:`${n[o.getMonth()]} ${o.getDate()}`,total:i,members:l,retail:s,brandAffiliates:d}}),Ln=[{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%\"}}],Ma=Array.from({length:50},(e,t)=>{let o=[\"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:`${o[t%o.length]} ${n[t%n.length]}`,customerType:t%3===0?\"Subscription\":\"Standard\",priceType:t%3===0?\"Member\":\"Retail\",items:t%5+1,total:Number((50+t*17%200+t%10*.1).toFixed(2)),bv:30+t*9%150}}),$n=Array.from({length:30},(e,t)=>{let o=[\"Alice\",\"Bob\",\"Carol\",\"David\",\"Eva\",\"Frank\",\"Grace\",\"Henry\"],n=[\"Anderson\",\"Baker\",\"Clark\",\"Davis\",\"Evans\",\"Fisher\",\"Grant\",\"Hall\"],i=[\"Member\",\"Retail\",\"Brand Affiliate\"],l=new Date(\"2026-03-31\");return l.setDate(l.getDate()-t%30),{id:`SU-${String(1e3+t).padStart(4,\"0\")}`,name:`${o[t%o.length]} ${n[t%n.length]}`,date:l.toLocaleDateString(\"en-US\",{month:\"short\",day:\"numeric\",year:\"numeric\"}),type:i[t%i.length],email:`${o[t%o.length].toLowerCase()}.${n[t%n.length].toLowerCase()}@example.com`,status:t%4===0?\"Pending\":\"Active\"}});var mo={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%\"}},Cb={...mo,trend:{revenue:\"+5.1%\",offersPurchased:\"+12.5%\"}},vb={...mo,trend:{revenue:\"-1.8%\",offersPurchased:\"-3.7%\"}},kb={...mo,trend:{revenue:\"+0%\",offersPurchased:\"+0%\"}},Tb={...mo,metrics:{...mo.metrics,offersPurchased:\"0\"},trend:{revenue:\"+0%\",offersPurchased:\"+0%\"}},$c=[{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: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 16px;\n\n @media (min-width: 768px) {\n gap: 24px;\n padding: 20px;\n }\n\n @media (min-width: 1080px) {\n gap: 24px;\n padding: 24px;\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 CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport LanguageIcon from '@mui/icons-material/Language';\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.dateRange.label)}\n </FilterLabel>\n <FilterIcon aria-hidden=\"true\">\n <CalendarMonthIcon />\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.market.label)}</FilterLabel>\n <FilterIcon aria-hidden=\"true\">\n <LanguageIcon />\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: 12px 16px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 12px;\n min-height: auto;\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: 16px 20px;\n gap: 16px;\n }\n\n @media (min-width: 1080px) {\n padding: 16px 24px;\n gap: 20px;\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: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n\n @media (min-width: 1080px) {\n font-size: 16px;\n }\n`;\n\nexport const DateRangeLabel = styled('div')`\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n\n @media (min-width: 768px) {\n font-size: 16px;\n }\n`;\n\nexport const FiltersSection = styled('div')`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 24px;\n width: 100%;\n flex-shrink: 0;\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\n// Kept in the DOM (visually hidden) so the select stays labelled for assistive tech.\nexport const FilterLabel = styled('label')`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: 0 !important;\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n`;\n\nexport const StyledSelect = styled('select')`\n min-width: 120px;\n height: 32px;\n padding: 6px 24px 6px 8px;\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 white-space: nowrap;\n flex-shrink: 0;\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 background-position: right 8px center;\n }\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 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: nowrap;\n gap: 24px;\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 visits: {\n key: 'shoppingDashboard.stats.visits',\n fallback: 'Site Visits',\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\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\n productSort: {\n label: {\n key: 'shoppingDashboard.filter.productSort.label',\n fallback: 'Sort By',\n },\n },\n signupView: {\n label: {\n key: 'shoppingDashboard.filter.signupView.label',\n fallback: 'Show',\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 retail: {\n key: 'shoppingDashboard.filter.conversionType.retail',\n fallback: 'Retail',\n },\n member: {\n key: 'shoppingDashboard.filter.conversionType.member',\n fallback: 'Member',\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 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 rank: {\n key: 'shoppingDashboard.widget.topProducts.rank',\n fallback: 'Rank',\n },\n },\n conversionRate: {\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 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 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 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 compareTo: {\n last7days: {\n key: 'shoppingDashboard.widget.compareTo.last7days',\n fallback: 'compared to this time 7 days ago',\n },\n last30days: {\n key: 'shoppingDashboard.widget.compareTo.last30days',\n fallback: 'compared to this time last month',\n },\n last90days: {\n key: 'shoppingDashboard.widget.compareTo.last90days',\n fallback: 'compared to this time 90 days ago',\n },\n thisMonth: {\n key: 'shoppingDashboard.widget.compareTo.thisMonth',\n fallback: 'compared to this time last month',\n },\n },\n topCategories: {\n title: {\n key: 'shoppingDashboard.widget.topCategories.title',\n fallback: 'Top Categories',\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 viewDetails: {\n key: 'shoppingDashboard.widget.menu.viewDetails',\n fallback: 'View Details',\n },\n exportData: {\n key: 'shoppingDashboard.widget.menu.exportData',\n fallback: 'Export Data',\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 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 customer: { key: 'shoppingDashboard.fullView.conversionRate.columns.customer', fallback: 'Customer' },\n items: { key: 'shoppingDashboard.fullView.conversionRate.columns.items', fallback: 'Items' },\n total: { key: 'shoppingDashboard.fullView.conversionRate.columns.total', fallback: 'Order Total' },\n bv: { key: 'shoppingDashboard.fullView.conversionRate.columns.bv', fallback: 'BV' },\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 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 percentOfTotal: {\n key: 'shoppingDashboard.fullView.categories.columns.percentOfTotal',\n fallback: '% of Total',\n },\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 noData: {\n key: 'shoppingDashboard.defaults.noData',\n fallback: 'No data',\n },\n noChange: {\n key: 'shoppingDashboard.defaults.noChange',\n fallback: 'No change',\n },\n byRevenue: {\n key: 'shoppingDashboard.defaults.byRevenue',\n fallback: 'By: Revenue',\n },\n byUnits: {\n key: 'shoppingDashboard.defaults.byUnits',\n fallback: 'By: Units',\n },\n byVolume: {\n key: 'shoppingDashboard.defaults.byVolume',\n fallback: 'By: Volume',\n },\n byTrend: {\n key: 'shoppingDashboard.defaults.byTrend',\n fallback: 'By: Trend',\n },\n all: {\n key: 'shoppingDashboard.defaults.all',\n fallback: 'All',\n },\n members: {\n key: 'shoppingDashboard.defaults.members',\n fallback: 'Members',\n },\n retail: {\n key: 'shoppingDashboard.defaults.retail',\n fallback: 'Retail',\n },\n brandAffiliates: {\n key: 'shoppingDashboard.defaults.brandAffiliates',\n fallback: 'Brand Affiliates',\n },\n revenue: {\n key: 'shoppingDashboard.defaults.revenue',\n fallback: 'Revenue',\n },\n units: {\n key: 'shoppingDashboard.defaults.units',\n fallback: 'Units',\n },\n volume: {\n key: 'shoppingDashboard.defaults.volume',\n fallback: 'Volume',\n },\n conversionRate: {\n key: 'shoppingDashboard.defaults.conversionRate',\n fallback: 'Conversion Rate',\n },\n trend: {\n key: 'shoppingDashboard.defaults.trend',\n fallback: 'Trend',\n },\n date: {\n key: 'shoppingDashboard.defaults.date',\n fallback: 'Date',\n },\n type: {\n key: 'shoppingDashboard.defaults.type',\n fallback: 'Type',\n },\n dcSv: {\n key: 'shoppingDashboard.defaults.dcSv',\n fallback: 'DC-SV',\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 ShowChartIcon from '@mui/icons-material/ShowChart';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport {\n StatsCardContainer,\n StatsTitle,\n StatsValueContainer,\n StatsValue,\n StatsSubtitle,\n ValueSubtitleWrapper,\n TrendContainer,\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 const getTrendChartIcon = (iconSize: string) => {\n if (trendDirection === 'up') {\n return <TrendingUpIcon sx={{ fontSize: iconSize }} aria-hidden=\"true\" />;\n }\n if (trendDirection === 'down') {\n return <TrendingDownIcon sx={{ fontSize: iconSize }} aria-hidden=\"true\" />;\n }\n return <ShowChartIcon sx={{ fontSize: iconSize }} aria-hidden=\"true\" />;\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 {getTrendChartIcon('18px')}\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 </StatsCardHeader>\n\n <StatsValueContainer>\n <ValueSubtitleWrapper>\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 </ValueSubtitleWrapper>\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 {getTrendChartIcon('16px')}\n <TrendText>{trendValue}</TrendText>\n </TrendContainer>\n )}\n </StatsValueContainer>\n </StatsCardContainer>\n );\n};\n\nexport const StatsCard = React.memo(StatsCardComponent);\nStatsCard.displayName = 'StatsCard';\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 justify-content: space-between;\n box-sizing: border-box;\n gap: ${({ $layout }) => ($layout === 'split' ? '8px' : '0')};\n padding: ${({ $layout }) => ($layout === 'split' ? '12px' : '10px')};\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' ? '110px' : 'auto')};\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' ? '16px' : '12px')};\n min-height: ${({ $layout }) => ($layout === 'split' ? '110px' : 'auto')};\n }\n\n @media (min-width: 1080px) {\n padding: ${({ $layout }) => ($layout === 'split' ? '16px' : '14px')};\n min-height: ${({ $layout }) => ($layout === 'split' ? '110px' : 'auto')};\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: 14px;\n font-weight: 400;\n line-height: 1.2;\n letter-spacing: 0;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin-bottom: 2px;\n text-transform: capitalize;\n\n @media (min-width: 768px) {\n font-size: 14px;\n margin-bottom: 4px;\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 justify-content: space-between;\n gap: 2px;\n margin-top: 10px;\n width: 100%;\n`;\n\nexport const StatsValue = styled('div')`\n font-size: 20px;\n font-weight: 700;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\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 ValueSubtitleWrapper = styled('div')`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n`;\n\nexport const StatsSubtitle = styled('div')`\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n padding-bottom: 0;\n\n @media (min-width: 768px) {\n font-size: 12px;\n }\n`;\n\nexport const TrendContainer = styled('div')<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n flex-direction: row;\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\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 { getTrendDirectionLabel, resolveTrendDirection, getTrendIcon } from '../../utils/trendUtils';\nimport { formatMoney } from '../../utils/dataUtils';\nimport {\n ProductsListContainer,\n WidgetHeader,\n WidgetTitle,\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 { StyledSelect } from '../DashboardHeader.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 readonly onExport?: () => void;\n}\n\nconst TopSellingProductsListComponent: React.FC<TopSellingProductsListProps> = ({\n products,\n productSort,\n isLoading = false,\n maxProducts = 5,\n onSortChange,\n onTitleClick,\n onExport,\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.defaults.dcSv)}`;\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) {\n return '';\n }\n let value = '';\n switch (sortBy) {\n case 'units':\n value = trend.units ?? '';\n break;\n case 'revenue':\n value = trend.revenue ?? '';\n break;\n case 'volume':\n value = trend.volume ?? '';\n break;\n default:\n value = trend.units ?? '';\n }\n return value;\n };\n\n const getTrendDirection = (product: TopProduct, sortBy: ProductSortOption): TrendDirection => {\n const trendValue = getTrendValue(product, sortBy);\n // Use resolveTrendDirection which properly parses numeric value\n // This ensures \"+0%\" and \"-0%\" are treated as neutral (grey), not up/down\n return resolveTrendDirection(trendValue);\n };\n\n const getTrendChartIcon = (direction: TrendDirection) => getTrendIcon(direction);\n\n const displayedProducts = products.slice(0, maxProducts);\n const rankLabel = getTranslation(Keys.widget.topProducts.rank);\n const trendLabel = getTranslation(Keys.defaults.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 <StyledSelect\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.defaults.byUnits)}</option>\n <option value=\"revenue\">{getTranslation(Keys.defaults.byRevenue)}</option>\n <option value=\"volume\">{getTranslation(Keys.defaults.byVolume)}</option>\n </StyledSelect>\n <WidgetMenu widgetId=\"top-products\" onFullView={onTitleClick} onExport={onExport} />\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 {getTrendChartIcon(trendDirection)}\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 React from 'react';\nimport ShowChartIcon from '@mui/icons-material/ShowChart';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\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 <ShowChartIcon />;\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\nexport interface PieChartLabelProps {\n cx: number;\n cy: number;\n midAngle: number;\n innerRadius: number;\n outerRadius: number;\n percentage: number;\n}\n\nexport function renderPieChartLabel(\n props: PieChartLabelProps,\n options?: { fontSize?: string; fontWeight?: string },\n): React.ReactNode {\n // eslint-disable-next-line react/prop-types\n const { cx, cy, midAngle, innerRadius, outerRadius, percentage } = props;\n const RADIAN = Math.PI / 180;\n // Position label in the middle of the donut ring\n const radius = innerRadius + (outerRadius - innerRadius) / 2;\n const x = cx + radius * Math.cos(-midAngle * RADIAN);\n const y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n return (\n <text\n x={x}\n y={y}\n fill=\"white\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fontSize={options?.fontSize ?? '10'}\n fontWeight={options?.fontWeight ?? '600'}\n fontFamily=\"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\"\n letterSpacing=\"0.2\"\n >\n {`${percentage}%`}\n </text>\n );\n}\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\n/**\n * Gets the appropriate locale for displaying currency based on the market/region code\n * @param marketCode - The market code (e.g., 'US', 'IN', 'CA')\n * @returns The locale string (e.g., 'en-US', 'en-IN', 'en-CA')\n */\nexport function getLocaleFromMarketCode(marketCode?: string): string {\n switch (marketCode) {\n case 'IN':\n return 'en-IN';\n case 'CA':\n return 'en-CA';\n case 'US':\n default:\n return 'en-US';\n }\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\nexport function capitalizeFirstLetter(text: string): string {\n if (!text || text.length === 0) return text;\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n/**\n * Gets the numeric value from a SignupDataPoint based on the selected signup view.\n * Maps the signup view option to the corresponding data field:\n * - 'all' → total\n * - 'members' → members\n * - 'retail' → retail\n * - 'brandAffiliates' → brandAffiliates\n */\nexport function getSignupValueByView(\n dataPoint: {\n readonly total: number;\n readonly members: number;\n readonly retail: number;\n readonly brandAffiliates: number;\n },\n view: 'all' | 'members' | 'retail' | 'brandAffiliates',\n): number {\n switch (view) {\n case 'members':\n return dataPoint.members;\n case 'retail':\n return dataPoint.retail;\n case 'brandAffiliates':\n return dataPoint.brandAffiliates;\n case 'all':\n default:\n return dataPoint.total;\n }\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: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n vertical-align: middle;\n\n @media (min-width: 768px) {\n min-width: 28px;\n height: 28px;\n font-size: 16px;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 22px;\n letter-spacing: 0;\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: 16px;\n max-width: none;\n }\n`;\n\nexport const ProductSubtitle = styled('div')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\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 FileDownloadIcon from '@mui/icons-material/FileDownload';\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 readonly onExport?: () => void;\n}\n\nexport const WidgetMenu: React.FC<WidgetMenuProps> = ({ widgetId, onFullView, onExport }) => {\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 const handleExport = () => {\n handleClose();\n if (onExport) {\n onExport();\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-viewdetails\">\n <ListItemIcon>\n <VisibilityIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{getTranslation(Keys.widget.menu.viewDetails)}</ListItemText>\n </MenuItem>\n {onExport && (\n <MenuItem onClick={handleExport} data-testid=\"widget-menu-item-export\">\n <ListItemIcon>\n <FileDownloadIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{getTranslation(Keys.widget.menu.exportData)}</ListItemText>\n </MenuItem>\n )}\n </Menu>\n </>\n );\n};\n","import IconButton from '@mui/material/IconButton';\nimport { styled, ColorUtils } from '@nuskin/foundation-theme';\n\nconst { getGenomeColor } = ColorUtils;\n\nexport const StyledIconButton = styled(IconButton)(({ theme }) => ({\n padding: '4px',\n color: getGenomeColor(theme, 'N100'),\n '&:hover': {\n backgroundColor: getGenomeColor(theme, 'N20'),\n },\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 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 { StyledSelect } from '../DashboardHeader.styled';\nimport type { ConversionDataPoint, ConversionFilterOption, DateRangeOption } from '../../types.d';\nimport { ChartWidgetSkeleton } from '../LoadingSkeletons';\nimport { formatAxisDate } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\nimport { DEFAULT_DATE_RANGE } from '../../utils/dateConstants';\nimport { filterConversionData } from '../../utils/conversionFilter';\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 dateRange?: DateRangeOption;\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 readonly onExport?: () => void;\n}\n\nconst CHART_MARGIN = { top: 5, right: 10, left: -10, bottom: 5 };\nconst AXIS_TICK = { fontSize: 10 };\n\ninterface DotProps {\n readonly cx?: number;\n readonly cy?: number;\n readonly r?: number;\n}\n\n// Custom hollow dot component for ConversionRate chart\nconst HollowDot = (props: DotProps) => {\n const { cx, cy, r = 3 } = props;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"#FFFFFF\"\n fillOpacity=\"0\"\n stroke=\"#3B82F6\"\n strokeWidth=\"2\"\n style={{ pointerEvents: 'none' }}\n />\n );\n};\n\nconst ActiveHollowDot = (props: DotProps) => {\n const { cx, cy, r = 5 } = props;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"#FFFFFF\"\n fillOpacity=\"0\"\n stroke=\"#3B82F6\"\n strokeWidth=\"2\"\n style={{ pointerEvents: 'none' }}\n />\n );\n};\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 dateRange = DEFAULT_DATE_RANGE,\n isLoading = false,\n title,\n summaryRate,\n summaryChangePct,\n onFilterChange,\n onTitleClick,\n onExport,\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.defaults.noData);\n const noChangeText = getTranslation(Keys.defaults.noChange);\n\n const filteredData = React.useMemo(\n () => filterConversionData(conversionData, conversionFilter),\n [conversionData, conversionFilter],\n );\n\n const currentRate = React.useMemo(() => {\n if (typeof summaryRate === 'number' && Number.isFinite(summaryRate)) return summaryRate;\n return filteredData.at(-1)?.rate ?? 0;\n }, [summaryRate, filteredData]);\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 (filteredData.length < 2) return { direction: 'neutral', value: noDataText };\n const latestRate = filteredData.at(-1)?.rate ?? 0;\n const previousRate = filteredData[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, filteredData, noChangeText, noDataText]);\n\n const formattedData = React.useMemo(\n () => filteredData.map((item) => ({ ...item, shortDate: formatAxisDate(item.date) })),\n [filteredData],\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.defaults.conversionRate)}\n </ChartTitle>\n <HeaderActionsContainer>\n <StyledSelect\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.defaults.all)}</option>\n <option value=\"retail\">{getTranslation(Keys.filter.conversionType.retail)}</option>\n <option value=\"member\">{getTranslation(Keys.filter.conversionType.member)}</option>\n </StyledSelect>\n <WidgetMenu widgetId=\"conversion-rate\" onFullView={onTitleClick} onExport={onExport} />\n </HeaderActionsContainer>\n </TitleRow>\n </ChartHeader>\n\n <MetricDisplay>\n <MetricValue\n aria-label={`${getTranslation(Keys.defaults.conversionRate)}: ${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\">{getComparedToText(dateRange)}</div>\n </MetricTrend>\n )}\n </MetricDisplay>\n\n <FormulaDisplay data-testid=\"conversion-formula\">\n {getTranslation(Keys.widget.conversionRate.formula)}\n </FormulaDisplay>\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={<HollowDot />}\n activeDot={<ActiveHollowDot />}\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 align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n padding-bottom: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`;\n\nexport const MetricValue = styled('div')`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n padding: 0;\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: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\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: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\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: 8px;\n margin-top: 0;\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 DEFAULT_DATE_RANGE: DateRangeOption = 'last30days';\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\n/**\n * Extract and format the date range from an array of data objects.\n * Handles various date field names: 'date', 'Date', 'dateTime', etc.\n * Falls back to calculating from dateRange option if no date data is available.\n * @param data Array of objects with date information\n * @param fallbackLabel Fallback label if no dates found\n * @returns Formatted date range string (e.g., \"May 30 - Aug 27\")\n */\nexport function getActualDateRange(data: unknown[], fallbackLabel: string = 'N/A'): string {\n if (!Array.isArray(data) || data.length === 0) return fallbackLabel;\n\n try {\n // Extract first and last dates from data\n const first = data[0] as Record<string, unknown>;\n const last = data[data.length - 1] as Record<string, unknown>;\n\n // Try various date field names\n const dateFieldNames = ['date', 'Date', 'dateTime', 'eventDate', 'timestamp'];\n let startDateStr: string | undefined;\n let endDateStr: string | undefined;\n\n for (const fieldName of dateFieldNames) {\n if (first[fieldName] && !startDateStr) {\n startDateStr = String(first[fieldName]);\n }\n if (last[fieldName] && !endDateStr) {\n endDateStr = String(last[fieldName]);\n }\n }\n\n if (startDateStr && endDateStr) {\n return formatDateRange(startDateStr, endDateStr);\n }\n } catch {\n // Silently fail and return fallback\n }\n\n return fallbackLabel;\n}\n\n/**\n * Calculate and format the date range based on a DateRangeOption.\n * Used for components without time-series data (e.g., TopProducts, TopCategories)\n * @param dateRangeOption The selected date range option\n * @returns Formatted date range string (e.g., \"Aug 28 - Sep 27\" for last30days)\n */\nexport function calculateDateRangeFromOption(dateRangeOption: DateRangeOption): string {\n const today = new Date();\n const year = today.getFullYear();\n const month = today.getMonth();\n const date = today.getDate();\n\n let startDate: Date;\n let endDate = new Date(year, month, date);\n\n switch (dateRangeOption) {\n case 'last7days':\n startDate = new Date(year, month, date - 7);\n break;\n case 'last30days':\n startDate = new Date(year, month, date - 30);\n break;\n case 'last90days':\n startDate = new Date(year, month, date - 90);\n break;\n case 'thisMonth':\n startDate = new Date(year, month, 1);\n endDate = new Date(year, month + 1, 0); // Last day of current month\n break;\n default:\n return 'N/A';\n }\n\n return formatDateRange(formatISODate(startDate), formatISODate(endDate));\n}\n","import type { DateRangeOption } from '../types.d';\nimport { ShoppingDashboardTranslationKeys } from '../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { resolveTranslation } from '../TranslationKeys/translationResolver';\n\n/**\n * Generates dynamic comparison text based on the selected date range.\n * Uses translation keys for internationalization support.\n * @param dateRange The selected date range option\n * @returns Dynamic comparison text like \"compared to this time 7 days ago\"\n */\nexport function getComparedToText(dateRange: DateRangeOption): string {\n const keys = ShoppingDashboardTranslationKeys.widget.compareTo;\n\n switch (dateRange) {\n case 'last7days':\n return resolveTranslation(keys.last7days);\n case 'last30days':\n return resolveTranslation(keys.last30days);\n case 'last90days':\n return resolveTranslation(keys.last90days);\n case 'thisMonth':\n return resolveTranslation(keys.thisMonth);\n default:\n // Fallback for unknown date ranges\n return resolveTranslation(keys.last30days);\n }\n}\n","import type { ConversionDataPoint, ConversionFilterOption } from '../types.d';\n\nexport function matchesConversionFilter(point: ConversionDataPoint, filter: ConversionFilterOption): boolean {\n if (filter === 'all') return true;\n // An API that does not supply the dimension yet should not blank the chart\n if (point.priceTypes === undefined) return true;\n return point.priceTypes.some((priceType) => priceType.toLowerCase() === filter);\n}\n\nexport function filterConversionData(\n conversionData: readonly ConversionDataPoint[],\n filter: ConversionFilterOption,\n): ConversionDataPoint[] {\n return conversionData.filter((point) => matchesConversionFilter(point, filter));\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 MetricDisplay,\n MetricValue,\n MetricTrend,\n ChartContainer,\n Legend,\n LegendItem,\n LegendColor,\n LegendLabel,\n HeaderActionsContainer,\n} from './SignupsChart.styled';\nimport { StyledSelect } from '../DashboardHeader.styled';\nimport type { SignupDataPoint, SignupViewOption, DateRangeOption } from '../../types.d';\nimport { ChartWidgetSkeleton } from '../LoadingSkeletons';\nimport { formatAxisDate } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\nimport { getSignupValueByView } from '../../utils/dataUtils';\nimport { DEFAULT_DATE_RANGE } from '../../utils/dateConstants';\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 dateRange?: DateRangeOption;\n readonly isLoading?: boolean;\n readonly title?: string;\n readonly onViewChange?: (view: SignupViewOption) => void;\n readonly onTitleClick?: () => void;\n readonly onExport?: () => 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 };\n\ninterface DotProps {\n readonly cx?: number;\n readonly cy?: number;\n readonly r?: number;\n}\n\n// Cache to memoize component factories by color to prevent Recharts reconciliation issues\n// Recharts uses object identity checks for component types, so we must return the same\n// component reference for the same color across renders\nconst dotComponentCache = new Map<string, React.ComponentType<DotProps>>();\n\n// Custom hollow dot component that accepts stroke color\n// Returns cached component to maintain stable references across renders\nconst HollowDotFactory = (strokeColor: string) => {\n if (dotComponentCache.has(strokeColor)) {\n return dotComponentCache.get(strokeColor)!;\n }\n\n // eslint-disable-next-line react/display-name\n const HollowDot = (props: DotProps) => {\n const { cx = 0, cy = 0, r = 2 } = props;\n return (\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"#FFFFFF\"\n fillOpacity=\"0\"\n stroke={strokeColor}\n strokeWidth=\"1.5\"\n style={{ pointerEvents: 'none' }}\n />\n );\n };\n\n dotComponentCache.set(strokeColor, HollowDot);\n return HollowDot;\n};\n\nconst SignupsChartComponent: React.FC<SignupsChartProps> = ({\n signupData,\n signupView,\n dateRange = DEFAULT_DATE_RANGE,\n isLoading = false,\n title,\n onViewChange,\n onTitleClick,\n onExport,\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.defaults.noData);\n const noChangeText = getTranslation(Keys.defaults.noChange);\n\n const totalSignups = React.useMemo(() => {\n if (signupData.length === 0) return 0;\n const lastDataPoint = signupData[signupData.length - 1];\n return getSignupValueByView(lastDataPoint, signupView);\n }, [signupData, signupView]);\n\n const trendInfo = React.useMemo((): { direction: 'up' | 'down' | 'neutral'; value: string } => {\n if (signupData.length < 2) return { direction: 'neutral', value: noDataText };\n const latestValue = getSignupValueByView(signupData[signupData.length - 1], signupView);\n const previousValue = getSignupValueByView(signupData[0], signupView);\n const change = latestValue - previousValue;\n const percentageChange = previousValue === 0 ? 0 : (change / previousValue) * 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, signupView]);\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.defaults.members);\n const retailLabel = getTranslation(Keys.defaults.retail);\n const brandAffiliatesLabel = getTranslation(Keys.defaults.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 <StyledSelect\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 </StyledSelect>\n <WidgetMenu widgetId=\"signups\" onFullView={onTitleClick} onExport={onExport} />\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\">{getComparedToText(dateRange)}</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={HollowDotFactory(\n signupView === 'all' ? SERIES_COLORS.total : SERIES_COLORS.members,\n )}\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={HollowDotFactory(SERIES_COLORS.members)}\n name={membersLabel}\n />\n <Line\n type=\"monotone\"\n dataKey=\"retail\"\n stroke={SERIES_COLORS.retail}\n strokeWidth={2}\n dot={HollowDotFactory(SERIES_COLORS.retail)}\n name={retailLabel}\n />\n <Line\n type=\"monotone\"\n dataKey=\"brandAffiliates\"\n stroke={SERIES_COLORS.brandAffiliates}\n strokeWidth={2}\n dot={HollowDotFactory(SERIES_COLORS.brandAffiliates)}\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={HollowDotFactory(SERIES_COLORS.retail)}\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={HollowDotFactory(SERIES_COLORS.brandAffiliates)}\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: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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: center;\n gap: 10px;\n margin-bottom: 16px;\n flex-wrap: nowrap;\n width: 100%;\n`;\n\nexport const MetricValue = styled('div')`\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n margin: 0;\n padding: 0;\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: row;\n gap: 6px;\n align-items: center;\n padding-top: 0;\n flex-wrap: nowrap;\n white-space: nowrap;\n\n .trend-line {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n line-height: 1;\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: 13px;\n height: 13px;\n flex-shrink: 0;\n }\n .change-value {\n font-weight: 600;\n line-height: 1;\n }\n .change-percent {\n font-weight: 400;\n line-height: 1;\n }\n }\n\n .comparison-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\n letter-spacing: 0.12px;\n margin: 0;\n padding: 0;\n white-space: normal;\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 justify-content: center;\n gap: 16px;\n margin-top: 16px;\n padding-top: 0;\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 TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport { WidgetMenu } from '../WidgetMenu';\nimport {\n CategoriesContainer,\n ChartHeader,\n ChartTitle,\n ChartAndLegendContainer,\n ChartWrapper,\n LegendContainer,\n LegendItem,\n LegendColor,\n LegendInfo,\n LegendName,\n LegendValue,\n LegendValueWrapper,\n LegendTrendInline,\n DonutCenterOverlay,\n DonutCenterLabel,\n DonutCenterValue,\n DonutCenterTrend,\n EmptyState,\n EmptyStateText,\n HeaderActionsContainer,\n} from './TopCategoriesPieChart.styled';\nimport { StyledSelect } from '../DashboardHeader.styled';\nimport type { CategoryRevenue, CategorySortOption } from '../../types.d';\nimport type { TrendDirection } from '../types';\nimport { CategoriesPieChartSkeleton } from '../LoadingSkeletons';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { resolveTrendDirection, calculateWeightedRevenueTrend, renderPieChartLabel } 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 summaryChangePct?: number | null;\n readonly onSortChange?: (sort: CategorySortOption) => void;\n readonly onTitleClick?: () => void;\n readonly onExport?: () => void;\n}\n\nconst TopCategoriesPieChartComponent: React.FC<TopCategoriesPieChartProps> = ({\n categories,\n categorySort,\n isLoading = false,\n title,\n summaryChangePct,\n onSortChange,\n onTitleClick,\n onExport,\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, totalVolume, trendDirection, formattedTrend } = React.useMemo(() => {\n const nextSortedCategories = [...categories].sort((a, b) => {\n if (categorySort === 'revenue') return b.revenue - a.revenue;\n return (b.volume ?? 0) - (a.volume ?? 0);\n });\n\n const nextTotalRevenue = nextSortedCategories.reduce((sum, category) => sum + category.revenue, 0);\n const nextTotalVolume = nextSortedCategories.reduce((sum, category) => sum + (category.volume ?? 0), 0);\n\n let nextTrendDirection: TrendDirection;\n let nextFormattedTrend: string;\n\n // Use the provided summaryChangePct if available\n if (summaryChangePct !== undefined && summaryChangePct !== null) {\n if (Math.abs(summaryChangePct) < 0.1) {\n nextFormattedTrend = '0%';\n nextTrendDirection = 'neutral';\n } else {\n nextTrendDirection = summaryChangePct > 0 ? 'up' : 'down';\n nextFormattedTrend = `${summaryChangePct > 0 ? '+' : ''}${summaryChangePct.toFixed(1)}%`;\n }\n } else {\n const { direction, formatted } = calculateWeightedRevenueTrend(\n nextSortedCategories,\n (category) => (categorySort === 'volume' ? (category.volume ?? 0) : category.revenue),\n (category) => (categorySort === 'volume' ? category.trend?.volume : category.trend?.revenue),\n );\n nextTrendDirection = direction;\n nextFormattedTrend = formatted;\n }\n\n return {\n sortedCategories: nextSortedCategories,\n totalRevenue: nextTotalRevenue,\n totalVolume: nextTotalVolume,\n trendDirection: nextTrendDirection,\n formattedTrend: nextFormattedTrend,\n };\n }, [categories, categorySort, summaryChangePct]);\n\n const getTrendGraphIcon = (direction: TrendDirection) => {\n if (direction === 'up') {\n return <TrendingUpIcon sx={{ fontSize: '14px' }} aria-hidden=\"true\" />;\n }\n if (direction === 'down') {\n return <TrendingDownIcon sx={{ fontSize: '14px' }} aria-hidden=\"true\" />;\n }\n return null;\n };\n\n interface CustomLabelProps {\n cx: number;\n cy: number;\n midAngle: number;\n innerRadius: number;\n outerRadius: number;\n percentage: number;\n }\n\n const renderCustomLabel = (props: CustomLabelProps) => {\n return renderPieChartLabel(props, { fontSize: '10', fontWeight: '600' });\n };\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 <StyledSelect\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.defaults.byRevenue)}</option>\n <option value=\"volume\">{getTranslation(Keys.defaults.byVolume)}</option>\n </StyledSelect>\n <WidgetMenu widgetId=\"top-categories\" onFullView={onTitleClick} onExport={onExport} />\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={categorySort === 'volume' ? 'volume' : 'revenue'}\n nameKey=\"name\"\n paddingAngle={2}\n label={renderCustomLabel}\n labelLine={false}\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>\n {categorySort === 'volume'\n ? getTranslation(Keys.defaults.volume)\n : getTranslation(Keys.stats.revenue)}\n </DonutCenterLabel>\n <DonutCenterValue>\n {categorySort === 'volume'\n ? `${totalVolume.toFixed(1)} SV`\n : formatMoney(totalRevenue, currencyCode)}\n </DonutCenterValue>\n <DonutCenterTrend direction={trendDirection}>\n {getTrendGraphIcon(trendDirection)}\n <span>{formattedTrend}</span>\n </DonutCenterTrend>\n </DonutCenterOverlay>\n </ChartWrapper>\n\n <LegendContainer data-testid=\"categories-legend-container\">\n {sortedCategories.map((category, index) => {\n const displayValue = categorySort === 'volume' ? category.volume : category.revenue;\n const displayPercentage =\n categorySort === 'volume' ? category.volumeSharePct : category.percentage;\n const displayTrend =\n categorySort === 'volume' ? category.trend?.volume : category.trend?.revenue;\n return (\n <LegendItem key={category.id} data-testid={`category-legend-${index}`}>\n <LegendColor color={category.color} />\n <LegendInfo>\n <LegendName>\n {category.name.charAt(0).toUpperCase() + category.name.slice(1)}\n </LegendName>\n <LegendValueWrapper>\n <LegendValue>\n {categorySort === 'volume'\n ? `${displayValue?.toFixed(1)} SV (${displayPercentage}%)`\n : `${formatMoney(displayValue ?? 0, category.currencyCode)} (${displayPercentage}%)`}\n </LegendValue>\n {displayTrend ? (\n <LegendTrendInline\n direction={resolveTrendDirection(displayTrend)}\n data-testid={`category-legend-trend-${index}`}\n aria-label={displayTrend}\n >\n {getTrendGraphIcon(resolveTrendDirection(displayTrend))}\n </LegendTrendInline>\n ) : null}\n </LegendValueWrapper>\n </LegendInfo>\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: 0;\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: 18px;\n font-weight: 400;\n line-height: 31.18px;\n letter-spacing: 0;\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 @media (min-width: 1080px) {\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: 20px;\n align-items: center;\n justify-content: center;\n flex: 1;\n\n @media (min-width: 768px) {\n flex-direction: row;\n gap: 24px;\n align-items: center;\n justify-content: center;\n }\n`;\n\nexport const ChartWrapper = styled('div')`\n position: relative;\n width: 100%;\n height: 220px;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n width: 260px;\n height: 260px;\n flex: 0 0 auto;\n }\n\n @media (min-width: 1080px) {\n width: 280px;\n height: 280px;\n flex: 0 0 auto;\n }\n\n /* Style recharts pie labels (percentages inside segments) */\n svg text {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\n }\n\n text[class*='recharts'] {\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 12px;\n font-weight: 700;\n fill: white;\n text-anchor: middle;\n dominant-baseline: middle;\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 display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n margin-top: 4px;\n font-size: 12px;\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 svg {\n width: 14px;\n height: 14px;\n font-size: 14px;\n }\n`;\n\nexport const LegendContainer = styled('div')`\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 0 1 auto;\n\n @media (min-width: 768px) {\n gap: 10px;\n }\n`;\n\nexport const LegendItem = styled('div')`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 0;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n\n @media (min-width: 768px) {\n gap: 10px;\n padding: 6px 0;\n }\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: row;\n gap: 4px;\n flex: 1;\n min-width: 0;\n align-items: center;\n`;\n\nexport const LegendName = styled('div')`\n font-size: 13px;\n font-weight: 600;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (min-width: 768px) {\n font-size: 14px;\n }\n`;\n\nexport const LegendValue = styled('div')`\n font-size: 12px;\n font-weight: 500;\n color: ${({ theme }) => getGenomeColor(theme, 'N100')};\n flex-shrink: 0;\n white-space: nowrap;\n\n @media (min-width: 768px) {\n font-size: 13px;\n }\n`;\n\nexport const LegendPercentage = styled('div')`\n display: none;\n`;\n\nexport const LegendValueWrapper = styled('div')`\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1;\n min-width: 0;\n`;\n\nexport const LegendTrendInline = 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: 14px;\n height: 14px;\n font-size: 14px;\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';\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 readonly categoriesSummaryChangePct?: number | null;\n readonly conversionSummaryChangePct?: number | null;\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 readonly onProductsExport?: () => void;\n readonly onConversionExport?: () => void;\n readonly onSignupsExport?: () => void;\n readonly onCategoriesExport?: () => 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 = DEFAULT_DATE_RANGE,\n market = 'all',\n productSort = 'units',\n signupView = 'all',\n conversionFilter = 'all',\n categorySort = 'revenue',\n categoriesSummaryChangePct,\n conversionSummaryChangePct,\n markets,\n onDateRangeChange,\n onMarketChange,\n onProductSortChange,\n onSignupViewChange,\n onConversionFilterChange,\n onCategorySortChange,\n onProductsTitleClick,\n onConversionTitleClick,\n onSignupsTitleClick,\n onCategoriesToTitleClick,\n onProductsExport,\n onConversionExport,\n onSignupsExport,\n onCategoriesExport,\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.defaults.volume)}\n value={stats?.metrics?.volume ?? '0'}\n subtitle={getTranslation(Keys.defaults.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.defaults.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 onExport={onProductsExport}\n />\n <SignupsChart\n signupData={resolvedSignupData}\n signupView={signupView}\n dateRange={dateRange}\n isLoading={isLoading}\n onViewChange={onSignupViewChange}\n onTitleClick={onSignupsTitleClick}\n onExport={onSignupsExport}\n />\n </TwoColumnGrid>\n\n <TwoColumnGrid data-testid=\"widget-row-2\">\n <ConversionRateChart\n conversionData={resolvedConversionData}\n conversionFilter={conversionFilter}\n dateRange={dateRange}\n isLoading={isLoading}\n summaryChangePct={conversionSummaryChangePct}\n onFilterChange={onConversionFilterChange}\n onTitleClick={onConversionTitleClick}\n onExport={onConversionExport}\n />\n <TopCategoriesPieChart\n categories={resolvedCategories}\n categorySort={categorySort}\n isLoading={isLoading}\n summaryChangePct={categoriesSummaryChangePct}\n onSortChange={onCategorySortChange}\n onTitleClick={onCategoriesToTitleClick}\n onExport={onCategoriesExport}\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\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 conversionPriceTypeTrend?: ConversionDataPoint[];\n readonly signupData?: SignupDataPoint[];\n readonly categories?: CategoryRevenue[];\n readonly categoriesSummaryChangePct?: number | null;\n readonly conversionSummaryChangePct?: number | null;\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 readonly onProductsExport?: () => void;\n readonly onConversionExport?: () => void;\n readonly onSignupsExport?: () => void;\n readonly onCategoriesExport?: () => 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 conversionPriceTypeTrend,\n signupData,\n categories,\n categoriesSummaryChangePct,\n conversionSummaryChangePct,\n orders,\n signups,\n isLoading = false,\n error,\n shopTitle,\n className,\n translate,\n initialDateRange = DEFAULT_DATE_RANGE,\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 onProductsExport,\n onConversionExport,\n onSignupsExport,\n onCategoriesExport,\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 priceTypeTrend={conversionPriceTypeTrend}\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 summaryChangePct={categoriesSummaryChangePct}\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 categoriesSummaryChangePct={categoriesSummaryChangePct}\n conversionSummaryChangePct={conversionSummaryChangePct}\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 onProductsExport={onProductsExport}\n onConversionExport={onConversionExport}\n onSignupsExport={onSignupsExport}\n onCategoriesExport={onCategoriesExport}\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, getLocaleFromMarketCode } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } 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.defaults.units) },\n { value: 'revenue', label: getTranslation(Keys.defaults.revenue) },\n { value: 'volume', label: getTranslation(Keys.defaults.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.defaults.revenue),\n sortable: true,\n render: (value: unknown) => (\n <MetricValue>\n {formatMoney(Number(value), currencyCode, getLocaleFromMarketCode(market))}\n </MetricValue>\n ),\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, market],\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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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>{getTranslation(Keys.defaults.units)}</MobileMetricLabel>\n <MobileMetricValue>{row.units.toLocaleString()}</MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>{getTranslation(Keys.defaults.revenue)}</MobileMetricLabel>\n <MobileMetricValue>\n {formatMoney(row.revenue, currencyCode, getLocaleFromMarketCode(market))}\n </MobileMetricValue>\n </MobileMetricItem>\n <MobileMetricItem>\n <MobileMetricLabel>{getTranslation(Keys.defaults.volume)}</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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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 }) => getGenomeColor(theme, 'N20')};\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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: row;\n align-items: center;\n padding: 16px 0;\n gap: 10px;\n flex-wrap: nowrap;\n width: 100%;\n\n @media (max-width: 767px) {\n padding: 8px 0;\n flex-wrap: nowrap;\n align-items: center;\n }\n`;\n\nexport const MetricValue = styled(Typography)`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0em;\n color: ${({ theme }) => theme.palette.text.primary};\n margin: 0;\n padding: 0;\n\n @media (max-width: 767px) {\n font-size: 28px;\n line-height: 1;\n }\n`;\n\nexport const MetricTrend = styled(Box)<{ direction: 'up' | 'down' | 'neutral' }>`\n display: flex;\n align-items: center;\n gap: 4px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 13px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.01em;\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 flex-wrap: nowrap;\n white-space: nowrap;\n\n svg {\n font-size: 13px;\n flex-shrink: 0;\n width: 13px;\n height: 13px;\n }\n\n span {\n display: inline;\n line-height: 1;\n }\n\n @media (max-width: 767px) {\n font-size: 13px;\n line-height: 1;\n flex-wrap: nowrap;\n\n svg {\n font-size: 13px;\n width: 13px;\n height: 13px;\n }\n }\n`;\n\nexport const ComparisonText = styled(Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => theme.palette.text.secondary};\n white-space: nowrap;\n\n @media (max-width: 767px) {\n font-size: 12px;\n line-height: 1.3;\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: 90%;\n height: 450px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 250px;\n margin-bottom: 0;\n }\n`;\n\nexport const TableSection = styled(Box)<{ withCard?: boolean }>`\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 0;\n vertical-align: middle;\n color: ${({ theme }) => getGenomeColor(theme, 'N70')};\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 } from 'recharts';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport { PageHeader, buildDateRangeFilter, buildMarketFilter, type FilterConfig } from '../PageHeader';\nimport { DataTable, type ColumnDef } from '../DataTable';\nimport { Pagination } from '../Pagination';\nimport { usePaginatedItems, formatMoney, getLocaleFromMarketCode } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\nimport { filterConversionData } from '../../utils/conversionFilter';\nimport { collectPriceTypes, priceTypeColor, priceTypeSeriesKey, toSeriesPoint } from '../../utils/conversionSeries';\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 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 OrderIdColumnCell,\n ConversionTrendChartContainer,\n ChartWithLegendWrapper,\n ChartLegendContainer,\n LegendItem,\n TrendValueText,\n TrendComparisonText,\n MetricSectionWrapper,\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 // Order-details trend, used only to draw a line per price type\n readonly priceTypeTrend?: 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 priceTypeTrend,\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 filteredData = React.useMemo(\n () => filterConversionData(conversionData, conversionFilter),\n [conversionData, conversionFilter],\n );\n\n // Only the unfiltered view splits into a line per price type; a specific filter already has one series\n const priceTypeSeries = React.useMemo(\n () => (conversionFilter === 'all' ? collectPriceTypes(priceTypeTrend ?? []) : []),\n [conversionFilter, priceTypeTrend],\n );\n\n // The price type series come from the order-details trend, so the headline keeps using conversionData\n const chartData = React.useMemo(\n () =>\n priceTypeSeries.length > 0\n ? (priceTypeTrend ?? []).map((point) => toSeriesPoint(point, priceTypeSeries))\n : filteredData.map((point) => toSeriesPoint(point, priceTypeSeries)),\n [priceTypeSeries, priceTypeTrend, filteredData],\n );\n\n const currentRate = React.useMemo(() => {\n if (typeof summaryRate === 'number' && Number.isFinite(summaryRate)) return summaryRate;\n return filteredData.at(-1)?.rate ?? 0;\n }, [summaryRate, filteredData]);\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 (filteredData.length < 2) return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const latestRate = filteredData.at(-1)?.rate ?? 0;\n const previousRate = filteredData[0].rate;\n if (previousRate === 0) return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n const changePercent = ((latestRate - previousRate) / previousRate) * 100;\n if (Math.abs(changePercent) < 0.1) {\n return { direction: 'neutral', value: getTranslation(Keys.defaults.zeroTrend) };\n }\n let direction: TrendDirection = 'neutral';\n if (changePercent > 0) direction = 'up';\n else if (changePercent < 0) direction = 'down';\n return { direction, value: `${changePercent >= 0 ? '+' : ''}${changePercent.toFixed(1)}%` };\n }, [summaryChangePct, filteredData]);\n\n const getConversionFilterLabel = React.useCallback((filter: ConversionFilterOption): string => {\n if (filter === 'retail') return getTranslation(Keys.filter.conversionType.retail);\n if (filter === 'member') return getTranslation(Keys.filter.conversionType.member);\n return getTranslation(Keys.defaults.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.defaults.all) },\n { value: 'retail', label: getTranslation(Keys.filter.conversionType.retail) },\n { value: 'member', label: getTranslation(Keys.filter.conversionType.member) },\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.priceType?.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 {\n key: 'orderId',\n label: getTranslation(Keys.fullView.conversionRate.columns.orderId),\n sortable: true,\n render: (value) => <OrderIdColumnCell>{value as React.ReactNode}</OrderIdColumnCell>,\n },\n { key: 'date', label: getTranslation(Keys.defaults.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.defaults.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, getLocaleFromMarketCode(market), 2),\n },\n { key: 'bv', label: getTranslation(Keys.fullView.conversionRate.columns.bv), sortable: true },\n ],\n [market],\n );\n\n const getChartColor = React.useCallback(() => {\n if (conversionFilter === 'retail') return '#2e7d32';\n if (conversionFilter === 'member') 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.defaults.conversionRate)}\n dateRange={calculateDateRangeFromOption(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.defaults.conversionRate)}\n dateRange={calculateDateRangeFromOption(dateRange)}\n onBack={handleBack}\n filters={filters}\n onFilterChange={handleFilterChange}\n />\n\n <MetricChartCardSection data-testid=\"conversion-fullview-metric-chart\">\n <MetricSection>\n <MetricSectionWrapper>\n <MetricValue data-testid=\"conversion-rate-value\" style={{ marginRight: '6px' }}>\n {currentRate.toFixed(1)}%\n </MetricValue>\n <MetricTrend direction={trend.direction} data-testid=\"conversion-rate-trend\">\n {trend.direction === 'up' && <ArrowUpwardIcon />}\n {trend.direction === 'down' && <ArrowDownwardIcon />}\n <TrendValueText>{trend.value}</TrendValueText>\n <TrendComparisonText>{getComparedToText(dateRange)}</TrendComparisonText>\n </MetricTrend>\n </MetricSectionWrapper>\n </MetricSection>\n\n <ChartSection>\n <ChartWithLegendWrapper>\n <ConversionTrendChartContainer data-testid=\"conversion-fullview-chart\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={chartData} margin={{ top: 10, right: 10, left: 0, bottom: 0 }}>\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 {priceTypeSeries.length > 0 ? (\n priceTypeSeries.map((priceType, index) => (\n <Line\n key={priceType}\n type=\"monotone\"\n dataKey={priceTypeSeriesKey(priceType)}\n stroke={priceTypeColor(priceType, index)}\n strokeWidth={2}\n name={priceType}\n dot={false}\n />\n ))\n ) : (\n <Line\n type=\"monotone\"\n dataKey=\"rate\"\n stroke={getChartColor()}\n strokeWidth={2}\n name={`${getTranslation(Keys.defaults.conversionRate)} (${conversionFilterLabel})`}\n dot={false}\n />\n )}\n </LineChart>\n </ResponsiveContainer>\n </ConversionTrendChartContainer>\n <ChartLegendContainer>\n {priceTypeSeries.length > 0 ? (\n priceTypeSeries.map((priceType, index) => (\n <LegendItem key={priceType} $color={priceTypeColor(priceType, index)}>\n {priceType}\n </LegendItem>\n ))\n ) : (\n <LegendItem $color={getChartColor()}>\n {`${getTranslation(Keys.defaults.conversionRate)} (${conversionFilterLabel})`}\n </LegendItem>\n )}\n </ChartLegendContainer>\n </ChartWithLegendWrapper>\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.total)}\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 type { ConversionDataPoint } from '../types.d';\n\nexport const PRICE_TYPE_SERIES_PREFIX = 'rate__';\n\nconst PRICE_TYPE_COLORS: Readonly<Record<string, string>> = {\n retail: '#2e7d32',\n member: '#ed6c02',\n};\n\nconst FALLBACK_COLORS = ['#1976d2', '#9c27b0', '#00897b', '#c2185b'];\n\nexport function priceTypeSeriesKey(priceType: string): string {\n return `${PRICE_TYPE_SERIES_PREFIX}${priceType}`;\n}\n\nexport function priceTypeColor(priceType: string, index: number): string {\n return PRICE_TYPE_COLORS[priceType.toLowerCase()] ?? FALLBACK_COLORS[index % FALLBACK_COLORS.length];\n}\n\nexport function collectPriceTypes(conversionData: readonly ConversionDataPoint[]): string[] {\n const priceTypes: string[] = [];\n conversionData.forEach((point) => {\n Object.keys(point.ratesByPriceType ?? {}).forEach((priceType) => {\n if (!priceTypes.includes(priceType)) priceTypes.push(priceType);\n });\n });\n return priceTypes.sort((a, b) => a.localeCompare(b));\n}\n\n// A price type with no orders on a day is a real zero, not a gap in the line\nexport function toSeriesPoint(\n point: ConversionDataPoint,\n priceTypes: readonly string[],\n): ConversionDataPoint & Record<string, unknown> {\n const series: Record<string, number> = {};\n priceTypes.forEach((priceType) => {\n series[priceTypeSeriesKey(priceType)] = point.ratesByPriceType?.[priceType] ?? 0;\n });\n return { ...point, ...series };\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 ConversionTrendChartContainer = styled(Box)`\n width: 100%;\n height: 370px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`;\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 ChartWithLegendWrapper = styled(Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`;\n\nexport const ChartLegendContainer = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`;\n\nexport const LegendItem = styled(Box)<{ $color?: string }>`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({ $color }) => $color ?? 'inherit'};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\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\nexport const OrderIdColumnCell = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`;\n\nexport const TrendValueText = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0;\n`;\n\nexport const TrendComparisonText = styled('span')`\n margin-left: 2px;\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.01em;\n color: #5f5f5f;\n`;\n\nexport const MetricSectionWrapper = styled(Box)`\n display: flex;\n align-items: center;\n gap: 0;\n flex-wrap: wrap;\n`;\n","import React, { useState } from 'react';\nimport { Box } from '@mui/material';\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } 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, getSignupValueByView } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } from '../../utils/dateFormat';\nimport { getComparedToText } from '../../utils/comparisonTextUtils';\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 ChartWithLegendWrapper,\n ChartLegendContainer,\n LegendItem,\n NameColumnCell,\n TrendAbsoluteChangeText,\n TrendPercentageChangeText,\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\n/**\n * Transform API response format to SignupDataPoint array\n * Handles both direct array format and nested API response with 'daily' array\n */\nfunction normalizeSignupDataInput(input: unknown): SignupDataPoint[] {\n // Guard for nullish or non-object input\n if (input == null || typeof input !== 'object') {\n return [];\n }\n\n // If it's already an array, return it\n if (Array.isArray(input)) {\n return input;\n }\n\n // Handle API response format with 'daily' array\n const apiResponse = input as Record<string, unknown>;\n if (Array.isArray(apiResponse.daily)) {\n return (apiResponse.daily as Array<Record<string, unknown>>).map((item) => ({\n date: String(item.date ?? ''),\n total: toNumeric(item.total),\n members: toNumeric(item.members),\n retail: toNumeric(item.retail),\n brandAffiliates: toNumeric(\n item.brandAffiliates ?? item.brandAffiliate ?? item.brand_affiliates ?? item.brand_affiliate,\n ),\n }));\n }\n\n // Fallback to empty array\n return [];\n}\n\nexport interface SignupsFullViewProps {\n /**\n * Signup data - can be either:\n * 1. Direct array of SignupDataPoint (camelCase format)\n * 2. API response object with 'daily' array (snake_case format)\n */\n readonly signupData: SignupDataPoint[] | { daily?: Array<Record<string, unknown>>; [key: string]: unknown };\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 // First, transform API response format to array if needed\n const dataArray = normalizeSignupDataInput(signupData);\n\n // Then, normalize field names and values\n return dataArray.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 const totalSignups = React.useMemo(() => {\n if (normalizedSignupData.length === 0) return 0;\n const lastDataPoint = normalizedSignupData[normalizedSignupData.length - 1];\n return getSignupValueByView(lastDataPoint, signupView);\n }, [normalizedSignupData, signupView]);\n\n const trend = React.useMemo((): {\n direction: 'up' | 'down' | 'neutral';\n absoluteChange: number;\n percentageChange: string;\n } => {\n if (normalizedSignupData.length < 2)\n return {\n direction: 'neutral',\n absoluteChange: 0,\n percentageChange: getTranslation(Keys.defaults.zeroTrend),\n };\n const first = getSignupValueByView(normalizedSignupData[0], signupView);\n const last = getSignupValueByView(normalizedSignupData[normalizedSignupData.length - 1], signupView);\n if (first <= 0)\n return {\n direction: 'neutral',\n absoluteChange: 0,\n percentageChange: getTranslation(Keys.defaults.zeroTrend),\n };\n const absoluteChange = last - first;\n const percentageChange = (absoluteChange / first) * 100;\n let direction: 'up' | 'down' | 'neutral' = 'neutral';\n if (percentageChange > 0) direction = 'up';\n else if (percentageChange < 0) direction = 'down';\n return {\n direction,\n absoluteChange: Math.round(absoluteChange),\n percentageChange: `${percentageChange >= 0 ? '+' : ''}${percentageChange.toFixed(1)}%`,\n };\n }, [normalizedSignupData, signupView, Keys]);\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.defaults.all) },\n { value: 'members', label: getTranslation(Keys.defaults.members) },\n { value: 'retail', label: getTranslation(Keys.defaults.retail) },\n { value: 'brandAffiliates', label: getTranslation(Keys.defaults.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 {\n key: 'name',\n label: getTranslation(Keys.fullView.signups.columns.name),\n sortable: true,\n render: (value) => <NameColumnCell>{value as React.ReactNode}</NameColumnCell>,\n },\n { key: 'date', label: getTranslation(Keys.defaults.date), sortable: true },\n { key: 'type', label: getTranslation(Keys.defaults.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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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.direction !== 'neutral' && (\n <>\n <TrendAbsoluteChangeText>\n {trend.absoluteChange > 0 ? '+' : ''}\n {trend.absoluteChange}\n </TrendAbsoluteChangeText>\n <TrendPercentageChangeText>{trend.percentageChange}</TrendPercentageChangeText>\n </>\n )}\n {trend.direction === 'neutral' && <span>{trend.percentageChange}</span>}\n </MetricTrend>\n <ComparisonTextMobile>{getComparedToText(dateRange)}</ComparisonTextMobile>\n </MetricSection>\n\n <ChartSection>\n {hasSignupTrendData ? (\n <ChartWithLegendWrapper>\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 {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.defaults.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.defaults.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.defaults.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.defaults.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.defaults.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.defaults.brandAffiliates)}\n dot={{ r: 2 }}\n connectNulls\n />\n )}\n </LineChart>\n </ResponsiveContainer>\n </SignupTrendChartContainer>\n <Box>\n {signupView === 'all' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.total }}>\n {getTranslation(Keys.widget.signups.total)}\n </LegendItem>\n <LegendItem style={{ color: SERIES_COLORS.members }}>\n {getTranslation(Keys.defaults.members)}\n </LegendItem>\n <LegendItem style={{ color: SERIES_COLORS.retail }}>\n {getTranslation(Keys.defaults.retail)}\n </LegendItem>\n <LegendItem style={{ color: SERIES_COLORS.brandAffiliates }}>\n {getTranslation(Keys.defaults.brandAffiliates)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n {signupView === 'members' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.members }}>\n {getTranslation(Keys.defaults.members)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n {signupView === 'retail' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.retail }}>\n {getTranslation(Keys.defaults.retail)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n {signupView === 'brandAffiliates' && (\n <ChartLegendContainer>\n <LegendItem style={{ color: SERIES_COLORS.brandAffiliates }}>\n {getTranslation(Keys.defaults.brandAffiliates)}\n </LegendItem>\n </ChartLegendContainer>\n )}\n </Box>\n </ChartWithLegendWrapper>\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';\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(Box)`\n width: 100%;\n height: 320px;\n margin-bottom: 0;\n\n @media (max-width: 767px) {\n height: 260px;\n }\n`;\n\nexport const ComparisonTextMobile = styled(Typography)`\n margin: 0;\n padding: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n color: ${({ theme }) => theme.palette.text.secondary};\n white-space: nowrap;\n`;\n\nexport const ChartWithLegendWrapper = styled(Box)`\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-end;\n width: 100%;\n\n @media (max-width: 767px) {\n flex-direction: column;\n gap: 12px;\n align-items: flex-start;\n }\n`;\n\nexport const ChartLegendContainer = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n margin-bottom: 40px;\n padding: 0;\n flex-shrink: 0;\n min-width: 160px;\n\n @media (max-width: 767px) {\n margin-top: 16px;\n margin-bottom: 0;\n min-width: auto;\n }\n`;\n\nexport const LegendItem = styled(Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: ${({ theme }) => theme.palette.text.secondary};\n white-space: nowrap;\n\n &::before {\n content: '';\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n background-color: currentColor;\n }\n\n @media (max-width: 767px) {\n font-size: 12px;\n }\n`;\n\nexport const NameColumnCell = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\n`;\n\nexport const TrendAbsoluteChangeText = styled('span')`\n font-weight: 600;\n line-height: 1;\n`;\n\nexport const TrendPercentageChangeText = styled('span')`\n font-weight: 400;\n line-height: 1;\n`;\n","import React, { useState } from 'react';\nimport { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } 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, capitalizeFirstLetter, getLocaleFromMarketCode } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } from '../../utils/dateFormat';\nimport type {\n CategoryRevenue,\n DateRangeOption,\n MarketOption,\n MarketFilterOption,\n CategorySortOption,\n} from '../../types.d';\nimport type { TrendDirection } from '../types';\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 SummaryName,\n SummaryValue,\n SummaryPercentage,\n SummaryTrendIcon,\n DesktopTableContainer,\n MobileCategoriesContainer,\n MobileCategoryCard,\n CategoryNameColumnCell,\n} from './CategoriesFullView.styled';\nimport { useIsMobileViewport } from '../useViewport';\nimport {\n getTranslation,\n ShoppingDashboardTranslationKeys as Keys,\n} from '../../TranslationKeys/ShoppingDashboardTranslationKeys';\nimport { calculateWeightedRevenueTrend, renderPieChartLabel } 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 summaryChangePct?: number | null;\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 summaryChangePct,\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.defaults.byRevenue) },\n { value: 'trend', label: getTranslation(Keys.defaults.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 interface CustomLabelProps {\n cx: number;\n cy: number;\n midAngle: number;\n innerRadius: number;\n outerRadius: number;\n percentage: number;\n }\n\n const renderCustomLabel = (props: CustomLabelProps) => {\n return renderPieChartLabel(props, { fontSize: '12', fontWeight: '700' });\n };\n\n const getTrendIcon = (direction: TrendDirection) => {\n if (direction === 'up') {\n return <TrendingUpIcon sx={{ fontSize: '16px' }} aria-hidden=\"true\" />;\n }\n if (direction === 'down') {\n return <TrendingDownIcon sx={{ fontSize: '16px' }} aria-hidden=\"true\" />;\n }\n return null;\n };\n\n const resolveTrendDirection = (trendValue?: string): TrendDirection => {\n if (!trendValue) return 'neutral';\n const parsed = Number.parseFloat(trendValue);\n if (Number.isNaN(parsed)) return 'neutral';\n if (parsed > 0) return 'up';\n if (parsed < 0) return 'down';\n return 'neutral';\n };\n\n const sortedCategories = React.useMemo(\n () =>\n [...categories].sort((a, b) => {\n if (categorySort === 'revenue') return b.revenue - a.revenue;\n return (b.volume ?? 0) - (a.volume ?? 0);\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 let nextTrendDirection: TrendDirection;\n let nextFormattedTrend: string;\n\n // Use the provided summaryChangePct if available, otherwise calculate from items\n if (summaryChangePct !== undefined && summaryChangePct !== null) {\n if (Math.abs(summaryChangePct) < 0.1) {\n nextFormattedTrend = '0%';\n nextTrendDirection = 'neutral';\n } else {\n nextTrendDirection = summaryChangePct > 0 ? 'up' : 'down';\n nextFormattedTrend = `${summaryChangePct > 0 ? '+' : ''}${summaryChangePct.toFixed(1)}%`;\n }\n } else {\n const { direction, formatted } = calculateWeightedRevenueTrend(\n sortedCategories,\n (category) => category.revenue,\n (category) => category.trend?.revenue,\n );\n nextTrendDirection = direction;\n nextFormattedTrend = formatted;\n }\n\n return {\n totalRevenue: nextTotalRevenue,\n totalRevenueTrendDirection: nextTrendDirection,\n totalRevenueTrend: nextFormattedTrend,\n };\n }, [sortedCategories, summaryChangePct]);\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 currencyCode = sortedCategories[0]?.currencyCode;\n\n const columns: ColumnDef<CategoryRevenue>[] = React.useMemo(() => {\n const cols = [\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 <CategoryNameColumnCell>{capitalizeFirstLetter(row.name)}</CategoryNameColumnCell>\n </SummaryItemRow>\n ),\n },\n {\n key: 'revenue',\n label: getTranslation(Keys.defaults.revenue),\n sortable: true,\n render: (value: unknown, row: CategoryRevenue) =>\n formatMoney(Number(value), row.currencyCode, getLocaleFromMarketCode(market)),\n },\n {\n key: 'volume',\n label: getTranslation(Keys.defaults.volume),\n sortable: true,\n render: (value: unknown) =>\n `${Number(value ?? 0).toLocaleString()} ${getTranslation(Keys.defaults.dcSv)}`,\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 return cols;\n }, [currencyCode, market]);\n\n if (isLoading) {\n return (\n <PageContainer data-testid=\"categories-full-view\">\n <PageHeader\n title={getTranslation(Keys.widget.topCategories.title)}\n dateRange={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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 label={renderCustomLabel}\n labelLine={false}\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}>\n {getTrendIcon(totalRevenueTrendDirection)}\n <span>{totalRevenueTrend}</span>\n </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 <SummaryName>{capitalizeFirstLetter(category.name)}</SummaryName>\n <SummaryValue>{formatMoney(category.revenue, category.currencyCode)}</SummaryValue>\n <SummaryPercentage>({category.percentage}%)</SummaryPercentage>\n {category.trend?.revenue ? (\n <SummaryTrendIcon direction={resolveTrendDirection(category.trend.revenue)}>\n {getTrendIcon(resolveTrendDirection(category.trend.revenue))}\n </SummaryTrendIcon>\n ) : null}\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: 32px;\n padding: 24px;\n background-color: ${({ theme }) => getGenomeColor(theme, 'N20')};\n border-radius: 8px;\n box-shadow: ${({ theme }) => theme.shadows[1]};\n align-items: center;\n justify-content: center;\n width: 100%;\n box-sizing: border-box;\n margin: 0 auto;\n\n @media (max-width: 767px) {\n flex-direction: column;\n padding: 16px;\n gap: 16px;\n align-items: flex-start;\n justify-content: flex-start;\n }\n`;\n\nexport const ChartWrapper = muiStyled(Box)`\n position: relative;\n width: 280px;\n height: 280px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\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 display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\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 '#2e7d32';\n if (direction === 'down') return '#d32f2f';\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 SummaryContainer = muiStyled(Box)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 0;\n`;\n\nexport const SummaryItem = muiStyled(Box)`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: 6px;\n transition: background-color 0.2s ease;\n white-space: nowrap;\n min-width: 0;\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: none;\n`;\n\nexport const SummaryName = muiStyled(Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.primary};\n flex-shrink: 0;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n`;\n\nexport const SummaryValue = muiStyled(Typography)`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${({ theme }) => theme.palette.text.secondary};\n flex-shrink: 0;\n white-space: nowrap;\n`;\n\nexport const SummaryPercentage = muiStyled(Typography)`\n font-size: 0.8125rem;\n font-weight: 500;\n flex-shrink: 0;\n color: ${({ theme }) => theme.palette.text.primary};\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\nexport const SummaryTrendIcon = muiStyled('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: 14px;\n height: 14px;\n font-size: 14px;\n }\n`;\n\nexport const CategoryNameColumnCell = styled('span')`\n font-family:\n 'Inter',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0%;\n vertical-align: middle;\n color: #252525;\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 // Set resolver in effect only — synchronous side effects during render are impure\n // Always call useEffect at top level - React Hook Rules require unconditional hook calls\n // This manages setup, cleanup on unmount, and updates when translate changes\n React.useEffect(() => {\n if (translate !== undefined) {\n setTranslationResolver(translate);\n return () => {\n setTranslationResolver(undefined);\n };\n }\n return undefined;\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, capitalizeFirstLetter } 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 readonly onExport?: () => void;\n}\n\nconst TopPerformingOffersPieChartComponent: React.FC<TopPerformingOffersPieChartProps> = ({\n offers,\n offerSort,\n isLoading = false,\n title,\n onSortChange,\n onTitleClick,\n onExport,\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.defaults.byRevenue)}</option>\n <option value=\"units\">{getTranslation(Keys.defaults.byUnits)}</option>\n </SortDropdown>\n <WidgetMenu widgetId=\"top-offers\" onFullView={onTitleClick} onExport={onExport} />\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>{capitalizeFirstLetter(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 byRevenue: { key: 'productOfferDashboard.defaults.byRevenue', fallback: 'Revenue' },\n byUnits: { key: 'productOfferDashboard.defaults.byUnits', fallback: 'Units' },\n byVolume: { key: 'productOfferDashboard.defaults.byVolume', fallback: 'Volume' },\n },\n} as const;\n\nexport function getTranslation(entry: TranslationEntry): string {\n return resolveTranslation(entry);\n}\n","import React from 'react';\nimport type { TopPerformingOffer, TopProduct } from '../types.d';\nimport { exportTopPerformingOffers, exportTopProducts } from '../utils/productOfferExport';\n\nexport interface ProductOfferWidgetExportOptions {\n readonly topProducts: readonly TopProduct[];\n readonly topOffers: readonly TopPerformingOffer[];\n readonly topProductsExportData?: readonly TopProduct[];\n readonly topOffersExportData?: readonly TopPerformingOffer[];\n readonly showTopProductsExportOption?: boolean;\n readonly showTopOffersExportOption?: boolean;\n readonly isLoading?: boolean;\n}\n\nexport interface ProductOfferWidgetExportHandlers {\n readonly onTopProductsExport?: () => Promise<void>;\n readonly onTopOffersExport?: () => Promise<void>;\n}\n\nexport function useProductOfferWidgetExports({\n topProducts,\n topOffers,\n topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption = true,\n showTopOffersExportOption = true,\n isLoading = false,\n}: ProductOfferWidgetExportOptions): ProductOfferWidgetExportHandlers {\n const productRows = topProductsExportData ?? topProducts;\n const offerRows = topOffersExportData ?? topOffers;\n\n const canExportProducts = showTopProductsExportOption && !isLoading && productRows.length > 0;\n const canExportOffers = showTopOffersExportOption && !isLoading && offerRows.length > 0;\n\n const onTopProductsExport = React.useCallback(() => exportTopProducts(productRows), [productRows]);\n const onTopOffersExport = React.useCallback(() => exportTopPerformingOffers(offerRows), [offerRows]);\n\n return {\n onTopProductsExport: canExportProducts ? onTopProductsExport : undefined,\n onTopOffersExport: canExportOffers ? onTopOffersExport : undefined,\n };\n}\n","export type ExcelCellValue = string | number | boolean | Date | null | undefined;\n\nexport interface ExcelExportColumn<TItem> {\n readonly header: string;\n readonly value: (item: TItem) => ExcelCellValue;\n}\n\nexport interface ExcelExportOptions<TItem> {\n readonly rows: readonly TItem[];\n readonly columns: readonly ExcelExportColumn<TItem>[];\n readonly fileName: string;\n readonly sheetName: string;\n}\n\nconst INVALID_SHEET_NAME_CHARS = /[\\\\/?*[\\]:]/g;\nconst MAX_SHEET_NAME_LENGTH = 31;\n\nexport function normalizeExcelFileName(fileName: string): string {\n const trimmedFileName = fileName.trim();\n const resolvedFileName = trimmedFileName.length > 0 ? trimmedFileName : 'export';\n return resolvedFileName.toLowerCase().endsWith('.xlsx') ? resolvedFileName : `${resolvedFileName}.xlsx`;\n}\n\nexport function normalizeExcelSheetName(sheetName: string): string {\n const normalizedSheetName = sheetName.replace(INVALID_SHEET_NAME_CHARS, ' ').trim();\n const resolvedSheetName = normalizedSheetName.length > 0 ? normalizedSheetName : 'Export';\n return resolvedSheetName.slice(0, MAX_SHEET_NAME_LENGTH);\n}\n\nexport async function exportRowsToExcel<TItem>({\n rows,\n columns,\n fileName,\n sheetName,\n}: ExcelExportOptions<TItem>): Promise<void> {\n const { Workbook } = await import('exceljs');\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(normalizeExcelSheetName(sheetName));\n\n worksheet.columns = columns.map((column) => ({ header: column.header, key: column.header }));\n rows.forEach((row) => {\n const worksheetRow: Record<string, ExcelCellValue> = {};\n\n columns.forEach((column) => {\n worksheetRow[column.header] = column.value(row) ?? '';\n });\n\n worksheet.addRow(worksheetRow);\n });\n\n const buffer = await workbook.xlsx.writeBuffer();\n downloadExcelBuffer(buffer, normalizeExcelFileName(fileName));\n}\n\nfunction downloadExcelBuffer(buffer: ArrayBuffer | Uint8Array, fileName: string): void {\n const blob = new Blob([new Uint8Array(buffer)], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = url;\n link.download = fileName;\n // Append to document.body before clicking — required for Firefox/Safari compatibility\n document.body.appendChild(link);\n link.click();\n // Clean up: remove from DOM and revoke URL\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n","import type { TopPerformingOffer, TopProduct } from '../types.d';\nimport type { ExcelExportColumn } from './excelExport';\nimport { exportRowsToExcel } from './excelExport';\n\nconst topProductColumns: readonly ExcelExportColumn<TopProduct>[] = [\n { header: 'Rank', value: (product) => product.rank },\n { header: 'Product ID', value: (product) => product.id },\n { header: 'Product Name', value: (product) => product.name },\n { header: 'Units Sold', value: (product) => product.unitsSold },\n { header: 'Total Revenue', value: (product) => product.revenue },\n { header: 'Currency', value: (product) => product.currencyCode },\n { header: 'Volume DC-SV', value: (product) => product.volume },\n { header: 'Trend', value: (product) => product.trend?.units ?? product.trend?.revenue ?? product.trend?.volume },\n];\n\nconst topOfferColumns: readonly ExcelExportColumn<TopPerformingOffer>[] = [\n { header: 'Offer ID', value: (offer) => offer.id },\n { header: 'Offer Name', value: (offer) => offer.name },\n { header: 'Total Revenue', value: (offer) => offer.revenue },\n { header: 'Currency', value: (offer) => offer.currencyCode },\n { header: 'Total Volume', value: (offer) => offer.volume ?? offer.units },\n { header: 'Share %', value: (offer) => offer.percentage },\n { header: 'Trend', value: (offer) => offer.trend?.revenue ?? offer.trend?.units },\n];\n\nexport function exportTopProducts(rows: readonly TopProduct[]): Promise<void> {\n return exportRowsToExcel({\n rows,\n columns: topProductColumns,\n fileName: 'top-selling-products',\n sheetName: 'Top Selling Products',\n });\n}\n\nexport function exportTopPerformingOffers(offers: readonly TopPerformingOffer[]): Promise<void> {\n return exportRowsToExcel({\n rows: offers,\n columns: topOfferColumns,\n fileName: 'top-performing-offers',\n sheetName: 'Top Performing Offers',\n });\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 { useProductOfferWidgetExports } from './hooks/useProductOfferWidgetExports';\nimport type { ProductOfferDashboardProps, TopProduct, ConversionDataPoint, TopPerformingOffer } from './types.d';\nimport {\n getTranslation,\n ProductOfferDashboardTranslationKeys as Keys,\n} from './TranslationKeys/ProductOfferDashboardTranslationKeys';\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 = DEFAULT_DATE_RANGE,\n market = 'all',\n productSort = 'units',\n conversionFilter = 'all',\n offerSort = 'revenue',\n conversionSummaryRate,\n conversionSummaryChangePct,\n topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption = true,\n showTopOffersExportOption = true,\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 const { onTopProductsExport, onTopOffersExport } = useProductOfferWidgetExports({\n topProducts: resolvedTopProducts,\n topOffers: resolvedTopOffers,\n topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption,\n showTopOffersExportOption,\n isLoading,\n });\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: stats.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 dateRange={dateRange}\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 onExport={onTopProductsExport}\n />\n <TopPerformingOffersPieChart\n offers={resolvedTopOffers}\n offerSort={offerSort}\n isLoading={isLoading}\n onSortChange={onOfferSortChange}\n onTitleClick={onOffersTitleClick}\n onExport={onTopOffersExport}\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\nimport { DEFAULT_DATE_RANGE } from './utils/dateConstants';\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 topProductsExportData,\n topOffersExportData,\n showTopProductsExportOption = true,\n showTopOffersExportOption = true,\n initialDateRange = DEFAULT_DATE_RANGE,\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 topProductsExportData={topProductsExportData}\n topOffersExportData={topOffersExportData}\n showTopProductsExportOption={showTopProductsExportOption}\n showTopOffersExportOption={showTopOffersExportOption}\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, getLocaleFromMarketCode } from '../../utils/dataUtils';\nimport { calculateDateRangeFromOption } 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.defaults.byRevenue),\n value: offerSort,\n options: [\n { value: 'revenue', label: getTranslation(Keys.defaults.byRevenue) },\n { value: 'units', label: getTranslation(Keys.defaults.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) =>\n formatMoney(Number(value), row.currencyCode, getLocaleFromMarketCode(market)),\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 [market],\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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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={calculateDateRangeFromOption(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\n formatter={(value: number) =>\n formatMoney(value, currencyCode, getLocaleFromMarketCode(market))\n }\n />\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>\n {formatMoney(totalRevenue, currencyCode, getLocaleFromMarketCode(market))}\n </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>\n {formatMoney(\n offer.revenue,\n offer.currencyCode,\n getLocaleFromMarketCode(market),\n )}\n </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(\n offer.revenue,\n offer.currencyCode,\n getLocaleFromMarketCode(market),\n )}\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 priceTypes: i % 3 === 0 ? ['Retail', 'Member'] : ['Retail'],\n };\n});\n\nexport const mockConversionDataRetail: ConversionDataPoint[] = mockConversionData.map((point) => ({\n ...point,\n rate: Number((point.rate * 1.35).toFixed(2)),\n orders: Math.round(point.orders * 0.7),\n priceTypes: ['Retail'],\n}));\n\nexport const mockConversionDataMember: ConversionDataPoint[] = mockConversionData.map((point) => ({\n ...point,\n rate: Number((point.rate * 0.55).toFixed(2)),\n orders: Math.round(point.orders * 0.3),\n priceTypes: ['Member'],\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 priceType: i % 3 === 0 ? 'Member' : 'Retail',\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"]}
|