@datlv-trustshop/shopify-inapp-components 0.2.7 → 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.
Files changed (226) hide show
  1. package/dist/components/AppList.d.ts +1 -0
  2. package/dist/components/AppList.d.ts.map +1 -0
  3. package/dist/components/AppList.js +1 -0
  4. package/dist/components/AppList.js.map +1 -0
  5. package/dist/components/ArticleList.d.ts +1 -0
  6. package/dist/components/ArticleList.d.ts.map +1 -0
  7. package/dist/components/ArticleList.js +1 -0
  8. package/dist/components/ArticleList.js.map +1 -0
  9. package/dist/components/ArticleSlide.d.ts +1 -0
  10. package/dist/components/ArticleSlide.d.ts.map +1 -0
  11. package/dist/components/ArticleSlide.js +1 -0
  12. package/dist/components/ArticleSlide.js.map +1 -0
  13. package/dist/components/FloatingCard.d.ts +1 -0
  14. package/dist/components/FloatingCard.d.ts.map +1 -0
  15. package/dist/components/FloatingCard.js +5 -4
  16. package/dist/components/FloatingCard.js.map +1 -0
  17. package/dist/components/FooterBanner.d.ts +1 -0
  18. package/dist/components/FooterBanner.d.ts.map +1 -0
  19. package/dist/components/FooterBanner.js +1 -0
  20. package/dist/components/FooterBanner.js.map +1 -0
  21. package/dist/components/GrowApps.d.ts +6 -6
  22. package/dist/components/GrowApps.d.ts.map +1 -0
  23. package/dist/components/GrowApps.js +11 -3
  24. package/dist/components/GrowApps.js.map +1 -0
  25. package/dist/components/ImageLoading.d.ts +1 -0
  26. package/dist/components/ImageLoading.d.ts.map +1 -0
  27. package/dist/components/ImageLoading.js +1 -0
  28. package/dist/components/ImageLoading.js.map +1 -0
  29. package/dist/components/PartnerIntegration.d.ts +8 -8
  30. package/dist/components/PartnerIntegration.d.ts.map +1 -0
  31. package/dist/components/PartnerIntegration.js +15 -76
  32. package/dist/components/PartnerIntegration.js.map +1 -0
  33. package/dist/components/PartnerList.d.ts +1 -0
  34. package/dist/components/PartnerList.d.ts.map +1 -0
  35. package/dist/components/PartnerList.js +1 -0
  36. package/dist/components/PartnerList.js.map +1 -0
  37. package/dist/components/PopupBanner.d.ts +4 -4
  38. package/dist/components/PopupBanner.d.ts.map +1 -0
  39. package/dist/components/PopupBanner.js +5 -1
  40. package/dist/components/PopupBanner.js.map +1 -0
  41. package/dist/components/TopBanner.d.ts +7 -7
  42. package/dist/components/TopBanner.d.ts.map +1 -0
  43. package/dist/components/TopBanner.js +40 -31
  44. package/dist/components/TopBanner.js.map +1 -0
  45. package/dist/components/WhatsNew.d.ts +6 -7
  46. package/dist/components/WhatsNew.d.ts.map +1 -0
  47. package/dist/components/WhatsNew.js +23 -25
  48. package/dist/components/WhatsNew.js.map +1 -0
  49. package/dist/components/index.d.ts +1 -0
  50. package/dist/components/index.d.ts.map +1 -0
  51. package/dist/components/index.js +1 -0
  52. package/dist/components/index.js.map +1 -0
  53. package/dist/components/inlineStyles.d.ts +1 -0
  54. package/dist/components/inlineStyles.d.ts.map +1 -0
  55. package/dist/components/inlineStyles.js +1 -0
  56. package/dist/components/inlineStyles.js.map +1 -0
  57. package/dist/components/styles.d.ts +1 -0
  58. package/dist/components/styles.d.ts.map +1 -0
  59. package/dist/components/styles.js +1 -0
  60. package/dist/components/styles.js.map +1 -0
  61. package/dist/config/component-defaults.d.ts +71 -0
  62. package/dist/config/component-defaults.d.ts.map +1 -0
  63. package/dist/config/component-defaults.js +106 -0
  64. package/dist/config/component-defaults.js.map +1 -0
  65. package/dist/config/internal-config.d.ts +28 -0
  66. package/dist/config/internal-config.d.ts.map +1 -0
  67. package/dist/config/internal-config.js +100 -0
  68. package/dist/config/internal-config.js.map +1 -0
  69. package/dist/core/SDKManager.d.ts +230 -0
  70. package/dist/core/SDKManager.d.ts.map +1 -0
  71. package/dist/core/SDKManager.js +380 -0
  72. package/dist/core/SDKManager.js.map +1 -0
  73. package/dist/core/adapter.d.ts +1 -0
  74. package/dist/core/adapter.d.ts.map +1 -0
  75. package/dist/core/adapter.js +1 -0
  76. package/dist/core/adapter.js.map +1 -0
  77. package/dist/core/engine.d.ts +1 -0
  78. package/dist/core/engine.d.ts.map +1 -0
  79. package/dist/core/engine.js +1 -0
  80. package/dist/core/engine.js.map +1 -0
  81. package/dist/core/fetcher.d.ts +1 -0
  82. package/dist/core/fetcher.d.ts.map +1 -0
  83. package/dist/core/fetcher.js +1 -0
  84. package/dist/core/fetcher.js.map +1 -0
  85. package/dist/core/global-manager.d.ts +1 -0
  86. package/dist/core/global-manager.d.ts.map +1 -0
  87. package/dist/core/global-manager.js +1 -0
  88. package/dist/core/global-manager.js.map +1 -0
  89. package/dist/hooks/index.d.ts +1 -0
  90. package/dist/hooks/index.d.ts.map +1 -0
  91. package/dist/hooks/index.js +1 -0
  92. package/dist/hooks/index.js.map +1 -0
  93. package/dist/hooks/useApps.d.ts +2 -1
  94. package/dist/hooks/useApps.d.ts.map +1 -0
  95. package/dist/hooks/useApps.js +8 -15
  96. package/dist/hooks/useApps.js.map +1 -0
  97. package/dist/hooks/useArticles.d.ts +1 -0
  98. package/dist/hooks/useArticles.d.ts.map +1 -0
  99. package/dist/hooks/useArticles.js +14 -18
  100. package/dist/hooks/useArticles.js.map +1 -0
  101. package/dist/hooks/useBanner.d.ts +2 -1
  102. package/dist/hooks/useBanner.d.ts.map +1 -0
  103. package/dist/hooks/useBanner.js +14 -15
  104. package/dist/hooks/useBanner.js.map +1 -0
  105. package/dist/hooks/useCampaignTracking.d.ts +1 -0
  106. package/dist/hooks/useCampaignTracking.d.ts.map +1 -0
  107. package/dist/hooks/useCampaignTracking.js +1 -0
  108. package/dist/hooks/useCampaignTracking.js.map +1 -0
  109. package/dist/hooks/useDashboard.d.ts +1 -0
  110. package/dist/hooks/useDashboard.d.ts.map +1 -0
  111. package/dist/hooks/useDashboard.js +12 -9
  112. package/dist/hooks/useDashboard.js.map +1 -0
  113. package/dist/hooks/useFloatingCardActions.d.ts +1 -0
  114. package/dist/hooks/useFloatingCardActions.d.ts.map +1 -0
  115. package/dist/hooks/useFloatingCardActions.js +1 -0
  116. package/dist/hooks/useFloatingCardActions.js.map +1 -0
  117. package/dist/hooks/useFloatingCardEngine.d.ts +1 -0
  118. package/dist/hooks/useFloatingCardEngine.d.ts.map +1 -0
  119. package/dist/hooks/useFloatingCardEngine.js +1 -0
  120. package/dist/hooks/useFloatingCardEngine.js.map +1 -0
  121. package/dist/hooks/useFloatingCards.d.ts +3 -2
  122. package/dist/hooks/useFloatingCards.d.ts.map +1 -0
  123. package/dist/hooks/useFloatingCards.js +37 -12
  124. package/dist/hooks/useFloatingCards.js.map +1 -0
  125. package/dist/hooks/useGrowApps.d.ts +1 -0
  126. package/dist/hooks/useGrowApps.d.ts.map +1 -0
  127. package/dist/hooks/useGrowApps.js +1 -0
  128. package/dist/hooks/useGrowApps.js.map +1 -0
  129. package/dist/hooks/usePartnerIntegration.d.ts +5 -4
  130. package/dist/hooks/usePartnerIntegration.d.ts.map +1 -0
  131. package/dist/hooks/usePartnerIntegration.js +10 -38
  132. package/dist/hooks/usePartnerIntegration.js.map +1 -0
  133. package/dist/hooks/useTranslations.d.ts +1 -0
  134. package/dist/hooks/useTranslations.d.ts.map +1 -0
  135. package/dist/hooks/useTranslations.js +5 -3
  136. package/dist/hooks/useTranslations.js.map +1 -0
  137. package/dist/hooks/useWhatsNew.d.ts +1 -0
  138. package/dist/hooks/useWhatsNew.d.ts.map +1 -0
  139. package/dist/hooks/useWhatsNew.js +12 -11
  140. package/dist/hooks/useWhatsNew.js.map +1 -0
  141. package/dist/index.d.ts +38 -22
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +76 -22
  144. package/dist/index.js.map +1 -0
  145. package/dist/translations/default.d.ts +1 -0
  146. package/dist/translations/default.d.ts.map +1 -0
  147. package/dist/translations/default.js +1 -0
  148. package/dist/translations/default.js.map +1 -0
  149. package/dist/translations/locales/cn.json +39 -0
  150. package/dist/translations/locales/de.json +39 -0
  151. package/dist/translations/locales/dk.json +39 -0
  152. package/dist/translations/locales/en.json +39 -0
  153. package/dist/translations/locales/es.json +39 -0
  154. package/dist/translations/locales/fr.json +39 -0
  155. package/dist/translations/locales/ie.json +39 -0
  156. package/dist/translations/locales/in.json +39 -0
  157. package/dist/translations/locales/it.json +39 -0
  158. package/dist/translations/locales/jp.json +39 -0
  159. package/dist/translations/locales/nl.json +39 -0
  160. package/dist/translations/locales/nz.json +39 -0
  161. package/dist/translations/locales/pt.json +39 -0
  162. package/dist/translations/locales/se.json +39 -0
  163. package/dist/translations/locales/vi.json +39 -0
  164. package/dist/translations/translation-manager.d.ts +89 -0
  165. package/dist/translations/translation-manager.d.ts.map +1 -0
  166. package/dist/translations/translation-manager.js +239 -0
  167. package/dist/translations/translation-manager.js.map +1 -0
  168. package/dist/types/app.d.ts +1 -0
  169. package/dist/types/app.d.ts.map +1 -0
  170. package/dist/types/app.js +1 -0
  171. package/dist/types/app.js.map +1 -0
  172. package/dist/types/article.d.ts +1 -0
  173. package/dist/types/article.d.ts.map +1 -0
  174. package/dist/types/article.js +1 -0
  175. package/dist/types/article.js.map +1 -0
  176. package/dist/types/banner.d.ts +1 -0
  177. package/dist/types/banner.d.ts.map +1 -0
  178. package/dist/types/banner.js +1 -0
  179. package/dist/types/banner.js.map +1 -0
  180. package/dist/types/component-props.d.ts +140 -0
  181. package/dist/types/component-props.d.ts.map +1 -0
  182. package/dist/types/component-props.js +6 -0
  183. package/dist/types/component-props.js.map +1 -0
  184. package/dist/types/dashboard.d.ts +1 -0
  185. package/dist/types/dashboard.d.ts.map +1 -0
  186. package/dist/types/dashboard.js +1 -0
  187. package/dist/types/dashboard.js.map +1 -0
  188. package/dist/types/index.d.ts +1 -0
  189. package/dist/types/index.d.ts.map +1 -0
  190. package/dist/types/index.js +1 -0
  191. package/dist/types/index.js.map +1 -0
  192. package/dist/types/integration.d.ts +1 -0
  193. package/dist/types/integration.d.ts.map +1 -0
  194. package/dist/types/integration.js +1 -0
  195. package/dist/types/integration.js.map +1 -0
  196. package/dist/types/partner.d.ts +1 -0
  197. package/dist/types/partner.d.ts.map +1 -0
  198. package/dist/types/partner.js +1 -0
  199. package/dist/types/partner.js.map +1 -0
  200. package/dist/types/product-update.d.ts +1 -0
  201. package/dist/types/product-update.d.ts.map +1 -0
  202. package/dist/types/product-update.js +1 -0
  203. package/dist/types/product-update.js.map +1 -0
  204. package/dist/types/translations.d.ts +1 -0
  205. package/dist/types/translations.d.ts.map +1 -0
  206. package/dist/types/translations.js +1 -0
  207. package/dist/types/translations.js.map +1 -0
  208. package/dist/utils/campaignTracking.d.ts +1 -0
  209. package/dist/utils/campaignTracking.d.ts.map +1 -0
  210. package/dist/utils/campaignTracking.js +1 -0
  211. package/dist/utils/campaignTracking.js.map +1 -0
  212. package/dist/utils/cls-monitor.d.ts +1 -0
  213. package/dist/utils/cls-monitor.d.ts.map +1 -0
  214. package/dist/utils/cls-monitor.js +1 -0
  215. package/dist/utils/cls-monitor.js.map +1 -0
  216. package/dist/utils/injectStyles.d.ts +1 -0
  217. package/dist/utils/injectStyles.d.ts.map +1 -0
  218. package/dist/utils/injectStyles.js +1 -0
  219. package/dist/utils/injectStyles.js.map +1 -0
  220. package/dist/utils/sessionManager.d.ts +1 -0
  221. package/dist/utils/sessionManager.d.ts.map +1 -0
  222. package/dist/utils/sessionManager.js +1 -0
  223. package/dist/utils/sessionManager.js.map +1 -0
  224. package/package.json +4 -3
  225. package/dist/provider/DashboardProvider.d.ts +0 -36
  226. 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"]}
