@datlv-trustshop/shopify-inapp-components 0.2.8 → 0.2.9
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/AppList.d.ts +1 -0
- package/dist/components/AppList.d.ts.map +1 -0
- package/dist/components/AppList.js +1 -0
- package/dist/components/AppList.js.map +1 -0
- package/dist/components/ArticleList.d.ts +1 -0
- package/dist/components/ArticleList.d.ts.map +1 -0
- package/dist/components/ArticleList.js +1 -0
- package/dist/components/ArticleList.js.map +1 -0
- package/dist/components/ArticleSlide.d.ts +1 -0
- package/dist/components/ArticleSlide.d.ts.map +1 -0
- package/dist/components/ArticleSlide.js +1 -0
- package/dist/components/ArticleSlide.js.map +1 -0
- package/dist/components/FloatingCard.d.ts +1 -0
- package/dist/components/FloatingCard.d.ts.map +1 -0
- package/dist/components/FloatingCard.js +5 -4
- package/dist/components/FloatingCard.js.map +1 -0
- package/dist/components/FooterBanner.d.ts +1 -0
- package/dist/components/FooterBanner.d.ts.map +1 -0
- package/dist/components/FooterBanner.js +1 -0
- package/dist/components/FooterBanner.js.map +1 -0
- package/dist/components/GrowApps.d.ts +6 -6
- package/dist/components/GrowApps.d.ts.map +1 -0
- package/dist/components/GrowApps.js +11 -3
- package/dist/components/GrowApps.js.map +1 -0
- package/dist/components/ImageLoading.d.ts +1 -0
- package/dist/components/ImageLoading.d.ts.map +1 -0
- package/dist/components/ImageLoading.js +1 -0
- package/dist/components/ImageLoading.js.map +1 -0
- package/dist/components/PartnerIntegration.d.ts +8 -8
- package/dist/components/PartnerIntegration.d.ts.map +1 -0
- package/dist/components/PartnerIntegration.js +15 -76
- package/dist/components/PartnerIntegration.js.map +1 -0
- package/dist/components/PartnerList.d.ts +1 -0
- package/dist/components/PartnerList.d.ts.map +1 -0
- package/dist/components/PartnerList.js +1 -0
- package/dist/components/PartnerList.js.map +1 -0
- package/dist/components/PopupBanner.d.ts +4 -4
- package/dist/components/PopupBanner.d.ts.map +1 -0
- package/dist/components/PopupBanner.js +5 -1
- package/dist/components/PopupBanner.js.map +1 -0
- package/dist/components/TopBanner.d.ts +7 -7
- package/dist/components/TopBanner.d.ts.map +1 -0
- package/dist/components/TopBanner.js +15 -30
- package/dist/components/TopBanner.js.map +1 -0
- package/dist/components/WhatsNew.d.ts +6 -7
- package/dist/components/WhatsNew.d.ts.map +1 -0
- package/dist/components/WhatsNew.js +23 -25
- package/dist/components/WhatsNew.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inlineStyles.d.ts +1 -0
- package/dist/components/inlineStyles.d.ts.map +1 -0
- package/dist/components/inlineStyles.js +1 -0
- package/dist/components/inlineStyles.js.map +1 -0
- package/dist/components/styles.d.ts +1 -0
- package/dist/components/styles.d.ts.map +1 -0
- package/dist/components/styles.js +1 -0
- package/dist/components/styles.js.map +1 -0
- package/dist/config/component-defaults.d.ts +71 -0
- package/dist/config/component-defaults.d.ts.map +1 -0
- package/dist/config/component-defaults.js +106 -0
- package/dist/config/component-defaults.js.map +1 -0
- package/dist/config/internal-config.d.ts +28 -0
- package/dist/config/internal-config.d.ts.map +1 -0
- package/dist/config/internal-config.js +100 -0
- package/dist/config/internal-config.js.map +1 -0
- package/dist/core/SDKManager.d.ts +230 -0
- package/dist/core/SDKManager.d.ts.map +1 -0
- package/dist/core/SDKManager.js +380 -0
- package/dist/core/SDKManager.js.map +1 -0
- package/dist/core/adapter.d.ts +1 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +1 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/engine.d.ts +1 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +1 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/fetcher.d.ts +1 -0
- package/dist/core/fetcher.d.ts.map +1 -0
- package/dist/core/fetcher.js +1 -0
- package/dist/core/fetcher.js.map +1 -0
- package/dist/core/global-manager.d.ts +1 -0
- package/dist/core/global-manager.d.ts.map +1 -0
- package/dist/core/global-manager.js +1 -0
- package/dist/core/global-manager.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useApps.d.ts +2 -1
- package/dist/hooks/useApps.d.ts.map +1 -0
- package/dist/hooks/useApps.js +8 -15
- package/dist/hooks/useApps.js.map +1 -0
- package/dist/hooks/useArticles.d.ts +1 -0
- package/dist/hooks/useArticles.d.ts.map +1 -0
- package/dist/hooks/useArticles.js +14 -18
- package/dist/hooks/useArticles.js.map +1 -0
- package/dist/hooks/useBanner.d.ts +2 -1
- package/dist/hooks/useBanner.d.ts.map +1 -0
- package/dist/hooks/useBanner.js +14 -15
- package/dist/hooks/useBanner.js.map +1 -0
- package/dist/hooks/useCampaignTracking.d.ts +1 -0
- package/dist/hooks/useCampaignTracking.d.ts.map +1 -0
- package/dist/hooks/useCampaignTracking.js +1 -0
- package/dist/hooks/useCampaignTracking.js.map +1 -0
- package/dist/hooks/useDashboard.d.ts +1 -0
- package/dist/hooks/useDashboard.d.ts.map +1 -0
- package/dist/hooks/useDashboard.js +12 -9
- package/dist/hooks/useDashboard.js.map +1 -0
- package/dist/hooks/useFloatingCardActions.d.ts +1 -0
- package/dist/hooks/useFloatingCardActions.d.ts.map +1 -0
- package/dist/hooks/useFloatingCardActions.js +1 -0
- package/dist/hooks/useFloatingCardActions.js.map +1 -0
- package/dist/hooks/useFloatingCardEngine.d.ts +1 -0
- package/dist/hooks/useFloatingCardEngine.d.ts.map +1 -0
- package/dist/hooks/useFloatingCardEngine.js +1 -0
- package/dist/hooks/useFloatingCardEngine.js.map +1 -0
- package/dist/hooks/useFloatingCards.d.ts +3 -2
- package/dist/hooks/useFloatingCards.d.ts.map +1 -0
- package/dist/hooks/useFloatingCards.js +37 -12
- package/dist/hooks/useFloatingCards.js.map +1 -0
- package/dist/hooks/useGrowApps.d.ts +1 -0
- package/dist/hooks/useGrowApps.d.ts.map +1 -0
- package/dist/hooks/useGrowApps.js +1 -0
- package/dist/hooks/useGrowApps.js.map +1 -0
- package/dist/hooks/usePartnerIntegration.d.ts +5 -4
- package/dist/hooks/usePartnerIntegration.d.ts.map +1 -0
- package/dist/hooks/usePartnerIntegration.js +10 -38
- package/dist/hooks/usePartnerIntegration.js.map +1 -0
- package/dist/hooks/useTranslations.d.ts +1 -0
- package/dist/hooks/useTranslations.d.ts.map +1 -0
- package/dist/hooks/useTranslations.js +5 -3
- package/dist/hooks/useTranslations.js.map +1 -0
- package/dist/hooks/useWhatsNew.d.ts +1 -0
- package/dist/hooks/useWhatsNew.d.ts.map +1 -0
- package/dist/hooks/useWhatsNew.js +12 -11
- package/dist/hooks/useWhatsNew.js.map +1 -0
- package/dist/index.d.ts +38 -22
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -22
- package/dist/index.js.map +1 -0
- package/dist/translations/default.d.ts +1 -0
- package/dist/translations/default.d.ts.map +1 -0
- package/dist/translations/default.js +1 -0
- package/dist/translations/default.js.map +1 -0
- package/dist/translations/locales/cn.json +39 -0
- package/dist/translations/locales/de.json +39 -0
- package/dist/translations/locales/dk.json +39 -0
- package/dist/translations/locales/en.json +39 -0
- package/dist/translations/locales/es.json +39 -0
- package/dist/translations/locales/fr.json +39 -0
- package/dist/translations/locales/ie.json +39 -0
- package/dist/translations/locales/in.json +39 -0
- package/dist/translations/locales/it.json +39 -0
- package/dist/translations/locales/jp.json +39 -0
- package/dist/translations/locales/nl.json +39 -0
- package/dist/translations/locales/nz.json +39 -0
- package/dist/translations/locales/pt.json +39 -0
- package/dist/translations/locales/se.json +39 -0
- package/dist/translations/locales/vi.json +39 -0
- package/dist/translations/translation-manager.d.ts +89 -0
- package/dist/translations/translation-manager.d.ts.map +1 -0
- package/dist/translations/translation-manager.js +239 -0
- package/dist/translations/translation-manager.js.map +1 -0
- package/dist/types/app.d.ts +1 -0
- package/dist/types/app.d.ts.map +1 -0
- package/dist/types/app.js +1 -0
- package/dist/types/app.js.map +1 -0
- package/dist/types/article.d.ts +1 -0
- package/dist/types/article.d.ts.map +1 -0
- package/dist/types/article.js +1 -0
- package/dist/types/article.js.map +1 -0
- package/dist/types/banner.d.ts +1 -0
- package/dist/types/banner.d.ts.map +1 -0
- package/dist/types/banner.js +1 -0
- package/dist/types/banner.js.map +1 -0
- package/dist/types/component-props.d.ts +140 -0
- package/dist/types/component-props.d.ts.map +1 -0
- package/dist/types/component-props.js +6 -0
- package/dist/types/component-props.js.map +1 -0
- package/dist/types/dashboard.d.ts +1 -0
- package/dist/types/dashboard.d.ts.map +1 -0
- package/dist/types/dashboard.js +1 -0
- package/dist/types/dashboard.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/integration.d.ts +1 -0
- package/dist/types/integration.d.ts.map +1 -0
- package/dist/types/integration.js +1 -0
- package/dist/types/integration.js.map +1 -0
- package/dist/types/partner.d.ts +1 -0
- package/dist/types/partner.d.ts.map +1 -0
- package/dist/types/partner.js +1 -0
- package/dist/types/partner.js.map +1 -0
- package/dist/types/product-update.d.ts +1 -0
- package/dist/types/product-update.d.ts.map +1 -0
- package/dist/types/product-update.js +1 -0
- package/dist/types/product-update.js.map +1 -0
- package/dist/types/translations.d.ts +1 -0
- package/dist/types/translations.d.ts.map +1 -0
- package/dist/types/translations.js +1 -0
- package/dist/types/translations.js.map +1 -0
- package/dist/utils/campaignTracking.d.ts +1 -0
- package/dist/utils/campaignTracking.d.ts.map +1 -0
- package/dist/utils/campaignTracking.js +1 -0
- package/dist/utils/campaignTracking.js.map +1 -0
- package/dist/utils/cls-monitor.d.ts +1 -0
- package/dist/utils/cls-monitor.d.ts.map +1 -0
- package/dist/utils/cls-monitor.js +1 -0
- package/dist/utils/cls-monitor.js.map +1 -0
- package/dist/utils/injectStyles.d.ts +1 -0
- package/dist/utils/injectStyles.d.ts.map +1 -0
- package/dist/utils/injectStyles.js +1 -0
- package/dist/utils/injectStyles.js.map +1 -0
- package/dist/utils/sessionManager.d.ts +1 -0
- package/dist/utils/sessionManager.d.ts.map +1 -0
- package/dist/utils/sessionManager.js +1 -0
- package/dist/utils/sessionManager.js.map +1 -0
- package/package.json +4 -3
- package/dist/provider/DashboardProvider.d.ts +0 -36
- package/dist/provider/DashboardProvider.js +0 -200
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WhatsNew.js","sourceRoot":"","sources":["../../src/components/WhatsNew.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useEffect, useMemo } from \"react\";\nimport {\n Button,\n Tabs,\n Text,\n BlockStack,\n InlineStack,\n Box,\n Card,\n SkeletonBodyText,\n SkeletonThumbnail,\n} from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { ArticleList } from \"./ArticleList\";\nimport ImageLoading from \"./ImageLoading\";\nimport { useArticles, useWhatsNew } from \"../hooks\";\nimport { useTranslation } from \"../hooks/useTranslations\";\nimport { ArticleItem, ProductUpdateItem } from \"../types\";\nimport { sdkStyles, mergeStyles } from \"./styles\";\nimport { COMPONENT_DEFAULTS } from \"../config/component-defaults\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\n\n// Fixed dimensions to prevent CLS - reduced to avoid excessive white space\nconst CONTAINER_MIN_HEIGHT = 300; // Reduced from 450\n\nexport interface WhatsNewProps extends UseSDKOptions {\n /** Optional CSS class */\n className?: string;\n \n /** Handle product update clicks */\n onProductUpdateClick?: (update: ProductUpdateItem) => void;\n \n /** Handle article clicks */\n onArticleClick?: (article: ArticleItem) => void;\n}\n\nexport const WhatsNew: React.FC<WhatsNewProps> = ({\n className = \"\",\n onProductUpdateClick,\n onArticleClick,\n // SDK options (optional)\n shopInfo,\n locale,\n translations,\n config,\n}) => {\n // Connect to SDK Manager (auto-initializes)\n // @ts-ignore - Will be used in future refactoring\n const _sdk = useSDK({ shopInfo, locale, translations, config });\n \n // Use internal defaults\n const { \n maxUpdates,\n showNavigation,\n showViewAllButton,\n } = COMPONENT_DEFAULTS.whatsNew;\n const [productUpdateIndex, setProductUpdateIndex] = useState(0);\n const [articleIndex, setArticleIndex] = useState(0);\n const [selectedTab, setSelectedTab] = useState(0);\n const [isMobile, setIsMobile] = useState(false);\n const [isContentReady, setIsContentReady] = useState(false);\n const [touchDelta, setTouchDelta] = useState(0);\n const [isSwiping, setIsSwiping] = useState(false);\n\n const touchStartX = useRef<number | null>(null);\n const touchEndX = useRef<number | null>(null);\n const swiping = useRef(false);\n const slideContainerRef = useRef<HTMLDivElement>(null);\n\n const articles = useArticles();\n const whatsNew = useWhatsNew();\n const t = useTranslation('whatsNew');\n\n const limitedUpdates = useMemo(() => \n whatsNew.updates.slice(0, maxUpdates), \n [whatsNew.updates, maxUpdates]\n );\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n handleResize();\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n // Mark content as ready when data loads\n useEffect(() => {\n if (limitedUpdates.length > 0 || articlesList.length > 0) {\n requestAnimationFrame(() => {\n setIsContentReady(true);\n });\n }\n }, [limitedUpdates.length, articles.articles.length]);\n \n const articlesList = articles.articles;\n\n const nextSlide = () => {\n if (selectedTab === 0) {\n setProductUpdateIndex((prevIndex) => {\n const newIndex = Math.min(prevIndex + 1, limitedUpdates.length - 1);\n return newIndex;\n });\n } else {\n setArticleIndex((prevIndex) => {\n if (isMobile) {\n const newIndex = Math.min(prevIndex + 1, articlesList.length - 1);\n return newIndex;\n } else {\n const visibleItems = 3;\n const maxIndex = Math.max(0, articlesList.length - visibleItems);\n const newIndex = Math.min(prevIndex + 1, maxIndex);\n return newIndex;\n }\n });\n }\n };\n\n const prevSlide = () => {\n if (selectedTab === 0) {\n setProductUpdateIndex((prevIndex) => {\n const newIndex = Math.max(prevIndex - 1, 0);\n return newIndex;\n });\n } else {\n setArticleIndex((prevIndex) => {\n const newIndex = Math.max(prevIndex - 1, 0);\n return newIndex;\n });\n }\n };\n\n const handleTouchStart = (e: React.TouchEvent) => {\n touchStartX.current = e.touches[0].clientX;\n swiping.current = true;\n setIsSwiping(true);\n setTouchDelta(0);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!swiping.current || touchStartX.current === null) return;\n touchEndX.current = e.touches[0].clientX;\n const delta = touchEndX.current - touchStartX.current;\n setTouchDelta(delta);\n };\n\n const handleTouchEnd = () => {\n if (!swiping.current) return;\n\n const swipeThreshold = 50;\n const diff = (touchStartX.current || 0) - (touchEndX.current || 0);\n\n if (Math.abs(diff) > swipeThreshold) {\n if (diff > 0) {\n nextSlide();\n } else {\n prevSlide();\n }\n }\n\n swiping.current = false;\n touchStartX.current = null;\n touchEndX.current = null;\n setIsSwiping(false);\n setTouchDelta(0);\n };\n\n const handleProductUpdateClick = (update: ProductUpdateItem) => {\n const tryUrl = update.button_try_url || update.link;\n\n if (update.id === \"feature_up_vote\") {\n window.dispatchEvent(\n new CustomEvent(\"openFeatureBoard\", {\n detail: { source: \"whatsnew\" },\n }),\n );\n onProductUpdateClick?.(update);\n return;\n }\n\n if (tryUrl && tryUrl !== \"modal\") {\n if (tryUrl.startsWith(\"/\")) {\n // Internal navigation - use SDK default behavior\n const currentUrl = window.location.href;\n const shopifyAdminMatch = currentUrl.match(\n /https:\\/\\/admin\\.shopify\\.com\\/store\\/([^\\/]+)\\/apps\\/([^\\/]+)/,\n );\n\n if (shopifyAdminMatch) {\n const [, storeName, appName] = shopifyAdminMatch;\n const shopifyAppUrl = `https://admin.shopify.com/store/${storeName}/apps/${appName}${tryUrl}`;\n window.location.href = shopifyAppUrl;\n } else {\n window.location.href = tryUrl;\n }\n } else if (\n tryUrl.startsWith(\"http://\") ||\n tryUrl.startsWith(\"https://\")\n ) {\n window.open(tryUrl, \"_blank\");\n }\n } else if (tryUrl === \"modal\") {\n // console.log(\"Modal action for:\", update.id);\n }\n\n onProductUpdateClick?.(update);\n };\n\n const handleArticleClick = (article: ArticleItem) => {\n if (article.link) {\n window.open(article.link, \"_blank\");\n }\n onArticleClick?.(article);\n };\n\n const handleViewAllUpdates = () => {\n // Use SDK default behavior\n window.open(\"https://trust1.io/updates/\", \"_blank\");\n };\n\n const handleViewAllArticles = () => {\n // Use SDK default behavior\n window.open(\"https://trust1.io/blog/\", \"_blank\");\n };\n\n const tabs = [\n { id: \"product-update\", content: t.tabs?.productUpdate || \"Product Updates\" },\n { id: \"article\", content: t.tabs?.article || \"Articles\" },\n ];\n\n const isPrevDisabled =\n selectedTab === 0 ? productUpdateIndex === 0 : articleIndex === 0;\n const isNextDisabled =\n selectedTab === 0\n ? productUpdateIndex === limitedUpdates.length - 1\n : (() => {\n if (isMobile) {\n return articleIndex === articlesList.length - 1;\n } else {\n const visibleItems = 3;\n const maxIndex = Math.max(0, articlesList.length - visibleItems);\n return articleIndex >= maxIndex;\n }\n })();\n\n // Show skeleton while loading\n if (!isContentReady) {\n return (\n <div style={{ ...sdkStyles.dashboardWhatsNew, minHeight: `${CONTAINER_MIN_HEIGHT}px` }} className={className}>\n <Card>\n <BlockStack gap=\"400\">\n <BlockStack gap=\"100\">\n <SkeletonBodyText lines={1} />\n <InlineStack gap=\"300\" blockAlign=\"center\" align=\"space-between\">\n <div style={{ width: \"200px\" }}>\n <SkeletonBodyText lines={1} />\n </div>\n </InlineStack>\n </BlockStack>\n <Box>\n <BlockStack gap=\"400\">\n <SkeletonThumbnail size=\"large\" />\n <SkeletonBodyText lines={3} />\n </BlockStack>\n </Box>\n </BlockStack>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (limitedUpdates.length === 0 && articlesList.length === 0) {\n return (\n <div style={{ ...sdkStyles.dashboardWhatsNew, minHeight: `${CONTAINER_MIN_HEIGHT}px` }} className={className}>\n <Card>\n <BlockStack gap=\"400\">\n <Text variant=\"bodyMd\" tone=\"subdued\" as=\"p\">\n {t.noData || \"No updates available\"}\n </Text>\n </BlockStack>\n </Card>\n </div>\n );\n }\n\n const mobileStyles = isMobile\n ? {\n slidesContainer: {\n overflow: \"auto\",\n scrollSnapType: \"x mandatory\",\n WebkitOverflowScrolling: \"touch\" as any,\n scrollbarWidth: \"none\" as const,\n msOverflowStyle: \"none\" as const,\n },\n slidesWrapper: {\n scrollSnapAlign: \"start\" as const,\n },\n slideBox: {\n scrollSnapAlign: \"center\" as const,\n flex: \"0 0 85%\",\n maxWidth: \"85%\",\n minHeight: \"280px\",\n },\n slideImage: {\n display: \"none\",\n },\n hideScrollbar: {\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n }\n : {};\n\n return (\n <div style={mergeStyles(sdkStyles.dashboardWhatsNew)} className={className}>\n <style>{`\n .whats-new-mobile-scrollbar::-webkit-scrollbar {\n display: none;\n }\n `}</style>\n <Card>\n <BlockStack gap=\"400\">\n <BlockStack gap=\"100\">\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: \"650\",\n lineHeight: \"24px\",\n color: \"#303030\",\n marginBottom: \"8px\",\n margin: 0,\n }}\n >\n {t.title || \"What's New\"}\n </div>\n\n <InlineStack gap=\"300\" blockAlign=\"center\" align=\"space-between\">\n <div\n className=\"custom-tabs--wrapper-dashboard\"\n style={{\n margin: \"0\",\n padding: \"0\",\n }}\n >\n <style>{`\n .custom-tabs--wrapper-dashboard .Polaris-Box {\n --pc-box-padding-inline-start-md: 0 !important;\n --pc-box-padding-inline-end-md: 0 !important;\n }\n .custom-tabs--wrapper-dashboard .Polaris-Tabs {\n padding: 0 !important;\n }\n .custom-tabs--wrapper-dashboard .Polaris-Tabs__Wrapper {\n padding: 0 !important;\n overflow-y: hidden;\n }\n `}</style>\n <Tabs\n tabs={tabs}\n selected={selectedTab}\n onSelect={setSelectedTab}\n />\n </div>\n\n <InlineStack gap=\"200\">\n {showViewAllButton && (\n <Button\n icon={ExternalIcon}\n onClick={\n selectedTab === 0\n ? handleViewAllUpdates\n : handleViewAllArticles\n }\n >\n {selectedTab === 0\n ? (t.buttonViewAll?.productUpdate || \"View all updates\")\n : (t.buttonViewAll?.article || \"View all articles\")}\n </Button>\n )}\n\n {showNavigation && (\n <div style={sdkStyles.slideNavigation}>\n <button\n onClick={prevSlide}\n disabled={isPrevDisabled}\n style={mergeStyles(\n sdkStyles.slideButton,\n isPrevDisabled ? sdkStyles.slideButtonDisabled : {},\n {\n cursor: isPrevDisabled ? \"not-allowed\" : \"pointer\",\n opacity: isPrevDisabled ? 0.5 : 1,\n },\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path\n d=\"M10.5 13L5.5 8l5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n <button\n onClick={nextSlide}\n disabled={isNextDisabled}\n style={mergeStyles(\n sdkStyles.slideButton,\n isNextDisabled ? sdkStyles.slideButtonDisabled : {},\n {\n cursor: isNextDisabled ? \"not-allowed\" : \"pointer\",\n opacity: isNextDisabled ? 0.5 : 1,\n },\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path\n d=\"M5.5 13l5-5-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </div>\n )}\n </InlineStack>\n </InlineStack>\n </BlockStack>\n\n <Box>\n {selectedTab === 0 ? (\n <div\n ref={slideContainerRef}\n style={mergeStyles(\n sdkStyles.slidesContainer,\n mobileStyles.slidesContainer,\n { \n scrollbarWidth: \"none\" as any,\n }\n )}\n className={isMobile ? \"whats-new-mobile-scrollbar\" : \"\"}\n onTouchStart={isMobile ? handleTouchStart : undefined}\n onTouchMove={isMobile ? handleTouchMove : undefined}\n onTouchEnd={isMobile ? handleTouchEnd : undefined}\n >\n <div\n style={mergeStyles(\n sdkStyles.slidesWrapper,\n mobileStyles.slidesWrapper,\n {\n transform: isMobile\n ? `translateX(calc(-${productUpdateIndex * 85}% + ${touchDelta}px))` // 85% for mobile with swipe delta\n : `translateX(calc(-${productUpdateIndex * 90}% + ${touchDelta}px))`,\n transition: isSwiping ? \"none\" : \"transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n willChange: \"transform\", // GPU acceleration\n },\n )}\n >\n {limitedUpdates.map((update) => (\n <div\n key={update.id}\n style={mergeStyles(\n sdkStyles.slideBox,\n isMobile ? mobileStyles.slideBox : {},\n )}\n >\n <div style={sdkStyles.slideContent}>\n <Text variant=\"headingMd\" as=\"h3\">\n {update.title}\n </Text>\n {(update.releaseDate || update.date_time) && (\n <Text variant=\"bodySm\" tone=\"subdued\" as=\"p\">\n {update.releaseDate || update.date_time}\n </Text>\n )}\n {(update.description || update.content?.text) && (\n <Text as=\"p\">\n {update.description || update.content?.text}\n </Text>\n )}\n {update.features && update.features.length > 0 && (\n <ul style={{ paddingLeft: \"20px\", margin: 0 }}>\n {update.features.map(\n (item: string, idx: number) => (\n <li\n key={idx}\n style={{\n fontSize: \"13px\",\n lineHeight: 1.4,\n marginBottom: \"4px\",\n }}\n >\n {item}\n </li>\n ),\n )}\n </ul>\n )}\n <InlineStack gap=\"200\">\n {(update.button_try_url || update.link) && (\n <Button\n onClick={() => handleProductUpdateClick(update)}\n >\n {update.button_try_it_now || \"Try it now\"}\n </Button>\n )}\n {(update.button_learn_url || update.link) && (\n <Button\n variant={\n !(update.button_try_url || update.link)\n ? \"secondary\"\n : \"monochromePlain\"\n }\n onClick={() => {\n const learnUrl =\n update.button_learn_url || update.link;\n\n if (learnUrl && learnUrl !== \"modal\") {\n window.open(learnUrl, \"_blank\");\n }\n }}\n >\n {update.button_learn_more || \"Learn more\"}\n </Button>\n )}\n </InlineStack>\n </div>\n <div\n style={mergeStyles(\n sdkStyles.slideImage,\n isMobile ? mobileStyles.slideImage : {},\n )}\n >\n <ImageLoading\n src={\n update.imageUrl ||\n update.image_url ||\n \"https://asset.trustshop.io/dashboard/news-review-summary.png\"\n }\n alt={`what-new-${update.id}`}\n width={712}\n height={400}\n borderRadius={12}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n ) : (\n <div\n ref={slideContainerRef}\n style={mergeStyles(\n sdkStyles.slidesContainer,\n { \n scrollbarWidth: \"none\" as any,\n },\n mobileStyles.slidesContainer,\n )}\n className={isMobile ? \"whats-new-mobile-scrollbar\" : \"\"}\n onTouchStart={isMobile ? handleTouchStart : undefined}\n onTouchMove={isMobile ? handleTouchMove : undefined}\n onTouchEnd={isMobile ? handleTouchEnd : undefined}\n >\n <ArticleList\n layout=\"slide\"\n onArticleClick={handleArticleClick}\n showThumbnail={true}\n showAuthor={true}\n showDate={true}\n currentIndex={articleIndex}\n onSlideChange={setArticleIndex}\n showNavigation={false}\n />\n </div>\n )}\n </Box>\n </BlockStack>\n </Card>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
package/dist/components/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC","sourcesContent":["export * from \"./PopupBanner\";\nexport * from \"./TopBanner\";\nexport * from \"./FooterBanner\";\nexport * from \"./AppList\";\nexport * from \"./ArticleList\";\nexport * from \"./ArticleSlide\";\nexport * from \"./WhatsNew\";\nexport * from \"./GrowApps\";\nexport * from \"./PartnerList\";\nexport * from \"./PartnerIntegration\";\nexport * from \"./FloatingCard\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineStyles.d.ts","sourceRoot":"","sources":["../../src/components/inlineStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGvB,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAe1B,CAAC;AAGF,eAAO,MAAM,WAAW,GACtB,GAAG,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,KACvC,aAEF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineStyles.js","sourceRoot":"","sources":["../../src/components/inlineStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qCAAqC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,eAAe,EAAE;QACf,QAAQ,EAAE,UAAmB;QAC7B,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC;KACV;IAED,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,4BAA4B;QACxC,GAAG,EAAE,MAAM;QACX,UAAU,EAAE,WAAW;KACxB;IAED,eAAe,EAAE;QACf,QAAQ,EAAE,UAAmB;QAC7B,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,aAAsB;QACjC,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,KAAc;QAC7B,QAAQ,EAAE,QAAiB;QAC3B,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,SAAS;KAC3B;IAED,WAAW,EAAE;QACX,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,aAAa;QAC9B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,4BAA4B;KACzC;IAED,mBAAmB,EAAE;QACnB,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,GAAG;KACb;IAED,SAAS,EAAE;QACT,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,OAAO;KACf;IAED,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;KACb;IAED,QAAQ,EAAE;QACR,QAAQ,EAAE,UAAmB;QAC7B,GAAG,EAAE,KAAK;QACV,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,0BAA0B;QACtC,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,uBAAuB;KACpC;IAED,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM;KACb;IAED,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM;KACd;IAED,SAAS,EAAE;QACT,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,QAAQ;QACxB,GAAG,EAAE,KAAK;QACV,SAAS,EAAE,MAAM;KAClB;IAED,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,SAAS;QAC1B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,uBAAuB;KACpC;IAED,cAAc,EAAE;QACd,eAAe,EAAE,SAAS;KAC3B;CACF,CAAC;AAEF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE;QACZ,OAAO,EAAE,aAAa;QACtB,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,UAAmB;QACpC,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,GAAG;KAChB;IAED,iBAAiB,EAAE;QACjB,KAAK,EAAE,MAAM;KACd;CACF,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,GAAG,MAAqC,EACzB,EAAE;IACjB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC","sourcesContent":["/**\n * Inline styles for SDK components\n * These replace external CSS dependencies to make components self-contained\n */\n\nimport { CSSProperties } from \"react\";\n\n// Slide container and wrapper styles\nexport const slideStyles = {\n slidesContainer: {\n position: \"relative\" as const,\n width: \"100%\",\n overflow: \"hidden\",\n margin: 0,\n },\n\n slidesWrapper: {\n display: \"flex\",\n transition: \"transform 0.5s ease-in-out\",\n gap: \"20px\",\n willChange: \"transform\",\n },\n\n slideNavigation: {\n position: \"relative\" as const,\n width: \"fit-content\",\n boxSizing: \"content-box\" as const,\n padding: \"4px 6px\",\n display: \"flex\",\n flexDirection: \"row\" as const,\n flexWrap: \"nowrap\" as const,\n gap: \"4px\",\n borderRadius: \"8px\",\n backgroundColor: \"#e3e3e3\",\n },\n\n slideButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n padding: 0,\n border: \"none\",\n borderRadius: \"4px\",\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n transition: \"background-color 0.2s ease\",\n },\n\n slideButtonDisabled: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n\n slideItem: {\n flex: \"0 0 auto\",\n width: \"270px\",\n },\n\n slideItemMobile: {\n width: \"90%\",\n },\n\n slideNav: {\n position: \"absolute\" as const,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n background: \"rgba(255, 255, 255, 0.9)\",\n border: \"1px solid #e3e3e3\",\n borderRadius: \"50%\",\n width: \"32px\",\n height: \"32px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 0.2s\",\n },\n\n slideNavPrev: {\n left: \"10px\",\n },\n\n slideNavNext: {\n right: \"10px\",\n },\n\n slideDots: {\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"8px\",\n marginTop: \"16px\",\n },\n\n slideDot: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n backgroundColor: \"#e3e3e3\",\n cursor: \"pointer\",\n transition: \"background-color 0.3s\",\n },\n\n slideDotActive: {\n backgroundColor: \"#303030\",\n },\n};\n\n// GrowApps specific styles\nexport const growAppsStyles = {\n truncateText: {\n display: \"-webkit-box\",\n WebkitLineClamp: 3,\n WebkitBoxOrient: \"vertical\" as const,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n fontSize: \"13px\",\n color: \"#616161\",\n lineHeight: 1.4,\n },\n\n dashboardGrowApps: {\n width: \"100%\",\n },\n};\n\n// Helper function to merge styles\nexport const mergeStyles = (\n ...styles: (CSSProperties | undefined)[]\n): CSSProperties => {\n return Object.assign({}, ...styles.filter(Boolean));\n};\n"]}
|
|
@@ -150,3 +150,4 @@ export declare const sdkStyles: {
|
|
|
150
150
|
};
|
|
151
151
|
export declare const mergeStyles: (...styles: Array<React.CSSProperties | undefined>) => React.CSSProperties;
|
|
152
152
|
export declare const useResponsiveStyle: (desktopStyle: React.CSSProperties, _mobileStyle: React.CSSProperties) => import("react").CSSProperties;
|
|
153
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/components/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+KrB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,GAAG,QAAQ,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,KAChD,KAAK,CAAC,aAER,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,cAAc,KAAK,CAAC,aAAa,EACjC,cAAc,KAAK,CAAC,aAAa,kCAGlC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/components/styles.ts"],"names":[],"mappings":"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","sourcesContent":["export const sdkStyles = {\n // Container styles\n slidesContainer: {\n position: \"relative\" as const,\n width: \"100%\",\n overflow: \"hidden\",\n margin: 0,\n },\n\n slidesWrapper: {\n display: \"flex\",\n transition: \"transform 0.5s ease-in-out\",\n gap: \"20px\",\n willChange: \"transform\",\n },\n\n slideBox: {\n flex: \"0 0 90%\",\n display: \"flex\",\n alignItems: \"stretch\",\n justifyContent: \"space-between\",\n gap: \"47px\",\n border: \"1px solid #e3e3e3\",\n padding: \"16px\",\n borderRadius: \"8px\",\n backgroundColor: \"#ffffff\",\n minHeight: \"280px\",\n },\n\n slideContent: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"9px\",\n },\n\n slideImage: {\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n\n slideNavigation: {\n position: \"relative\" as const,\n width: \"fit-content\",\n boxSizing: \"content-box\" as const,\n padding: \"4px 6px\",\n display: \"flex\",\n flexDirection: \"row\" as const,\n flexWrap: \"nowrap\" as const,\n gap: \"4px\",\n borderRadius: \"8px\",\n backgroundColor: \"#e3e3e3\",\n },\n\n slideButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n padding: 0,\n border: \"none\",\n borderRadius: \"4px\",\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n transition: \"background-color 0.2s ease\",\n },\n\n slideButtonDisabled: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n\n slideItem: {\n flex: \"0 0 auto\",\n width: \"270px\",\n },\n\n slideItemMobile: {\n width: \"90% !important\",\n },\n\n slideNav: {\n position: \"absolute\" as const,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n background: \"rgba(255, 255, 255, 0.9)\",\n border: \"1px solid #e3e3e3\",\n borderRadius: \"50%\",\n width: \"32px\",\n height: \"32px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 0.2s\",\n },\n\n slideNavPrev: {\n left: \"10px\",\n },\n\n slideNavNext: {\n right: \"10px\",\n },\n\n slideNavHover: {\n background: \"#ffffff\",\n boxShadow: \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n },\n\n slideDots: {\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"8px\",\n marginTop: \"16px\",\n },\n\n slideDot: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n backgroundColor: \"#e3e3e3\",\n cursor: \"pointer\",\n transition: \"background-color 0.3s\",\n },\n\n slideDotActive: {\n backgroundColor: \"#303030\",\n },\n\n // Dashboard specific styles\n dashboardWhatsNew: {\n width: \"100%\",\n overflow: \"hidden\",\n maxWidth: \"950px\",\n },\n\n dashboardGrowApps: {\n width: \"100%\",\n },\n\n dashboardPartnerList: {\n width: \"100%\",\n },\n\n truncateText: {\n display: \"-webkit-box\",\n WebkitLineClamp: 3,\n WebkitBoxOrient: \"vertical\" as const,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n fontSize: \"13px\",\n color: \"#616161\",\n lineHeight: 1.4,\n },\n\n mobile: \"@media (max-width: 768px)\",\n\n mobileSlideBox: {\n flexDirection: \"column\" as const,\n gap: \"16px\",\n },\n\n mobileSlideImage: {\n width: \"100%\",\n height: \"auto\",\n },\n\n mobileSlideItem: {\n width: \"90%\",\n },\n};\n\nexport const mergeStyles = (\n ...styles: Array<React.CSSProperties | undefined>\n): React.CSSProperties => {\n return Object.assign({}, ...styles.filter(Boolean));\n};\n\nexport const useResponsiveStyle = (\n desktopStyle: React.CSSProperties,\n _mobileStyle: React.CSSProperties,\n) => {\n return desktopStyle;\n};\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal component defaults
|
|
3
|
+
* These values are used when props are not provided
|
|
4
|
+
*/
|
|
5
|
+
export declare const COMPONENT_DEFAULTS: {
|
|
6
|
+
readonly topBanner: {
|
|
7
|
+
readonly open: true;
|
|
8
|
+
readonly closable: true;
|
|
9
|
+
readonly sticky: false;
|
|
10
|
+
};
|
|
11
|
+
readonly whatsNew: {
|
|
12
|
+
readonly maxUpdates: 5;
|
|
13
|
+
readonly maxArticles: 10;
|
|
14
|
+
readonly showNavigation: true;
|
|
15
|
+
readonly showViewAllButton: true;
|
|
16
|
+
readonly enableSwipe: true;
|
|
17
|
+
};
|
|
18
|
+
readonly growApps: {
|
|
19
|
+
readonly maxItems: 6;
|
|
20
|
+
readonly showDismiss: true;
|
|
21
|
+
readonly showNavigation: true;
|
|
22
|
+
readonly dismissKey: "ts-dashboard-growapps-dismissed";
|
|
23
|
+
readonly dismissDuration: number;
|
|
24
|
+
};
|
|
25
|
+
readonly popupBanner: {
|
|
26
|
+
readonly autoShow: true;
|
|
27
|
+
readonly showDelay: 0;
|
|
28
|
+
readonly persistClose: true;
|
|
29
|
+
readonly storageKey: "ts-dashboard-popup-closed";
|
|
30
|
+
};
|
|
31
|
+
readonly partnerIntegration: {
|
|
32
|
+
readonly showEmptyState: true;
|
|
33
|
+
readonly maxItems: 12;
|
|
34
|
+
};
|
|
35
|
+
readonly ui: {
|
|
36
|
+
readonly animationDuration: 300;
|
|
37
|
+
readonly debounceDelay: 100;
|
|
38
|
+
readonly skeletonCount: 3;
|
|
39
|
+
readonly enableHapticFeedback: false;
|
|
40
|
+
};
|
|
41
|
+
readonly cls: {
|
|
42
|
+
readonly reserveSpace: true;
|
|
43
|
+
readonly useSkeletons: true;
|
|
44
|
+
readonly lazyLoadImages: true;
|
|
45
|
+
readonly preventLayoutShift: true;
|
|
46
|
+
};
|
|
47
|
+
readonly loading: {
|
|
48
|
+
readonly retryAttempts: 3;
|
|
49
|
+
readonly retryDelay: 1000;
|
|
50
|
+
readonly loadingDelay: 200;
|
|
51
|
+
readonly showSpinner: false;
|
|
52
|
+
};
|
|
53
|
+
readonly storage: {
|
|
54
|
+
readonly keyPrefix: "ts-sdk-";
|
|
55
|
+
readonly persistenceEnabled: true;
|
|
56
|
+
readonly encryptStorage: false;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Get component defaults with optional overrides
|
|
61
|
+
*/
|
|
62
|
+
export declare function getComponentDefaults<T extends keyof typeof COMPONENT_DEFAULTS>(component: T, overrides?: Partial<(typeof COMPONENT_DEFAULTS)[T]>): (typeof COMPONENT_DEFAULTS)[T];
|
|
63
|
+
/**
|
|
64
|
+
* Merge user config with defaults
|
|
65
|
+
*/
|
|
66
|
+
export declare function mergeWithDefaults<T>(defaults: T, userConfig?: Partial<T>): T;
|
|
67
|
+
/**
|
|
68
|
+
* Hook to access component defaults from context
|
|
69
|
+
*/
|
|
70
|
+
export declare function useComponentDefaults<T extends keyof typeof COMPONENT_DEFAULTS>(component: T): (typeof COMPONENT_DEFAULTS)[T];
|
|
71
|
+
//# sourceMappingURL=component-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-defaults.d.ts","sourceRoot":"","sources":["../../src/config/component-defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsErB,CAAC;AAEX;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,OAAO,kBAAkB,EAC5E,SAAS,EAAE,CAAC,EACZ,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GAClD,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAKhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAmB5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,OAAO,kBAAkB,EAC5E,SAAS,EAAE,CAAC,GACX,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAIhC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal component defaults
|
|
3
|
+
* These values are used when props are not provided
|
|
4
|
+
*/
|
|
5
|
+
export const COMPONENT_DEFAULTS = {
|
|
6
|
+
// TopBanner defaults
|
|
7
|
+
topBanner: {
|
|
8
|
+
open: true,
|
|
9
|
+
closable: true,
|
|
10
|
+
sticky: false,
|
|
11
|
+
},
|
|
12
|
+
// WhatsNew defaults
|
|
13
|
+
whatsNew: {
|
|
14
|
+
maxUpdates: 5,
|
|
15
|
+
maxArticles: 10,
|
|
16
|
+
showNavigation: true,
|
|
17
|
+
showViewAllButton: true,
|
|
18
|
+
enableSwipe: true,
|
|
19
|
+
},
|
|
20
|
+
// GrowApps defaults
|
|
21
|
+
growApps: {
|
|
22
|
+
maxItems: 6,
|
|
23
|
+
showDismiss: true,
|
|
24
|
+
showNavigation: true,
|
|
25
|
+
dismissKey: "ts-dashboard-growapps-dismissed",
|
|
26
|
+
dismissDuration: 7 * 24 * 60 * 60 * 1000, // 7 days
|
|
27
|
+
},
|
|
28
|
+
// PopupBanner defaults
|
|
29
|
+
popupBanner: {
|
|
30
|
+
autoShow: true,
|
|
31
|
+
showDelay: 0,
|
|
32
|
+
persistClose: true,
|
|
33
|
+
storageKey: "ts-dashboard-popup-closed",
|
|
34
|
+
},
|
|
35
|
+
// PartnerIntegration defaults
|
|
36
|
+
partnerIntegration: {
|
|
37
|
+
showEmptyState: true,
|
|
38
|
+
maxItems: 12,
|
|
39
|
+
},
|
|
40
|
+
// Global UI defaults
|
|
41
|
+
ui: {
|
|
42
|
+
animationDuration: 300,
|
|
43
|
+
debounceDelay: 100,
|
|
44
|
+
skeletonCount: 3,
|
|
45
|
+
enableHapticFeedback: false,
|
|
46
|
+
},
|
|
47
|
+
// CLS optimization defaults
|
|
48
|
+
cls: {
|
|
49
|
+
reserveSpace: true,
|
|
50
|
+
useSkeletons: true,
|
|
51
|
+
lazyLoadImages: true,
|
|
52
|
+
preventLayoutShift: true,
|
|
53
|
+
},
|
|
54
|
+
// Loading defaults
|
|
55
|
+
loading: {
|
|
56
|
+
retryAttempts: 3,
|
|
57
|
+
retryDelay: 1000,
|
|
58
|
+
loadingDelay: 200,
|
|
59
|
+
showSpinner: false,
|
|
60
|
+
},
|
|
61
|
+
// Storage defaults
|
|
62
|
+
storage: {
|
|
63
|
+
keyPrefix: "ts-sdk-",
|
|
64
|
+
persistenceEnabled: true,
|
|
65
|
+
encryptStorage: false,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Get component defaults with optional overrides
|
|
70
|
+
*/
|
|
71
|
+
export function getComponentDefaults(component, overrides) {
|
|
72
|
+
return {
|
|
73
|
+
...COMPONENT_DEFAULTS[component],
|
|
74
|
+
...overrides,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Merge user config with defaults
|
|
79
|
+
*/
|
|
80
|
+
export function mergeWithDefaults(defaults, userConfig) {
|
|
81
|
+
if (!userConfig)
|
|
82
|
+
return defaults;
|
|
83
|
+
return Object.entries(defaults).reduce((acc, [key, defaultValue]) => {
|
|
84
|
+
const userValue = userConfig[key];
|
|
85
|
+
if (userValue === undefined) {
|
|
86
|
+
acc[key] = defaultValue;
|
|
87
|
+
}
|
|
88
|
+
else if (typeof defaultValue === "object" &&
|
|
89
|
+
!Array.isArray(defaultValue)) {
|
|
90
|
+
acc[key] = mergeWithDefaults(defaultValue, userValue);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
acc[key] = userValue;
|
|
94
|
+
}
|
|
95
|
+
return acc;
|
|
96
|
+
}, {});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Hook to access component defaults from context
|
|
100
|
+
*/
|
|
101
|
+
export function useComponentDefaults(component) {
|
|
102
|
+
// This would typically access context for any runtime overrides
|
|
103
|
+
// For now, return static defaults
|
|
104
|
+
return COMPONENT_DEFAULTS[component];
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=component-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-defaults.js","sourceRoot":"","sources":["../../src/config/component-defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,qBAAqB;IACrB,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,KAAK;KACd;IAED,oBAAoB;IACpB,QAAQ,EAAE;QACR,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,IAAI;QACpB,iBAAiB,EAAE,IAAI;QACvB,WAAW,EAAE,IAAI;KAClB;IAED,oBAAoB;IACpB,QAAQ,EAAE;QACR,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,iCAAiC;QAC7C,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;KACpD;IAED,uBAAuB;IACvB,WAAW,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,2BAA2B;KACxC;IAED,8BAA8B;IAC9B,kBAAkB,EAAE;QAClB,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,EAAE;KACb;IAED,qBAAqB;IACrB,EAAE,EAAE;QACF,iBAAiB,EAAE,GAAG;QACtB,aAAa,EAAE,GAAG;QAClB,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,KAAK;KAC5B;IAED,4BAA4B;IAC5B,GAAG,EAAE;QACH,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;KACzB;IAED,mBAAmB;IACnB,OAAO,EAAE;QACP,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,GAAG;QACjB,WAAW,EAAE,KAAK;KACnB;IAED,mBAAmB;IACnB,OAAO,EAAE;QACP,SAAS,EAAE,SAAS;QACpB,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,KAAK;KACtB;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAY,EACZ,SAAmD;IAEnD,OAAO;QACL,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAChC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAI,QAAW,EAAE,UAAuB;IACvE,IAAI,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC;IAEjC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAe,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,EAAE;QACzE,MAAM,SAAS,GAAI,UAAkB,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC1B,CAAC;aAAM,IACL,OAAO,YAAY,KAAK,QAAQ;YAChC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAC5B,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACvB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAS,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAY;IAEZ,gEAAgE;IAChE,kCAAkC;IAClC,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/**\n * Internal component defaults\n * These values are used when props are not provided\n */\n\nexport const COMPONENT_DEFAULTS = {\n // TopBanner defaults\n topBanner: {\n open: true,\n closable: true,\n sticky: false,\n },\n\n // WhatsNew defaults\n whatsNew: {\n maxUpdates: 5,\n maxArticles: 10,\n showNavigation: true,\n showViewAllButton: true,\n enableSwipe: true,\n },\n\n // GrowApps defaults\n growApps: {\n maxItems: 6,\n showDismiss: true,\n showNavigation: true,\n dismissKey: \"ts-dashboard-growapps-dismissed\",\n dismissDuration: 7 * 24 * 60 * 60 * 1000, // 7 days\n },\n\n // PopupBanner defaults\n popupBanner: {\n autoShow: true,\n showDelay: 0,\n persistClose: true,\n storageKey: \"ts-dashboard-popup-closed\",\n },\n\n // PartnerIntegration defaults\n partnerIntegration: {\n showEmptyState: true,\n maxItems: 12,\n },\n\n // Global UI defaults\n ui: {\n animationDuration: 300,\n debounceDelay: 100,\n skeletonCount: 3,\n enableHapticFeedback: false,\n },\n\n // CLS optimization defaults\n cls: {\n reserveSpace: true,\n useSkeletons: true,\n lazyLoadImages: true,\n preventLayoutShift: true,\n },\n\n // Loading defaults\n loading: {\n retryAttempts: 3,\n retryDelay: 1000,\n loadingDelay: 200,\n showSpinner: false,\n },\n\n // Storage defaults\n storage: {\n keyPrefix: \"ts-sdk-\",\n persistenceEnabled: true,\n encryptStorage: false,\n },\n} as const;\n\n/**\n * Get component defaults with optional overrides\n */\nexport function getComponentDefaults<T extends keyof typeof COMPONENT_DEFAULTS>(\n component: T,\n overrides?: Partial<(typeof COMPONENT_DEFAULTS)[T]>,\n): (typeof COMPONENT_DEFAULTS)[T] {\n return {\n ...COMPONENT_DEFAULTS[component],\n ...overrides,\n };\n}\n\n/**\n * Merge user config with defaults\n */\nexport function mergeWithDefaults<T>(defaults: T, userConfig?: Partial<T>): T {\n if (!userConfig) return defaults;\n\n return Object.entries(defaults as any).reduce((acc, [key, defaultValue]) => {\n const userValue = (userConfig as any)[key];\n\n if (userValue === undefined) {\n acc[key] = defaultValue;\n } else if (\n typeof defaultValue === \"object\" &&\n !Array.isArray(defaultValue)\n ) {\n acc[key] = mergeWithDefaults(defaultValue, userValue);\n } else {\n acc[key] = userValue;\n }\n\n return acc;\n }, {} as any);\n}\n\n/**\n * Hook to access component defaults from context\n */\nexport function useComponentDefaults<T extends keyof typeof COMPONENT_DEFAULTS>(\n component: T,\n): (typeof COMPONENT_DEFAULTS)[T] {\n // This would typically access context for any runtime overrides\n // For now, return static defaults\n return COMPONENT_DEFAULTS[component];\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal SDK configuration management
|
|
3
|
+
* Handles all default configs, API endpoints, and setup
|
|
4
|
+
*/
|
|
5
|
+
export interface ShopInfo {
|
|
6
|
+
domain?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
token?: string;
|
|
9
|
+
theme_version?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SDKInternalConfig {
|
|
12
|
+
apiUrl: string;
|
|
13
|
+
cacheTime: number;
|
|
14
|
+
retryAttempts: number;
|
|
15
|
+
retryDelay: number;
|
|
16
|
+
headers: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate the complete dashboard configuration
|
|
20
|
+
* This is now internal to the SDK
|
|
21
|
+
*/
|
|
22
|
+
export declare const generateDashboardConfig: (shopInfo?: ShopInfo, overrides?: Partial<SDKInternalConfig>) => SDKInternalConfig;
|
|
23
|
+
/**
|
|
24
|
+
* Extract shop info from various sources
|
|
25
|
+
* Useful for auto-detecting shop context
|
|
26
|
+
*/
|
|
27
|
+
export declare const extractShopInfo: (props: any) => ShopInfo | undefined;
|
|
28
|
+
//# sourceMappingURL=internal-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-config.d.ts","sourceRoot":"","sources":["../../src/config/internal-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAuCD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,WAAW,QAAQ,EACnB,YAAY,OAAO,CAAC,iBAAiB,CAAC,KACrC,iBA8BF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,KAAG,QAAQ,GAAG,SAyBvD,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal SDK configuration management
|
|
3
|
+
* Handles all default configs, API endpoints, and setup
|
|
4
|
+
*/
|
|
5
|
+
// Default configuration values
|
|
6
|
+
const DEFAULT_CACHE_TIME = 300000; // 5 minutes
|
|
7
|
+
const DEFAULT_RETRY_ATTEMPTS = 3;
|
|
8
|
+
const DEFAULT_RETRY_DELAY = 1000;
|
|
9
|
+
/**
|
|
10
|
+
* Get the API base URL
|
|
11
|
+
* Checks environment variables and falls back to production
|
|
12
|
+
*/
|
|
13
|
+
const getApiBaseUrl = () => {
|
|
14
|
+
// Check for browser environment variables
|
|
15
|
+
if (typeof window !== 'undefined') {
|
|
16
|
+
// @ts-ignore - checking for React env var
|
|
17
|
+
const envUrl = window.REACT_APP_OPS_API_URL || window.NEXT_PUBLIC_OPS_API_URL;
|
|
18
|
+
if (envUrl)
|
|
19
|
+
return envUrl;
|
|
20
|
+
}
|
|
21
|
+
// Check for Node.js environment (safely)
|
|
22
|
+
try {
|
|
23
|
+
// @ts-ignore - process might not exist in browser
|
|
24
|
+
if (typeof process !== 'undefined' && process?.env) {
|
|
25
|
+
// @ts-ignore - accessing process.env
|
|
26
|
+
const envUrl = process.env.REACT_APP_OPS_API_URL ||
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
process.env.NEXT_PUBLIC_OPS_API_URL ||
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
process.env.OPS_API_URL;
|
|
31
|
+
if (envUrl)
|
|
32
|
+
return envUrl;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
// process not available, continue
|
|
37
|
+
}
|
|
38
|
+
// Default to production
|
|
39
|
+
return "https://ops.trustshop.io/api";
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Generate the complete dashboard configuration
|
|
43
|
+
* This is now internal to the SDK
|
|
44
|
+
*/
|
|
45
|
+
export const generateDashboardConfig = (shopInfo, overrides) => {
|
|
46
|
+
const baseUrl = getApiBaseUrl();
|
|
47
|
+
const defaultConfig = {
|
|
48
|
+
apiUrl: `${baseUrl}/dashboard`,
|
|
49
|
+
cacheTime: DEFAULT_CACHE_TIME,
|
|
50
|
+
retryAttempts: DEFAULT_RETRY_ATTEMPTS,
|
|
51
|
+
retryDelay: DEFAULT_RETRY_DELAY,
|
|
52
|
+
headers: {
|
|
53
|
+
'Accept': 'application/json',
|
|
54
|
+
'Content-Type': 'application/json',
|
|
55
|
+
// Add Shopify headers if available
|
|
56
|
+
...(shopInfo?.token && { 'X-Shopify-Access-Token': shopInfo.token }),
|
|
57
|
+
...(shopInfo?.domain && { 'X-Shopify-Shop-Domain': shopInfo.domain }),
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
// Merge with any overrides
|
|
61
|
+
if (overrides) {
|
|
62
|
+
return {
|
|
63
|
+
...defaultConfig,
|
|
64
|
+
...overrides,
|
|
65
|
+
headers: {
|
|
66
|
+
...defaultConfig.headers,
|
|
67
|
+
...(overrides.headers || {}),
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return defaultConfig;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Extract shop info from various sources
|
|
75
|
+
* Useful for auto-detecting shop context
|
|
76
|
+
*/
|
|
77
|
+
export const extractShopInfo = (props) => {
|
|
78
|
+
// Direct shopInfo prop
|
|
79
|
+
if (props.shopInfo) {
|
|
80
|
+
return props.shopInfo;
|
|
81
|
+
}
|
|
82
|
+
// Legacy props
|
|
83
|
+
if (props.shopDomain || props.shopToken) {
|
|
84
|
+
return {
|
|
85
|
+
domain: props.shopDomain,
|
|
86
|
+
token: props.shopToken,
|
|
87
|
+
id: props.shopId,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Try to extract from config if passed
|
|
91
|
+
if (props.config?.headers) {
|
|
92
|
+
const headers = props.config.headers;
|
|
93
|
+
return {
|
|
94
|
+
token: headers['X-Shopify-Access-Token'],
|
|
95
|
+
domain: headers['X-Shopify-Shop-Domain'],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=internal-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-config.js","sourceRoot":"","sources":["../../src/config/internal-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Internal SDK configuration management\n * Handles all default configs, API endpoints, and setup\n */\n\nexport interface ShopInfo {\n domain?: string;\n id?: string;\n token?: string;\n theme_version?: string;\n}\n\nexport interface SDKInternalConfig {\n apiUrl: string;\n cacheTime: number;\n retryAttempts: number;\n retryDelay: number;\n headers: Record<string, string>;\n}\n\n// Default configuration values\nconst DEFAULT_CACHE_TIME = 300000; // 5 minutes\nconst DEFAULT_RETRY_ATTEMPTS = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\n\n/**\n * Get the API base URL\n * Checks environment variables and falls back to production\n */\nconst getApiBaseUrl = (): string => {\n // Check for browser environment variables\n if (typeof window !== 'undefined') {\n // @ts-ignore - checking for React env var\n const envUrl = window.REACT_APP_OPS_API_URL || window.NEXT_PUBLIC_OPS_API_URL;\n if (envUrl) return envUrl;\n }\n \n // Check for Node.js environment (safely)\n try {\n // @ts-ignore - process might not exist in browser\n if (typeof process !== 'undefined' && process?.env) {\n // @ts-ignore - accessing process.env\n const envUrl = process.env.REACT_APP_OPS_API_URL || \n // @ts-ignore\n process.env.NEXT_PUBLIC_OPS_API_URL ||\n // @ts-ignore\n process.env.OPS_API_URL;\n if (envUrl) return envUrl;\n }\n } catch (e) {\n // process not available, continue\n }\n \n // Default to production\n return \"https://ops.trustshop.io/api\";\n};\n\n/**\n * Generate the complete dashboard configuration\n * This is now internal to the SDK\n */\nexport const generateDashboardConfig = (\n shopInfo?: ShopInfo,\n overrides?: Partial<SDKInternalConfig>\n): SDKInternalConfig => {\n const baseUrl = getApiBaseUrl();\n \n const defaultConfig: SDKInternalConfig = {\n apiUrl: `${baseUrl}/dashboard`,\n cacheTime: DEFAULT_CACHE_TIME,\n retryAttempts: DEFAULT_RETRY_ATTEMPTS,\n retryDelay: DEFAULT_RETRY_DELAY,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n // Add Shopify headers if available\n ...(shopInfo?.token && { 'X-Shopify-Access-Token': shopInfo.token }),\n ...(shopInfo?.domain && { 'X-Shopify-Shop-Domain': shopInfo.domain }),\n },\n };\n\n // Merge with any overrides\n if (overrides) {\n return {\n ...defaultConfig,\n ...overrides,\n headers: {\n ...defaultConfig.headers,\n ...(overrides.headers || {}),\n },\n };\n }\n\n return defaultConfig;\n};\n\n/**\n * Extract shop info from various sources\n * Useful for auto-detecting shop context\n */\nexport const extractShopInfo = (props: any): ShopInfo | undefined => {\n // Direct shopInfo prop\n if (props.shopInfo) {\n return props.shopInfo;\n }\n \n // Legacy props\n if (props.shopDomain || props.shopToken) {\n return {\n domain: props.shopDomain,\n token: props.shopToken,\n id: props.shopId,\n };\n }\n \n // Try to extract from config if passed\n if (props.config?.headers) {\n const headers = props.config.headers;\n return {\n token: headers['X-Shopify-Access-Token'],\n domain: headers['X-Shopify-Shop-Domain'],\n };\n }\n \n return undefined;\n};"]}
|