avada-crossapp-banner 0.0.1 → 0.0.3

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.
@@ -0,0 +1,6 @@
1
+ export interface CloseIconProps {
2
+ size?: number;
3
+ color?: string;
4
+ }
5
+ export declare function CloseIcon({ size, color, }: CloseIconProps): import("react/jsx-runtime").JSX.Element;
6
+ export default CloseIcon;
@@ -2,3 +2,5 @@ export { DownloadIcon } from './DownloadIcon';
2
2
  export type { DownloadIconProps } from './DownloadIcon';
3
3
  export { CrossAppIcon } from './CrossAppIcon';
4
4
  export type { CrossAppIconProps } from './CrossAppIcon';
5
+ export { CloseIcon } from './CloseIcon';
6
+ export type { CloseIconProps } from './CloseIcon';
package/dist/index.esm.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useMemo, useState, useCallback, useEffect } from 'react';
3
- import { Icon, Layout, Box, InlineStack, BlockStack, Text, Button, Link } from '@shopify/polaris';
4
- import { XIcon } from '@shopify/polaris-icons';
3
+ import { Layout, Box, InlineStack, BlockStack, Text, Button, Link } from '@shopify/polaris';
5
4
  import { useI18n } from '@shopify/react-i18n';
6
5
 
7
6
  /**
@@ -219,6 +218,10 @@ function DownloadIcon({ width = 18, height = 20, fill = 'black', }) {
219
218
  return (jsxs("svg", { width: width, height: height, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("path", { d: "M10.8333 3.61111C10.8333 3.15087 10.4602 2.77778 9.99999 2.77778C9.53976 2.77778 9.16666 3.15087 9.16666 3.61111V11.0437L7.25592 9.13297C6.93048 8.80753 6.40284 8.80753 6.0774 9.13297C5.75197 9.4584 5.75197 9.98604 6.0774 10.3115L9.41074 13.6448C9.73618 13.9702 10.2638 13.9702 10.5893 13.6448L13.9226 10.3115C14.248 9.98604 14.248 9.4584 13.9226 9.13297C13.5971 8.80753 13.0695 8.80753 12.7441 9.13297L10.8333 11.0437V3.61111Z", fill: fill }), jsx("path", { d: "M17.2222 14.1667C17.2222 13.7064 16.8491 13.3333 16.3889 13.3333C15.9286 13.3333 15.5555 13.7064 15.5555 14.1667V15.0556C15.5555 15.5158 15.1825 15.8889 14.7222 15.8889L5.27777 15.8889C4.81753 15.8889 4.44444 15.5158 4.44444 15.0556L4.44444 14.1667C4.44444 13.7064 4.07134 13.3333 3.6111 13.3333C3.15087 13.3333 2.77777 13.7064 2.77777 14.1667V15.0556C2.77777 16.4363 3.89706 17.5556 5.27777 17.5556L14.7222 17.5556C16.1029 17.5556 17.2222 16.4363 17.2222 15.0556V14.1667Z", fill: fill })] }));
220
219
  }
221
220
 
221
+ function CloseIcon({ size = 20, color = "currentColor", }) {
222
+ return (jsx("svg", { width: size, height: size, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M6.28033 5.21967C5.98744 4.92678 5.51256 4.92678 5.21967 5.21967C4.92678 5.51256 4.92678 5.98744 5.21967 6.28033L8.93934 10L5.21967 13.7197C4.92678 14.0126 4.92678 14.4874 5.21967 14.7803C5.51256 15.0732 5.98744 15.0732 6.28033 14.7803L10 11.0607L13.7197 14.7803C14.0126 15.0732 14.4874 15.0732 14.7803 14.7803C15.0732 14.4874 15.0732 14.0126 14.7803 13.7197L11.0607 10L14.7803 6.28033C15.0732 5.98744 15.0732 5.51256 14.7803 5.21967C14.4874 4.92678 14.0126 4.92678 13.7197 5.21967L10 8.93934L6.28033 5.21967Z", fill: color }) }));
223
+ }
224
+
222
225
  /**
223
226
  * CrossApp Banner Component
224
227
  *
@@ -301,7 +304,7 @@ function CrossAppBanner$1({ config, appData, sourcePage = "dashboard", shop = {}
301
304
  }, [isVerificationApp, logBannerEvent]);
302
305
  if (!showBanner || !appData)
303
306
  return null;
304
- const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsx(Icon, { source: XIcon });
307
+ const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsx(CloseIcon, { color: "#ffffff" });
305
308
  return (jsx(Layout.Section, { children: jsx(Box, { borderRadius: "200", overflowX: "hidden", overflowY: "hidden", children: jsxs("div", { className: "Avada-CrossApp", style: { background: bgColor }, children: [jsxs(InlineStack, { gap: isVerificationApp ? "400" : "0", children: [jsx("div", { className: "Avada-CrossApp__Icon", children: jsx(CrossAppIcon, { app: appHandle, size: 80 }) }), jsxs("div", { className: "Avada-CrossApp__Content", children: [jsx("div", { className: "Avada-CrossApp__Content--Text", children: jsxs(BlockStack, { gap: "200", children: [jsxs(Text, { as: "h3", variant: "headingLg", fontWeight: "bold", children: [translationKey, ".title"] }), jsxs(BlockStack, { gap: isVerificationApp ? "200" : "0", children: [isVerificationApp ? (jsx("i", { children: jsxs(Text, { as: "p", variant: "bodyLg", fontWeight: "medium", children: [translationKey, ".description1"] }) })) : (jsxs(Text, { as: "p", variant: "bodyMd", children: [translationKey, ".description1"] })), jsxs(Text, { as: "p", variant: "bodyMd", children: [translationKey, ".description2"] })] })] }) }), jsx("div", { className: "Avada-CrossApp__Content--Btn", children: jsxs(BlockStack, { gap: "200", inlineAlign: "center", children: [jsx(Button, { url: targetUrl, target: "_blank", onClick: handleCtaClick, fullWidth: true, children: jsxs(InlineStack, { blockAlign: "center", gap: "100", children: [jsx(DownloadIcon, {}), jsxs(Text, { as: "span", children: [translationKey, ".btnClaim"] })] }) }), showPlanBtn && planUrl && (jsx("div", { className: "Avada-CrossApp__ViewPlan", children: jsx(Link, { url: planUrl, target: "_blank", children: jsxs("span", { children: [translationKey, ".btnViewPlan"] }) }) }))] }) })] })] }), jsx("button", { className: "Avada-CrossApp__CloseBtn", onClick: handleClose, "aria-label": "Close banner", type: "button", children: closeIcon })] }) }) }));
306
309
  }
307
310
 
@@ -387,7 +390,7 @@ function CrossAppBannerWithI18n({ config, appData, sourcePage = 'dashboard', sho
387
390
  }, [isVerificationApp, logBannerEvent]);
388
391
  if (!showBanner || !appData)
389
392
  return null;
390
- const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsx(Icon, { source: XIcon });
393
+ const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsx(CloseIcon, { color: "#ffffff" });
391
394
  return (jsx(Layout.Section, { children: jsx(Box, { borderRadius: "200", overflowX: "hidden", overflowY: "hidden", children: jsxs("div", { className: "Avada-CrossApp", style: { background: bgColor }, children: [jsxs(InlineStack, { gap: isVerificationApp ? '400' : '0', children: [jsx("div", { className: "Avada-CrossApp__Icon", children: jsx(CrossAppIcon, { app: appHandle, size: 80 }) }), jsxs("div", { className: "Avada-CrossApp__Content", children: [jsx("div", { className: "Avada-CrossApp__Content--Text", children: jsxs(BlockStack, { gap: "200", children: [jsx(Text, { as: "h3", variant: "headingLg", fontWeight: "bold", children: i18n.translate(`${translationKey}.title`) }), jsxs(BlockStack, { gap: isVerificationApp ? '200' : '0', children: [isVerificationApp ? (jsx("i", { children: jsx(Text, { as: "p", variant: "bodyLg", fontWeight: "medium", children: i18n.translate(`${translationKey}.description1`) }) })) : (jsx(Text, { as: "p", variant: "bodyMd", children: i18n.translate(`${translationKey}.description1`) })), jsx(Text, { as: "p", variant: "bodyMd", children: i18n.translate(`${translationKey}.description2`) })] })] }) }), jsx("div", { className: "Avada-CrossApp__Content--Btn", children: jsxs(BlockStack, { gap: "200", inlineAlign: "center", children: [jsx(Button, { url: targetUrl, target: "_blank", onClick: handleCtaClick, fullWidth: true, children: jsxs(InlineStack, { blockAlign: "center", gap: "100", children: [jsx(DownloadIcon, {}), jsx(Text, { as: "span", children: i18n.translate(`${translationKey}.btnClaim`) })] }) }), showPlanBtn && planUrl && (jsx("div", { className: "Avada-CrossApp__ViewPlan", children: jsx(Link, { url: planUrl, target: "_blank", children: jsx("span", { children: i18n.translate(`${translationKey}.btnViewPlan`) }) }) }))] }) })] })] }), jsx("button", { className: "Avada-CrossApp__CloseBtn", onClick: handleClose, "aria-label": "Close banner", type: "button", children: closeIcon })] }) }) }));
392
395
  }
393
396
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/constants/index.ts","../src/components/icons/CrossAppIcon.tsx","../src/components/icons/DownloadIcon.tsx","../src/components/CrossAppBanner/CrossAppBanner.tsx","../src/components/CrossAppBanner/CrossAppBannerWithI18n.tsx","../src/components/CrossAppBanner/index.ts","../src/hooks/useDisplayBanner.ts"],"sourcesContent":["import {AppHandle, CrossAppData, TargetStorageType} from '../types';\n\n/**\n * App handle constants\n */\nexport const APP_HANDLES = {\n ORDER_LIMIT: 'orderLimit' as AppHandle,\n ACCESSIBILITY: 'accessibility' as AppHandle,\n COOKIE_BAR: 'cookieBar' as AppHandle,\n AGE_VERIFICATION: 'ageVerification' as AppHandle,\n} as const;\n\n/**\n * App domains\n */\nexport const APP_DOMAINS = {\n COOKIE_BAR: 'cookie.avada.io',\n AGE_VERIFICATION: 'age-verification-b0fa4.firebaseapp.com',\n ACCESSIBILITY: 'accessibility.avada.io',\n} as const;\n\n/**\n * Shopify app handles\n */\nexport const SHOPIFY_APP_HANDLES = {\n COOKIE_BAR: 'avada-cookie-bar',\n AGE_VERIFICATION: 'sun-age-verification-popup',\n ACCESSIBILITY: 'avada-accessibility',\n} as const;\n\n/**\n * Shopify plans to exclude from cross-app promotion\n */\nexport const EXCLUDED_SHOPIFY_PLANS = [\n 'partner_test',\n 'affiliate',\n 'staff',\n 'frozen',\n 'fraudulent',\n 'cancelled',\n 'paused',\n] as const;\n\n/**\n * Countries to exclude from cross-app promotion\n */\nexport const EXCLUDED_COUNTRIES = ['IN', 'VN'] as const;\n\n/**\n * Email suffixes to exclude\n */\nexport const EXCLUDED_EMAIL_SUFFIXES = ['shopify.com'] as const;\n\n/**\n * Avada email suffixes\n */\nexport const AVADA_EMAIL_SUFFIXES = ['avadagroup.com', 'avada.io'] as const;\n\n/**\n * Target storage types for display banner\n */\nexport const TARGET_STORAGE_TYPES: Record<string, TargetStorageType> = {\n NEXT_DAY: 'next_day',\n SEVEN_DAYS: '7_days_after',\n THIRTY_DAYS: '30_days_after',\n} as const;\n\n/**\n * Default banner close key prefix\n */\nexport const BANNER_CLOSE_KEY_PREFIX = 'bannerCloseCount_';\n\n/**\n * Get Shopify store name from domain\n */\nexport function getShopifyName(domain: string): string {\n return domain.replace('.myshopify.com', '');\n}\n\n/**\n * Check if shop should be excluded from cross-app promotion\n */\nexport function shouldExcludeShop(shop: {\n shopifyPlan?: string;\n country?: string;\n email?: string;\n}): boolean {\n const {shopifyPlan, country, email} = shop;\n\n if (shopifyPlan && EXCLUDED_SHOPIFY_PLANS.includes(shopifyPlan as typeof EXCLUDED_SHOPIFY_PLANS[number])) {\n return true;\n }\n\n if (country && EXCLUDED_COUNTRIES.includes(country as typeof EXCLUDED_COUNTRIES[number])) {\n return true;\n }\n\n if (email) {\n const emailLower = email.toLowerCase();\n if (EXCLUDED_EMAIL_SUFFIXES.some(suffix => emailLower.endsWith(suffix))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get Cookie Bar app data for cross-app promotion\n */\nexport function getCookieBarAppData(\n shop: {shopifyDomain: string; cookieBarInstalled?: boolean},\n options?: {showPlanBtn?: boolean; eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, cookieBarInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Cookie Bar Gift',\n translationKey: 'CrossApp.cookieApp',\n planUrl: '/embed/subscription',\n targetUrl: !cookieBarInstalled\n ? `https://${APP_DOMAINS.COOKIE_BAR}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.COOKIE_BAR}/embed`,\n showPlanBtn: options?.showPlanBtn ?? false,\n appHandle: APP_HANDLES.COOKIE_BAR,\n bgColor: 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'cb',\n bannerCloseKey: 'bannerCookieBarCloseCount',\n };\n}\n\n/**\n * Get Age Verification app data for cross-app promotion\n */\nexport function getAgeVerificationAppData(\n shop: {shopifyDomain: string; ageVerificationInstalled?: boolean; hideVerificationBanner?: boolean},\n options?: {eventPrefix?: string; utmSource?: string}\n): CrossAppData {\n const {shopifyDomain, ageVerificationInstalled, hideVerificationBanner} = shop;\n const shopName = getShopifyName(shopifyDomain);\n const utmSource = options?.utmSource ?? 'crossapp';\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Age Verification Person',\n translationKey: 'CrossApp.ageVerification',\n planUrl: '/embed/subscription',\n targetUrl: !ageVerificationInstalled\n ? `https://apps.shopify.com/sun-age-verification-popup?utm_source=${utmSource}&utm_medium=banner&utm_campaign=dashboard`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.AGE_VERIFICATION}/embed?from=${utmSource}`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.AGE_VERIFICATION,\n bgColor: 'linear-gradient(135deg, #060101, #0e0101, #170101, #1e0101, #290101)',\n isHideBanner: hideVerificationBanner ?? false,\n eventPrefix: options?.eventPrefix ?? 'av',\n bannerCloseKey: 'bannerAgeVerificationCloseCount',\n };\n}\n\n/**\n * Get Accessibility app data for cross-app promotion\n */\nexport function getAccessibilityAppData(\n shop: {shopifyDomain: string; accessibilityInstalled?: boolean},\n options?: {eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, accessibilityInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/accessibilityGift.png',\n imageAlt: 'Accessibility App',\n translationKey: 'CrossApp.accessibilityApp',\n planUrl: '/embed/subscription',\n targetUrl: !accessibilityInstalled\n ? `https://${APP_DOMAINS.ACCESSIBILITY}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.ACCESSIBILITY}/embed`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.ACCESSIBILITY,\n bgColor: 'linear-gradient(90deg, #1a1a2e 0%, #16213e 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'ac',\n bannerCloseKey: 'bannerAccessibilityCloseCount',\n };\n}\n\n/**\n * Create cross-app config helper\n */\nexport function createCrossAppConfig(config: {\n appPrefix: 'cb' | 'av' | 'ac' | 'ol';\n apiClient: (url: string, options?: {method?: string; body?: Record<string, unknown>}) => Promise<unknown>;\n storeDispatch?: (action: unknown) => void;\n closeIcon?: React.ReactNode;\n bannerEventEndpoint?: string;\n shopUpdateEndpoint?: string;\n}) {\n return {\n appPrefix: config.appPrefix,\n apiClient: config.apiClient,\n storeDispatch: config.storeDispatch,\n closeIcon: config.closeIcon,\n bannerEventEndpoint: config.bannerEventEndpoint ?? '/banner-event',\n shopUpdateEndpoint: config.shopUpdateEndpoint ?? '/shop',\n };\n}\n","import React from 'react';\nimport {AppHandle} from '../../types';\nimport {APP_HANDLES} from '../../constants';\n\nexport interface CrossAppIconProps {\n app: AppHandle;\n size?: number;\n}\n\n/**\n * Cookie Bar app icon\n */\nfunction CookieBarIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#FFA726\" />\n <circle cx=\"28\" cy=\"32\" r=\"6\" fill=\"#8D6E63\" />\n <circle cx=\"48\" cy=\"28\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"52\" cy=\"48\" r=\"5\" fill=\"#8D6E63\" />\n <circle cx=\"32\" cy=\"52\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"44\" cy=\"44\" r=\"3\" fill=\"#8D6E63\" />\n </svg>\n );\n}\n\n/**\n * Age Verification app icon\n */\nfunction AgeVerificationIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#EF5350\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"24\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n 18+\n </text>\n </svg>\n );\n}\n\n/**\n * Accessibility app icon\n */\nfunction AccessibilityIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#2196F3\" />\n <circle cx=\"40\" cy=\"24\" r=\"6\" fill=\"white\" />\n <path\n d=\"M40 32V48M40 48L32 64M40 48L48 64M24 40H56\"\n stroke=\"white\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Order Limit app icon\n */\nfunction OrderLimitIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#9C27B0\" />\n <path\n d=\"M24 32H56L52 52H28L24 32Z\"\n stroke=\"white\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n <circle cx=\"32\" cy=\"58\" r=\"4\" fill=\"white\" />\n <circle cx=\"48\" cy=\"58\" r=\"4\" fill=\"white\" />\n </svg>\n );\n}\n\n/**\n * Default/fallback icon\n */\nfunction DefaultIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#607D8B\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"20\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n APP\n </text>\n </svg>\n );\n}\n\n/**\n * CrossApp icon component that renders the appropriate icon based on app handle\n */\nexport function CrossAppIcon({app, size = 80}: CrossAppIconProps) {\n switch (app) {\n case APP_HANDLES.COOKIE_BAR:\n return <CookieBarIcon size={size} />;\n case APP_HANDLES.AGE_VERIFICATION:\n return <AgeVerificationIcon size={size} />;\n case APP_HANDLES.ACCESSIBILITY:\n return <AccessibilityIcon size={size} />;\n case APP_HANDLES.ORDER_LIMIT:\n return <OrderLimitIcon size={size} />;\n default:\n return <DefaultIcon size={size} />;\n }\n}\n\nexport default CrossAppIcon;\n","import React from 'react';\n\nexport interface DownloadIconProps {\n width?: number;\n height?: number;\n fill?: string;\n}\n\nexport function DownloadIcon({\n width = 18,\n height = 20,\n fill = 'black',\n}: DownloadIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.8333 3.61111C10.8333 3.15087 10.4602 2.77778 9.99999 2.77778C9.53976 2.77778 9.16666 3.15087 9.16666 3.61111V11.0437L7.25592 9.13297C6.93048 8.80753 6.40284 8.80753 6.0774 9.13297C5.75197 9.4584 5.75197 9.98604 6.0774 10.3115L9.41074 13.6448C9.73618 13.9702 10.2638 13.9702 10.5893 13.6448L13.9226 10.3115C14.248 9.98604 14.248 9.4584 13.9226 9.13297C13.5971 8.80753 13.0695 8.80753 12.7441 9.13297L10.8333 11.0437V3.61111Z\"\n fill={fill}\n />\n <path\n d=\"M17.2222 14.1667C17.2222 13.7064 16.8491 13.3333 16.3889 13.3333C15.9286 13.3333 15.5555 13.7064 15.5555 14.1667V15.0556C15.5555 15.5158 15.1825 15.8889 14.7222 15.8889L5.27777 15.8889C4.81753 15.8889 4.44444 15.5158 4.44444 15.0556L4.44444 14.1667C4.44444 13.7064 4.07134 13.3333 3.6111 13.3333C3.15087 13.3333 2.77777 13.7064 2.77777 14.1667V15.0556C2.77777 16.4363 3.89706 17.5556 5.27777 17.5556L14.7222 17.5556C16.1029 17.5556 17.2222 16.4363 17.2222 15.0556V14.1667Z\"\n fill={fill}\n />\n </svg>\n );\n}\n\nexport default DownloadIcon;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Icon,\n Link,\n} from \"@shopify/polaris\";\nimport { XIcon } from \"@shopify/polaris-icons\";\n\nimport { CrossAppBannerProps, BannerEventAction } from \"../../types\";\nimport { APP_HANDLES } from \"../../constants\";\nimport { CrossAppIcon } from \"../icons/CrossAppIcon\";\nimport { DownloadIcon } from \"../icons/DownloadIcon\";\nimport \"./CrossAppBanner.scss\";\n\n/**\n * CrossApp Banner Component\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Supports configuration-based customization for different apps.\n */\nexport function CrossAppBanner({\n config,\n appData,\n sourcePage = \"dashboard\",\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = \"linear-gradient(90deg, #000926 0%, #0a1f3d 100%)\",\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = \"bannerCloseCount\",\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle],\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix],\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? \"/banner-event\";\n\n try {\n await config.apiClient(endpoint, {\n method: \"POST\",\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage],\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent(\"display\");\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n // Update shop to hide banner permanently\n if (onShopUpdate) {\n onShopUpdate({ ...shop, hideVerificationBanner: true });\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: \"SET_SHOP\",\n payload: { ...shop, hideVerificationBanner: true },\n });\n }\n logBannerEvent(\"close\", true);\n } else {\n logBannerEvent(\"close\");\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent(\"access\");\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <Icon source={XIcon} />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{ background: bgColor }}>\n <InlineStack gap={isVerificationApp ? \"400\" : \"0\"}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {translationKey}.title\n </Text>\n <BlockStack gap={isVerificationApp ? \"200\" : \"0\"}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {translationKey}.description1\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description1\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description2\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">{translationKey}.btnClaim</Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>{translationKey}.btnViewPlan</span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBanner;\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Icon,\n Link,\n} from '@shopify/polaris';\nimport {XIcon} from '@shopify/polaris-icons';\nimport {useI18n} from '@shopify/react-i18n';\n\nimport {CrossAppBannerProps, BannerEventAction} from '../../types';\nimport {APP_HANDLES} from '../../constants';\nimport {CrossAppIcon} from '../icons/CrossAppIcon';\nimport {DownloadIcon} from '../icons/DownloadIcon';\nimport './CrossAppBanner.scss';\n\n/**\n * CrossApp Banner Component with i18n support\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Uses @shopify/react-i18n for translations.\n */\nexport function CrossAppBannerWithI18n({\n config,\n appData,\n sourcePage = 'dashboard',\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const [i18n] = useI18n();\n\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = 'bannerCloseCount',\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle]\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix]\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? '/banner-event';\n\n try {\n await config.apiClient(endpoint, {\n method: 'POST',\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage]\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent('display');\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n if (onShopUpdate) {\n onShopUpdate({...shop, hideVerificationBanner: true});\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: 'SET_SHOP',\n payload: {...shop, hideVerificationBanner: true},\n });\n }\n logBannerEvent('close', true);\n } else {\n logBannerEvent('close');\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent('access');\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <Icon source={XIcon} />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{background: bgColor}}>\n <InlineStack gap={isVerificationApp ? '400' : '0'}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {i18n.translate(`${translationKey}.title`)}\n </Text>\n <BlockStack gap={isVerificationApp ? '200' : '0'}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description2`)}\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">\n {i18n.translate(`${translationKey}.btnClaim`)}\n </Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>\n {i18n.translate(`${translationKey}.btnViewPlan`)}\n </span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBannerWithI18n;\n","export {CrossAppBanner} from './CrossAppBanner';\nexport {CrossAppBannerWithI18n} from './CrossAppBannerWithI18n';\nexport default CrossAppBanner;\n","import {useState, useMemo, useCallback} from 'react';\nimport {\n UseDisplayBannerOptions,\n UseDisplayBannerReturn,\n TargetStorageType,\n} from '../types';\n\n/**\n * Storage data structure\n */\ninterface StorageData {\n currentDate?: string;\n disableCount?: number;\n}\n\n/**\n * Get data from localStorage\n */\nfunction getStorageData(key: string): StorageData {\n try {\n const data = localStorage.getItem(key);\n return data ? JSON.parse(data) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Set data to localStorage\n */\nfunction setStorageData(key: string, data: StorageData): void {\n try {\n localStorage.setItem(key, JSON.stringify(data));\n } catch (e) {\n console.error('Failed to save to localStorage:', e);\n }\n}\n\n/**\n * Check if object is empty\n */\nfunction isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * Calculate next display date based on target type\n */\nfunction getNextDisplayDate(targetDateType: TargetStorageType): Date {\n const currentDate = new Date();\n\n switch (targetDateType) {\n case 'next_day':\n currentDate.setDate(currentDate.getDate() + 1);\n break;\n\n case '7_days_after':\n currentDate.setDate(currentDate.getDate() + 7);\n break;\n\n case '30_days_after':\n currentDate.setDate(currentDate.getDate() + 30);\n break;\n\n default:\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return currentDate;\n}\n\nexport interface UseDisplayBannerConfig {\n /**\n * Storage key for tracking display state\n */\n storageKey: string;\n\n /**\n * Shop key for tracking dismissed banners per shop\n */\n shopKey?: string;\n\n /**\n * Current shop data\n */\n shop?: {\n dismissedBanners?: string[];\n [key: string]: unknown;\n };\n\n /**\n * Whether to check shop dismissed banners\n * @default false\n */\n checkShop?: boolean;\n\n /**\n * Number of closes before permanently dismissing\n * @default 3\n */\n disableCount?: number;\n\n /**\n * Target storage type for next display\n * @default 'next_day'\n */\n targetDateType?: TargetStorageType;\n\n /**\n * API client function for making requests\n */\n apiClient?: (\n url: string,\n options?: {method?: string; body?: Record<string, unknown>}\n ) => Promise<{success?: boolean; data?: Record<string, unknown>}>;\n\n /**\n * Endpoint for updating shop data\n * @default '/shops?type=banner'\n */\n shopUpdateEndpoint?: string;\n\n /**\n * Callback when shop data is updated\n */\n onShopUpdate?: (shopData: Record<string, unknown>) => void;\n\n /**\n * Callback when banner is closed\n */\n onClose?: () => void;\n\n /**\n * Whether to check storage for display state\n * @default true\n */\n checkStorage?: boolean;\n}\n\n/**\n * Hook to manage banner display state with localStorage persistence\n */\nexport function useDisplayBanner({\n storageKey,\n shopKey = '',\n shop = {},\n checkShop = false,\n disableCount = 3,\n targetDateType = 'next_day',\n apiClient,\n shopUpdateEndpoint = '/shops?type=banner',\n onShopUpdate,\n onClose,\n checkStorage = true,\n}: UseDisplayBannerConfig): UseDisplayBannerReturn {\n const [isCheckShop, setIsCheckShop] = useState(checkShop);\n const dismissedBanners = shop?.dismissedBanners ?? [];\n\n const isDismissed = useMemo(\n () => shopKey ? dismissedBanners.includes(shopKey) : false,\n [dismissedBanners, shopKey]\n );\n\n const handleShopApi = useCallback(\n async (data: Record<string, unknown>) => {\n if (!apiClient) return;\n\n try {\n const resp = await apiClient(shopUpdateEndpoint, {\n body: data,\n method: 'PUT',\n });\n\n if (resp.success && onShopUpdate) {\n onShopUpdate({\n ...shop,\n ...resp.data,\n });\n }\n } catch (e) {\n console.error('Failed to update shop:', e);\n }\n },\n [apiClient, shopUpdateEndpoint, shop, onShopUpdate]\n );\n\n const checkIsShowBanner = useCallback(() => {\n if (!checkStorage) {\n return true;\n }\n\n const storageData = getStorageData(storageKey);\n const isValidStorage =\n isEmpty(storageData) ||\n new Date(storageData.currentDate ?? '').getTime() < new Date().getTime();\n\n if (!isCheckShop) {\n return isValidStorage;\n }\n\n return isValidStorage && !isDismissed;\n }, [storageKey, isCheckShop, isDismissed, checkStorage]);\n\n const [shouldDisplay, setShouldDisplay] = useState(checkIsShowBanner);\n\n const hideBanner = useCallback(() => {\n setShouldDisplay(false);\n }, []);\n\n const showBanner = useCallback(() => {\n setShouldDisplay(true);\n }, []);\n\n const handleCloseBanner = useCallback(\n async (data?: Record<string, unknown>) => {\n const isDismissShop = data?.isDismissShop === true;\n\n setShouldDisplay(false);\n setIsCheckShop(isDismissShop);\n\n const storageData = getStorageData(storageKey);\n const count = storageData.disableCount ?? 1;\n\n const nextDate = getNextDisplayDate(targetDateType);\n\n setStorageData(storageKey, {\n currentDate: nextDate.toISOString(),\n disableCount: count + 1,\n });\n\n if ((isCheckShop && count >= disableCount) || isDismissShop) {\n const newDismissedBanners = [...new Set([...dismissedBanners, shopKey])];\n await handleShopApi({\n dismissedBanners: newDismissedBanners,\n ...data,\n });\n }\n\n onClose?.();\n },\n [\n storageKey,\n targetDateType,\n isCheckShop,\n disableCount,\n dismissedBanners,\n shopKey,\n handleShopApi,\n onClose,\n ]\n );\n\n return {\n shouldDisplay,\n hideBanner,\n showBanner,\n handleCloseBanner,\n };\n}\n\nexport default useDisplayBanner;\n"],"names":["_jsxs","_jsx","CrossAppBanner"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/constants/index.ts","../src/components/icons/CrossAppIcon.tsx","../src/components/icons/DownloadIcon.tsx","../src/components/icons/CloseIcon.tsx","../src/components/CrossAppBanner/CrossAppBanner.tsx","../src/components/CrossAppBanner/CrossAppBannerWithI18n.tsx","../src/components/CrossAppBanner/index.ts","../src/hooks/useDisplayBanner.ts"],"sourcesContent":["import {AppHandle, CrossAppData, TargetStorageType} from '../types';\n\n/**\n * App handle constants\n */\nexport const APP_HANDLES = {\n ORDER_LIMIT: 'orderLimit' as AppHandle,\n ACCESSIBILITY: 'accessibility' as AppHandle,\n COOKIE_BAR: 'cookieBar' as AppHandle,\n AGE_VERIFICATION: 'ageVerification' as AppHandle,\n} as const;\n\n/**\n * App domains\n */\nexport const APP_DOMAINS = {\n COOKIE_BAR: 'cookie.avada.io',\n AGE_VERIFICATION: 'age-verification-b0fa4.firebaseapp.com',\n ACCESSIBILITY: 'accessibility.avada.io',\n} as const;\n\n/**\n * Shopify app handles\n */\nexport const SHOPIFY_APP_HANDLES = {\n COOKIE_BAR: 'avada-cookie-bar',\n AGE_VERIFICATION: 'sun-age-verification-popup',\n ACCESSIBILITY: 'avada-accessibility',\n} as const;\n\n/**\n * Shopify plans to exclude from cross-app promotion\n */\nexport const EXCLUDED_SHOPIFY_PLANS = [\n 'partner_test',\n 'affiliate',\n 'staff',\n 'frozen',\n 'fraudulent',\n 'cancelled',\n 'paused',\n] as const;\n\n/**\n * Countries to exclude from cross-app promotion\n */\nexport const EXCLUDED_COUNTRIES = ['IN', 'VN'] as const;\n\n/**\n * Email suffixes to exclude\n */\nexport const EXCLUDED_EMAIL_SUFFIXES = ['shopify.com'] as const;\n\n/**\n * Avada email suffixes\n */\nexport const AVADA_EMAIL_SUFFIXES = ['avadagroup.com', 'avada.io'] as const;\n\n/**\n * Target storage types for display banner\n */\nexport const TARGET_STORAGE_TYPES: Record<string, TargetStorageType> = {\n NEXT_DAY: 'next_day',\n SEVEN_DAYS: '7_days_after',\n THIRTY_DAYS: '30_days_after',\n} as const;\n\n/**\n * Default banner close key prefix\n */\nexport const BANNER_CLOSE_KEY_PREFIX = 'bannerCloseCount_';\n\n/**\n * Get Shopify store name from domain\n */\nexport function getShopifyName(domain: string): string {\n return domain.replace('.myshopify.com', '');\n}\n\n/**\n * Check if shop should be excluded from cross-app promotion\n */\nexport function shouldExcludeShop(shop: {\n shopifyPlan?: string;\n country?: string;\n email?: string;\n}): boolean {\n const {shopifyPlan, country, email} = shop;\n\n if (shopifyPlan && EXCLUDED_SHOPIFY_PLANS.includes(shopifyPlan as typeof EXCLUDED_SHOPIFY_PLANS[number])) {\n return true;\n }\n\n if (country && EXCLUDED_COUNTRIES.includes(country as typeof EXCLUDED_COUNTRIES[number])) {\n return true;\n }\n\n if (email) {\n const emailLower = email.toLowerCase();\n if (EXCLUDED_EMAIL_SUFFIXES.some(suffix => emailLower.endsWith(suffix))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get Cookie Bar app data for cross-app promotion\n */\nexport function getCookieBarAppData(\n shop: {shopifyDomain: string; cookieBarInstalled?: boolean},\n options?: {showPlanBtn?: boolean; eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, cookieBarInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Cookie Bar Gift',\n translationKey: 'CrossApp.cookieApp',\n planUrl: '/embed/subscription',\n targetUrl: !cookieBarInstalled\n ? `https://${APP_DOMAINS.COOKIE_BAR}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.COOKIE_BAR}/embed`,\n showPlanBtn: options?.showPlanBtn ?? false,\n appHandle: APP_HANDLES.COOKIE_BAR,\n bgColor: 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'cb',\n bannerCloseKey: 'bannerCookieBarCloseCount',\n };\n}\n\n/**\n * Get Age Verification app data for cross-app promotion\n */\nexport function getAgeVerificationAppData(\n shop: {shopifyDomain: string; ageVerificationInstalled?: boolean; hideVerificationBanner?: boolean},\n options?: {eventPrefix?: string; utmSource?: string}\n): CrossAppData {\n const {shopifyDomain, ageVerificationInstalled, hideVerificationBanner} = shop;\n const shopName = getShopifyName(shopifyDomain);\n const utmSource = options?.utmSource ?? 'crossapp';\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Age Verification Person',\n translationKey: 'CrossApp.ageVerification',\n planUrl: '/embed/subscription',\n targetUrl: !ageVerificationInstalled\n ? `https://apps.shopify.com/sun-age-verification-popup?utm_source=${utmSource}&utm_medium=banner&utm_campaign=dashboard`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.AGE_VERIFICATION}/embed?from=${utmSource}`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.AGE_VERIFICATION,\n bgColor: 'linear-gradient(135deg, #060101, #0e0101, #170101, #1e0101, #290101)',\n isHideBanner: hideVerificationBanner ?? false,\n eventPrefix: options?.eventPrefix ?? 'av',\n bannerCloseKey: 'bannerAgeVerificationCloseCount',\n };\n}\n\n/**\n * Get Accessibility app data for cross-app promotion\n */\nexport function getAccessibilityAppData(\n shop: {shopifyDomain: string; accessibilityInstalled?: boolean},\n options?: {eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, accessibilityInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/accessibilityGift.png',\n imageAlt: 'Accessibility App',\n translationKey: 'CrossApp.accessibilityApp',\n planUrl: '/embed/subscription',\n targetUrl: !accessibilityInstalled\n ? `https://${APP_DOMAINS.ACCESSIBILITY}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.ACCESSIBILITY}/embed`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.ACCESSIBILITY,\n bgColor: 'linear-gradient(90deg, #1a1a2e 0%, #16213e 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'ac',\n bannerCloseKey: 'bannerAccessibilityCloseCount',\n };\n}\n\n/**\n * Create cross-app config helper\n */\nexport function createCrossAppConfig(config: {\n appPrefix: 'cb' | 'av' | 'ac' | 'ol';\n apiClient: (url: string, options?: {method?: string; body?: Record<string, unknown>}) => Promise<unknown>;\n storeDispatch?: (action: unknown) => void;\n closeIcon?: React.ReactNode;\n bannerEventEndpoint?: string;\n shopUpdateEndpoint?: string;\n}) {\n return {\n appPrefix: config.appPrefix,\n apiClient: config.apiClient,\n storeDispatch: config.storeDispatch,\n closeIcon: config.closeIcon,\n bannerEventEndpoint: config.bannerEventEndpoint ?? '/banner-event',\n shopUpdateEndpoint: config.shopUpdateEndpoint ?? '/shop',\n };\n}\n","import React from 'react';\nimport {AppHandle} from '../../types';\nimport {APP_HANDLES} from '../../constants';\n\nexport interface CrossAppIconProps {\n app: AppHandle;\n size?: number;\n}\n\n/**\n * Cookie Bar app icon\n */\nfunction CookieBarIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#FFA726\" />\n <circle cx=\"28\" cy=\"32\" r=\"6\" fill=\"#8D6E63\" />\n <circle cx=\"48\" cy=\"28\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"52\" cy=\"48\" r=\"5\" fill=\"#8D6E63\" />\n <circle cx=\"32\" cy=\"52\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"44\" cy=\"44\" r=\"3\" fill=\"#8D6E63\" />\n </svg>\n );\n}\n\n/**\n * Age Verification app icon\n */\nfunction AgeVerificationIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#EF5350\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"24\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n 18+\n </text>\n </svg>\n );\n}\n\n/**\n * Accessibility app icon\n */\nfunction AccessibilityIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#2196F3\" />\n <circle cx=\"40\" cy=\"24\" r=\"6\" fill=\"white\" />\n <path\n d=\"M40 32V48M40 48L32 64M40 48L48 64M24 40H56\"\n stroke=\"white\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Order Limit app icon\n */\nfunction OrderLimitIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#9C27B0\" />\n <path\n d=\"M24 32H56L52 52H28L24 32Z\"\n stroke=\"white\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n <circle cx=\"32\" cy=\"58\" r=\"4\" fill=\"white\" />\n <circle cx=\"48\" cy=\"58\" r=\"4\" fill=\"white\" />\n </svg>\n );\n}\n\n/**\n * Default/fallback icon\n */\nfunction DefaultIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#607D8B\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"20\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n APP\n </text>\n </svg>\n );\n}\n\n/**\n * CrossApp icon component that renders the appropriate icon based on app handle\n */\nexport function CrossAppIcon({app, size = 80}: CrossAppIconProps) {\n switch (app) {\n case APP_HANDLES.COOKIE_BAR:\n return <CookieBarIcon size={size} />;\n case APP_HANDLES.AGE_VERIFICATION:\n return <AgeVerificationIcon size={size} />;\n case APP_HANDLES.ACCESSIBILITY:\n return <AccessibilityIcon size={size} />;\n case APP_HANDLES.ORDER_LIMIT:\n return <OrderLimitIcon size={size} />;\n default:\n return <DefaultIcon size={size} />;\n }\n}\n\nexport default CrossAppIcon;\n","import React from 'react';\n\nexport interface DownloadIconProps {\n width?: number;\n height?: number;\n fill?: string;\n}\n\nexport function DownloadIcon({\n width = 18,\n height = 20,\n fill = 'black',\n}: DownloadIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.8333 3.61111C10.8333 3.15087 10.4602 2.77778 9.99999 2.77778C9.53976 2.77778 9.16666 3.15087 9.16666 3.61111V11.0437L7.25592 9.13297C6.93048 8.80753 6.40284 8.80753 6.0774 9.13297C5.75197 9.4584 5.75197 9.98604 6.0774 10.3115L9.41074 13.6448C9.73618 13.9702 10.2638 13.9702 10.5893 13.6448L13.9226 10.3115C14.248 9.98604 14.248 9.4584 13.9226 9.13297C13.5971 8.80753 13.0695 8.80753 12.7441 9.13297L10.8333 11.0437V3.61111Z\"\n fill={fill}\n />\n <path\n d=\"M17.2222 14.1667C17.2222 13.7064 16.8491 13.3333 16.3889 13.3333C15.9286 13.3333 15.5555 13.7064 15.5555 14.1667V15.0556C15.5555 15.5158 15.1825 15.8889 14.7222 15.8889L5.27777 15.8889C4.81753 15.8889 4.44444 15.5158 4.44444 15.0556L4.44444 14.1667C4.44444 13.7064 4.07134 13.3333 3.6111 13.3333C3.15087 13.3333 2.77777 13.7064 2.77777 14.1667V15.0556C2.77777 16.4363 3.89706 17.5556 5.27777 17.5556L14.7222 17.5556C16.1029 17.5556 17.2222 16.4363 17.2222 15.0556V14.1667Z\"\n fill={fill}\n />\n </svg>\n );\n}\n\nexport default DownloadIcon;\n","import React from \"react\";\n\nexport interface CloseIconProps {\n size?: number;\n color?: string;\n}\n\nexport function CloseIcon({\n size = 20,\n color = \"currentColor\",\n}: CloseIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.28033 5.21967C5.98744 4.92678 5.51256 4.92678 5.21967 5.21967C4.92678 5.51256 4.92678 5.98744 5.21967 6.28033L8.93934 10L5.21967 13.7197C4.92678 14.0126 4.92678 14.4874 5.21967 14.7803C5.51256 15.0732 5.98744 15.0732 6.28033 14.7803L10 11.0607L13.7197 14.7803C14.0126 15.0732 14.4874 15.0732 14.7803 14.7803C15.0732 14.4874 15.0732 14.0126 14.7803 13.7197L11.0607 10L14.7803 6.28033C15.0732 5.98744 15.0732 5.51256 14.7803 5.21967C14.4874 4.92678 14.0126 4.92678 13.7197 5.21967L10 8.93934L6.28033 5.21967Z\"\n fill={color}\n />\n </svg>\n );\n}\n\nexport default CloseIcon;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Link,\n} from \"@shopify/polaris\";\n\nimport { CrossAppBannerProps, BannerEventAction } from \"../../types\";\nimport { APP_HANDLES } from \"../../constants\";\nimport { CrossAppIcon } from \"../icons/CrossAppIcon\";\nimport { DownloadIcon } from \"../icons/DownloadIcon\";\nimport { CloseIcon } from \"../icons/CloseIcon\";\nimport \"./CrossAppBanner.scss\";\n\n/**\n * CrossApp Banner Component\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Supports configuration-based customization for different apps.\n */\nexport function CrossAppBanner({\n config,\n appData,\n sourcePage = \"dashboard\",\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = \"linear-gradient(90deg, #000926 0%, #0a1f3d 100%)\",\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = \"bannerCloseCount\",\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle],\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix],\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? \"/banner-event\";\n\n try {\n await config.apiClient(endpoint, {\n method: \"POST\",\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage],\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent(\"display\");\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n // Update shop to hide banner permanently\n if (onShopUpdate) {\n onShopUpdate({ ...shop, hideVerificationBanner: true });\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: \"SET_SHOP\",\n payload: { ...shop, hideVerificationBanner: true },\n });\n }\n logBannerEvent(\"close\", true);\n } else {\n logBannerEvent(\"close\");\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent(\"access\");\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <CloseIcon color=\"#ffffff\" />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{ background: bgColor }}>\n <InlineStack gap={isVerificationApp ? \"400\" : \"0\"}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {translationKey}.title\n </Text>\n <BlockStack gap={isVerificationApp ? \"200\" : \"0\"}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {translationKey}.description1\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description1\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description2\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">{translationKey}.btnClaim</Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>{translationKey}.btnViewPlan</span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBanner;\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Link,\n} from '@shopify/polaris';\nimport {useI18n} from '@shopify/react-i18n';\n\nimport {CrossAppBannerProps, BannerEventAction} from '../../types';\nimport {APP_HANDLES} from '../../constants';\nimport {CrossAppIcon} from '../icons/CrossAppIcon';\nimport {DownloadIcon} from '../icons/DownloadIcon';\nimport {CloseIcon} from '../icons/CloseIcon';\nimport './CrossAppBanner.scss';\n\n/**\n * CrossApp Banner Component with i18n support\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Uses @shopify/react-i18n for translations.\n */\nexport function CrossAppBannerWithI18n({\n config,\n appData,\n sourcePage = 'dashboard',\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const [i18n] = useI18n();\n\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = 'bannerCloseCount',\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle]\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix]\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? '/banner-event';\n\n try {\n await config.apiClient(endpoint, {\n method: 'POST',\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage]\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent('display');\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n if (onShopUpdate) {\n onShopUpdate({...shop, hideVerificationBanner: true});\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: 'SET_SHOP',\n payload: {...shop, hideVerificationBanner: true},\n });\n }\n logBannerEvent('close', true);\n } else {\n logBannerEvent('close');\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent('access');\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <CloseIcon color=\"#ffffff\" />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{background: bgColor}}>\n <InlineStack gap={isVerificationApp ? '400' : '0'}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {i18n.translate(`${translationKey}.title`)}\n </Text>\n <BlockStack gap={isVerificationApp ? '200' : '0'}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description2`)}\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">\n {i18n.translate(`${translationKey}.btnClaim`)}\n </Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>\n {i18n.translate(`${translationKey}.btnViewPlan`)}\n </span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBannerWithI18n;\n","export {CrossAppBanner} from './CrossAppBanner';\nexport {CrossAppBannerWithI18n} from './CrossAppBannerWithI18n';\nexport default CrossAppBanner;\n","import {useState, useMemo, useCallback} from 'react';\nimport {\n UseDisplayBannerOptions,\n UseDisplayBannerReturn,\n TargetStorageType,\n} from '../types';\n\n/**\n * Storage data structure\n */\ninterface StorageData {\n currentDate?: string;\n disableCount?: number;\n}\n\n/**\n * Get data from localStorage\n */\nfunction getStorageData(key: string): StorageData {\n try {\n const data = localStorage.getItem(key);\n return data ? JSON.parse(data) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Set data to localStorage\n */\nfunction setStorageData(key: string, data: StorageData): void {\n try {\n localStorage.setItem(key, JSON.stringify(data));\n } catch (e) {\n console.error('Failed to save to localStorage:', e);\n }\n}\n\n/**\n * Check if object is empty\n */\nfunction isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * Calculate next display date based on target type\n */\nfunction getNextDisplayDate(targetDateType: TargetStorageType): Date {\n const currentDate = new Date();\n\n switch (targetDateType) {\n case 'next_day':\n currentDate.setDate(currentDate.getDate() + 1);\n break;\n\n case '7_days_after':\n currentDate.setDate(currentDate.getDate() + 7);\n break;\n\n case '30_days_after':\n currentDate.setDate(currentDate.getDate() + 30);\n break;\n\n default:\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return currentDate;\n}\n\nexport interface UseDisplayBannerConfig {\n /**\n * Storage key for tracking display state\n */\n storageKey: string;\n\n /**\n * Shop key for tracking dismissed banners per shop\n */\n shopKey?: string;\n\n /**\n * Current shop data\n */\n shop?: {\n dismissedBanners?: string[];\n [key: string]: unknown;\n };\n\n /**\n * Whether to check shop dismissed banners\n * @default false\n */\n checkShop?: boolean;\n\n /**\n * Number of closes before permanently dismissing\n * @default 3\n */\n disableCount?: number;\n\n /**\n * Target storage type for next display\n * @default 'next_day'\n */\n targetDateType?: TargetStorageType;\n\n /**\n * API client function for making requests\n */\n apiClient?: (\n url: string,\n options?: {method?: string; body?: Record<string, unknown>}\n ) => Promise<{success?: boolean; data?: Record<string, unknown>}>;\n\n /**\n * Endpoint for updating shop data\n * @default '/shops?type=banner'\n */\n shopUpdateEndpoint?: string;\n\n /**\n * Callback when shop data is updated\n */\n onShopUpdate?: (shopData: Record<string, unknown>) => void;\n\n /**\n * Callback when banner is closed\n */\n onClose?: () => void;\n\n /**\n * Whether to check storage for display state\n * @default true\n */\n checkStorage?: boolean;\n}\n\n/**\n * Hook to manage banner display state with localStorage persistence\n */\nexport function useDisplayBanner({\n storageKey,\n shopKey = '',\n shop = {},\n checkShop = false,\n disableCount = 3,\n targetDateType = 'next_day',\n apiClient,\n shopUpdateEndpoint = '/shops?type=banner',\n onShopUpdate,\n onClose,\n checkStorage = true,\n}: UseDisplayBannerConfig): UseDisplayBannerReturn {\n const [isCheckShop, setIsCheckShop] = useState(checkShop);\n const dismissedBanners = shop?.dismissedBanners ?? [];\n\n const isDismissed = useMemo(\n () => shopKey ? dismissedBanners.includes(shopKey) : false,\n [dismissedBanners, shopKey]\n );\n\n const handleShopApi = useCallback(\n async (data: Record<string, unknown>) => {\n if (!apiClient) return;\n\n try {\n const resp = await apiClient(shopUpdateEndpoint, {\n body: data,\n method: 'PUT',\n });\n\n if (resp.success && onShopUpdate) {\n onShopUpdate({\n ...shop,\n ...resp.data,\n });\n }\n } catch (e) {\n console.error('Failed to update shop:', e);\n }\n },\n [apiClient, shopUpdateEndpoint, shop, onShopUpdate]\n );\n\n const checkIsShowBanner = useCallback(() => {\n if (!checkStorage) {\n return true;\n }\n\n const storageData = getStorageData(storageKey);\n const isValidStorage =\n isEmpty(storageData) ||\n new Date(storageData.currentDate ?? '').getTime() < new Date().getTime();\n\n if (!isCheckShop) {\n return isValidStorage;\n }\n\n return isValidStorage && !isDismissed;\n }, [storageKey, isCheckShop, isDismissed, checkStorage]);\n\n const [shouldDisplay, setShouldDisplay] = useState(checkIsShowBanner);\n\n const hideBanner = useCallback(() => {\n setShouldDisplay(false);\n }, []);\n\n const showBanner = useCallback(() => {\n setShouldDisplay(true);\n }, []);\n\n const handleCloseBanner = useCallback(\n async (data?: Record<string, unknown>) => {\n const isDismissShop = data?.isDismissShop === true;\n\n setShouldDisplay(false);\n setIsCheckShop(isDismissShop);\n\n const storageData = getStorageData(storageKey);\n const count = storageData.disableCount ?? 1;\n\n const nextDate = getNextDisplayDate(targetDateType);\n\n setStorageData(storageKey, {\n currentDate: nextDate.toISOString(),\n disableCount: count + 1,\n });\n\n if ((isCheckShop && count >= disableCount) || isDismissShop) {\n const newDismissedBanners = [...new Set([...dismissedBanners, shopKey])];\n await handleShopApi({\n dismissedBanners: newDismissedBanners,\n ...data,\n });\n }\n\n onClose?.();\n },\n [\n storageKey,\n targetDateType,\n isCheckShop,\n disableCount,\n dismissedBanners,\n shopKey,\n handleShopApi,\n onClose,\n ]\n );\n\n return {\n shouldDisplay,\n hideBanner,\n showBanner,\n handleCloseBanner,\n };\n}\n\nexport default useDisplayBanner;\n"],"names":["_jsxs","_jsx","CrossAppBanner"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,7 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var react = require('react');
7
7
  var polaris = require('@shopify/polaris');
8
- var polarisIcons = require('@shopify/polaris-icons');
9
8
  var reactI18n = require('@shopify/react-i18n');
10
9
 
11
10
  /**
@@ -223,6 +222,10 @@ function DownloadIcon({ width = 18, height = 20, fill = 'black', }) {
223
222
  return (jsxRuntime.jsxs("svg", { width: width, height: height, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsxRuntime.jsx("path", { d: "M10.8333 3.61111C10.8333 3.15087 10.4602 2.77778 9.99999 2.77778C9.53976 2.77778 9.16666 3.15087 9.16666 3.61111V11.0437L7.25592 9.13297C6.93048 8.80753 6.40284 8.80753 6.0774 9.13297C5.75197 9.4584 5.75197 9.98604 6.0774 10.3115L9.41074 13.6448C9.73618 13.9702 10.2638 13.9702 10.5893 13.6448L13.9226 10.3115C14.248 9.98604 14.248 9.4584 13.9226 9.13297C13.5971 8.80753 13.0695 8.80753 12.7441 9.13297L10.8333 11.0437V3.61111Z", fill: fill }), jsxRuntime.jsx("path", { d: "M17.2222 14.1667C17.2222 13.7064 16.8491 13.3333 16.3889 13.3333C15.9286 13.3333 15.5555 13.7064 15.5555 14.1667V15.0556C15.5555 15.5158 15.1825 15.8889 14.7222 15.8889L5.27777 15.8889C4.81753 15.8889 4.44444 15.5158 4.44444 15.0556L4.44444 14.1667C4.44444 13.7064 4.07134 13.3333 3.6111 13.3333C3.15087 13.3333 2.77777 13.7064 2.77777 14.1667V15.0556C2.77777 16.4363 3.89706 17.5556 5.27777 17.5556L14.7222 17.5556C16.1029 17.5556 17.2222 16.4363 17.2222 15.0556V14.1667Z", fill: fill })] }));
224
223
  }
225
224
 
225
+ function CloseIcon({ size = 20, color = "currentColor", }) {
226
+ return (jsxRuntime.jsx("svg", { width: size, height: size, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsxRuntime.jsx("path", { d: "M6.28033 5.21967C5.98744 4.92678 5.51256 4.92678 5.21967 5.21967C4.92678 5.51256 4.92678 5.98744 5.21967 6.28033L8.93934 10L5.21967 13.7197C4.92678 14.0126 4.92678 14.4874 5.21967 14.7803C5.51256 15.0732 5.98744 15.0732 6.28033 14.7803L10 11.0607L13.7197 14.7803C14.0126 15.0732 14.4874 15.0732 14.7803 14.7803C15.0732 14.4874 15.0732 14.0126 14.7803 13.7197L11.0607 10L14.7803 6.28033C15.0732 5.98744 15.0732 5.51256 14.7803 5.21967C14.4874 4.92678 14.0126 4.92678 13.7197 5.21967L10 8.93934L6.28033 5.21967Z", fill: color }) }));
227
+ }
228
+
226
229
  /**
227
230
  * CrossApp Banner Component
228
231
  *
@@ -305,7 +308,7 @@ function CrossAppBanner$1({ config, appData, sourcePage = "dashboard", shop = {}
305
308
  }, [isVerificationApp, logBannerEvent]);
306
309
  if (!showBanner || !appData)
307
310
  return null;
308
- const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsxRuntime.jsx(polaris.Icon, { source: polarisIcons.XIcon });
311
+ const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsxRuntime.jsx(CloseIcon, { color: "#ffffff" });
309
312
  return (jsxRuntime.jsx(polaris.Layout.Section, { children: jsxRuntime.jsx(polaris.Box, { borderRadius: "200", overflowX: "hidden", overflowY: "hidden", children: jsxRuntime.jsxs("div", { className: "Avada-CrossApp", style: { background: bgColor }, children: [jsxRuntime.jsxs(polaris.InlineStack, { gap: isVerificationApp ? "400" : "0", children: [jsxRuntime.jsx("div", { className: "Avada-CrossApp__Icon", children: jsxRuntime.jsx(CrossAppIcon, { app: appHandle, size: 80 }) }), jsxRuntime.jsxs("div", { className: "Avada-CrossApp__Content", children: [jsxRuntime.jsx("div", { className: "Avada-CrossApp__Content--Text", children: jsxRuntime.jsxs(polaris.BlockStack, { gap: "200", children: [jsxRuntime.jsxs(polaris.Text, { as: "h3", variant: "headingLg", fontWeight: "bold", children: [translationKey, ".title"] }), jsxRuntime.jsxs(polaris.BlockStack, { gap: isVerificationApp ? "200" : "0", children: [isVerificationApp ? (jsxRuntime.jsx("i", { children: jsxRuntime.jsxs(polaris.Text, { as: "p", variant: "bodyLg", fontWeight: "medium", children: [translationKey, ".description1"] }) })) : (jsxRuntime.jsxs(polaris.Text, { as: "p", variant: "bodyMd", children: [translationKey, ".description1"] })), jsxRuntime.jsxs(polaris.Text, { as: "p", variant: "bodyMd", children: [translationKey, ".description2"] })] })] }) }), jsxRuntime.jsx("div", { className: "Avada-CrossApp__Content--Btn", children: jsxRuntime.jsxs(polaris.BlockStack, { gap: "200", inlineAlign: "center", children: [jsxRuntime.jsx(polaris.Button, { url: targetUrl, target: "_blank", onClick: handleCtaClick, fullWidth: true, children: jsxRuntime.jsxs(polaris.InlineStack, { blockAlign: "center", gap: "100", children: [jsxRuntime.jsx(DownloadIcon, {}), jsxRuntime.jsxs(polaris.Text, { as: "span", children: [translationKey, ".btnClaim"] })] }) }), showPlanBtn && planUrl && (jsxRuntime.jsx("div", { className: "Avada-CrossApp__ViewPlan", children: jsxRuntime.jsx(polaris.Link, { url: planUrl, target: "_blank", children: jsxRuntime.jsxs("span", { children: [translationKey, ".btnViewPlan"] }) }) }))] }) })] })] }), jsxRuntime.jsx("button", { className: "Avada-CrossApp__CloseBtn", onClick: handleClose, "aria-label": "Close banner", type: "button", children: closeIcon })] }) }) }));
310
313
  }
311
314
 
@@ -391,7 +394,7 @@ function CrossAppBannerWithI18n({ config, appData, sourcePage = 'dashboard', sho
391
394
  }, [isVerificationApp, logBannerEvent]);
392
395
  if (!showBanner || !appData)
393
396
  return null;
394
- const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsxRuntime.jsx(polaris.Icon, { source: polarisIcons.XIcon });
397
+ const closeIcon = (_a = config.closeIcon) !== null && _a !== void 0 ? _a : jsxRuntime.jsx(CloseIcon, { color: "#ffffff" });
395
398
  return (jsxRuntime.jsx(polaris.Layout.Section, { children: jsxRuntime.jsx(polaris.Box, { borderRadius: "200", overflowX: "hidden", overflowY: "hidden", children: jsxRuntime.jsxs("div", { className: "Avada-CrossApp", style: { background: bgColor }, children: [jsxRuntime.jsxs(polaris.InlineStack, { gap: isVerificationApp ? '400' : '0', children: [jsxRuntime.jsx("div", { className: "Avada-CrossApp__Icon", children: jsxRuntime.jsx(CrossAppIcon, { app: appHandle, size: 80 }) }), jsxRuntime.jsxs("div", { className: "Avada-CrossApp__Content", children: [jsxRuntime.jsx("div", { className: "Avada-CrossApp__Content--Text", children: jsxRuntime.jsxs(polaris.BlockStack, { gap: "200", children: [jsxRuntime.jsx(polaris.Text, { as: "h3", variant: "headingLg", fontWeight: "bold", children: i18n.translate(`${translationKey}.title`) }), jsxRuntime.jsxs(polaris.BlockStack, { gap: isVerificationApp ? '200' : '0', children: [isVerificationApp ? (jsxRuntime.jsx("i", { children: jsxRuntime.jsx(polaris.Text, { as: "p", variant: "bodyLg", fontWeight: "medium", children: i18n.translate(`${translationKey}.description1`) }) })) : (jsxRuntime.jsx(polaris.Text, { as: "p", variant: "bodyMd", children: i18n.translate(`${translationKey}.description1`) })), jsxRuntime.jsx(polaris.Text, { as: "p", variant: "bodyMd", children: i18n.translate(`${translationKey}.description2`) })] })] }) }), jsxRuntime.jsx("div", { className: "Avada-CrossApp__Content--Btn", children: jsxRuntime.jsxs(polaris.BlockStack, { gap: "200", inlineAlign: "center", children: [jsxRuntime.jsx(polaris.Button, { url: targetUrl, target: "_blank", onClick: handleCtaClick, fullWidth: true, children: jsxRuntime.jsxs(polaris.InlineStack, { blockAlign: "center", gap: "100", children: [jsxRuntime.jsx(DownloadIcon, {}), jsxRuntime.jsx(polaris.Text, { as: "span", children: i18n.translate(`${translationKey}.btnClaim`) })] }) }), showPlanBtn && planUrl && (jsxRuntime.jsx("div", { className: "Avada-CrossApp__ViewPlan", children: jsxRuntime.jsx(polaris.Link, { url: planUrl, target: "_blank", children: jsxRuntime.jsx("span", { children: i18n.translate(`${translationKey}.btnViewPlan`) }) }) }))] }) })] })] }), jsxRuntime.jsx("button", { className: "Avada-CrossApp__CloseBtn", onClick: handleClose, "aria-label": "Close banner", type: "button", children: closeIcon })] }) }) }));
396
399
  }
397
400
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/constants/index.ts","../src/components/icons/CrossAppIcon.tsx","../src/components/icons/DownloadIcon.tsx","../src/components/CrossAppBanner/CrossAppBanner.tsx","../src/components/CrossAppBanner/CrossAppBannerWithI18n.tsx","../src/components/CrossAppBanner/index.ts","../src/hooks/useDisplayBanner.ts"],"sourcesContent":["import {AppHandle, CrossAppData, TargetStorageType} from '../types';\n\n/**\n * App handle constants\n */\nexport const APP_HANDLES = {\n ORDER_LIMIT: 'orderLimit' as AppHandle,\n ACCESSIBILITY: 'accessibility' as AppHandle,\n COOKIE_BAR: 'cookieBar' as AppHandle,\n AGE_VERIFICATION: 'ageVerification' as AppHandle,\n} as const;\n\n/**\n * App domains\n */\nexport const APP_DOMAINS = {\n COOKIE_BAR: 'cookie.avada.io',\n AGE_VERIFICATION: 'age-verification-b0fa4.firebaseapp.com',\n ACCESSIBILITY: 'accessibility.avada.io',\n} as const;\n\n/**\n * Shopify app handles\n */\nexport const SHOPIFY_APP_HANDLES = {\n COOKIE_BAR: 'avada-cookie-bar',\n AGE_VERIFICATION: 'sun-age-verification-popup',\n ACCESSIBILITY: 'avada-accessibility',\n} as const;\n\n/**\n * Shopify plans to exclude from cross-app promotion\n */\nexport const EXCLUDED_SHOPIFY_PLANS = [\n 'partner_test',\n 'affiliate',\n 'staff',\n 'frozen',\n 'fraudulent',\n 'cancelled',\n 'paused',\n] as const;\n\n/**\n * Countries to exclude from cross-app promotion\n */\nexport const EXCLUDED_COUNTRIES = ['IN', 'VN'] as const;\n\n/**\n * Email suffixes to exclude\n */\nexport const EXCLUDED_EMAIL_SUFFIXES = ['shopify.com'] as const;\n\n/**\n * Avada email suffixes\n */\nexport const AVADA_EMAIL_SUFFIXES = ['avadagroup.com', 'avada.io'] as const;\n\n/**\n * Target storage types for display banner\n */\nexport const TARGET_STORAGE_TYPES: Record<string, TargetStorageType> = {\n NEXT_DAY: 'next_day',\n SEVEN_DAYS: '7_days_after',\n THIRTY_DAYS: '30_days_after',\n} as const;\n\n/**\n * Default banner close key prefix\n */\nexport const BANNER_CLOSE_KEY_PREFIX = 'bannerCloseCount_';\n\n/**\n * Get Shopify store name from domain\n */\nexport function getShopifyName(domain: string): string {\n return domain.replace('.myshopify.com', '');\n}\n\n/**\n * Check if shop should be excluded from cross-app promotion\n */\nexport function shouldExcludeShop(shop: {\n shopifyPlan?: string;\n country?: string;\n email?: string;\n}): boolean {\n const {shopifyPlan, country, email} = shop;\n\n if (shopifyPlan && EXCLUDED_SHOPIFY_PLANS.includes(shopifyPlan as typeof EXCLUDED_SHOPIFY_PLANS[number])) {\n return true;\n }\n\n if (country && EXCLUDED_COUNTRIES.includes(country as typeof EXCLUDED_COUNTRIES[number])) {\n return true;\n }\n\n if (email) {\n const emailLower = email.toLowerCase();\n if (EXCLUDED_EMAIL_SUFFIXES.some(suffix => emailLower.endsWith(suffix))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get Cookie Bar app data for cross-app promotion\n */\nexport function getCookieBarAppData(\n shop: {shopifyDomain: string; cookieBarInstalled?: boolean},\n options?: {showPlanBtn?: boolean; eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, cookieBarInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Cookie Bar Gift',\n translationKey: 'CrossApp.cookieApp',\n planUrl: '/embed/subscription',\n targetUrl: !cookieBarInstalled\n ? `https://${APP_DOMAINS.COOKIE_BAR}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.COOKIE_BAR}/embed`,\n showPlanBtn: options?.showPlanBtn ?? false,\n appHandle: APP_HANDLES.COOKIE_BAR,\n bgColor: 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'cb',\n bannerCloseKey: 'bannerCookieBarCloseCount',\n };\n}\n\n/**\n * Get Age Verification app data for cross-app promotion\n */\nexport function getAgeVerificationAppData(\n shop: {shopifyDomain: string; ageVerificationInstalled?: boolean; hideVerificationBanner?: boolean},\n options?: {eventPrefix?: string; utmSource?: string}\n): CrossAppData {\n const {shopifyDomain, ageVerificationInstalled, hideVerificationBanner} = shop;\n const shopName = getShopifyName(shopifyDomain);\n const utmSource = options?.utmSource ?? 'crossapp';\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Age Verification Person',\n translationKey: 'CrossApp.ageVerification',\n planUrl: '/embed/subscription',\n targetUrl: !ageVerificationInstalled\n ? `https://apps.shopify.com/sun-age-verification-popup?utm_source=${utmSource}&utm_medium=banner&utm_campaign=dashboard`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.AGE_VERIFICATION}/embed?from=${utmSource}`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.AGE_VERIFICATION,\n bgColor: 'linear-gradient(135deg, #060101, #0e0101, #170101, #1e0101, #290101)',\n isHideBanner: hideVerificationBanner ?? false,\n eventPrefix: options?.eventPrefix ?? 'av',\n bannerCloseKey: 'bannerAgeVerificationCloseCount',\n };\n}\n\n/**\n * Get Accessibility app data for cross-app promotion\n */\nexport function getAccessibilityAppData(\n shop: {shopifyDomain: string; accessibilityInstalled?: boolean},\n options?: {eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, accessibilityInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/accessibilityGift.png',\n imageAlt: 'Accessibility App',\n translationKey: 'CrossApp.accessibilityApp',\n planUrl: '/embed/subscription',\n targetUrl: !accessibilityInstalled\n ? `https://${APP_DOMAINS.ACCESSIBILITY}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.ACCESSIBILITY}/embed`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.ACCESSIBILITY,\n bgColor: 'linear-gradient(90deg, #1a1a2e 0%, #16213e 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'ac',\n bannerCloseKey: 'bannerAccessibilityCloseCount',\n };\n}\n\n/**\n * Create cross-app config helper\n */\nexport function createCrossAppConfig(config: {\n appPrefix: 'cb' | 'av' | 'ac' | 'ol';\n apiClient: (url: string, options?: {method?: string; body?: Record<string, unknown>}) => Promise<unknown>;\n storeDispatch?: (action: unknown) => void;\n closeIcon?: React.ReactNode;\n bannerEventEndpoint?: string;\n shopUpdateEndpoint?: string;\n}) {\n return {\n appPrefix: config.appPrefix,\n apiClient: config.apiClient,\n storeDispatch: config.storeDispatch,\n closeIcon: config.closeIcon,\n bannerEventEndpoint: config.bannerEventEndpoint ?? '/banner-event',\n shopUpdateEndpoint: config.shopUpdateEndpoint ?? '/shop',\n };\n}\n","import React from 'react';\nimport {AppHandle} from '../../types';\nimport {APP_HANDLES} from '../../constants';\n\nexport interface CrossAppIconProps {\n app: AppHandle;\n size?: number;\n}\n\n/**\n * Cookie Bar app icon\n */\nfunction CookieBarIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#FFA726\" />\n <circle cx=\"28\" cy=\"32\" r=\"6\" fill=\"#8D6E63\" />\n <circle cx=\"48\" cy=\"28\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"52\" cy=\"48\" r=\"5\" fill=\"#8D6E63\" />\n <circle cx=\"32\" cy=\"52\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"44\" cy=\"44\" r=\"3\" fill=\"#8D6E63\" />\n </svg>\n );\n}\n\n/**\n * Age Verification app icon\n */\nfunction AgeVerificationIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#EF5350\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"24\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n 18+\n </text>\n </svg>\n );\n}\n\n/**\n * Accessibility app icon\n */\nfunction AccessibilityIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#2196F3\" />\n <circle cx=\"40\" cy=\"24\" r=\"6\" fill=\"white\" />\n <path\n d=\"M40 32V48M40 48L32 64M40 48L48 64M24 40H56\"\n stroke=\"white\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Order Limit app icon\n */\nfunction OrderLimitIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#9C27B0\" />\n <path\n d=\"M24 32H56L52 52H28L24 32Z\"\n stroke=\"white\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n <circle cx=\"32\" cy=\"58\" r=\"4\" fill=\"white\" />\n <circle cx=\"48\" cy=\"58\" r=\"4\" fill=\"white\" />\n </svg>\n );\n}\n\n/**\n * Default/fallback icon\n */\nfunction DefaultIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#607D8B\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"20\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n APP\n </text>\n </svg>\n );\n}\n\n/**\n * CrossApp icon component that renders the appropriate icon based on app handle\n */\nexport function CrossAppIcon({app, size = 80}: CrossAppIconProps) {\n switch (app) {\n case APP_HANDLES.COOKIE_BAR:\n return <CookieBarIcon size={size} />;\n case APP_HANDLES.AGE_VERIFICATION:\n return <AgeVerificationIcon size={size} />;\n case APP_HANDLES.ACCESSIBILITY:\n return <AccessibilityIcon size={size} />;\n case APP_HANDLES.ORDER_LIMIT:\n return <OrderLimitIcon size={size} />;\n default:\n return <DefaultIcon size={size} />;\n }\n}\n\nexport default CrossAppIcon;\n","import React from 'react';\n\nexport interface DownloadIconProps {\n width?: number;\n height?: number;\n fill?: string;\n}\n\nexport function DownloadIcon({\n width = 18,\n height = 20,\n fill = 'black',\n}: DownloadIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.8333 3.61111C10.8333 3.15087 10.4602 2.77778 9.99999 2.77778C9.53976 2.77778 9.16666 3.15087 9.16666 3.61111V11.0437L7.25592 9.13297C6.93048 8.80753 6.40284 8.80753 6.0774 9.13297C5.75197 9.4584 5.75197 9.98604 6.0774 10.3115L9.41074 13.6448C9.73618 13.9702 10.2638 13.9702 10.5893 13.6448L13.9226 10.3115C14.248 9.98604 14.248 9.4584 13.9226 9.13297C13.5971 8.80753 13.0695 8.80753 12.7441 9.13297L10.8333 11.0437V3.61111Z\"\n fill={fill}\n />\n <path\n d=\"M17.2222 14.1667C17.2222 13.7064 16.8491 13.3333 16.3889 13.3333C15.9286 13.3333 15.5555 13.7064 15.5555 14.1667V15.0556C15.5555 15.5158 15.1825 15.8889 14.7222 15.8889L5.27777 15.8889C4.81753 15.8889 4.44444 15.5158 4.44444 15.0556L4.44444 14.1667C4.44444 13.7064 4.07134 13.3333 3.6111 13.3333C3.15087 13.3333 2.77777 13.7064 2.77777 14.1667V15.0556C2.77777 16.4363 3.89706 17.5556 5.27777 17.5556L14.7222 17.5556C16.1029 17.5556 17.2222 16.4363 17.2222 15.0556V14.1667Z\"\n fill={fill}\n />\n </svg>\n );\n}\n\nexport default DownloadIcon;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Icon,\n Link,\n} from \"@shopify/polaris\";\nimport { XIcon } from \"@shopify/polaris-icons\";\n\nimport { CrossAppBannerProps, BannerEventAction } from \"../../types\";\nimport { APP_HANDLES } from \"../../constants\";\nimport { CrossAppIcon } from \"../icons/CrossAppIcon\";\nimport { DownloadIcon } from \"../icons/DownloadIcon\";\nimport \"./CrossAppBanner.scss\";\n\n/**\n * CrossApp Banner Component\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Supports configuration-based customization for different apps.\n */\nexport function CrossAppBanner({\n config,\n appData,\n sourcePage = \"dashboard\",\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = \"linear-gradient(90deg, #000926 0%, #0a1f3d 100%)\",\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = \"bannerCloseCount\",\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle],\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix],\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? \"/banner-event\";\n\n try {\n await config.apiClient(endpoint, {\n method: \"POST\",\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage],\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent(\"display\");\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n // Update shop to hide banner permanently\n if (onShopUpdate) {\n onShopUpdate({ ...shop, hideVerificationBanner: true });\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: \"SET_SHOP\",\n payload: { ...shop, hideVerificationBanner: true },\n });\n }\n logBannerEvent(\"close\", true);\n } else {\n logBannerEvent(\"close\");\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent(\"access\");\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <Icon source={XIcon} />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{ background: bgColor }}>\n <InlineStack gap={isVerificationApp ? \"400\" : \"0\"}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {translationKey}.title\n </Text>\n <BlockStack gap={isVerificationApp ? \"200\" : \"0\"}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {translationKey}.description1\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description1\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description2\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">{translationKey}.btnClaim</Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>{translationKey}.btnViewPlan</span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBanner;\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Icon,\n Link,\n} from '@shopify/polaris';\nimport {XIcon} from '@shopify/polaris-icons';\nimport {useI18n} from '@shopify/react-i18n';\n\nimport {CrossAppBannerProps, BannerEventAction} from '../../types';\nimport {APP_HANDLES} from '../../constants';\nimport {CrossAppIcon} from '../icons/CrossAppIcon';\nimport {DownloadIcon} from '../icons/DownloadIcon';\nimport './CrossAppBanner.scss';\n\n/**\n * CrossApp Banner Component with i18n support\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Uses @shopify/react-i18n for translations.\n */\nexport function CrossAppBannerWithI18n({\n config,\n appData,\n sourcePage = 'dashboard',\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const [i18n] = useI18n();\n\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = 'bannerCloseCount',\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle]\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix]\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? '/banner-event';\n\n try {\n await config.apiClient(endpoint, {\n method: 'POST',\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage]\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent('display');\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n if (onShopUpdate) {\n onShopUpdate({...shop, hideVerificationBanner: true});\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: 'SET_SHOP',\n payload: {...shop, hideVerificationBanner: true},\n });\n }\n logBannerEvent('close', true);\n } else {\n logBannerEvent('close');\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent('access');\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <Icon source={XIcon} />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{background: bgColor}}>\n <InlineStack gap={isVerificationApp ? '400' : '0'}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {i18n.translate(`${translationKey}.title`)}\n </Text>\n <BlockStack gap={isVerificationApp ? '200' : '0'}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description2`)}\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">\n {i18n.translate(`${translationKey}.btnClaim`)}\n </Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>\n {i18n.translate(`${translationKey}.btnViewPlan`)}\n </span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBannerWithI18n;\n","export {CrossAppBanner} from './CrossAppBanner';\nexport {CrossAppBannerWithI18n} from './CrossAppBannerWithI18n';\nexport default CrossAppBanner;\n","import {useState, useMemo, useCallback} from 'react';\nimport {\n UseDisplayBannerOptions,\n UseDisplayBannerReturn,\n TargetStorageType,\n} from '../types';\n\n/**\n * Storage data structure\n */\ninterface StorageData {\n currentDate?: string;\n disableCount?: number;\n}\n\n/**\n * Get data from localStorage\n */\nfunction getStorageData(key: string): StorageData {\n try {\n const data = localStorage.getItem(key);\n return data ? JSON.parse(data) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Set data to localStorage\n */\nfunction setStorageData(key: string, data: StorageData): void {\n try {\n localStorage.setItem(key, JSON.stringify(data));\n } catch (e) {\n console.error('Failed to save to localStorage:', e);\n }\n}\n\n/**\n * Check if object is empty\n */\nfunction isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * Calculate next display date based on target type\n */\nfunction getNextDisplayDate(targetDateType: TargetStorageType): Date {\n const currentDate = new Date();\n\n switch (targetDateType) {\n case 'next_day':\n currentDate.setDate(currentDate.getDate() + 1);\n break;\n\n case '7_days_after':\n currentDate.setDate(currentDate.getDate() + 7);\n break;\n\n case '30_days_after':\n currentDate.setDate(currentDate.getDate() + 30);\n break;\n\n default:\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return currentDate;\n}\n\nexport interface UseDisplayBannerConfig {\n /**\n * Storage key for tracking display state\n */\n storageKey: string;\n\n /**\n * Shop key for tracking dismissed banners per shop\n */\n shopKey?: string;\n\n /**\n * Current shop data\n */\n shop?: {\n dismissedBanners?: string[];\n [key: string]: unknown;\n };\n\n /**\n * Whether to check shop dismissed banners\n * @default false\n */\n checkShop?: boolean;\n\n /**\n * Number of closes before permanently dismissing\n * @default 3\n */\n disableCount?: number;\n\n /**\n * Target storage type for next display\n * @default 'next_day'\n */\n targetDateType?: TargetStorageType;\n\n /**\n * API client function for making requests\n */\n apiClient?: (\n url: string,\n options?: {method?: string; body?: Record<string, unknown>}\n ) => Promise<{success?: boolean; data?: Record<string, unknown>}>;\n\n /**\n * Endpoint for updating shop data\n * @default '/shops?type=banner'\n */\n shopUpdateEndpoint?: string;\n\n /**\n * Callback when shop data is updated\n */\n onShopUpdate?: (shopData: Record<string, unknown>) => void;\n\n /**\n * Callback when banner is closed\n */\n onClose?: () => void;\n\n /**\n * Whether to check storage for display state\n * @default true\n */\n checkStorage?: boolean;\n}\n\n/**\n * Hook to manage banner display state with localStorage persistence\n */\nexport function useDisplayBanner({\n storageKey,\n shopKey = '',\n shop = {},\n checkShop = false,\n disableCount = 3,\n targetDateType = 'next_day',\n apiClient,\n shopUpdateEndpoint = '/shops?type=banner',\n onShopUpdate,\n onClose,\n checkStorage = true,\n}: UseDisplayBannerConfig): UseDisplayBannerReturn {\n const [isCheckShop, setIsCheckShop] = useState(checkShop);\n const dismissedBanners = shop?.dismissedBanners ?? [];\n\n const isDismissed = useMemo(\n () => shopKey ? dismissedBanners.includes(shopKey) : false,\n [dismissedBanners, shopKey]\n );\n\n const handleShopApi = useCallback(\n async (data: Record<string, unknown>) => {\n if (!apiClient) return;\n\n try {\n const resp = await apiClient(shopUpdateEndpoint, {\n body: data,\n method: 'PUT',\n });\n\n if (resp.success && onShopUpdate) {\n onShopUpdate({\n ...shop,\n ...resp.data,\n });\n }\n } catch (e) {\n console.error('Failed to update shop:', e);\n }\n },\n [apiClient, shopUpdateEndpoint, shop, onShopUpdate]\n );\n\n const checkIsShowBanner = useCallback(() => {\n if (!checkStorage) {\n return true;\n }\n\n const storageData = getStorageData(storageKey);\n const isValidStorage =\n isEmpty(storageData) ||\n new Date(storageData.currentDate ?? '').getTime() < new Date().getTime();\n\n if (!isCheckShop) {\n return isValidStorage;\n }\n\n return isValidStorage && !isDismissed;\n }, [storageKey, isCheckShop, isDismissed, checkStorage]);\n\n const [shouldDisplay, setShouldDisplay] = useState(checkIsShowBanner);\n\n const hideBanner = useCallback(() => {\n setShouldDisplay(false);\n }, []);\n\n const showBanner = useCallback(() => {\n setShouldDisplay(true);\n }, []);\n\n const handleCloseBanner = useCallback(\n async (data?: Record<string, unknown>) => {\n const isDismissShop = data?.isDismissShop === true;\n\n setShouldDisplay(false);\n setIsCheckShop(isDismissShop);\n\n const storageData = getStorageData(storageKey);\n const count = storageData.disableCount ?? 1;\n\n const nextDate = getNextDisplayDate(targetDateType);\n\n setStorageData(storageKey, {\n currentDate: nextDate.toISOString(),\n disableCount: count + 1,\n });\n\n if ((isCheckShop && count >= disableCount) || isDismissShop) {\n const newDismissedBanners = [...new Set([...dismissedBanners, shopKey])];\n await handleShopApi({\n dismissedBanners: newDismissedBanners,\n ...data,\n });\n }\n\n onClose?.();\n },\n [\n storageKey,\n targetDateType,\n isCheckShop,\n disableCount,\n dismissedBanners,\n shopKey,\n handleShopApi,\n onClose,\n ]\n );\n\n return {\n shouldDisplay,\n hideBanner,\n showBanner,\n handleCloseBanner,\n };\n}\n\nexport default useDisplayBanner;\n"],"names":["_jsxs","_jsx","CrossAppBanner","useMemo","useState","useCallback","useEffect","Icon","XIcon","Layout","Box","InlineStack","BlockStack","Text","Button","Link","useI18n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/constants/index.ts","../src/components/icons/CrossAppIcon.tsx","../src/components/icons/DownloadIcon.tsx","../src/components/icons/CloseIcon.tsx","../src/components/CrossAppBanner/CrossAppBanner.tsx","../src/components/CrossAppBanner/CrossAppBannerWithI18n.tsx","../src/components/CrossAppBanner/index.ts","../src/hooks/useDisplayBanner.ts"],"sourcesContent":["import {AppHandle, CrossAppData, TargetStorageType} from '../types';\n\n/**\n * App handle constants\n */\nexport const APP_HANDLES = {\n ORDER_LIMIT: 'orderLimit' as AppHandle,\n ACCESSIBILITY: 'accessibility' as AppHandle,\n COOKIE_BAR: 'cookieBar' as AppHandle,\n AGE_VERIFICATION: 'ageVerification' as AppHandle,\n} as const;\n\n/**\n * App domains\n */\nexport const APP_DOMAINS = {\n COOKIE_BAR: 'cookie.avada.io',\n AGE_VERIFICATION: 'age-verification-b0fa4.firebaseapp.com',\n ACCESSIBILITY: 'accessibility.avada.io',\n} as const;\n\n/**\n * Shopify app handles\n */\nexport const SHOPIFY_APP_HANDLES = {\n COOKIE_BAR: 'avada-cookie-bar',\n AGE_VERIFICATION: 'sun-age-verification-popup',\n ACCESSIBILITY: 'avada-accessibility',\n} as const;\n\n/**\n * Shopify plans to exclude from cross-app promotion\n */\nexport const EXCLUDED_SHOPIFY_PLANS = [\n 'partner_test',\n 'affiliate',\n 'staff',\n 'frozen',\n 'fraudulent',\n 'cancelled',\n 'paused',\n] as const;\n\n/**\n * Countries to exclude from cross-app promotion\n */\nexport const EXCLUDED_COUNTRIES = ['IN', 'VN'] as const;\n\n/**\n * Email suffixes to exclude\n */\nexport const EXCLUDED_EMAIL_SUFFIXES = ['shopify.com'] as const;\n\n/**\n * Avada email suffixes\n */\nexport const AVADA_EMAIL_SUFFIXES = ['avadagroup.com', 'avada.io'] as const;\n\n/**\n * Target storage types for display banner\n */\nexport const TARGET_STORAGE_TYPES: Record<string, TargetStorageType> = {\n NEXT_DAY: 'next_day',\n SEVEN_DAYS: '7_days_after',\n THIRTY_DAYS: '30_days_after',\n} as const;\n\n/**\n * Default banner close key prefix\n */\nexport const BANNER_CLOSE_KEY_PREFIX = 'bannerCloseCount_';\n\n/**\n * Get Shopify store name from domain\n */\nexport function getShopifyName(domain: string): string {\n return domain.replace('.myshopify.com', '');\n}\n\n/**\n * Check if shop should be excluded from cross-app promotion\n */\nexport function shouldExcludeShop(shop: {\n shopifyPlan?: string;\n country?: string;\n email?: string;\n}): boolean {\n const {shopifyPlan, country, email} = shop;\n\n if (shopifyPlan && EXCLUDED_SHOPIFY_PLANS.includes(shopifyPlan as typeof EXCLUDED_SHOPIFY_PLANS[number])) {\n return true;\n }\n\n if (country && EXCLUDED_COUNTRIES.includes(country as typeof EXCLUDED_COUNTRIES[number])) {\n return true;\n }\n\n if (email) {\n const emailLower = email.toLowerCase();\n if (EXCLUDED_EMAIL_SUFFIXES.some(suffix => emailLower.endsWith(suffix))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get Cookie Bar app data for cross-app promotion\n */\nexport function getCookieBarAppData(\n shop: {shopifyDomain: string; cookieBarInstalled?: boolean},\n options?: {showPlanBtn?: boolean; eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, cookieBarInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Cookie Bar Gift',\n translationKey: 'CrossApp.cookieApp',\n planUrl: '/embed/subscription',\n targetUrl: !cookieBarInstalled\n ? `https://${APP_DOMAINS.COOKIE_BAR}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.COOKIE_BAR}/embed`,\n showPlanBtn: options?.showPlanBtn ?? false,\n appHandle: APP_HANDLES.COOKIE_BAR,\n bgColor: 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'cb',\n bannerCloseKey: 'bannerCookieBarCloseCount',\n };\n}\n\n/**\n * Get Age Verification app data for cross-app promotion\n */\nexport function getAgeVerificationAppData(\n shop: {shopifyDomain: string; ageVerificationInstalled?: boolean; hideVerificationBanner?: boolean},\n options?: {eventPrefix?: string; utmSource?: string}\n): CrossAppData {\n const {shopifyDomain, ageVerificationInstalled, hideVerificationBanner} = shop;\n const shopName = getShopifyName(shopifyDomain);\n const utmSource = options?.utmSource ?? 'crossapp';\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/cookieBarGift.png',\n imageAlt: 'Age Verification Person',\n translationKey: 'CrossApp.ageVerification',\n planUrl: '/embed/subscription',\n targetUrl: !ageVerificationInstalled\n ? `https://apps.shopify.com/sun-age-verification-popup?utm_source=${utmSource}&utm_medium=banner&utm_campaign=dashboard`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.AGE_VERIFICATION}/embed?from=${utmSource}`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.AGE_VERIFICATION,\n bgColor: 'linear-gradient(135deg, #060101, #0e0101, #170101, #1e0101, #290101)',\n isHideBanner: hideVerificationBanner ?? false,\n eventPrefix: options?.eventPrefix ?? 'av',\n bannerCloseKey: 'bannerAgeVerificationCloseCount',\n };\n}\n\n/**\n * Get Accessibility app data for cross-app promotion\n */\nexport function getAccessibilityAppData(\n shop: {shopifyDomain: string; accessibilityInstalled?: boolean},\n options?: {eventPrefix?: string}\n): CrossAppData {\n const {shopifyDomain, accessibilityInstalled} = shop;\n const shopName = getShopifyName(shopifyDomain);\n\n return {\n imageUrl: 'https://cdnapps.avada.io/crossApp/accessibilityGift.png',\n imageAlt: 'Accessibility App',\n translationKey: 'CrossApp.accessibilityApp',\n planUrl: '/embed/subscription',\n targetUrl: !accessibilityInstalled\n ? `https://${APP_DOMAINS.ACCESSIBILITY}/auth/shopify?shop=${shopifyDomain}`\n : `https://admin.shopify.com/store/${shopName}/apps/${SHOPIFY_APP_HANDLES.ACCESSIBILITY}/embed`,\n showPlanBtn: false,\n appHandle: APP_HANDLES.ACCESSIBILITY,\n bgColor: 'linear-gradient(90deg, #1a1a2e 0%, #16213e 100%)',\n isHideBanner: false,\n eventPrefix: options?.eventPrefix ?? 'ac',\n bannerCloseKey: 'bannerAccessibilityCloseCount',\n };\n}\n\n/**\n * Create cross-app config helper\n */\nexport function createCrossAppConfig(config: {\n appPrefix: 'cb' | 'av' | 'ac' | 'ol';\n apiClient: (url: string, options?: {method?: string; body?: Record<string, unknown>}) => Promise<unknown>;\n storeDispatch?: (action: unknown) => void;\n closeIcon?: React.ReactNode;\n bannerEventEndpoint?: string;\n shopUpdateEndpoint?: string;\n}) {\n return {\n appPrefix: config.appPrefix,\n apiClient: config.apiClient,\n storeDispatch: config.storeDispatch,\n closeIcon: config.closeIcon,\n bannerEventEndpoint: config.bannerEventEndpoint ?? '/banner-event',\n shopUpdateEndpoint: config.shopUpdateEndpoint ?? '/shop',\n };\n}\n","import React from 'react';\nimport {AppHandle} from '../../types';\nimport {APP_HANDLES} from '../../constants';\n\nexport interface CrossAppIconProps {\n app: AppHandle;\n size?: number;\n}\n\n/**\n * Cookie Bar app icon\n */\nfunction CookieBarIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#FFA726\" />\n <circle cx=\"28\" cy=\"32\" r=\"6\" fill=\"#8D6E63\" />\n <circle cx=\"48\" cy=\"28\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"52\" cy=\"48\" r=\"5\" fill=\"#8D6E63\" />\n <circle cx=\"32\" cy=\"52\" r=\"4\" fill=\"#8D6E63\" />\n <circle cx=\"44\" cy=\"44\" r=\"3\" fill=\"#8D6E63\" />\n </svg>\n );\n}\n\n/**\n * Age Verification app icon\n */\nfunction AgeVerificationIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#EF5350\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"24\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n 18+\n </text>\n </svg>\n );\n}\n\n/**\n * Accessibility app icon\n */\nfunction AccessibilityIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#2196F3\" />\n <circle cx=\"40\" cy=\"24\" r=\"6\" fill=\"white\" />\n <path\n d=\"M40 32V48M40 48L32 64M40 48L48 64M24 40H56\"\n stroke=\"white\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Order Limit app icon\n */\nfunction OrderLimitIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#9C27B0\" />\n <path\n d=\"M24 32H56L52 52H28L24 32Z\"\n stroke=\"white\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n <circle cx=\"32\" cy=\"58\" r=\"4\" fill=\"white\" />\n <circle cx=\"48\" cy=\"58\" r=\"4\" fill=\"white\" />\n </svg>\n );\n}\n\n/**\n * Default/fallback icon\n */\nfunction DefaultIcon({size = 80}: {size?: number}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"#607D8B\" />\n <text\n x=\"40\"\n y=\"48\"\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"20\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n APP\n </text>\n </svg>\n );\n}\n\n/**\n * CrossApp icon component that renders the appropriate icon based on app handle\n */\nexport function CrossAppIcon({app, size = 80}: CrossAppIconProps) {\n switch (app) {\n case APP_HANDLES.COOKIE_BAR:\n return <CookieBarIcon size={size} />;\n case APP_HANDLES.AGE_VERIFICATION:\n return <AgeVerificationIcon size={size} />;\n case APP_HANDLES.ACCESSIBILITY:\n return <AccessibilityIcon size={size} />;\n case APP_HANDLES.ORDER_LIMIT:\n return <OrderLimitIcon size={size} />;\n default:\n return <DefaultIcon size={size} />;\n }\n}\n\nexport default CrossAppIcon;\n","import React from 'react';\n\nexport interface DownloadIconProps {\n width?: number;\n height?: number;\n fill?: string;\n}\n\nexport function DownloadIcon({\n width = 18,\n height = 20,\n fill = 'black',\n}: DownloadIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.8333 3.61111C10.8333 3.15087 10.4602 2.77778 9.99999 2.77778C9.53976 2.77778 9.16666 3.15087 9.16666 3.61111V11.0437L7.25592 9.13297C6.93048 8.80753 6.40284 8.80753 6.0774 9.13297C5.75197 9.4584 5.75197 9.98604 6.0774 10.3115L9.41074 13.6448C9.73618 13.9702 10.2638 13.9702 10.5893 13.6448L13.9226 10.3115C14.248 9.98604 14.248 9.4584 13.9226 9.13297C13.5971 8.80753 13.0695 8.80753 12.7441 9.13297L10.8333 11.0437V3.61111Z\"\n fill={fill}\n />\n <path\n d=\"M17.2222 14.1667C17.2222 13.7064 16.8491 13.3333 16.3889 13.3333C15.9286 13.3333 15.5555 13.7064 15.5555 14.1667V15.0556C15.5555 15.5158 15.1825 15.8889 14.7222 15.8889L5.27777 15.8889C4.81753 15.8889 4.44444 15.5158 4.44444 15.0556L4.44444 14.1667C4.44444 13.7064 4.07134 13.3333 3.6111 13.3333C3.15087 13.3333 2.77777 13.7064 2.77777 14.1667V15.0556C2.77777 16.4363 3.89706 17.5556 5.27777 17.5556L14.7222 17.5556C16.1029 17.5556 17.2222 16.4363 17.2222 15.0556V14.1667Z\"\n fill={fill}\n />\n </svg>\n );\n}\n\nexport default DownloadIcon;\n","import React from \"react\";\n\nexport interface CloseIconProps {\n size?: number;\n color?: string;\n}\n\nexport function CloseIcon({\n size = 20,\n color = \"currentColor\",\n}: CloseIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.28033 5.21967C5.98744 4.92678 5.51256 4.92678 5.21967 5.21967C4.92678 5.51256 4.92678 5.98744 5.21967 6.28033L8.93934 10L5.21967 13.7197C4.92678 14.0126 4.92678 14.4874 5.21967 14.7803C5.51256 15.0732 5.98744 15.0732 6.28033 14.7803L10 11.0607L13.7197 14.7803C14.0126 15.0732 14.4874 15.0732 14.7803 14.7803C15.0732 14.4874 15.0732 14.0126 14.7803 13.7197L11.0607 10L14.7803 6.28033C15.0732 5.98744 15.0732 5.51256 14.7803 5.21967C14.4874 4.92678 14.0126 4.92678 13.7197 5.21967L10 8.93934L6.28033 5.21967Z\"\n fill={color}\n />\n </svg>\n );\n}\n\nexport default CloseIcon;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Link,\n} from \"@shopify/polaris\";\n\nimport { CrossAppBannerProps, BannerEventAction } from \"../../types\";\nimport { APP_HANDLES } from \"../../constants\";\nimport { CrossAppIcon } from \"../icons/CrossAppIcon\";\nimport { DownloadIcon } from \"../icons/DownloadIcon\";\nimport { CloseIcon } from \"../icons/CloseIcon\";\nimport \"./CrossAppBanner.scss\";\n\n/**\n * CrossApp Banner Component\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Supports configuration-based customization for different apps.\n */\nexport function CrossAppBanner({\n config,\n appData,\n sourcePage = \"dashboard\",\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = \"linear-gradient(90deg, #000926 0%, #0a1f3d 100%)\",\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = \"bannerCloseCount\",\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle],\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix],\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? \"/banner-event\";\n\n try {\n await config.apiClient(endpoint, {\n method: \"POST\",\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage],\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent(\"display\");\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n // Update shop to hide banner permanently\n if (onShopUpdate) {\n onShopUpdate({ ...shop, hideVerificationBanner: true });\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: \"SET_SHOP\",\n payload: { ...shop, hideVerificationBanner: true },\n });\n }\n logBannerEvent(\"close\", true);\n } else {\n logBannerEvent(\"close\");\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent(\"access\");\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <CloseIcon color=\"#ffffff\" />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{ background: bgColor }}>\n <InlineStack gap={isVerificationApp ? \"400\" : \"0\"}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {translationKey}.title\n </Text>\n <BlockStack gap={isVerificationApp ? \"200\" : \"0\"}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {translationKey}.description1\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description1\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {translationKey}.description2\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">{translationKey}.btnClaim</Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>{translationKey}.btnViewPlan</span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBanner;\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n Layout,\n Text,\n InlineStack,\n Button,\n Box,\n BlockStack,\n Link,\n} from '@shopify/polaris';\nimport {useI18n} from '@shopify/react-i18n';\n\nimport {CrossAppBannerProps, BannerEventAction} from '../../types';\nimport {APP_HANDLES} from '../../constants';\nimport {CrossAppIcon} from '../icons/CrossAppIcon';\nimport {DownloadIcon} from '../icons/DownloadIcon';\nimport {CloseIcon} from '../icons/CloseIcon';\nimport './CrossAppBanner.scss';\n\n/**\n * CrossApp Banner Component with i18n support\n *\n * A reusable banner component for cross-promoting Avada apps.\n * Uses @shopify/react-i18n for translations.\n */\nexport function CrossAppBannerWithI18n({\n config,\n appData,\n sourcePage = 'dashboard',\n shop = {},\n onClose,\n onShopUpdate,\n}: CrossAppBannerProps) {\n const [i18n] = useI18n();\n\n const {\n appHandle,\n translationKey,\n targetUrl,\n showPlanBtn = false,\n planUrl,\n bgColor = 'linear-gradient(90deg, #000926 0%, #0a1f3d 100%)',\n isHideBanner = false,\n eventPrefix,\n bannerCloseKey = 'bannerCloseCount',\n } = useMemo(() => appData, [appData]);\n\n const isVerificationApp = useMemo(\n () => appHandle === APP_HANDLES.AGE_VERIFICATION,\n [appHandle]\n );\n\n const [showBanner, setShowBanner] = useState(!isHideBanner);\n\n const getEventName = useCallback(\n (action: BannerEventAction): string => {\n const prefix = eventPrefix ?? config.appPrefix;\n return `${prefix}_banner_${action}`;\n },\n [eventPrefix, config.appPrefix]\n );\n\n const logBannerEvent = useCallback(\n async (action: BannerEventAction, isClosePermanently = false) => {\n if (!isVerificationApp) return;\n\n const eventName = getEventName(action);\n const endpoint = config.bannerEventEndpoint ?? '/banner-event';\n\n try {\n await config.apiClient(endpoint, {\n method: 'POST',\n body: {\n event: eventName,\n properties: {\n [`${config.appPrefix}_banner_channel`]: sourcePage,\n },\n isClosePermanently,\n },\n });\n } catch (error) {\n console.error(`[Tracking Error] ${eventName}:`, error);\n }\n },\n [isVerificationApp, getEventName, config, sourcePage]\n );\n\n useEffect(() => {\n if (showBanner && isVerificationApp) {\n logBannerEvent('display');\n }\n }, [showBanner, isVerificationApp, logBannerEvent]);\n\n const handleClose = useCallback(() => {\n setShowBanner(false);\n\n if (isVerificationApp && bannerCloseKey) {\n const currentCount = Number(localStorage.getItem(bannerCloseKey)) || 0;\n const nextCount = currentCount + 1;\n\n localStorage.setItem(bannerCloseKey, String(nextCount));\n\n if (nextCount >= 2) {\n if (onShopUpdate) {\n onShopUpdate({...shop, hideVerificationBanner: true});\n }\n if (config.storeDispatch) {\n config.storeDispatch({\n type: 'SET_SHOP',\n payload: {...shop, hideVerificationBanner: true},\n });\n }\n logBannerEvent('close', true);\n } else {\n logBannerEvent('close');\n }\n }\n\n onClose?.();\n }, [\n isVerificationApp,\n bannerCloseKey,\n shop,\n onShopUpdate,\n config.storeDispatch,\n logBannerEvent,\n onClose,\n ]);\n\n const handleCtaClick = useCallback(() => {\n if (isVerificationApp) {\n logBannerEvent('access');\n }\n }, [isVerificationApp, logBannerEvent]);\n\n if (!showBanner || !appData) return null;\n\n const closeIcon = config.closeIcon ?? <CloseIcon color=\"#ffffff\" />;\n\n return (\n <Layout.Section>\n <Box borderRadius=\"200\" overflowX=\"hidden\" overflowY=\"hidden\">\n <div className=\"Avada-CrossApp\" style={{background: bgColor}}>\n <InlineStack gap={isVerificationApp ? '400' : '0'}>\n <div className=\"Avada-CrossApp__Icon\">\n <CrossAppIcon app={appHandle} size={80} />\n </div>\n <div className=\"Avada-CrossApp__Content\">\n <div className=\"Avada-CrossApp__Content--Text\">\n <BlockStack gap=\"200\">\n <Text as=\"h3\" variant=\"headingLg\" fontWeight=\"bold\">\n {i18n.translate(`${translationKey}.title`)}\n </Text>\n <BlockStack gap={isVerificationApp ? '200' : '0'}>\n {isVerificationApp ? (\n <i>\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"medium\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n </i>\n ) : (\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description1`)}\n </Text>\n )}\n <Text as=\"p\" variant=\"bodyMd\">\n {i18n.translate(`${translationKey}.description2`)}\n </Text>\n </BlockStack>\n </BlockStack>\n </div>\n <div className=\"Avada-CrossApp__Content--Btn\">\n <BlockStack gap=\"200\" inlineAlign=\"center\">\n <Button\n url={targetUrl}\n target=\"_blank\"\n onClick={handleCtaClick}\n fullWidth\n >\n <InlineStack blockAlign=\"center\" gap=\"100\">\n <DownloadIcon />\n <Text as=\"span\">\n {i18n.translate(`${translationKey}.btnClaim`)}\n </Text>\n </InlineStack>\n </Button>\n {showPlanBtn && planUrl && (\n <div className=\"Avada-CrossApp__ViewPlan\">\n <Link url={planUrl} target=\"_blank\">\n <span>\n {i18n.translate(`${translationKey}.btnViewPlan`)}\n </span>\n </Link>\n </div>\n )}\n </BlockStack>\n </div>\n </div>\n </InlineStack>\n <button\n className=\"Avada-CrossApp__CloseBtn\"\n onClick={handleClose}\n aria-label=\"Close banner\"\n type=\"button\"\n >\n {closeIcon}\n </button>\n </div>\n </Box>\n </Layout.Section>\n );\n}\n\nexport default CrossAppBannerWithI18n;\n","export {CrossAppBanner} from './CrossAppBanner';\nexport {CrossAppBannerWithI18n} from './CrossAppBannerWithI18n';\nexport default CrossAppBanner;\n","import {useState, useMemo, useCallback} from 'react';\nimport {\n UseDisplayBannerOptions,\n UseDisplayBannerReturn,\n TargetStorageType,\n} from '../types';\n\n/**\n * Storage data structure\n */\ninterface StorageData {\n currentDate?: string;\n disableCount?: number;\n}\n\n/**\n * Get data from localStorage\n */\nfunction getStorageData(key: string): StorageData {\n try {\n const data = localStorage.getItem(key);\n return data ? JSON.parse(data) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Set data to localStorage\n */\nfunction setStorageData(key: string, data: StorageData): void {\n try {\n localStorage.setItem(key, JSON.stringify(data));\n } catch (e) {\n console.error('Failed to save to localStorage:', e);\n }\n}\n\n/**\n * Check if object is empty\n */\nfunction isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * Calculate next display date based on target type\n */\nfunction getNextDisplayDate(targetDateType: TargetStorageType): Date {\n const currentDate = new Date();\n\n switch (targetDateType) {\n case 'next_day':\n currentDate.setDate(currentDate.getDate() + 1);\n break;\n\n case '7_days_after':\n currentDate.setDate(currentDate.getDate() + 7);\n break;\n\n case '30_days_after':\n currentDate.setDate(currentDate.getDate() + 30);\n break;\n\n default:\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return currentDate;\n}\n\nexport interface UseDisplayBannerConfig {\n /**\n * Storage key for tracking display state\n */\n storageKey: string;\n\n /**\n * Shop key for tracking dismissed banners per shop\n */\n shopKey?: string;\n\n /**\n * Current shop data\n */\n shop?: {\n dismissedBanners?: string[];\n [key: string]: unknown;\n };\n\n /**\n * Whether to check shop dismissed banners\n * @default false\n */\n checkShop?: boolean;\n\n /**\n * Number of closes before permanently dismissing\n * @default 3\n */\n disableCount?: number;\n\n /**\n * Target storage type for next display\n * @default 'next_day'\n */\n targetDateType?: TargetStorageType;\n\n /**\n * API client function for making requests\n */\n apiClient?: (\n url: string,\n options?: {method?: string; body?: Record<string, unknown>}\n ) => Promise<{success?: boolean; data?: Record<string, unknown>}>;\n\n /**\n * Endpoint for updating shop data\n * @default '/shops?type=banner'\n */\n shopUpdateEndpoint?: string;\n\n /**\n * Callback when shop data is updated\n */\n onShopUpdate?: (shopData: Record<string, unknown>) => void;\n\n /**\n * Callback when banner is closed\n */\n onClose?: () => void;\n\n /**\n * Whether to check storage for display state\n * @default true\n */\n checkStorage?: boolean;\n}\n\n/**\n * Hook to manage banner display state with localStorage persistence\n */\nexport function useDisplayBanner({\n storageKey,\n shopKey = '',\n shop = {},\n checkShop = false,\n disableCount = 3,\n targetDateType = 'next_day',\n apiClient,\n shopUpdateEndpoint = '/shops?type=banner',\n onShopUpdate,\n onClose,\n checkStorage = true,\n}: UseDisplayBannerConfig): UseDisplayBannerReturn {\n const [isCheckShop, setIsCheckShop] = useState(checkShop);\n const dismissedBanners = shop?.dismissedBanners ?? [];\n\n const isDismissed = useMemo(\n () => shopKey ? dismissedBanners.includes(shopKey) : false,\n [dismissedBanners, shopKey]\n );\n\n const handleShopApi = useCallback(\n async (data: Record<string, unknown>) => {\n if (!apiClient) return;\n\n try {\n const resp = await apiClient(shopUpdateEndpoint, {\n body: data,\n method: 'PUT',\n });\n\n if (resp.success && onShopUpdate) {\n onShopUpdate({\n ...shop,\n ...resp.data,\n });\n }\n } catch (e) {\n console.error('Failed to update shop:', e);\n }\n },\n [apiClient, shopUpdateEndpoint, shop, onShopUpdate]\n );\n\n const checkIsShowBanner = useCallback(() => {\n if (!checkStorage) {\n return true;\n }\n\n const storageData = getStorageData(storageKey);\n const isValidStorage =\n isEmpty(storageData) ||\n new Date(storageData.currentDate ?? '').getTime() < new Date().getTime();\n\n if (!isCheckShop) {\n return isValidStorage;\n }\n\n return isValidStorage && !isDismissed;\n }, [storageKey, isCheckShop, isDismissed, checkStorage]);\n\n const [shouldDisplay, setShouldDisplay] = useState(checkIsShowBanner);\n\n const hideBanner = useCallback(() => {\n setShouldDisplay(false);\n }, []);\n\n const showBanner = useCallback(() => {\n setShouldDisplay(true);\n }, []);\n\n const handleCloseBanner = useCallback(\n async (data?: Record<string, unknown>) => {\n const isDismissShop = data?.isDismissShop === true;\n\n setShouldDisplay(false);\n setIsCheckShop(isDismissShop);\n\n const storageData = getStorageData(storageKey);\n const count = storageData.disableCount ?? 1;\n\n const nextDate = getNextDisplayDate(targetDateType);\n\n setStorageData(storageKey, {\n currentDate: nextDate.toISOString(),\n disableCount: count + 1,\n });\n\n if ((isCheckShop && count >= disableCount) || isDismissShop) {\n const newDismissedBanners = [...new Set([...dismissedBanners, shopKey])];\n await handleShopApi({\n dismissedBanners: newDismissedBanners,\n ...data,\n });\n }\n\n onClose?.();\n },\n [\n storageKey,\n targetDateType,\n isCheckShop,\n disableCount,\n dismissedBanners,\n shopKey,\n handleShopApi,\n onClose,\n ]\n );\n\n return {\n shouldDisplay,\n hideBanner,\n showBanner,\n handleCloseBanner,\n };\n}\n\nexport default useDisplayBanner;\n"],"names":["_jsxs","_jsx","CrossAppBanner","useMemo","useState","useCallback","useEffect","Layout","Box","InlineStack","BlockStack","Text","Button","Link","useI18n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "avada-crossapp-banner",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Shared CrossApp Banner components and hooks for Avada Shopify apps",
5
5
  "author": {
6
6
  "name": "Avada",
@@ -22,7 +22,6 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@shopify/polaris": ">=12.0.0",
25
- "@shopify/polaris-icons": ">=7.0.0",
26
25
  "@shopify/react-i18n": ">=7.0.0",
27
26
  "react": ">=16.8.0",
28
27
  "react-dom": ">=16.8.0"