@@ -9,3 +9,4 @@ export * from "./GrowApps";
9
9
  export * from "./PartnerList";
10
10
  export * from "./PartnerIntegration";
11
11
  export * from "./FloatingCard";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -9,3 +9,4 @@ export * from "./GrowApps";
9
9
  export * from "./PartnerList";
10
10
  export * from "./PartnerIntegration";
11
11
  export * from "./FloatingCard";
12
+ //# sourceMappingURL=index.js.map
@@ -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"]}
@@ -108,3 +108,4 @@ export declare const growAppsStyles: {
108
108
  };
109
109
  };
110
110
  export declare const mergeStyles: (...styles: (CSSProperties | undefined)[]) => CSSProperties;
111
+ //# sourceMappingURL=inlineStyles.d.ts.map
@@ -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"}
@@ -112,3 +112,4 @@ export const growAppsStyles = {
112
112
  export const mergeStyles = (...styles) => {
113
113
  return Object.assign({}, ...styles.filter(Boolean));
114
114
  };
115
+ //# sourceMappingURL=inlineStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlineStyles.js","sourceRoot":"","sources":["../../src/components/inlineStyles.ts"],"names":[],"mappings":"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","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"}
@@ -156,3 +156,4 @@ export const mergeStyles = (...styles) => {
156
156
  export const useResponsiveStyle = (desktopStyle, _mobileStyle) => {
157
157
  return desktopStyle;
158
158
  };
159
+ //# sourceMappingURL=styles.js.map
@@ -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};"]}