@datlv-trustshop/shopify-inapp-components 0.2.8 → 0.2.10

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 (220) 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 +15 -30
  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 +262 -0
  70. package/dist/core/SDKManager.d.ts.map +1 -0
  71. package/dist/core/SDKManager.js +527 -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 +2 -3
  90. package/dist/hooks/index.d.ts.map +1 -0
  91. package/dist/hooks/index.js +2 -3
  92. package/dist/hooks/index.js.map +1 -0
  93. package/dist/hooks/useApps.d.ts +1 -0
  94. package/dist/hooks/useApps.d.ts.map +1 -0
  95. package/dist/hooks/useApps.js +10 -9
  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 +10 -14
  100. package/dist/hooks/useArticles.js.map +1 -0
  101. package/dist/hooks/useBanner.d.ts +1 -0
  102. package/dist/hooks/useBanner.d.ts.map +1 -0
  103. package/dist/hooks/useBanner.js +6 -5
  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 +18 -9
  112. package/dist/hooks/useDashboard.js.map +1 -0
  113. package/dist/hooks/useFloatingCards.d.ts +4 -2
  114. package/dist/hooks/useFloatingCards.d.ts.map +1 -0
  115. package/dist/hooks/useFloatingCards.js +52 -76
  116. package/dist/hooks/useFloatingCards.js.map +1 -0
  117. package/dist/hooks/usePartnerIntegration.d.ts +7 -2
  118. package/dist/hooks/usePartnerIntegration.d.ts.map +1 -0
  119. package/dist/hooks/usePartnerIntegration.js +26 -37
  120. package/dist/hooks/usePartnerIntegration.js.map +1 -0
  121. package/dist/hooks/useTranslations.d.ts +1 -0
  122. package/dist/hooks/useTranslations.d.ts.map +1 -0
  123. package/dist/hooks/useTranslations.js +5 -3
  124. package/dist/hooks/useTranslations.js.map +1 -0
  125. package/dist/hooks/useWhatsNew.d.ts +1 -0
  126. package/dist/hooks/useWhatsNew.d.ts.map +1 -0
  127. package/dist/hooks/useWhatsNew.js +9 -8
  128. package/dist/hooks/useWhatsNew.js.map +1 -0
  129. package/dist/index.d.ts +38 -22
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +76 -22
  132. package/dist/index.js.map +1 -0
  133. package/dist/translations/default.d.ts +1 -0
  134. package/dist/translations/default.d.ts.map +1 -0
  135. package/dist/translations/default.js +1 -0
  136. package/dist/translations/default.js.map +1 -0
  137. package/dist/translations/locales/cn.json +39 -0
  138. package/dist/translations/locales/de.json +39 -0
  139. package/dist/translations/locales/dk.json +39 -0
  140. package/dist/translations/locales/en.json +39 -0
  141. package/dist/translations/locales/es.json +39 -0
  142. package/dist/translations/locales/fr.json +39 -0
  143. package/dist/translations/locales/ie.json +39 -0
  144. package/dist/translations/locales/in.json +39 -0
  145. package/dist/translations/locales/it.json +39 -0
  146. package/dist/translations/locales/jp.json +39 -0
  147. package/dist/translations/locales/nl.json +39 -0
  148. package/dist/translations/locales/nz.json +39 -0
  149. package/dist/translations/locales/pt.json +39 -0
  150. package/dist/translations/locales/se.json +39 -0
  151. package/dist/translations/locales/vi.json +39 -0
  152. package/dist/translations/translation-manager.d.ts +89 -0
  153. package/dist/translations/translation-manager.d.ts.map +1 -0
  154. package/dist/translations/translation-manager.js +239 -0
  155. package/dist/translations/translation-manager.js.map +1 -0
  156. package/dist/types/app.d.ts +1 -0
  157. package/dist/types/app.d.ts.map +1 -0
  158. package/dist/types/app.js +1 -0
  159. package/dist/types/app.js.map +1 -0
  160. package/dist/types/article.d.ts +1 -0
  161. package/dist/types/article.d.ts.map +1 -0
  162. package/dist/types/article.js +1 -0
  163. package/dist/types/article.js.map +1 -0
  164. package/dist/types/banner.d.ts +1 -0
  165. package/dist/types/banner.d.ts.map +1 -0
  166. package/dist/types/banner.js +1 -0
  167. package/dist/types/banner.js.map +1 -0
  168. package/dist/types/component-props.d.ts +140 -0
  169. package/dist/types/component-props.d.ts.map +1 -0
  170. package/dist/types/component-props.js +6 -0
  171. package/dist/types/component-props.js.map +1 -0
  172. package/dist/types/dashboard.d.ts +1 -0
  173. package/dist/types/dashboard.d.ts.map +1 -0
  174. package/dist/types/dashboard.js +1 -0
  175. package/dist/types/dashboard.js.map +1 -0
  176. package/dist/types/index.d.ts +1 -0
  177. package/dist/types/index.d.ts.map +1 -0
  178. package/dist/types/index.js +1 -0
  179. package/dist/types/index.js.map +1 -0
  180. package/dist/types/integration.d.ts +1 -0
  181. package/dist/types/integration.d.ts.map +1 -0
  182. package/dist/types/integration.js +1 -0
  183. package/dist/types/integration.js.map +1 -0
  184. package/dist/types/partner.d.ts +1 -0
  185. package/dist/types/partner.d.ts.map +1 -0
  186. package/dist/types/partner.js +1 -0
  187. package/dist/types/partner.js.map +1 -0
  188. package/dist/types/product-update.d.ts +1 -0
  189. package/dist/types/product-update.d.ts.map +1 -0
  190. package/dist/types/product-update.js +1 -0
  191. package/dist/types/product-update.js.map +1 -0
  192. package/dist/types/translations.d.ts +1 -0
  193. package/dist/types/translations.d.ts.map +1 -0
  194. package/dist/types/translations.js +1 -0
  195. package/dist/types/translations.js.map +1 -0
  196. package/dist/utils/campaignTracking.d.ts +1 -0
  197. package/dist/utils/campaignTracking.d.ts.map +1 -0
  198. package/dist/utils/campaignTracking.js +1 -0
  199. package/dist/utils/campaignTracking.js.map +1 -0
  200. package/dist/utils/cls-monitor.d.ts +1 -0
  201. package/dist/utils/cls-monitor.d.ts.map +1 -0
  202. package/dist/utils/cls-monitor.js +1 -0
  203. package/dist/utils/cls-monitor.js.map +1 -0
  204. package/dist/utils/injectStyles.d.ts +1 -0
  205. package/dist/utils/injectStyles.d.ts.map +1 -0
  206. package/dist/utils/injectStyles.js +1 -0
  207. package/dist/utils/injectStyles.js.map +1 -0
  208. package/dist/utils/sessionManager.d.ts +1 -0
  209. package/dist/utils/sessionManager.d.ts.map +1 -0
  210. package/dist/utils/sessionManager.js +1 -0
  211. package/dist/utils/sessionManager.js.map +1 -0
  212. package/package.json +4 -3
  213. package/dist/hooks/useFloatingCardActions.d.ts +0 -17
  214. package/dist/hooks/useFloatingCardActions.js +0 -54
  215. package/dist/hooks/useFloatingCardEngine.d.ts +0 -21
  216. package/dist/hooks/useFloatingCardEngine.js +0 -39
  217. package/dist/hooks/useGrowApps.d.ts +0 -10
  218. package/dist/hooks/useGrowApps.js +0 -14
  219. package/dist/provider/DashboardProvider.d.ts +0 -36
  220. package/dist/provider/DashboardProvider.js +0 -200
