@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.
- package/dist/components/AppList.d.ts +1 -0
- package/dist/components/AppList.d.ts.map +1 -0
- package/dist/components/AppList.js +1 -0
- package/dist/components/AppList.js.map +1 -0
- package/dist/components/ArticleList.d.ts +1 -0
- package/dist/components/ArticleList.d.ts.map +1 -0
- package/dist/components/ArticleList.js +1 -0
- package/dist/components/ArticleList.js.map +1 -0
- package/dist/components/ArticleSlide.d.ts +1 -0
- package/dist/components/ArticleSlide.d.ts.map +1 -0
- package/dist/components/ArticleSlide.js +1 -0
- package/dist/components/ArticleSlide.js.map +1 -0
- package/dist/components/FloatingCard.d.ts +1 -0
- package/dist/components/FloatingCard.d.ts.map +1 -0
- package/dist/components/FloatingCard.js +5 -4
- package/dist/components/FloatingCard.js.map +1 -0
- package/dist/components/FooterBanner.d.ts +1 -0
- package/dist/components/FooterBanner.d.ts.map +1 -0
- package/dist/components/FooterBanner.js +1 -0
- package/dist/components/FooterBanner.js.map +1 -0
- package/dist/components/GrowApps.d.ts +6 -6
- package/dist/components/GrowApps.d.ts.map +1 -0
- package/dist/components/GrowApps.js +11 -3
- package/dist/components/GrowApps.js.map +1 -0
- package/dist/components/ImageLoading.d.ts +1 -0
- package/dist/components/ImageLoading.d.ts.map +1 -0
- package/dist/components/ImageLoading.js +1 -0
- package/dist/components/ImageLoading.js.map +1 -0
- package/dist/components/PartnerIntegration.d.ts +8 -8
- package/dist/components/PartnerIntegration.d.ts.map +1 -0
- package/dist/components/PartnerIntegration.js +15 -76
- package/dist/components/PartnerIntegration.js.map +1 -0
- package/dist/components/PartnerList.d.ts +1 -0
- package/dist/components/PartnerList.d.ts.map +1 -0
- package/dist/components/PartnerList.js +1 -0
- package/dist/components/PartnerList.js.map +1 -0
- package/dist/components/PopupBanner.d.ts +4 -4
- package/dist/components/PopupBanner.d.ts.map +1 -0
- package/dist/components/PopupBanner.js +5 -1
- package/dist/components/PopupBanner.js.map +1 -0
- package/dist/components/TopBanner.d.ts +7 -7
- package/dist/components/TopBanner.d.ts.map +1 -0
- package/dist/components/TopBanner.js +15 -30
- package/dist/components/TopBanner.js.map +1 -0
- package/dist/components/WhatsNew.d.ts +6 -7
- package/dist/components/WhatsNew.d.ts.map +1 -0
- package/dist/components/WhatsNew.js +23 -25
- package/dist/components/WhatsNew.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inlineStyles.d.ts +1 -0
- package/dist/components/inlineStyles.d.ts.map +1 -0
- package/dist/components/inlineStyles.js +1 -0
- package/dist/components/inlineStyles.js.map +1 -0
- package/dist/components/styles.d.ts +1 -0
- package/dist/components/styles.d.ts.map +1 -0
- package/dist/components/styles.js +1 -0
- package/dist/components/styles.js.map +1 -0
- package/dist/config/component-defaults.d.ts +71 -0
- package/dist/config/component-defaults.d.ts.map +1 -0
- package/dist/config/component-defaults.js +106 -0
- package/dist/config/component-defaults.js.map +1 -0
- package/dist/config/internal-config.d.ts +28 -0
- package/dist/config/internal-config.d.ts.map +1 -0
- package/dist/config/internal-config.js +100 -0
- package/dist/config/internal-config.js.map +1 -0
- package/dist/core/SDKManager.d.ts +262 -0
- package/dist/core/SDKManager.d.ts.map +1 -0
- package/dist/core/SDKManager.js +527 -0
- package/dist/core/SDKManager.js.map +1 -0
- package/dist/core/adapter.d.ts +1 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +1 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/engine.d.ts +1 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +1 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/fetcher.d.ts +1 -0
- package/dist/core/fetcher.d.ts.map +1 -0
- package/dist/core/fetcher.js +1 -0
- package/dist/core/fetcher.js.map +1 -0
- package/dist/core/global-manager.d.ts +1 -0
- package/dist/core/global-manager.d.ts.map +1 -0
- package/dist/core/global-manager.js +1 -0
- package/dist/core/global-manager.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -3
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -3
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useApps.d.ts +1 -0
- package/dist/hooks/useApps.d.ts.map +1 -0
- package/dist/hooks/useApps.js +10 -9
- package/dist/hooks/useApps.js.map +1 -0
- package/dist/hooks/useArticles.d.ts +1 -0
- package/dist/hooks/useArticles.d.ts.map +1 -0
- package/dist/hooks/useArticles.js +10 -14
- package/dist/hooks/useArticles.js.map +1 -0
- package/dist/hooks/useBanner.d.ts +1 -0
- package/dist/hooks/useBanner.d.ts.map +1 -0
- package/dist/hooks/useBanner.js +6 -5
- package/dist/hooks/useBanner.js.map +1 -0
- package/dist/hooks/useCampaignTracking.d.ts +1 -0
- package/dist/hooks/useCampaignTracking.d.ts.map +1 -0
- package/dist/hooks/useCampaignTracking.js +1 -0
- package/dist/hooks/useCampaignTracking.js.map +1 -0
- package/dist/hooks/useDashboard.d.ts +1 -0
- package/dist/hooks/useDashboard.d.ts.map +1 -0
- package/dist/hooks/useDashboard.js +18 -9
- package/dist/hooks/useDashboard.js.map +1 -0
- package/dist/hooks/useFloatingCards.d.ts +4 -2
- package/dist/hooks/useFloatingCards.d.ts.map +1 -0
- package/dist/hooks/useFloatingCards.js +52 -76
- package/dist/hooks/useFloatingCards.js.map +1 -0
- package/dist/hooks/usePartnerIntegration.d.ts +7 -2
- package/dist/hooks/usePartnerIntegration.d.ts.map +1 -0
- package/dist/hooks/usePartnerIntegration.js +26 -37
- package/dist/hooks/usePartnerIntegration.js.map +1 -0
- package/dist/hooks/useTranslations.d.ts +1 -0
- package/dist/hooks/useTranslations.d.ts.map +1 -0
- package/dist/hooks/useTranslations.js +5 -3
- package/dist/hooks/useTranslations.js.map +1 -0
- package/dist/hooks/useWhatsNew.d.ts +1 -0
- package/dist/hooks/useWhatsNew.d.ts.map +1 -0
- package/dist/hooks/useWhatsNew.js +9 -8
- package/dist/hooks/useWhatsNew.js.map +1 -0
- package/dist/index.d.ts +38 -22
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -22
- package/dist/index.js.map +1 -0
- package/dist/translations/default.d.ts +1 -0
- package/dist/translations/default.d.ts.map +1 -0
- package/dist/translations/default.js +1 -0
- package/dist/translations/default.js.map +1 -0
- package/dist/translations/locales/cn.json +39 -0
- package/dist/translations/locales/de.json +39 -0
- package/dist/translations/locales/dk.json +39 -0
- package/dist/translations/locales/en.json +39 -0
- package/dist/translations/locales/es.json +39 -0
- package/dist/translations/locales/fr.json +39 -0
- package/dist/translations/locales/ie.json +39 -0
- package/dist/translations/locales/in.json +39 -0
- package/dist/translations/locales/it.json +39 -0
- package/dist/translations/locales/jp.json +39 -0
- package/dist/translations/locales/nl.json +39 -0
- package/dist/translations/locales/nz.json +39 -0
- package/dist/translations/locales/pt.json +39 -0
- package/dist/translations/locales/se.json +39 -0
- package/dist/translations/locales/vi.json +39 -0
- package/dist/translations/translation-manager.d.ts +89 -0
- package/dist/translations/translation-manager.d.ts.map +1 -0
- package/dist/translations/translation-manager.js +239 -0
- package/dist/translations/translation-manager.js.map +1 -0
- package/dist/types/app.d.ts +1 -0
- package/dist/types/app.d.ts.map +1 -0
- package/dist/types/app.js +1 -0
- package/dist/types/app.js.map +1 -0
- package/dist/types/article.d.ts +1 -0
- package/dist/types/article.d.ts.map +1 -0
- package/dist/types/article.js +1 -0
- package/dist/types/article.js.map +1 -0
- package/dist/types/banner.d.ts +1 -0
- package/dist/types/banner.d.ts.map +1 -0
- package/dist/types/banner.js +1 -0
- package/dist/types/banner.js.map +1 -0
- package/dist/types/component-props.d.ts +140 -0
- package/dist/types/component-props.d.ts.map +1 -0
- package/dist/types/component-props.js +6 -0
- package/dist/types/component-props.js.map +1 -0
- package/dist/types/dashboard.d.ts +1 -0
- package/dist/types/dashboard.d.ts.map +1 -0
- package/dist/types/dashboard.js +1 -0
- package/dist/types/dashboard.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/integration.d.ts +1 -0
- package/dist/types/integration.d.ts.map +1 -0
- package/dist/types/integration.js +1 -0
- package/dist/types/integration.js.map +1 -0
- package/dist/types/partner.d.ts +1 -0
- package/dist/types/partner.d.ts.map +1 -0
- package/dist/types/partner.js +1 -0
- package/dist/types/partner.js.map +1 -0
- package/dist/types/product-update.d.ts +1 -0
- package/dist/types/product-update.d.ts.map +1 -0
- package/dist/types/product-update.js +1 -0
- package/dist/types/product-update.js.map +1 -0
- package/dist/types/translations.d.ts +1 -0
- package/dist/types/translations.d.ts.map +1 -0
- package/dist/types/translations.js +1 -0
- package/dist/types/translations.js.map +1 -0
- package/dist/utils/campaignTracking.d.ts +1 -0
- package/dist/utils/campaignTracking.d.ts.map +1 -0
- package/dist/utils/campaignTracking.js +1 -0
- package/dist/utils/campaignTracking.js.map +1 -0
- package/dist/utils/cls-monitor.d.ts +1 -0
- package/dist/utils/cls-monitor.d.ts.map +1 -0
- package/dist/utils/cls-monitor.js +1 -0
- package/dist/utils/cls-monitor.js.map +1 -0
- package/dist/utils/injectStyles.d.ts +1 -0
- package/dist/utils/injectStyles.d.ts.map +1 -0
- package/dist/utils/injectStyles.js +1 -0
- package/dist/utils/injectStyles.js.map +1 -0
- package/dist/utils/sessionManager.d.ts +1 -0
- package/dist/utils/sessionManager.d.ts.map +1 -0
- package/dist/utils/sessionManager.js +1 -0
- package/dist/utils/sessionManager.js.map +1 -0
- package/package.json +4 -3
- package/dist/hooks/useFloatingCardActions.d.ts +0 -17
- package/dist/hooks/useFloatingCardActions.js +0 -54
- package/dist/hooks/useFloatingCardEngine.d.ts +0 -21
- package/dist/hooks/useFloatingCardEngine.js +0 -39
- package/dist/hooks/useGrowApps.d.ts +0 -10
- package/dist/hooks/useGrowApps.js +0 -14
- package/dist/provider/DashboardProvider.d.ts +0 -36
- package/dist/provider/DashboardProvider.js +0 -200
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../src/types/integration.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,0BAA0B,GAAG,mBAAmB,CAAC;AAEtG,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,mBAAmB,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../../src/types/integration.ts"],"names":[],"mappings":"","sourcesContent":["export type IntegrationCategory = \"review_sources\" | \"post_purchase_automation\" | \"seo_rich_snippets\";\n\nexport type IntegrationStatus = \"connected\" | \"active\" | \"inactive\";\n\nexport interface IntegrationItem {\n id?: string | number;\n key?: string;\n title: string;\n badge_text?: string;\n sub_title?: string;\n content?: string; // API uses 'content' field\n icon_url?: string;\n category?: IntegrationCategory;\n category_key?: string; // API field name\n status?: IntegrationStatus;\n installed?: boolean;\n button_text?: string; // Old format - generic button text\n button_install_text?: string | null;\n button_install_link?: string | null; // New API field name\n button_install_url?: string; // Old field name\n button_manage_text?: string | null;\n button_manage_url?: string | null;\n button_connect_text?: string;\n button_connect_url?: string;\n app_url?: string; // API field name\n position: number;\n requires_plan?: string;\n source?: string;\n group_type?: string;\n}\n\nexport interface IntegrationGroup {\n title: string;\n key: IntegrationCategory;\n items: IntegrationItem[];\n}"]}
|
package/dist/types/partner.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner.d.ts","sourceRoot":"","sources":["../../src/types/partner.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb"}
|
package/dist/types/partner.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner.js","sourceRoot":"","sources":["../../src/types/partner.ts"],"names":[],"mappings":"","sourcesContent":["export interface PartnerItem {\n title: string;\n content: string;\n icon_url: string;\n button_text: string;\n app_url: string;\n key: string;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-update.d.ts","sourceRoot":"","sources":["../../src/types/product-update.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-update.js","sourceRoot":"","sources":["../../src/types/product-update.ts"],"names":[],"mappings":"","sourcesContent":["export interface ProductUpdateItem {\n id: string | number;\n title: string;\n description?: string;\n version?: string;\n releaseDate?: string;\n date_time?: string;\n features?: string[];\n improvements?: string[];\n fixes?: string[];\n link?: string;\n imageUrl?: string;\n image_url?: string;\n type?: \"major\" | \"minor\" | \"patch\";\n position?: number;\n button_try_it_now?: string;\n button_try_url?: string;\n button_learn_more?: string;\n button_learn_url?: string;\n content?: {\n text?: string;\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/types/translations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,aAAa,CAAC,EAAE;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE;YACb,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAA;CACF;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translations.js","sourceRoot":"","sources":["../../src/types/translations.ts"],"names":[],"mappings":"","sourcesContent":["export interface SDKTranslations {\n whatsNew?: {\n title?: string;\n tabs?: {\n article?: string;\n productUpdate?: string;\n };\n buttonViewAll?: {\n article?: string;\n productUpdate?: string;\n };\n noData?: string;\n };\n growApps?: {\n title?: string;\n subtitle?: string;\n exploreApps?: string;\n install?: string;\n installed?: string;\n dismiss?: string;\n noData?: string;\n };\n banner?: {\n learnMore?: string;\n dismiss?: string;\n };\n partnerIntegration?: {\n title?: string;\n reviewSourcesTitle?: string;\n postPurchaseTitle?: string;\n seoSnippetsTitle?: string;\n noData?: string;\n noDataMessage?: string;\n errorTitle?: string;\n errorMessage?: string;\n install?: string;\n installed?: string;\n manage?: string;\n open?: string;\n connect?: string;\n connected?: string;\n inactive?: string;\n active?: string;\n pending?: string;\n upgradeBadge?: {\n upgradeToBasic?: string;\n upgradeToPro?: string;\n upgradeToUnlimited?: string;\n fromBasic?: string;\n fromPro?: string;\n fromUnlimited?: string;\n upgrade?: string;\n };\n }\n}\n\nexport type TranslationKey = keyof SDKTranslations;"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaignTracking.d.ts","sourceRoot":"","sources":["../../src/utils/campaignTracking.ts"],"names":[],"mappings":"AAoCA;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,GACL,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaignTracking.js","sourceRoot":"","sources":["../../src/utils/campaignTracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSessionId } from './sessionManager';\n\nconst TRACKING_BASE_URL = 'https://ops.trustshop.io';\n\n/**\n * View tracking deduplication map\n * Key: ${sessionId}-${campaignId}\n * Value: timestamp in milliseconds\n */\nconst viewTrackingMap = new Map<string, number>();\n\n/**\n * Deduplication threshold for view tracking (5 seconds)\n */\nconst VIEW_DEDUP_THRESHOLD_MS = 5000;\n\n/**\n * Get current page context from URL\n */\nfunction getPageContext(): string {\n if (typeof window === 'undefined') {\n return '/';\n }\n \n // Get the current pathname\n const pathname = window.location.pathname;\n \n // In Shopify admin apps, the actual route might be in hash\n const hash = window.location.hash;\n if (hash && hash.startsWith('#/')) {\n return hash.substring(1); // Remove the '#'\n }\n \n return pathname;\n}\n\n/**\n * Track campaign view\n * Handles deduplication and fire-and-forget requests\n */\nexport async function trackCampaignView(\n shopId: string,\n campaignId: string | number,\n metadata?: Record<string, any>\n): Promise<void> {\n const sessionId = getSessionId();\n const dedupKey = `${sessionId}-${campaignId}`;\n const now = Date.now();\n \n // Check for deduplication\n const lastTracked = viewTrackingMap.get(dedupKey);\n if (lastTracked && (now - lastTracked) < VIEW_DEDUP_THRESHOLD_MS) {\n return;\n }\n \n // Update tracking map\n viewTrackingMap.set(dedupKey, now);\n \n const payload = {\n session_id: sessionId,\n page_context: getPageContext(),\n metadata: {\n source: 'in-app-trustshop',\n placement: 'floating-card',\n ...metadata,\n },\n };\n \n const url = `${TRACKING_BASE_URL}/api/shops/${shopId}/campaigns/${campaignId}/track/view`;\n // Fire and forget - no await, no error handling that would break UI\n void fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n body: JSON.stringify(payload),\n credentials: 'include',\n }).catch(error => {\n // Log error in development\n console.error('[Campaign Tracking] View tracking failed:', error);\n });\n}\n\n/**\n * Track campaign click\n * Tracks immediately without debouncing\n */\nexport async function trackCampaignClick(\n shopId: string,\n campaignId: string | number,\n options: {\n actionType?: string;\n ctaId?: string;\n ctaKey?: string;\n timeToAction?: number;\n metadata?: Record<string, any>;\n } = {}\n): Promise<void> {\n const { actionType, ctaId, ctaKey, timeToAction, metadata } = options;\n \n // Validate that at least one required field is present\n if (!actionType && !ctaId && !ctaKey) {\n return;\n }\n \n const sessionId = getSessionId();\n \n const payload: any = {\n session_id: sessionId,\n page_context: getPageContext(),\n metadata: {\n source: 'in-app-trustshop',\n placement: 'floating-card',\n ...metadata,\n },\n };\n \n // Add optional fields if provided\n if (actionType) payload.action_type = actionType;\n if (ctaId) payload.cta_id = ctaId;\n if (ctaKey) payload.cta_key = ctaKey;\n if (timeToAction !== undefined) payload.time_to_action = timeToAction;\n \n const url = `${TRACKING_BASE_URL}/api/shops/${shopId}/campaigns/${campaignId}/track/click`;\n // Fire and forget - no await, no error handling that would break UI\n void fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n body: JSON.stringify(payload),\n credentials: 'include',\n }).catch(error => {\n // Log error in development\n console.error('[Campaign Tracking] Click tracking failed:', error);\n });\n}\n\n/**\n * Clear view tracking deduplication cache\n * Useful for testing or when session changes\n */\nexport function clearViewTrackingCache(): void {\n viewTrackingMap.clear();\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cls-monitor.d.ts","sourceRoot":"","sources":["../../src/utils/cls-monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,gBAAiB,SAAQ,gBAAgB;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,YAAY,EAAE,eAAe,CAAC;QAC9B,WAAW,EAAE,eAAe,CAAC;KAC9B,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;CACnD;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAExB,OAAO,GAAE,iBAAsB;IAW3C,KAAK,IAAI,IAAI;IA+Bb,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,QAAQ;IA6BhB,IAAI,IAAI,IAAI;IAWZ,KAAK,IAAI,IAAI;IAQb,aAAa,IAAI,UAAU;IAQ3B,OAAO,CAAC,mBAAmB;IAM3B,MAAM,CAAC,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,EAAE;IAiB1E,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CAiBxE;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAM1E;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cls-monitor.js","sourceRoot":"","sources":["../../src/utils/cls-monitor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLS (Cumulative Layout Shift) Monitoring Utility\n * Tracks and reports layout shifts for performance optimization\n */\n\ninterface LayoutShiftEntry extends PerformanceEntry {\n value: number;\n hadRecentInput: boolean;\n sources?: Array<{\n node?: Node;\n previousRect: DOMRectReadOnly;\n currentRect: DOMRectReadOnly;\n }>;\n}\n\nexport interface CLSMetrics {\n value: number;\n entries: LayoutShiftEntry[];\n timestamp: number;\n}\n\nexport interface CLSMonitorOptions {\n threshold?: number;\n onShift?: (metrics: CLSMetrics) => void;\n onThresholdExceeded?: (metrics: CLSMetrics) => void;\n debug?: boolean;\n reportToConsole?: boolean;\n reportToAnalytics?: (metrics: CLSMetrics) => void;\n}\n\nexport class CLSMonitor {\n private observer: PerformanceObserver | null = null;\n private clsValue = 0;\n private clsEntries: LayoutShiftEntry[] = [];\n private options: Required<CLSMonitorOptions>;\n private sessionValue = 0;\n private sessionEntries: LayoutShiftEntry[] = [];\n private lastShiftTime = 0;\n private readonly SESSION_GAP = 5000; // 5 seconds\n\n constructor(options: CLSMonitorOptions = {}) {\n this.options = {\n threshold: options.threshold || 0.1, // Good CLS threshold\n onShift: options.onShift || (() => {}),\n onThresholdExceeded: options.onThresholdExceeded || (() => {}),\n debug: options.debug || false,\n reportToConsole: options.reportToConsole || false,\n reportToAnalytics: options.reportToAnalytics || (() => {}),\n };\n }\n\n start(): void {\n if (!this.supportsLayoutShift()) {\n console.warn('PerformanceObserver for layout-shift not supported');\n return;\n }\n\n try {\n this.observer = new PerformanceObserver((list) => {\n const entries = list.getEntries() as LayoutShiftEntry[];\n \n for (const entry of entries) {\n // Ignore shifts with recent input (user-initiated)\n if (!entry.hadRecentInput) {\n this.processLayoutShift(entry);\n }\n }\n });\n\n this.observer.observe({ \n type: 'layout-shift', \n buffered: true \n });\n\n if (this.options.debug) {\n console.log('CLS Monitor started');\n }\n } catch (error) {\n console.error('Failed to start CLS Monitor:', error);\n }\n }\n\n private processLayoutShift(entry: LayoutShiftEntry): void {\n const now = Date.now();\n \n // Check if this is part of a new session\n if (now - this.lastShiftTime > this.SESSION_GAP) {\n // Start new session\n this.sessionValue = 0;\n this.sessionEntries = [];\n }\n \n this.lastShiftTime = now;\n this.sessionValue += entry.value;\n this.sessionEntries.push(entry);\n \n // Update cumulative value (max session value)\n if (this.sessionValue > this.clsValue) {\n this.clsValue = this.sessionValue;\n this.clsEntries = [...this.sessionEntries];\n }\n\n const metrics: CLSMetrics = {\n value: this.clsValue,\n entries: this.clsEntries,\n timestamp: now,\n };\n\n // Report shift\n this.options.onShift(metrics);\n\n // Check threshold\n if (this.clsValue > this.options.threshold) {\n this.options.onThresholdExceeded(metrics);\n }\n\n // Debug logging\n if (this.options.debug || this.options.reportToConsole) {\n this.logShift(entry, metrics);\n }\n\n // Report to analytics\n this.options.reportToAnalytics(metrics);\n }\n\n private logShift(entry: LayoutShiftEntry, metrics: CLSMetrics): void {\n const affectedElements = entry.sources?.map(source => {\n if (source.node && source.node.nodeType === 1) {\n const element = source.node as Element;\n return {\n element: element.tagName,\n id: element.id,\n className: element.className,\n previousRect: source.previousRect,\n currentRect: source.currentRect,\n };\n }\n return null;\n }).filter(Boolean) || [];\n\n console.group(`🎯 Layout Shift Detected`);\n console.log('Shift Value:', entry.value.toFixed(4));\n console.log('Session CLS:', this.sessionValue.toFixed(4));\n console.log('Total CLS:', metrics.value.toFixed(4));\n console.log('Threshold:', this.options.threshold);\n console.log('Status:', metrics.value > this.options.threshold ? '❌ Bad' : '✅ Good');\n \n if (affectedElements.length > 0) {\n console.log('Affected Elements:', affectedElements);\n }\n \n console.groupEnd();\n }\n\n stop(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n \n if (this.options.debug) {\n console.log('CLS Monitor stopped');\n }\n }\n }\n\n reset(): void {\n this.clsValue = 0;\n this.clsEntries = [];\n this.sessionValue = 0;\n this.sessionEntries = [];\n this.lastShiftTime = 0;\n }\n\n getCurrentCLS(): CLSMetrics {\n return {\n value: this.clsValue,\n entries: this.clsEntries,\n timestamp: Date.now(),\n };\n }\n\n private supportsLayoutShift(): boolean {\n return typeof PerformanceObserver !== 'undefined' && \n PerformanceObserver.supportedEntryTypes?.includes('layout-shift');\n }\n\n // Helper method to identify problematic elements\n static identifyProblematicElements(entries: LayoutShiftEntry[]): Element[] {\n const problematicElements = new Set<Element>();\n \n for (const entry of entries) {\n if (entry.sources) {\n for (const source of entry.sources) {\n if (source.node && source.node.nodeType === 1) {\n problematicElements.add(source.node as Element);\n }\n }\n }\n }\n \n return Array.from(problematicElements);\n }\n\n // Helper to get CLS attribution\n static getAttribution(entries: LayoutShiftEntry[]): Map<string, number> {\n const attribution = new Map<string, number>();\n \n for (const entry of entries) {\n if (entry.sources) {\n for (const source of entry.sources) {\n if (source.node && source.node.nodeType === 1) {\n const element = source.node as Element;\n const key = `${element.tagName}${element.id ? '#' + element.id : ''}${element.className ? '.' + element.className.split(' ').join('.') : ''}`;\n attribution.set(key, (attribution.get(key) || 0) + entry.value);\n }\n }\n }\n }\n \n return attribution;\n }\n}\n\n// Singleton instance for easy global usage\nlet globalMonitor: CLSMonitor | null = null;\n\nexport function startCLSMonitoring(options?: CLSMonitorOptions): CLSMonitor {\n if (!globalMonitor) {\n globalMonitor = new CLSMonitor(options);\n globalMonitor.start();\n }\n return globalMonitor;\n}\n\nexport function stopCLSMonitoring(): void {\n if (globalMonitor) {\n globalMonitor.stop();\n globalMonitor = null;\n }\n}\n\nexport function getCLSMetrics(): CLSMetrics | null {\n return globalMonitor ? globalMonitor.getCurrentCLS() : null;\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectStyles.d.ts","sourceRoot":"","sources":["../../src/utils/injectStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,mBAAmB,uuCAmE/B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAkBtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAStC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectStyles.js","sourceRoot":"","sources":["../../src/utils/injectStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAEhD,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmElC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,uCAAuC;IACvC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,CAAC,aAAa;IACvB,CAAC;IAED,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,mBAAmB;IAC7B,CAAC;IAED,kCAAkC;IAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,GAAG,QAAQ,CAAC;IAC3B,YAAY,CAAC,WAAW,GAAG,mBAAmB,CAAC;IAE/C,oCAAoC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;AACH,CAAC","sourcesContent":["/**\n * Automatically inject CLS fix styles into the document\n * This ensures the styles are always applied without requiring manual imports\n */\n\nconst STYLE_ID = 'ts-shopify-polaris-cls-fixes';\n\nexport const polarisClsFixStyles = `\n/* Critical Polaris CLS Fixes */\n.Polaris-ShadowBevel {\n min-height: inherit !important;\n will-change: contents;\n}\n\n.Polaris-Card {\n min-height: 100px;\n contain: layout style;\n}\n\n.Polaris-Tabs__Panel {\n min-height: 350px;\n contain: layout;\n}\n\n.Polaris-Tabs__TabPanel {\n min-height: inherit;\n}\n\n.Polaris-Box {\n /* Prevent height changes from dynamic content */\n contain: style;\n}\n\n/* Skeleton state improvements */\n.Polaris-SkeletonBodyText,\n.Polaris-SkeletonDisplayText,\n.Polaris-SkeletonThumbnail {\n animation: none !important;\n background: linear-gradient(\n 90deg,\n #f0f0f0 25%,\n #f8f8f8 50%,\n #f0f0f0 75%\n );\n background-size: 200% 100%;\n animation: pulse 1.5s ease-in-out infinite !important;\n}\n\n@keyframes pulse {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n\n/* Prevent layout shifts from Polaris transitions */\n.Polaris-Card,\n.Polaris-Banner,\n.Polaris-CalloutCard {\n transform: translateZ(0);\n will-change: transform;\n}\n\n/* Fix for navigation tabs */\n.custom-tabs-wrapper-dashboard {\n min-height: 400px;\n}\n\n/* GPU acceleration for transforms */\n[style*=\"transform\"] {\n will-change: transform;\n}\n`;\n\n/**\n * Inject CLS fix styles into the document head\n * This is called automatically when the SDK initializes\n */\nexport function injectClsStyles(): void {\n // Check if styles are already injected\n if (typeof document === 'undefined') {\n return; // SSR safety\n }\n \n if (document.getElementById(STYLE_ID)) {\n return; // Already injected\n }\n\n // Create and inject style element\n const styleElement = document.createElement('style');\n styleElement.id = STYLE_ID;\n styleElement.textContent = polarisClsFixStyles;\n \n // Add to head (or body as fallback)\n const target = document.head || document.body;\n target.appendChild(styleElement);\n}\n\n/**\n * Remove injected styles (for cleanup)\n */\nexport function removeClsStyles(): void {\n if (typeof document === 'undefined') {\n return;\n }\n \n const styleElement = document.getElementById(STYLE_ID);\n if (styleElement) {\n styleElement.remove();\n }\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/utils/sessionManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAqBrC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAQnC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAQpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../src/utils/sessionManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAEpD;;GAEG;AACH,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,OAAO,QAAQ,SAAS,IAAI,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC;QACH,+CAA+C;QAC/C,IAAI,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEvD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,0BAA0B;YAC1B,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAChC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,8CAA8C;QAC9C,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,KAAK,CAAC,CAAC;QAChF,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAE1C,IAAI,CAAC;QACH,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAEhD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["/**\n * Session management utility for campaign tracking\n */\n\nconst SESSION_ID_KEY = 'trustshop_inapp_session_id';\n\n/**\n * Generate a unique session ID\n */\nfunction generateSessionId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 15);\n return `sess_${timestamp}_${random}`;\n}\n\n/**\n * Get or create session ID\n * Session persists for the browser session (using sessionStorage)\n */\nexport function getSessionId(): string {\n if (typeof window === 'undefined') {\n return generateSessionId();\n }\n\n try {\n // Check if session ID exists in sessionStorage\n let sessionId = sessionStorage.getItem(SESSION_ID_KEY);\n \n if (!sessionId) {\n // Generate new session ID\n sessionId = generateSessionId();\n sessionStorage.setItem(SESSION_ID_KEY, sessionId);\n }\n \n return sessionId;\n } catch (error) {\n // Fallback if sessionStorage is not available\n console.warn('SessionStorage not available, using temporary session ID', error);\n return generateSessionId();\n }\n}\n\n/**\n * Clear current session\n */\nexport function clearSession(): void {\n if (typeof window === 'undefined') return;\n \n try {\n sessionStorage.removeItem(SESSION_ID_KEY);\n } catch (error) {\n console.warn('Failed to clear session', error);\n }\n}\n\n/**\n * Check if a session exists\n */\nexport function hasSession(): boolean {\n if (typeof window === 'undefined') return false;\n \n try {\n return sessionStorage.getItem(SESSION_ID_KEY) !== null;\n } catch {\n return false;\n }\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datlv-trustshop/shopify-inapp-components",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "React TypeScript components for Shopify in-app dashboard content",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
-
"build": "tsc",
|
|
14
|
-
"dev": "tsc --watch",
|
|
13
|
+
"build": "tsc && node scripts/copy-translations.js",
|
|
14
|
+
"dev": "tsc --watch --preserveWatchOutput",
|
|
15
|
+
"watch": "tsc --watch --preserveWatchOutput",
|
|
15
16
|
"test": "jest",
|
|
16
17
|
"lint": "eslint src --ext ts,tsx",
|
|
17
18
|
"type-check": "tsc --noEmit",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { FloatingCardData } from '../components/FloatingCard';
|
|
2
|
-
export interface FloatingCardActionsConfig {
|
|
3
|
-
navigate: (path: string) => void;
|
|
4
|
-
onOpenPricing?: () => void;
|
|
5
|
-
onDismiss?: (cardId: string | number) => void;
|
|
6
|
-
specialRoutes?: {
|
|
7
|
-
[key: string]: () => void;
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
export interface FloatingCardActionsReturn {
|
|
11
|
-
handlePrimaryAction: (card: FloatingCardData) => void;
|
|
12
|
-
handleSecondaryAction: (card: FloatingCardData) => void;
|
|
13
|
-
handleDismiss: (cardId: string | number) => void;
|
|
14
|
-
resolveAction: (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => void;
|
|
15
|
-
}
|
|
16
|
-
export declare const useFloatingCardActions: (config: FloatingCardActionsConfig) => FloatingCardActionsReturn;
|
|
17
|
-
export default useFloatingCardActions;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
export const useFloatingCardActions = (config) => {
|
|
3
|
-
const { navigate, onOpenPricing, onDismiss, specialRoutes = {} } = config;
|
|
4
|
-
const resolveAction = useCallback((action) => {
|
|
5
|
-
if (!action?.url)
|
|
6
|
-
return;
|
|
7
|
-
const url = action.url;
|
|
8
|
-
// Check for special routes first
|
|
9
|
-
if (url === '/pricing' || url.startsWith('/pricing?')) {
|
|
10
|
-
if (onOpenPricing) {
|
|
11
|
-
onOpenPricing();
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
// Check custom special routes
|
|
16
|
-
for (const [route, handler] of Object.entries(specialRoutes)) {
|
|
17
|
-
if (url === route || url.startsWith(`${route}?`)) {
|
|
18
|
-
handler();
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
// Handle internal routes (starts with /)
|
|
23
|
-
if (url.startsWith('/')) {
|
|
24
|
-
navigate(url);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
// Handle external links
|
|
28
|
-
if ((url.startsWith('http://') || url.startsWith('https://')) &&
|
|
29
|
-
action.external !== false) {
|
|
30
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// Fallback to navigation for relative paths or unknown formats
|
|
34
|
-
navigate(url);
|
|
35
|
-
}, [navigate, onOpenPricing, specialRoutes]);
|
|
36
|
-
const handlePrimaryAction = useCallback((card) => {
|
|
37
|
-
resolveAction(card.primary_action);
|
|
38
|
-
}, [resolveAction]);
|
|
39
|
-
const handleSecondaryAction = useCallback((card) => {
|
|
40
|
-
resolveAction(card.secondary_action);
|
|
41
|
-
}, [resolveAction]);
|
|
42
|
-
const handleDismiss = useCallback((cardId) => {
|
|
43
|
-
if (onDismiss) {
|
|
44
|
-
onDismiss(cardId);
|
|
45
|
-
}
|
|
46
|
-
}, [onDismiss]);
|
|
47
|
-
return {
|
|
48
|
-
handlePrimaryAction,
|
|
49
|
-
handleSecondaryAction,
|
|
50
|
-
handleDismiss,
|
|
51
|
-
resolveAction,
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
export default useFloatingCardActions;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { FloatingCardActionsConfig } from './useFloatingCardActions';
|
|
2
|
-
import { FloatingCardData } from '../components/FloatingCard';
|
|
3
|
-
export interface FloatingCardEngineConfig extends Omit<FloatingCardActionsConfig, 'onDismiss'> {
|
|
4
|
-
shopId?: string;
|
|
5
|
-
currentRoute?: string;
|
|
6
|
-
}
|
|
7
|
-
export interface FloatingCardEngineReturn {
|
|
8
|
-
visibleCards: FloatingCardData[];
|
|
9
|
-
loading: boolean;
|
|
10
|
-
error: Error | null;
|
|
11
|
-
handlePrimaryAction: (card: FloatingCardData) => void;
|
|
12
|
-
handleSecondaryAction: (card: FloatingCardData) => void;
|
|
13
|
-
handleDismiss: (cardId: string | number) => void;
|
|
14
|
-
resolveAction: (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => void;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Comprehensive hook that combines floating card data fetching with action handling.
|
|
18
|
-
* This provides a complete solution for floating card functionality.
|
|
19
|
-
*/
|
|
20
|
-
export declare const useFloatingCardEngine: (config: FloatingCardEngineConfig) => FloatingCardEngineReturn;
|
|
21
|
-
export default useFloatingCardEngine;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { useVisibleFloatingCards } from './useFloatingCards';
|
|
2
|
-
import { useFloatingCardActions } from './useFloatingCardActions';
|
|
3
|
-
/**
|
|
4
|
-
* Comprehensive hook that combines floating card data fetching with action handling.
|
|
5
|
-
* This provides a complete solution for floating card functionality.
|
|
6
|
-
*/
|
|
7
|
-
export const useFloatingCardEngine = (config) => {
|
|
8
|
-
const { shopId, currentRoute, navigate, onOpenPricing, specialRoutes } = config;
|
|
9
|
-
// Fetch visible floating cards
|
|
10
|
-
const { visibleCards, dismissCard, loading, error } = useVisibleFloatingCards({
|
|
11
|
-
shopId,
|
|
12
|
-
currentRoute,
|
|
13
|
-
});
|
|
14
|
-
// Set up action handlers with dismiss integrated
|
|
15
|
-
const actions = useFloatingCardActions({
|
|
16
|
-
navigate,
|
|
17
|
-
onOpenPricing,
|
|
18
|
-
specialRoutes,
|
|
19
|
-
onDismiss: (cardId) => {
|
|
20
|
-
// Convert to number if needed for compatibility
|
|
21
|
-
const id = typeof cardId === 'string' ? parseInt(cardId, 10) : cardId;
|
|
22
|
-
if (!isNaN(id)) {
|
|
23
|
-
dismissCard(id);
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
return {
|
|
28
|
-
// Data
|
|
29
|
-
visibleCards,
|
|
30
|
-
loading,
|
|
31
|
-
error,
|
|
32
|
-
// Actions
|
|
33
|
-
handlePrimaryAction: actions.handlePrimaryAction,
|
|
34
|
-
handleSecondaryAction: actions.handleSecondaryAction,
|
|
35
|
-
handleDismiss: actions.handleDismiss,
|
|
36
|
-
resolveAction: actions.resolveAction,
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
export default useFloatingCardEngine;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook to access grow apps data from the dashboard context
|
|
3
|
-
* @returns Object containing grow apps array and loading/error states
|
|
4
|
-
*/
|
|
5
|
-
export declare function useGrowApps(): {
|
|
6
|
-
apps: import("..").GrowApp[];
|
|
7
|
-
loading: boolean;
|
|
8
|
-
error: Error | null;
|
|
9
|
-
isEmpty: boolean;
|
|
10
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { useDashboard } from "./useDashboard";
|
|
2
|
-
/**
|
|
3
|
-
* Hook to access grow apps data from the dashboard context
|
|
4
|
-
* @returns Object containing grow apps array and loading/error states
|
|
5
|
-
*/
|
|
6
|
-
export function useGrowApps() {
|
|
7
|
-
const { data, loading, error } = useDashboard();
|
|
8
|
-
return {
|
|
9
|
-
apps: data?.grow_apps || [],
|
|
10
|
-
loading,
|
|
11
|
-
error,
|
|
12
|
-
isEmpty: !data?.grow_apps || data.grow_apps.length === 0,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from "react";
|
|
2
|
-
import { DashboardEngine } from "../core/engine";
|
|
3
|
-
import { DashboardData, DashboardConfig, DashboardState } from "../types";
|
|
4
|
-
import { SDKTranslations } from "../types/translations";
|
|
5
|
-
export interface DashboardContextValue {
|
|
6
|
-
engine: DashboardEngine;
|
|
7
|
-
state: DashboardState;
|
|
8
|
-
refresh: () => Promise<void>;
|
|
9
|
-
isInitialized: boolean;
|
|
10
|
-
locale: string;
|
|
11
|
-
translations: Required<SDKTranslations>;
|
|
12
|
-
}
|
|
13
|
-
export declare const DashboardContext: React.Context<DashboardContextValue | null>;
|
|
14
|
-
export declare const useDashboardContext: () => DashboardContextValue;
|
|
15
|
-
export interface DashboardProviderProps {
|
|
16
|
-
children: ReactNode;
|
|
17
|
-
config: DashboardConfig;
|
|
18
|
-
locale?: string;
|
|
19
|
-
translations?: SDKTranslations;
|
|
20
|
-
autoInit?: boolean;
|
|
21
|
-
autoRefreshOnLocaleChange?: boolean;
|
|
22
|
-
onError?: (error: Error) => void;
|
|
23
|
-
onLoad?: (data: DashboardData) => void;
|
|
24
|
-
onLocaleChange?: (newLocale: string, oldLocale: string) => void;
|
|
25
|
-
onFallbackUsed?: (requested: string, actual: string) => void;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* DashboardProvider - Lightweight provider that connects to the global manager
|
|
29
|
-
*
|
|
30
|
-
* Multiple providers can be used throughout the app and they will all share:
|
|
31
|
-
* - The same engine instance
|
|
32
|
-
* - The same data/cache
|
|
33
|
-
* - The same locale state
|
|
34
|
-
* - Deduplicated API calls
|
|
35
|
-
*/
|
|
36
|
-
export declare const DashboardProvider: React.FC<DashboardProviderProps>;
|