@tokenoftrust/storefront-runner 0.1.0
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/LICENSE +58 -0
- package/README.md +40 -0
- package/apps/storefront/.dev.vars.example +41 -0
- package/apps/storefront/.env.example +24 -0
- package/apps/storefront/astro.config.mjs +245 -0
- package/apps/storefront/env.d.ts +155 -0
- package/apps/storefront/lib/ensure-preview-reconcile-secret.sh +31 -0
- package/apps/storefront/lib/resolve-cf-token.sh +48 -0
- package/apps/storefront/lib/resolve-tot-credentials.sh +69 -0
- package/apps/storefront/migrations/0000_baseline.sql +54 -0
- package/apps/storefront/migrations/0001_products_fts.sql +9 -0
- package/apps/storefront/migrations/README.md +54 -0
- package/apps/storefront/migrations/meta/0000_snapshot.json +347 -0
- package/apps/storefront/migrations/meta/0001_snapshot.json +347 -0
- package/apps/storefront/migrations/meta/_journal.json +20 -0
- package/apps/storefront/package.json +41 -0
- package/apps/storefront/public/brand/northwind-logo-dark.svg +4 -0
- package/apps/storefront/public/brand/northwind-logo-light.svg +4 -0
- package/apps/storefront/public/brand/northwind-og.svg +13 -0
- package/apps/storefront/public/favicon.svg +5 -0
- package/apps/storefront/public/js/dashboard-team.js +147 -0
- package/apps/storefront/public/js/dashboard-vendor-search.js +115 -0
- package/apps/storefront/src/components/Badge.astro +34 -0
- package/apps/storefront/src/components/Breadcrumbs.astro +45 -0
- package/apps/storefront/src/components/CollectionCard.astro +56 -0
- package/apps/storefront/src/components/EmptyState.astro +35 -0
- package/apps/storefront/src/components/Img.astro +68 -0
- package/apps/storefront/src/components/ProductCard.astro +228 -0
- package/apps/storefront/src/components/Section.astro +39 -0
- package/apps/storefront/src/components/Seo.astro +70 -0
- package/apps/storefront/src/components/WidgetFrame.astro +34 -0
- package/apps/storefront/src/components/auth/AuthBadge.astro +44 -0
- package/apps/storefront/src/components/chrome/AnnouncementBar.astro +108 -0
- package/apps/storefront/src/components/chrome/MegaMenu.astro +26 -0
- package/apps/storefront/src/components/chrome/NavDropdown.astro +116 -0
- package/apps/storefront/src/components/chrome/SiteFooter.astro +181 -0
- package/apps/storefront/src/components/chrome/SiteHeader.astro +181 -0
- package/apps/storefront/src/components/chrome/UtilityNav.astro +79 -0
- package/apps/storefront/src/components/commerce/FoxyLoader.astro +23 -0
- package/apps/storefront/src/components/commerce/PriceDisplay.astro +91 -0
- package/apps/storefront/src/components/commerce/ProductCarousel.astro +197 -0
- package/apps/storefront/src/components/commerce/ProductGrid.astro +75 -0
- package/apps/storefront/src/components/commerce/RatingStars.astro +58 -0
- package/apps/storefront/src/components/compliance/NicotineWarning.astro +33 -0
- package/apps/storefront/src/components/home/Hero.astro +164 -0
- package/apps/storefront/src/components/islands/AgeGate.tsx +105 -0
- package/apps/storefront/src/components/islands/ImageGallery.tsx +237 -0
- package/apps/storefront/src/components/islands/IsolatedAgeGate.tsx +73 -0
- package/apps/storefront/src/components/islands/MobileNav.tsx +239 -0
- package/apps/storefront/src/components/islands/QuickView.tsx +138 -0
- package/apps/storefront/src/components/islands/RecentlyViewed.tsx +122 -0
- package/apps/storefront/src/components/islands/SavedList.tsx +99 -0
- package/apps/storefront/src/components/islands/SearchTypeahead.tsx +248 -0
- package/apps/storefront/src/components/islands/VariantSelector.tsx +378 -0
- package/apps/storefront/src/components/marketing/CardGrid.astro +72 -0
- package/apps/storefront/src/components/marketing/CodeSample.astro +20 -0
- package/apps/storefront/src/components/marketing/CtaBand.astro +24 -0
- package/apps/storefront/src/components/marketing/Faq.astro +37 -0
- package/apps/storefront/src/components/marketing/Integrations.astro +63 -0
- package/apps/storefront/src/components/marketing/MarketingBlocks.astro +53 -0
- package/apps/storefront/src/components/marketing/MarketingCtas.astro +48 -0
- package/apps/storefront/src/components/marketing/MarketingHero.astro +72 -0
- package/apps/storefront/src/components/marketing/ProofStrip.astro +37 -0
- package/apps/storefront/src/components/marketing/SplitCompare.astro +53 -0
- package/apps/storefront/src/components/marketing/Steps.astro +36 -0
- package/apps/storefront/src/components/marketing/Testimonials.astro +38 -0
- package/apps/storefront/src/components/marketing/TrustBar.astro +22 -0
- package/apps/storefront/src/components/nav/Footer.astro +148 -0
- package/apps/storefront/src/components/nav/Header.astro +190 -0
- package/apps/storefront/src/components/plp/ActiveFilters.astro +79 -0
- package/apps/storefront/src/components/plp/FacetSidebar.astro +146 -0
- package/apps/storefront/src/components/plp/Pagination.astro +99 -0
- package/apps/storefront/src/components/plp/SortSelect.astro +64 -0
- package/apps/storefront/src/config/devTenants.ts +16 -0
- package/apps/storefront/src/config/kvTenantResolver.ts +87 -0
- package/apps/storefront/src/config/resolver.ts +46 -0
- package/apps/storefront/src/config/tenants.ts +193 -0
- package/apps/storefront/src/layouts/Layout.astro +303 -0
- package/apps/storefront/src/lib/analytics/index.ts +47 -0
- package/apps/storefront/src/lib/auth/brokerAssertion.ts +136 -0
- package/apps/storefront/src/lib/auth/devAuth.ts +90 -0
- package/apps/storefront/src/lib/auth/gatePage.ts +81 -0
- package/apps/storefront/src/lib/auth/identityToken.ts +341 -0
- package/apps/storefront/src/lib/auth/loginGate.ts +107 -0
- package/apps/storefront/src/lib/auth/route.ts +146 -0
- package/apps/storefront/src/lib/auth/session.ts +203 -0
- package/apps/storefront/src/lib/auth/totAccessClient.ts +503 -0
- package/apps/storefront/src/lib/basePath.ts +41 -0
- package/apps/storefront/src/lib/cfImage.ts +55 -0
- package/apps/storefront/src/lib/chrome/model.ts +65 -0
- package/apps/storefront/src/lib/colors.ts +97 -0
- package/apps/storefront/src/lib/content-edit/client.ts +230 -0
- package/apps/storefront/src/lib/content-edit/index.ts +14 -0
- package/apps/storefront/src/lib/content-edit/route.ts +25 -0
- package/apps/storefront/src/lib/content-edit/types.ts +19 -0
- package/apps/storefront/src/lib/cspStaticHashes.ts +24 -0
- package/apps/storefront/src/lib/d1/catalog.ts +289 -0
- package/apps/storefront/src/lib/dashboard/staffAdmission.ts +43 -0
- package/apps/storefront/src/lib/dashboard/staffVendorAccess.ts +449 -0
- package/apps/storefront/src/lib/dashboard/tenantSelection.ts +136 -0
- package/apps/storefront/src/lib/dashboard/vendorQuery.ts +61 -0
- package/apps/storefront/src/lib/demoGate.ts +113 -0
- package/apps/storefront/src/lib/dev/ai-widget-client.js +127 -0
- package/apps/storefront/src/lib/dev/cliSignInCode.ts +132 -0
- package/apps/storefront/src/lib/diag/redact.ts +20 -0
- package/apps/storefront/src/lib/edgeCache.ts +128 -0
- package/apps/storefront/src/lib/email/magicLinkInviteEmail.ts +62 -0
- package/apps/storefront/src/lib/env.ts +60 -0
- package/apps/storefront/src/lib/fixtures/sampleProducts.ts +130 -0
- package/apps/storefront/src/lib/format.ts +29 -0
- package/apps/storefront/src/lib/foxyCommerce.ts +49 -0
- package/apps/storefront/src/lib/imageAttrs.ts +55 -0
- package/apps/storefront/src/lib/jsonld.ts +136 -0
- package/apps/storefront/src/lib/maintenance.ts +71 -0
- package/apps/storefront/src/lib/memoryKv.ts +32 -0
- package/apps/storefront/src/lib/messaging/messagesClient.ts +143 -0
- package/apps/storefront/src/lib/placeholder.ts +99 -0
- package/apps/storefront/src/lib/previewReload.ts +125 -0
- package/apps/storefront/src/lib/rawMarketingHtml.ts +133 -0
- package/apps/storefront/src/lib/search/index.ts +74 -0
- package/apps/storefront/src/lib/sections.ts +129 -0
- package/apps/storefront/src/lib/securityHeaders.ts +31 -0
- package/apps/storefront/src/lib/storyblok/content-model.ts +289 -0
- package/apps/storefront/src/lib/storyblok/provider.ts +524 -0
- package/apps/storefront/src/lib/tenantRouting.ts +91 -0
- package/apps/storefront/src/lib/tot/ToTClient.ts +177 -0
- package/apps/storefront/src/lib/tot/d1Client.ts +62 -0
- package/apps/storefront/src/lib/tot/query.ts +187 -0
- package/apps/storefront/src/lib/tot/totClientInterface.ts +30 -0
- package/apps/storefront/src/lib/url.ts +119 -0
- package/apps/storefront/src/lib/wishlist.ts +63 -0
- package/apps/storefront/src/middleware/index.ts +413 -0
- package/apps/storefront/src/pages/404.astro +61 -0
- package/apps/storefront/src/pages/[...slug].astro +90 -0
- package/apps/storefront/src/pages/api/auth/logout.ts +21 -0
- package/apps/storefront/src/pages/api/auth/magic-exchange.ts +107 -0
- package/apps/storefront/src/pages/api/auth/send.ts +85 -0
- package/apps/storefront/src/pages/api/auth/verify.ts +135 -0
- package/apps/storefront/src/pages/api/cache-purge.ts +44 -0
- package/apps/storefront/src/pages/api/content-edit/ai-edit.ts +64 -0
- package/apps/storefront/src/pages/api/csp-report.ts +25 -0
- package/apps/storefront/src/pages/api/dashboard/enter-vendor.ts +124 -0
- package/apps/storefront/src/pages/api/dashboard/vendor-search.ts +120 -0
- package/apps/storefront/src/pages/api/dev/cli-signin-code.ts +44 -0
- package/apps/storefront/src/pages/api/newsletter.ts +104 -0
- package/apps/storefront/src/pages/api/request-access.ts +172 -0
- package/apps/storefront/src/pages/auth/login.astro +149 -0
- package/apps/storefront/src/pages/auth/magic.astro +105 -0
- package/apps/storefront/src/pages/capabilities.astro +292 -0
- package/apps/storefront/src/pages/collections/[handle].astro +154 -0
- package/apps/storefront/src/pages/collections/index.astro +59 -0
- package/apps/storefront/src/pages/dashboard/[appDomain]/index.astro +100 -0
- package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +154 -0
- package/apps/storefront/src/pages/dashboard/index.astro +160 -0
- package/apps/storefront/src/pages/dev.astro +653 -0
- package/apps/storefront/src/pages/index.astro +290 -0
- package/apps/storefront/src/pages/llms.txt.ts +92 -0
- package/apps/storefront/src/pages/products/[handle].astro +443 -0
- package/apps/storefront/src/pages/robots.txt.ts +24 -0
- package/apps/storefront/src/pages/saved.astro +35 -0
- package/apps/storefront/src/pages/search.astro +150 -0
- package/apps/storefront/src/pages/sitemap.xml.ts +78 -0
- package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +646 -0
- package/apps/storefront/src/pages/style-guide/[tenant]/index.astro +85 -0
- package/apps/storefront/src/pages/style-guide/index.astro +94 -0
- package/apps/storefront/src/pages/tenants/[id]/[...path].ts +57 -0
- package/apps/storefront/src/styles/global.css +277 -0
- package/apps/storefront/src/themes/reference.ts +61 -0
- package/apps/storefront/src/themes/schema.ts +111 -0
- package/apps/storefront/src/themes/tenants/index.ts +51 -0
- package/apps/storefront/tsconfig.json +16 -0
- package/apps/storefront/vitest.config.ts +22 -0
- package/apps/storefront/wrangler.toml +175 -0
- package/package.json +23 -0
- package/packages/public-runtime/LICENSE +58 -0
- package/packages/public-runtime/package.json +22 -0
- package/packages/public-runtime/src/binary-path.ts +68 -0
- package/packages/public-runtime/src/capabilities.ts +89 -0
- package/packages/public-runtime/src/catalog-api.ts +81 -0
- package/packages/public-runtime/src/catalog-d1.ts +192 -0
- package/packages/public-runtime/src/csp.ts +109 -0
- package/packages/public-runtime/src/customization-preview.ts +197 -0
- package/packages/public-runtime/src/customization-reconcile.ts +63 -0
- package/packages/public-runtime/src/customization-runtime.ts +157 -0
- package/packages/public-runtime/src/customization-scripts.ts +64 -0
- package/packages/public-runtime/src/customization-versioning.ts +95 -0
- package/packages/public-runtime/src/foxy.ts +184 -0
- package/packages/public-runtime/src/index.ts +30 -0
- package/packages/public-runtime/src/product.ts +159 -0
- package/packages/public-runtime/src/search.ts +45 -0
- package/packages/public-runtime/src/tenant-assets.ts +444 -0
- package/packages/public-runtime/src/tenant.ts +243 -0
- package/packages/public-runtime/tsconfig.json +8 -0
- package/packages/public-runtime/vitest.config.ts +8 -0
- package/pnpm-workspace.yaml +7 -0
- package/scripts/build/copy-tenant-assets.mjs +69 -0
- package/scripts/tot-dev.mjs +439 -0
- package/tenants/bigdvapor/content/blog.json +52 -0
- package/tenants/bigdvapor/content/chrome.html +149 -0
- package/tenants/bigdvapor/content/chrome.json +47 -0
- package/tenants/bigdvapor/content/home.html +463 -0
- package/tenants/bigdvapor/content/home.json +73 -0
- package/tenants/bigdvapor/content/pages/about.json +5 -0
- package/tenants/bigdvapor/content/pages/privacy.json +6 -0
- package/tenants/bigdvapor/content/pages/shipping-returns.json +6 -0
- package/tenants/bigdvapor/content/pages-html/blogs/news.html +86 -0
- package/tenants/bigdvapor/content/pages-html/pages/about-us.html +106 -0
- package/tenants/bigdvapor/content/pages-html/pages/contact-us.html +61 -0
- package/tenants/bigdvapor/content/pages-html/pages/privacy-policy.html +72 -0
- package/tenants/bigdvapor/content/pages-html/pages/shipping-returns.html +172 -0
- package/tenants/bigdvapor/content/themes/bigd-navy.json +109 -0
- package/tenants/bigdvapor/public/img/brands/adjust-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/again-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/al-fakher-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/arro-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/cookies-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/core-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/cyclone-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/dinner-lady-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/extre-bar-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/fifty-bar-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/firerose-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/flavor-beast-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/foger-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/kk-energy-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/kumi-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/lost-vape-dispoable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/melo-labs-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/brands/mixo-vape-disposable.webp +0 -0
- package/tenants/bigdvapor/public/img/brands/one-tank-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/oxbar-vape-disposable.webp +0 -0
- package/tenants/bigdvapor/public/img/brands/pillow-talk-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/pod-king-vape-disposable.jpg +0 -0
- package/tenants/bigdvapor/public/img/brands/raz-vape-disposable.png +0 -0
- package/tenants/bigdvapor/public/img/hero-texas.jpg +0 -0
- package/tenants/bigdvapor/public/img/og.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/AdobeStock_202106312_web.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/CREW_web.jpg +0 -0
- package/tenants/bigdvapor/public/img/pages/Hero-Image.jpg +0 -0
- package/tenants/bigdvapor/public/img/tiles/adjust.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/again.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/al-fakher.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/arro.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/cookies.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/core.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/cyclone.png +0 -0
- package/tenants/bigdvapor/public/img/tiles/disposables.svg +23 -0
- package/tenants/bigdvapor/public/logo-wordmark.png +0 -0
- package/tenants/bigdvapor/public/pages/home.css +118 -0
- package/tenants/bigdvapor/public/pages/mkt.css +185 -0
- package/tenants/bigdvapor/public/pages/page.css +148 -0
- package/tenants/bigdvapor/public/themes/bigd-navy.css +73 -0
- package/tenants/bigdvapor/theme.json +12 -0
- package/tenants/giantvapes/content/chrome.html +152 -0
- package/tenants/giantvapes/content/chrome.json +94 -0
- package/tenants/giantvapes/content/home.html +194 -0
- package/tenants/giantvapes/content/home.json +50 -0
- package/tenants/giantvapes/content/pages/about.json +10 -0
- package/tenants/giantvapes/content/pages/privacy.json +6 -0
- package/tenants/giantvapes/content/pages/shipping-returns.json +6 -0
- package/tenants/giantvapes/content/pages-html/blogs/news.html +68 -0
- package/tenants/giantvapes/content/pages-html/pages/about-us.html +95 -0
- package/tenants/giantvapes/content/pages-html/pages/contact-us.html +68 -0
- package/tenants/giantvapes/content/pages-html/pages/privacy-policy.html +65 -0
- package/tenants/giantvapes/content/pages-html/pages/shipping-returns.html +77 -0
- package/tenants/giantvapes/content/themes/giant-navy.json +73 -0
- package/tenants/giantvapes/public/img/hero-suicide-bunny.jpg +0 -0
- package/tenants/giantvapes/public/img/hero.webp +0 -0
- package/tenants/giantvapes/public/img/og.jpg +0 -0
- package/tenants/giantvapes/public/logo-wordmark.png +0 -0
- package/tenants/giantvapes/public/pages/home.css +120 -0
- package/tenants/giantvapes/public/pages/mkt.css +185 -0
- package/tenants/giantvapes/public/pages/page.css +155 -0
- package/tenants/giantvapes/public/themes/giant-navy.css +76 -0
- package/tenants/giantvapes/theme.json +39 -0
- package/tenants/home/content/chrome.json +11 -0
- package/tenants/home/content/home.html +304 -0
- package/tenants/home/content/home.json +13 -0
- package/tenants/home/public/js/storefront.js +210 -0
- package/tenants/home/public/logo-wordmark.png +0 -0
- package/tenants/home/public/pages/storefront.css +212 -0
- package/tenants/home/theme.json +6 -0
- package/tenants/tokenoftrust/.tot/config.json +9 -0
- package/tenants/tokenoftrust/content/chrome.json +55 -0
- package/tenants/tokenoftrust/content/home.html +723 -0
- package/tenants/tokenoftrust/content/home.json +233 -0
- package/tenants/tokenoftrust/content/pages-html/careers.html +231 -0
- package/tenants/tokenoftrust/content/pages-html/company.html +275 -0
- package/tenants/tokenoftrust/content/pages-html/contact/contact-sales.html +188 -0
- package/tenants/tokenoftrust/content/pages-html/contact/startup-apply.html +206 -0
- package/tenants/tokenoftrust/content/pages-html/contact.html +178 -0
- package/tenants/tokenoftrust/content/pages-html/industries/adult-content-age-verification.html +286 -0
- package/tenants/tokenoftrust/content/pages-html/industries/cannabis.html +277 -0
- package/tenants/tokenoftrust/content/pages-html/pact-act-pricing.html +289 -0
- package/tenants/tokenoftrust/content/pages-html/pricing.html +483 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-estimation.html +278 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-gate.html +279 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance/age-verification.html +265 -0
- package/tenants/tokenoftrust/content/pages-html/product/age-assurance.html +173 -0
- package/tenants/tokenoftrust/content/pages-html/product/compliance/aml.html +214 -0
- package/tenants/tokenoftrust/content/pages-html/product/compliance/pact-act.html +226 -0
- package/tenants/tokenoftrust/content/pages-html/product/fraud-prevention.html +254 -0
- package/tenants/tokenoftrust/content/pages-html/product/social-profile-verification.html +212 -0
- package/tenants/tokenoftrust/content/pages-html/product/tax/excise-tax.html +213 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/aml.html +259 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/biometric-selfie.html +305 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/coverage.html +254 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/document-verification.html +306 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/electronic-identity-verification.html +304 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification/government-id-verification.html +308 -0
- package/tenants/tokenoftrust/content/pages-html/product/verification.html +183 -0
- package/tenants/tokenoftrust/content/pages-html/product.html +228 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/bigcommerce-integration.html +220 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/shopify-integration.html +221 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations/wordpress.html +220 -0
- package/tenants/tokenoftrust/content/pages-html/resources/integrations.html +172 -0
- package/tenants/tokenoftrust/content/pages-html/resources/refer-a-friend-program.html +317 -0
- package/tenants/tokenoftrust/content/pages-html/resources.html +177 -0
- package/tenants/tokenoftrust/content/pages-html/reviews.html +273 -0
- package/tenants/tokenoftrust/content/pages-html/solutions.html +292 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-alcohol.html +289 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-cigars-and-tobacco.html +286 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-firearm-accessories.html +267 -0
- package/tenants/tokenoftrust/content/pages-html/vlp-peptides.html +273 -0
- package/tenants/tokenoftrust/content/themes/tot-navy.json +88 -0
- package/tenants/tokenoftrust/public/favicon.png +0 -0
- package/tenants/tokenoftrust/public/logo-icon.png +0 -0
- package/tenants/tokenoftrust/public/logo-wordmark.png +0 -0
- package/tenants/tokenoftrust/public/pages/company.css +108 -0
- package/tenants/tokenoftrust/public/pages/home.css +457 -0
- package/tenants/tokenoftrust/public/pages/mkt.css +482 -0
- package/tenants/tokenoftrust/public/pages/pricing.css +214 -0
- package/tenants/tokenoftrust/public/pages/solutions.css +66 -0
- package/tenants/tokenoftrust/public/themes/tot-navy-1.0.0.css +136 -0
- package/tenants/tokenoftrust/public/themes/tot-navy.css +358 -0
- package/tenants/tokenoftrust/theme.json +31 -0
- package/tsconfig.base.json +20 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editorial content model (Storyblok seam).
|
|
3
|
+
*
|
|
4
|
+
* These are OUR types, decoupled from Storyblok's wire shape. The provider maps
|
|
5
|
+
* either source (Storyblok delivery API OR local JSON) into these, so pages
|
|
6
|
+
* never see a raw Storyblok story. The block schemas here mirror the component
|
|
7
|
+
* schemas that live in the Storyblok PARENT space (shared components); the
|
|
8
|
+
* pilot CHILD space holds the content instances. See DECISIONS.md for the
|
|
9
|
+
* parent/child + Shared Components plan.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export type HomeBlock =
|
|
13
|
+
| HeroBlock
|
|
14
|
+
| PromoTilesBlock
|
|
15
|
+
| FeaturedCollectionsBlock
|
|
16
|
+
| FeaturedProductsBlock
|
|
17
|
+
| EditorialBlock
|
|
18
|
+
| NewsletterBlock;
|
|
19
|
+
|
|
20
|
+
export interface PromoTilesBlock {
|
|
21
|
+
component: "promo_tiles";
|
|
22
|
+
title?: string;
|
|
23
|
+
/** A row of promotional tiles (e.g. "New Additions", "On Sale") that link to
|
|
24
|
+
* collections — captured from the merchant's homepage. */
|
|
25
|
+
tiles: { label: string; href: string; image?: string }[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface HeroBlock {
|
|
29
|
+
component: "hero";
|
|
30
|
+
/** The "thesis" line — the most characteristic thing about the catalog. */
|
|
31
|
+
eyebrow?: string;
|
|
32
|
+
headline: string;
|
|
33
|
+
/** Split second line gets the signature oversized treatment. */
|
|
34
|
+
headlineAccent?: string;
|
|
35
|
+
subhead?: string;
|
|
36
|
+
ctaLabel?: string;
|
|
37
|
+
ctaHref?: string;
|
|
38
|
+
/** Optional handle of a product/collection to feature visually. */
|
|
39
|
+
featureCollection?: string;
|
|
40
|
+
/** Direct hero image URL (e.g. the merchant's own homepage hero slide). */
|
|
41
|
+
image?: string;
|
|
42
|
+
imageAlt?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface FeaturedCollectionsBlock {
|
|
46
|
+
component: "featured_collections";
|
|
47
|
+
title?: string;
|
|
48
|
+
/** Collection handles to surface; empty = all. */
|
|
49
|
+
handles: string[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface FeaturedProductsBlock {
|
|
53
|
+
component: "featured_products";
|
|
54
|
+
title?: string;
|
|
55
|
+
/** "featured" | "newest" | explicit handles. */
|
|
56
|
+
source: "featured" | "newest";
|
|
57
|
+
handles?: string[];
|
|
58
|
+
limit?: number;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface EditorialBlock {
|
|
62
|
+
component: "editorial";
|
|
63
|
+
eyebrow?: string;
|
|
64
|
+
title: string;
|
|
65
|
+
body_html: string;
|
|
66
|
+
imageSeed?: string;
|
|
67
|
+
align?: "left" | "right";
|
|
68
|
+
ctaLabel?: string;
|
|
69
|
+
ctaHref?: string;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface NewsletterBlock {
|
|
73
|
+
component: "newsletter";
|
|
74
|
+
title: string;
|
|
75
|
+
body?: string;
|
|
76
|
+
placeholder?: string;
|
|
77
|
+
ctaLabel?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Marketing blocks (non-commerce tenants). These render WITHOUT catalog data —
|
|
82
|
+
// a marketing tenant composes its pages entirely from these. They're
|
|
83
|
+
// tenant-agnostic: every color/space comes from theme tokens, and the copy
|
|
84
|
+
// lives in tenant content JSON. See components/marketing/*.
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
|
|
87
|
+
/** A call-to-action button. `variant` picks primary/secondary styling; an
|
|
88
|
+
* `external` href (starts with http) opens the app/help/etc. surfaces. */
|
|
89
|
+
export interface MarketingCta {
|
|
90
|
+
label: string;
|
|
91
|
+
href: string;
|
|
92
|
+
variant?: "primary" | "secondary" | "ghost";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface MarketingHeroBlock {
|
|
96
|
+
component: "marketing_hero";
|
|
97
|
+
eyebrow?: string;
|
|
98
|
+
headline: string;
|
|
99
|
+
subhead?: string;
|
|
100
|
+
body?: string;
|
|
101
|
+
/** Short trust chips shown under the CTAs (e.g. "200+ countries"). */
|
|
102
|
+
trust?: string[];
|
|
103
|
+
ctas?: MarketingCta[];
|
|
104
|
+
/** Optional right-hand "product moment": a titled list of demo/log lines. */
|
|
105
|
+
panel?: { title?: string; lines: string[] };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** A horizontal strip of short proof tokens (countries, standards, ratings). */
|
|
109
|
+
export interface TrustBarBlock {
|
|
110
|
+
component: "trust_bar";
|
|
111
|
+
items: string[];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Before/after comparison — the "one platform vs a patchwork" section. */
|
|
115
|
+
export interface SplitCompareBlock {
|
|
116
|
+
component: "split_compare";
|
|
117
|
+
eyebrow?: string;
|
|
118
|
+
title: string;
|
|
119
|
+
subhead?: string;
|
|
120
|
+
before: { title: string; items: string[] };
|
|
121
|
+
after: { title: string; items: string[] };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Numbered/emoji journey steps. */
|
|
125
|
+
export interface StepsBlock {
|
|
126
|
+
component: "steps";
|
|
127
|
+
eyebrow?: string;
|
|
128
|
+
title: string;
|
|
129
|
+
subhead?: string;
|
|
130
|
+
steps: { icon?: string; label: string; detail?: string }[];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** A grid of capability/industry cards. `variant` tunes density/label style. */
|
|
134
|
+
export interface CardGridBlock {
|
|
135
|
+
component: "card_grid";
|
|
136
|
+
/** Optional anchor id so header nav can jump to this section (e.g. "platform"). */
|
|
137
|
+
anchor?: string;
|
|
138
|
+
eyebrow?: string;
|
|
139
|
+
title: string;
|
|
140
|
+
subhead?: string;
|
|
141
|
+
variant?: "capability" | "industry" | "feature";
|
|
142
|
+
cards: {
|
|
143
|
+
icon?: string;
|
|
144
|
+
title: string;
|
|
145
|
+
body?: string;
|
|
146
|
+
/** Small meta line (e.g. "Use case: account opening"). */
|
|
147
|
+
meta?: string;
|
|
148
|
+
href?: string;
|
|
149
|
+
}[];
|
|
150
|
+
/** Optional footnote of extra capabilities under the grid. */
|
|
151
|
+
footnote?: string;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** A single fenced code sample. NEVER put secret keys here — server-only. */
|
|
155
|
+
export interface CodeSample {
|
|
156
|
+
language?: string;
|
|
157
|
+
code: string;
|
|
158
|
+
/** Optional caption/warning shown above the block. */
|
|
159
|
+
caption?: string;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Integration story: platform logos/labels + an optional safe code sample. */
|
|
163
|
+
export interface IntegrationsBlock {
|
|
164
|
+
component: "integrations";
|
|
165
|
+
eyebrow?: string;
|
|
166
|
+
title: string;
|
|
167
|
+
subhead?: string;
|
|
168
|
+
platforms: { label: string; href?: string }[];
|
|
169
|
+
points?: string[];
|
|
170
|
+
code?: CodeSample;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** Privacy / trust proof strip (e.g. "We will never sell your data"). */
|
|
174
|
+
export interface ProofStripBlock {
|
|
175
|
+
component: "proof_strip";
|
|
176
|
+
eyebrow?: string;
|
|
177
|
+
title: string;
|
|
178
|
+
body?: string;
|
|
179
|
+
items?: string[];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface TestimonialsBlock {
|
|
183
|
+
component: "testimonials";
|
|
184
|
+
eyebrow?: string;
|
|
185
|
+
title?: string;
|
|
186
|
+
quotes: { stat?: string; quote: string; attribution?: string }[];
|
|
187
|
+
ratings?: string[];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export interface FaqBlock {
|
|
191
|
+
component: "faq";
|
|
192
|
+
eyebrow?: string;
|
|
193
|
+
title: string;
|
|
194
|
+
items: { q: string; a: string }[];
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Final conversion band. */
|
|
198
|
+
export interface CtaBandBlock {
|
|
199
|
+
component: "cta_band";
|
|
200
|
+
title: string;
|
|
201
|
+
subhead?: string;
|
|
202
|
+
ctas?: MarketingCta[];
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export type MarketingBlock =
|
|
206
|
+
| MarketingHeroBlock
|
|
207
|
+
| TrustBarBlock
|
|
208
|
+
| SplitCompareBlock
|
|
209
|
+
| StepsBlock
|
|
210
|
+
| CardGridBlock
|
|
211
|
+
| IntegrationsBlock
|
|
212
|
+
| ProofStripBlock
|
|
213
|
+
| TestimonialsBlock
|
|
214
|
+
| FaqBlock
|
|
215
|
+
| CtaBandBlock;
|
|
216
|
+
|
|
217
|
+
/** Discriminators that identify a marketing block (vs a commerce HomeBlock). */
|
|
218
|
+
export const MARKETING_COMPONENTS = new Set<MarketingBlock["component"]>([
|
|
219
|
+
"marketing_hero",
|
|
220
|
+
"trust_bar",
|
|
221
|
+
"split_compare",
|
|
222
|
+
"steps",
|
|
223
|
+
"card_grid",
|
|
224
|
+
"integrations",
|
|
225
|
+
"proof_strip",
|
|
226
|
+
"testimonials",
|
|
227
|
+
"faq",
|
|
228
|
+
"cta_band",
|
|
229
|
+
]);
|
|
230
|
+
|
|
231
|
+
export function isMarketingBlock(
|
|
232
|
+
block: { component: string },
|
|
233
|
+
): block is MarketingBlock {
|
|
234
|
+
return MARKETING_COMPONENTS.has(block.component as MarketingBlock["component"]);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export interface HomeContent {
|
|
238
|
+
/** SEO + social. */
|
|
239
|
+
seoTitle?: string;
|
|
240
|
+
seoDescription?: string;
|
|
241
|
+
/** Commerce home blocks OR marketing blocks — the page branches on tenant
|
|
242
|
+
* siteType/features and renders the matching set. */
|
|
243
|
+
blocks: (HomeBlock | MarketingBlock)[];
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export interface EditorialPage {
|
|
247
|
+
slug: string;
|
|
248
|
+
title: string;
|
|
249
|
+
seoTitle?: string;
|
|
250
|
+
seoDescription?: string;
|
|
251
|
+
/** Sanitized HTML body. */
|
|
252
|
+
body_html: string;
|
|
253
|
+
/** Optional hero eyebrow/intro. */
|
|
254
|
+
eyebrow?: string;
|
|
255
|
+
intro?: string;
|
|
256
|
+
/** When true, listed in the footer policy column. */
|
|
257
|
+
isPolicy?: boolean;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export interface SiteNavItem {
|
|
261
|
+
label: string;
|
|
262
|
+
href: string;
|
|
263
|
+
/** Mega-menu children, e.g. collection links grouped under a category. */
|
|
264
|
+
children?: { label: string; href: string }[];
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export interface SiteChrome {
|
|
268
|
+
nav: SiteNavItem[];
|
|
269
|
+
/**
|
|
270
|
+
* Header conversion buttons (marketing tenants). Rendered in the header's
|
|
271
|
+
* right cluster in place of the commerce search/saved controls. Commerce
|
|
272
|
+
* tenants omit this and keep the search + saved affordances.
|
|
273
|
+
*/
|
|
274
|
+
headerCtas?: MarketingCta[];
|
|
275
|
+
footer: {
|
|
276
|
+
columns: { title: string; links: { label: string; href: string }[] }[];
|
|
277
|
+
social: { label: string; href: string }[];
|
|
278
|
+
tagline?: string;
|
|
279
|
+
/** Bottom-bar legal/compliance line (marketing tenants). Plain text. */
|
|
280
|
+
legal?: string;
|
|
281
|
+
};
|
|
282
|
+
announcement?: string;
|
|
283
|
+
/** Default legal/safety disclaimer HTML (fallback for unknown categories). */
|
|
284
|
+
disclaimer?: string;
|
|
285
|
+
/** Per-product-category disclaimer HTML, keyed by product_type (or
|
|
286
|
+
* compliance.product_category) — the source store renders a different legal
|
|
287
|
+
* block per type (sub-ohm on salts, battery on devices). */
|
|
288
|
+
disclaimers?: Record<string, string>;
|
|
289
|
+
}
|