@tokenoftrust/storefront-runner 2.4.85 → 2.4.87
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/apps/storefront/env.d.ts +1 -1
- package/apps/storefront/package.json +1 -1
- package/apps/storefront/src/components/{ProductCard.astro → catalog/storefront/ProductCard.astro} +3 -3
- package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/PriceDisplay.astro +1 -1
- package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/ProductCarousel.astro +1 -1
- package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/ProductGrid.astro +1 -1
- package/apps/storefront/src/components/{islands → catalog/storefront/islands}/SearchTypeahead.tsx +1 -1
- package/apps/storefront/src/components/{islands → catalog/storefront/islands}/VariantSelector.tsx +1 -1
- package/apps/storefront/src/components/{plp → catalog/storefront/plp}/FacetSidebar.astro +1 -1
- package/apps/storefront/src/components/chrome/SiteHeader.astro +1 -1
- package/apps/storefront/src/components/compliance/{NicotineWarning.astro → storefront/compliance/NicotineWarning.astro} +1 -1
- package/apps/storefront/src/components/{islands → compliance/storefront/islands}/CheckoutComplianceGate.tsx +1 -1
- package/apps/storefront/src/components/{apps → integrations/storefront/apps}/AppWidgetFrame.astro +1 -1
- package/apps/storefront/src/components/{subscription → subscriptions/storefront/subscription}/HowItWorksSteps.astro +1 -1
- package/apps/storefront/src/components/{subscription → subscriptions/storefront/subscription}/ManageSubscriptionEntry.astro +1 -1
- package/apps/storefront/src/components/{subscription → subscriptions/storefront/subscription}/SavingsExplainer.astro +2 -2
- package/apps/storefront/src/config/devTenantSeed.ts +1 -1
- package/apps/storefront/src/layouts/Layout.astro +11 -11
- package/apps/storefront/src/lib/activity/alerts.ts +1 -1
- package/apps/storefront/src/lib/activity/candidateSubmitLease.ts +1 -1
- package/apps/storefront/src/lib/activity/fixtures/evidence.ts +2 -2
- package/apps/storefront/src/lib/activity/query.ts +2 -2
- package/apps/storefront/src/lib/activity/store.ts +1 -1
- package/apps/storefront/src/lib/admin/services/mock/index.ts +5 -5
- package/apps/storefront/src/lib/apps/consentConfigRead.ts +1 -1
- package/apps/storefront/src/lib/apps/orders/attributionService.ts +2 -2
- package/apps/storefront/src/lib/apps/orders/orderConversionD1.ts +2 -2
- package/apps/storefront/src/lib/apps/orders/verifiedProviderMeasurement.ts +2 -2
- package/apps/storefront/src/lib/{admin → catalog/admin}/catalogSettingsClient.ts +2 -2
- package/apps/storefront/src/lib/{admin → catalog/admin}/services/catalogProducts.ts +2 -2
- package/apps/storefront/src/lib/{d1 → catalog/d1}/catalog.ts +1 -1
- package/apps/storefront/src/lib/{admin/services/mock → catalog/fixtures}/products.ts +5 -5
- package/apps/storefront/src/lib/{search → catalog/search}/index.ts +1 -1
- package/apps/storefront/src/lib/{priceBuckets.ts → catalog/shared/priceBuckets.ts} +1 -1
- package/apps/storefront/src/lib/{tot → catalog/tot}/ToTClient.ts +3 -3
- package/apps/storefront/src/lib/{tot → catalog/tot}/query.ts +1 -1
- package/apps/storefront/src/lib/{tot → catalog/tot}/syncState.ts +1 -1
- package/apps/storefront/src/lib/{tot → catalog/tot}/tenantCatalog.ts +1 -1
- package/apps/storefront/src/lib/{admin/services/mock → checkout/fixtures}/checkoutSettings.ts +2 -2
- package/apps/storefront/src/lib/content/index.ts +1 -1
- package/apps/storefront/src/lib/env.ts +1 -1
- package/apps/storefront/src/lib/fulfillment/store.ts +1 -1
- package/apps/storefront/src/lib/{apps → integrations/apps}/appVersionStore.ts +1 -1
- package/apps/storefront/src/lib/{apps → integrations/apps}/credentials.ts +1 -1
- package/apps/storefront/src/lib/{apps → integrations/apps}/orders/idempotency.ts +1 -1
- package/apps/storefront/src/lib/{apps → integrations/apps}/registryAccess.ts +2 -2
- package/apps/storefront/src/lib/{apps → integrations/apps}/registryService.ts +1 -1
- package/apps/storefront/src/lib/{integration → integrations/integration}/browserEnvironment.ts +1 -1
- package/apps/storefront/src/lib/{integration → integrations/integration}/managedInstallDeclarations.ts +1 -1
- package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/deliveryEngine.ts +1 -1
- package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/deliveryStore.ts +1 -1
- package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/emit.ts +2 -2
- package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/getDispatcher.ts +2 -2
- package/apps/storefront/src/lib/jsonld.ts +1 -1
- package/apps/storefront/src/lib/monitoring/manifest.ts +1 -1
- package/apps/storefront/src/lib/newsletter/send.ts +1 -1
- package/apps/storefront/src/lib/newsletter/subscribers.ts +1 -1
- package/apps/storefront/src/lib/{apps/orders → orders/data}/orderForwardReceiver.ts +3 -3
- package/apps/storefront/src/lib/{apps/orders → orders/data}/orderMapper.ts +2 -2
- package/apps/storefront/src/lib/{apps/orders → orders/data}/ordersStore.ts +1 -1
- package/apps/storefront/src/lib/{admin/services/mock → orders/fixtures}/orders.ts +5 -5
- package/apps/storefront/src/lib/rawChrome.ts +2 -2
- package/apps/storefront/src/lib/sections.ts +2 -2
- package/apps/storefront/src/lib/social/tokenStore.ts +2 -2
- package/apps/storefront/src/lib/{admin/services/mock → subscriptions/fixtures}/subscriptions.ts +8 -8
- package/apps/storefront/src/lib/tracking/d1Control.ts +1 -1
- package/apps/storefront/src/lib/tracking/interactionStore.ts +0 -0
- package/apps/storefront/src/lib/tracking/pruneRollup.ts +1 -1
- package/apps/storefront/src/lib/tracking/tenantD1Registry.ts +1 -1
- package/apps/storefront/src/lib/url.ts +1 -1
- package/apps/storefront/src/middleware/controlPlane.ts +2 -2
- package/apps/storefront/src/middleware/index.ts +2 -2
- package/apps/storefront/src/middleware/renderChain.ts +7 -7
- package/apps/storefront/src/pages/404.astro +1 -1
- package/apps/storefront/src/pages/api/activity.ts +1 -1
- package/apps/storefront/src/pages/api/admin/activity-alerts.ts +1 -1
- package/apps/storefront/src/pages/api/admin/interaction-insights.ts +1 -1
- package/apps/storefront/src/pages/api/admin/orders/[id].ts +2 -2
- package/apps/storefront/src/pages/api/admin/orders.ts +2 -2
- package/apps/storefront/src/pages/api/commerce/checkout-handoff.ts +2 -2
- package/apps/storefront/src/pages/api/commerce/final-cart-authorization.ts +2 -2
- package/apps/storefront/src/pages/api/compliance/preflight.ts +1 -1
- package/apps/storefront/src/pages/api/newsletter/[collection]/subscribe.ts +1 -1
- package/apps/storefront/src/pages/api/newsletter/confirm.ts +1 -1
- package/apps/storefront/src/pages/api/newsletter/unsubscribe.ts +1 -1
- package/apps/storefront/src/pages/api/tracking/interaction.ts +1 -1
- package/apps/storefront/src/pages/collections/[handle].astro +5 -5
- package/apps/storefront/src/pages/collections/index.astro +2 -2
- package/apps/storefront/src/pages/index.astro +7 -7
- package/apps/storefront/src/pages/llms.txt.ts +1 -1
- package/apps/storefront/src/pages/products/[handle].astro +14 -14
- package/apps/storefront/src/pages/search.astro +2 -2
- package/apps/storefront/src/pages/sitemap.xml.ts +1 -1
- package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +34 -34
- package/docs/widget-library-guide.md +36 -36
- package/package.json +1 -1
- package/packages/public-runtime/src/chrome.ts +1 -1
- package/packages/public-runtime/src/customization-scripts.ts +1 -1
- /package/apps/storefront/src/components/{CollectionCard.astro → catalog/storefront/CollectionCard.astro} +0 -0
- /package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/BrandGrid.astro +0 -0
- /package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/RatingStars.astro +0 -0
- /package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/ReviewList.astro +0 -0
- /package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/ReviewSummary.astro +0 -0
- /package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/TagFilterCloud.astro +0 -0
- /package/apps/storefront/src/components/{islands → catalog/storefront/islands}/ImageGallery.tsx +0 -0
- /package/apps/storefront/src/components/{islands → catalog/storefront/islands}/QuickView.tsx +0 -0
- /package/apps/storefront/src/components/{islands → catalog/storefront/islands}/RecentlyViewed.tsx +0 -0
- /package/apps/storefront/src/components/{plp → catalog/storefront/plp}/ActiveFilters.astro +0 -0
- /package/apps/storefront/src/components/{plp → catalog/storefront/plp}/Pagination.astro +0 -0
- /package/apps/storefront/src/components/{plp → catalog/storefront/plp}/SortSelect.astro +0 -0
- /package/apps/storefront/src/components/{commerce → checkout/storefront/commerce}/CartDrawerStyles.astro +0 -0
- /package/apps/storefront/src/components/{commerce → checkout/storefront/commerce}/CheckoutLoader.astro +0 -0
- /package/apps/storefront/src/components/compliance/{AdultSignatureNotice.astro → storefront/compliance/AdultSignatureNotice.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{ComplianceNotice.astro → storefront/compliance/ComplianceNotice.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{ExciseTaxNotice.astro → storefront/compliance/ExciseTaxNotice.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{PactActNotice.astro → storefront/compliance/PactActNotice.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{Prop65Warning.astro → storefront/compliance/Prop65Warning.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{PurchaseLimitNotice.astro → storefront/compliance/PurchaseLimitNotice.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{ShippingRestrictionNotice.astro → storefront/compliance/ShippingRestrictionNotice.astro} +0 -0
- /package/apps/storefront/src/components/compliance/{StateEligibilityNotice.astro → storefront/compliance/StateEligibilityNotice.astro} +0 -0
- /package/apps/storefront/src/components/{islands → compliance/storefront/islands}/AgeGate.tsx +0 -0
- /package/apps/storefront/src/components/{islands → compliance/storefront/islands}/IsolatedAgeGate.tsx +0 -0
- /package/apps/storefront/src/components/{WidgetFrame.astro → integrations/storefront/WidgetFrame.astro} +0 -0
- /package/apps/storefront/src/lib/{admin → catalog/admin}/catalogSettingsPreview.ts +0 -0
- /package/apps/storefront/src/lib/{admin → catalog/admin}/catalogSettingsState.ts +0 -0
- /package/apps/storefront/src/lib/{admin → catalog/admin}/productSetupPhoto.ts +0 -0
- /package/apps/storefront/src/lib/{admin → catalog/admin}/productsTabClient.ts +0 -0
- /package/apps/storefront/src/lib/{admin → catalog/admin}/viewmodels/catalogProducts.ts +0 -0
- /package/apps/storefront/src/lib/{admin → catalog/admin}/viewmodels/products.ts +0 -0
- /package/apps/storefront/src/lib/{fixtures → catalog/fixtures}/sampleProducts.ts +0 -0
- /package/apps/storefront/src/lib/{featuredProductsPresentation.ts → catalog/shared/featuredProductsPresentation.ts} +0 -0
- /package/apps/storefront/src/lib/{tot → catalog/tot}/d1Client.ts +0 -0
- /package/apps/storefront/src/lib/{tot → catalog/tot}/totClientInterface.ts +0 -0
- /package/apps/storefront/src/lib/{admin → checkout/admin}/checkoutStyleInput.ts +0 -0
- /package/apps/storefront/src/lib/{admin → checkout/admin}/checkoutStyleTarget.ts +0 -0
- /package/apps/storefront/src/{components/islands → lib/checkout/browser}/useCheckoutHandoffCorrelation.ts +0 -0
- /package/apps/storefront/src/lib/{commerce → checkout/commerce}/checkoutHandoffCorrelation.ts +0 -0
- /package/apps/storefront/src/lib/{commerce → checkout/commerce}/checkoutSettings.ts +0 -0
- /package/apps/storefront/src/lib/{commerce → checkout/commerce}/finalCartAuthorization.ts +0 -0
- /package/apps/storefront/src/lib/{checkoutCommerce.ts → checkout/shared/checkoutCommerce.ts} +0 -0
- /package/apps/storefront/src/{components/islands → lib/compliance/browser}/checkoutVerificationFlow.ts +0 -0
- /package/apps/storefront/src/lib/{visitorRegionCookie.ts → compliance/shared/visitorRegionCookie.ts} +0 -0
- /package/apps/storefront/src/lib/{verification → compliance/verification}/totVerificationClient.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/gatewayKeys.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/gtmMigrationDraft.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/orders/customerHash.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/routeParams.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/scopes.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/widgets/eligibility.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/widgets/frameProps.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/widgets/launchToken.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/widgets/placements.ts +0 -0
- /package/apps/storefront/src/lib/{apps → integrations/apps}/widgets/renderSlot.ts +0 -0
- /package/apps/storefront/src/lib/{integration → integrations/integration}/bakedManagedInstalls.ts +0 -0
- /package/apps/storefront/src/lib/{integration → integrations/integration}/nonceStamp.ts +0 -0
- /package/apps/storefront/src/lib/{integration → integrations/integration}/renderIntegrationState.ts +0 -0
- /package/apps/storefront/src/lib/{integration → integrations/integration}/stageDestinationIds.ts +0 -0
- /package/apps/storefront/src/lib/{integration → integrations/integration}/tenantAnalyticsDeclarations.ts +0 -0
- /package/apps/storefront/src/lib/{integration → integrations/integration}/tenantDeclarations.ts +0 -0
- /package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/cloudflareQueueDispatcher.ts +0 -0
- /package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/deliveryMapper.ts +0 -0
- /package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/dispatcher.ts +0 -0
- /package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/endpointGuard.ts +0 -0
- /package/apps/storefront/src/lib/{webhooks → integrations/webhooks}/events.ts +0 -0
- /package/apps/storefront/src/lib/{admin → orders/admin}/orderClient.ts +0 -0
- /package/apps/storefront/src/lib/{admin → orders/admin}/services/orders.ts +0 -0
- /package/apps/storefront/src/lib/{admin → orders/admin}/viewmodels/orders.ts +0 -0
- /package/apps/storefront/src/lib/{apps/orders → orders/providers}/foxyOrderClient.ts +0 -0
- /package/apps/storefront/src/lib/{admin → subscriptions/admin}/viewmodels/subscriptions.ts +0 -0
- /package/apps/storefront/src/lib/{subscription → subscriptions/subscription}/model.ts +0 -0
|
@@ -9,17 +9,17 @@ import Layout from "@/layouts/Layout.astro";
|
|
|
9
9
|
import Breadcrumbs from "@/components/Breadcrumbs.astro";
|
|
10
10
|
import { homeCrumbLabel, siteTrail } from "@/lib/breadcrumbs";
|
|
11
11
|
import Badge from "@/components/Badge.astro";
|
|
12
|
-
import ProductCard from "@/components/ProductCard.astro";
|
|
12
|
+
import ProductCard from "@/components/catalog/storefront/ProductCard.astro";
|
|
13
13
|
import Section from "@/components/Section.astro";
|
|
14
|
-
import ImageGallery from "@/components/islands/ImageGallery.tsx";
|
|
15
|
-
import VariantSelector, { publicSelectorVariants } from "@/components/islands/VariantSelector.tsx";
|
|
16
|
-
import CheckoutComplianceGate from "@/components/islands/CheckoutComplianceGate.tsx";
|
|
17
|
-
import RecentlyViewed from "@/components/islands/RecentlyViewed.tsx";
|
|
18
|
-
import NicotineWarning from "@/components/compliance/NicotineWarning.astro";
|
|
19
|
-
import Prop65Warning from "@/components/compliance/Prop65Warning.astro";
|
|
20
|
-
import ReviewSummary from "@/components/commerce/ReviewSummary.astro";
|
|
21
|
-
import ReviewList from "@/components/commerce/ReviewList.astro";
|
|
22
|
-
import { isOnSale, isNew, isAvailable, fromPrice } from "@/lib/tot/query";
|
|
14
|
+
import ImageGallery from "@/components/catalog/storefront/islands/ImageGallery.tsx";
|
|
15
|
+
import VariantSelector, { publicSelectorVariants } from "@/components/catalog/storefront/islands/VariantSelector.tsx";
|
|
16
|
+
import CheckoutComplianceGate from "@/components/compliance/storefront/islands/CheckoutComplianceGate.tsx";
|
|
17
|
+
import RecentlyViewed from "@/components/catalog/storefront/islands/RecentlyViewed.tsx";
|
|
18
|
+
import NicotineWarning from "@/components/compliance/storefront/compliance/NicotineWarning.astro";
|
|
19
|
+
import Prop65Warning from "@/components/compliance/storefront/compliance/Prop65Warning.astro";
|
|
20
|
+
import ReviewSummary from "@/components/catalog/storefront/commerce/ReviewSummary.astro";
|
|
21
|
+
import ReviewList from "@/components/catalog/storefront/commerce/ReviewList.astro";
|
|
22
|
+
import { isOnSale, isNew, isAvailable, fromPrice } from "@/lib/catalog/tot/query";
|
|
23
23
|
import {
|
|
24
24
|
buildMemberSignedCartPayload,
|
|
25
25
|
workerCartApiPath,
|
|
@@ -38,7 +38,7 @@ import type {
|
|
|
38
38
|
MembershipStackingPolicy,
|
|
39
39
|
PurchaseOptionPricingContext,
|
|
40
40
|
} from "@tot/public-runtime";
|
|
41
|
-
import { resolveCartSigning, shopperCheckoutUnavailableHtml } from "@/lib/checkoutCommerce";
|
|
41
|
+
import { resolveCartSigning, shopperCheckoutUnavailableHtml } from "@/lib/checkout/shared/checkoutCommerce";
|
|
42
42
|
import { isRegulatedTenant } from "@/lib/compliance/enforcement";
|
|
43
43
|
import { resolveMemberContext } from "@/lib/membership/eligibility";
|
|
44
44
|
import { truncate } from "@/lib/format";
|
|
@@ -49,9 +49,9 @@ import { productPageType, structuredDataProfile } from "@/lib/seo/structuredData
|
|
|
49
49
|
import { pageUrlForm } from "@/lib/seo/urlForm";
|
|
50
50
|
import { sourceSeoTitle } from "@/lib/seo/documentTitle";
|
|
51
51
|
import { shippingPolicyPath } from "@/lib/commerce/shippingPolicy";
|
|
52
|
-
import AppWidgetFrame from "@/components/apps/AppWidgetFrame.astro";
|
|
53
|
-
import { getRegistryService } from "@/lib/apps/registryAccess.js";
|
|
54
|
-
import { renderWidgetSlot } from "@/lib/apps/widgets/renderSlot.js";
|
|
52
|
+
import AppWidgetFrame from "@/components/integrations/storefront/apps/AppWidgetFrame.astro";
|
|
53
|
+
import { getRegistryService } from "@/lib/integrations/apps/registryAccess.js";
|
|
54
|
+
import { renderWidgetSlot } from "@/lib/integrations/apps/widgets/renderSlot.js";
|
|
55
55
|
|
|
56
56
|
const { handle } = Astro.params;
|
|
57
57
|
const { tenant, tot, canonicalBase, basePath, apiBasePath, commerce } = Astro.locals;
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
import Layout from "@/layouts/Layout.astro";
|
|
13
13
|
import Breadcrumbs from "@/components/Breadcrumbs.astro";
|
|
14
14
|
import { homeCrumbLabel, siteTrail } from "@/lib/breadcrumbs";
|
|
15
|
-
import ProductCard from "@/components/ProductCard.astro";
|
|
15
|
+
import ProductCard from "@/components/catalog/storefront/ProductCard.astro";
|
|
16
16
|
import EmptyState from "@/components/EmptyState.astro";
|
|
17
17
|
import Section from "@/components/Section.astro";
|
|
18
|
-
import { toTypeaheadDoc } from "@/lib/search";
|
|
18
|
+
import { toTypeaheadDoc } from "@/lib/catalog/search/index";
|
|
19
19
|
import { breadcrumbLd } from "@/lib/jsonld";
|
|
20
20
|
import { withBase } from "@/lib/basePath";
|
|
21
21
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* loc is prefix-correct without special-casing here.
|
|
10
10
|
*/
|
|
11
11
|
import type { APIContext } from "astro";
|
|
12
|
-
import { nonEmptyCollections } from "@/lib/tot/query.js";
|
|
12
|
+
import { nonEmptyCollections } from "@/lib/catalog/tot/query.js";
|
|
13
13
|
import { getBlogSettings, listBlogPosts } from "@/lib/blog/provider.js";
|
|
14
14
|
import { authorSlug, categorySlug } from "@/lib/blog/collection.js";
|
|
15
15
|
import { resolveBlogIndexCopy } from "@/lib/blog/pagination.js";
|
|
@@ -24,21 +24,21 @@ import { loadStyleGuideThemes, styleGuideCompositionSheets } from "@/lib/styleGu
|
|
|
24
24
|
import { styleGuideHref } from "@/lib/styleGuidePaths";
|
|
25
25
|
import { derivedTokenDeclarations } from "@/themes/derivedTokens";
|
|
26
26
|
import "@/styles/global.css";
|
|
27
|
-
import PriceDisplay from "@/components/commerce/PriceDisplay.astro";
|
|
28
|
-
import RatingStars from "@/components/commerce/RatingStars.astro";
|
|
29
|
-
import ReviewSummary from "@/components/commerce/ReviewSummary.astro";
|
|
30
|
-
import ReviewList from "@/components/commerce/ReviewList.astro";
|
|
27
|
+
import PriceDisplay from "@/components/catalog/storefront/commerce/PriceDisplay.astro";
|
|
28
|
+
import RatingStars from "@/components/catalog/storefront/commerce/RatingStars.astro";
|
|
29
|
+
import ReviewSummary from "@/components/catalog/storefront/commerce/ReviewSummary.astro";
|
|
30
|
+
import ReviewList from "@/components/catalog/storefront/commerce/ReviewList.astro";
|
|
31
31
|
import type { Review } from "@tot/public-runtime";
|
|
32
32
|
import Badge from "@/components/Badge.astro";
|
|
33
|
-
import ProductCard from "@/components/ProductCard.astro";
|
|
34
|
-
import ProductCarousel from "@/components/commerce/ProductCarousel.astro";
|
|
35
|
-
import ProductGrid from "@/components/commerce/ProductGrid.astro";
|
|
36
|
-
import BrandGrid from "@/components/commerce/BrandGrid.astro";
|
|
37
|
-
import type { Brand } from "@/components/commerce/BrandGrid.astro";
|
|
33
|
+
import ProductCard from "@/components/catalog/storefront/ProductCard.astro";
|
|
34
|
+
import ProductCarousel from "@/components/catalog/storefront/commerce/ProductCarousel.astro";
|
|
35
|
+
import ProductGrid from "@/components/catalog/storefront/commerce/ProductGrid.astro";
|
|
36
|
+
import BrandGrid from "@/components/catalog/storefront/commerce/BrandGrid.astro";
|
|
37
|
+
import type { Brand } from "@/components/catalog/storefront/commerce/BrandGrid.astro";
|
|
38
38
|
import ArticleCard from "@/components/commerce/ArticleCard.astro";
|
|
39
39
|
import type { Article } from "@/components/commerce/ArticleCard.astro";
|
|
40
|
-
import TagFilterCloud from "@/components/commerce/TagFilterCloud.astro";
|
|
41
|
-
import type { TagItem } from "@/components/commerce/TagFilterCloud.astro";
|
|
40
|
+
import TagFilterCloud from "@/components/catalog/storefront/commerce/TagFilterCloud.astro";
|
|
41
|
+
import type { TagItem } from "@/components/catalog/storefront/commerce/TagFilterCloud.astro";
|
|
42
42
|
import AnnouncementBar from "@/components/chrome/AnnouncementBar.astro";
|
|
43
43
|
import UtilityNav from "@/components/chrome/UtilityNav.astro";
|
|
44
44
|
import SiteHeader from "@/components/chrome/SiteHeader.astro";
|
|
@@ -46,15 +46,15 @@ import MegaMenu from "@/components/chrome/MegaMenu.astro";
|
|
|
46
46
|
import NavDropdown from "@/components/chrome/NavDropdown.astro";
|
|
47
47
|
import SiteFooter from "@/components/chrome/SiteFooter.astro";
|
|
48
48
|
import { CHROME_PLACEMENT } from "@/lib/chrome/trackingPlacements";
|
|
49
|
-
import NicotineWarning from "@/components/compliance/NicotineWarning.astro";
|
|
49
|
+
import NicotineWarning from "@/components/compliance/storefront/compliance/NicotineWarning.astro";
|
|
50
50
|
import { NICOTINE_WARNING_PRESETS } from "../../../../../../packages/cli/src/declared-config.mjs";
|
|
51
|
-
import PactActNotice from "@/components/compliance/PactActNotice.astro";
|
|
52
|
-
import AdultSignatureNotice from "@/components/compliance/AdultSignatureNotice.astro";
|
|
53
|
-
import Prop65Warning from "@/components/compliance/Prop65Warning.astro";
|
|
54
|
-
import PurchaseLimitNotice from "@/components/compliance/PurchaseLimitNotice.astro";
|
|
55
|
-
import StateEligibilityNotice from "@/components/compliance/StateEligibilityNotice.astro";
|
|
56
|
-
import ShippingRestrictionNotice from "@/components/compliance/ShippingRestrictionNotice.astro";
|
|
57
|
-
import ExciseTaxNotice from "@/components/compliance/ExciseTaxNotice.astro";
|
|
51
|
+
import PactActNotice from "@/components/compliance/storefront/compliance/PactActNotice.astro";
|
|
52
|
+
import AdultSignatureNotice from "@/components/compliance/storefront/compliance/AdultSignatureNotice.astro";
|
|
53
|
+
import Prop65Warning from "@/components/compliance/storefront/compliance/Prop65Warning.astro";
|
|
54
|
+
import PurchaseLimitNotice from "@/components/compliance/storefront/compliance/PurchaseLimitNotice.astro";
|
|
55
|
+
import StateEligibilityNotice from "@/components/compliance/storefront/compliance/StateEligibilityNotice.astro";
|
|
56
|
+
import ShippingRestrictionNotice from "@/components/compliance/storefront/compliance/ShippingRestrictionNotice.astro";
|
|
57
|
+
import ExciseTaxNotice from "@/components/compliance/storefront/compliance/ExciseTaxNotice.astro";
|
|
58
58
|
import TierCards from "@/components/membership/storefront/membership/TierCards.astro";
|
|
59
59
|
import TierComparisonTable from "@/components/membership/storefront/membership/TierComparisonTable.astro";
|
|
60
60
|
import ProseSections from "@/components/content/ProseSections.astro";
|
|
@@ -64,27 +64,27 @@ import NeedsReviewCallout from "@/components/content/NeedsReviewCallout.astro";
|
|
|
64
64
|
import TrustStrip from "@/components/content/TrustStrip.astro";
|
|
65
65
|
import type { ProseSection } from "@/lib/content/prose";
|
|
66
66
|
import type { TrustStripItem } from "@/lib/content/trustStrip";
|
|
67
|
-
import HowItWorksSteps from "@/components/subscription/HowItWorksSteps.astro";
|
|
68
|
-
import SavingsExplainer from "@/components/subscription/SavingsExplainer.astro";
|
|
69
|
-
import ManageSubscriptionEntry from "@/components/subscription/ManageSubscriptionEntry.astro";
|
|
70
|
-
import AgeGate from "@/components/islands/AgeGate.tsx";
|
|
71
|
-
import VariantSelector, { publicSelectorVariants } from "@/components/islands/VariantSelector.tsx";
|
|
72
|
-
import QuickView from "@/components/islands/QuickView.tsx";
|
|
73
|
-
import SearchTypeahead from "@/components/islands/SearchTypeahead.tsx";
|
|
67
|
+
import HowItWorksSteps from "@/components/subscriptions/storefront/subscription/HowItWorksSteps.astro";
|
|
68
|
+
import SavingsExplainer from "@/components/subscriptions/storefront/subscription/SavingsExplainer.astro";
|
|
69
|
+
import ManageSubscriptionEntry from "@/components/subscriptions/storefront/subscription/ManageSubscriptionEntry.astro";
|
|
70
|
+
import AgeGate from "@/components/compliance/storefront/islands/AgeGate.tsx";
|
|
71
|
+
import VariantSelector, { publicSelectorVariants } from "@/components/catalog/storefront/islands/VariantSelector.tsx";
|
|
72
|
+
import QuickView from "@/components/catalog/storefront/islands/QuickView.tsx";
|
|
73
|
+
import SearchTypeahead from "@/components/catalog/storefront/islands/SearchTypeahead.tsx";
|
|
74
74
|
import MobileNav from "@/components/islands/MobileNav.tsx";
|
|
75
|
-
import RecentlyViewed from "@/components/islands/RecentlyViewed.tsx";
|
|
76
|
-
import type { RVItem } from "@/components/islands/RecentlyViewed.tsx";
|
|
75
|
+
import RecentlyViewed from "@/components/catalog/storefront/islands/RecentlyViewed.tsx";
|
|
76
|
+
import type { RVItem } from "@/components/catalog/storefront/islands/RecentlyViewed.tsx";
|
|
77
77
|
import SavedList from "@/components/customers/storefront/islands/SavedList.tsx";
|
|
78
|
-
import FacetSidebar from "@/components/plp/FacetSidebar.astro";
|
|
79
|
-
import ActiveFilters from "@/components/plp/ActiveFilters.astro";
|
|
80
|
-
import SortSelect from "@/components/plp/SortSelect.astro";
|
|
81
|
-
import Pagination from "@/components/plp/Pagination.astro";
|
|
78
|
+
import FacetSidebar from "@/components/catalog/storefront/plp/FacetSidebar.astro";
|
|
79
|
+
import ActiveFilters from "@/components/catalog/storefront/plp/ActiveFilters.astro";
|
|
80
|
+
import SortSelect from "@/components/catalog/storefront/plp/SortSelect.astro";
|
|
81
|
+
import Pagination from "@/components/catalog/storefront/plp/Pagination.astro";
|
|
82
82
|
import Hero from "@/components/home/Hero.astro";
|
|
83
83
|
import MarketingBlocks from "@/components/marketing/MarketingBlocks.astro";
|
|
84
|
-
import { sampleProducts, sampleRatings } from "@/lib/fixtures/sampleProducts";
|
|
84
|
+
import { sampleProducts, sampleRatings } from "@/lib/catalog/fixtures/sampleProducts";
|
|
85
85
|
import type { ChromeNavItem } from "@/lib/chrome/model";
|
|
86
86
|
import type { Tier, ComparisonRow } from "@/lib/membership/model";
|
|
87
|
-
import type { SubscriptionStep, SubscriptionManageEntry } from "@/lib/subscription/model";
|
|
87
|
+
import type { SubscriptionStep, SubscriptionManageEntry } from "@/lib/subscriptions/subscription/model";
|
|
88
88
|
import type { Facet, ListProductsQuery } from "@tot/public-runtime";
|
|
89
89
|
import type { HeroBlock, MarketingBlock } from "@/lib/storyblok/content-model";
|
|
90
90
|
|
|
@@ -265,7 +265,7 @@ Product cards, merchandising rows, price/rating atoms, blog cards, and checkout
|
|
|
265
265
|
class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.brand-grid`/`.brand-tile`,
|
|
266
266
|
`.tag-cloud`/`.tag-chip`) — keep the two visually equal.
|
|
267
267
|
|
|
268
|
-
### PriceDisplay (`components/commerce/PriceDisplay.astro`)
|
|
268
|
+
### PriceDisplay (`components/catalog/storefront/commerce/PriceDisplay.astro`)
|
|
269
269
|
|
|
270
270
|
- **Purpose:** Price atom — struck compare-at when on sale, "From $X" prefix for variant ranges,
|
|
271
271
|
optional sale-percent badge. Accepts a `product` (derives everything) or raw primitives.
|
|
@@ -282,7 +282,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
282
282
|
<PriceDisplay amount={42} from currency="USD" />
|
|
283
283
|
```
|
|
284
284
|
|
|
285
|
-
### RatingStars (`components/commerce/RatingStars.astro`)
|
|
285
|
+
### RatingStars (`components/catalog/storefront/commerce/RatingStars.astro`)
|
|
286
286
|
|
|
287
287
|
- **Purpose:** 0–5 star rating with fractional fill (single clipped overlay) + accessible label;
|
|
288
288
|
optional numeric review count. Presentation only.
|
|
@@ -297,7 +297,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
297
297
|
<RatingStars rating={4.5} count={128} />
|
|
298
298
|
```
|
|
299
299
|
|
|
300
|
-
### ProductCarousel (`components/commerce/ProductCarousel.astro`)
|
|
300
|
+
### ProductCarousel (`components/catalog/storefront/commerce/ProductCarousel.astro`)
|
|
301
301
|
|
|
302
302
|
- **Purpose:** Horizontal-scroll row of `<ProductCard>`s bound to a `SectionSource`, with optional
|
|
303
303
|
CSS-only tabs (each tab its own source; radio + adjacent-sibling reveal, zero JS). Presets
|
|
@@ -319,7 +319,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
319
319
|
<ProductCarousel title="Featured" tabs={[{ label: "New", products: newest }, { label: "On Sale", products: onSale }]} />
|
|
320
320
|
```
|
|
321
321
|
|
|
322
|
-
### ProductGrid (`components/commerce/ProductGrid.astro`)
|
|
322
|
+
### ProductGrid (`components/catalog/storefront/commerce/ProductGrid.astro`)
|
|
323
323
|
|
|
324
324
|
- **Purpose:** Non-scrolling paginated-look grid of `<ProductCard>`s bound to a `SectionSource`.
|
|
325
325
|
Thin sibling of `ProductCarousel`; `columns` tunes density; hides itself when empty.
|
|
@@ -337,7 +337,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
337
337
|
<ProductGrid title="All Products" products={products} columns={3} />
|
|
338
338
|
```
|
|
339
339
|
|
|
340
|
-
### BrandGrid (`components/commerce/BrandGrid.astro`)
|
|
340
|
+
### BrandGrid (`components/catalog/storefront/commerce/BrandGrid.astro`)
|
|
341
341
|
|
|
342
342
|
- **Purpose:** "Shop by Brands" logo wall — grid of tiles linking to brand collections; each tile is
|
|
343
343
|
a rehosted logo image OR a text-wordmark fallback. Optional "View all brands" CTA.
|
|
@@ -373,7 +373,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
373
373
|
<ArticleCard article={article} />
|
|
374
374
|
```
|
|
375
375
|
|
|
376
|
-
### TagFilterCloud (`components/commerce/TagFilterCloud.astro`)
|
|
376
|
+
### TagFilterCloud (`components/catalog/storefront/commerce/TagFilterCloud.astro`)
|
|
377
377
|
|
|
378
378
|
- **Purpose:** Cloud of tag/category chips for a blog/article index, each a plain link to its
|
|
379
379
|
filtered view (URL-addressable, zero-JS). Active tag filled + `aria-current`; optional leading
|
|
@@ -391,7 +391,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
391
391
|
<TagFilterCloud title="Browse by topic" tags={tags} allHref="/blog" allActive={false} />
|
|
392
392
|
```
|
|
393
393
|
|
|
394
|
-
### CheckoutLoader (`components/commerce/CheckoutLoader.astro`)
|
|
394
|
+
### CheckoutLoader (`components/checkout/storefront/commerce/CheckoutLoader.astro`)
|
|
395
395
|
|
|
396
396
|
- **Purpose:** Injects the managed checkout loader near end of `<body>` to enable the cart drawer +
|
|
397
397
|
hosted checkout. Rendered only for commerce tenants; marketing tenants ship nothing.
|
|
@@ -404,7 +404,7 @@ class-only block in `public/shared/commerce-chrome.css` (`.article-card`, `.bran
|
|
|
404
404
|
<CheckoutLoader />
|
|
405
405
|
```
|
|
406
406
|
|
|
407
|
-
### CartDrawerStyles (`components/commerce/CartDrawerStyles.astro`)
|
|
407
|
+
### CartDrawerStyles (`components/checkout/storefront/commerce/CartDrawerStyles.astro`)
|
|
408
408
|
|
|
409
409
|
- **Purpose:** Emits a nonce'd `<style>` mapping the in-page cart drawer (`#fc` light DOM)
|
|
410
410
|
selectors to the tenant's theme tokens so the cart is brand-matched. Baseline layer plus optional
|
|
@@ -432,7 +432,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
432
432
|
`pactAct`, `adultSignature` are `boolean`; `shippingRestriction` is `string`; `minAge` is `number`;
|
|
433
433
|
`prop65`/`purchaseLimit`/`stateEligibility`/`exciseTax` are the config objects below.
|
|
434
434
|
|
|
435
|
-
### ComplianceNotice (`components/compliance/ComplianceNotice.astro`)
|
|
435
|
+
### ComplianceNotice (`components/compliance/storefront/compliance/ComplianceNotice.astro`)
|
|
436
436
|
|
|
437
437
|
- **Purpose:** Shared presentational shell for the compliance widgets. Owns only the visual
|
|
438
438
|
treatment; the fixed legal text is supplied by each sibling via `<slot />`. Adds no copy of its own.
|
|
@@ -448,7 +448,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
448
448
|
`.topbar-warning` (top FDA band), `.footer-warning` (footer band).
|
|
449
449
|
- **Usage:** consumed by the siblings below (not used directly).
|
|
450
450
|
|
|
451
|
-
### NicotineWarning (`components/compliance/NicotineWarning.astro`)
|
|
451
|
+
### NicotineWarning (`components/compliance/storefront/compliance/NicotineWarning.astro`)
|
|
452
452
|
|
|
453
453
|
- **Purpose:** FDA-mandated nicotine warning (21 CFR 1143.3). Wording fixed by law, verbatim.
|
|
454
454
|
Self-contained (does not use `ComplianceNotice`).
|
|
@@ -464,7 +464,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
464
464
|
<NicotineWarning variant="block" />
|
|
465
465
|
```
|
|
466
466
|
|
|
467
|
-
### PactActNotice (`components/compliance/PactActNotice.astro`)
|
|
467
|
+
### PactActNotice (`components/compliance/storefront/compliance/PactActNotice.astro`)
|
|
468
468
|
|
|
469
469
|
- **Purpose:** PACT Act compliance notice (ENDS/vapor). Federal-requirement wording fixed here; only
|
|
470
470
|
on/off + age come from config.
|
|
@@ -481,7 +481,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
481
481
|
<PactActNotice enabled minAge={21} variant="footer" />
|
|
482
482
|
```
|
|
483
483
|
|
|
484
|
-
### AdultSignatureNotice (`components/compliance/AdultSignatureNotice.astro`)
|
|
484
|
+
### AdultSignatureNotice (`components/compliance/storefront/compliance/AdultSignatureNotice.astro`)
|
|
485
485
|
|
|
486
486
|
- **Purpose:** Adult-signature-on-delivery notice. Fixed wording; age reflects `minAge`.
|
|
487
487
|
- **Props:** `enabled?: boolean` (default `false`; from `tenant.compliance.adultSignature`); `minAge?:
|
|
@@ -496,7 +496,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
496
496
|
<AdultSignatureNotice enabled minAge={21} variant="inline" />
|
|
497
497
|
```
|
|
498
498
|
|
|
499
|
-
### Prop65Warning (`components/compliance/Prop65Warning.astro`)
|
|
499
|
+
### Prop65Warning (`components/compliance/storefront/compliance/Prop65Warning.astro`)
|
|
500
500
|
|
|
501
501
|
- **Purpose:** California Prop 65 safe-harbor warning. Owns the mandated skeleton, the `⚠` symbol,
|
|
502
502
|
and the official warnings URL. Only harm endpoint(s) + chemical name(s) come from config. Short
|
|
@@ -516,7 +516,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
516
516
|
<Prop65Warning config={{ harm: "reproductive", chemicals: ["nicotine"] }} variant="block" />
|
|
517
517
|
```
|
|
518
518
|
|
|
519
|
-
### PurchaseLimitNotice (`components/compliance/PurchaseLimitNotice.astro`)
|
|
519
|
+
### PurchaseLimitNotice (`components/compliance/storefront/compliance/PurchaseLimitNotice.astro`)
|
|
520
520
|
|
|
521
521
|
- **Purpose:** Purchase-quantity-limit **display** (state/PACT order caps). Display surface only —
|
|
522
522
|
enforcement stays product/commerce-owned.
|
|
@@ -532,7 +532,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
532
532
|
<PurchaseLimitNotice config={{ text: "2 units per order", reason: "per state law" }} variant="inline" />
|
|
533
533
|
```
|
|
534
534
|
|
|
535
|
-
### StateEligibilityNotice (`components/compliance/StateEligibilityNotice.astro`)
|
|
535
|
+
### StateEligibilityNotice (`components/compliance/storefront/compliance/StateEligibilityNotice.astro`)
|
|
536
536
|
|
|
537
537
|
- **Purpose:** State/jurisdiction sale-eligibility **display**. Shows tenant-configured messaging;
|
|
538
538
|
does **not** decide eligibility for a cart/address. Precedence: explicit `note` wins, else composes
|
|
@@ -550,7 +550,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
550
550
|
<StateEligibilityNotice config={{ restrictedStates: ["UT", "AR", "VT"] }} variant="block" />
|
|
551
551
|
```
|
|
552
552
|
|
|
553
|
-
### ShippingRestrictionNotice (`components/compliance/ShippingRestrictionNotice.astro`)
|
|
553
|
+
### ShippingRestrictionNotice (`components/compliance/storefront/compliance/ShippingRestrictionNotice.astro`)
|
|
554
554
|
|
|
555
555
|
- **Purpose:** Shipping-restriction **display** (PACT no-ship states, adult signature, carrier
|
|
556
556
|
limits). Renders the tenant's configured text; the ship/no-ship decision stays product-owned. This
|
|
@@ -567,7 +567,7 @@ types live in `packages/public-runtime/src/tenant.ts` (`ComplianceConfig`): `nic
|
|
|
567
567
|
<ShippingRestrictionNotice text="Adult signature (21+) required on delivery. Not shipped via USPS." variant="footer" />
|
|
568
568
|
```
|
|
569
569
|
|
|
570
|
-
### ExciseTaxNotice (`components/compliance/ExciseTaxNotice.astro`)
|
|
570
|
+
### ExciseTaxNotice (`components/compliance/storefront/compliance/ExciseTaxNotice.astro`)
|
|
571
571
|
|
|
572
572
|
- **Purpose:** Excise-tax **display** cue. Surfaces that excise taxes apply (+ optional
|
|
573
573
|
per-jurisdiction breakdown); **never computes tax** — calculation is product/commerce-owned.
|
|
@@ -661,9 +661,9 @@ Model types (`lib/membership/model.ts`):
|
|
|
661
661
|
Presentational + **education-only**: explain recurring/Autopilot ordering and hand off to the
|
|
662
662
|
tenant's product-owned subscribe/manage flow; **no scheduling/billing/cancellation mechanics**. The
|
|
663
663
|
savings figure is illustrative by default (same discipline as §5). Model in
|
|
664
|
-
`lib/subscription/model.ts`. All emit `data-widget="…"`.
|
|
664
|
+
`lib/subscriptions/subscription/model.ts`. All emit `data-widget="…"`.
|
|
665
665
|
|
|
666
|
-
Model types (`lib/subscription/model.ts`):
|
|
666
|
+
Model types (`lib/subscriptions/subscription/model.ts`):
|
|
667
667
|
|
|
668
668
|
- `SubscriptionStep` — `{ title: string; description: string }`.
|
|
669
669
|
- `SubscriptionFigure` — `{ value: string; caption?: string; real?: boolean }` (`value` is display
|
|
@@ -671,7 +671,7 @@ Model types (`lib/subscription/model.ts`):
|
|
|
671
671
|
- `SubscriptionManageEntry` — `{ label: string; description?: string; href: string }` (handoff URL).
|
|
672
672
|
- `isIllustrative(figure: Pick<SubscriptionFigure, "real">): boolean` → `figure.real !== true`.
|
|
673
673
|
|
|
674
|
-
### HowItWorksSteps (`components/subscription/HowItWorksSteps.astro`)
|
|
674
|
+
### HowItWorksSteps (`components/subscriptions/storefront/subscription/HowItWorksSteps.astro`)
|
|
675
675
|
|
|
676
676
|
- **Purpose:** Autopilot/subscription "how it works" explainer (numbered steps). Ships no
|
|
677
677
|
scheduling/billing mechanics.
|
|
@@ -687,7 +687,7 @@ Model types (`lib/subscription/model.ts`):
|
|
|
687
687
|
<HowItWorksSteps eyebrow="Autopilot" heading="How Autopilot works" subhead="Set it up once — we handle the rest." steps={steps} />
|
|
688
688
|
```
|
|
689
689
|
|
|
690
|
-
### SavingsExplainer (`components/subscription/SavingsExplainer.astro`)
|
|
690
|
+
### SavingsExplainer (`components/subscriptions/storefront/subscription/SavingsExplainer.astro`)
|
|
691
691
|
|
|
692
692
|
- **Purpose:** Autopilot/subscription savings headline (e.g. "Save 15% — vs. one-time purchase") +
|
|
693
693
|
supporting bullets + plain handoff CTA. Figure illustrative by default → "e.g." affordance +
|
|
@@ -707,7 +707,7 @@ Model types (`lib/subscription/model.ts`):
|
|
|
707
707
|
<SavingsExplainer eyebrow="Autopilot savings" heading="Save on every order" figure={{ value: "Save 15%", caption: "vs. one-time purchase" }} bullets={["Free shipping on every Autopilot order", "Pause or cancel anytime"]} cta={{ label: "How Autopilot works", href: "/autopilot" }} />
|
|
708
708
|
```
|
|
709
709
|
|
|
710
|
-
### ManageSubscriptionEntry (`components/subscription/ManageSubscriptionEntry.astro`)
|
|
710
|
+
### ManageSubscriptionEntry (`components/subscriptions/storefront/subscription/ManageSubscriptionEntry.astro`)
|
|
711
711
|
|
|
712
712
|
- **Purpose:** Set of manage-subscription entry points (e.g. "Update delivery date", "Pause or
|
|
713
713
|
cancel"), each a plain link into the tenant's product-owned manage flow. Renders no controls of its
|
|
@@ -946,7 +946,7 @@ form carrying the query, so filtering needs no JS and is back-button safe. All t
|
|
|
946
946
|
ListProductsQuery` + `basePath: string` (from `@tot/public-runtime`) and share `@/lib/url`
|
|
947
947
|
(`toggleFacet`, `buildQueryString`). None have a raw-chrome twin (PLP-body, not site chrome).
|
|
948
948
|
|
|
949
|
-
### FacetSidebar (`components/plp/FacetSidebar.astro`)
|
|
949
|
+
### FacetSidebar (`components/catalog/storefront/plp/FacetSidebar.astro`)
|
|
950
950
|
|
|
951
951
|
- **Purpose:** Faceted filtering UI — each facet value is a real link toggling a querystring param;
|
|
952
952
|
price range is a GET form preserving other params via hidden inputs. Facets ordered: options, then
|
|
@@ -963,7 +963,7 @@ ListProductsQuery` + `basePath: string` (from `@tot/public-runtime`) and share `
|
|
|
963
963
|
<FacetSidebar facets={facets} query={query} basePath="/collections/bestsellers" />
|
|
964
964
|
```
|
|
965
965
|
|
|
966
|
-
### ActiveFilters (`components/plp/ActiveFilters.astro`)
|
|
966
|
+
### ActiveFilters (`components/catalog/storefront/plp/ActiveFilters.astro`)
|
|
967
967
|
|
|
968
968
|
- **Purpose:** Removable filter chips above the grid; each chip is a link that drops exactly one
|
|
969
969
|
filter, plus a "Clear all" link.
|
|
@@ -978,7 +978,7 @@ ListProductsQuery` + `basePath: string` (from `@tot/public-runtime`) and share `
|
|
|
978
978
|
<ActiveFilters query={query} basePath="/collections/bestsellers" />
|
|
979
979
|
```
|
|
980
980
|
|
|
981
|
-
### SortSelect (`components/plp/SortSelect.astro`)
|
|
981
|
+
### SortSelect (`components/catalog/storefront/plp/SortSelect.astro`)
|
|
982
982
|
|
|
983
983
|
- **Purpose:** Sort control — a plain GET `<form>` `<select>` that auto-submits on change (nonce'd
|
|
984
984
|
`is:inline` script; `<noscript>` Apply fallback). Other query params ride along as hidden inputs.
|
|
@@ -993,7 +993,7 @@ ListProductsQuery` + `basePath: string` (from `@tot/public-runtime`) and share `
|
|
|
993
993
|
<SortSelect query={query} basePath="/collections/bestsellers" />
|
|
994
994
|
```
|
|
995
995
|
|
|
996
|
-
### Pagination (`components/plp/Pagination.astro`)
|
|
996
|
+
### Pagination (`components/catalog/storefront/plp/Pagination.astro`)
|
|
997
997
|
|
|
998
998
|
- **Purpose:** SEO-friendly numbered pagination (compact 5-page window with first/last + ellipses) +
|
|
999
999
|
a "Load more" next-page link. All plain anchors carrying the full query — crawlable, back-button
|
|
@@ -1019,7 +1019,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1019
1019
|
`/search` endpoint). Cross-island wiring uses `window` CustomEvents; `localStorage` keys in play:
|
|
1020
1020
|
`"tot:age-affirmed"`, `"tot:recently-viewed"`, `"tot:wishlist"`.
|
|
1021
1021
|
|
|
1022
|
-
### AgeGate (`components/islands/AgeGate.tsx`)
|
|
1022
|
+
### AgeGate (`components/compliance/storefront/islands/AgeGate.tsx`)
|
|
1023
1023
|
|
|
1024
1024
|
- **Purpose:** Soft `minAge`+ affirmation overlay, shown once per device for regulated tenants.
|
|
1025
1025
|
Front-door affirmation only — real ToT identity/age verification is a later phase (the "Yes" path is
|
|
@@ -1039,7 +1039,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1039
1039
|
<AgeGate client:load minAge={21} brand={tenant.brandName} />
|
|
1040
1040
|
```
|
|
1041
1041
|
|
|
1042
|
-
### IsolatedAgeGate (`components/islands/IsolatedAgeGate.tsx`)
|
|
1042
|
+
### IsolatedAgeGate (`components/compliance/storefront/islands/IsolatedAgeGate.tsx`)
|
|
1043
1043
|
|
|
1044
1044
|
- **Purpose:** Tamper-resistant wrapper that mounts `<AgeGate>` inside a **closed shadow root** so no
|
|
1045
1045
|
tenant CSS/JS can select, restyle, or hide it. A light-DOM host `<div data-tot-compliance>` is
|
|
@@ -1059,7 +1059,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1059
1059
|
<IsolatedAgeGate client:load minAge={21} brand={tenant.brandName} />
|
|
1060
1060
|
```
|
|
1061
1061
|
|
|
1062
|
-
### VariantSelector (`components/islands/VariantSelector.tsx`)
|
|
1062
|
+
### VariantSelector (`components/catalog/storefront/islands/VariantSelector.tsx`)
|
|
1063
1063
|
|
|
1064
1064
|
- **Purpose:** PDP variant picker (the centerpiece interaction) — one radiogroup per product option;
|
|
1065
1065
|
resolves the matching variant, disables unbuyable combinations, updates a polite live region
|
|
@@ -1082,7 +1082,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1082
1082
|
<VariantSelector client:load variants={product.variants} options={product.options} currency={product.price_range.currency} locale="en-US" />
|
|
1083
1083
|
```
|
|
1084
1084
|
|
|
1085
|
-
### ImageGallery (`components/islands/ImageGallery.tsx`)
|
|
1085
|
+
### ImageGallery (`components/catalog/storefront/islands/ImageGallery.tsx`)
|
|
1086
1086
|
|
|
1087
1087
|
- **Purpose:** PDP image gallery — main image + thumbnail strip; thumbnails swap the main image, main
|
|
1088
1088
|
image has click-to-toggle zoom (reduced-motion safe). First image is the LCP candidate until first
|
|
@@ -1102,7 +1102,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1102
1102
|
<ImageGallery client:load images={product.images} title={product.title} productHandle={product.handle} />
|
|
1103
1103
|
```
|
|
1104
1104
|
|
|
1105
|
-
### QuickView (`components/islands/QuickView.tsx`)
|
|
1105
|
+
### QuickView (`components/catalog/storefront/islands/QuickView.tsx`)
|
|
1106
1106
|
|
|
1107
1107
|
- **Purpose:** One global native `<dialog>` any product card opens via a `[data-quickview]` button
|
|
1108
1108
|
(event-delegated, so cards stay zero-JS). Shows a peek — image, price, colors, short description —
|
|
@@ -1122,7 +1122,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1122
1122
|
<QuickView client:idle locale="en-US" />
|
|
1123
1123
|
```
|
|
1124
1124
|
|
|
1125
|
-
### SearchTypeahead (`components/islands/SearchTypeahead.tsx`)
|
|
1125
|
+
### SearchTypeahead (`components/catalog/storefront/islands/SearchTypeahead.tsx`)
|
|
1126
1126
|
|
|
1127
1127
|
- **Purpose:** Compact header search with debounced typeahead dropdown. Fetches `GET
|
|
1128
1128
|
{action}?q=<q>&format=json` and renders up to 6 results as an ARIA combobox/listbox; submitting
|
|
@@ -1162,7 +1162,7 @@ Client-hydrated Preact `.tsx`. Every island is tenant-agnostic and reads only fi
|
|
|
1162
1162
|
<MobileNav client:idle nav={nav} announcement="Free US shipping on orders over $100" />
|
|
1163
1163
|
```
|
|
1164
1164
|
|
|
1165
|
-
### RecentlyViewed (`components/islands/RecentlyViewed.tsx`)
|
|
1165
|
+
### RecentlyViewed (`components/catalog/storefront/islands/RecentlyViewed.tsx`)
|
|
1166
1166
|
|
|
1167
1167
|
- **Purpose:** "Recently viewed" discovery rail. On a PDP it records the current product to
|
|
1168
1168
|
localStorage and renders the rest as a quiet strip. Renders nothing until it has something to show
|
|
@@ -1238,7 +1238,7 @@ Shared primitives composed by the higher-level widgets, plus the homepage hero.
|
|
|
1238
1238
|
<Breadcrumbs crumbs={[{ label: "Home", href: "/" }, { label: "Bestsellers", href: "/collections/bestsellers" }]} />
|
|
1239
1239
|
```
|
|
1240
1240
|
|
|
1241
|
-
### ProductCard (`components/ProductCard.astro`)
|
|
1241
|
+
### ProductCard (`components/catalog/storefront/ProductCard.astro`)
|
|
1242
1242
|
|
|
1243
1243
|
- **Purpose:** PLP/grid card using the stretched-link pattern (title is the link; an `::after` overlay
|
|
1244
1244
|
makes the whole card clickable so wishlist/quick-view controls sit above it). Image hover-zoom +
|
|
@@ -1259,7 +1259,7 @@ Shared primitives composed by the higher-level widgets, plus the homepage hero.
|
|
|
1259
1259
|
<ProductCard product={p} rating={4.5} reviewCount={128} />
|
|
1260
1260
|
```
|
|
1261
1261
|
|
|
1262
|
-
### CollectionCard (`components/CollectionCard.astro`)
|
|
1262
|
+
### CollectionCard (`components/catalog/storefront/CollectionCard.astro`)
|
|
1263
1263
|
|
|
1264
1264
|
- **Purpose:** Editorial collection tile with a dark gradient scrim so the overlaid title (+ optional
|
|
1265
1265
|
piece count) reads on any image. `data-reveal` scroll-in.
|
|
@@ -1317,7 +1317,7 @@ Shared primitives composed by the higher-level widgets, plus the homepage hero.
|
|
|
1317
1317
|
<Img src={image?.url} rehosted={image?.rehosted} seed={image?.id ?? handle} alt={title} width={800} height={1000} sizes="(min-width:1024px) 25vw, 100vw" priority />
|
|
1318
1318
|
```
|
|
1319
1319
|
|
|
1320
|
-
### WidgetFrame (`components/WidgetFrame.astro`)
|
|
1320
|
+
### WidgetFrame (`components/integrations/storefront/WidgetFrame.astro`)
|
|
1321
1321
|
|
|
1322
1322
|
- **Purpose:** Renders a tenant-registered widget (`isolation: "sandbox"`) in a sandboxed iframe —
|
|
1323
1323
|
`allow-scripts` without `allow-same-origin` puts it in an opaque origin (can't read page
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tokenoftrust/storefront-runner",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.87",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"description": "World-shareable storefront runner: multi-tenant renderer on Astro/Cloudflare. No control plane.",
|
|
6
6
|
"packageManager": "pnpm@11.9.0",
|
|
@@ -206,7 +206,7 @@ export interface ChromeAnnouncement {
|
|
|
206
206
|
* 21+ age-gate interstitial config (regulated tenants). The raw-chrome renderer
|
|
207
207
|
* (rawChrome.ts) embeds this as JSON; the shared behavior JS mounts the gate inside
|
|
208
208
|
* a closed shadow root — the same tamper-resistance pattern
|
|
209
|
-
* components/islands/IsolatedAgeGate.tsx uses for component pages — so tenant
|
|
209
|
+
* components/compliance/storefront/islands/IsolatedAgeGate.tsx uses for component pages — so tenant
|
|
210
210
|
* CSS/JS can't reach the dialog.
|
|
211
211
|
*/
|
|
212
212
|
export const CHROME_AGE_GATE_VARIANTS = ["default", "compact-modal"] as const;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tenant browser-script vocabulary the renderer needs: the slot / strategy /
|
|
3
3
|
* isolation constants, the CSP hash helper, and the sandboxed widget iframe
|
|
4
|
-
* attributes the renderer draws (`components/WidgetFrame.astro`).
|
|
4
|
+
* attributes the renderer draws (`components/integrations/storefront/WidgetFrame.astro`).
|
|
5
5
|
*
|
|
6
6
|
* Dependency-free + Workers-portable (Web Crypto, btoa).
|
|
7
7
|
*/
|
|
File without changes
|
/package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/BrandGrid.astro
RENAMED
|
File without changes
|
/package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/RatingStars.astro
RENAMED
|
File without changes
|
/package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/ReviewList.astro
RENAMED
|
File without changes
|
/package/apps/storefront/src/components/{commerce → catalog/storefront/commerce}/ReviewSummary.astro
RENAMED
|
File without changes
|
|
File without changes
|
/package/apps/storefront/src/components/{islands → catalog/storefront/islands}/ImageGallery.tsx
RENAMED
|
File without changes
|
/package/apps/storefront/src/components/{islands → catalog/storefront/islands}/QuickView.tsx
RENAMED
|
File without changes
|
/package/apps/storefront/src/components/{islands → catalog/storefront/islands}/RecentlyViewed.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/apps/storefront/src/components/{islands → compliance/storefront/islands}/AgeGate.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|