@burdenoff/website-sdk 2026.720.10 → 2026.723.2

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.
@@ -126,6 +126,8 @@ interface StorePageProps {
126
126
  compatibleWith?: string;
127
127
  /** URL for the authenticated app (install / purchase CTA) */
128
128
  appLoginUrl: string;
129
+ /** When true, the per-product install CTA renders "Coming Soon" instead of "Install Free" / "Get for $X". */
130
+ waitlist?: boolean;
129
131
  /** Called instead of <a href> for internal navigation — pass useNavigate() wrapper */
130
132
  onNavigate?: (path: string) => void;
131
133
  /** Product-specific labels/copy for the store UI. */
@@ -155,7 +157,7 @@ interface StoreProductDetailPageProps extends StorePageProps {
155
157
  id?: string;
156
158
  productName?: string;
157
159
  }
158
- declare function StoreProductDetailPage({ slug, id, appLoginUrl, onNavigate, productName, }: StoreProductDetailPageProps): react_jsx_runtime.JSX.Element;
160
+ declare function StoreProductDetailPage({ slug, id, appLoginUrl, onNavigate, productName, waitlist: waitlistProp, }: StoreProductDetailPageProps): react_jsx_runtime.JSX.Element;
159
161
 
160
162
  declare function formatPrice(price: number | null | undefined, currency: string | null | undefined, pricingModel: string): string;
161
163
  declare function formatDownloads(n: number | null | undefined): string;
@@ -126,6 +126,8 @@ interface StorePageProps {
126
126
  compatibleWith?: string;
127
127
  /** URL for the authenticated app (install / purchase CTA) */
128
128
  appLoginUrl: string;
129
+ /** When true, the per-product install CTA renders "Coming Soon" instead of "Install Free" / "Get for $X". */
130
+ waitlist?: boolean;
129
131
  /** Called instead of <a href> for internal navigation — pass useNavigate() wrapper */
130
132
  onNavigate?: (path: string) => void;
131
133
  /** Product-specific labels/copy for the store UI. */
@@ -155,7 +157,7 @@ interface StoreProductDetailPageProps extends StorePageProps {
155
157
  id?: string;
156
158
  productName?: string;
157
159
  }
158
- declare function StoreProductDetailPage({ slug, id, appLoginUrl, onNavigate, productName, }: StoreProductDetailPageProps): react_jsx_runtime.JSX.Element;
160
+ declare function StoreProductDetailPage({ slug, id, appLoginUrl, onNavigate, productName, waitlist: waitlistProp, }: StoreProductDetailPageProps): react_jsx_runtime.JSX.Element;
159
161
 
160
162
  declare function formatPrice(price: number | null | undefined, currency: string | null | undefined, pricingModel: string): string;
161
163
  declare function formatDownloads(n: number | null | undefined): string;
@@ -1,4 +1,4 @@
1
- export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from '../product-card-D2HQglaf.mjs';
1
+ export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from '../product-card-DL9O3Ez9.mjs';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from '../product-card-D2HQglaf.js';
1
+ export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from '../product-card-DL9O3Ez9.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
 
4
4
  /**
@@ -1927,9 +1927,11 @@ function StoreProductDetailPage({
1927
1927
  id,
1928
1928
  appLoginUrl,
1929
1929
  onNavigate,
1930
- productName
1930
+ productName,
1931
+ waitlist: waitlistProp
1931
1932
  }) {
1932
1933
  const client = useWebSDK();
1934
+ const waitlist = waitlistProp ?? false;
1933
1935
  const [details, setDetails] = React.useState(null);
1934
1936
  const [loading, setLoading] = React.useState(true);
1935
1937
  const [error, setError] = React.useState(null);
@@ -2013,6 +2015,9 @@ function StoreProductDetailPage({
2013
2015
  product.currency,
2014
2016
  product.pricingModel
2015
2017
  );
2018
+ const ctaLabel = waitlist ? "Coming Soon" : priceLabel === "Free" ? "Install Free" : `Get for ${priceLabel}`;
2019
+ const ctaHref = waitlist ? "#" : appLoginUrl;
2020
+ const ctaAriaDisabled = waitlist || void 0;
2016
2021
  const screenshots = product.screenshots ?? [];
2017
2022
  const totalRatings = ratingDistribution ? ratingDistribution.fiveStars + ratingDistribution.fourStars + ratingDistribution.threeStars + ratingDistribution.twoStars + ratingDistribution.oneStar : 0;
2018
2023
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
@@ -2137,11 +2142,12 @@ function StoreProductDetailPage({
2137
2142
  /* @__PURE__ */ jsxRuntime.jsx(
2138
2143
  "a",
2139
2144
  {
2140
- href: appLoginUrl,
2141
- target: "_blank",
2142
- rel: "noopener noreferrer",
2143
- className: "flex-1 h-11 rounded-lg bg-primary text-primary-foreground text-sm font-semibold flex items-center justify-center hover:opacity-90 transition-opacity",
2144
- children: priceLabel === "Free" ? "Install Free" : `Get for ${priceLabel}`
2145
+ href: ctaHref,
2146
+ target: waitlist ? void 0 : "_blank",
2147
+ rel: waitlist ? void 0 : "noopener noreferrer",
2148
+ "aria-disabled": ctaAriaDisabled,
2149
+ className: "flex-1 h-11 rounded-lg bg-primary text-primary-foreground text-sm font-semibold flex items-center justify-center hover:opacity-90 transition-opacity aria-disabled:opacity-60 aria-disabled:cursor-not-allowed",
2150
+ children: ctaLabel
2145
2151
  }
2146
2152
  )
2147
2153
  ] }),
@@ -2314,14 +2320,15 @@ function StoreProductDetailPage({
2314
2320
  /* @__PURE__ */ jsxRuntime.jsx(
2315
2321
  "a",
2316
2322
  {
2317
- href: appLoginUrl,
2318
- target: "_blank",
2319
- rel: "noopener noreferrer",
2320
- className: "flex items-center justify-center w-full h-11 rounded-lg bg-primary text-primary-foreground text-sm font-semibold hover:opacity-90 active:scale-[0.98] transition-all duration-150",
2321
- children: priceLabel === "Free" ? "Install Free" : `Get for ${priceLabel}`
2323
+ href: ctaHref,
2324
+ target: waitlist ? void 0 : "_blank",
2325
+ rel: waitlist ? void 0 : "noopener noreferrer",
2326
+ "aria-disabled": ctaAriaDisabled,
2327
+ className: "flex items-center justify-center w-full h-11 rounded-lg bg-primary text-primary-foreground text-sm font-semibold hover:opacity-90 active:scale-[0.98] transition-all duration-150 aria-disabled:opacity-60 aria-disabled:cursor-not-allowed",
2328
+ children: ctaLabel
2322
2329
  }
2323
2330
  ),
2324
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground text-center", children: "Login required to install" }),
2331
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground text-center", children: waitlist ? `Available when ${product?.name ?? "this product"} launches` : "Login required to install" }),
2325
2332
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border pt-4 space-y-2 text-xs text-muted-foreground", children: [
2326
2333
  product.type && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
2327
2334
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Type" }),