@datlv-trustshop/shopify-inapp-components 0.2.9 → 0.2.11

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 (50) hide show
  1. package/dist/components/WhatsNew.d.ts +2 -0
  2. package/dist/components/WhatsNew.d.ts.map +1 -1
  3. package/dist/components/WhatsNew.js +10 -13
  4. package/dist/components/WhatsNew.js.map +1 -1
  5. package/dist/core/SDKManager.d.ts +36 -4
  6. package/dist/core/SDKManager.d.ts.map +1 -1
  7. package/dist/core/SDKManager.js +210 -63
  8. package/dist/core/SDKManager.js.map +1 -1
  9. package/dist/hooks/index.d.ts +1 -3
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +1 -3
  12. package/dist/hooks/index.js.map +1 -1
  13. package/dist/hooks/useApps.d.ts +1 -1
  14. package/dist/hooks/useApps.d.ts.map +1 -1
  15. package/dist/hooks/useApps.js +15 -7
  16. package/dist/hooks/useApps.js.map +1 -1
  17. package/dist/hooks/useArticles.d.ts.map +1 -1
  18. package/dist/hooks/useArticles.js +12 -12
  19. package/dist/hooks/useArticles.js.map +1 -1
  20. package/dist/hooks/useBanner.d.ts +1 -1
  21. package/dist/hooks/useBanner.d.ts.map +1 -1
  22. package/dist/hooks/useBanner.js +15 -13
  23. package/dist/hooks/useBanner.js.map +1 -1
  24. package/dist/hooks/useDashboard.d.ts.map +1 -1
  25. package/dist/hooks/useDashboard.js +13 -7
  26. package/dist/hooks/useDashboard.js.map +1 -1
  27. package/dist/hooks/useFloatingCards.d.ts +1 -0
  28. package/dist/hooks/useFloatingCards.d.ts.map +1 -1
  29. package/dist/hooks/useFloatingCards.js +45 -94
  30. package/dist/hooks/useFloatingCards.js.map +1 -1
  31. package/dist/hooks/usePartnerIntegration.d.ts +7 -3
  32. package/dist/hooks/usePartnerIntegration.d.ts.map +1 -1
  33. package/dist/hooks/usePartnerIntegration.js +62 -7
  34. package/dist/hooks/usePartnerIntegration.js.map +1 -1
  35. package/dist/hooks/useWhatsNew.d.ts.map +1 -1
  36. package/dist/hooks/useWhatsNew.js +10 -10
  37. package/dist/hooks/useWhatsNew.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/hooks/useFloatingCardActions.d.ts +0 -18
  40. package/dist/hooks/useFloatingCardActions.d.ts.map +0 -1
  41. package/dist/hooks/useFloatingCardActions.js +0 -55
  42. package/dist/hooks/useFloatingCardActions.js.map +0 -1
  43. package/dist/hooks/useFloatingCardEngine.d.ts +0 -22
  44. package/dist/hooks/useFloatingCardEngine.d.ts.map +0 -1
  45. package/dist/hooks/useFloatingCardEngine.js +0 -40
  46. package/dist/hooks/useFloatingCardEngine.js.map +0 -1
  47. package/dist/hooks/useGrowApps.d.ts +0 -11
  48. package/dist/hooks/useGrowApps.d.ts.map +0 -1
  49. package/dist/hooks/useGrowApps.js +0 -15
  50. package/dist/hooks/useGrowApps.js.map +0 -1
