@datlv-trustshop/shopify-inapp-components 0.2.14 → 0.2.16

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.
@@ -87,7 +87,7 @@ export const ArticleList = ({ limit, className = "", onArticleClick, layout = "s
87
87
  transform: `translateX(-${slidePercentage}%)`,
88
88
  }, children: displayArticles.map((article) => (_jsx("div", { style: {
89
89
  flex: "0 0 auto",
90
- width: isMobile ? "90%" : "270px",
90
+ width: isMobile ? "85%" : "270px",
91
91
  }, children: _jsxs("div", { style: {
92
92
  display: "flex",
93
93
  flexDirection: "column",
@@ -1 +1 @@
1
- {"version":3,"file":"ArticleList.js","sourceRoot":"","sources":["../../src/components/ArticleList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Button, Box } from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { ArticleItem } from \"../types\";\nimport { useDashboard } from \"../hooks/useDashboard\";\n\nexport interface ArticleListProps {\n limit?: number;\n className?: string;\n onArticleClick?: (article: ArticleItem) => void;\n layout?: \"slide\" | \"list\" | \"grid\";\n showThumbnail?: boolean;\n showAuthor?: boolean;\n showDate?: boolean;\n currentIndex?: number;\n showNavigation?: boolean;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n onSlideChange?: (index: number) => void;\n renderButton?: (\n article: ArticleItem,\n handlers: {\n onClick: () => void;\n },\n ) => React.ReactNode;\n}\n\nexport const ArticleList: React.FC<ArticleListProps> = ({\n limit,\n className = \"\",\n onArticleClick,\n layout = \"slide\",\n showThumbnail = true,\n currentIndex: externalCurrentIndex,\n showNavigation = true,\n autoPlay = false,\n autoPlayInterval = 5000,\n onSlideChange,\n renderButton,\n}) => {\n const { data } = useDashboard();\n const articles = data?.articles || [];\n const displayArticles = limit ? articles.slice(0, limit) : articles;\n const [isMobile, setIsMobile] = useState(false);\n const [internalCurrentIndex, setInternalCurrentIndex] = useState(0);\n\n const currentIndex =\n externalCurrentIndex !== undefined\n ? externalCurrentIndex\n : internalCurrentIndex;\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n useEffect(() => {\n if (!autoPlay || layout !== \"slide\" || displayArticles.length <= 1) return;\n\n const interval = setInterval(() => {\n const newIndex = (currentIndex + 1) % displayArticles.length;\n if (externalCurrentIndex === undefined) {\n setInternalCurrentIndex(newIndex);\n }\n onSlideChange?.(newIndex);\n }, autoPlayInterval);\n\n return () => clearInterval(interval);\n }, [\n autoPlay,\n layout,\n displayArticles.length,\n currentIndex,\n autoPlayInterval,\n externalCurrentIndex,\n onSlideChange,\n ]);\n\n const handleSlideChange = (newIndex: number) => {\n if (externalCurrentIndex === undefined) {\n setInternalCurrentIndex(newIndex);\n }\n onSlideChange?.(newIndex);\n };\n\n const handlePrevious = () => {\n const newIndex =\n currentIndex === 0 ? displayArticles.length - 1 : currentIndex - 1;\n handleSlideChange(newIndex);\n };\n\n const handleNext = () => {\n const newIndex = (currentIndex + 1) % displayArticles.length;\n handleSlideChange(newIndex);\n };\n\n const handleArticleClick = (article: ArticleItem) => {\n if (article.link) {\n window.open(article.link, \"_blank\");\n }\n onArticleClick?.(article);\n };\n\n if (displayArticles.length === 0) {\n return (\n <div className={className} style={{ width: \"100%\" }}>\n <p style={{ textAlign: \"center\", color: \"#999\" }}>\n No articles available\n </p>\n </div>\n );\n }\n\n if (layout === \"slide\") {\n let slidePercentage: number;\n if (isMobile) {\n slidePercentage = currentIndex * 90;\n } else {\n const itemWidth = 100 / displayArticles.length;\n slidePercentage = currentIndex * itemWidth * 1.5;\n }\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n width: \"100%\",\n }}\n >\n <div\n style={{\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n transition: \"transform 0.5s ease-in-out\",\n gap: \"20px\",\n willChange: \"transform\",\n transform: `translateX(-${slidePercentage}%)`,\n }}\n >\n {displayArticles.map((article) => (\n <div\n key={article.id}\n style={{\n flex: \"0 0 auto\",\n width: isMobile ? \"90%\" : \"270px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"10px\",\n }}\n >\n {showThumbnail && article.imageUrl && (\n <div\n style={{\n width: isMobile ? \"100%\" : \"270px\",\n height: \"152px\",\n overflow: \"hidden\",\n borderRadius: \"8px\",\n }}\n >\n <img\n src={\n article.imageUrl ||\n \"https://asset.trustshop.io/dashboard/news-review-summary.png\"\n }\n alt={article.title}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n />\n </div>\n )}\n {article.category && (\n <div\n style={{\n color: \"var(--p-color-text-emphasis, #616161)\",\n }}\n >\n <span style={{ fontSize: \"13px\" }}>\n {article.category}\n </span>\n </div>\n )}\n </div>\n\n <div\n className=\"title-button\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n }}\n >\n <h3\n style={{\n margin: 0,\n fontSize: \"14px\",\n fontWeight: \"bold\",\n color: \"#303030\",\n lineHeight: \"1.4\",\n }}\n >\n {article.title}\n </h3>\n\n {renderButton ? (\n renderButton(article, {\n onClick: () => handleArticleClick(article),\n })\n ) : (\n <Box>\n <Button\n icon={ExternalIcon}\n onClick={() => handleArticleClick(article)}\n variant=\"plain\"\n >\n {article.buttonText || (article.link ? \"Read article\" : \"Learn more\")}\n </Button>\n </Box>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {showNavigation && displayArticles.length > 1 && (\n <>\n <button\n onClick={handlePrevious}\n aria-label=\"Previous slide\"\n style={{\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n left: \"10px\",\n background: \"rgba(255, 255, 255, 0.9)\",\n border: \"1px solid #e3e3e3\",\n borderRadius: \"50%\",\n width: \"32px\",\n height: \"32px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 0.2s\",\n padding: 0,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"#303030\">\n <path\n d=\"M10.5 13L5.5 8l5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n <button\n onClick={handleNext}\n aria-label=\"Next slide\"\n style={{\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n right: \"10px\",\n background: \"rgba(255, 255, 255, 0.9)\",\n border: \"1px solid #e3e3e3\",\n borderRadius: \"50%\",\n width: \"32px\",\n height: \"32px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 0.2s\",\n padding: 0,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"#303030\">\n <path\n d=\"M5.5 13l5-5-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </>\n )}\n </div>\n\n {showNavigation && displayArticles.length > 1 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"8px\",\n marginTop: \"16px\",\n }}\n >\n {displayArticles.map((_, index) => (\n <button\n key={index}\n onClick={() => handleSlideChange(index)}\n aria-label={`Go to slide ${index + 1}`}\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n backgroundColor:\n index === currentIndex ? \"#303030\" : \"#e3e3e3\",\n cursor: \"pointer\",\n transition: \"background-color 0.3s\",\n border: \"none\",\n padding: 0,\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n\n return null;\n};\n"]}
1
+ {"version":3,"file":"ArticleList.js","sourceRoot":"","sources":["../../src/components/ArticleList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Button, Box } from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { ArticleItem } from \"../types\";\nimport { useDashboard } from \"../hooks/useDashboard\";\n\nexport interface ArticleListProps {\n limit?: number;\n className?: string;\n onArticleClick?: (article: ArticleItem) => void;\n layout?: \"slide\" | \"list\" | \"grid\";\n showThumbnail?: boolean;\n showAuthor?: boolean;\n showDate?: boolean;\n currentIndex?: number;\n showNavigation?: boolean;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n onSlideChange?: (index: number) => void;\n renderButton?: (\n article: ArticleItem,\n handlers: {\n onClick: () => void;\n },\n ) => React.ReactNode;\n}\n\nexport const ArticleList: React.FC<ArticleListProps> = ({\n limit,\n className = \"\",\n onArticleClick,\n layout = \"slide\",\n showThumbnail = true,\n currentIndex: externalCurrentIndex,\n showNavigation = true,\n autoPlay = false,\n autoPlayInterval = 5000,\n onSlideChange,\n renderButton,\n}) => {\n const { data } = useDashboard();\n const articles = data?.articles || [];\n const displayArticles = limit ? articles.slice(0, limit) : articles;\n const [isMobile, setIsMobile] = useState(false);\n const [internalCurrentIndex, setInternalCurrentIndex] = useState(0);\n\n const currentIndex =\n externalCurrentIndex !== undefined\n ? externalCurrentIndex\n : internalCurrentIndex;\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n useEffect(() => {\n if (!autoPlay || layout !== \"slide\" || displayArticles.length <= 1) return;\n\n const interval = setInterval(() => {\n const newIndex = (currentIndex + 1) % displayArticles.length;\n if (externalCurrentIndex === undefined) {\n setInternalCurrentIndex(newIndex);\n }\n onSlideChange?.(newIndex);\n }, autoPlayInterval);\n\n return () => clearInterval(interval);\n }, [\n autoPlay,\n layout,\n displayArticles.length,\n currentIndex,\n autoPlayInterval,\n externalCurrentIndex,\n onSlideChange,\n ]);\n\n const handleSlideChange = (newIndex: number) => {\n if (externalCurrentIndex === undefined) {\n setInternalCurrentIndex(newIndex);\n }\n onSlideChange?.(newIndex);\n };\n\n const handlePrevious = () => {\n const newIndex =\n currentIndex === 0 ? displayArticles.length - 1 : currentIndex - 1;\n handleSlideChange(newIndex);\n };\n\n const handleNext = () => {\n const newIndex = (currentIndex + 1) % displayArticles.length;\n handleSlideChange(newIndex);\n };\n\n const handleArticleClick = (article: ArticleItem) => {\n if (article.link) {\n window.open(article.link, \"_blank\");\n }\n onArticleClick?.(article);\n };\n\n if (displayArticles.length === 0) {\n return (\n <div className={className} style={{ width: \"100%\" }}>\n <p style={{ textAlign: \"center\", color: \"#999\" }}>\n No articles available\n </p>\n </div>\n );\n }\n\n if (layout === \"slide\") {\n let slidePercentage: number;\n if (isMobile) {\n slidePercentage = currentIndex * 90;\n } else {\n const itemWidth = 100 / displayArticles.length;\n slidePercentage = currentIndex * itemWidth * 1.5;\n }\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n width: \"100%\",\n }}\n >\n <div\n style={{\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n transition: \"transform 0.5s ease-in-out\",\n gap: \"20px\",\n willChange: \"transform\",\n transform: `translateX(-${slidePercentage}%)`,\n }}\n >\n {displayArticles.map((article) => (\n <div\n key={article.id}\n style={{\n flex: \"0 0 auto\",\n width: isMobile ? \"85%\" : \"270px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"10px\",\n }}\n >\n {showThumbnail && article.imageUrl && (\n <div\n style={{\n width: isMobile ? \"100%\" : \"270px\",\n height: \"152px\",\n overflow: \"hidden\",\n borderRadius: \"8px\",\n }}\n >\n <img\n src={\n article.imageUrl ||\n \"https://asset.trustshop.io/dashboard/news-review-summary.png\"\n }\n alt={article.title}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n />\n </div>\n )}\n {article.category && (\n <div\n style={{\n color: \"var(--p-color-text-emphasis, #616161)\",\n }}\n >\n <span style={{ fontSize: \"13px\" }}>\n {article.category}\n </span>\n </div>\n )}\n </div>\n\n <div\n className=\"title-button\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n }}\n >\n <h3\n style={{\n margin: 0,\n fontSize: \"14px\",\n fontWeight: \"bold\",\n color: \"#303030\",\n lineHeight: \"1.4\",\n }}\n >\n {article.title}\n </h3>\n\n {renderButton ? (\n renderButton(article, {\n onClick: () => handleArticleClick(article),\n })\n ) : (\n <Box>\n <Button\n icon={ExternalIcon}\n onClick={() => handleArticleClick(article)}\n variant=\"plain\"\n >\n {article.buttonText || (article.link ? \"Read article\" : \"Learn more\")}\n </Button>\n </Box>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {showNavigation && displayArticles.length > 1 && (\n <>\n <button\n onClick={handlePrevious}\n aria-label=\"Previous slide\"\n style={{\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n left: \"10px\",\n background: \"rgba(255, 255, 255, 0.9)\",\n border: \"1px solid #e3e3e3\",\n borderRadius: \"50%\",\n width: \"32px\",\n height: \"32px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 0.2s\",\n padding: 0,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"#303030\">\n <path\n d=\"M10.5 13L5.5 8l5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n <button\n onClick={handleNext}\n aria-label=\"Next slide\"\n style={{\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n right: \"10px\",\n background: \"rgba(255, 255, 255, 0.9)\",\n border: \"1px solid #e3e3e3\",\n borderRadius: \"50%\",\n width: \"32px\",\n height: \"32px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 0.2s\",\n padding: 0,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"#303030\">\n <path\n d=\"M5.5 13l5-5-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </>\n )}\n </div>\n\n {showNavigation && displayArticles.length > 1 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"8px\",\n marginTop: \"16px\",\n }}\n >\n {displayArticles.map((_, index) => (\n <button\n key={index}\n onClick={() => handleSlideChange(index)}\n aria-label={`Go to slide ${index + 1}`}\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n backgroundColor:\n index === currentIndex ? \"#303030\" : \"#e3e3e3\",\n cursor: \"pointer\",\n transition: \"background-color 0.3s\",\n border: \"none\",\n padding: 0,\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n\n return null;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,eAAe,KACzB,qBAAqB,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAE3C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAE3C,4BAA4B;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAE5C,yBAAyB;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEzC,2BAA2B;IAC3B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEjD,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAmThE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"PartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,eAAe,KACzB,qBAAqB,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAE3C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAE3C,4BAA4B;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAE5C,yBAAyB;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEzC,2BAA2B;IAC3B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEjD,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAwThE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -35,6 +35,10 @@ shopInfo, locale, translations: translationOverrides, config, }) => {
35
35
  // Get status from provider if available
36
36
  const status = statusProvider?.(item);
37
37
  const getBadgeInfo = () => {
38
+ // Don't show badge for developer category
39
+ if (item.category_key === 'developer') {
40
+ return null;
41
+ }
38
42
  // Check status provider first
39
43
  if (status) {
40
44
  if (status.isConnected === true) {
@@ -1 +1 @@
1
- {"version":3,"file":"PartnerIntegration.js","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport {\n Badge,\n BlockStack,\n Box,\n Button,\n Card,\n InlineStack,\n Text,\n Grid,\n SkeletonBodyText,\n EmptyState,\n Tooltip,\n} from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { usePartnerIntegrations } from \"../hooks/usePartnerIntegration\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\n\nexport type IntegrationStatusInfo = {\n isConnected?: boolean;\n isActive?: boolean;\n isPending?: boolean;\n showUpgradeBadge?: boolean;\n upgradeBadgeText?: string;\n upgradeBadgeIcon?: React.ReactNode;\n upgradeBadgeTooltip?: string;\n upgradeBadgePlan?: \"basic\" | \"pro\";\n};\n\nexport type IntegrationStatusProvider = (\n integration: IntegrationItem,\n) => IntegrationStatusInfo | undefined;\n\nexport interface PartnerIntegrationProps extends UseSDKOptions {\n /** Optional CSS class */\n className?: string;\n \n /** Status provider for custom integration statuses */\n statusProvider?: IntegrationStatusProvider;\n \n /** Handle manage action */\n onManage?: (item: IntegrationItem) => void;\n \n /** Handle install action */\n onInstall?: (item: IntegrationItem) => void;\n \n /** Handle open action */\n onOpen?: (item: IntegrationItem) => void;\n \n /** Handle upgrade click */\n onUpgradeClick?: (item: IntegrationItem) => void;\n \n /** Show empty state when no integrations available */\n showEmptyState?: boolean;\n}\n\nexport const PartnerIntegration: React.FC<PartnerIntegrationProps> = ({\n className = \"\",\n statusProvider,\n onManage,\n onInstall,\n onOpen,\n onUpgradeClick,\n showEmptyState = true,\n // SDK options (optional)\n shopInfo,\n locale,\n translations: translationOverrides,\n config,\n}) => {\n const { groups, loading, error } = usePartnerIntegrations();\n const sdk = useSDK({ shopInfo, locale, translations: translationOverrides, config });\n const translations = sdk.translations;\n\n const handleManage = (item: IntegrationItem) => {\n const url = item.button_manage_url;\n if (url) {\n if (url.startsWith(\"/\")) {\n onManage?.(item);\n } else {\n window.open(url, \"_blank\");\n onOpen?.(item);\n }\n } else {\n onManage?.(item);\n }\n };\n\n const handleInstall = (item: IntegrationItem) => {\n const url =\n item.button_install_link || item.button_install_url || item.app_url;\n if (url) {\n window.open(url, \"_blank\");\n }\n onInstall?.(item);\n };\n\n const renderIntegrationCard = (item: IntegrationItem) => {\n // Get status from provider if available\n const status = statusProvider?.(item);\n\n const getBadgeInfo = () => {\n // Check status provider first\n if (status) {\n if (status.isConnected === true) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n if (status.isConnected === false) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n if (status.isActive === true) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n if (status.isPending) {\n return {\n text: \"Pending\",\n tone: \"warning\" as const,\n };\n }\n if (status.isActive === false) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n }\n\n // Fall back to button-based logic only if no status provider\n if (item.button_manage_text && item.button_install_text) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n\n if (item.button_manage_text && !item.button_install_text) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n\n return null;\n };\n\n const badgeInfo = getBadgeInfo();\n\n return (\n <Card key={`integration--${item.id || item.key}`}>\n <InlineStack gap=\"300\">\n <InlineStack gap=\"300\" wrap={false}>\n {item.icon_url && (\n <img\n src={item.icon_url}\n alt={item.title}\n style={{\n width: \"40px\",\n height: \"40px\",\n borderRadius: \"8px\",\n }}\n />\n )}\n <Box minHeight=\"130px\">\n <BlockStack gap=\"300\">\n <BlockStack gap=\"100\">\n <InlineStack gap=\"200\" align=\"start\">\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"bold\">\n {item.title}\n </Text>\n {badgeInfo && (\n <Badge tone={badgeInfo.tone}>{badgeInfo.text}</Badge>\n )}\n {/* Upgrade Badge - controlled by status provider */}\n {status?.showUpgradeBadge && (\n <Tooltip\n content={status.upgradeBadgeTooltip || (translations.partnerIntegration?.upgradeBadge as any)?.upgradeBadgeTooltip || \"Available from Unlimited plan\"}\n dismissOnMouseOut\n >\n <div\n onClick={() => onUpgradeClick?.(item)}\n style={{\n cursor: \"pointer\",\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"4px 6px\",\n gap: \"4px\",\n borderRadius: \"var(--p-border-radius-150)\",\n backgroundColor:\n status.upgradeBadgePlan === \"pro\"\n ? \"#F0F2FF\"\n : \"#FFF1E3\",\n color:\n status.upgradeBadgePlan === \"pro\"\n ? \"#7126FF\"\n : \"#4F4700\",\n fontSize: \"12px\",\n fontWeight: 500,\n }}\n >\n {status.upgradeBadgeIcon && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n {status.upgradeBadgeIcon}\n </span>\n )}\n <span style={{\n fontSize: \"13px\",\n }}>{status.upgradeBadgeText || translations.partnerIntegration?.upgradeBadge?.upgradeToUnlimited || \"From Unlimited\"}</span>\n </div>\n </Tooltip>\n )}\n </InlineStack>\n {item.content && (\n <Text as=\"p\" variant=\"bodyMd\">\n {item.content}\n </Text>\n )}\n </BlockStack>\n <InlineStack gap=\"200\">\n {status ? (\n <>\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n disabled={item.key === \"after_ship\" || item.key === \"aftership\" ? (status.showUpgradeBadge === true) : false}\n >\n {item.button_manage_text}\n </Button>\n )}\n </>\n ) : (\n <>\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n >\n {item.button_manage_text}\n </Button>\n )}\n </>\n )}\n </InlineStack>\n </BlockStack>\n </Box>\n </InlineStack>\n </InlineStack>\n </Card>\n );\n };\n\n // Loading state\n if (loading) {\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {[1, 2, 3].map((groupIndex) => (\n <BlockStack key={`skeleton-group-${groupIndex}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <SkeletonBodyText lines={1} />\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {[1, 2].map((cardIndex) => (\n <Grid.Cell key={`skeleton-card-${groupIndex}-${cardIndex}`}>\n <Card>\n <BlockStack gap=\"300\">\n <SkeletonBodyText lines={3} />\n </BlockStack>\n </Card>\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"Unable to load integrations\"\n image=\"\"\n >\n <p>Please try again later</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (groups.length === 0) {\n if (!showEmptyState) return null;\n\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"No integrations available\"\n image=\"\"\n >\n <p>Check back later for available integrations</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Render groups\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {groups.map((group) => (\n <BlockStack key={`integration-group--${group.key}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <Text as=\"h3\" variant=\"headingMd\" fontWeight=\"semibold\">\n {group.title}\n </Text>\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {group.items.map((item: any) => (\n <Grid.Cell key={`integration-cell--${item.id || item.key}`}>\n {renderIntegrationCard(item)}\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n};\n\nexport default PartnerIntegration;\n"]}
1
+ {"version":3,"file":"PartnerIntegration.js","sourceRoot":"","sources":["../../src/components/PartnerIntegration.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport {\n Badge,\n BlockStack,\n Box,\n Button,\n Card,\n InlineStack,\n Text,\n Grid,\n SkeletonBodyText,\n EmptyState,\n Tooltip,\n} from \"@shopify/polaris\";\nimport { ExternalIcon } from \"@shopify/polaris-icons\";\nimport { usePartnerIntegrations } from \"../hooks/usePartnerIntegration\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\n\nexport type IntegrationStatusInfo = {\n isConnected?: boolean;\n isActive?: boolean;\n isPending?: boolean;\n showUpgradeBadge?: boolean;\n upgradeBadgeText?: string;\n upgradeBadgeIcon?: React.ReactNode;\n upgradeBadgeTooltip?: string;\n upgradeBadgePlan?: \"basic\" | \"pro\";\n};\n\nexport type IntegrationStatusProvider = (\n integration: IntegrationItem,\n) => IntegrationStatusInfo | undefined;\n\nexport interface PartnerIntegrationProps extends UseSDKOptions {\n /** Optional CSS class */\n className?: string;\n \n /** Status provider for custom integration statuses */\n statusProvider?: IntegrationStatusProvider;\n \n /** Handle manage action */\n onManage?: (item: IntegrationItem) => void;\n \n /** Handle install action */\n onInstall?: (item: IntegrationItem) => void;\n \n /** Handle open action */\n onOpen?: (item: IntegrationItem) => void;\n \n /** Handle upgrade click */\n onUpgradeClick?: (item: IntegrationItem) => void;\n \n /** Show empty state when no integrations available */\n showEmptyState?: boolean;\n}\n\nexport const PartnerIntegration: React.FC<PartnerIntegrationProps> = ({\n className = \"\",\n statusProvider,\n onManage,\n onInstall,\n onOpen,\n onUpgradeClick,\n showEmptyState = true,\n // SDK options (optional)\n shopInfo,\n locale,\n translations: translationOverrides,\n config,\n}) => {\n const { groups, loading, error } = usePartnerIntegrations();\n const sdk = useSDK({ shopInfo, locale, translations: translationOverrides, config });\n const translations = sdk.translations;\n\n const handleManage = (item: IntegrationItem) => {\n const url = item.button_manage_url;\n if (url) {\n if (url.startsWith(\"/\")) {\n onManage?.(item);\n } else {\n window.open(url, \"_blank\");\n onOpen?.(item);\n }\n } else {\n onManage?.(item);\n }\n };\n\n const handleInstall = (item: IntegrationItem) => {\n const url =\n item.button_install_link || item.button_install_url || item.app_url;\n if (url) {\n window.open(url, \"_blank\");\n }\n onInstall?.(item);\n };\n\n const renderIntegrationCard = (item: IntegrationItem) => {\n // Get status from provider if available\n const status = statusProvider?.(item);\n\n const getBadgeInfo = () => {\n // Don't show badge for developer category\n if (item.category_key === 'developer') {\n return null;\n }\n\n // Check status provider first\n if (status) {\n if (status.isConnected === true) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n if (status.isConnected === false) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n if (status.isActive === true) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n if (status.isPending) {\n return {\n text: \"Pending\",\n tone: \"warning\" as const,\n };\n }\n if (status.isActive === false) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n }\n\n // Fall back to button-based logic only if no status provider\n if (item.button_manage_text && item.button_install_text) {\n return {\n text: translations.partnerIntegration?.inactive || \"Inactive\",\n tone: undefined,\n };\n }\n\n if (item.button_manage_text && !item.button_install_text) {\n return {\n text: translations.partnerIntegration?.active || \"Active\",\n tone: \"success\" as const,\n };\n }\n\n return null;\n };\n\n const badgeInfo = getBadgeInfo();\n\n return (\n <Card key={`integration--${item.id || item.key}`}>\n <InlineStack gap=\"300\">\n <InlineStack gap=\"300\" wrap={false}>\n {item.icon_url && (\n <img\n src={item.icon_url}\n alt={item.title}\n style={{\n width: \"40px\",\n height: \"40px\",\n borderRadius: \"8px\",\n }}\n />\n )}\n <Box minHeight=\"130px\">\n <BlockStack gap=\"300\">\n <BlockStack gap=\"100\">\n <InlineStack gap=\"200\" align=\"start\">\n <Text as=\"p\" variant=\"bodyLg\" fontWeight=\"bold\">\n {item.title}\n </Text>\n {badgeInfo && (\n <Badge tone={badgeInfo.tone}>{badgeInfo.text}</Badge>\n )}\n {/* Upgrade Badge - controlled by status provider */}\n {status?.showUpgradeBadge && (\n <Tooltip\n content={status.upgradeBadgeTooltip || (translations.partnerIntegration?.upgradeBadge as any)?.upgradeBadgeTooltip || \"Available from Unlimited plan\"}\n dismissOnMouseOut\n >\n <div\n onClick={() => onUpgradeClick?.(item)}\n style={{\n cursor: \"pointer\",\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"4px 6px\",\n gap: \"4px\",\n borderRadius: \"var(--p-border-radius-150)\",\n backgroundColor:\n status.upgradeBadgePlan === \"pro\"\n ? \"#F0F2FF\"\n : \"#FFF1E3\",\n color:\n status.upgradeBadgePlan === \"pro\"\n ? \"#7126FF\"\n : \"#4F4700\",\n fontSize: \"12px\",\n fontWeight: 500,\n }}\n >\n {status.upgradeBadgeIcon && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n {status.upgradeBadgeIcon}\n </span>\n )}\n <span style={{\n fontSize: \"13px\",\n }}>{status.upgradeBadgeText || translations.partnerIntegration?.upgradeBadge?.upgradeToUnlimited || \"From Unlimited\"}</span>\n </div>\n </Tooltip>\n )}\n </InlineStack>\n {item.content && (\n <Text as=\"p\" variant=\"bodyMd\">\n {item.content}\n </Text>\n )}\n </BlockStack>\n <InlineStack gap=\"200\">\n {status ? (\n <>\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n disabled={item.key === \"after_ship\" || item.key === \"aftership\" ? (status.showUpgradeBadge === true) : false}\n >\n {item.button_manage_text}\n </Button>\n )}\n </>\n ) : (\n <>\n {item.button_install_text && (\n <Button\n icon={ExternalIcon}\n onClick={() => handleInstall(item)}\n >\n {item.button_install_text}\n </Button>\n )}\n {item.button_manage_text && (\n <Button\n onClick={() => handleManage(item)}\n >\n {item.button_manage_text}\n </Button>\n )}\n </>\n )}\n </InlineStack>\n </BlockStack>\n </Box>\n </InlineStack>\n </InlineStack>\n </Card>\n );\n };\n\n // Loading state\n if (loading) {\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {[1, 2, 3].map((groupIndex) => (\n <BlockStack key={`skeleton-group-${groupIndex}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <SkeletonBodyText lines={1} />\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {[1, 2].map((cardIndex) => (\n <Grid.Cell key={`skeleton-card-${groupIndex}-${cardIndex}`}>\n <Card>\n <BlockStack gap=\"300\">\n <SkeletonBodyText lines={3} />\n </BlockStack>\n </Card>\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"Unable to load integrations\"\n image=\"\"\n >\n <p>Please try again later</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (groups.length === 0) {\n if (!showEmptyState) return null;\n\n return (\n <div className={className}>\n <Card>\n <EmptyState\n heading=\"No integrations available\"\n image=\"\"\n >\n <p>Check back later for available integrations</p>\n </EmptyState>\n </Card>\n </div>\n );\n }\n\n // Render groups\n return (\n <div className={className}>\n <BlockStack gap=\"600\">\n {groups.map((group) => (\n <BlockStack key={`integration-group--${group.key}`} gap=\"400\">\n <Box paddingInlineStart={{ xs: \"200\", md: \"0\" }}>\n <Text as=\"h3\" variant=\"headingMd\" fontWeight=\"semibold\">\n {group.title}\n </Text>\n </Box>\n <Grid columns={{ xs: 1, sm: 1, md: 2, lg: 2, xl: 2 }}>\n {group.items.map((item: any) => (\n <Grid.Cell key={`integration-cell--${item.id || item.key}`}>\n {renderIntegrationCard(item)}\n </Grid.Cell>\n ))}\n </Grid>\n </BlockStack>\n ))}\n </BlockStack>\n </div>\n );\n};\n\nexport default PartnerIntegration;\n"]}
@@ -1 +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;;aAoD3B,MAAM;eACJ,MAAM;eACN,GAAG,EAAE;;;;;EAiCjB;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
+ {"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;;aAqD3B,MAAM;eACJ,MAAM;eACN,GAAG,EAAE;;;;;EAiCjB;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"}
@@ -36,11 +36,12 @@ export function usePartnerIntegrations() {
36
36
  // Get translations
37
37
  const translations = sdk.translations?.partnerIntegration || {};
38
38
  // Define category order and translation mapping
39
- const categoryOrder = ['review_sources', 'post_purchase_automation', 'seo_rich_snippets'];
39
+ const categoryOrder = ['review_sources', 'post_purchase_automation', 'seo_rich_snippets', 'developer'];
40
40
  const translationMap = {
41
41
  'review_sources': translations.reviewSourcesTitle || 'Review Sources',
42
42
  'post_purchase_automation': translations.postPurchaseTitle || 'Post-purchase & Automation',
43
- 'seo_rich_snippets': translations.seoSnippetsTitle || 'SEO & Rich Snippets'
43
+ 'seo_rich_snippets': translations.seoSnippetsTitle || 'SEO & Rich Snippets',
44
+ 'developer': translations.developerTitle || 'Developer'
44
45
  };
45
46
  // Build groups in order
46
47
  const allGroups = [];
@@ -1 +1 @@
1
- {"version":3,"file":"usePartnerIntegration.js","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"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","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 // Filter out Google Reviews\n return dashboardData.integrations.filter(\n (item: any) =>\n item.key !== \"google_reviews\" && item.title !== \"Google Reviews\",\n );\n }, [dashboardData]);\n\n // Group integrations by category using the API's category_key field\n const groups = useMemo(() => {\n if (!integrations || integrations.length === 0) {\n return [];\n }\n\n // Group by category_key from API\n const categoryGroups: Record<string, any[]> = {};\n const categoryTitles: Record<string, string> = {};\n \n integrations.forEach((item: any) => {\n const categoryKey = item.category_key || 'other';\n const categoryTitle = item.category || 'Other';\n \n if (!categoryGroups[categoryKey]) {\n categoryGroups[categoryKey] = [];\n categoryTitles[categoryKey] = categoryTitle;\n }\n categoryGroups[categoryKey].push(item);\n });\n\n // Get translations\n const translations = sdk.translations?.partnerIntegration || {};\n\n // Define category order and translation mapping\n const categoryOrder = ['review_sources', 'post_purchase_automation', 'seo_rich_snippets'];\n const translationMap: Record<string, string> = {\n 'review_sources': translations.reviewSourcesTitle || 'Review Sources',\n 'post_purchase_automation': translations.postPurchaseTitle || 'Post-purchase & Automation',\n 'seo_rich_snippets': translations.seoSnippetsTitle || 'SEO & Rich Snippets'\n };\n\n // Build groups in order\n const allGroups: Array<{\n key: string;\n title: string;\n items: any[];\n }> = [];\n \n // Add categories in preferred order first\n categoryOrder.forEach(categoryKey => {\n if (categoryGroups[categoryKey]) {\n allGroups.push({\n key: categoryKey,\n title: translationMap[categoryKey] || categoryTitles[categoryKey],\n items: categoryGroups[categoryKey]\n });\n delete categoryGroups[categoryKey];\n }\n });\n \n // Add any remaining categories\n Object.entries(categoryGroups).forEach(([categoryKey, items]) => {\n allGroups.push({\n key: categoryKey,\n title: categoryTitles[categoryKey],\n items\n });\n });\n\n return allGroups;\n }, [integrations, sdk.translations]);\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
+ {"version":3,"file":"usePartnerIntegration.js","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"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","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 // Filter out Google Reviews\n return dashboardData.integrations.filter(\n (item: any) =>\n item.key !== \"google_reviews\" && item.title !== \"Google Reviews\",\n );\n }, [dashboardData]);\n\n // Group integrations by category using the API's category_key field\n const groups = useMemo(() => {\n if (!integrations || integrations.length === 0) {\n return [];\n }\n\n // Group by category_key from API\n const categoryGroups: Record<string, any[]> = {};\n const categoryTitles: Record<string, string> = {};\n \n integrations.forEach((item: any) => {\n const categoryKey = item.category_key || 'other';\n const categoryTitle = item.category || 'Other';\n \n if (!categoryGroups[categoryKey]) {\n categoryGroups[categoryKey] = [];\n categoryTitles[categoryKey] = categoryTitle;\n }\n categoryGroups[categoryKey].push(item);\n });\n\n // Get translations\n const translations = sdk.translations?.partnerIntegration || {};\n\n // Define category order and translation mapping\n const categoryOrder = ['review_sources', 'post_purchase_automation', 'seo_rich_snippets', 'developer'];\n const translationMap: Record<string, string> = {\n 'review_sources': translations.reviewSourcesTitle || 'Review Sources',\n 'post_purchase_automation': translations.postPurchaseTitle || 'Post-purchase & Automation',\n 'seo_rich_snippets': translations.seoSnippetsTitle || 'SEO & Rich Snippets',\n 'developer': (translations as any).developerTitle || 'Developer'\n };\n\n // Build groups in order\n const allGroups: Array<{\n key: string;\n title: string;\n items: any[];\n }> = [];\n \n // Add categories in preferred order first\n categoryOrder.forEach(categoryKey => {\n if (categoryGroups[categoryKey]) {\n allGroups.push({\n key: categoryKey,\n title: translationMap[categoryKey] || categoryTitles[categoryKey],\n items: categoryGroups[categoryKey]\n });\n delete categoryGroups[categoryKey];\n }\n });\n \n // Add any remaining categories\n Object.entries(categoryGroups).forEach(([categoryKey, items]) => {\n allGroups.push({\n key: categoryKey,\n title: categoryTitles[categoryKey],\n items\n });\n });\n\n return allGroups;\n }, [integrations, sdk.translations]);\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"]}
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "评价来源",
28
28
  "postPurchaseTitle": "购买后与自动化",
29
29
  "seoSnippetsTitle": "SEO 与富媒体摘要",
30
+ "developerTitle": "开发者",
30
31
  "install": "安装应用",
31
32
  "manage": "管理",
32
33
  "connect": "连接",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Bewertungsquellen",
28
28
  "postPurchaseTitle": "Nach dem Kauf & Automatisierung",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Entwickler",
30
31
  "install": "App installieren",
31
32
  "manage": "Verwalten",
32
33
  "connect": "Verbinden",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Anmeldelseskilder",
28
28
  "postPurchaseTitle": "Efter køb & automatisering",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Udvikler",
30
31
  "install": "Installer app",
31
32
  "manage": "Administrer",
32
33
  "connect": "Forbind",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Review Sources",
28
28
  "postPurchaseTitle": "Post-purchase & Automation",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Developer",
30
31
  "install": "Install app",
31
32
  "manage": "Manage",
32
33
  "connect": "Connect",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Fuentes de reseñas",
28
28
  "postPurchaseTitle": "Post-compra y automatización",
29
29
  "seoSnippetsTitle": "SEO y fragmentos enriquecidos",
30
+ "developerTitle": "Desarrollador",
30
31
  "install": "Instalar app",
31
32
  "manage": "Gestionar",
32
33
  "connect": "Conectar",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Sources d'avis",
28
28
  "postPurchaseTitle": "Après-achat & Automatisation",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Développeur",
30
31
  "install": "Installer l'application",
31
32
  "manage": "Gérer",
32
33
  "connect": "Connecter",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Foinsí léirmheasa",
28
28
  "postPurchaseTitle": "Iarcheannach & Uathoibriú",
29
29
  "seoSnippetsTitle": "SEO & Snippets Saibhir",
30
+ "developerTitle": "Developer",
30
31
  "install": "Suiteáil aip",
31
32
  "manage": "Bainistigh",
32
33
  "connect": "Ceangail",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "रिव्यू स्रोत",
28
28
  "postPurchaseTitle": "पोस्ट-परचेज और ऑटोमेशन",
29
29
  "seoSnippetsTitle": "SEO और रिच स्निपेट्स",
30
+ "developerTitle": "Developer",
30
31
  "install": "ऐप इंस्टॉल करें",
31
32
  "manage": "प्रबंधित करें",
32
33
  "connect": "कनेक्ट करें",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Fonti delle recensioni",
28
28
  "postPurchaseTitle": "Post-acquisto e automazione",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Sviluppatore",
30
31
  "install": "Installa app",
31
32
  "manage": "Gestisci",
32
33
  "connect": "Connetti",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "レビューソース",
28
28
  "postPurchaseTitle": "購入後&自動化",
29
29
  "seoSnippetsTitle": "SEO & リッチスニペット",
30
+ "developerTitle": "開発者",
30
31
  "install": "アプリをインストール",
31
32
  "manage": "管理",
32
33
  "connect": "接続",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Reviewbronnen",
28
28
  "postPurchaseTitle": "Na aankoop & automatisering",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Ontwikkelaar",
30
31
  "install": "App installeren",
31
32
  "manage": "Beheren",
32
33
  "connect": "Verbinden",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Puna arotake",
28
28
  "postPurchaseTitle": "I muri i te hoko & Aunoatanga",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Developer",
30
31
  "install": "Tāuta taupānga",
31
32
  "manage": "Whakahaere",
32
33
  "connect": "Hono",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Fontes de avaliações",
28
28
  "postPurchaseTitle": "Pós-compra e automação",
29
29
  "seoSnippetsTitle": "SEO e Rich Snippets",
30
+ "developerTitle": "Desenvolvedor",
30
31
  "install": "Instalar app",
31
32
  "manage": "Gerir",
32
33
  "connect": "Conectar",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Recensionskällor",
28
28
  "postPurchaseTitle": "Efter köp & automatisering",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Utvecklare",
30
31
  "install": "Installera app",
31
32
  "manage": "Hantera",
32
33
  "connect": "Anslut",
@@ -27,6 +27,7 @@
27
27
  "reviewSourcesTitle": "Nguồn đánh giá",
28
28
  "postPurchaseTitle": "Sau mua hàng & Tự động hóa",
29
29
  "seoSnippetsTitle": "SEO & Rich Snippets",
30
+ "developerTitle": "Nhà phát triển",
30
31
  "install": "Cài đặt ứng dụng",
31
32
  "manage": "Quản lý",
32
33
  "connect": "Kết nối",
@@ -1,4 +1,4 @@
1
- export type IntegrationCategory = "review_sources" | "post_purchase_automation" | "seo_rich_snippets";
1
+ export type IntegrationCategory = "review_sources" | "post_purchase_automation" | "seo_rich_snippets" | "developer";
2
2
  export type IntegrationStatus = "connected" | "active" | "inactive";
3
3
  export interface IntegrationItem {
4
4
  id?: string | number;
@@ -1 +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"}
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,GAAG,WAAW,CAAC;AAEpH,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"}
@@ -1 +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}"]}
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\" | \"developer\";\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}"]}
@@ -29,6 +29,7 @@ export interface SDKTranslations {
29
29
  reviewSourcesTitle?: string;
30
30
  postPurchaseTitle?: string;
31
31
  seoSnippetsTitle?: string;
32
+ developerTitle?: string;
32
33
  noData?: string;
33
34
  noDataMessage?: string;
34
35
  errorTitle?: string;
@@ -1 +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;YACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;SAC9B,CAAC;KACH,CAAA;CACF;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC"}
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,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,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;YACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;SAC9B,CAAC;KACH,CAAA;CACF;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC"}
@@ -1 +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 upgradeBadgeTooltip?: string;\n };\n }\n}\n\nexport type TranslationKey = keyof SDKTranslations;"]}
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 developerTitle?: 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 upgradeBadgeTooltip?: string;\n };\n }\n}\n\nexport type TranslationKey = keyof SDKTranslations;"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datlv-trustshop/shopify-inapp-components",
3
- "version": "0.2.14",
3
+ "version": "0.2.16",
4
4
  "private": false,
5
5
  "description": "React TypeScript components for Shopify in-app dashboard content",
6
6
  "main": "dist/index.js",