@datlv-trustshop/shopify-inapp-components 0.2.11 → 0.2.13
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/components/FloatingCard.d.ts.map +1 -1
- package/dist/components/FloatingCard.js +4 -0
- package/dist/components/FloatingCard.js.map +1 -1
- package/dist/components/FloatingCardContainer.d.ts +21 -0
- package/dist/components/FloatingCardContainer.d.ts.map +1 -0
- package/dist/components/FloatingCardContainer.js +38 -0
- package/dist/components/FloatingCardContainer.js.map +1 -0
- package/dist/components/PartnerIntegration.d.ts +4 -0
- package/dist/components/PartnerIntegration.d.ts.map +1 -1
- package/dist/components/PartnerIntegration.js +59 -8
- package/dist/components/PartnerIntegration.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/translations/locales/cn.json +3 -2
- package/dist/translations/locales/de.json +2 -1
- package/dist/translations/locales/dk.json +3 -2
- package/dist/translations/locales/en.json +2 -1
- package/dist/translations/locales/es.json +3 -2
- package/dist/translations/locales/fr.json +2 -1
- package/dist/translations/locales/ie.json +3 -2
- package/dist/translations/locales/in.json +3 -2
- package/dist/translations/locales/it.json +3 -2
- package/dist/translations/locales/jp.json +3 -2
- package/dist/translations/locales/nl.json +3 -2
- package/dist/translations/locales/nz.json +3 -2
- package/dist/translations/locales/pt.json +3 -2
- package/dist/translations/locales/se.json +3 -2
- package/dist/translations/locales/vi.json +3 -2
- package/dist/types/translations.d.ts +1 -0
- package/dist/types/translations.d.ts.map +1 -1
- package/dist/types/translations.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingCard.d.ts","sourceRoot":"","sources":["../../src/components/FloatingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAa7C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;KAC3D,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;KAClC,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;KAClC,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACrE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"FloatingCard.d.ts","sourceRoot":"","sources":["../../src/components/FloatingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAa7C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;KAC3D,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;KAClC,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;KAClC,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACrE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkQpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -8,6 +8,10 @@ export const FloatingCard = ({ data, shopId: propsShopId, onDismiss, onPrimaryAc
|
|
|
8
8
|
const sdk = useSDK({});
|
|
9
9
|
const contextShopId = sdk.shopInfo?.id;
|
|
10
10
|
const shopId = propsShopId || contextShopId;
|
|
11
|
+
// Early return if no data
|
|
12
|
+
if (!data) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
11
15
|
// Use the campaign ID from data or fallback to regular id
|
|
12
16
|
const campaignId = data.campaign_id || data.id;
|
|
13
17
|
// Set up campaign tracking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingCard.js","sourceRoot":"","sources":["../../src/components/FloatingCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { CSSProperties } from \"react\";\nimport {\n Card,\n BlockStack,\n InlineStack,\n Text,\n Badge,\n Button,\n Box,\n} from \"@shopify/polaris\";\nimport { useCampaignTracking } from \"../hooks/useCampaignTracking\";\nimport { useSDK } from \"../core/SDKManager\";\n\nexport interface FloatingCardData {\n id: number;\n key: string;\n type: string;\n priority: number;\n title: string;\n description: string;\n date: string;\n tag?: {\n label: string;\n tone: \"success\" | \"info\" | \"warning\" | \"critical\" | \"new\";\n };\n img_url: string;\n image_alt?: string | null;\n image_type: string;\n primary_action?: {\n label: string;\n url: string;\n external: boolean;\n variant: \"primary\" | \"secondary\";\n };\n secondary_action?: {\n label: string;\n url: string;\n external: boolean;\n variant: \"primary\" | \"secondary\";\n };\n dismissible: boolean;\n auto_close_after?: number | null;\n reappear_interval?: number | null;\n display_pages?: string[];\n campaign_id?: string | number; // Added for tracking purposes\n}\n\ninterface FloatingCardProps {\n data: FloatingCardData;\n shopId?: string; // Required for tracking\n onDismiss?: () => void;\n onPrimaryAction?: (data: FloatingCardData) => void;\n onSecondaryAction?: (data: FloatingCardData) => void;\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n animationType?: 'slide' | 'fade';\n showCloseButton?: boolean;\n}\n\nexport const FloatingCard: React.FC<FloatingCardProps> = ({\n data,\n shopId: propsShopId,\n onDismiss,\n onPrimaryAction,\n onSecondaryAction,\n position = 'bottom-right',\n showCloseButton = true,\n}) => {\n // Get shopId from SDK shopInfo if not provided via props\n const sdk = useSDK({});\n const contextShopId = sdk.shopInfo?.id;\n const shopId = propsShopId || contextShopId;\n \n // Use the campaign ID from data or fallback to regular id\n const campaignId = data.campaign_id || data.id;\n \n // Set up campaign tracking\n const tracking = shopId && campaignId ? useCampaignTracking({\n shopId,\n campaignId,\n threshold: 0.5, // Track when 50% visible\n visibilityDuration: 1000, // Track view after 1 second\n metadata: {\n card_type: data.type,\n card_key: data.key,\n },\n }) : null;\n const handlePrimaryAction = () => {\n // Track the click\n tracking?.trackPrimaryAction();\n \n if (data.primary_action) {\n const url = data.primary_action.url;\n \n // Check if it's an external URL\n if (data.primary_action.external) {\n window.open(url, \"_blank\");\n } \n // Check if it's a modal trigger\n else if (url === \"modal\" || url === \"/pricing\") {\n // Pass the full card data to the handler for modal handling\n onPrimaryAction?.(data);\n }\n // Check if it's an internal route\n else if (url?.startsWith(\"/\")) {\n // Pass the full card data for internal navigation\n onPrimaryAction?.(data);\n }\n // Default: just call the handler\n else {\n onPrimaryAction?.(data);\n }\n }\n };\n\n const handleSecondaryAction = () => {\n // Track the click\n tracking?.trackSecondaryAction();\n \n if (data.secondary_action) {\n const url = data.secondary_action.url;\n \n if (data.secondary_action.external) {\n window.open(url, \"_blank\");\n } else if (url?.startsWith(\"/\") || url === \"modal\") {\n // Pass the full card data for internal handling\n onSecondaryAction?.(data);\n } else {\n onSecondaryAction?.(data);\n }\n }\n };\n \n const handleDismiss = () => {\n // Track the dismiss\n tracking?.trackDismiss();\n onDismiss?.();\n };\n\n // CSS-in-JS styles - no external CSS file needed\n const floatingCardStyles: CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n width: '300px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n borderRadius: '8px',\n boxShadow: '0 4px 26px 0 rgba(0, 0, 0, 0.10)',\n overflow: 'hidden',\n animation: 'slideInUp 0.3s ease-out',\n ...(position === 'bottom-right' && { bottom: '20px', right: '20px' }),\n ...(position === 'bottom-left' && { bottom: '20px', left: '20px' }),\n ...(position === 'top-right' && { top: '20px', right: '20px' }),\n ...(position === 'top-left' && { top: '20px', left: '20px' }),\n };\n\n const closeButtonStyles: CSSProperties = {\n display: 'flex',\n padding: '4px 2px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '2px',\n position: 'absolute',\n right: '7px',\n top: '7px',\n borderRadius: '8px',\n background: 'rgba(255, 255, 255, 0.10)',\n border: 'none',\n cursor: 'pointer',\n transition: 'background 0.2s ease',\n zIndex: 10,\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n };\n\n const imageContainerStyles: CSSProperties = {\n position: 'relative',\n height: '168.75px',\n aspectRatio: '16/9',\n width: '100%',\n overflow: 'hidden',\n borderRadius: '8px 8px 0 0',\n backgroundColor: '#f5f5f5',\n };\n\n // Add keyframe animation dynamically\n React.useEffect(() => {\n // Check if animation already exists\n const styleId = 'floating-card-animations';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.innerHTML = `\n @keyframes slideInUp {\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n return (\n <div ref={tracking?.elementRef} style={floatingCardStyles}>\n <Card padding=\"0\" roundedAbove=\"sm\">\n {(showCloseButton && data.dismissible !== false) && (\n <button\n style={closeButtonStyles}\n onClick={handleDismiss}\n aria-label=\"Close\"\n >\n <div style={{\n width: \"20px\",\n height: \"20ox\"\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\">\n <path d=\"M6.71967 7.78033C7.01256 8.07322 7.48744 8.07322 7.78033 7.78033C8.07322 7.48744 8.07322 7.01256 7.78033 6.71967L5.06066 4L7.78033 1.28033C8.07322 0.987437 8.07322 0.512563 7.78033 0.21967C7.48744 -0.073223 7.01256 -0.073223 6.71967 0.21967L4 2.93934L1.28033 0.21967C0.987437 -0.0732233 0.512564 -0.0732233 0.21967 0.21967C-0.0732225 0.512563 -0.0732226 0.987437 0.21967 1.28033L2.93934 4L0.21967 6.71967C-0.0732233 7.01256 -0.0732233 7.48744 0.21967 7.78033C0.512563 8.07322 0.987437 8.07322 1.28033 7.78033L4 5.06066L6.71967 7.78033Z\" fill=\"white\" fillOpacity=\"0.6\"/>\n </svg>\n </div>\n </button>\n )}\n\n <BlockStack gap=\"0\">\n {data.img_url && (\n <div style={imageContainerStyles}>\n <img\n src={data.img_url}\n alt={data.image_alt || data.title}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n onError={(e) => {\n console.error(\"Image failed to load:\", data.img_url);\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n </div>\n )}\n\n <Box padding=\"400\">\n <BlockStack gap=\"500\">\n <BlockStack gap=\"300\">\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n }}\n >\n <div style={{\n display: \"flex\",\n flexDirection: \"row\",\n gap: \"6px\",\n alignItems: \"start\"\n }}>\n <Text as=\"h2\" variant=\"bodyLg\" fontWeight=\"semibold\">\n {data.title}\n </Text>\n {data.tag && (\n <Badge tone={data.tag.tone || \"success\"}>\n {data.tag.label}\n </Badge>\n )}\n </div>\n\n <Text as=\"p\" variant=\"bodySm\">\n {data.date}\n </Text>\n </div>\n\n <Text as=\"p\" variant=\"bodyMd\">\n {data.description}\n </Text>\n </BlockStack>\n <InlineStack gap=\"200\">\n {data.primary_action && (\n <Button\n variant={\n data.primary_action.variant === \"primary\"\n ? \"primary\"\n : \"plain\"\n }\n onClick={handlePrimaryAction}\n >\n {data.primary_action.label}\n </Button>\n )}\n {data.secondary_action && (\n <Button variant=\"tertiary\" onClick={handleSecondaryAction}>\n {data.secondary_action.label}\n </Button>\n )}\n </InlineStack>\n </BlockStack>\n </Box>\n </BlockStack>\n </Card>\n </div>\n );\n};\n\nexport default FloatingCard;\n"]}
|
|
1
|
+
{"version":3,"file":"FloatingCard.js","sourceRoot":"","sources":["../../src/components/FloatingCard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,IAAI,EACJ,UAAU,EACV,WAAW,EACX,IAAI,EACJ,KAAK,EACL,MAAM,EACN,GAAG,GACJ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+C5C,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,IAAI,EACJ,MAAM,EAAE,WAAW,EACnB,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,QAAQ,GAAG,cAAc,EACzB,eAAe,GAAG,IAAI,GACvB,EAAE,EAAE;IACH,yDAAyD;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACvB,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,WAAW,IAAI,aAAa,CAAC;IAE5C,0BAA0B;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0DAA0D;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC;IAE/C,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC1D,MAAM;QACN,UAAU;QACV,SAAS,EAAE,GAAG,EAAE,yBAAyB;QACzC,kBAAkB,EAAE,IAAI,EAAE,4BAA4B;QACtD,QAAQ,EAAE;YACR,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,QAAQ,EAAE,IAAI,CAAC,GAAG;SACnB;KACF,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACV,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,kBAAkB;QAClB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAEpC,gCAAgC;YAChC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;YACD,gCAAgC;iBAC3B,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC/C,4DAA4D;gBAC5D,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YACD,kCAAkC;iBAC7B,IAAI,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,kDAAkD;gBAClD,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YACD,iCAAiC;iBAC5B,CAAC;gBACJ,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,kBAAkB;QAClB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAEtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACnD,gDAAgD;gBAChD,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,oBAAoB;QACpB,QAAQ,EAAE,YAAY,EAAE,CAAC;QACzB,SAAS,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,iDAAiD;IACjD,MAAM,kBAAkB,GAAkB;QACxC,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,UAAU,EAAE,YAAY;QACxB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,kCAAkC;QAC7C,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,yBAAyB;QACpC,GAAG,CAAC,QAAQ,KAAK,cAAc,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrE,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnE,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/D,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KAC9D,CAAC;IAEF,MAAM,iBAAiB,GAAkB;QACvC,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,SAAS;QAClB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,KAAK;QACZ,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,2BAA2B;QACvC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,sBAAsB;QAClC,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,YAAY;QAC5B,oBAAoB,EAAE,YAAY;KACnC,CAAC;IAEF,MAAM,oBAAoB,GAAkB;QAC1C,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,aAAa;QAC3B,eAAe,EAAE,SAAS;KAC3B,CAAC;IAEF,qCAAqC;IACrC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,oCAAoC;QACpC,MAAM,OAAO,GAAG,0BAA0B,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC;YACnB,KAAK,CAAC,SAAS,GAAG;;;;;;;;;;;;;;;OAejB,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cAAK,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,YACvD,MAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,YAAY,EAAC,IAAI,aAChC,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,IAAI,CAClD,iBACE,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,aAAa,gBACX,OAAO,YAElB,cAAK,KAAK,EAAE;4BACV,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM;yBACf,YACG,cAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,YAC1F,eAAM,CAAC,EAAC,yhBAAyhB,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,GAAE,GAC9jB,GACF,GACC,CACV,EAED,MAAC,UAAU,IAAC,GAAG,EAAC,GAAG,aAChB,IAAI,CAAC,OAAO,IAAI,CACf,cAAK,KAAK,EAAE,oBAAoB,YAC9B,cACE,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,GAAG,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EACjC,KAAK,EAAE;oCACL,KAAK,EAAE,MAAM;oCACb,MAAM,EAAE,MAAM;oCACd,SAAS,EAAE,OAAO;iCACnB,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oCACpD,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gCACxD,CAAC,GACD,GACE,CACP,EAED,KAAC,GAAG,IAAC,OAAO,EAAC,KAAK,YAChB,MAAC,UAAU,IAAC,GAAG,EAAC,KAAK,aACnB,MAAC,UAAU,IAAC,GAAG,EAAC,KAAK,aACnB,eACE,KAAK,EAAE;oDACL,OAAO,EAAE,MAAM;oDACf,aAAa,EAAE,QAAQ;oDACvB,GAAG,EAAE,KAAK;iDACX,aAED,eAAK,KAAK,EAAE;4DACV,OAAO,EAAE,MAAM;4DACf,aAAa,EAAE,KAAK;4DACpB,GAAG,EAAE,KAAK;4DACV,UAAU,EAAE,OAAO;yDACpB,aACC,KAAC,IAAI,IAAC,EAAE,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,YACjD,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,GAAG,IAAI,CACX,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,YACpC,IAAI,CAAC,GAAG,CAAC,KAAK,GACT,CACT,IACG,EAEN,KAAC,IAAI,IAAC,EAAE,EAAC,GAAG,EAAC,OAAO,EAAC,QAAQ,YAC1B,IAAI,CAAC,IAAI,GACL,IACH,EAEN,KAAC,IAAI,IAAC,EAAE,EAAC,GAAG,EAAC,OAAO,EAAC,QAAQ,YAC1B,IAAI,CAAC,WAAW,GACZ,IACI,EACb,MAAC,WAAW,IAAC,GAAG,EAAC,KAAK,aACnB,IAAI,CAAC,cAAc,IAAI,CACtB,KAAC,MAAM,IACL,OAAO,EACL,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,SAAS;oDACvC,CAAC,CAAC,SAAS;oDACX,CAAC,CAAC,OAAO,EAEb,OAAO,EAAE,mBAAmB,YAE3B,IAAI,CAAC,cAAc,CAAC,KAAK,GACnB,CACV,EACA,IAAI,CAAC,gBAAgB,IAAI,CACxB,KAAC,MAAM,IAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,qBAAqB,YACtD,IAAI,CAAC,gBAAgB,CAAC,KAAK,GACrB,CACV,IACW,IACH,GACT,IACK,IACR,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import React, { CSSProperties } from \"react\";\nimport {\n Card,\n BlockStack,\n InlineStack,\n Text,\n Badge,\n Button,\n Box,\n} from \"@shopify/polaris\";\nimport { useCampaignTracking } from \"../hooks/useCampaignTracking\";\nimport { useSDK } from \"../core/SDKManager\";\n\nexport interface FloatingCardData {\n id: number;\n key: string;\n type: string;\n priority: number;\n title: string;\n description: string;\n date: string;\n tag?: {\n label: string;\n tone: \"success\" | \"info\" | \"warning\" | \"critical\" | \"new\";\n };\n img_url: string;\n image_alt?: string | null;\n image_type: string;\n primary_action?: {\n label: string;\n url: string;\n external: boolean;\n variant: \"primary\" | \"secondary\";\n };\n secondary_action?: {\n label: string;\n url: string;\n external: boolean;\n variant: \"primary\" | \"secondary\";\n };\n dismissible: boolean;\n auto_close_after?: number | null;\n reappear_interval?: number | null;\n display_pages?: string[];\n campaign_id?: string | number; // Added for tracking purposes\n}\n\ninterface FloatingCardProps {\n data: FloatingCardData;\n shopId?: string; // Required for tracking\n onDismiss?: () => void;\n onPrimaryAction?: (data: FloatingCardData) => void;\n onSecondaryAction?: (data: FloatingCardData) => void;\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n animationType?: 'slide' | 'fade';\n showCloseButton?: boolean;\n}\n\nexport const FloatingCard: React.FC<FloatingCardProps> = ({\n data,\n shopId: propsShopId,\n onDismiss,\n onPrimaryAction,\n onSecondaryAction,\n position = 'bottom-right',\n showCloseButton = true,\n}) => {\n // Get shopId from SDK shopInfo if not provided via props\n const sdk = useSDK({});\n const contextShopId = sdk.shopInfo?.id;\n const shopId = propsShopId || contextShopId;\n \n // Early return if no data\n if (!data) {\n return null;\n }\n \n // Use the campaign ID from data or fallback to regular id\n const campaignId = data.campaign_id || data.id;\n \n // Set up campaign tracking\n const tracking = shopId && campaignId ? useCampaignTracking({\n shopId,\n campaignId,\n threshold: 0.5, // Track when 50% visible\n visibilityDuration: 1000, // Track view after 1 second\n metadata: {\n card_type: data.type,\n card_key: data.key,\n },\n }) : null;\n const handlePrimaryAction = () => {\n // Track the click\n tracking?.trackPrimaryAction();\n \n if (data.primary_action) {\n const url = data.primary_action.url;\n \n // Check if it's an external URL\n if (data.primary_action.external) {\n window.open(url, \"_blank\");\n } \n // Check if it's a modal trigger\n else if (url === \"modal\" || url === \"/pricing\") {\n // Pass the full card data to the handler for modal handling\n onPrimaryAction?.(data);\n }\n // Check if it's an internal route\n else if (url?.startsWith(\"/\")) {\n // Pass the full card data for internal navigation\n onPrimaryAction?.(data);\n }\n // Default: just call the handler\n else {\n onPrimaryAction?.(data);\n }\n }\n };\n\n const handleSecondaryAction = () => {\n // Track the click\n tracking?.trackSecondaryAction();\n \n if (data.secondary_action) {\n const url = data.secondary_action.url;\n \n if (data.secondary_action.external) {\n window.open(url, \"_blank\");\n } else if (url?.startsWith(\"/\") || url === \"modal\") {\n // Pass the full card data for internal handling\n onSecondaryAction?.(data);\n } else {\n onSecondaryAction?.(data);\n }\n }\n };\n \n const handleDismiss = () => {\n // Track the dismiss\n tracking?.trackDismiss();\n onDismiss?.();\n };\n\n // CSS-in-JS styles - no external CSS file needed\n const floatingCardStyles: CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n width: '300px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n borderRadius: '8px',\n boxShadow: '0 4px 26px 0 rgba(0, 0, 0, 0.10)',\n overflow: 'hidden',\n animation: 'slideInUp 0.3s ease-out',\n ...(position === 'bottom-right' && { bottom: '20px', right: '20px' }),\n ...(position === 'bottom-left' && { bottom: '20px', left: '20px' }),\n ...(position === 'top-right' && { top: '20px', right: '20px' }),\n ...(position === 'top-left' && { top: '20px', left: '20px' }),\n };\n\n const closeButtonStyles: CSSProperties = {\n display: 'flex',\n padding: '4px 2px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '2px',\n position: 'absolute',\n right: '7px',\n top: '7px',\n borderRadius: '8px',\n background: 'rgba(255, 255, 255, 0.10)',\n border: 'none',\n cursor: 'pointer',\n transition: 'background 0.2s ease',\n zIndex: 10,\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n };\n\n const imageContainerStyles: CSSProperties = {\n position: 'relative',\n height: '168.75px',\n aspectRatio: '16/9',\n width: '100%',\n overflow: 'hidden',\n borderRadius: '8px 8px 0 0',\n backgroundColor: '#f5f5f5',\n };\n\n // Add keyframe animation dynamically\n React.useEffect(() => {\n // Check if animation already exists\n const styleId = 'floating-card-animations';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.innerHTML = `\n @keyframes slideInUp {\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n return (\n <div ref={tracking?.elementRef} style={floatingCardStyles}>\n <Card padding=\"0\" roundedAbove=\"sm\">\n {(showCloseButton && data.dismissible !== false) && (\n <button\n style={closeButtonStyles}\n onClick={handleDismiss}\n aria-label=\"Close\"\n >\n <div style={{\n width: \"20px\",\n height: \"20ox\"\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\">\n <path d=\"M6.71967 7.78033C7.01256 8.07322 7.48744 8.07322 7.78033 7.78033C8.07322 7.48744 8.07322 7.01256 7.78033 6.71967L5.06066 4L7.78033 1.28033C8.07322 0.987437 8.07322 0.512563 7.78033 0.21967C7.48744 -0.073223 7.01256 -0.073223 6.71967 0.21967L4 2.93934L1.28033 0.21967C0.987437 -0.0732233 0.512564 -0.0732233 0.21967 0.21967C-0.0732225 0.512563 -0.0732226 0.987437 0.21967 1.28033L2.93934 4L0.21967 6.71967C-0.0732233 7.01256 -0.0732233 7.48744 0.21967 7.78033C0.512563 8.07322 0.987437 8.07322 1.28033 7.78033L4 5.06066L6.71967 7.78033Z\" fill=\"white\" fillOpacity=\"0.6\"/>\n </svg>\n </div>\n </button>\n )}\n\n <BlockStack gap=\"0\">\n {data.img_url && (\n <div style={imageContainerStyles}>\n <img\n src={data.img_url}\n alt={data.image_alt || data.title}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n onError={(e) => {\n console.error(\"Image failed to load:\", data.img_url);\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n </div>\n )}\n\n <Box padding=\"400\">\n <BlockStack gap=\"500\">\n <BlockStack gap=\"300\">\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n }}\n >\n <div style={{\n display: \"flex\",\n flexDirection: \"row\",\n gap: \"6px\",\n alignItems: \"start\"\n }}>\n <Text as=\"h2\" variant=\"bodyLg\" fontWeight=\"semibold\">\n {data.title}\n </Text>\n {data.tag && (\n <Badge tone={data.tag.tone || \"success\"}>\n {data.tag.label}\n </Badge>\n )}\n </div>\n\n <Text as=\"p\" variant=\"bodySm\">\n {data.date}\n </Text>\n </div>\n\n <Text as=\"p\" variant=\"bodyMd\">\n {data.description}\n </Text>\n </BlockStack>\n <InlineStack gap=\"200\">\n {data.primary_action && (\n <Button\n variant={\n data.primary_action.variant === \"primary\"\n ? \"primary\"\n : \"plain\"\n }\n onClick={handlePrimaryAction}\n >\n {data.primary_action.label}\n </Button>\n )}\n {data.secondary_action && (\n <Button variant=\"tertiary\" onClick={handleSecondaryAction}>\n {data.secondary_action.label}\n </Button>\n )}\n </InlineStack>\n </BlockStack>\n </Box>\n </BlockStack>\n </Card>\n </div>\n );\n};\n\nexport default FloatingCard;\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type UseSDKOptions } from "../core/SDKManager";
|
|
3
|
+
export interface FloatingCardContainerProps extends UseSDKOptions {
|
|
4
|
+
/** Current route for page-specific display */
|
|
5
|
+
currentRoute?: string;
|
|
6
|
+
/** Position of the cards */
|
|
7
|
+
position?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
8
|
+
/** Callback when card is dismissed */
|
|
9
|
+
onDismiss?: (cardId: number) => void;
|
|
10
|
+
/** Callback for primary action */
|
|
11
|
+
onPrimaryAction?: (card: any) => void;
|
|
12
|
+
/** Callback for secondary action */
|
|
13
|
+
onSecondaryAction?: (card: any) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Container component that automatically fetches and displays floating cards
|
|
17
|
+
* This is what the in-app team should use when they don't have specific card data
|
|
18
|
+
*/
|
|
19
|
+
export declare const FloatingCardContainer: React.FC<FloatingCardContainerProps>;
|
|
20
|
+
export default FloatingCardContainer;
|
|
21
|
+
//# sourceMappingURL=FloatingCardContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingCardContainer.d.ts","sourceRoot":"","sources":["../../src/components/FloatingCardContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,0BAA2B,SAAQ,aAAa;IAC/D,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACrE,sCAAsC;IACtC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,kCAAkC;IAClC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACtC,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACzC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAiDtE,CAAC;AAGF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { FloatingCard } from "./FloatingCard";
|
|
3
|
+
import { useVisibleFloatingCards } from "../hooks/useFloatingCards";
|
|
4
|
+
import { useSDK } from "../core/SDKManager";
|
|
5
|
+
/**
|
|
6
|
+
* Container component that automatically fetches and displays floating cards
|
|
7
|
+
* This is what the in-app team should use when they don't have specific card data
|
|
8
|
+
*/
|
|
9
|
+
export const FloatingCardContainer = ({ currentRoute = "/", position = "bottom-right", onDismiss, onPrimaryAction, onSecondaryAction,
|
|
10
|
+
// SDK options
|
|
11
|
+
shopInfo, locale, translations, config, }) => {
|
|
12
|
+
// Initialize SDK
|
|
13
|
+
const sdk = useSDK({ shopInfo, locale, translations, config });
|
|
14
|
+
// Get visible floating cards from campaigns
|
|
15
|
+
const { visibleCards, dismissCard } = useVisibleFloatingCards({
|
|
16
|
+
currentRoute,
|
|
17
|
+
shopInfo,
|
|
18
|
+
locale,
|
|
19
|
+
translations,
|
|
20
|
+
config,
|
|
21
|
+
});
|
|
22
|
+
// Handle card dismissal
|
|
23
|
+
const handleDismiss = (cardId) => {
|
|
24
|
+
dismissCard(cardId);
|
|
25
|
+
onDismiss?.(cardId);
|
|
26
|
+
};
|
|
27
|
+
// If no cards, return null
|
|
28
|
+
if (!visibleCards || visibleCards.length === 0) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
// For now, show only the first card (highest priority)
|
|
32
|
+
// In future, you might want to stack multiple cards
|
|
33
|
+
const card = visibleCards[0];
|
|
34
|
+
return (_jsx(FloatingCard, { data: card, shopId: sdk.shopInfo?.id, position: position, onDismiss: () => handleDismiss(card.id), onPrimaryAction: onPrimaryAction, onSecondaryAction: onSecondaryAction }));
|
|
35
|
+
};
|
|
36
|
+
// Default export for backward compatibility
|
|
37
|
+
export default FloatingCardContainer;
|
|
38
|
+
//# sourceMappingURL=FloatingCardContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingCardContainer.js","sourceRoot":"","sources":["../../src/components/FloatingCardContainer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AAehE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,YAAY,GAAG,GAAG,EAClB,QAAQ,GAAG,cAAc,EACzB,SAAS,EACT,eAAe,EACf,iBAAiB;AACjB,cAAc;AACd,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,MAAM,GACP,EAAE,EAAE;IACH,iBAAiB;IACjB,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAE/D,4CAA4C;IAC5C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,uBAAuB,CAAC;QAC5D,YAAY;QACZ,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,MAAM;KACP,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;QACvC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,2BAA2B;IAC3B,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,oDAAoD;IACpD,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE7B,OAAO,CACL,KAAC,YAAY,IACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EACvC,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,GACpC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,4CAA4C;AAC5C,eAAe,qBAAqB,CAAC","sourcesContent":["import React from \"react\";\nimport { FloatingCard } from \"./FloatingCard\";\nimport { useVisibleFloatingCards } from \"../hooks/useFloatingCards\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\n\nexport interface FloatingCardContainerProps extends UseSDKOptions {\n /** Current route for page-specific display */\n currentRoute?: string;\n /** Position of the cards */\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n /** Callback when card is dismissed */\n onDismiss?: (cardId: number) => void;\n /** Callback for primary action */\n onPrimaryAction?: (card: any) => void;\n /** Callback for secondary action */\n onSecondaryAction?: (card: any) => void;\n}\n\n/**\n * Container component that automatically fetches and displays floating cards\n * This is what the in-app team should use when they don't have specific card data\n */\nexport const FloatingCardContainer: React.FC<FloatingCardContainerProps> = ({\n currentRoute = \"/\",\n position = \"bottom-right\",\n onDismiss,\n onPrimaryAction,\n onSecondaryAction,\n // SDK options\n shopInfo,\n locale,\n translations,\n config,\n}) => {\n // Initialize SDK\n const sdk = useSDK({ shopInfo, locale, translations, config });\n\n // Get visible floating cards from campaigns\n const { visibleCards, dismissCard } = useVisibleFloatingCards({\n currentRoute,\n shopInfo,\n locale,\n translations,\n config,\n });\n\n // Handle card dismissal\n const handleDismiss = (cardId: number) => {\n dismissCard(cardId);\n onDismiss?.(cardId);\n };\n\n // If no cards, return null\n if (!visibleCards || visibleCards.length === 0) {\n return null;\n }\n\n // For now, show only the first card (highest priority)\n // In future, you might want to stack multiple cards\n const card = visibleCards[0];\n\n return (\n <FloatingCard\n data={card}\n shopId={sdk.shopInfo?.id}\n position={position}\n onDismiss={() => handleDismiss(card.id)}\n onPrimaryAction={onPrimaryAction}\n onSecondaryAction={onSecondaryAction}\n />\n );\n};\n\n// Default export for backward compatibility\nexport default FloatingCardContainer;\n"]}
|
|
@@ -15,6 +15,8 @@ export type IntegrationStatusProvider = (integration: IntegrationItem) => Integr
|
|
|
15
15
|
export interface PartnerIntegrationProps extends UseSDKOptions {
|
|
16
16
|
/** Optional CSS class */
|
|
17
17
|
className?: string;
|
|
18
|
+
/** Status provider for custom integration statuses */
|
|
19
|
+
statusProvider?: IntegrationStatusProvider;
|
|
18
20
|
/** Handle manage action */
|
|
19
21
|
onManage?: (item: IntegrationItem) => void;
|
|
20
22
|
/** Handle install action */
|
|
@@ -23,6 +25,8 @@ export interface PartnerIntegrationProps extends UseSDKOptions {
|
|
|
23
25
|
onOpen?: (item: IntegrationItem) => void;
|
|
24
26
|
/** Handle upgrade click */
|
|
25
27
|
onUpgradeClick?: (item: IntegrationItem) => void;
|
|
28
|
+
/** Show empty state when no integrations available */
|
|
29
|
+
showEmptyState?: boolean;
|
|
26
30
|
}
|
|
27
31
|
export declare const PartnerIntegration: React.FC<PartnerIntegrationProps>;
|
|
28
32
|
export default PartnerIntegration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,eAAe,KACzB,qBAAqB,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAE3C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAE3C,4BAA4B;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAE5C,yBAAyB;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEzC,2BAA2B;IAC3B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEjD,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAmThE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Badge, BlockStack, Box, Button, Card, InlineStack, Text, Grid, SkeletonBodyText, EmptyState, } from "@shopify/polaris";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Badge, BlockStack, Box, Button, Card, InlineStack, Text, Grid, SkeletonBodyText, EmptyState, Tooltip, } from "@shopify/polaris";
|
|
3
3
|
import { ExternalIcon } from "@shopify/polaris-icons";
|
|
4
4
|
import { usePartnerIntegrations } from "../hooks/usePartnerIntegration";
|
|
5
5
|
import { useSDK } from "../core/SDKManager";
|
|
6
|
-
|
|
7
|
-
export const PartnerIntegration = ({ className = "", onManage, onInstall, onOpen, onUpgradeClick: _onUpgradeClick, // Keep for API compatibility
|
|
6
|
+
export const PartnerIntegration = ({ className = "", statusProvider, onManage, onInstall, onOpen, onUpgradeClick, showEmptyState = true,
|
|
8
7
|
// SDK options (optional)
|
|
9
8
|
shopInfo, locale, translations: translationOverrides, config, }) => {
|
|
10
|
-
// Use internal defaults
|
|
11
|
-
const { showEmptyState } = COMPONENT_DEFAULTS.partnerIntegration;
|
|
12
9
|
const { groups, loading, error } = usePartnerIntegrations();
|
|
13
10
|
const sdk = useSDK({ shopInfo, locale, translations: translationOverrides, config });
|
|
14
11
|
const translations = sdk.translations;
|
|
@@ -35,8 +32,42 @@ shopInfo, locale, translations: translationOverrides, config, }) => {
|
|
|
35
32
|
onInstall?.(item);
|
|
36
33
|
};
|
|
37
34
|
const renderIntegrationCard = (item) => {
|
|
38
|
-
//
|
|
35
|
+
// Get status from provider if available
|
|
36
|
+
const status = statusProvider?.(item);
|
|
39
37
|
const getBadgeInfo = () => {
|
|
38
|
+
// Check status provider first
|
|
39
|
+
if (status) {
|
|
40
|
+
if (status.isConnected === true) {
|
|
41
|
+
return {
|
|
42
|
+
text: translations.partnerIntegration?.active || "Active",
|
|
43
|
+
tone: "success",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (status.isConnected === false) {
|
|
47
|
+
return {
|
|
48
|
+
text: translations.partnerIntegration?.inactive || "Inactive",
|
|
49
|
+
tone: undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (status.isActive === true) {
|
|
53
|
+
return {
|
|
54
|
+
text: translations.partnerIntegration?.active || "Active",
|
|
55
|
+
tone: "success",
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (status.isPending) {
|
|
59
|
+
return {
|
|
60
|
+
text: "Pending",
|
|
61
|
+
tone: "warning",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (status.isActive === false) {
|
|
65
|
+
return {
|
|
66
|
+
text: translations.partnerIntegration?.inactive || "Inactive",
|
|
67
|
+
tone: undefined,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
40
71
|
// Fall back to button-based logic only if no status provider
|
|
41
72
|
if (item.button_manage_text && item.button_install_text) {
|
|
42
73
|
return {
|
|
@@ -57,7 +88,27 @@ shopInfo, locale, translations: translationOverrides, config, }) => {
|
|
|
57
88
|
width: "40px",
|
|
58
89
|
height: "40px",
|
|
59
90
|
borderRadius: "8px",
|
|
60
|
-
} })), _jsx(Box, { minHeight: "130px", children: _jsxs(BlockStack, { gap: "300", children: [_jsxs(BlockStack, { gap: "100", children: [_jsxs(InlineStack, { gap: "200", align: "start", children: [_jsx(Text, { as: "p", variant: "bodyLg", fontWeight: "bold", children: item.title }), badgeInfo && (_jsx(Badge, { tone: badgeInfo.tone, children: badgeInfo.text }))
|
|
91
|
+
} })), _jsx(Box, { minHeight: "130px", children: _jsxs(BlockStack, { gap: "300", children: [_jsxs(BlockStack, { gap: "100", children: [_jsxs(InlineStack, { gap: "200", align: "start", children: [_jsx(Text, { as: "p", variant: "bodyLg", fontWeight: "bold", children: item.title }), badgeInfo && (_jsx(Badge, { tone: badgeInfo.tone, children: badgeInfo.text })), status?.showUpgradeBadge && (_jsx(Tooltip, { content: status.upgradeBadgeTooltip || translations.partnerIntegration?.upgradeBadge?.upgradeBadgeTooltip || "Available from Unlimited plan", dismissOnMouseOut: true, children: _jsxs("div", { onClick: () => onUpgradeClick?.(item), style: {
|
|
92
|
+
cursor: "pointer",
|
|
93
|
+
display: "inline-flex",
|
|
94
|
+
alignItems: "center",
|
|
95
|
+
padding: "4px 6px",
|
|
96
|
+
gap: "4px",
|
|
97
|
+
borderRadius: "var(--p-border-radius-150)",
|
|
98
|
+
backgroundColor: status.upgradeBadgePlan === "pro"
|
|
99
|
+
? "#F0F2FF"
|
|
100
|
+
: "#FFF1E3",
|
|
101
|
+
color: status.upgradeBadgePlan === "pro"
|
|
102
|
+
? "#7126FF"
|
|
103
|
+
: "#4F4700",
|
|
104
|
+
fontSize: "12px",
|
|
105
|
+
fontWeight: 500,
|
|
106
|
+
}, children: [status.upgradeBadgeIcon && (_jsx("span", { style: {
|
|
107
|
+
display: "inline-flex",
|
|
108
|
+
alignItems: "center",
|
|
109
|
+
}, children: status.upgradeBadgeIcon })), _jsx("span", { style: {
|
|
110
|
+
fontSize: "13px",
|
|
111
|
+
}, children: status.upgradeBadgeText || translations.partnerIntegration?.upgradeBadge?.upgradeToUnlimited || "From Unlimited" })] }) }))] }), item.content && (_jsx(Text, { as: "p", variant: "bodyMd", children: item.content }))] }), _jsx(InlineStack, { gap: "200", children: status ? (_jsxs(_Fragment, { children: [item.button_install_text && (_jsx(Button, { icon: ExternalIcon, onClick: () => handleInstall(item), children: item.button_install_text })), item.button_manage_text && (_jsx(Button, { onClick: () => handleManage(item), disabled: item.key === "after_ship" || item.key === "aftership" ? (status.showUpgradeBadge === true) : false, children: item.button_manage_text }))] })) : (_jsxs(_Fragment, { children: [item.button_install_text && (_jsx(Button, { icon: ExternalIcon, onClick: () => handleInstall(item), children: item.button_install_text })), item.button_manage_text && (_jsx(Button, { onClick: () => handleManage(item), children: item.button_manage_text }))] })) })] }) })] }) }) }, `integration--${item.id || item.key}`));
|
|
61
112
|
};
|
|
62
113
|
// Loading state
|
|
63
114
|
if (loading) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartnerIntegration.js","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport {\n Badge,\n BlockStack,\n Box,\n Button,\n Card,\n InlineStack,\n Text,\n Grid,\n SkeletonBodyText,\n EmptyState,\n} from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { usePartnerIntegrations } from \"../hooks/usePartnerIntegration\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\nimport { COMPONENT_DEFAULTS } from \"../config/component-defaults\";\n\nexport type IntegrationStatusInfo = {\n isConnected?: boolean;\n isActive?: boolean;\n isPending?: boolean;\n showUpgradeBadge?: boolean;\n upgradeBadgeText?: string;\n upgradeBadgeIcon?: React.ReactNode;\n upgradeBadgeTooltip?: string;\n upgradeBadgePlan?: \"basic\" | \"pro\";\n};\n\nexport type IntegrationStatusProvider = (\n integration: IntegrationItem,\n) => IntegrationStatusInfo | undefined;\n\nexport interface PartnerIntegrationProps extends UseSDKOptions {\n /** Optional CSS class */\n className?: string;\n \n /** Handle manage action */\n onManage?: (item: IntegrationItem) => void;\n \n /** Handle install action */\n onInstall?: (item: IntegrationItem) => void;\n \n /** Handle open action */\n onOpen?: (item: IntegrationItem) => void;\n \n /** Handle upgrade click */\n onUpgradeClick?: (item: IntegrationItem) => void;\n}\n\nexport const PartnerIntegration: React.FC<PartnerIntegrationProps> = ({\n className = \"\",\n onManage,\n onInstall,\n onOpen,\n onUpgradeClick: _onUpgradeClick, // Keep for API compatibility\n // SDK options (optional)\n shopInfo,\n locale,\n translations: translationOverrides,\n config,\n}) => {\n // Use internal defaults\n const { showEmptyState } = COMPONENT_DEFAULTS.partnerIntegration;\n const { groups, loading, error } = usePartnerIntegrations();\n const sdk = useSDK({ shopInfo, locale, translations: translationOverrides, config });\n const translations = sdk.translations;\n\n const handleManage = (item: IntegrationItem) => {\n const url = item.button_manage_url;\n if (url) {\n if (url.startsWith(\"/\")) {\n onManage?.(item);\n } else {\n window.open(url, \"_blank\");\n onOpen?.(item);\n }\n } else {\n onManage?.(item);\n }\n };\n\n const handleInstall = (item: IntegrationItem) => {\n const url =\n item.button_install_link || item.button_install_url || item.app_url;\n if (url) {\n window.open(url, \"_blank\");\n }\n onInstall?.(item);\n };\n\n const renderIntegrationCard = (item: IntegrationItem) => {\n // SDK now handles status internally\n\n const getBadgeInfo = () => {\n\n // Fall back to button-based logic only if no status provider\n if (item.button_manage_text && item.button_install_text) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n\n if (item.button_manage_text && !item.button_install_text) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n\n return null;\n };\n\n const badgeInfo = getBadgeInfo();\n\n return (\n <Card key={`integration--${item.id || item.key}`}>\n <InlineStack gap=\"300\">\n <InlineStack gap=\"300\" wrap={false}>\n {item.icon_url && (\n <img\n src={item.icon_url}\n alt={item.title}\n style={{\n width: \"40px\",\n height: \"40px\",\n borderRadius: \"8px\",\n }}\n />\n )}\n <Box minHeight=\"130px\">\n <BlockStack gap=\"300\">\n <BlockStack gap=\"100\">\n <InlineStack gap=\"200\" align=\"start\">\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"bold\">\n {item.title}\n </Text>\n {badgeInfo && (\n <Badge tone={badgeInfo.tone}>{badgeInfo.text}</Badge>\n )}\n {/* Upgrade badge handled internally */}\n </InlineStack>\n {item.content && (\n <Text as=\"p\" variant=\"bodyMd\">\n {item.content}\n </Text>\n )}\n </BlockStack>\n <InlineStack gap=\"200\">\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n >\n {item.button_manage_text}\n </Button>\n )}\n </InlineStack>\n </BlockStack>\n </Box>\n </InlineStack>\n </InlineStack>\n </Card>\n );\n };\n\n // Loading state\n if (loading) {\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {[1, 2, 3].map((groupIndex) => (\n <BlockStack key={`skeleton-group-${groupIndex}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <SkeletonBodyText lines={1} />\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {[1, 2].map((cardIndex) => (\n <Grid.Cell key={`skeleton-card-${groupIndex}-${cardIndex}`}>\n <Card>\n <BlockStack gap=\"300\">\n <SkeletonBodyText lines={3} />\n </BlockStack>\n </Card>\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"Unable to load integrations\"\n image=\"\"\n >\n <p>Please try again later</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (groups.length === 0) {\n if (!showEmptyState) return null;\n\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"No integrations available\"\n image=\"\"\n >\n <p>Check back later for available integrations</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Render groups\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {groups.map((group) => (\n <BlockStack key={`integration-group--${group.key}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <Text as=\"h3\" variant=\"headingMd\" fontWeight=\"semibold\">\n {group.title}\n </Text>\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {group.items.map((item: any) => (\n <Grid.Cell key={`integration-cell--${item.id || item.key}`}>\n {renderIntegrationCard(item)}\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n};\n\nexport default PartnerIntegration;\n"]}
|
|
1
|
+
{"version":3,"file":"PartnerIntegration.js","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport {\n Badge,\n BlockStack,\n Box,\n Button,\n Card,\n InlineStack,\n Text,\n Grid,\n SkeletonBodyText,\n EmptyState,\n Tooltip,\n} from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { usePartnerIntegrations } from \"../hooks/usePartnerIntegration\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\n\nexport type IntegrationStatusInfo = {\n isConnected?: boolean;\n isActive?: boolean;\n isPending?: boolean;\n showUpgradeBadge?: boolean;\n upgradeBadgeText?: string;\n upgradeBadgeIcon?: React.ReactNode;\n upgradeBadgeTooltip?: string;\n upgradeBadgePlan?: \"basic\" | \"pro\";\n};\n\nexport type IntegrationStatusProvider = (\n integration: IntegrationItem,\n) => IntegrationStatusInfo | undefined;\n\nexport interface PartnerIntegrationProps extends UseSDKOptions {\n /** Optional CSS class */\n className?: string;\n \n /** Status provider for custom integration statuses */\n statusProvider?: IntegrationStatusProvider;\n \n /** Handle manage action */\n onManage?: (item: IntegrationItem) => void;\n \n /** Handle install action */\n onInstall?: (item: IntegrationItem) => void;\n \n /** Handle open action */\n onOpen?: (item: IntegrationItem) => void;\n \n /** Handle upgrade click */\n onUpgradeClick?: (item: IntegrationItem) => void;\n \n /** Show empty state when no integrations available */\n showEmptyState?: boolean;\n}\n\nexport const PartnerIntegration: React.FC<PartnerIntegrationProps> = ({\n className = \"\",\n statusProvider,\n onManage,\n onInstall,\n onOpen,\n onUpgradeClick,\n showEmptyState = true,\n // SDK options (optional)\n shopInfo,\n locale,\n translations: translationOverrides,\n config,\n}) => {\n const { groups, loading, error } = usePartnerIntegrations();\n const sdk = useSDK({ shopInfo, locale, translations: translationOverrides, config });\n const translations = sdk.translations;\n\n const handleManage = (item: IntegrationItem) => {\n const url = item.button_manage_url;\n if (url) {\n if (url.startsWith(\"/\")) {\n onManage?.(item);\n } else {\n window.open(url, \"_blank\");\n onOpen?.(item);\n }\n } else {\n onManage?.(item);\n }\n };\n\n const handleInstall = (item: IntegrationItem) => {\n const url =\n item.button_install_link || item.button_install_url || item.app_url;\n if (url) {\n window.open(url, \"_blank\");\n }\n onInstall?.(item);\n };\n\n const renderIntegrationCard = (item: IntegrationItem) => {\n // Get status from provider if available\n const status = statusProvider?.(item);\n\n const getBadgeInfo = () => {\n // Check status provider first\n if (status) {\n if (status.isConnected === true) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n if (status.isConnected === false) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n if (status.isActive === true) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n if (status.isPending) {\n return {\n text: \"Pending\",\n tone: \"warning\" as const,\n };\n }\n if (status.isActive === false) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n }\n\n // Fall back to button-based logic only if no status provider\n if (item.button_manage_text && item.button_install_text) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n\n if (item.button_manage_text && !item.button_install_text) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n\n return null;\n };\n\n const badgeInfo = getBadgeInfo();\n\n return (\n <Card key={`integration--${item.id || item.key}`}>\n <InlineStack gap=\"300\">\n <InlineStack gap=\"300\" wrap={false}>\n {item.icon_url && (\n <img\n src={item.icon_url}\n alt={item.title}\n style={{\n width: \"40px\",\n height: \"40px\",\n borderRadius: \"8px\",\n }}\n />\n )}\n <Box minHeight=\"130px\">\n <BlockStack gap=\"300\">\n <BlockStack gap=\"100\">\n <InlineStack gap=\"200\" align=\"start\">\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"bold\">\n {item.title}\n </Text>\n {badgeInfo && (\n <Badge tone={badgeInfo.tone}>{badgeInfo.text}</Badge>\n )}\n {/* Upgrade Badge - controlled by status provider */}\n {status?.showUpgradeBadge && (\n <Tooltip\n content={status.upgradeBadgeTooltip || (translations.partnerIntegration?.upgradeBadge as any)?.upgradeBadgeTooltip || \"Available from Unlimited plan\"}\n dismissOnMouseOut\n >\n <div\n onClick={() => onUpgradeClick?.(item)}\n style={{\n cursor: \"pointer\",\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"4px 6px\",\n gap: \"4px\",\n borderRadius: \"var(--p-border-radius-150)\",\n backgroundColor:\n status.upgradeBadgePlan === \"pro\"\n ? \"#F0F2FF\"\n : \"#FFF1E3\",\n color:\n status.upgradeBadgePlan === \"pro\"\n ? \"#7126FF\"\n : \"#4F4700\",\n fontSize: \"12px\",\n fontWeight: 500,\n }}\n >\n {status.upgradeBadgeIcon && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n {status.upgradeBadgeIcon}\n </span>\n )}\n <span style={{\n fontSize: \"13px\",\n }}>{status.upgradeBadgeText || translations.partnerIntegration?.upgradeBadge?.upgradeToUnlimited || \"From Unlimited\"}</span>\n </div>\n </Tooltip>\n )}\n </InlineStack>\n {item.content && (\n <Text as=\"p\" variant=\"bodyMd\">\n {item.content}\n </Text>\n )}\n </BlockStack>\n <InlineStack gap=\"200\">\n {status ? (\n <>\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n disabled={item.key === \"after_ship\" || item.key === \"aftership\" ? (status.showUpgradeBadge === true) : false}\n >\n {item.button_manage_text}\n </Button>\n )}\n </>\n ) : (\n <>\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n >\n {item.button_manage_text}\n </Button>\n )}\n </>\n )}\n </InlineStack>\n </BlockStack>\n </Box>\n </InlineStack>\n </InlineStack>\n </Card>\n );\n };\n\n // Loading state\n if (loading) {\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {[1, 2, 3].map((groupIndex) => (\n <BlockStack key={`skeleton-group-${groupIndex}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <SkeletonBodyText lines={1} />\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {[1, 2].map((cardIndex) => (\n <Grid.Cell key={`skeleton-card-${groupIndex}-${cardIndex}`}>\n <Card>\n <BlockStack gap=\"300\">\n <SkeletonBodyText lines={3} />\n </BlockStack>\n </Card>\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"Unable to load integrations\"\n image=\"\"\n >\n <p>Please try again later</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (groups.length === 0) {\n if (!showEmptyState) return null;\n\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"No integrations available\"\n image=\"\"\n >\n <p>Check back later for available integrations</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Render groups\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {groups.map((group) => (\n <BlockStack key={`integration-group--${group.key}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <Text as=\"h3\" variant=\"headingMd\" fontWeight=\"semibold\">\n {group.title}\n </Text>\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {group.items.map((item: any) => (\n <Grid.Cell key={`integration-cell--${item.id || item.key}`}>\n {renderIntegrationCard(item)}\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n};\n\nexport default PartnerIntegration;\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,12 +11,14 @@ export { PopupBanner } from "./components/PopupBanner";
|
|
|
11
11
|
export { PartnerIntegration } from "./components/PartnerIntegration";
|
|
12
12
|
export { PartnerList } from "./components/PartnerList";
|
|
13
13
|
export { FloatingCard } from "./components/FloatingCard";
|
|
14
|
+
export { FloatingCardContainer } from "./components/FloatingCardContainer";
|
|
14
15
|
export type { TopBannerProps } from "./components/TopBanner";
|
|
15
16
|
export type { WhatsNewProps } from "./components/WhatsNew";
|
|
16
17
|
export type { GrowAppsProps } from "./components/GrowApps";
|
|
17
18
|
export type { PopupBannerProps } from "./components/PopupBanner";
|
|
18
19
|
export type { PartnerIntegrationProps, IntegrationStatusInfo } from "./components/PartnerIntegration";
|
|
19
20
|
export type { PartnerListProps } from "./components/PartnerList";
|
|
21
|
+
export type { FloatingCardContainerProps } from "./components/FloatingCardContainer";
|
|
20
22
|
export { SDKManager } from "./core/SDKManager";
|
|
21
23
|
export { useSDK } from "./core/SDKManager";
|
|
22
24
|
export type { UseSDKOptions } from "./core/SDKManager";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACtG,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAQrF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG5E,YAAY,EACV,eAAe,EACf,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,oCAAoC,CAAC;AAO5C,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ export { PopupBanner } from "./components/PopupBanner";
|
|
|
15
15
|
export { PartnerIntegration } from "./components/PartnerIntegration";
|
|
16
16
|
export { PartnerList } from "./components/PartnerList";
|
|
17
17
|
export { FloatingCard } from "./components/FloatingCard";
|
|
18
|
+
export { FloatingCardContainer } from "./components/FloatingCardContainer";
|
|
18
19
|
// FloatingCard props defined inline in component
|
|
19
20
|
// ============================================
|
|
20
21
|
// ADVANCED CUSTOMIZATION (Optional)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+CAA+C;AAC/C,yCAAyC;AACzC,+CAA+C;AAE/C,2DAA2D;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+CAA+C;AAC/C,yCAAyC;AACzC,+CAA+C;AAE/C,2DAA2D;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAU3E,iDAAiD;AAEjD,+CAA+C;AAC/C,oCAAoC;AACpC,+CAA+C;AAE/C,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAW3C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,oCAAoC,CAAC;AAe5C,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,6CAA6C;AAC7C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAG7B,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCE","sourcesContent":["/**\n * @trustshop/shopify-inapp-components\n *\n * Provider-less component architecture for Shopify in-app dashboards\n * Components work standalone without any provider wrapper required\n */\n\n// ============================================\n// PRIMARY EXPORTS - Component-Driven API\n// ============================================\n\n// Main UI components (auto-initialize, no provider needed)\nexport { TopBanner } from \"./components/TopBanner\";\nexport { WhatsNew } from \"./components/WhatsNew\";\nexport { GrowApps } from \"./components/GrowApps\";\nexport { PopupBanner } from \"./components/PopupBanner\";\nexport { PartnerIntegration } from \"./components/PartnerIntegration\";\nexport { PartnerList } from \"./components/PartnerList\";\nexport { FloatingCard } from \"./components/FloatingCard\";\nexport { FloatingCardContainer } from \"./components/FloatingCardContainer\";\n\n// Component prop types\nexport type { TopBannerProps } from \"./components/TopBanner\";\nexport type { WhatsNewProps } from \"./components/WhatsNew\";\nexport type { GrowAppsProps } from \"./components/GrowApps\";\nexport type { PopupBannerProps } from \"./components/PopupBanner\";\nexport type { PartnerIntegrationProps, IntegrationStatusInfo } from \"./components/PartnerIntegration\";\nexport type { PartnerListProps } from \"./components/PartnerList\";\nexport type { FloatingCardContainerProps } from \"./components/FloatingCardContainer\";\n// FloatingCard props defined inline in component\n\n// ============================================\n// ADVANCED CUSTOMIZATION (Optional)\n// ============================================\n\n// SDK Manager for advanced control (rarely needed)\nexport { SDKManager } from \"./core/SDKManager\";\nexport { useSDK } from \"./core/SDKManager\";\nexport type { UseSDKOptions } from \"./core/SDKManager\";\n\n// Configuration types\nexport type { ShopInfo, SDKInternalConfig } from \"./config/internal-config\";\n\n// Translation types and utilities\nexport type {\n SupportedLocale,\n SDKTranslations,\n} from \"./translations/translation-manager\";\nexport {\n loadTranslations,\n getTranslations,\n normalizeLocale,\n SUPPORTED_LOCALES,\n LOCALE_METADATA,\n DEFAULT_LOCALE,\n} from \"./translations/translation-manager\";\n\n// ============================================\n// DATA TYPES\n// ============================================\n\n// Core data types\nexport type { BannerItem } from \"./types/banner\";\nexport type { ArticleItem } from \"./types/article\";\nexport type { ProductUpdateItem } from \"./types/product-update\";\nexport type { GrowApp, DashboardConfig } from \"./types/dashboard\";\nexport type { IntegrationItem } from \"./types/integration\";\nexport type { PartnerItem } from \"./types/partner\";\nexport type { FloatingCardData } from \"./components/FloatingCard\";\n\n// ============================================\n// UTILITIES (Optional)\n// ============================================\n\n// CLS monitoring (for performance debugging)\nexport {\n CLSMonitor,\n startCLSMonitoring,\n stopCLSMonitoring,\n getCLSMetrics,\n} from \"./utils/cls-monitor\";\nexport type { CLSMetrics, CLSMonitorOptions } from \"./utils/cls-monitor\";\n\n// Campaign tracking\nexport {\n trackCampaignView,\n trackCampaignClick,\n clearViewTrackingCache,\n} from \"./utils/campaignTracking\";\nexport { getSessionId, clearSession, hasSession } from \"./utils/sessionManager\";\nexport { useCampaignTracking, useCampaignVisibility } from \"./hooks/useCampaignTracking\";\nexport { useVisibleFloatingCards } from \"./hooks/useFloatingCards\";\n\n\n// ============================================\n// RECOMMENDED USAGE\n// ============================================\n\n/*\n\n✨ SIMPLE USAGE (Recommended)\n\nimport { TopBanner, WhatsNew, GrowApps } from '@trustshop/shopify-inapp-components';\n\nexport default function Dashboard() {\n return (\n <>\n <TopBanner />\n <WhatsNew />\n <GrowApps />\n </>\n );\n}\n\n🎨 WITH CUSTOMIZATION\n\nimport { TopBanner, WhatsNew } from '@trustshop/shopify-inapp-components';\n\nexport default function Dashboard() {\n return (\n <>\n <TopBanner \n shopInfo={{ id: \"12345\", domain: \"shop.myshopify.com\" }}\n config={{ apiUrl: \"/api/dashboard\" }}\n onClose={() => console.log('Banner closed')}\n />\n <WhatsNew \n locale=\"fr\"\n onProductUpdateClick={(update) => handleUpdate(update)}\n />\n </>\n );\n}\n\n*/\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/types/translations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,aAAa,CAAC,EAAE;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE;YACb,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/types/translations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,aAAa,CAAC,EAAE;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE;YACb,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;SAC9B,CAAC;KACH,CAAA;CACF;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.js","sourceRoot":"","sources":["../../src/types/translations.ts"],"names":[],"mappings":"","sourcesContent":["export interface SDKTranslations {\n whatsNew?: {\n title?: string;\n tabs?: {\n article?: string;\n productUpdate?: string;\n };\n buttonViewAll?: {\n article?: string;\n productUpdate?: string;\n };\n noData?: string;\n };\n growApps?: {\n title?: string;\n subtitle?: string;\n exploreApps?: string;\n install?: string;\n installed?: string;\n dismiss?: string;\n noData?: string;\n };\n banner?: {\n learnMore?: string;\n dismiss?: string;\n };\n partnerIntegration?: {\n title?: string;\n reviewSourcesTitle?: string;\n postPurchaseTitle?: string;\n seoSnippetsTitle?: string;\n noData?: string;\n noDataMessage?: string;\n errorTitle?: string;\n errorMessage?: string;\n install?: string;\n installed?: string;\n manage?: string;\n open?: string;\n connect?: string;\n connected?: string;\n inactive?: string;\n active?: string;\n pending?: string;\n upgradeBadge?: {\n upgradeToBasic?: string;\n upgradeToPro?: string;\n upgradeToUnlimited?: string;\n fromBasic?: string;\n fromPro?: string;\n fromUnlimited?: string;\n upgrade?: string;\n };\n }\n}\n\nexport type TranslationKey = keyof SDKTranslations;"]}
|
|
1
|
+
{"version":3,"file":"translations.js","sourceRoot":"","sources":["../../src/types/translations.ts"],"names":[],"mappings":"","sourcesContent":["export interface SDKTranslations {\n whatsNew?: {\n title?: string;\n tabs?: {\n article?: string;\n productUpdate?: string;\n };\n buttonViewAll?: {\n article?: string;\n productUpdate?: string;\n };\n noData?: string;\n };\n growApps?: {\n title?: string;\n subtitle?: string;\n exploreApps?: string;\n install?: string;\n installed?: string;\n dismiss?: string;\n noData?: string;\n };\n banner?: {\n learnMore?: string;\n dismiss?: string;\n };\n partnerIntegration?: {\n title?: string;\n reviewSourcesTitle?: string;\n postPurchaseTitle?: string;\n seoSnippetsTitle?: string;\n noData?: string;\n noDataMessage?: string;\n errorTitle?: string;\n errorMessage?: string;\n install?: string;\n installed?: string;\n manage?: string;\n open?: string;\n connect?: string;\n connected?: string;\n inactive?: string;\n active?: string;\n pending?: string;\n upgradeBadge?: {\n upgradeToBasic?: string;\n upgradeToPro?: string;\n upgradeToUnlimited?: string;\n fromBasic?: string;\n fromPro?: string;\n fromUnlimited?: string;\n upgrade?: string;\n upgradeBadgeTooltip?: string;\n };\n }\n}\n\nexport type TranslationKey = keyof SDKTranslations;"]}
|