@@ -4,6 +4,8 @@ import { type UseSDKOptions } from "../core/SDKManager";
4
4
  export interface WhatsNewProps extends UseSDKOptions {
5
5
  /** Optional CSS class */
6
6
  className?: string;
7
+ /** Navigation function for internal routing */
8
+ navigate?: (path: string) => void;
7
9
  /** Handle product update clicks */
8
10
  onProductUpdateClick?: (update: ProductUpdateItem) => void;
9
11
  /** Handle article clicks */
@@ -1 +1 @@
1
- {"version":3,"file":"WhatsNew.d.ts","sourceRoot":"","sources":["../../src/components/WhatsNew.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAiBpE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKhE,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mCAAmC;IACnC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAE3D,4BAA4B;IAC5B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAojB5C,CAAC"}
1
+ {"version":3,"file":"WhatsNew.d.ts","sourceRoot":"","sources":["../../src/components/WhatsNew.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAiBpE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKhE,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC,mCAAmC;IACnC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAE3D,4BAA4B;IAC5B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA8iB5C,CAAC"}
@@ -11,7 +11,7 @@ import { COMPONENT_DEFAULTS } from "../config/component-defaults";
11
11
  import { useSDK } from "../core/SDKManager";
12
12
  // Fixed dimensions to prevent CLS - reduced to avoid excessive white space
13
13
  const CONTAINER_MIN_HEIGHT = 300; // Reduced from 450
14
- export const WhatsNew = ({ className = "", onProductUpdateClick, onArticleClick,
14
+ export const WhatsNew = ({ className = "", navigate, onProductUpdateClick, onArticleClick,
15
15
  // SDK options (optional)
16
16
  shopInfo, locale, translations, config, }) => {
17
17
  // Connect to SDK Manager (auto-initializes)
@@ -130,27 +130,24 @@ shopInfo, locale, translations, config, }) => {
130
130
  }
131
131
  if (tryUrl && tryUrl !== "modal") {
132
132
  if (tryUrl.startsWith("/")) {
133
- // Internal navigation - use SDK default behavior
134
- const currentUrl = window.location.href;
135
- const shopifyAdminMatch = currentUrl.match(/https:\/\/admin\.shopify\.com\/store\/([^\/]+)\/apps\/([^\/]+)/);
136
- if (shopifyAdminMatch) {
137
- const [, storeName, appName] = shopifyAdminMatch;
138
- const shopifyAppUrl = `https://admin.shopify.com/store/${storeName}/apps/${appName}${tryUrl}`;
139
- window.location.href = shopifyAppUrl;
140
- }
141
- else {
142
- window.location.href = tryUrl;
133
+ if (navigate) {
134
+ navigate(tryUrl);
143
135
  }
136
+ onProductUpdateClick?.(update);
137
+ return;
144
138
  }
145
139
  else if (tryUrl.startsWith("http://") ||
146
140
  tryUrl.startsWith("https://")) {
147
141
  window.open(tryUrl, "_blank");
142
+ onProductUpdateClick?.(update);
148
143
  }
149
144
  }
150
145
  else if (tryUrl === "modal") {
151
- // console.log("Modal action for:", update.id);
146
+ onProductUpdateClick?.(update);
147
+ }
148
+ else {
149
+ onProductUpdateClick?.(update);
152
150
  }
153
- onProductUpdateClick?.(update);
154
151
  };
155
152
  const handleArticleClick = (article) => {
156
153
  if (article.link) {
@@ -1 +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"]}
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 /** Navigation function for internal routing */\n navigate?: (path: string) => void;\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 navigate,\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 if (navigate) {\n navigate(tryUrl);\n }\n onProductUpdateClick?.(update);\n return;\n } else if (\n tryUrl.startsWith(\"http://\") ||\n tryUrl.startsWith(\"https://\")\n ) {\n window.open(tryUrl, \"_blank\");\n onProductUpdateClick?.(update);\n }\n } else if (tryUrl === \"modal\") {\n onProductUpdateClick?.(update);\n } else {\n onProductUpdateClick?.(update);\n }\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"]}
@@ -2,8 +2,10 @@
2
2
  * SDK Manager - Internal singleton for managing global state
3
3
  * Components automatically connect to this without manual provider setup
4
4
  */
5
- import { type SupportedLocale, type SDKTranslations } from '../translations/translation-manager';
6
- import { type ShopInfo, type SDKInternalConfig } from '../config/internal-config';
5
+ import { type SupportedLocale, type SDKTranslations } from "../translations/translation-manager";
6
+ import { type ShopInfo, type SDKInternalConfig } from "../config/internal-config";
7
+ import { DashboardEngine } from "./engine";
8
+ import { DashboardData } from "../types";
7
9
  interface SDKState {
8
10
  initialized: boolean;
9
11
  shopInfo?: ShopInfo;
@@ -12,6 +14,12 @@ interface SDKState {
12
14
  config: SDKInternalConfig;
13
15
  loading: boolean;
14
16
  error?: Error;
17
+ dashboardData?: DashboardData | null;
18
+ dashboardLoading?: boolean;
19
+ dashboardError?: Error | null;
20
+ campaignsData?: any[] | null;
21
+ campaignsLoading?: boolean;
22
+ campaignsError?: Error | null;
15
23
  }
16
24
  interface SDKOptions {
17
25
  shopInfo?: ShopInfo;
@@ -25,6 +33,7 @@ declare class SDKManagerClass {
25
33
  private initPromise?;
26
34
  private localeObserver?;
27
35
  private currentDetectedLocale?;
36
+ private dashboardEngine?;
28
37
  constructor();
29
38
  /**
30
39
  * Auto-detect current locale from browser/Shopify context
@@ -47,9 +56,13 @@ declare class SDKManagerClass {
47
56
  */
48
57
  private handleLocaleChange;
49
58
  /**
50
- * Refresh API data with new locale
59
+ * Refresh dashboard data with new locale
51
60
  */
52
- private refreshDataWithNewLocale;
61
+ private refreshDashboardData;
62
+ /**
63
+ * Refresh campaigns data with new locale
64
+ */
65
+ private refreshCampaignsData;
53
66
  /**
54
67
  * Normalize locale string to supported format
55
68
  */
@@ -141,6 +154,18 @@ declare class SDKManagerClass {
141
154
  readonly encryptStorage: false;
142
155
  };
143
156
  };
157
+ /**
158
+ * Get dashboard engine instance
159
+ */
160
+ getDashboardEngine(): DashboardEngine | undefined;
161
+ /**
162
+ * Get dashboard data
163
+ */
164
+ getDashboardData(): DashboardData | null | undefined;
165
+ /**
166
+ * Get campaigns data
167
+ */
168
+ getCampaignsData(): any[] | null | undefined;
144
169
  /**
145
170
  * Check if SDK is ready for use
146
171
  */
@@ -218,6 +243,7 @@ export declare function useSDK(options?: UseSDKOptions): {
218
243
  };
219
244
  };
220
245
  isReady: boolean;
246
+ dashboardEngine: DashboardEngine | undefined;
221
247
  initialized: boolean;
222
248
  shopInfo?: ShopInfo;
223
249
  locale: SupportedLocale;
@@ -225,6 +251,12 @@ export declare function useSDK(options?: UseSDKOptions): {
225
251
  config: SDKInternalConfig;
226
252
  loading: boolean;
227
253
  error?: Error;
254
+ dashboardData?: DashboardData | null;
255
+ dashboardLoading?: boolean;
256
+ dashboardError?: Error | null;
257
+ campaignsData?: any[] | null;
258
+ campaignsLoading?: boolean;
259
+ campaignsError?: Error | null;
228
260
  };
229
261
  export default SDKManager;
230
262
  //# sourceMappingURL=SDKManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SDKManager.d.ts","sourceRoot":"","sources":["../../src/core/SDKManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAA2B,KAAK,QAAQ,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAO3G,UAAU,QAAQ;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,eAAe,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAMD,cAAM,eAAe;IACnB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAC,CAAmB;IAC1C,OAAO,CAAC,qBAAqB,CAAC,CAAkB;;IAiBhD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,wBAAwB,CAO9B;IAEF;;OAEG;YACW,kBAAkB;IA4BhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAS3C,qBAAqB;IAmCnC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtD;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAIpB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK3C,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIX;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB;AAMD,eAAO,MAAM,UAAU,iBAAwB,CAAC;AAQhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBApanC,OAAO;eACT,QAAQ;YACX,eAAe;kBACT,eAAe;YACrB,iBAAiB;aAChB,OAAO;YACR,KAAK;EAicd;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"SDKManager.d.ts","sourceRoot":"","sources":["../../src/core/SDKManager.ts"],"names":[],"mappings":"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"}