shared-features 0.0.8 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +205 -2
- package/dist/{admin-notifications-D9n9h-eY.cjs → admin-notifications-CLzQc8zF.cjs} +20 -20
- package/dist/{admin-notifications-D9n9h-eY.cjs.map → admin-notifications-CLzQc8zF.cjs.map} +1 -1
- package/dist/{admin-notifications-p1dy3zIP.js → admin-notifications-C_7ReIMi.js} +13 -13
- package/dist/{admin-notifications-p1dy3zIP.js.map → admin-notifications-C_7ReIMi.js.map} +1 -1
- package/dist/{broadcasts-3_WfQMNL.cjs → broadcasts-6w_9X92Z.cjs} +10 -10
- package/dist/{broadcasts-3_WfQMNL.cjs.map → broadcasts-6w_9X92Z.cjs.map} +1 -1
- package/dist/{broadcasts-DgZUzqMf.js → broadcasts-CK4sGMz4.js} +12 -12
- package/dist/{broadcasts-DgZUzqMf.js.map → broadcasts-CK4sGMz4.js.map} +1 -1
- package/dist/commonFeatures-CaqcEOik.js +1255 -0
- package/dist/commonFeatures-CaqcEOik.js.map +1 -0
- package/dist/commonFeatures-DhWaBEv_.cjs +222 -0
- package/dist/commonFeatures-DhWaBEv_.cjs.map +1 -0
- package/dist/commonFeatures-XJ9fuxg_.js +223 -0
- package/dist/commonFeatures-XJ9fuxg_.js.map +1 -0
- package/dist/commonFeatures-ofZOjnZ0.cjs +1276 -0
- package/dist/commonFeatures-ofZOjnZ0.cjs.map +1 -0
- package/dist/components/common/index.d.ts +60 -0
- package/dist/components/common/index.d.ts.map +1 -0
- package/dist/components/index.cjs +31 -23
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +21 -13
- package/dist/firebase/config.d.ts +34 -0
- package/dist/firebase/config.d.ts.map +1 -1
- package/dist/hooks/index.cjs +26 -13
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +24 -11
- package/dist/hooks/useCommonFeatures.d.ts +102 -0
- package/dist/hooks/useCommonFeatures.d.ts.map +1 -0
- package/dist/hooks/useFeatureFlags.d.ts +134 -0
- package/dist/hooks/useFeatureFlags.d.ts.map +1 -0
- package/dist/{AnnouncementModal-sxH4K5gy.js → index-BeNmzbTD.js} +212 -17
- package/dist/index-BeNmzbTD.js.map +1 -0
- package/dist/{AnnouncementModal-Bqy0pn3V.cjs → index-DB40ObYe.cjs} +209 -14
- package/dist/index-DB40ObYe.cjs.map +1 -0
- package/dist/index.cjs +127 -60
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +175 -108
- package/dist/index.js.map +1 -1
- package/dist/notifications/index.js +14 -14
- package/dist/services/commonFeatures.d.ts +25 -0
- package/dist/services/commonFeatures.d.ts.map +1 -0
- package/dist/services/featureFlags.d.ts +71 -0
- package/dist/services/featureFlags.d.ts.map +1 -0
- package/dist/services/index.cjs +49 -17
- package/dist/services/index.cjs.map +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +75 -43
- package/dist/services/index.js.map +1 -1
- package/dist/types/commonFeatures.d.ts +232 -0
- package/dist/types/commonFeatures.d.ts.map +1 -0
- package/dist/types/featureFlags.d.ts +203 -0
- package/dist/types/featureFlags.d.ts.map +1 -0
- package/dist/types/index.cjs +17 -0
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +17 -0
- package/dist/types/index.js.map +1 -1
- package/dist/useCommonFeatures-0EU_VRqi.cjs +488 -0
- package/dist/useCommonFeatures-0EU_VRqi.cjs.map +1 -0
- package/dist/useCommonFeatures-DP2YyB7m.js +489 -0
- package/dist/useCommonFeatures-DP2YyB7m.js.map +1 -0
- package/dist/useFeatureFlags-DHnOm0sA.js +368 -0
- package/dist/useFeatureFlags-DHnOm0sA.js.map +1 -0
- package/dist/useFeatureFlags-DRR1r3rt.cjs +367 -0
- package/dist/useFeatureFlags-DRR1r3rt.cjs.map +1 -0
- package/dist/{useNotificationEvents-D8DVxah1.js → useNotificationEvents-DAmR7FYF.js} +14 -14
- package/dist/{useNotificationEvents-D8DVxah1.js.map → useNotificationEvents-DAmR7FYF.js.map} +1 -1
- package/package.json +15 -8
- package/dist/AnnouncementModal-Bqy0pn3V.cjs.map +0 -1
- package/dist/AnnouncementModal-sxH4K5gy.js.map +0 -1
- package/dist/analytics-40-S_fHC.js +0 -440
- package/dist/analytics-40-S_fHC.js.map +0 -1
- package/dist/analytics-lEzOx2vl.cjs +0 -461
- package/dist/analytics-lEzOx2vl.cjs.map +0 -1
- package/dist/useBroadcasts-DzpCcbC8.js +0 -161
- package/dist/useBroadcasts-DzpCcbC8.js.map +0 -1
- package/dist/useBroadcasts-FP6ZrcY_.cjs +0 -160
- package/dist/useBroadcasts-FP6ZrcY_.cjs.map +0 -1
- package/dist/useCampaigns-BOZ9dDsG.cjs +0 -152
- package/dist/useCampaigns-BOZ9dDsG.cjs.map +0 -1
- package/dist/useCampaigns-D46b9zuf.js +0 -153
- package/dist/useCampaigns-D46b9zuf.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DB40ObYe.cjs","sources":["../src/components/ads/AdPanel.tsx","../src/components/ads/variants/SmallPanelVariants.tsx","../src/components/ads/AdSlider.tsx","../src/components/ads/AdModal.tsx","../src/components/ads/variants/LargePanelVariants.tsx","../src/components/ads/AdUpdateModal.tsx","../src/components/ads/AdBanner.tsx","../src/components/notifications/BroadcastBanner.tsx","../src/components/notifications/AnnouncementModal.tsx","../src/components/common/index.tsx"],"sourcesContent":["/**\n * AdPanel Component\n *\n * A simple ad panel component that displays a single campaign.\n * Can be placed in sidebars, footers, or other static locations.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useRef } from 'react';\nimport { Box, Flex, Text, Button, IconButton } from '@radix-ui/themes';\nimport { Cross2Icon } from '@radix-ui/react-icons';\nimport { useCampaign } from '../../hooks/useCampaigns';\nimport type { AdPanelProps } from '../../types/campaigns';\n\n/**\n * AdPanel displays a single campaign in a compact panel format.\n *\n * @example\n * ```tsx\n * <AdPanel placement=\"sidebar_panel\" variant=\"small_panel_2\" />\n * ```\n */\nexport function AdPanel({\n placement,\n variant: _variant = 'small_panel_2',\n className,\n}: AdPanelProps) {\n // TODO: variant will be used for different display styles in future variants\n const { campaign, loading, error, recordImpression, recordClick, recordClose } =\n useCampaign({ placement });\n\n const hasRecordedImpression = useRef(false);\n\n // Record impression when campaign is first displayed\n useEffect(() => {\n if (campaign && !hasRecordedImpression.current) {\n hasRecordedImpression.current = true;\n recordImpression(campaign);\n }\n }, [campaign, recordImpression]);\n\n if (loading || error || !campaign) {\n return null;\n }\n\n const handleClick = () => {\n recordClick(campaign);\n const url = campaign.customCtaUrl || campaign.product.url;\n window.open(url, '_blank', 'noopener,noreferrer');\n };\n\n const handleClose = () => {\n recordClose(campaign);\n // Hide the panel (could use state or CSS)\n };\n\n const title = campaign.customTitle || campaign.product.name;\n const tagline = campaign.customTagline || campaign.product.tagline;\n const ctaText = campaign.customCta || 'Learn More';\n const color = campaign.customProductColor || campaign.product.color;\n\n return (\n <Box\n className={className}\n style={{\n border: `1px solid ${color}`,\n borderRadius: '8px',\n padding: '12px',\n backgroundColor: `${color}10`,\n position: 'relative',\n }}\n >\n <IconButton\n size=\"1\"\n variant=\"ghost\"\n onClick={handleClose}\n style={{\n position: 'absolute',\n top: '4px',\n right: '4px',\n }}\n >\n <Cross2Icon />\n </IconButton>\n\n <Flex direction=\"column\" gap=\"2\">\n <Flex align=\"center\" gap=\"2\">\n {campaign.product.icon64 && (\n <Box\n dangerouslySetInnerHTML={{ __html: campaign.product.icon64 }}\n style={{ width: 32, height: 32 }}\n />\n )}\n <Text weight=\"bold\" size=\"3\" style={{ color }}>\n {title}\n </Text>\n </Flex>\n\n <Text size=\"2\" color=\"gray\">\n {tagline}\n </Text>\n\n <Button\n size=\"2\"\n onClick={handleClick}\n style={{ backgroundColor: color }}\n >\n {ctaText}\n </Button>\n </Flex>\n </Box>\n );\n}\n\nexport default AdPanel;\n","/**\n * Small Panel Variants for Advertising\n *\n * 5 variants for small promotional panels:\n * 1. Minimal - Icon + Name + Link\n * 2. Tagline - Icon + Name + Tagline + CTA\n * 3. Features - Icon + Name + Feature pills + CTA\n * 4. Gradient - Full gradient background\n * 5. Card - Elevated card with shadow\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { Box, Flex, Text, Button, Link, Card, Badge } from '@radix-ui/themes';\nimport { ExternalLink, Check, X, Sparkles } from 'lucide-react';\nimport type { CampaignWithProduct, SmallPanelProps } from '../../../types/campaigns';\n\n/**\n * Helper to get display values from campaign\n */\nfunction getDisplayValues(campaign: CampaignWithProduct) {\n const isCustomProduct = !campaign.product.icon64 && campaign.customIcon;\n\n return {\n displayTitle: campaign.customTitle || campaign.product.name,\n displayTagline: campaign.customTagline || campaign.product.tagline,\n displayCta: campaign.customCta || 'Learn More',\n displayUrl: campaign.customCtaUrl || campaign.product.url,\n displayIcon: campaign.customIcon || campaign.product.icon64 || '',\n displayColor: campaign.customProductColor || campaign.product.color || '#3B82F6',\n displayFeatures: campaign.customFeatures || campaign.product.features || [],\n isCustomProduct,\n };\n}\n\n/**\n * Variant 1: Minimal - Icon + Name + Link\n */\nexport function MinimalVariant({ campaign, onCTAClick, onClose }: SmallPanelProps) {\n const { displayTitle, displayCta, displayUrl, displayIcon, displayColor } = getDisplayValues(campaign);\n\n return (\n <Card size=\"1\">\n <Flex align=\"center\" justify=\"between\" gap=\"3\" p=\"2\">\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 32,\n height: 32,\n borderRadius: 'var(--radius-2)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n />\n <Text size=\"2\" weight=\"medium\">\n {displayTitle}\n </Text>\n </Flex>\n <Flex align=\"center\" gap=\"2\">\n <Link\n href={displayUrl}\n target=\"_blank\"\n onClick={onCTAClick}\n style={{ textDecoration: 'none' }}\n >\n <Flex align=\"center\" gap=\"1\">\n <Text size=\"2\" color=\"blue\">\n {displayCta}\n </Text>\n <ExternalLink size={14} />\n </Flex>\n </Link>\n <Button variant=\"ghost\" size=\"1\" color=\"gray\" onClick={onClose}>\n <X size={14} />\n </Button>\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n/**\n * Variant 2: Tagline - Icon + Name + Tagline + CTA Button\n */\nexport function TaglineVariant({ campaign, onCTAClick, onClose }: SmallPanelProps) {\n const { displayTitle, displayTagline, displayCta, displayUrl, displayIcon, displayColor } = getDisplayValues(campaign);\n\n return (\n <Card size=\"1\">\n <Flex align=\"center\" justify=\"between\" gap=\"3\" p=\"3\">\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 40,\n height: 40,\n borderRadius: 'var(--radius-2)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n />\n <Box>\n <Text size=\"2\" weight=\"bold\">\n {displayTitle}\n </Text>\n <Text size=\"1\" color=\"gray\">\n {displayTagline}\n </Text>\n </Box>\n </Flex>\n <Flex align=\"center\" gap=\"2\">\n <Button\n size=\"1\"\n style={{ background: displayColor }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n </Button>\n <Button variant=\"ghost\" size=\"1\" color=\"gray\" onClick={onClose}>\n <X size={14} />\n </Button>\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n/**\n * Variant 3: Features - Icon + Name + Feature pills + CTA\n */\nexport function FeaturesVariant({ campaign, onCTAClick, onClose }: SmallPanelProps) {\n const { displayTitle, displayCta, displayUrl, displayIcon, displayColor, displayFeatures } = getDisplayValues(campaign);\n const features = displayFeatures.slice(0, 2);\n\n return (\n <Card size=\"1\">\n <Flex align=\"center\" justify=\"between\" gap=\"3\" p=\"3\">\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 40,\n height: 40,\n borderRadius: 'var(--radius-2)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n />\n <Box>\n <Text size=\"2\" weight=\"bold\" mb=\"1\">\n {displayTitle}\n </Text>\n <Flex gap=\"1\" wrap=\"wrap\">\n {features.map((feature, i) => (\n <Badge key={i} size=\"1\" variant=\"soft\" color=\"gray\">\n <Check size={10} style={{ marginRight: 2 }} />\n {feature}\n </Badge>\n ))}\n </Flex>\n </Box>\n </Flex>\n <Flex align=\"center\" gap=\"2\">\n <Button\n size=\"1\"\n style={{ background: displayColor }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n </Button>\n <Button variant=\"ghost\" size=\"1\" color=\"gray\" onClick={onClose}>\n <X size={14} />\n </Button>\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n/**\n * Variant 4: Gradient - Full gradient background\n */\nexport function GradientVariant({ campaign, onCTAClick, onClose }: SmallPanelProps) {\n const { displayTitle, displayTagline, displayCta, displayUrl, displayIcon, displayColor } = getDisplayValues(campaign);\n\n return (\n <Box\n style={{\n background: `linear-gradient(135deg, ${displayColor} 0%, color-mix(in srgb, ${displayColor} 80%, black) 100%)`,\n borderRadius: 'var(--radius-3)',\n padding: 'var(--space-3)',\n color: 'white',\n }}\n >\n <Flex align=\"center\" justify=\"between\" gap=\"3\">\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 40,\n height: 40,\n borderRadius: 'var(--radius-2)',\n background: 'rgba(255, 255, 255, 0.2)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <Box\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n style={{\n color: 'white',\n }}\n />\n </Box>\n <Box>\n <Text size=\"2\" weight=\"bold\" style={{ color: 'white' }}>\n {displayTitle}\n </Text>\n <Text size=\"1\" style={{ color: 'rgba(255, 255, 255, 0.8)' }}>\n {displayTagline}\n </Text>\n </Box>\n </Flex>\n <Flex align=\"center\" gap=\"2\">\n <Button\n size=\"1\"\n variant=\"soft\"\n style={{\n background: 'white',\n color: displayColor,\n }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"1\"\n onClick={onClose}\n style={{ color: 'rgba(255, 255, 255, 0.8)' }}\n >\n <X size={14} />\n </Button>\n </Flex>\n </Flex>\n </Box>\n );\n}\n\n/**\n * Variant 5: Card - Elevated card with shadow and animation\n */\nexport function CardVariant({ campaign, onCTAClick, onClose }: SmallPanelProps) {\n const { displayTitle, displayTagline, displayCta, displayUrl, displayIcon, displayColor } = getDisplayValues(campaign);\n\n return (\n <Card\n size=\"2\"\n style={{\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.1)',\n transition: 'all 0.2s ease',\n border: `1px solid ${displayColor}20`,\n }}\n >\n <Flex direction=\"column\" gap=\"3\" p=\"1\">\n <Flex align=\"center\" justify=\"between\">\n <Flex align=\"center\" gap=\"1\">\n <Sparkles size={14} color={displayColor} />\n <Text size=\"1\" color=\"gray\" weight=\"medium\">\n RECOMMENDED\n </Text>\n </Flex>\n <Button variant=\"ghost\" size=\"1\" color=\"gray\" onClick={onClose}>\n <X size={14} />\n </Button>\n </Flex>\n\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: 'var(--radius-3)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n />\n <Box style={{ flex: 1 }}>\n <Text size=\"2\" weight=\"bold\">\n {displayTitle}\n </Text>\n <Text size=\"1\" color=\"gray\">\n {displayTagline}\n </Text>\n </Box>\n </Flex>\n\n <Button\n size=\"2\"\n style={{ background: displayColor, width: '100%' }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n <ExternalLink size={14} />\n </Button>\n </Flex>\n </Card>\n );\n}\n\n/**\n * Get variant component by name\n */\nexport const SMALL_PANEL_VARIANTS = {\n small_panel_1: MinimalVariant,\n small_panel_2: TaglineVariant,\n small_panel_3: FeaturesVariant,\n small_panel_4: GradientVariant,\n small_panel_5: CardVariant,\n};\n\nexport type SmallPanelVariantName = keyof typeof SMALL_PANEL_VARIANTS;\n\nexport function getSmallPanelVariant(variantName: string) {\n return SMALL_PANEL_VARIANTS[variantName as SmallPanelVariantName] || TaglineVariant;\n}\n","/**\n * AdSlider Component\n *\n * Small promotional slider panel for consumer apps.\n * Displays eligible ad campaigns using 5 small panel variants.\n *\n * Placement: Footer, sidebar, between sections\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useCallback, useRef } from 'react';\nimport { Box } from '@radix-ui/themes';\nimport { useCampaign } from '../../hooks/useCampaigns';\nimport { getSmallPanelVariant } from './variants/SmallPanelVariants';\nimport type { AdPlacement } from '../../types/campaigns';\n\nexport interface AdSliderProps {\n /** Ad placement (defaults to footer_slider) */\n placement?: AdPlacement;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * AdSlider - Small promotional panel\n *\n * @example\n * ```tsx\n * <AdSlider placement=\"footer_slider\" />\n * <AdSlider placement=\"sidebar_panel\" className=\"my-ad\" />\n * ```\n */\nexport function AdSlider({\n placement = 'footer_slider',\n className,\n style,\n}: AdSliderProps) {\n const hasTrackedImpression = useRef(false);\n\n const {\n campaign,\n loading,\n recordImpression,\n recordClick,\n recordClose,\n } = useCampaign({ placement });\n\n // Track impression on mount when campaign is available\n useEffect(() => {\n if (campaign && !hasTrackedImpression.current) {\n hasTrackedImpression.current = true;\n recordImpression(campaign);\n }\n }, [campaign, recordImpression]);\n\n // Handle CTA click\n const handleCTAClick = useCallback(() => {\n if (!campaign) return;\n recordClick(campaign);\n }, [campaign, recordClick]);\n\n // Handle close\n const handleClose = useCallback(() => {\n if (!campaign) return;\n recordClose(campaign);\n }, [campaign, recordClose]);\n\n // Don't render if loading or no campaign\n if (loading || !campaign) {\n return null;\n }\n\n // Get variant component\n const variantName = campaign.variant || 'small_panel_2';\n const VariantComponent = getSmallPanelVariant(variantName);\n\n return (\n <Box className={className} style={style}>\n <VariantComponent\n campaign={campaign}\n onCTAClick={handleCTAClick}\n onClose={handleClose}\n />\n </Box>\n );\n}\n\nexport default AdSlider;\n","/**\n * AdModal Component\n *\n * One-time promotional modal for consumer apps.\n * Displays on first visit to promote products.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useCallback, useState, useRef } from 'react';\nimport { Box, Flex, Text, Heading, Button, Dialog, Checkbox } from '@radix-ui/themes';\nimport { ExternalLink, X, Gift } from 'lucide-react';\nimport { useCampaign, useOneTimeAdModal } from '../../hooks/useCampaigns';\nimport type { AdPlacement } from '../../types/campaigns';\nimport { getConfig, isInitialized } from '../../firebase/config';\n\nexport interface AdModalProps {\n /** Ad placement (defaults to onetime_modal) */\n placement?: AdPlacement;\n /** Callback when modal closes */\n onClose?: () => void;\n /** Custom welcome title (when no campaign) */\n welcomeTitle?: string;\n /** Custom welcome description (when no campaign) */\n welcomeDescription?: string;\n}\n\n/**\n * AdModal - One-time promotional modal\n *\n * @example\n * ```tsx\n * <AdModal />\n * <AdModal\n * placement=\"onetime_modal\"\n * welcomeTitle=\"Welcome to My App!\"\n * welcomeDescription=\"Discover amazing features...\"\n * />\n * ```\n */\nexport function AdModal({\n placement = 'onetime_modal',\n onClose,\n welcomeTitle,\n welcomeDescription,\n}: AdModalProps) {\n const [dontShowAgain, setDontShowAgain] = useState(false);\n const hasTrackedImpression = useRef(false);\n\n const { shouldShow, markAsShown } = useOneTimeAdModal();\n\n const {\n campaign,\n loading,\n recordImpression,\n recordClick,\n recordClose,\n } = useCampaign({ placement });\n\n // Track impression when modal shows\n useEffect(() => {\n if (shouldShow && campaign && !hasTrackedImpression.current) {\n hasTrackedImpression.current = true;\n recordImpression(campaign);\n }\n }, [shouldShow, campaign, recordImpression]);\n\n // Handle CTA click\n const handleCTAClick = useCallback(() => {\n if (!campaign) return;\n recordClick(campaign);\n const targetUrl = campaign.customCtaUrl || campaign.product.url;\n window.open(targetUrl, '_blank');\n }, [campaign, recordClick]);\n\n // Handle close\n const handleClose = useCallback(() => {\n if (campaign) {\n recordClose(campaign);\n }\n markAsShown();\n onClose?.();\n }, [campaign, recordClose, markAsShown, onClose]);\n\n // Don't render if shared-features not initialized\n if (!isInitialized()) {\n return null;\n }\n\n // Don't show if not eligible or loading\n if (!shouldShow || loading) {\n return null;\n }\n\n // Show welcome modal without campaign\n if (!campaign) {\n const config = getConfig();\n const defaultTitle = welcomeTitle || `Welcome to ${config.projectName}!`;\n const defaultDesc = welcomeDescription || 'Discover amazing features and tools at your fingertips.';\n\n return (\n <Dialog.Root open={true} onOpenChange={(open) => !open && handleClose()}>\n <Dialog.Content style={{ maxWidth: 450 }}>\n <Dialog.Title>\n <Flex align=\"center\" gap=\"2\">\n <Gift size={24} />\n {defaultTitle}\n </Flex>\n </Dialog.Title>\n <Dialog.Description size=\"2\" mb=\"4\">\n {defaultDesc}\n </Dialog.Description>\n\n <Flex gap=\"3\" mt=\"4\" justify=\"end\">\n <Dialog.Close>\n <Button variant=\"soft\" color=\"gray\">\n Start Exploring\n </Button>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n const { product } = campaign;\n const displayTitle = campaign.customTitle || product.name;\n const displayTagline = campaign.customTagline || product.tagline;\n const displayDescription = campaign.customDescription || product.description;\n const displayCta = campaign.customCta || 'Learn More';\n const displayIcon = campaign.customIcon || product.icon128 || product.icon64 || '';\n const displayColor = campaign.customProductColor || product.color || '#3B82F6';\n const displayFeatures = campaign.customFeatures || product.features || [];\n\n return (\n <Dialog.Root open={true} onOpenChange={(open) => !open && handleClose()}>\n <Dialog.Content style={{ maxWidth: 500 }}>\n <Flex justify=\"end\" mb=\"2\">\n <Dialog.Close>\n <Button variant=\"ghost\" size=\"1\" color=\"gray\">\n <X size={16} />\n </Button>\n </Dialog.Close>\n </Flex>\n\n <Flex direction=\"column\" align=\"center\" gap=\"4\" p=\"4\" style={{ textAlign: 'center' }}>\n <Box\n style={{\n width: 96,\n height: 96,\n borderRadius: 'var(--radius-4)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n />\n\n <Box>\n <Heading size=\"5\" weight=\"bold\" mb=\"2\">\n {displayTitle}\n </Heading>\n <Text size=\"3\" color=\"gray\">\n {displayTagline}\n </Text>\n </Box>\n\n <Text size=\"2\" color=\"gray\" style={{ maxWidth: 350, lineHeight: 1.6 }}>\n {displayDescription}\n </Text>\n\n <Flex wrap=\"wrap\" gap=\"2\" justify=\"center\">\n {displayFeatures.slice(0, 4).map((feature, i) => (\n <Box\n key={i}\n style={{\n padding: 'var(--space-1) var(--space-2)',\n borderRadius: 'var(--radius-2)',\n background: 'var(--gray-a3)',\n fontSize: 'var(--font-size-1)',\n }}\n >\n {feature}\n </Box>\n ))}\n </Flex>\n\n <Button\n size=\"3\"\n style={{ background: displayColor, marginTop: 'var(--space-2)' }}\n onClick={handleCTAClick}\n >\n {displayCta}\n <ExternalLink size={16} />\n </Button>\n\n <Flex align=\"center\" gap=\"2\" mt=\"2\">\n <Checkbox\n checked={dontShowAgain}\n onCheckedChange={(checked) => setDontShowAgain(checked === true)}\n />\n <Text size=\"1\" color=\"gray\">\n Don't show this again\n </Text>\n </Flex>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\nexport default AdModal;\n","/**\n * Large Panel Variants for Advertising\n *\n * 5 variants for large promotional panels (modals, sliders):\n * 1. Hero - Large icon + description + CTA\n * 2. Feature Grid - 2x2 grid of features\n * 3. Testimonial - Quote + product info\n * 4. Comparison - Before/After comparison\n * 5. Video - Animated preview + play button\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { Box, Flex, Text, Heading, Button, Card, Grid } from '@radix-ui/themes';\nimport { ExternalLink, Check, X, Play, Quote } from 'lucide-react';\nimport type { CampaignWithProduct, LargePanelProps } from '../../../types/campaigns';\n\n/**\n * Helper to get display values from campaign\n */\nfunction getDisplayValues(campaign: CampaignWithProduct) {\n const isCustomProduct = !campaign.product.icon64 && campaign.customIcon;\n\n return {\n displayTitle: campaign.customTitle || campaign.product.name,\n displayTagline: campaign.customTagline || campaign.product.tagline,\n displayDescription: campaign.customDescription || campaign.product.description,\n displayCta: campaign.customCta || 'Learn More',\n displayUrl: campaign.customCtaUrl || campaign.product.url,\n displayIcon64: campaign.customIcon || campaign.product.icon64 || '',\n displayIcon128: campaign.customIcon || campaign.product.icon128 || campaign.product.icon64 || '',\n displayColor: campaign.customProductColor || campaign.product.color || '#3B82F6',\n displayFeatures: campaign.customFeatures || campaign.product.features || [],\n isCustomProduct,\n };\n}\n\n// Default testimonial quotes (can be overridden by campaign data)\nconst DEFAULT_TESTIMONIALS: Record<string, string> = {\n 'video-controls-plus':\n '\"Finally, I have complete control over video playback. The keyboard shortcuts save me so much time!\"',\n 'ztools-web':\n '\"300+ tools in one place. I use it daily for encoding, formatting, and data conversion tasks.\"',\n 'ztools-extension': '\"Quick access to all my favorite tools right from the browser. Super convenient!\"',\n 'pregnancy-pal-android':\n '\"The weekly updates and kick counter are amazing. Best pregnancy tracking app!\"',\n 'pregnancy-pal-web':\n '\"Love being able to access my pregnancy data from any device. The sync is seamless.\"',\n 'lab-system-web': '\"Streamlined our entire lab workflow. Sample tracking has never been easier.\"',\n};\n\n// Default comparison data (can be overridden by campaign data)\nconst DEFAULT_COMPARISONS: Record<string, { before: string[]; after: string[] }> = {\n 'video-controls-plus': {\n before: ['Limited playback control', 'No keyboard shortcuts', 'Manual ad skipping', 'No speed control'],\n after: ['Full playback control', 'Custom shortcuts', 'Auto ad skip', '0.1x - 16x speed'],\n },\n 'ztools-web': {\n before: ['Multiple websites', 'Scattered tools', 'No offline access', 'Ads everywhere'],\n after: ['One destination', '300+ tools', 'Works offline', 'Ad-free experience'],\n },\n 'ztools-extension': {\n before: ['Open new tabs', 'Search for tools', 'Copy/paste repeatedly', 'Time wasted'],\n after: ['Instant access', 'Quick search', 'One-click actions', 'Time saved'],\n },\n 'pregnancy-pal-android': {\n before: ['Paper tracking', 'Forget updates', 'Manual counting', 'Scattered info'],\n after: ['Digital diary', 'Weekly reminders', 'Auto tracking', 'All in one app'],\n },\n 'pregnancy-pal-web': {\n before: ['Phone only', 'No backup', 'Limited access', 'Data silos'],\n after: ['Any device', 'Cloud sync', 'Always available', 'Unified data'],\n },\n 'lab-system-web': {\n before: ['Paper records', 'Manual tracking', 'Error prone', 'Slow reports'],\n after: ['Digital records', 'Auto tracking', 'Accurate data', 'Instant reports'],\n },\n};\n\n/**\n * Variant 1: Hero - Large icon + description + CTA\n */\nexport function HeroVariant({\n campaign,\n onCTAClick,\n showIndicator,\n currentIndex,\n totalCount,\n}: LargePanelProps) {\n const { displayTitle, displayTagline, displayDescription, displayCta, displayUrl, displayIcon128, displayColor } = getDisplayValues(campaign);\n\n return (\n <Flex direction=\"column\" align=\"center\" gap=\"4\" p=\"5\" style={{ textAlign: 'center' }}>\n {showIndicator && currentIndex !== undefined && totalCount !== undefined && (\n <Text size=\"1\" color=\"gray\" style={{ position: 'absolute', top: 16, right: 16 }}>\n {currentIndex + 1} / {totalCount}\n </Text>\n )}\n\n <Box\n style={{\n width: 80,\n height: 80,\n borderRadius: 'var(--radius-4)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon128 }}\n />\n\n <Heading size=\"5\" weight=\"bold\">\n {displayTitle}\n </Heading>\n\n <Text size=\"3\" color=\"gray\">\n {displayTagline}\n </Text>\n\n <Text size=\"2\" color=\"gray\" style={{ maxWidth: 300, lineHeight: 1.6 }}>\n {displayDescription}\n </Text>\n\n <Button\n size=\"3\"\n style={{ background: displayColor, marginTop: 'var(--space-2)' }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n <ExternalLink size={16} />\n </Button>\n </Flex>\n );\n}\n\n/**\n * Variant 2: Feature Grid - 2x2 grid of features\n */\nexport function FeatureGridVariant({\n campaign,\n onCTAClick,\n showIndicator,\n currentIndex,\n totalCount,\n}: LargePanelProps) {\n const { displayTitle, displayCta, displayUrl, displayIcon64, displayColor, displayFeatures } = getDisplayValues(campaign);\n const features = displayFeatures.slice(0, 4);\n\n return (\n <Flex direction=\"column\" gap=\"4\" p=\"5\">\n {showIndicator && currentIndex !== undefined && totalCount !== undefined && (\n <Text size=\"1\" color=\"gray\" style={{ position: 'absolute', top: 16, right: 16 }}>\n {currentIndex + 1} / {totalCount}\n </Text>\n )}\n\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: 'var(--radius-3)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon64 }}\n />\n <Heading size=\"4\" weight=\"bold\">\n {displayTitle}\n </Heading>\n </Flex>\n\n <Grid columns=\"2\" gap=\"3\">\n {features.map((feature, i) => (\n <Card key={i} size=\"1\" style={{ background: 'var(--gray-a2)' }}>\n <Flex align=\"center\" gap=\"2\" p=\"2\">\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n background: displayColor,\n color: 'white',\n fontSize: 12,\n fontWeight: 'bold',\n flexShrink: 0,\n }}\n >\n {i + 1}\n </Flex>\n <Text size=\"2\">{feature}</Text>\n </Flex>\n </Card>\n ))}\n </Grid>\n\n <Button\n size=\"3\"\n style={{ background: displayColor, width: '100%' }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n <ExternalLink size={16} />\n </Button>\n </Flex>\n );\n}\n\n/**\n * Variant 3: Testimonial - Quote + product info\n */\nexport function TestimonialVariant({\n campaign,\n onCTAClick,\n showIndicator,\n currentIndex,\n totalCount,\n}: LargePanelProps) {\n const { product } = campaign;\n const { displayTitle, displayTagline, displayCta, displayUrl, displayIcon64, displayColor } = getDisplayValues(campaign);\n const quote = DEFAULT_TESTIMONIALS[product.id] || '\"An amazing tool that makes my work easier every day.\"';\n\n return (\n <Flex direction=\"column\" gap=\"4\" p=\"5\" style={{ background: 'var(--gray-a2)', borderRadius: 'var(--radius-3)' }}>\n {showIndicator && currentIndex !== undefined && totalCount !== undefined && (\n <Text size=\"1\" color=\"gray\" style={{ position: 'absolute', top: 16, right: 16 }}>\n {currentIndex + 1} / {totalCount}\n </Text>\n )}\n\n <Box style={{ position: 'relative', padding: 'var(--space-3)' }}>\n <Quote\n size={32}\n style={{\n position: 'absolute',\n top: 0,\n left: '50%',\n transform: 'translateX(-50%)',\n opacity: 0.15,\n color: displayColor,\n }}\n />\n <Text size=\"3\" style={{ fontStyle: 'italic', textAlign: 'center', lineHeight: 1.6 }}>\n {quote}\n </Text>\n <Text size=\"2\" color=\"gray\" style={{ textAlign: 'center', marginTop: 'var(--space-2)' }}>\n — Happy User\n </Text>\n </Box>\n\n <Card size=\"1\">\n <Flex align=\"center\" gap=\"3\" p=\"3\">\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: 'var(--radius-3)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon64 }}\n />\n <Box>\n <Text size=\"2\" weight=\"bold\">\n {displayTitle}\n </Text>\n <Text size=\"1\" color=\"gray\">\n {displayTagline}\n </Text>\n </Box>\n </Flex>\n </Card>\n\n <Button\n size=\"3\"\n style={{ background: displayColor, width: '100%' }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n <ExternalLink size={16} />\n </Button>\n </Flex>\n );\n}\n\n/**\n * Variant 4: Comparison - Before/After comparison\n */\nexport function ComparisonVariant({\n campaign,\n onCTAClick,\n showIndicator,\n currentIndex,\n totalCount,\n}: LargePanelProps) {\n const { product } = campaign;\n const { displayTitle, displayCta, displayUrl, displayIcon64, displayColor } = getDisplayValues(campaign);\n const comparison = DEFAULT_COMPARISONS[product.id] || {\n before: ['Old way', 'Manual process', 'Time consuming', 'Limited features'],\n after: ['Better way', 'Automated', 'Fast & easy', 'Full features'],\n };\n\n return (\n <Flex direction=\"column\" gap=\"4\" p=\"5\">\n {showIndicator && currentIndex !== undefined && totalCount !== undefined && (\n <Text size=\"1\" color=\"gray\" style={{ position: 'absolute', top: 16, right: 16 }}>\n {currentIndex + 1} / {totalCount}\n </Text>\n )}\n\n <Flex align=\"center\" gap=\"3\">\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: 'var(--radius-3)',\n background: `color-mix(in srgb, ${displayColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon64 }}\n />\n <Heading size=\"4\" weight=\"bold\">\n {displayTitle}\n </Heading>\n </Flex>\n\n <Flex gap=\"3\">\n <Box\n style={{\n flex: 1,\n padding: 'var(--space-3)',\n borderRadius: 'var(--radius-2)',\n background: 'rgba(239, 68, 68, 0.1)',\n }}\n >\n <Text size=\"1\" weight=\"bold\" color=\"red\" mb=\"2\" style={{ textTransform: 'uppercase' }}>\n Before\n </Text>\n {comparison.before.map((item, i) => (\n <Flex key={i} align=\"center\" gap=\"2\" mb=\"1\">\n <X size={12} color=\"var(--red-9)\" />\n <Text size=\"1\">{item}</Text>\n </Flex>\n ))}\n </Box>\n\n <Box\n style={{\n flex: 1,\n padding: 'var(--space-3)',\n borderRadius: 'var(--radius-2)',\n background: 'rgba(16, 185, 129, 0.1)',\n }}\n >\n <Text size=\"1\" weight=\"bold\" color=\"green\" mb=\"2\" style={{ textTransform: 'uppercase' }}>\n After\n </Text>\n {comparison.after.map((item, i) => (\n <Flex key={i} align=\"center\" gap=\"2\" mb=\"1\">\n <Check size={12} color=\"var(--green-9)\" />\n <Text size=\"1\">{item}</Text>\n </Flex>\n ))}\n </Box>\n </Flex>\n\n <Button\n size=\"3\"\n style={{ background: displayColor, width: '100%' }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n <ExternalLink size={16} />\n </Button>\n </Flex>\n );\n}\n\n/**\n * Variant 5: Video - Animated preview + play button\n */\nexport function VideoVariant({\n campaign,\n onCTAClick,\n showIndicator,\n currentIndex,\n totalCount,\n}: LargePanelProps) {\n const { displayTitle, displayTagline, displayCta, displayUrl, displayIcon128, displayColor } = getDisplayValues(campaign);\n\n return (\n <Flex direction=\"column\" align=\"center\" gap=\"4\" p=\"5\" style={{ textAlign: 'center' }}>\n {showIndicator && currentIndex !== undefined && totalCount !== undefined && (\n <Text size=\"1\" color=\"gray\" style={{ position: 'absolute', top: 16, right: 16 }}>\n {currentIndex + 1} / {totalCount}\n </Text>\n )}\n\n <Box\n style={{\n position: 'relative',\n width: 140,\n height: 140,\n borderRadius: 'var(--radius-4)',\n background: `linear-gradient(135deg, color-mix(in srgb, ${displayColor} 20%, transparent), color-mix(in srgb, ${displayColor} 40%, transparent))`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n }}\n >\n <Box\n style={{\n animation: 'shared-features-pulse 2s ease-in-out infinite',\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon128 }}\n />\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n position: 'absolute',\n width: 56,\n height: 56,\n borderRadius: '50%',\n background: 'rgba(255, 255, 255, 0.95)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.2)',\n cursor: 'pointer',\n transition: 'transform 0.2s ease',\n }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n <Play size={24} fill={displayColor} color={displayColor} />\n </Flex>\n </Box>\n\n <Heading size=\"5\" weight=\"bold\">\n {displayTitle}\n </Heading>\n\n <Text size=\"2\" color=\"gray\">\n {displayTagline}\n </Text>\n\n <Button\n size=\"3\"\n style={{ background: displayColor, marginTop: 'var(--space-2)' }}\n onClick={() => {\n onCTAClick?.();\n window.open(displayUrl, '_blank');\n }}\n >\n {displayCta}\n <ExternalLink size={16} />\n </Button>\n\n <style>{`\n @keyframes shared-features-pulse {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n }\n `}</style>\n </Flex>\n );\n}\n\n/**\n * Get variant component by name\n */\nexport const LARGE_PANEL_VARIANTS = {\n large_slider_1: HeroVariant,\n large_slider_2: FeatureGridVariant,\n large_slider_3: TestimonialVariant,\n large_slider_4: ComparisonVariant,\n large_slider_5: VideoVariant,\n};\n\nexport type LargePanelVariantName = keyof typeof LARGE_PANEL_VARIANTS;\n\nexport function getLargePanelVariant(variantName: string) {\n return LARGE_PANEL_VARIANTS[variantName as LargePanelVariantName] || HeroVariant;\n}\n","/**\n * AdUpdateModal Component\n *\n * Big slider modal shown when the app updates.\n * Displays a carousel of promotional campaigns with 5 large variants.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useCallback, useState, useRef } from 'react';\nimport { Box, Flex, Text, Button, Dialog, IconButton } from '@radix-ui/themes';\nimport { ChevronLeft, ChevronRight, X } from 'lucide-react';\nimport { useCampaigns, useUpdateAdModal } from '../../hooks/useCampaigns';\nimport { getLargePanelVariant } from './variants/LargePanelVariants';\nimport type { AdPlacement } from '../../types/campaigns';\n\nexport interface AdUpdateModalProps {\n /** Ad placement (defaults to update_modal) */\n placement?: AdPlacement;\n /** Maximum number of campaigns to show */\n maxCampaigns?: number;\n /** Auto-advance interval in ms (0 to disable) */\n autoAdvanceInterval?: number;\n /** Callback when modal closes */\n onClose?: () => void;\n}\n\n/**\n * AdUpdateModal - Big slider promotional modal\n *\n * @example\n * ```tsx\n * <AdUpdateModal />\n * <AdUpdateModal\n * placement=\"update_modal\"\n * maxCampaigns={5}\n * autoAdvanceInterval={5000}\n * />\n * ```\n */\nexport function AdUpdateModal({\n placement = 'update_modal',\n maxCampaigns = 5,\n autoAdvanceInterval = 5000,\n onClose,\n}: AdUpdateModalProps) {\n const [currentIndex, setCurrentIndex] = useState(0);\n const autoAdvanceRef = useRef<NodeJS.Timeout | null>(null);\n const trackedImpressions = useRef<Set<string>>(new Set());\n\n const { shouldShow, currentVersion, markAsShown } = useUpdateAdModal();\n\n const {\n campaigns,\n loading,\n recordImpression,\n recordClick,\n recordClose,\n } = useCampaigns({ placement, maxCampaigns });\n\n // Track impression for current campaign\n useEffect(() => {\n if (shouldShow && campaigns.length > 0 && currentIndex < campaigns.length) {\n const campaign = campaigns[currentIndex];\n if (campaign && !trackedImpressions.current.has(campaign.id)) {\n trackedImpressions.current.add(campaign.id);\n recordImpression(campaign);\n }\n }\n }, [shouldShow, campaigns, currentIndex, recordImpression]);\n\n // Auto-advance carousel\n useEffect(() => {\n if (!shouldShow || campaigns.length <= 1 || autoAdvanceInterval <= 0) return;\n\n autoAdvanceRef.current = setInterval(() => {\n setCurrentIndex((prev) => (prev + 1) % campaigns.length);\n }, autoAdvanceInterval);\n\n return () => {\n if (autoAdvanceRef.current) {\n clearInterval(autoAdvanceRef.current);\n }\n };\n }, [shouldShow, campaigns.length, autoAdvanceInterval]);\n\n // Reset auto-advance on manual navigation\n const resetAutoAdvance = useCallback(() => {\n if (autoAdvanceRef.current) {\n clearInterval(autoAdvanceRef.current);\n }\n if (autoAdvanceInterval > 0 && campaigns.length > 1) {\n autoAdvanceRef.current = setInterval(() => {\n setCurrentIndex((prev) => (prev + 1) % campaigns.length);\n }, autoAdvanceInterval);\n }\n }, [autoAdvanceInterval, campaigns.length]);\n\n // Navigate to previous slide\n const goToPrevious = useCallback(() => {\n setCurrentIndex((prev) => (prev - 1 + campaigns.length) % campaigns.length);\n resetAutoAdvance();\n }, [campaigns.length, resetAutoAdvance]);\n\n // Navigate to next slide\n const goToNext = useCallback(() => {\n setCurrentIndex((prev) => (prev + 1) % campaigns.length);\n resetAutoAdvance();\n }, [campaigns.length, resetAutoAdvance]);\n\n // Navigate to specific slide\n const goToSlide = useCallback(\n (index: number) => {\n setCurrentIndex(index);\n resetAutoAdvance();\n },\n [resetAutoAdvance]\n );\n\n // Handle keyboard navigation\n useEffect(() => {\n if (!shouldShow) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft') {\n goToPrevious();\n } else if (e.key === 'ArrowRight') {\n goToNext();\n } else if (e.key === 'Escape') {\n handleClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n \n }, [shouldShow, goToPrevious, goToNext]);\n\n // Handle CTA click\n const handleCTAClick = useCallback(() => {\n const campaign = campaigns[currentIndex];\n if (!campaign) return;\n recordClick(campaign);\n }, [campaigns, currentIndex, recordClick]);\n\n // Handle close\n const handleClose = useCallback(() => {\n campaigns.forEach((campaign) => {\n recordClose(campaign);\n });\n markAsShown();\n onClose?.();\n }, [campaigns, recordClose, markAsShown, onClose]);\n\n // Don't show if not eligible or loading\n if (!shouldShow || loading || campaigns.length === 0) {\n return null;\n }\n\n const currentCampaign = campaigns[currentIndex];\n if (!currentCampaign) return null;\n\n const variantName = currentCampaign.variant || 'large_slider_1';\n const VariantComponent = getLargePanelVariant(variantName);\n\n return (\n <Dialog.Root open={true} onOpenChange={(open) => !open && handleClose()}>\n <Dialog.Content\n style={{\n maxWidth: 550,\n padding: 0,\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <Flex\n align=\"center\"\n justify=\"between\"\n p=\"3\"\n style={{\n borderBottom: '1px solid var(--gray-a5)',\n }}\n >\n <Text size=\"2\" color=\"gray\">\n What's New in v{currentVersion}\n </Text>\n <Dialog.Close>\n <IconButton variant=\"ghost\" size=\"1\" color=\"gray\">\n <X size={16} />\n </IconButton>\n </Dialog.Close>\n </Flex>\n\n {/* Slider Content */}\n <Box style={{ position: 'relative', minHeight: 350 }}>\n <VariantComponent\n campaign={currentCampaign}\n onCTAClick={handleCTAClick}\n showIndicator={campaigns.length > 1}\n currentIndex={currentIndex}\n totalCount={campaigns.length}\n />\n\n {/* Navigation Arrows */}\n {campaigns.length > 1 && (\n <>\n <IconButton\n variant=\"soft\"\n size=\"2\"\n style={{\n position: 'absolute',\n left: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n opacity: 0.8,\n }}\n onClick={goToPrevious}\n >\n <ChevronLeft size={20} />\n </IconButton>\n <IconButton\n variant=\"soft\"\n size=\"2\"\n style={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n opacity: 0.8,\n }}\n onClick={goToNext}\n >\n <ChevronRight size={20} />\n </IconButton>\n </>\n )}\n </Box>\n\n {/* Footer with Dots */}\n {campaigns.length > 1 && (\n <Flex\n align=\"center\"\n justify=\"center\"\n gap=\"2\"\n p=\"3\"\n style={{\n borderTop: '1px solid var(--gray-a5)',\n }}\n >\n {campaigns.map((_, index) => (\n <Box\n key={index}\n onClick={() => goToSlide(index)}\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n background:\n index === currentIndex ? 'var(--accent-9)' : 'var(--gray-a6)',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n }}\n />\n ))}\n </Flex>\n )}\n\n {/* Skip All Button */}\n <Flex justify=\"center\" pb=\"3\">\n <Button variant=\"ghost\" size=\"1\" color=\"gray\" onClick={handleClose}>\n Skip All\n </Button>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\nexport default AdUpdateModal;\n","/**\n * AdBanner Component (Permanent)\n *\n * A sleek, modern advertising banner that showcases products.\n * Clean design with smooth animations and auto-rotation.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useState, useCallback, useRef } from 'react';\nimport { Box, Flex, Text, Button, Badge } from '@radix-ui/themes';\nimport { ExternalLink, Sparkles, Check } from 'lucide-react';\nimport { useCampaigns } from '../../hooks/useCampaigns';\nimport type { AdPlacement, CampaignWithProduct } from '../../types/campaigns';\n\nexport interface AdBannerProps {\n /** Ad placement (defaults to home_banner) */\n placement?: AdPlacement;\n /** Rotation interval in ms (default: 10000 = 10 seconds) */\n rotationInterval?: number;\n /** Maximum number of campaigns to fetch */\n maxCampaigns?: number;\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * AdBanner - Permanent promotional banner with rotation\n *\n * @example\n * ```tsx\n * <AdBanner />\n * <AdBanner placement=\"home_banner\" rotationInterval={5000} />\n * ```\n */\nexport function AdBanner({\n placement = 'home_banner',\n rotationInterval = 10000,\n maxCampaigns = 5,\n className,\n style,\n}: AdBannerProps) {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isAnimating, setIsAnimating] = useState(false);\n const [progress, setProgress] = useState(0);\n const trackedImpressions = useRef<Set<string>>(new Set());\n\n const {\n campaigns,\n loading,\n recordImpression,\n recordClick,\n } = useCampaigns({ placement, maxCampaigns });\n\n // Track impression for current campaign\n useEffect(() => {\n if (campaigns.length === 0) return;\n const campaign = campaigns[currentIndex];\n if (!campaign || trackedImpressions.current.has(campaign.id)) return;\n\n trackedImpressions.current.add(campaign.id);\n recordImpression(campaign);\n }, [currentIndex, campaigns, recordImpression]);\n\n // Progress bar animation\n useEffect(() => {\n if (campaigns.length <= 1) return;\n\n setProgress(0);\n const progressInterval = 50;\n const steps = rotationInterval / progressInterval;\n let currentStep = 0;\n\n const progressTimer = setInterval(() => {\n currentStep++;\n setProgress((currentStep / steps) * 100);\n\n if (currentStep >= steps) {\n setIsAnimating(true);\n setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % campaigns.length);\n setProgress(0);\n currentStep = 0;\n setTimeout(() => setIsAnimating(false), 50);\n }, 200);\n }\n }, progressInterval);\n\n return () => clearInterval(progressTimer);\n }, [campaigns.length, rotationInterval, currentIndex]);\n\n // Handle click\n const handleClick = useCallback(\n (campaign: CampaignWithProduct) => {\n recordClick(campaign);\n const targetUrl = campaign.customCtaUrl || campaign.product.url;\n window.open(targetUrl, '_blank');\n },\n [recordClick]\n );\n\n // Go to specific slide\n const goToSlide = useCallback((index: number) => {\n if (index === currentIndex) return;\n setIsAnimating(true);\n setTimeout(() => {\n setCurrentIndex(index);\n setProgress(0);\n setTimeout(() => setIsAnimating(false), 50);\n }, 200);\n }, [currentIndex]);\n\n if (loading || campaigns.length === 0) return null;\n\n const campaign = campaigns[currentIndex];\n if (!campaign) return null;\n\n const { product } = campaign;\n const displayTitle = campaign.customTitle || product.name;\n const displayTagline = campaign.customTagline || product.tagline;\n const displayCta = campaign.customCta || 'Learn More';\n const displayColor = campaign.customProductColor || product.color || '#3B82F6';\n const displayIcon = campaign.customIcon || product.icon64 || '';\n const displayFeatures = campaign.customFeatures || product.features || [];\n\n return (\n <Box\n className={className}\n style={{\n background: 'var(--color-background)',\n borderBottom: '1px solid var(--gray-a4)',\n position: 'relative',\n ...style,\n }}\n >\n {/* Colored accent bar */}\n <Box style={{ height: 3, background: displayColor }} />\n\n {/* Main content wrapper */}\n <Box\n style={{\n background: `linear-gradient(90deg, ${displayColor}08 0%, ${displayColor}12 50%, ${displayColor}08 100%)`,\n }}\n >\n {/* Label */}\n <Flex align=\"center\" justify=\"center\" gap=\"2\" py=\"2\">\n <Sparkles size={12} color={displayColor} />\n <Text\n size=\"1\"\n weight=\"medium\"\n style={{\n color: displayColor,\n fontSize: '11px',\n letterSpacing: '1.5px',\n textTransform: 'uppercase',\n }}\n >\n Discover Our Products\n </Text>\n <Sparkles size={12} color={displayColor} />\n </Flex>\n\n {/* Content */}\n <Box px=\"4\" py=\"3\">\n <Flex\n direction={{ initial: 'column', sm: 'row' }}\n align=\"center\"\n justify=\"between\"\n gap={{ initial: '3', sm: '4' }}\n style={{\n opacity: isAnimating ? 0 : 1,\n transform: isAnimating ? 'translateX(-10px)' : 'translateX(0)',\n transition: 'all 0.2s ease-out',\n }}\n >\n {/* Left: Product Info */}\n <Flex align=\"center\" gap=\"3\" style={{ flex: 1, minWidth: 0 }}>\n {/* Icon */}\n <Box\n style={{\n width: 56,\n height: 56,\n borderRadius: 12,\n background: `${displayColor}15`,\n border: `1.5px solid ${displayColor}30`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n dangerouslySetInnerHTML={{ __html: displayIcon }}\n />\n\n {/* Text */}\n <Flex direction=\"column\" gap=\"0\" style={{ minWidth: 0 }}>\n <Flex align=\"center\" gap=\"2\">\n <Text size=\"3\" weight=\"bold\">\n {displayTitle}\n </Text>\n <Badge\n size=\"1\"\n style={{\n background: `${displayColor}18`,\n color: displayColor,\n fontSize: '11px',\n fontWeight: 600,\n padding: '3px 8px',\n }}\n >\n {product.type === 'extension' ? 'Extension' : product.type === 'android' ? 'App' : 'Web'}\n </Badge>\n </Flex>\n\n <Text\n size=\"2\"\n color=\"gray\"\n style={{\n marginTop: 4,\n display: '-webkit-box',\n WebkitLineClamp: 1,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {displayTagline}\n </Text>\n\n {/* Features - Desktop */}\n <Flex gap=\"4\" mt=\"2\" display={{ initial: 'none', md: 'flex' }}>\n {displayFeatures.slice(0, 3).map((feature, i) => (\n <Flex key={i} align=\"center\" gap=\"1\">\n <Check size={12} color={displayColor} strokeWidth={3} />\n <Text size=\"2\" style={{ color: 'var(--gray-10)' }}>\n {feature}\n </Text>\n </Flex>\n ))}\n </Flex>\n </Flex>\n </Flex>\n\n {/* Right: CTA Button */}\n <Flex align=\"center\" style={{ flexShrink: 0 }}>\n <Button\n size=\"2\"\n onClick={() => handleClick(campaign)}\n style={{\n background: displayColor,\n color: 'white',\n fontWeight: 600,\n fontSize: '14px',\n padding: '0 20px',\n height: 38,\n boxShadow: `0 2px 8px ${displayColor}40`,\n }}\n >\n {displayCta}\n <ExternalLink size={14} style={{ marginLeft: 6 }} />\n </Button>\n </Flex>\n </Flex>\n </Box>\n\n {/* Progress dots with progress bar */}\n {campaigns.length > 1 && (\n <Flex justify=\"center\" align=\"center\" gap=\"2\" py=\"3\">\n {campaigns.map((c, i) => (\n <Box\n key={i}\n onClick={() => goToSlide(i)}\n style={{\n width: 40,\n height: 4,\n borderRadius: 2,\n background: 'var(--gray-a4)',\n cursor: 'pointer',\n overflow: 'hidden',\n position: 'relative',\n }}\n >\n {/* Progress fill */}\n <Box\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n width: i === currentIndex ? `${progress}%` : i < currentIndex ? '100%' : '0%',\n background: c.product?.color || displayColor,\n borderRadius: 2,\n transition: i === currentIndex ? 'none' : 'width 0.3s ease',\n }}\n />\n </Box>\n ))}\n </Flex>\n )}\n </Box>\n </Box>\n );\n}\n\nexport default AdBanner;\n","/**\n * BroadcastBanner Component\n *\n * A sleek, dismissible banner for displaying broadcast notifications.\n * Supports different notification types with appropriate styling.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport { Box, Flex, Text, Button, IconButton } from '@radix-ui/themes';\nimport {\n Info,\n CheckCircle,\n AlertTriangle,\n AlertCircle,\n X,\n ExternalLink,\n Megaphone,\n} from 'lucide-react';\nimport { isInitialized } from '../../firebase/config';\nimport type {\n BroadcastNotification,\n BroadcastBannerProps,\n NotificationType,\n} from '../../types/notifications';\n\n// ============================================================================\n// TYPE STYLING\n// ============================================================================\n\nconst TYPE_STYLES: Record<\n NotificationType,\n {\n icon: typeof Info;\n bgColor: string;\n borderColor: string;\n textColor: string;\n iconColor: string;\n }\n> = {\n info: {\n icon: Info,\n bgColor: 'var(--blue-2)',\n borderColor: 'var(--blue-6)',\n textColor: 'var(--blue-11)',\n iconColor: 'var(--blue-9)',\n },\n success: {\n icon: CheckCircle,\n bgColor: 'var(--green-2)',\n borderColor: 'var(--green-6)',\n textColor: 'var(--green-11)',\n iconColor: 'var(--green-9)',\n },\n warning: {\n icon: AlertTriangle,\n bgColor: 'var(--yellow-2)',\n borderColor: 'var(--yellow-6)',\n textColor: 'var(--yellow-11)',\n iconColor: 'var(--yellow-9)',\n },\n error: {\n icon: AlertCircle,\n bgColor: 'var(--red-2)',\n borderColor: 'var(--red-6)',\n textColor: 'var(--red-11)',\n iconColor: 'var(--red-9)',\n },\n reminder: {\n icon: AlertTriangle,\n bgColor: 'var(--orange-2)',\n borderColor: 'var(--orange-6)',\n textColor: 'var(--orange-11)',\n iconColor: 'var(--orange-9)',\n },\n milestone: {\n icon: CheckCircle,\n bgColor: 'var(--violet-2)',\n borderColor: 'var(--violet-6)',\n textColor: 'var(--violet-11)',\n iconColor: 'var(--violet-9)',\n },\n announcement: {\n icon: Megaphone,\n bgColor: 'var(--iris-2)',\n borderColor: 'var(--iris-6)',\n textColor: 'var(--iris-11)',\n iconColor: 'var(--iris-9)',\n },\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * BroadcastBanner - Dismissible notification banner\n *\n * @example\n * ```tsx\n * const { broadcasts, dismissBroadcast, trackClick } = useBannerBroadcasts();\n *\n * return (\n * <div>\n * {broadcasts.map(broadcast => (\n * <BroadcastBanner\n * key={broadcast.id}\n * broadcast={broadcast}\n * onDismiss={() => dismissBroadcast(broadcast.id)}\n * onActionClick={() => trackClick(broadcast.id)}\n * />\n * ))}\n * </div>\n * );\n * ```\n */\nexport function BroadcastBanner({\n broadcast,\n onActionClick,\n onDismiss,\n className,\n}: BroadcastBannerProps) {\n const impressionTrackedRef = useRef(false);\n\n // Track impression on mount\n useEffect(() => {\n if (!impressionTrackedRef.current) {\n impressionTrackedRef.current = true;\n // Impression tracking is handled by the hook\n }\n }, []);\n\n // Handle action click\n const handleActionClick = useCallback(() => {\n onActionClick?.();\n if (broadcast.actionUrl) {\n window.open(broadcast.actionUrl, '_blank');\n }\n }, [broadcast.actionUrl, onActionClick]);\n\n // Handle dismiss\n const handleDismiss = useCallback(() => {\n onDismiss?.();\n }, [onDismiss]);\n\n // Don't render if not initialized\n if (!isInitialized()) {\n return null;\n }\n\n const typeStyle = TYPE_STYLES[broadcast.type] || TYPE_STYLES.info;\n const Icon = typeStyle.icon;\n\n return (\n <Box\n className={className}\n style={{\n background: typeStyle.bgColor,\n borderBottom: `1px solid ${typeStyle.borderColor}`,\n position: 'relative',\n }}\n >\n {/* Accent bar */}\n <Box\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n width: 4,\n background: typeStyle.iconColor,\n }}\n />\n\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"3\"\n py=\"3\"\n px=\"4\"\n style={{ paddingLeft: 20 }}\n >\n {/* Left: Icon + Content */}\n <Flex align=\"center\" gap=\"3\" style={{ flex: 1, minWidth: 0 }}>\n <Box\n style={{\n width: 32,\n height: 32,\n borderRadius: 8,\n background: `color-mix(in srgb, ${typeStyle.iconColor} 15%, transparent)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <Icon size={18} color={typeStyle.iconColor} />\n </Box>\n\n <Flex direction=\"column\" gap=\"0\" style={{ minWidth: 0 }}>\n <Text\n size=\"2\"\n weight=\"bold\"\n style={{\n color: typeStyle.textColor,\n display: '-webkit-box',\n WebkitLineClamp: 1,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {broadcast.title}\n </Text>\n <Text\n size=\"2\"\n style={{\n color: 'var(--gray-11)',\n display: '-webkit-box',\n WebkitLineClamp: 1,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {broadcast.message}\n </Text>\n </Flex>\n </Flex>\n\n {/* Right: Action + Dismiss */}\n <Flex align=\"center\" gap=\"2\" style={{ flexShrink: 0 }}>\n {broadcast.actionUrl && (\n <Button\n size=\"1\"\n variant=\"soft\"\n onClick={handleActionClick}\n style={{\n background: `color-mix(in srgb, ${typeStyle.iconColor} 15%, transparent)`,\n color: typeStyle.iconColor,\n }}\n >\n {broadcast.actionText || 'Learn More'}\n <ExternalLink size={12} />\n </Button>\n )}\n\n {broadcast.dismissible && (\n <IconButton\n size=\"1\"\n variant=\"ghost\"\n color=\"gray\"\n onClick={handleDismiss}\n style={{ opacity: 0.7 }}\n >\n <X size={16} />\n </IconButton>\n )}\n </Flex>\n </Flex>\n </Box>\n );\n}\n\n// ============================================================================\n// MULTIPLE BANNERS COMPONENT\n// ============================================================================\n\nexport interface BroadcastBannersProps {\n /** List of broadcasts to display */\n broadcasts: BroadcastNotification[];\n /** Called when a broadcast is dismissed */\n onDismiss?: (broadcastId: string) => void;\n /** Called when action is clicked */\n onActionClick?: (broadcastId: string) => void;\n /** Maximum number of banners to show */\n maxBanners?: number;\n /** Custom CSS class */\n className?: string;\n}\n\n/**\n * BroadcastBanners - Display multiple broadcast banners stacked\n *\n * @example\n * ```tsx\n * const { broadcasts, dismissBroadcast, trackClick } = useBannerBroadcasts();\n *\n * return (\n * <BroadcastBanners\n * broadcasts={broadcasts}\n * onDismiss={dismissBroadcast}\n * onActionClick={trackClick}\n * maxBanners={3}\n * />\n * );\n * ```\n */\nexport function BroadcastBanners({\n broadcasts,\n onDismiss,\n onActionClick,\n maxBanners = 3,\n className,\n}: BroadcastBannersProps) {\n const displayBroadcasts = broadcasts.slice(0, maxBanners);\n\n if (displayBroadcasts.length === 0) {\n return null;\n }\n\n return (\n <Box className={className}>\n {displayBroadcasts.map((broadcast) => (\n <BroadcastBanner\n key={broadcast.id}\n broadcast={broadcast}\n onDismiss={() => onDismiss?.(broadcast.id)}\n onActionClick={() => onActionClick?.(broadcast.id)}\n />\n ))}\n </Box>\n );\n}\n\nexport default BroadcastBanner;\n","/**\n * AnnouncementModal Component\n *\n * A modal dialog for displaying important broadcast announcements.\n * Supports rich content with action buttons and dismissal.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport { Box, Flex, Text, Heading, Button, Dialog } from '@radix-ui/themes';\nimport {\n Info,\n CheckCircle,\n AlertTriangle,\n AlertCircle,\n X,\n ExternalLink,\n Megaphone,\n Bell,\n Sparkles,\n} from 'lucide-react';\nimport { isInitialized } from '../../firebase/config';\nimport type {\n AnnouncementModalProps,\n NotificationType,\n} from '../../types/notifications';\n\n// ============================================================================\n// TYPE STYLING\n// ============================================================================\n\nconst TYPE_CONFIG: Record<\n NotificationType,\n {\n icon: typeof Info;\n gradient: string;\n accentColor: string;\n iconBg: string;\n }\n> = {\n info: {\n icon: Info,\n gradient: 'linear-gradient(135deg, var(--blue-3) 0%, var(--blue-2) 100%)',\n accentColor: 'var(--blue-9)',\n iconBg: 'var(--blue-4)',\n },\n success: {\n icon: CheckCircle,\n gradient: 'linear-gradient(135deg, var(--green-3) 0%, var(--green-2) 100%)',\n accentColor: 'var(--green-9)',\n iconBg: 'var(--green-4)',\n },\n warning: {\n icon: AlertTriangle,\n gradient: 'linear-gradient(135deg, var(--yellow-3) 0%, var(--yellow-2) 100%)',\n accentColor: 'var(--yellow-9)',\n iconBg: 'var(--yellow-4)',\n },\n error: {\n icon: AlertCircle,\n gradient: 'linear-gradient(135deg, var(--red-3) 0%, var(--red-2) 100%)',\n accentColor: 'var(--red-9)',\n iconBg: 'var(--red-4)',\n },\n reminder: {\n icon: Bell,\n gradient: 'linear-gradient(135deg, var(--orange-3) 0%, var(--orange-2) 100%)',\n accentColor: 'var(--orange-9)',\n iconBg: 'var(--orange-4)',\n },\n milestone: {\n icon: Sparkles,\n gradient: 'linear-gradient(135deg, var(--violet-3) 0%, var(--violet-2) 100%)',\n accentColor: 'var(--violet-9)',\n iconBg: 'var(--violet-4)',\n },\n announcement: {\n icon: Megaphone,\n gradient: 'linear-gradient(135deg, var(--iris-3) 0%, var(--iris-2) 100%)',\n accentColor: 'var(--iris-9)',\n iconBg: 'var(--iris-4)',\n },\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * AnnouncementModal - Modal dialog for important announcements\n *\n * @example\n * ```tsx\n * const { broadcast, isOpen, close, handleAction } = useAnnouncementModal();\n *\n * return (\n * <AnnouncementModal\n * broadcast={broadcast}\n * isOpen={isOpen}\n * onClose={close}\n * onActionClick={handleAction}\n * />\n * );\n * ```\n */\nexport function AnnouncementModal({\n broadcast,\n isOpen,\n onClose,\n onActionClick,\n}: AnnouncementModalProps) {\n const impressionTrackedRef = useRef(false);\n\n // Track impression when modal opens\n useEffect(() => {\n if (isOpen && broadcast && !impressionTrackedRef.current) {\n impressionTrackedRef.current = true;\n // Impression tracking is handled by the hook\n }\n }, [isOpen, broadcast]);\n\n // Handle action click\n const handleActionClick = useCallback(() => {\n onActionClick?.();\n if (broadcast?.actionUrl) {\n window.open(broadcast.actionUrl, '_blank');\n }\n onClose();\n }, [broadcast, onActionClick, onClose]);\n\n // Handle close\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n // Don't render if not initialized or no broadcast\n if (!isInitialized() || !broadcast) {\n return null;\n }\n\n const typeConfig = TYPE_CONFIG[broadcast.type] || TYPE_CONFIG.announcement;\n const Icon = typeConfig.icon;\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <Dialog.Content\n style={{\n maxWidth: 480,\n padding: 0,\n overflow: 'hidden',\n }}\n >\n {/* Header with gradient background */}\n <Box\n style={{\n background: typeConfig.gradient,\n padding: 'var(--space-6)',\n position: 'relative',\n }}\n >\n {/* Close button */}\n {broadcast.dismissible && (\n <Box\n style={{\n position: 'absolute',\n top: 'var(--space-3)',\n right: 'var(--space-3)',\n }}\n >\n <Dialog.Close>\n <Button variant=\"ghost\" size=\"1\" color=\"gray\">\n <X size={18} />\n </Button>\n </Dialog.Close>\n </Box>\n )}\n\n {/* Icon */}\n <Flex direction=\"column\" align=\"center\" gap=\"4\">\n <Box\n style={{\n width: 72,\n height: 72,\n borderRadius: 'var(--radius-4)',\n background: typeConfig.iconBg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n }}\n >\n <Icon size={36} color={typeConfig.accentColor} />\n </Box>\n\n {/* Title */}\n <Heading\n size=\"5\"\n weight=\"bold\"\n align=\"center\"\n style={{ color: 'var(--gray-12)' }}\n >\n {broadcast.title}\n </Heading>\n </Flex>\n </Box>\n\n {/* Content */}\n <Box p=\"5\">\n <Text\n as=\"p\"\n size=\"3\"\n align=\"center\"\n style={{\n color: 'var(--gray-11)',\n lineHeight: 1.6,\n }}\n >\n {broadcast.message}\n </Text>\n\n {/* Important badge */}\n {broadcast.isImportant && (\n <Flex justify=\"center\" mt=\"4\">\n <Box\n style={{\n padding: 'var(--space-1) var(--space-3)',\n borderRadius: 'var(--radius-2)',\n background: typeConfig.iconBg,\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--space-1)',\n }}\n >\n <Sparkles size={12} color={typeConfig.accentColor} />\n <Text size=\"1\" weight=\"medium\" style={{ color: typeConfig.accentColor }}>\n Important\n </Text>\n </Box>\n </Flex>\n )}\n </Box>\n\n {/* Actions */}\n <Flex\n gap=\"3\"\n p=\"4\"\n justify=\"center\"\n style={{\n borderTop: '1px solid var(--gray-4)',\n background: 'var(--gray-2)',\n }}\n >\n {broadcast.actionUrl ? (\n <>\n <Dialog.Close>\n <Button variant=\"soft\" color=\"gray\" size=\"2\">\n Maybe Later\n </Button>\n </Dialog.Close>\n <Button\n size=\"2\"\n onClick={handleActionClick}\n style={{\n background: typeConfig.accentColor,\n }}\n >\n {broadcast.actionText || 'Learn More'}\n <ExternalLink size={14} />\n </Button>\n </>\n ) : (\n <Dialog.Close>\n <Button\n size=\"2\"\n style={{\n background: typeConfig.accentColor,\n minWidth: 120,\n }}\n >\n Got It\n </Button>\n </Dialog.Close>\n )}\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\nexport default AnnouncementModal;\n","/**\n * Common Features Components\n *\n * Reusable UI components for displaying common features.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport React from 'react';\nimport { Box, Text, Flex, Link, Card, Avatar, Badge, Grid, Separator } from '@radix-ui/themes';\nimport {\n Mail,\n Phone,\n MessageCircle,\n MapPin,\n Globe,\n Github,\n Linkedin,\n Twitter,\n ExternalLink,\n Star,\n Briefcase,\n Code,\n} from 'lucide-react';\nimport {\n useContactInfo,\n useDeveloperInfo,\n useSocialLinks,\n useAddressInfo,\n useSkills,\n useTestimonials,\n useServices,\n useProjects,\n} from '../../hooks/useCommonFeatures';\nimport type {\n ContactInfo,\n DeveloperInfo,\n SocialLink,\n AddressInfo,\n Skill,\n Testimonial,\n Service,\n Project,\n SocialPlatform,\n} from '../../types/commonFeatures';\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst socialIcons: Record<SocialPlatform, React.ReactNode> = {\n github: <Github size={18} />,\n linkedin: <Linkedin size={18} />,\n twitter: <Twitter size={18} />,\n facebook: <Globe size={18} />,\n instagram: <Globe size={18} />,\n youtube: <Globe size={18} />,\n tiktok: <Globe size={18} />,\n discord: <MessageCircle size={18} />,\n telegram: <MessageCircle size={18} />,\n whatsapp: <MessageCircle size={18} />,\n medium: <Globe size={18} />,\n devto: <Code size={18} />,\n stackoverflow: <Code size={18} />,\n dribbble: <Globe size={18} />,\n behance: <Globe size={18} />,\n codepen: <Code size={18} />,\n npm: <Code size={18} />,\n website: <Globe size={18} />,\n email: <Mail size={18} />,\n other: <ExternalLink size={18} />,\n};\n\n// ============================================================================\n// CONTACT CARD\n// ============================================================================\n\ninterface ContactCardProps {\n data?: ContactInfo | null;\n compact?: boolean;\n showFreelance?: boolean;\n}\n\nexport function ContactCard({ data: propData, compact = false, showFreelance = true }: ContactCardProps) {\n const { data: hookData, loading } = useContactInfo({ autoFetch: !propData });\n const data = propData ?? hookData;\n\n if (loading) return <ContactCardSkeleton />;\n if (!data) return null;\n\n return (\n <Card size={compact ? '1' : '2'}>\n <Flex direction=\"column\" gap=\"3\">\n <Text size=\"3\" weight=\"bold\">Contact</Text>\n\n {showFreelance && data.freelanceAvailable && (\n <Badge color=\"green\" size=\"1\">Available for Freelance</Badge>\n )}\n\n <Flex direction=\"column\" gap=\"2\">\n {data.email && (\n <Link href={`mailto:${data.email}`} size=\"2\">\n <Flex align=\"center\" gap=\"2\">\n <Mail size={16} />\n <Text>{data.email}</Text>\n </Flex>\n </Link>\n )}\n\n {data.phone && (\n <Link href={`tel:${data.phone}`} size=\"2\">\n <Flex align=\"center\" gap=\"2\">\n <Phone size={16} />\n <Text>{data.phone}</Text>\n </Flex>\n </Link>\n )}\n\n {data.whatsapp && (\n <Link href={`https://wa.me/${data.whatsapp.replace(/\\D/g, '')}`} target=\"_blank\" size=\"2\">\n <Flex align=\"center\" gap=\"2\">\n <MessageCircle size={16} />\n <Text>WhatsApp</Text>\n </Flex>\n </Link>\n )}\n </Flex>\n\n {!compact && data.workingHours && (\n <>\n <Separator size=\"4\" />\n <Text size=\"1\" color=\"gray\">{data.workingHours}</Text>\n </>\n )}\n </Flex>\n </Card>\n );\n}\n\nfunction ContactCardSkeleton() {\n return (\n <Card>\n <Flex direction=\"column\" gap=\"3\">\n <Box style={{ height: 20, width: 80, background: 'var(--gray-4)', borderRadius: 4 }} />\n <Box style={{ height: 16, width: 180, background: 'var(--gray-3)', borderRadius: 4 }} />\n <Box style={{ height: 16, width: 120, background: 'var(--gray-3)', borderRadius: 4 }} />\n </Flex>\n </Card>\n );\n}\n\n// ============================================================================\n// DEVELOPER CARD\n// ============================================================================\n\ninterface DeveloperCardProps {\n data?: DeveloperInfo | null;\n compact?: boolean;\n showBio?: boolean;\n}\n\nexport function DeveloperCard({ data: propData, compact = false, showBio = true }: DeveloperCardProps) {\n const { data: hookData, loading } = useDeveloperInfo({ autoFetch: !propData });\n const data = propData ?? hookData;\n\n if (loading) return <DeveloperCardSkeleton />;\n if (!data) return null;\n\n return (\n <Card size={compact ? '1' : '2'}>\n <Flex direction=\"column\" gap=\"3\">\n <Flex align=\"center\" gap=\"3\">\n {data.avatar && (\n <Avatar src={data.avatar} fallback={data.name?.[0] || '?'} size=\"4\" radius=\"full\" />\n )}\n <Box>\n <Text size=\"4\" weight=\"bold\">{data.name}</Text>\n <Text size=\"2\" color=\"gray\">{data.title}</Text>\n </Box>\n </Flex>\n\n {data.availableForHire && (\n <Badge color=\"green\" size=\"1\">Available for Hire</Badge>\n )}\n\n {showBio && !compact && data.bio && (\n <Text size=\"2\" color=\"gray\">{data.shortBio || data.bio}</Text>\n )}\n\n <Flex gap=\"2\" wrap=\"wrap\">\n {data.website && (\n <Link href={data.website} target=\"_blank\" size=\"1\">\n <Flex align=\"center\" gap=\"1\">\n <Globe size={14} />\n Website\n </Flex>\n </Link>\n )}\n {data.github && (\n <Link href={data.github} target=\"_blank\" size=\"1\">\n <Flex align=\"center\" gap=\"1\">\n <Github size={14} />\n GitHub\n </Flex>\n </Link>\n )}\n {data.linkedin && (\n <Link href={data.linkedin} target=\"_blank\" size=\"1\">\n <Flex align=\"center\" gap=\"1\">\n <Linkedin size={14} />\n LinkedIn\n </Flex>\n </Link>\n )}\n </Flex>\n </Flex>\n </Card>\n );\n}\n\nfunction DeveloperCardSkeleton() {\n return (\n <Card>\n <Flex align=\"center\" gap=\"3\">\n <Box style={{ height: 48, width: 48, background: 'var(--gray-4)', borderRadius: '50%' }} />\n <Box>\n <Box style={{ height: 20, width: 120, background: 'var(--gray-4)', borderRadius: 4, marginBottom: 4 }} />\n <Box style={{ height: 16, width: 80, background: 'var(--gray-3)', borderRadius: 4 }} />\n </Box>\n </Flex>\n </Card>\n );\n}\n\n// ============================================================================\n// SOCIAL LINKS BAR\n// ============================================================================\n\ninterface SocialLinksBarProps {\n data?: SocialLink[];\n showIn?: ('footer' | 'contact' | 'about' | 'header')[];\n gap?: '1' | '2' | '3' | '4';\n}\n\nexport function SocialLinksBar({ data: propData, showIn, gap = '3' }: SocialLinksBarProps) {\n const { data: hookData, loading } = useSocialLinks({ autoFetch: !propData, showIn });\n const data = propData ?? hookData;\n\n if (loading || data.length === 0) return null;\n\n return (\n <Flex gap={gap} align=\"center\" wrap=\"wrap\">\n {data.map((link) => (\n <Link\n key={link.id}\n href={link.url}\n target=\"_blank\"\n title={link.displayName || link.platform}\n style={{ color: 'inherit' }}\n >\n {socialIcons[link.platform]}\n </Link>\n ))}\n </Flex>\n );\n}\n\n// ============================================================================\n// ADDRESS CARD\n// ============================================================================\n\ninterface AddressCardProps {\n data?: AddressInfo | null;\n compact?: boolean;\n}\n\nexport function AddressCard({ data: propData, compact = false }: AddressCardProps) {\n const { data: hookData, loading } = useAddressInfo({ autoFetch: !propData });\n const data = propData ?? hookData;\n\n if (loading || !data) return null;\n\n const address = data.fullAddress || [data.streetAddress, data.city, data.state, data.country].filter(Boolean).join(', ');\n\n return (\n <Card size={compact ? '1' : '2'}>\n <Flex align=\"start\" gap=\"2\">\n <MapPin size={18} style={{ flexShrink: 0, marginTop: 2 }} />\n <Box>\n {data.label && <Text size=\"2\" weight=\"bold\">{data.label}</Text>}\n <Text size=\"2\" color=\"gray\">{address}</Text>\n {data.googleMapsUrl && (\n <Link href={data.googleMapsUrl} target=\"_blank\" size=\"1\">\n View on Maps\n </Link>\n )}\n </Box>\n </Flex>\n </Card>\n );\n}\n\n// ============================================================================\n// SKILLS DISPLAY\n// ============================================================================\n\ninterface SkillsDisplayProps {\n data?: Skill[];\n featuredOnly?: boolean;\n showLevel?: boolean;\n maxItems?: number;\n}\n\nexport function SkillsDisplay({ data: propData, featuredOnly = false, showLevel = true, maxItems }: SkillsDisplayProps) {\n const { data: hookData, loading } = useSkills({ autoFetch: !propData, featuredOnly });\n let data = propData ?? hookData;\n\n if (maxItems && data.length > maxItems) {\n data = data.slice(0, maxItems);\n }\n\n if (loading || data.length === 0) return null;\n\n const levelColors: Record<string, 'gray' | 'blue' | 'green' | 'orange'> = {\n beginner: 'gray',\n intermediate: 'blue',\n advanced: 'green',\n expert: 'orange',\n };\n\n return (\n <Flex gap=\"2\" wrap=\"wrap\">\n {data.map((skill) => (\n <Badge key={skill.id} color={showLevel ? levelColors[skill.level] : undefined} size=\"2\">\n {skill.name}\n </Badge>\n ))}\n </Flex>\n );\n}\n\n// ============================================================================\n// TESTIMONIALS CAROUSEL (Simple Grid)\n// ============================================================================\n\ninterface TestimonialsGridProps {\n data?: Testimonial[];\n featuredOnly?: boolean;\n maxItems?: number;\n columns?: '1' | '2' | '3';\n}\n\nexport function TestimonialsGrid({ data: propData, featuredOnly = false, maxItems, columns = '2' }: TestimonialsGridProps) {\n const { data: hookData, loading } = useTestimonials({ autoFetch: !propData, featuredOnly, limit: maxItems });\n const data = propData ?? hookData;\n\n if (loading || data.length === 0) return null;\n\n return (\n <Grid columns={columns} gap=\"4\">\n {data.map((testimonial) => (\n <Card key={testimonial.id}>\n <Flex direction=\"column\" gap=\"3\">\n {testimonial.rating && (\n <Flex gap=\"1\">\n {Array.from({ length: testimonial.rating }).map((_, i) => (\n <Star key={i} size={14} fill=\"var(--amber-9)\" color=\"var(--amber-9)\" />\n ))}\n </Flex>\n )}\n\n <Text size=\"2\" style={{ fontStyle: 'italic' }}>\n \"{testimonial.shortContent || testimonial.content}\"\n </Text>\n\n <Flex align=\"center\" gap=\"2\">\n {testimonial.authorAvatar && (\n <Avatar src={testimonial.authorAvatar} fallback={testimonial.authorName?.[0] || '?'} size=\"2\" radius=\"full\" />\n )}\n <Box>\n <Text size=\"2\" weight=\"bold\">{testimonial.authorName}</Text>\n {(testimonial.authorTitle || testimonial.authorCompany) && (\n <Text size=\"1\" color=\"gray\">\n {[testimonial.authorTitle, testimonial.authorCompany].filter(Boolean).join(' at ')}\n </Text>\n )}\n </Box>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Grid>\n );\n}\n\n// ============================================================================\n// SERVICES GRID\n// ============================================================================\n\ninterface ServicesGridProps {\n data?: Service[];\n featuredOnly?: boolean;\n maxItems?: number;\n columns?: '1' | '2' | '3';\n}\n\nexport function ServicesGrid({ data: propData, featuredOnly = false, maxItems, columns = '3' }: ServicesGridProps) {\n const { data: hookData, loading } = useServices({ autoFetch: !propData, featuredOnly });\n let data = propData ?? hookData;\n\n if (maxItems && data.length > maxItems) {\n data = data.slice(0, maxItems);\n }\n\n if (loading || data.length === 0) return null;\n\n return (\n <Grid columns={columns} gap=\"4\">\n {data.map((service) => (\n <Card key={service.id}>\n <Flex direction=\"column\" gap=\"2\">\n <Flex align=\"center\" gap=\"2\">\n <Briefcase size={18} />\n <Text size=\"3\" weight=\"bold\">{service.title}</Text>\n </Flex>\n\n <Text size=\"2\" color=\"gray\">\n {service.shortDescription || service.description}\n </Text>\n\n {service.technologies && service.technologies.length > 0 && (\n <Flex gap=\"1\" wrap=\"wrap\">\n {service.technologies.slice(0, 5).map((tech, i) => (\n <Badge key={i} size=\"1\" color=\"gray\">{tech}</Badge>\n ))}\n </Flex>\n )}\n </Flex>\n </Card>\n ))}\n </Grid>\n );\n}\n\n// ============================================================================\n// PROJECTS GRID\n// ============================================================================\n\ninterface ProjectsGridProps {\n data?: Project[];\n featuredOnly?: boolean;\n maxItems?: number;\n columns?: '1' | '2' | '3';\n}\n\nexport function ProjectsGrid({ data: propData, featuredOnly = false, maxItems, columns = '3' }: ProjectsGridProps) {\n const { data: hookData, loading } = useProjects({ autoFetch: !propData, featuredOnly });\n let data = propData ?? hookData;\n\n if (maxItems && data.length > maxItems) {\n data = data.slice(0, maxItems);\n }\n\n if (loading || data.length === 0) return null;\n\n return (\n <Grid columns={columns} gap=\"4\">\n {data.map((project) => (\n <Card key={project.id}>\n <Flex direction=\"column\" gap=\"2\">\n {project.thumbnailUrl && (\n <Box\n style={{\n height: 140,\n borderRadius: 'var(--radius-2)',\n overflow: 'hidden',\n marginBottom: 'var(--space-2)',\n }}\n >\n <img\n src={project.thumbnailUrl}\n alt={project.title}\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n </Box>\n )}\n\n <Flex align=\"center\" gap=\"2\">\n <Code size={18} />\n <Text size=\"3\" weight=\"bold\">{project.title}</Text>\n </Flex>\n\n <Text size=\"2\" color=\"gray\">\n {project.shortDescription || project.description}\n </Text>\n\n {project.technologies && project.technologies.length > 0 && (\n <Flex gap=\"1\" wrap=\"wrap\">\n {project.technologies.slice(0, 5).map((tech, i) => (\n <Badge key={i} size=\"1\" color=\"gray\">{tech}</Badge>\n ))}\n </Flex>\n )}\n\n {project.links && project.links.length > 0 && (\n <Flex gap=\"2\" mt=\"2\">\n {project.links.map((link, i) => (\n <Link key={i} href={link.url} target=\"_blank\" size=\"1\">\n {link.label || link.type}\n </Link>\n ))}\n </Flex>\n )}\n </Flex>\n </Card>\n ))}\n </Grid>\n );\n}\n\n// ============================================================================\n// COMBINED FOOTER SECTION\n// ============================================================================\n\ninterface FooterSectionProps {\n showContact?: boolean;\n showSocialLinks?: boolean;\n showAddress?: boolean;\n}\n\nexport function FooterSection({ showContact = true, showSocialLinks = true, showAddress = false }: FooterSectionProps) {\n return (\n <Flex direction=\"column\" gap=\"4\" align=\"center\">\n {showSocialLinks && <SocialLinksBar showIn={['footer']} />}\n\n <Flex gap=\"4\" wrap=\"wrap\" justify=\"center\">\n {showContact && <ContactCard compact />}\n {showAddress && <AddressCard compact />}\n </Flex>\n </Flex>\n );\n}\n"],"names":["useCampaign","useRef","useEffect","jsxs","Box","jsx","IconButton","Cross2Icon","Flex","Text","Button","getDisplayValues","Card","Link","ExternalLink","X","Badge","Check","Sparkles","useCallback","useState","useOneTimeAdModal","isInitialized","getConfig","Dialog","Gift","Heading","Checkbox","Grid","Quote","Play","useUpdateAdModal","useCampaigns","Fragment","ChevronLeft","ChevronRight","campaign","Info","CheckCircle","AlertTriangle","AlertCircle","Megaphone","Bell","Github","Linkedin","Twitter","Globe","MessageCircle","Code","Mail","useContactInfo","Phone","Separator","useDeveloperInfo","Avatar","useSocialLinks","useAddressInfo","MapPin","useSkills","useTestimonials","Star","useServices","Briefcase"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,34 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
3
|
+
const commonFeatures$1 = require("./commonFeatures-ofZOjnZ0.cjs");
|
|
4
4
|
const types_index = require("./types/index.cjs");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
5
|
+
const commonFeatures = require("./commonFeatures-DhWaBEv_.cjs");
|
|
6
|
+
const broadcasts = require("./broadcasts-6w_9X92Z.cjs");
|
|
7
|
+
const adminNotifications = require("./admin-notifications-CLzQc8zF.cjs");
|
|
8
|
+
const useCommonFeatures = require("./useCommonFeatures-0EU_VRqi.cjs");
|
|
9
|
+
const useFeatureFlags = require("./useFeatureFlags-DRR1r3rt.cjs");
|
|
10
|
+
const index = require("./index-DB40ObYe.cjs");
|
|
10
11
|
const useNotificationEvents = require("./useNotificationEvents-BXeMqdak.cjs");
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
16
|
-
exports.
|
|
17
|
-
exports.
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
20
|
-
exports.
|
|
21
|
-
exports.
|
|
22
|
-
exports.
|
|
23
|
-
exports.
|
|
24
|
-
exports.
|
|
25
|
-
exports.
|
|
26
|
-
exports.
|
|
27
|
-
exports.
|
|
28
|
-
exports.
|
|
29
|
-
exports.
|
|
30
|
-
exports.
|
|
31
|
-
exports.
|
|
12
|
+
exports.checkFeatureAvailability = commonFeatures$1.checkFeatureAvailability;
|
|
13
|
+
exports.clearAddressInfoCache = commonFeatures$1.clearAddressInfoCache;
|
|
14
|
+
exports.clearAllCommonFeaturesCache = commonFeatures$1.clearAllCommonFeaturesCache;
|
|
15
|
+
exports.clearCampaignsCache = commonFeatures$1.clearCampaignsCache;
|
|
16
|
+
exports.clearContactInfoCache = commonFeatures$1.clearContactInfoCache;
|
|
17
|
+
exports.clearDeveloperInfoCache = commonFeatures$1.clearDeveloperInfoCache;
|
|
18
|
+
exports.clearFeatureFlagsCache = commonFeatures$1.clearFeatureFlagsCache;
|
|
19
|
+
exports.clearPaymentOptionsCache = commonFeatures$1.clearPaymentOptionsCache;
|
|
20
|
+
exports.clearProductsCache = commonFeatures$1.clearProductsCache;
|
|
21
|
+
exports.clearServicesCache = commonFeatures$1.clearServicesCache;
|
|
22
|
+
exports.clearSkillsCache = commonFeatures$1.clearSkillsCache;
|
|
23
|
+
exports.clearSocialLinksCache = commonFeatures$1.clearSocialLinksCache;
|
|
24
|
+
exports.clearTestimonialsCache = commonFeatures$1.clearTestimonialsCache;
|
|
25
|
+
exports.fetchActiveCampaigns = commonFeatures$1.fetchActiveCampaigns;
|
|
26
|
+
exports.fetchAddressInfo = commonFeatures$1.fetchAddressInfo;
|
|
27
|
+
exports.fetchCampaigns = commonFeatures$1.fetchCampaigns;
|
|
28
|
+
exports.fetchContactInfo = commonFeatures$1.fetchContactInfo;
|
|
29
|
+
exports.fetchDeveloperInfo = commonFeatures$1.fetchDeveloperInfo;
|
|
30
|
+
exports.fetchFeatureFlags = commonFeatures$1.fetchFeatureFlags;
|
|
31
|
+
exports.fetchPaymentOptions = commonFeatures$1.fetchPaymentOptions;
|
|
32
|
+
exports.fetchProducts = commonFeatures$1.fetchProducts;
|
|
33
|
+
exports.fetchServices = commonFeatures$1.fetchServices;
|
|
34
|
+
exports.fetchSkills = commonFeatures$1.fetchSkills;
|
|
35
|
+
exports.fetchSocialLinks = commonFeatures$1.fetchSocialLinks;
|
|
36
|
+
exports.fetchTestimonials = commonFeatures$1.fetchTestimonials;
|
|
37
|
+
exports.getCampaignById = commonFeatures$1.getCampaignById;
|
|
38
|
+
exports.getCampaignHistory = commonFeatures$1.getCampaignHistory;
|
|
39
|
+
exports.getConfig = commonFeatures$1.getConfig;
|
|
40
|
+
exports.getDeviceId = commonFeatures$1.getDeviceId;
|
|
41
|
+
exports.getEligibleCampaignIds = commonFeatures$1.getEligibleCampaignIds;
|
|
42
|
+
exports.getFeatureVersion = commonFeatures$1.getFeatureVersion;
|
|
43
|
+
exports.getProductById = commonFeatures$1.getProductById;
|
|
44
|
+
exports.getSharedFeaturesApp = commonFeatures$1.getSharedFeaturesApp;
|
|
45
|
+
exports.getSharedFeaturesAuth = commonFeatures$1.getSharedFeaturesAuth;
|
|
46
|
+
exports.getSharedFeaturesDb = commonFeatures$1.getSharedFeaturesDb;
|
|
47
|
+
exports.getSharedFeaturesStatus = commonFeatures$1.getSharedFeaturesStatus;
|
|
48
|
+
exports.initSharedFeatures = commonFeatures$1.initSharedFeatures;
|
|
49
|
+
exports.initializeFeatureFlags = commonFeatures$1.initializeFeatureFlags;
|
|
50
|
+
exports.isEligibleForCampaign = commonFeatures$1.isEligibleForCampaign;
|
|
51
|
+
exports.isFeatureEnabled = commonFeatures$1.isFeatureEnabled;
|
|
52
|
+
exports.isInitialized = commonFeatures$1.isInitialized;
|
|
53
|
+
exports.recordImpression = commonFeatures$1.recordImpression;
|
|
54
|
+
exports.subscribeToContactInfo = commonFeatures$1.subscribeToContactInfo;
|
|
55
|
+
exports.subscribeToDeveloperInfo = commonFeatures$1.subscribeToDeveloperInfo;
|
|
56
|
+
exports.subscribeToFeatureFlags = commonFeatures$1.subscribeToFeatureFlags;
|
|
57
|
+
exports.trackClick = commonFeatures$1.trackClick;
|
|
58
|
+
exports.trackClose = commonFeatures$1.trackClose;
|
|
59
|
+
exports.trackImpression = commonFeatures$1.trackImpression;
|
|
60
|
+
exports.updateFeatureConfig = commonFeatures$1.updateFeatureConfig;
|
|
61
|
+
exports.updateGlobalFlags = commonFeatures$1.updateGlobalFlags;
|
|
32
62
|
exports.CATEGORY_DESCRIPTIONS = types_index.CATEGORY_DESCRIPTIONS;
|
|
33
63
|
exports.CATEGORY_NAMES = types_index.CATEGORY_NAMES;
|
|
34
64
|
exports.COLLECTIONS = types_index.COLLECTIONS;
|
|
@@ -46,6 +76,22 @@ exports.PRIORITY_NAMES = types_index.PRIORITY_NAMES;
|
|
|
46
76
|
exports.TYPE_NAMES = types_index.TYPE_NAMES;
|
|
47
77
|
exports.VARIANT_NAMES = types_index.VARIANT_NAMES;
|
|
48
78
|
exports.getNotificationCollections = types_index.getNotificationCollections;
|
|
79
|
+
exports.COLLECTION_FEATURE_FLAGS = commonFeatures.COLLECTION_FEATURE_FLAGS;
|
|
80
|
+
exports.COMMON_FEATURE_COLLECTIONS = commonFeatures.COMMON_FEATURE_COLLECTIONS;
|
|
81
|
+
exports.DEFAULT_ADDRESS_INFO = commonFeatures.DEFAULT_ADDRESS_INFO;
|
|
82
|
+
exports.DEFAULT_CONTACT_INFO = commonFeatures.DEFAULT_CONTACT_INFO;
|
|
83
|
+
exports.DEFAULT_DEVELOPER_INFO = commonFeatures.DEFAULT_DEVELOPER_INFO;
|
|
84
|
+
exports.DEFAULT_FEATURE_CONFIG = commonFeatures.DEFAULT_FEATURE_CONFIG;
|
|
85
|
+
exports.DEFAULT_FEATURE_FLAGS = commonFeatures.DEFAULT_FEATURE_FLAGS;
|
|
86
|
+
exports.FEATURE_FLAGS_DOC_ID = commonFeatures.FEATURE_FLAGS_DOC_ID;
|
|
87
|
+
exports.FEATURE_NAMES = commonFeatures.FEATURE_NAMES;
|
|
88
|
+
exports.PAYMENT_TYPE_NAMES = commonFeatures.PAYMENT_TYPE_NAMES;
|
|
89
|
+
exports.PROJECT_CATEGORY_NAMES = commonFeatures.PROJECT_CATEGORY_NAMES;
|
|
90
|
+
exports.PROJECT_STATUS_NAMES = commonFeatures.PROJECT_STATUS_NAMES;
|
|
91
|
+
exports.SERVICE_CATEGORY_NAMES = commonFeatures.SERVICE_CATEGORY_NAMES;
|
|
92
|
+
exports.SKILL_CATEGORY_NAMES = commonFeatures.SKILL_CATEGORY_NAMES;
|
|
93
|
+
exports.SKILL_LEVEL_NAMES = commonFeatures.SKILL_LEVEL_NAMES;
|
|
94
|
+
exports.SOCIAL_PLATFORM_NAMES = commonFeatures.SOCIAL_PLATFORM_NAMES;
|
|
49
95
|
exports.clearBroadcastsCache = broadcasts.clearBroadcastsCache;
|
|
50
96
|
exports.clearDismissedBroadcasts = broadcasts.clearDismissedBroadcasts;
|
|
51
97
|
exports.dismissBroadcast = broadcasts.dismissBroadcast;
|
|
@@ -77,39 +123,60 @@ exports.publishBroadcast = adminNotifications.publishBroadcast;
|
|
|
77
123
|
exports.scheduleBroadcast = adminNotifications.scheduleBroadcast;
|
|
78
124
|
exports.updateBroadcast = adminNotifications.updateBroadcast;
|
|
79
125
|
exports.updateTemplate = adminNotifications.updateTemplate;
|
|
80
|
-
exports.
|
|
81
|
-
exports.
|
|
82
|
-
exports.
|
|
83
|
-
exports.
|
|
84
|
-
exports.
|
|
85
|
-
exports.
|
|
86
|
-
exports.
|
|
87
|
-
exports.
|
|
88
|
-
exports.
|
|
89
|
-
exports.
|
|
90
|
-
exports.
|
|
91
|
-
exports.
|
|
92
|
-
exports.
|
|
93
|
-
exports.
|
|
94
|
-
exports.
|
|
95
|
-
exports.
|
|
96
|
-
exports.
|
|
97
|
-
exports.
|
|
98
|
-
exports.
|
|
99
|
-
exports.
|
|
100
|
-
exports.
|
|
101
|
-
exports.
|
|
102
|
-
exports.
|
|
103
|
-
exports.
|
|
104
|
-
exports.
|
|
105
|
-
exports.
|
|
106
|
-
exports.
|
|
107
|
-
exports.
|
|
108
|
-
exports.
|
|
109
|
-
exports.
|
|
110
|
-
exports.
|
|
111
|
-
exports.
|
|
112
|
-
exports.
|
|
126
|
+
exports.useAddressInfo = useCommonFeatures.useAddressInfo;
|
|
127
|
+
exports.useCampaign = useCommonFeatures.useCampaign;
|
|
128
|
+
exports.useCampaigns = useCommonFeatures.useCampaigns;
|
|
129
|
+
exports.useContactInfo = useCommonFeatures.useContactInfo;
|
|
130
|
+
exports.useDeveloperInfo = useCommonFeatures.useDeveloperInfo;
|
|
131
|
+
exports.useOneTimeAdModal = useCommonFeatures.useOneTimeAdModal;
|
|
132
|
+
exports.usePaymentOptions = useCommonFeatures.usePaymentOptions;
|
|
133
|
+
exports.useServices = useCommonFeatures.useServices;
|
|
134
|
+
exports.useSkills = useCommonFeatures.useSkills;
|
|
135
|
+
exports.useSocialLinks = useCommonFeatures.useSocialLinks;
|
|
136
|
+
exports.useTestimonials = useCommonFeatures.useTestimonials;
|
|
137
|
+
exports.useUpdateAdModal = useCommonFeatures.useUpdateAdModal;
|
|
138
|
+
exports.useAnnouncementModal = useFeatureFlags.useAnnouncementModal;
|
|
139
|
+
exports.useBannerBroadcasts = useFeatureFlags.useBannerBroadcasts;
|
|
140
|
+
exports.useBellBroadcasts = useFeatureFlags.useBellBroadcasts;
|
|
141
|
+
exports.useBroadcasts = useFeatureFlags.useBroadcasts;
|
|
142
|
+
exports.useFeature = useFeatureFlags.useFeature;
|
|
143
|
+
exports.useFeatureFlags = useFeatureFlags.useFeatureFlags;
|
|
144
|
+
exports.useFeatureFlagsSubscription = useFeatureFlags.useFeatureFlagsSubscription;
|
|
145
|
+
exports.useFeatureGate = useFeatureFlags.useFeatureGate;
|
|
146
|
+
exports.useModalBroadcasts = useFeatureFlags.useModalBroadcasts;
|
|
147
|
+
exports.useSharedFeaturesOperational = useFeatureFlags.useSharedFeaturesOperational;
|
|
148
|
+
exports.useSingleBroadcast = useFeatureFlags.useSingleBroadcast;
|
|
149
|
+
exports.useToastBroadcasts = useFeatureFlags.useToastBroadcasts;
|
|
150
|
+
exports.AdBanner = index.AdBanner;
|
|
151
|
+
exports.AdModal = index.AdModal;
|
|
152
|
+
exports.AdPanel = index.AdPanel;
|
|
153
|
+
exports.AdSlider = index.AdSlider;
|
|
154
|
+
exports.AdUpdateModal = index.AdUpdateModal;
|
|
155
|
+
exports.AddressCard = index.AddressCard;
|
|
156
|
+
exports.AnnouncementModal = index.AnnouncementModal;
|
|
157
|
+
exports.BroadcastBanner = index.BroadcastBanner;
|
|
158
|
+
exports.BroadcastBanners = index.BroadcastBanners;
|
|
159
|
+
exports.CardVariant = index.CardVariant;
|
|
160
|
+
exports.ComparisonVariant = index.ComparisonVariant;
|
|
161
|
+
exports.ContactCard = index.ContactCard;
|
|
162
|
+
exports.DeveloperCard = index.DeveloperCard;
|
|
163
|
+
exports.FeatureGridVariant = index.FeatureGridVariant;
|
|
164
|
+
exports.FeaturesVariant = index.FeaturesVariant;
|
|
165
|
+
exports.FooterSection = index.FooterSection;
|
|
166
|
+
exports.GradientVariant = index.GradientVariant;
|
|
167
|
+
exports.HeroVariant = index.HeroVariant;
|
|
168
|
+
exports.LARGE_PANEL_VARIANTS = index.LARGE_PANEL_VARIANTS;
|
|
169
|
+
exports.MinimalVariant = index.MinimalVariant;
|
|
170
|
+
exports.SMALL_PANEL_VARIANTS = index.SMALL_PANEL_VARIANTS;
|
|
171
|
+
exports.ServicesGrid = index.ServicesGrid;
|
|
172
|
+
exports.SkillsDisplay = index.SkillsDisplay;
|
|
173
|
+
exports.SocialLinksBar = index.SocialLinksBar;
|
|
174
|
+
exports.TaglineVariant = index.TaglineVariant;
|
|
175
|
+
exports.TestimonialVariant = index.TestimonialVariant;
|
|
176
|
+
exports.TestimonialsGrid = index.TestimonialsGrid;
|
|
177
|
+
exports.VideoVariant = index.VideoVariant;
|
|
178
|
+
exports.getLargePanelVariant = index.getLargePanelVariant;
|
|
179
|
+
exports.getSmallPanelVariant = index.getSmallPanelVariant;
|
|
113
180
|
exports.ACCOUNT_TEMPLATES = useNotificationEvents.ACCOUNT_TEMPLATES;
|
|
114
181
|
exports.ACTIVITY_TEMPLATES = useNotificationEvents.ACTIVITY_TEMPLATES;
|
|
115
182
|
exports.ALL_STANDARD_TEMPLATES = useNotificationEvents.ALL_STANDARD_TEMPLATES;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|