@@ -1,71 +1,42 @@
1
- import { useState, useEffect, useCallback } from "react";
2
- import { useDashboardContext } from "../provider/DashboardProvider";
1
+ import { useState, useEffect, useCallback, useMemo } from "react";
2
+ import { useSDK } from "../core/SDKManager";
3
+ import SDKManager from "../core/SDKManager";
3
4
  /**
4
5
  * Hook to fetch and manage floating cards (campaigns)
6
+ * Now uses SDK-managed campaigns data
5
7
  */
6
8
  export function useFloatingCards(options = {}) {
7
- const { shopId, autoFetch = true, locale: propsLocale } = options;
8
- // Get locale from DashboardProvider context
9
- const dashboardContext = useDashboardContext();
10
- const contextLocale = dashboardContext?.locale;
11
- // Use props locale if provided, otherwise use context locale, fallback to 'en'
12
- const locale = propsLocale || contextLocale || "en";
13
- const [cards, setCards] = useState([]);
14
- const [loading, setLoading] = useState(false);
15
- const [error, setError] = useState(null);
9
+ const {
10
+ // SDK options
11
+ shopInfo, locale: propsLocale, translations, config, } = options;
12
+ // Get SDK state and auto-initialize
13
+ const sdk = useSDK({ shopInfo, locale: propsLocale, translations, config });
16
14
  const [dismissedCards, setDismissedCards] = useState(new Set());
17
- const fetchCards = useCallback(async () => {
18
- if (!shopId) {
19
- setError(new Error("Shop ID is required"));
20
- return;
21
- }
22
- setLoading(true);
23
- setError(null);
24
- try {
25
- const id = shopId;
26
- const apiUrl = typeof window !== "undefined" &&
27
- window.location.hostname === "localhost"
28
- ? `/api/campaigns?shop_id=${id}&locale=${locale}`
29
- : `https://ops.trustshop.io/api/campaigns?shop_id=${id}&locale=${locale}`;
30
- const response = await fetch(apiUrl, {
31
- method: "GET",
32
- headers: {
33
- Accept: "application/json",
34
- "Content-Type": "application/json",
35
- },
36
- credentials: "include",
37
- });
38
- if (!response.ok) {
39
- throw new Error(`Failed to fetch campaigns: ${response.statusText}`);
40
- }
41
- const data = await response.json();
42
- if (data.success && Array.isArray(data.data)) {
43
- const transformedCards = data.data.map((card) => ({
44
- ...card,
45
- // Ensure date format
46
- date: card.date || `Updated: ${new Date().toLocaleDateString()}`,
47
- // Transform tag tone if needed
48
- tag: card.tag
49
- ? {
50
- ...card.tag,
51
- tone: card.tag.tone || "info",
52
- }
53
- : undefined,
54
- }));
55
- setCards(transformedCards);
56
- }
57
- else {
58
- setCards([]);
59
- }
60
- }
61
- catch (err) {
62
- setError(err instanceof Error ? err : new Error("Unknown error"));
63
- setCards([]);
64
- }
65
- finally {
66
- setLoading(false);
15
+ // Get campaigns data directly from SDK
16
+ const campaignsData = SDKManager.getCampaignsData();
17
+ // Transform campaigns data to FloatingCardData format
18
+ const cards = useMemo(() => {
19
+ if (!campaignsData || !Array.isArray(campaignsData)) {
20
+ return [];
67
21
  }
68
- }, [shopId, locale]);
22
+ return campaignsData.map((card) => ({
23
+ ...card,
24
+ // Ensure date format
25
+ date: card.date || `Updated: ${new Date().toLocaleDateString()}`,
26
+ // Transform tag tone if needed
27
+ tag: card.tag
28
+ ? {
29
+ ...card.tag,
30
+ tone: card.tag.tone || "info",
31
+ }
32
+ : undefined,
33
+ }));
34
+ }, [campaignsData]);
35
+ // Dummy fetchCards for backward compatibility
36
+ const fetchCards = useCallback(async () => {
37
+ // Data is now managed by SDK, this is a no-op
38
+ // console.log("Campaigns data is now managed by SDK automatically");
39
+ }, []);
69
40
  const dismissCard = useCallback((cardId) => {
70
41
  setDismissedCards((prev) => {
71
42
  const newSet = new Set(prev);
@@ -104,16 +75,20 @@ export function useFloatingCards(options = {}) {
104
75
  console.error("Failed to load dismissed cards:", e);
105
76
  }
106
77
  }, []);
107
- // Auto-fetch on mount or when shopId/locale changes
78
+ // Listen for campaigns refresh events from SDK
108
79
  useEffect(() => {
109
- if (autoFetch && shopId) {
110
- fetchCards();
111
- }
112
- }, [autoFetch, shopId, fetchCards]); // fetchCards already depends on locale
80
+ const handleCampaignsRefresh = (_event) => {
81
+ // console.log("Campaigns refreshed via SDK:", _event.detail);
82
+ };
83
+ window.addEventListener("trustshop-campaigns-refresh", handleCampaignsRefresh);
84
+ return () => {
85
+ window.removeEventListener("trustshop-campaigns-refresh", handleCampaignsRefresh);
86
+ };
87
+ }, []);
113
88
  return {
114
89
  cards,
115
- loading,
116
- error,
90
+ loading: sdk.campaignsLoading || false,
91
+ error: sdk.campaignsError || null,
117
92
  dismissedCards,
118
93
  dismissCard,
119
94
  resetDismissedCards,
@@ -153,13 +128,13 @@ export function useVisibleFloatingCards(options = {}) {
153
128
  // Debug log for development
154
129
  if (typeof window !== "undefined" &&
155
130
  window.location.hostname === "localhost") {
156
- console.log("[FloatingCard] Route matching:", {
157
- cardId: card.id,
158
- currentRoute,
159
- currentPage,
160
- display_pages: card.display_pages,
161
- matches: card.display_pages.includes(currentPage),
162
- });
131
+ // console.log("[FloatingCard] Route matching:", {
132
+ // cardId: card.id,
133
+ // currentRoute,
134
+ // currentPage,
135
+ // display_pages: card.display_pages,
136
+ // matches: card.display_pages.includes(currentPage),
137
+ // });
163
138
  }
164
139
  // Check if current page is in display_pages
165
140
  return card.display_pages.includes(currentPage);
@@ -180,3 +155,4 @@ export function useVisibleFloatingCards(options = {}) {
180
155
  hasDismissedCards,
181
156
  };
182
157
  }
158
+ //# sourceMappingURL=useFloatingCards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloatingCards.js","sourceRoot":"","sources":["../../src/hooks/useFloatingCards.ts"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useCallback, useMemo } from \"react\";\nimport type { FloatingCardData } from \"../components/FloatingCard\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nimport SDKManager from \"../core/SDKManager\";\nexport type { FloatingCardData } from \"../components/FloatingCard\";\n\ninterface UseFloatingCardsOptions extends UseSDKOptions {\n shopId?: string;\n autoFetch?: boolean;\n currentRoute?: string;\n}\n\ninterface UseFloatingCardsReturn {\n cards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n dismissedCards: Set<number>;\n dismissCard: (cardId: number) => void;\n resetDismissedCards: () => void;\n fetchCards: () => Promise<void>;\n}\n\n/**\n * Hook to fetch and manage floating cards (campaigns)\n * Now uses SDK-managed campaigns data\n */\nexport function useFloatingCards(\n options: UseFloatingCardsOptions = {},\n): UseFloatingCardsReturn {\n const {\n // SDK options\n shopInfo,\n locale: propsLocale,\n translations,\n config,\n } = options;\n\n // Get SDK state and auto-initialize\n const sdk = useSDK({ shopInfo, locale: propsLocale, translations, config });\n\n const [dismissedCards, setDismissedCards] = useState<Set<number>>(new Set());\n\n // Get campaigns data directly from SDK\n const campaignsData = SDKManager.getCampaignsData();\n\n // Transform campaigns data to FloatingCardData format\n const cards = useMemo(() => {\n if (!campaignsData || !Array.isArray(campaignsData)) {\n return [];\n }\n\n return campaignsData.map((card: any) => ({\n ...card,\n // Ensure date format\n date: card.date || `Updated: ${new Date().toLocaleDateString()}`,\n // Transform tag tone if needed\n tag: card.tag\n ? {\n ...card.tag,\n tone: card.tag.tone || \"info\",\n }\n : undefined,\n })) as FloatingCardData[];\n }, [campaignsData]);\n\n // Dummy fetchCards for backward compatibility\n const fetchCards = useCallback(async () => {\n // Data is now managed by SDK, this is a no-op\n // console.log(\"Campaigns data is now managed by SDK automatically\");\n }, []);\n\n const dismissCard = useCallback((cardId: number) => {\n setDismissedCards((prev) => {\n const newSet = new Set(prev);\n newSet.add(cardId);\n\n // Store in localStorage for persistence\n try {\n localStorage.setItem(\n \"trustshop_dismissed_cards\",\n JSON.stringify(Array.from(newSet)),\n );\n } catch (e) {\n console.error(\"Failed to save dismissed cards:\", e);\n }\n\n return newSet;\n });\n }, []);\n\n const resetDismissedCards = useCallback(() => {\n setDismissedCards(new Set());\n try {\n localStorage.removeItem(\"trustshop_dismissed_cards\");\n } catch (e) {\n console.error(\"Failed to clear dismissed cards:\", e);\n }\n }, []);\n\n // Load dismissed cards from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(\"trustshop_dismissed_cards\");\n if (stored) {\n const parsed = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n setDismissedCards(new Set(parsed));\n }\n }\n } catch (e) {\n console.error(\"Failed to load dismissed cards:\", e);\n }\n }, []);\n\n // Listen for campaigns refresh events from SDK\n useEffect(() => {\n const handleCampaignsRefresh = (_event: any) => {\n // console.log(\"Campaigns refreshed via SDK:\", _event.detail);\n };\n\n window.addEventListener(\n \"trustshop-campaigns-refresh\",\n handleCampaignsRefresh,\n );\n\n return () => {\n window.removeEventListener(\n \"trustshop-campaigns-refresh\",\n handleCampaignsRefresh,\n );\n };\n }, []);\n\n return {\n cards,\n loading: sdk.campaignsLoading || false,\n error: sdk.campaignsError || null,\n dismissedCards,\n dismissCard,\n resetDismissedCards,\n fetchCards,\n };\n}\n\n/**\n * Get visible (non-dismissed) cards\n */\nexport function useVisibleFloatingCards(\n options: UseFloatingCardsOptions = {},\n): {\n visibleCards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n dismissCard: (cardId: number) => void;\n resetDismissedCards: () => void;\n hasDismissedCards: boolean;\n} {\n const { currentRoute, ...restOptions } = options;\n // Note: locale is passed through in restOptions\n const {\n cards,\n loading,\n error,\n dismissedCards,\n dismissCard,\n resetDismissedCards,\n } = useFloatingCards(restOptions);\n\n // Filter cards based on:\n // 1. Not dismissed\n // 2. Route matching (if display_pages is set)\n const visibleCards = cards.filter((card) => {\n // Check if card is dismissed\n if (dismissedCards.has(card.id)) {\n return false;\n }\n\n // Check display_pages logic\n if (card.display_pages !== undefined && card.display_pages !== null) {\n // If display_pages is empty array, show on all pages\n if (card.display_pages.length === 0) {\n return true;\n }\n\n // If display_pages has values, check if current route matches\n if (currentRoute !== undefined) {\n // Extract the page key from the route\n // Special handling: \"/\" or \"\" should map to \"dashboard\"\n let currentPage = currentRoute.replace(/^\\//, \"\").split(\"/\")[0];\n\n // Map root route to dashboard (in-app convention)\n if (!currentPage || currentPage === \"\" || currentRoute === \"/\") {\n currentPage = \"dashboard\";\n }\n\n // Debug log for development\n if (\n typeof window !== \"undefined\" &&\n window.location.hostname === \"localhost\"\n ) {\n // console.log(\"[FloatingCard] Route matching:\", {\n // cardId: card.id,\n // currentRoute,\n // currentPage,\n // display_pages: card.display_pages,\n // matches: card.display_pages.includes(currentPage),\n // });\n }\n\n // Check if current page is in display_pages\n return card.display_pages.includes(currentPage);\n }\n\n // If no current route provided, assume dashboard\n return card.display_pages.includes(\"dashboard\");\n }\n\n // If display_pages is not defined, show on all pages (backward compatibility)\n return true;\n });\n\n const hasDismissedCards = dismissedCards.size > 0;\n\n return {\n visibleCards,\n loading,\n error,\n dismissCard,\n resetDismissedCards,\n hasDismissedCards,\n };\n}\n"]}
@@ -1,9 +1,13 @@
1
- import { IntegrationItem, IntegrationGroup } from "../types/integration";
1
+ import { IntegrationItem } from "../types/integration";
2
2
  /**
3
3
  * Hook to get all partner integrations from dashboard data
4
4
  */
5
5
  export declare function usePartnerIntegrations(): {
6
- groups: IntegrationGroup[];
6
+ groups: {
7
+ key: string;
8
+ title: string;
9
+ items: any[];
10
+ }[];
7
11
  loading: boolean;
8
12
  error: Error | null;
9
13
  integrations: any[];
@@ -20,3 +24,4 @@ export declare function usePartnerIntegrationStatus(key: string): {
20
24
  isActive: boolean;
21
25
  isInstalled: boolean;
22
26
  };
27
+ //# sourceMappingURL=usePartnerIntegration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;;;;EAiCrC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GACV,eAAe,GAAG,IAAI,CAMxB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,CAeA"}
@@ -1,49 +1,37 @@
1
1
  import { useMemo } from "react";
2
- import { useDashboardContext } from "../provider/DashboardProvider";
2
+ import { useSDK } from "../core/SDKManager";
3
+ import SDKManager from "../core/SDKManager";
3
4
  /**
4
5
  * Hook to get all partner integrations from dashboard data
5
6
  */
6
7
  export function usePartnerIntegrations() {
7
- const { state, translations } = useDashboardContext();
8
- const groups = useMemo(() => {
9
- const integrations = state.data?.integrations || [];
10
- const groupsMap = [];
11
- // Group by category_key
12
- const reviewSources = integrations.filter((item) => item.category_key === "review_sources" && item.key !== "google_reviews");
13
- if (reviewSources.length > 0) {
14
- groupsMap.push({
15
- title: translations.partnerIntegration?.reviewSourcesTitle ||
16
- "Review Sources",
17
- key: "review_sources",
18
- items: reviewSources.sort((a, b) => a.position - b.position),
19
- });
20
- }
21
- const postPurchase = integrations.filter((item) => item.category_key === "post_purchase_automation");
22
- if (postPurchase.length > 0) {
23
- groupsMap.push({
24
- title: translations.partnerIntegration?.postPurchaseTitle ||
25
- "Post-purchase & Automation",
26
- key: "post_purchase_automation",
27
- items: postPurchase.sort((a, b) => a.position - b.position),
28
- });
8
+ const sdk = useSDK({});
9
+ // Get dashboard data from SDK
10
+ const dashboardData = SDKManager.getDashboardData();
11
+ // Partner integrations are stored directly in the integrations field
12
+ const integrations = useMemo(() => {
13
+ if (!dashboardData?.integrations) {
14
+ return [];
29
15
  }
30
- const seoSnippets = integrations.filter((item) => item.category_key === "seo_rich_snippets");
31
- if (seoSnippets.length > 0) {
32
- groupsMap.push({
33
- title: translations.partnerIntegration?.seoSnippetsTitle ||
34
- "SEO & Rich Snippets",
35
- key: "seo_rich_snippets",
36
- items: seoSnippets.sort((a, b) => a.position - b.position),
37
- });
16
+ return dashboardData.integrations;
17
+ }, [dashboardData]);
18
+ // Group integrations for backward compatibility
19
+ const groups = useMemo(() => {
20
+ if (!integrations || integrations.length === 0) {
21
+ return [];
38
22
  }
39
- return groupsMap;
40
- }, [state.data?.integrations, translations]);
41
- const isLoading = state.loading || (!state.data && !state.error);
23
+ // Create a single group with all integrations for now
24
+ return [{
25
+ key: 'all',
26
+ title: 'All Integrations',
27
+ items: integrations
28
+ }];
29
+ }, [integrations]);
42
30
  return {
43
31
  groups,
44
- loading: isLoading,
45
- error: state.error,
46
- integrations: state.data?.integrations || [],
32
+ loading: sdk.dashboardLoading || false,
33
+ error: sdk.dashboardError || null,
34
+ integrations,
47
35
  };
48
36
  }
49
37
  /**
@@ -71,3 +59,4 @@ export function usePartnerIntegrationStatus(key) {
71
59
  return { isConnected, isActive, isInstalled };
72
60
  }, [integration, key]);
73
61
  }
62
+ //# sourceMappingURL=usePartnerIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePartnerIntegration.js","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,8BAA8B;IAC9B,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAEpD,qEAAqE;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,aAAa,CAAC,YAAY,CAAC;IACpC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,gDAAgD;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,sDAAsD;QACtD,OAAO,CAAC;gBACN,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,kBAAkB;gBACzB,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO;QACL,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;QACjC,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAW;IAEX,MAAM,EAAE,YAAY,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAElD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC;IACpE,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IAKrD,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACrE,CAAC;QAED,mDAAmD;QACnD,MAAM,WAAW,GAAG,GAAG,KAAK,gBAAgB,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,KAAK,YAAY,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC;QAErD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport SDKManager from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\n\n/**\n * Hook to get all partner integrations from dashboard data\n */\nexport function usePartnerIntegrations() {\n const sdk = useSDK({});\n \n // Get dashboard data from SDK\n const dashboardData = SDKManager.getDashboardData();\n\n // Partner integrations are stored directly in the integrations field\n const integrations = useMemo(() => {\n if (!dashboardData?.integrations) {\n return [];\n }\n return dashboardData.integrations;\n }, [dashboardData]);\n\n // Group integrations for backward compatibility\n const groups = useMemo(() => {\n if (!integrations || integrations.length === 0) {\n return [];\n }\n // Create a single group with all integrations for now\n return [{\n key: 'all',\n title: 'All Integrations',\n items: integrations\n }];\n }, [integrations]);\n\n return {\n groups,\n loading: sdk.dashboardLoading || false,\n error: sdk.dashboardError || null,\n integrations,\n };\n}\n\n/**\n * Hook to get a specific integration by key\n */\nexport function usePartnerIntegrationByKey(\n key: string,\n): IntegrationItem | null {\n const { integrations } = usePartnerIntegrations();\n\n return useMemo(() => {\n return integrations.find((item: any) => item.key === key) || null;\n }, [integrations, key]);\n}\n\n/**\n * Hook to get integration status\n */\nexport function usePartnerIntegrationStatus(key: string): {\n isConnected: boolean;\n isActive: boolean;\n isInstalled: boolean;\n} {\n const integration = usePartnerIntegrationByKey(key);\n\n return useMemo(() => {\n if (!integration) {\n return { isConnected: false, isActive: false, isInstalled: false };\n }\n\n // Check based on integration key and button states\n const isConnected = key === \"google_reviews\";\n const isActive = key !== \"after_ship\";\n const isInstalled = !integration.button_install_text;\n\n return { isConnected, isActive, isInstalled };\n }, [integration, key]);\n}\n"]}
@@ -1,3 +1,4 @@
1
1
  import { SDKTranslations } from '../types/translations';
2
2
  export declare function useTranslations(): Required<SDKTranslations>;
3
3
  export declare function useTranslation<K extends keyof SDKTranslations>(key: K): Required<SDKTranslations>[K];
4
+ //# sourceMappingURL=useTranslations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslations.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,wBAAgB,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,CAI3D;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,eAAe,EAC5D,GAAG,EAAE,CAAC,GACL,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAG9B"}
@@ -1,9 +1,11 @@
1
- import { useDashboardContext } from '../provider/DashboardProvider';
1
+ import { useSDK } from '../core/SDKManager';
2
2
  export function useTranslations() {
3
- const context = useDashboardContext();
4
- return context.translations;
3
+ // Legacy hook - use useSDK instead
4
+ const sdk = useSDK({});
5
+ return sdk.translations;
5
6
  }
6
7
  export function useTranslation(key) {
7
8
  const translations = useTranslations();
8
9
  return translations[key];
9
10
  }
11
+ //# sourceMappingURL=useTranslations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslations.js","sourceRoot":"","sources":["../../src/hooks/useTranslations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,UAAU,eAAe;IAC7B,mCAAmC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC,YAAY,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,GAAM;IAEN,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import { useSDK } from '../core/SDKManager';\nimport { SDKTranslations } from '../types/translations';\n\nexport function useTranslations(): Required<SDKTranslations> {\n // Legacy hook - use useSDK instead\n const sdk = useSDK({});\n return sdk.translations;\n}\n\nexport function useTranslation<K extends keyof SDKTranslations>(\n key: K\n): Required<SDKTranslations>[K] {\n const translations = useTranslations();\n return translations[key];\n}"]}
@@ -9,3 +9,4 @@ export interface UseWhatsNewResult {
9
9
  export declare function useWhatsNew(limit?: number): UseWhatsNewResult;
10
10
  export declare function useLatestUpdate(): ProductUpdateItem | null;
11
11
  export declare function useMajorUpdates(): ProductUpdateItem[];
12
+ //# sourceMappingURL=useWhatsNew.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWhatsNew.d.ts","sourceRoot":"","sources":["../../src/hooks/useWhatsNew.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAClE,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK,iBAAiB,EAAE,CAAC;IAC7E,eAAe,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA+B7D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAG1D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,EAAE,CAGrD"}
@@ -1,24 +1,24 @@
1
1
  import { useMemo } from "react";
2
- import { useDashboardContext } from "../provider/DashboardProvider";
2
+ import { useSDK } from "../core/SDKManager";
3
3
  export function useWhatsNew(limit) {
4
- const { engine, state } = useDashboardContext();
4
+ const sdk = useSDK();
5
5
  const updates = useMemo(() => {
6
- if (!engine || !state.data)
6
+ if (!sdk.dashboardEngine)
7
7
  return [];
8
- return engine.getWhatsNew(limit);
9
- }, [engine, limit, state.data]);
8
+ return sdk.dashboardEngine.getWhatsNew(limit);
9
+ }, [sdk.dashboardEngine, sdk.dashboardData, limit]);
10
10
  const getUpdate = (id) => {
11
- return updates.find((update) => update.id === id);
11
+ return updates.find(update => update.id === id || update.id === String(id) || update.id === Number(id));
12
12
  };
13
13
  const getUpdatesByType = (type) => {
14
- return updates.filter((update) => update.type === type);
14
+ return updates.filter(update => update.type === type);
15
15
  };
16
16
  const getLatestUpdate = () => {
17
17
  return updates[0] || null;
18
18
  };
19
19
  return {
20
20
  updates,
21
- loading: state.loading,
21
+ loading: sdk.dashboardLoading || false,
22
22
  getUpdate,
23
23
  getUpdatesByType,
24
24
  getLatestUpdate,
@@ -32,3 +32,4 @@ export function useMajorUpdates() {
32
32
  const { getUpdatesByType } = useWhatsNew();
33
33
  return getUpdatesByType("major");
34
34
  }
35
+ //# sourceMappingURL=useWhatsNew.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWhatsNew.js","sourceRoot":"","sources":["../../src/hooks/useWhatsNew.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAW5C,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,CAAC,EAAmB,EAAiC,EAAE;QACvE,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC3B,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CACzE,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CACvB,IAAiC,EACZ,EAAE;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAA6B,EAAE;QACrD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,SAAS;QACT,gBAAgB;QAChB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;IAC3C,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { ProductUpdateItem } from \"../types\";\n\nexport interface UseWhatsNewResult {\n updates: ProductUpdateItem[];\n loading: boolean;\n getUpdate: (id: string | number) => ProductUpdateItem | undefined;\n getUpdatesByType: (type: \"major\" | \"minor\" | \"patch\") => ProductUpdateItem[];\n getLatestUpdate: () => ProductUpdateItem | null;\n}\n\nexport function useWhatsNew(limit?: number): UseWhatsNewResult {\n const sdk = useSDK();\n\n const updates = useMemo(() => {\n if (!sdk.dashboardEngine) return [];\n return sdk.dashboardEngine.getWhatsNew(limit);\n }, [sdk.dashboardEngine, sdk.dashboardData, limit]);\n\n const getUpdate = (id: string | number): ProductUpdateItem | undefined => {\n return updates.find(update => \n update.id === id || update.id === String(id) || update.id === Number(id)\n );\n };\n\n const getUpdatesByType = (\n type: \"major\" | \"minor\" | \"patch\",\n ): ProductUpdateItem[] => {\n return updates.filter(update => update.type === type);\n };\n\n const getLatestUpdate = (): ProductUpdateItem | null => {\n return updates[0] || null;\n };\n\n return {\n updates,\n loading: sdk.dashboardLoading || false,\n getUpdate,\n getUpdatesByType,\n getLatestUpdate,\n };\n}\n\nexport function useLatestUpdate(): ProductUpdateItem | null {\n const { updates } = useWhatsNew(1);\n return updates[0] || null;\n}\n\nexport function useMajorUpdates(): ProductUpdateItem[] {\n const { getUpdatesByType } = useWhatsNew();\n return getUpdatesByType(\"major\");\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,23 +1,39 @@
1
- export { DashboardEngine } from "./core/engine";
2
- export { GlobalDashboardManager } from "./core/global-manager";
3
- export { adaptDashboardData, adaptBanner, adaptApp, adaptArticle, adaptProductUpdate, } from "./core/adapter";
4
- export { fetchDashboard, clearCache, getCacheSize } from "./core/fetcher";
5
- export * from "./types";
6
- export { DashboardProvider, DashboardContext, useDashboardContext, } from "./provider/DashboardProvider";
7
- export type { DashboardProviderProps, DashboardContextValue, } from "./provider/DashboardProvider";
8
- export * from "./hooks";
9
- export * from "./components";
10
- export { CLSMonitor, startCLSMonitoring, stopCLSMonitoring, getCLSMetrics } from "./utils/cls-monitor";
1
+ /**
2
+ * @trustshop/shopify-inapp-components
3
+ *
4
+ * Provider-less component architecture for Shopify in-app dashboards
5
+ * Components work standalone without any provider wrapper required
6
+ */
7
+ export { TopBanner } from "./components/TopBanner";
8
+ export { WhatsNew } from "./components/WhatsNew";
9
+ export { GrowApps } from "./components/GrowApps";
10
+ export { PopupBanner } from "./components/PopupBanner";
11
+ export { PartnerIntegration } from "./components/PartnerIntegration";
12
+ export { PartnerList } from "./components/PartnerList";
13
+ export { FloatingCard } from "./components/FloatingCard";
14
+ export type { TopBannerProps } from "./components/TopBanner";
15
+ export type { WhatsNewProps } from "./components/WhatsNew";
16
+ export type { GrowAppsProps } from "./components/GrowApps";
17
+ export type { PopupBannerProps } from "./components/PopupBanner";
18
+ export type { PartnerIntegrationProps, IntegrationStatusInfo } from "./components/PartnerIntegration";
19
+ export type { PartnerListProps } from "./components/PartnerList";
20
+ export { SDKManager } from "./core/SDKManager";
21
+ export { useSDK } from "./core/SDKManager";
22
+ export type { UseSDKOptions } from "./core/SDKManager";
23
+ export type { ShopInfo, SDKInternalConfig } from "./config/internal-config";
24
+ export type { SupportedLocale, SDKTranslations, } from "./translations/translation-manager";
25
+ export { loadTranslations, getTranslations, normalizeLocale, SUPPORTED_LOCALES, LOCALE_METADATA, DEFAULT_LOCALE, } from "./translations/translation-manager";
26
+ export type { BannerItem } from "./types/banner";
27
+ export type { ArticleItem } from "./types/article";
28
+ export type { ProductUpdateItem } from "./types/product-update";
29
+ export type { GrowApp, DashboardConfig } from "./types/dashboard";
30
+ export type { IntegrationItem } from "./types/integration";
31
+ export type { PartnerItem } from "./types/partner";
32
+ export type { FloatingCardData } from "./components/FloatingCard";
33
+ export { CLSMonitor, startCLSMonitoring, stopCLSMonitoring, getCLSMetrics, } from "./utils/cls-monitor";
11
34
  export type { CLSMetrics, CLSMonitorOptions } from "./utils/cls-monitor";
12
- export type { SDKTranslations } from './types/translations';
13
- export { defaultTranslations } from './translations/default';
14
- export { useTranslations, useTranslation } from './hooks/useTranslations';
15
- export { trackCampaignView, trackCampaignClick, clearViewTrackingCache } from './utils/campaignTracking';
16
- export { getSessionId, clearSession, hasSession } from './utils/sessionManager';
17
- export { useCampaignTracking, useCampaignVisibility } from './hooks/useCampaignTracking';
18
- import { DashboardEngine } from "./core/engine";
19
- declare const _default: {
20
- DashboardEngine: typeof DashboardEngine;
21
- DashboardProvider: import("react").FC<import(".").DashboardProviderProps>;
22
- };
23
- export default _default;
35
+ export { trackCampaignView, trackCampaignClick, clearViewTrackingCache, } from "./utils/campaignTracking";
36
+ export { getSessionId, clearSession, hasSession } from "./utils/sessionManager";
37
+ export { useCampaignTracking, useCampaignVisibility } from "./hooks/useCampaignTracking";
38
+ export { useVisibleFloatingCards } from "./hooks/useFloatingCards";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACtG,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAQjE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG5E,YAAY,EACV,eAAe,EACf,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,oCAAoC,CAAC;AAO5C,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,22 +1,76 @@
1
- export { DashboardEngine } from "./core/engine";
2
- export { GlobalDashboardManager } from "./core/global-manager";
3
- export { adaptDashboardData, adaptBanner, adaptApp, adaptArticle, adaptProductUpdate, } from "./core/adapter";
4
- export { fetchDashboard, clearCache, getCacheSize } from "./core/fetcher";
5
- export * from "./types";
6
- export { DashboardProvider, DashboardContext, useDashboardContext, } from "./provider/DashboardProvider";
7
- export * from "./hooks";
8
- export * from "./components";
9
- // Export CLS monitoring utilities (optional)
10
- export { CLSMonitor, startCLSMonitoring, stopCLSMonitoring, getCLSMetrics } from "./utils/cls-monitor";
11
- export { defaultTranslations } from './translations/default';
12
- export { useTranslations, useTranslation } from './hooks/useTranslations';
13
- // Campaign Tracking
14
- export { trackCampaignView, trackCampaignClick, clearViewTrackingCache } from './utils/campaignTracking';
15
- export { getSessionId, clearSession, hasSession } from './utils/sessionManager';
16
- export { useCampaignTracking, useCampaignVisibility } from './hooks/useCampaignTracking';
17
- import { DashboardEngine } from "./core/engine";
18
- import { DashboardProvider } from "./provider/DashboardProvider";
19
- export default {
20
- DashboardEngine,
21
- DashboardProvider,
22
- };
1
+ /**
2
+ * @trustshop/shopify-inapp-components
3
+ *
4
+ * Provider-less component architecture for Shopify in-app dashboards
5
+ * Components work standalone without any provider wrapper required
6
+ */
7
+ // ============================================
8
+ // PRIMARY EXPORTS - Component-Driven API
9
+ // ============================================
10
+ // Main UI components (auto-initialize, no provider needed)
11
+ export { TopBanner } from "./components/TopBanner";
12
+ export { WhatsNew } from "./components/WhatsNew";
13
+ export { GrowApps } from "./components/GrowApps";
14
+ export { PopupBanner } from "./components/PopupBanner";
15
+ export { PartnerIntegration } from "./components/PartnerIntegration";
16
+ export { PartnerList } from "./components/PartnerList";
17
+ export { FloatingCard } from "./components/FloatingCard";
18
+ // FloatingCard props defined inline in component
19
+ // ============================================
20
+ // ADVANCED CUSTOMIZATION (Optional)
21
+ // ============================================
22
+ // SDK Manager for advanced control (rarely needed)
23
+ export { SDKManager } from "./core/SDKManager";
24
+ export { useSDK } from "./core/SDKManager";
25
+ export { loadTranslations, getTranslations, normalizeLocale, SUPPORTED_LOCALES, LOCALE_METADATA, DEFAULT_LOCALE, } from "./translations/translation-manager";
26
+ // ============================================
27
+ // UTILITIES (Optional)
28
+ // ============================================
29
+ // CLS monitoring (for performance debugging)
30
+ export { CLSMonitor, startCLSMonitoring, stopCLSMonitoring, getCLSMetrics, } from "./utils/cls-monitor";
31
+ // Campaign tracking
32
+ export { trackCampaignView, trackCampaignClick, clearViewTrackingCache, } from "./utils/campaignTracking";
33
+ export { getSessionId, clearSession, hasSession } from "./utils/sessionManager";
34
+ export { useCampaignTracking, useCampaignVisibility } from "./hooks/useCampaignTracking";
35
+ export { useVisibleFloatingCards } from "./hooks/useFloatingCards";
36
+ // ============================================
37
+ // RECOMMENDED USAGE
38
+ // ============================================
39
+ /*
40
+
41
+ ✨ SIMPLE USAGE (Recommended)
42
+
43
+ import { TopBanner, WhatsNew, GrowApps } from '@trustshop/shopify-inapp-components';
44
+
45
+ export default function Dashboard() {
46
+ return (
47
+ <>
48
+ <TopBanner />
49
+ <WhatsNew />
50
+ <GrowApps />
51
+ </>
52
+ );
53
+ }
54
+
55
+ 🎨 WITH CUSTOMIZATION
56
+
57
+ import { TopBanner, WhatsNew } from '@trustshop/shopify-inapp-components';
58
+
59
+ export default function Dashboard() {
60
+ return (
61
+ <>
62
+ <TopBanner
63
+ shopInfo={{ id: "12345", domain: "shop.myshopify.com" }}
64
+ config={{ apiUrl: "/api/dashboard" }}
65
+ onClose={() => console.log('Banner closed')}
66
+ />
67
+ <WhatsNew
68
+ locale="fr"
69
+ onProductUpdateClick={(update) => handleUpdate(update)}
70
+ />
71
+ </>
72
+ );
73
+ }
74
+
75
+ */
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+CAA+C;AAC/C,yCAAyC;AACzC,+CAA+C;AAE/C,2DAA2D;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AASzD,iDAAiD;AAEjD,+CAA+C;AAC/C,oCAAoC;AACpC,+CAA+C;AAE/C,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAW3C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,oCAAoC,CAAC;AAe5C,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,6CAA6C;AAC7C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAG7B,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCE","sourcesContent":["/**\n * @trustshop/shopify-inapp-components\n *\n * Provider-less component architecture for Shopify in-app dashboards\n * Components work standalone without any provider wrapper required\n */\n\n// ============================================\n// PRIMARY EXPORTS - Component-Driven API\n// ============================================\n\n// Main UI components (auto-initialize, no provider needed)\nexport { TopBanner } from \"./components/TopBanner\";\nexport { WhatsNew } from \"./components/WhatsNew\";\nexport { GrowApps } from \"./components/GrowApps\";\nexport { PopupBanner } from \"./components/PopupBanner\";\nexport { PartnerIntegration } from \"./components/PartnerIntegration\";\nexport { PartnerList } from \"./components/PartnerList\";\nexport { FloatingCard } from \"./components/FloatingCard\";\n\n// Component prop types\nexport type { TopBannerProps } from \"./components/TopBanner\";\nexport type { WhatsNewProps } from \"./components/WhatsNew\";\nexport type { GrowAppsProps } from \"./components/GrowApps\";\nexport type { PopupBannerProps } from \"./components/PopupBanner\";\nexport type { PartnerIntegrationProps, IntegrationStatusInfo } from \"./components/PartnerIntegration\";\nexport type { PartnerListProps } from \"./components/PartnerList\";\n// FloatingCard props defined inline in component\n\n// ============================================\n// ADVANCED CUSTOMIZATION (Optional)\n// ============================================\n\n// SDK Manager for advanced control (rarely needed)\nexport { SDKManager } from \"./core/SDKManager\";\nexport { useSDK } from \"./core/SDKManager\";\nexport type { UseSDKOptions } from \"./core/SDKManager\";\n\n// Configuration types\nexport type { ShopInfo, SDKInternalConfig } from \"./config/internal-config\";\n\n// Translation types and utilities\nexport type {\n SupportedLocale,\n SDKTranslations,\n} from \"./translations/translation-manager\";\nexport {\n loadTranslations,\n getTranslations,\n normalizeLocale,\n SUPPORTED_LOCALES,\n LOCALE_METADATA,\n DEFAULT_LOCALE,\n} from \"./translations/translation-manager\";\n\n// ============================================\n// DATA TYPES\n// ============================================\n\n// Core data types\nexport type { BannerItem } from \"./types/banner\";\nexport type { ArticleItem } from \"./types/article\";\nexport type { ProductUpdateItem } from \"./types/product-update\";\nexport type { GrowApp, DashboardConfig } from \"./types/dashboard\";\nexport type { IntegrationItem } from \"./types/integration\";\nexport type { PartnerItem } from \"./types/partner\";\nexport type { FloatingCardData } from \"./components/FloatingCard\";\n\n// ============================================\n// UTILITIES (Optional)\n// ============================================\n\n// CLS monitoring (for performance debugging)\nexport {\n CLSMonitor,\n startCLSMonitoring,\n stopCLSMonitoring,\n getCLSMetrics,\n} from \"./utils/cls-monitor\";\nexport type { CLSMetrics, CLSMonitorOptions } from \"./utils/cls-monitor\";\n\n// Campaign tracking\nexport {\n trackCampaignView,\n trackCampaignClick,\n clearViewTrackingCache,\n} from \"./utils/campaignTracking\";\nexport { getSessionId, clearSession, hasSession } from \"./utils/sessionManager\";\nexport { useCampaignTracking, useCampaignVisibility } from \"./hooks/useCampaignTracking\";\nexport { useVisibleFloatingCards } from \"./hooks/useFloatingCards\";\n\n\n// ============================================\n// RECOMMENDED USAGE\n// ============================================\n\n/*\n\n✨ SIMPLE USAGE (Recommended)\n\nimport { TopBanner, WhatsNew, GrowApps } from '@trustshop/shopify-inapp-components';\n\nexport default function Dashboard() {\n return (\n <>\n <TopBanner />\n <WhatsNew />\n <GrowApps />\n </>\n );\n}\n\n🎨 WITH CUSTOMIZATION\n\nimport { TopBanner, WhatsNew } from '@trustshop/shopify-inapp-components';\n\nexport default function Dashboard() {\n return (\n <>\n <TopBanner \n shopInfo={{ id: \"12345\", domain: \"shop.myshopify.com\" }}\n config={{ apiUrl: \"/api/dashboard\" }}\n onClose={() => console.log('Banner closed')}\n />\n <WhatsNew \n locale=\"fr\"\n onProductUpdateClick={(update) => handleUpdate(update)}\n />\n </>\n );\n}\n\n*/\n"]}
@@ -1,2 +1,3 @@
1
1
  import { SDKTranslations } from '../types/translations';
2
2
  export declare const defaultTranslations: Required<SDKTranslations>;
3
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/translations/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,eAAe,CAsDzD,CAAC"}
@@ -53,3 +53,4 @@ export const defaultTranslations = {
53
53
  }
54
54
  }
55
55
  };
56
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/translations/default.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D,QAAQ,EAAE;QACR,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE;YACJ,OAAO,EAAE,UAAU;YACnB,aAAa,EAAE,iBAAiB;SACjC;QACD,aAAa,EAAE;YACb,OAAO,EAAE,mBAAmB;YAC5B,aAAa,EAAE,kBAAkB;SAClC;QACD,MAAM,EAAE,sBAAsB;KAC/B;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,uBAAuB;QAC9B,QAAQ,EAAE,sEAAsE;QAChF,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,mBAAmB;KAC5B;IACD,MAAM,EAAE;QACN,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,sBAAsB;QAC7B,kBAAkB,EAAE,gBAAgB;QACpC,iBAAiB,EAAE,4BAA4B;QAC/C,gBAAgB,EAAE,qBAAqB;QACvC,MAAM,EAAE,2BAA2B;QACnC,aAAa,EAAE,6CAA6C;QAC5D,UAAU,EAAE,6BAA6B;QACzC,YAAY,EAAE,wBAAwB;QACtC,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE;YACZ,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,gBAAgB;YAC9B,kBAAkB,EAAE,sBAAsB;YAC1C,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,UAAU;YACnB,aAAa,EAAE,gBAAgB;YAC/B,OAAO,EAAE,SAAS;SACnB;KACF;CACF,CAAC","sourcesContent":["import { SDKTranslations } from '../types/translations';\n\nexport const defaultTranslations: Required<SDKTranslations> = {\n whatsNew: {\n title: \"What's New\",\n tabs: {\n article: \"Articles\",\n productUpdate: \"Product Updates\",\n },\n buttonViewAll: {\n article: \"View all articles\",\n productUpdate: \"View all updates\",\n },\n noData: \"No updates available\",\n },\n growApps: {\n title: \"Grow faster with apps\",\n subtitle: \"Discover powerful apps to enhance your store and boost your business\",\n exploreApps: \"Explore apps\",\n install: \"Install\",\n installed: \"Installed\",\n dismiss: \"Dismiss\",\n noData: \"No apps available\",\n },\n banner: {\n learnMore: \"Learn more\",\n dismiss: \"Dismiss\",\n },\n partnerIntegration: {\n title: \"Partner Integrations\",\n reviewSourcesTitle: \"Review Sources\",\n postPurchaseTitle: \"Post-purchase & Automation\",\n seoSnippetsTitle: \"SEO & Rich Snippets\",\n noData: \"No integrations available\",\n noDataMessage: \"Check back later for available integrations\",\n errorTitle: \"Unable to load integrations\",\n errorMessage: \"Please try again later\",\n install: \"Install app\",\n installed: \"Installed\",\n manage: \"Manage\",\n open: \"Open\",\n connect: \"Connect\",\n connected: \"Connected\",\n inactive: \"Inactive\",\n active: \"Active\",\n pending: \"Pending\",\n upgradeBadge: {\n upgradeToBasic: \"Upgrade to Basic\",\n upgradeToPro: \"Upgrade to Pro\",\n upgradeToUnlimited: \"Upgrade to Unlimited\",\n fromBasic: \"From Basic\",\n fromPro: \"From Pro\",\n fromUnlimited: \"From Unlimited\",\n upgrade: \"Upgrade\",\n }\n }\n};"]}