shared-features 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{admin-commonFeatures-BKjytwx5.js → admin-commonFeatures-CFhvjgp9.js} +3 -3
- package/dist/{admin-commonFeatures-BKjytwx5.js.map → admin-commonFeatures-CFhvjgp9.js.map} +1 -1
- package/dist/{admin-commonFeatures-bjszYcI3.cjs → admin-commonFeatures-pnaXeix_.cjs} +3 -3
- package/dist/{admin-commonFeatures-bjszYcI3.cjs.map → admin-commonFeatures-pnaXeix_.cjs.map} +1 -1
- package/dist/{broadcasts-BeTm29_q.cjs → broadcasts-DZsQNd4R.cjs} +2 -2
- package/dist/{broadcasts-BeTm29_q.cjs.map → broadcasts-DZsQNd4R.cjs.map} +1 -1
- package/dist/{broadcasts-CbrWZpcI.js → broadcasts-Dlu51_38.js} +2 -2
- package/dist/{broadcasts-CbrWZpcI.js.map → broadcasts-Dlu51_38.js.map} +1 -1
- package/dist/{commonFeatures-DMYLR629.cjs → commonFeatures-BuY97_K4.cjs} +10 -2
- package/dist/{commonFeatures-DMYLR629.cjs.map → commonFeatures-BuY97_K4.cjs.map} +1 -1
- package/dist/{commonFeatures-78YVrQq1.js → commonFeatures-LzPnbR6z.js} +10 -2
- package/dist/{commonFeatures-78YVrQq1.js.map → commonFeatures-LzPnbR6z.js.map} +1 -1
- package/dist/components/ads/AdBanner.d.ts +7 -2
- package/dist/components/ads/AdBanner.d.ts.map +1 -1
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{featureFlags-DLdibcv_.js → featureFlags-CSudFX4x.js} +3 -2
- package/dist/featureFlags-CSudFX4x.js.map +1 -0
- package/dist/{featureFlags-DOwy_uOj.cjs → featureFlags-CfDmshkF.cjs} +3 -2
- package/dist/featureFlags-CfDmshkF.cjs.map +1 -0
- package/dist/hooks/index.cjs +2 -2
- package/dist/hooks/index.js +2 -2
- package/dist/{index-B5uAGS9G.cjs → index-CLd2pR09.cjs} +68 -4
- package/dist/index-CLd2pR09.cjs.map +1 -0
- package/dist/{index-CQNjI6V7.js → index-WWndE5XT.js} +68 -4
- package/dist/index-WWndE5XT.js.map +1 -0
- package/dist/index.cjs +7 -7
- package/dist/index.js +7 -7
- package/dist/services/commonFeatures.d.ts.map +1 -1
- package/dist/services/index.cjs +4 -4
- package/dist/services/index.js +4 -4
- package/dist/types/campaigns.d.ts +1 -1
- package/dist/types/campaigns.d.ts.map +1 -1
- package/dist/types/commonFeatures.d.ts +11 -0
- package/dist/types/commonFeatures.d.ts.map +1 -1
- package/dist/types/index.cjs +3 -2
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.js +3 -2
- package/dist/types/index.js.map +1 -1
- package/dist/{useCommonFeatures-NobppaW9.cjs → useCommonFeatures-CWqe4EhH.cjs} +2 -2
- package/dist/{useCommonFeatures-NobppaW9.cjs.map → useCommonFeatures-CWqe4EhH.cjs.map} +1 -1
- package/dist/{useCommonFeatures-BVaPDaPy.js → useCommonFeatures-CnmI83Er.js} +2 -2
- package/dist/{useCommonFeatures-BVaPDaPy.js.map → useCommonFeatures-CnmI83Er.js.map} +1 -1
- package/dist/{useFeatureFlags-8nC71ue-.cjs → useFeatureFlags-9_E7gair.cjs} +3 -3
- package/dist/{useFeatureFlags-8nC71ue-.cjs.map → useFeatureFlags-9_E7gair.cjs.map} +1 -1
- package/dist/{useFeatureFlags-DlMeLBH2.js → useFeatureFlags-DhIb0HYi.js} +3 -3
- package/dist/{useFeatureFlags-DlMeLBH2.js.map → useFeatureFlags-DhIb0HYi.js.map} +1 -1
- package/package.json +1 -1
- package/dist/featureFlags-DLdibcv_.js.map +0 -1
- package/dist/featureFlags-DOwy_uOj.cjs.map +0 -1
- package/dist/index-B5uAGS9G.cjs.map +0 -1
- package/dist/index-CQNjI6V7.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-WWndE5XT.js","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\n *\n * A sleek, modern advertising banner that showcases products.\n * Clean design with smooth animations and auto-rotation.\n * Supports dismissible mode for topbar banners.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useEffect, useState, useCallback, useRef } from 'react';\nimport { Box, Flex, Text, Button, Badge, IconButton } from '@radix-ui/themes';\nimport { ExternalLink, Sparkles, Check, X } from 'lucide-react';\nimport { useCampaigns } from '../../hooks/useCampaigns';\nimport type { AdPlacement, CampaignWithProduct } from '../../types/campaigns';\n\n// Storage key for dismissed banners (per session or persistent)\nconst DISMISSED_BANNERS_KEY = 'sf_dismissed_banners';\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 /** Whether the banner can be dismissed/closed by user */\n dismissible?: boolean;\n /** How long to remember dismissal: 'session' (until tab close) or 'persistent' (localStorage) */\n dismissDuration?: 'session' | 'persistent';\n /** Custom CSS class */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * AdBanner - Promotional banner with rotation\n *\n * @example\n * ```tsx\n * <AdBanner />\n * <AdBanner placement=\"home_banner\" rotationInterval={5000} />\n * <AdBanner placement=\"topbar_banner\" dismissible dismissDuration=\"session\" />\n * ```\n */\nexport function AdBanner({\n placement = 'home_banner',\n rotationInterval = 10000,\n maxCampaigns = 5,\n dismissible = false,\n dismissDuration = 'session',\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 [isDismissed, setIsDismissed] = useState(false);\n const trackedImpressions = useRef<Set<string>>(new Set());\n\n // Check if banner was previously dismissed\n useEffect(() => {\n if (!dismissible) return;\n\n const checkDismissed = () => {\n if (dismissDuration === 'persistent') {\n try {\n const dismissed = localStorage.getItem(DISMISSED_BANNERS_KEY);\n if (dismissed) {\n const dismissedPlacements = JSON.parse(dismissed) as string[];\n if (dismissedPlacements.includes(placement)) {\n setIsDismissed(true);\n }\n }\n } catch {\n // Ignore localStorage errors\n }\n } else {\n // Session storage\n try {\n const dismissed = sessionStorage.getItem(DISMISSED_BANNERS_KEY);\n if (dismissed) {\n const dismissedPlacements = JSON.parse(dismissed) as string[];\n if (dismissedPlacements.includes(placement)) {\n setIsDismissed(true);\n }\n }\n } catch {\n // Ignore sessionStorage errors\n }\n }\n };\n\n checkDismissed();\n }, [dismissible, dismissDuration, placement]);\n\n // Handle dismiss\n const handleDismiss = useCallback(() => {\n setIsDismissed(true);\n\n const storage = dismissDuration === 'persistent' ? localStorage : sessionStorage;\n try {\n const existing = storage.getItem(DISMISSED_BANNERS_KEY);\n const dismissedPlacements: string[] = existing ? JSON.parse(existing) : [];\n if (!dismissedPlacements.includes(placement)) {\n dismissedPlacements.push(placement);\n storage.setItem(DISMISSED_BANNERS_KEY, JSON.stringify(dismissedPlacements));\n }\n } catch {\n // Ignore storage errors\n }\n }, [dismissDuration, placement]);\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 || isDismissed) 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 {/* Dismiss button */}\n {dismissible && (\n <IconButton\n size=\"1\"\n variant=\"ghost\"\n color=\"gray\"\n onClick={handleDismiss}\n style={{\n position: 'absolute',\n top: 8,\n right: 8,\n zIndex: 10,\n cursor: 'pointer',\n }}\n aria-label=\"Close banner\"\n >\n <X size={16} />\n </IconButton>\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":["getDisplayValues","campaign"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const commonFeatures = require("./commonFeatures-
|
|
3
|
+
const commonFeatures = require("./commonFeatures-BuY97_K4.cjs");
|
|
4
4
|
const types_index = require("./types/index.cjs");
|
|
5
|
-
const featureFlags = require("./featureFlags-
|
|
6
|
-
const broadcasts = require("./broadcasts-
|
|
7
|
-
const adminCommonFeatures = require("./admin-commonFeatures-
|
|
8
|
-
const useCommonFeatures = require("./useCommonFeatures-
|
|
9
|
-
const useFeatureFlags = require("./useFeatureFlags-
|
|
10
|
-
const index = require("./index-
|
|
5
|
+
const featureFlags = require("./featureFlags-CfDmshkF.cjs");
|
|
6
|
+
const broadcasts = require("./broadcasts-DZsQNd4R.cjs");
|
|
7
|
+
const adminCommonFeatures = require("./admin-commonFeatures-pnaXeix_.cjs");
|
|
8
|
+
const useCommonFeatures = require("./useCommonFeatures-CWqe4EhH.cjs");
|
|
9
|
+
const useFeatureFlags = require("./useFeatureFlags-9_E7gair.cjs");
|
|
10
|
+
const index = require("./index-CLd2pR09.cjs");
|
|
11
11
|
const useNotificationEvents = require("./useNotificationEvents-BXeMqdak.cjs");
|
|
12
12
|
exports.checkFeatureAvailability = commonFeatures.checkFeatureAvailability;
|
|
13
13
|
exports.clearAddressInfoCache = commonFeatures.clearAddressInfoCache;
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { c, a, b, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, _ } from "./commonFeatures-
|
|
1
|
+
import { c, a, b, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, _ } from "./commonFeatures-LzPnbR6z.js";
|
|
2
2
|
import { CATEGORY_DESCRIPTIONS, CATEGORY_NAMES, COLLECTIONS, DEFAULT_BROADCAST_PRIORITY, DEFAULT_CAMPAIGN_PRIORITY, DEFAULT_FREQUENCY_DAYS, DEFAULT_NOTIFICATION_PREFERENCES, EVENT_TYPE_NAMES, MAX_NOTIFICATION_MESSAGE_LENGTH, MAX_NOTIFICATION_TITLE_LENGTH, NOTIFICATION_COLLECTIONS, PLACEMENT_NAMES, PLATFORM_NAMES, PRIORITY_NAMES, TYPE_NAMES, VARIANT_NAMES, getNotificationCollections } from "./types/index.js";
|
|
3
|
-
import { C as C2, a as a2, D as D2, b as b2, c as c2, d as d2, e as e2, F as F2, f as f2, P as P2, g as g2, h as h2, S as S2, i as i2, j as j2, k as k2, s as s2 } from "./featureFlags-
|
|
4
|
-
import { c as c3, a as a3, d as d3, f as f3, b as b3, e as e3, g as g3, i as i3, r as r2, s as s3, t as t2, h as h3, j as j3 } from "./broadcasts-
|
|
5
|
-
import { a as a4, c as c4, b as b4, d as d4, e as e4, f as f4, g as g4, h as h4, i as i4, j as j4, k as k3, l as l2, m as m2, n as n2, o as o2, p as p2, q as q2, r as r3, s as s4, t as t3, u as u2, v as v2, w as w2, x as x2, y as y2, z as z2, A as A2, B as B2, C as C3, D as D3, E as E2, F as F3, G as G2, H as H2, I as I2, J as J2, K as K2, L as L2, M as M2, N as N2, O as O2, P as P3 } from "./admin-commonFeatures-
|
|
6
|
-
import { u as u3, a as a5, b as b5, c as c5, d as d5, e as e5, f as f5, g as g5, h as h5, i as i5, j as j5, k as k4, l as l3, m as m3 } from "./useCommonFeatures-
|
|
7
|
-
import { u as u4, a as a6, b as b6, c as c6, d as d6, e as e6, f as f6, g as g6, h as h6, i as i6, j as j6, k as k5 } from "./useFeatureFlags-
|
|
8
|
-
import { A as A3, a as a7, b as b7, c as c7, d as d7, e as e7, f as f7, B as B3, g as g7, C as C4, h as h7, i as i7, D as D4, F as F4, j as j7, k as k6, G as G3, H as H3, L as L3, M as M3, S as S3, l as l4, m as m4, n as n3, T as T2, o as o3, p as p3, V as V2, q as q3, r as r4 } from "./index-
|
|
3
|
+
import { C as C2, a as a2, D as D2, b as b2, c as c2, d as d2, e as e2, F as F2, f as f2, P as P2, g as g2, h as h2, S as S2, i as i2, j as j2, k as k2, s as s2 } from "./featureFlags-CSudFX4x.js";
|
|
4
|
+
import { c as c3, a as a3, d as d3, f as f3, b as b3, e as e3, g as g3, i as i3, r as r2, s as s3, t as t2, h as h3, j as j3 } from "./broadcasts-Dlu51_38.js";
|
|
5
|
+
import { a as a4, c as c4, b as b4, d as d4, e as e4, f as f4, g as g4, h as h4, i as i4, j as j4, k as k3, l as l2, m as m2, n as n2, o as o2, p as p2, q as q2, r as r3, s as s4, t as t3, u as u2, v as v2, w as w2, x as x2, y as y2, z as z2, A as A2, B as B2, C as C3, D as D3, E as E2, F as F3, G as G2, H as H2, I as I2, J as J2, K as K2, L as L2, M as M2, N as N2, O as O2, P as P3 } from "./admin-commonFeatures-CFhvjgp9.js";
|
|
6
|
+
import { u as u3, a as a5, b as b5, c as c5, d as d5, e as e5, f as f5, g as g5, h as h5, i as i5, j as j5, k as k4, l as l3, m as m3 } from "./useCommonFeatures-CnmI83Er.js";
|
|
7
|
+
import { u as u4, a as a6, b as b6, c as c6, d as d6, e as e6, f as f6, g as g6, h as h6, i as i6, j as j6, k as k5 } from "./useFeatureFlags-DhIb0HYi.js";
|
|
8
|
+
import { A as A3, a as a7, b as b7, c as c7, d as d7, e as e7, f as f7, B as B3, g as g7, C as C4, h as h7, i as i7, D as D4, F as F4, j as j7, k as k6, G as G3, H as H3, L as L3, M as M3, S as S3, l as l4, m as m4, n as n3, T as T2, o as o3, p as p3, V as V2, q as q3, r as r4 } from "./index-WWndE5XT.js";
|
|
9
9
|
import { A as A4, a as a8, b as b8, P as P4, R as R2, S as S4, c as c8, d as d8, e as e8, f as f8, g as g8, h as h8, i as i8, j as j8, k as k7, l as l5, m as m5, n as n4, r as r5, u as u5, v as v3 } from "./useNotificationEvents-DAmR7FYF.js";
|
|
10
10
|
export {
|
|
11
11
|
A4 as ACCOUNT_TEMPLATES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonFeatures.d.ts","sourceRoot":"","sources":["../../src/services/commonFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAUL,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AA4BjC,wBAAgB,2BAA2B,IAAI,IAAI,CAUlD;AA0BD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAwBpE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,GAAG,WAAW,CAahG;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AA2BD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAwBxE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,GAAG,WAAW,CAapG;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;
|
|
1
|
+
{"version":3,"file":"commonFeatures.d.ts","sourceRoot":"","sources":["../../src/services/commonFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAUL,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AA4BjC,wBAAgB,2BAA2B,IAAI,IAAI,CAUlD;AA0BD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAwBpE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,GAAG,WAAW,CAahG;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AA2BD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAwBxE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,GAAG,WAAW,CAapG;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAkCD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4BpE;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAoCD,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAwCnG;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAuBD,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAoC5G;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAwBD,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAwC1F;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAsBD,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAwCpF;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AA2BD,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAwCtG;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAiDD,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAgD1F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAkB9E;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
package/dist/services/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const commonFeatures = require("../commonFeatures-
|
|
4
|
-
const broadcasts = require("../broadcasts-
|
|
5
|
-
const adminCommonFeatures = require("../admin-commonFeatures-
|
|
6
|
-
const featureFlags = require("../featureFlags-
|
|
3
|
+
const commonFeatures = require("../commonFeatures-BuY97_K4.cjs");
|
|
4
|
+
const broadcasts = require("../broadcasts-DZsQNd4R.cjs");
|
|
5
|
+
const adminCommonFeatures = require("../admin-commonFeatures-pnaXeix_.cjs");
|
|
6
|
+
const featureFlags = require("../featureFlags-CfDmshkF.cjs");
|
|
7
7
|
exports.checkFeatureAvailability = commonFeatures.checkFeatureAvailability;
|
|
8
8
|
exports.clearAddressInfoCache = commonFeatures.clearAddressInfoCache;
|
|
9
9
|
exports.clearAllCommonFeaturesCache = commonFeatures.clearAllCommonFeaturesCache;
|
package/dist/services/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c, a, b, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, G, H, I, M, O, P, Q, S, T, U, V, W, X, Y, Z, _ } from "../commonFeatures-
|
|
2
|
-
import { c as c2, a as a2, d as d2, f as f2, b as b2, e as e2, g as g2, i as i2, r as r2, s as s2, t as t2, h as h2, j as j2 } from "../broadcasts-
|
|
3
|
-
import { a as a3, c as c3, b as b3, d as d3, e as e3, f as f3, g as g3, h as h3, i as i3, j as j3, k as k2, l as l2, m as m2, n as n2, o as o2, p as p2, q as q2, r as r3, s as s3, t as t3, u as u2, v as v2, w as w2, x as x2, y as y2, z as z2, A as A2, B as B2, C as C2, D as D2, E, F, G as G2, H as H2, I as I2, J, K, L, M as M2, N, O as O2, P as P2 } from "../admin-commonFeatures-
|
|
4
|
-
import { C as C3, F as F2 } from "../featureFlags-
|
|
1
|
+
import { c, a, b, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, G, H, I, M, O, P, Q, S, T, U, V, W, X, Y, Z, _ } from "../commonFeatures-LzPnbR6z.js";
|
|
2
|
+
import { c as c2, a as a2, d as d2, f as f2, b as b2, e as e2, g as g2, i as i2, r as r2, s as s2, t as t2, h as h2, j as j2 } from "../broadcasts-Dlu51_38.js";
|
|
3
|
+
import { a as a3, c as c3, b as b3, d as d3, e as e3, f as f3, g as g3, h as h3, i as i3, j as j3, k as k2, l as l2, m as m2, n as n2, o as o2, p as p2, q as q2, r as r3, s as s3, t as t3, u as u2, v as v2, w as w2, x as x2, y as y2, z as z2, A as A2, B as B2, C as C2, D as D2, E, F, G as G2, H as H2, I as I2, J, K, L, M as M2, N, O as O2, P as P2 } from "../admin-commonFeatures-CFhvjgp9.js";
|
|
4
|
+
import { C as C3, F as F2 } from "../featureFlags-CSudFX4x.js";
|
|
5
5
|
export {
|
|
6
6
|
C3 as COLLECTION_FEATURE_FLAGS,
|
|
7
7
|
F2 as FEATURE_FLAGS_DOC_ID,
|
|
@@ -57,7 +57,7 @@ export type TargetAudience = 'all' | 'authenticated' | 'anonymous';
|
|
|
57
57
|
/**
|
|
58
58
|
* Placement options for ads
|
|
59
59
|
*/
|
|
60
|
-
export type AdPlacement = 'popup_slider' | 'options_panel' | 'onetime_modal' | 'update_modal' | 'notification' | 'footer_slider' | 'sidebar_panel' | 'home_banner';
|
|
60
|
+
export type AdPlacement = 'popup_slider' | 'options_panel' | 'onetime_modal' | 'update_modal' | 'notification' | 'footer_slider' | 'sidebar_panel' | 'home_banner' | 'topbar_banner';
|
|
61
61
|
/**
|
|
62
62
|
* Small panel variant styles
|
|
63
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/types/campaigns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAM/C;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,wCAAwC;IACxC,SAAS,EAAE,SAAS,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,eAAe,GAAG,WAAW,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,eAAe,GACf,eAAe,GACf,cAAc,GACd,cAAc,GACd,eAAe,GACf,eAAe,GACf,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/types/campaigns.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,17 +66,28 @@ export interface SocialLink {
|
|
|
66
66
|
showIn: ('footer' | 'contact' | 'about' | 'header')[];
|
|
67
67
|
updatedAt: Timestamp;
|
|
68
68
|
}
|
|
69
|
+
export interface AddressCoordinates {
|
|
70
|
+
lat: number;
|
|
71
|
+
lng: number;
|
|
72
|
+
}
|
|
69
73
|
export interface AddressInfo {
|
|
70
74
|
id: string;
|
|
71
75
|
label?: string;
|
|
72
76
|
streetAddress?: string;
|
|
77
|
+
apartment?: string;
|
|
73
78
|
city?: string;
|
|
74
79
|
state?: string;
|
|
75
80
|
postalCode?: string;
|
|
76
81
|
country?: string;
|
|
82
|
+
landmark?: string;
|
|
77
83
|
fullAddress?: string;
|
|
78
84
|
googleMapsUrl?: string;
|
|
85
|
+
googleMapsEmbedUrl?: string;
|
|
86
|
+
coordinates?: AddressCoordinates;
|
|
87
|
+
showMap: boolean;
|
|
79
88
|
isPublic: boolean;
|
|
89
|
+
workingHours?: string;
|
|
90
|
+
additionalInfo?: string;
|
|
80
91
|
updatedAt: Timestamp;
|
|
81
92
|
}
|
|
82
93
|
export declare const DEFAULT_ADDRESS_INFO: Omit<AddressInfo, 'id' | 'updatedAt'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonFeatures.d.ts","sourceRoot":"","sources":["../../src/types/commonFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAClC,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,iBAAiB,GACjB,UAAU,GACV,QAAQ,GACR,cAAc,GACd,UAAU,CAAC;AAcf;;;;;GAKG;AACH,eAAO,IAAI,0BAA0B,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAE/E,CAAC;AAEF;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,GAC7D,IAAI,CAKN;AAMD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAGtE,CAAC;AAMF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAK1E,CAAC;AAMF,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,GACV,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,UAAU,GACV,UAAU,GACV,QAAQ,GACR,OAAO,GACP,eAAe,GACf,UAAU,GACV,SAAS,GACT,SAAS,GACT,KAAK,GACL,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAqBhE,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,CAAC,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;IACtD,SAAS,EAAE,SAAS,CAAC;CACtB;AAMD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"commonFeatures.d.ts","sourceRoot":"","sources":["../../src/types/commonFeatures.ts"],"names":[],"mappings":"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"}
|