@tokenoftrust/storefront-runner 2.4.87 → 2.4.89

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.
Files changed (331) hide show
  1. package/apps/storefront/astro.config.mjs +1 -1
  2. package/apps/storefront/dev-plugins/tenant-hot-reload.mjs +1 -1
  3. package/apps/storefront/env.d.ts +1 -1
  4. package/apps/storefront/perf/README.md +7 -7
  5. package/apps/storefront/perf/assert-budgets.ts +2 -2
  6. package/apps/storefront/public/shared/commerce-chrome.css +1 -1
  7. package/apps/storefront/public/shared/commerce-marketing.css +1 -1
  8. package/apps/storefront/src/components/catalog/storefront/CollectionCard.astro +1 -1
  9. package/apps/storefront/src/components/catalog/storefront/ProductCard.astro +4 -4
  10. package/apps/storefront/src/components/catalog/storefront/commerce/BrandGrid.astro +1 -1
  11. package/apps/storefront/src/components/catalog/storefront/commerce/PriceDisplay.astro +2 -2
  12. package/apps/storefront/src/components/catalog/storefront/commerce/ProductCarousel.astro +2 -2
  13. package/apps/storefront/src/components/catalog/storefront/commerce/ProductGrid.astro +3 -3
  14. package/apps/storefront/src/components/catalog/storefront/commerce/ReviewList.astro +1 -1
  15. package/apps/storefront/src/components/catalog/storefront/islands/ImageGallery.tsx +1 -1
  16. package/apps/storefront/src/components/catalog/storefront/islands/QuickView.tsx +2 -2
  17. package/apps/storefront/src/components/catalog/storefront/islands/RecentlyViewed.tsx +2 -2
  18. package/apps/storefront/src/components/catalog/storefront/islands/SearchTypeahead.tsx +2 -2
  19. package/apps/storefront/src/components/catalog/storefront/islands/VariantSelector.tsx +1 -1
  20. package/apps/storefront/src/components/compliance/storefront/islands/AgeGate.tsx +2 -2
  21. package/apps/storefront/src/components/compliance/storefront/islands/IsolatedAgeGate.tsx +1 -1
  22. package/apps/storefront/src/components/{AsyncStylesheet.astro → content/storefront/AsyncStylesheet.astro} +2 -2
  23. package/apps/storefront/src/components/{Breadcrumbs.astro → content/storefront/Breadcrumbs.astro} +3 -3
  24. package/apps/storefront/src/components/{Seo.astro → content/storefront/Seo.astro} +5 -5
  25. package/apps/storefront/src/components/{blog → content/storefront/blog}/BlogIndexView.astro +6 -6
  26. package/apps/storefront/src/components/{blog → content/storefront/blog}/BlogPaywall.astro +2 -2
  27. package/apps/storefront/src/components/{blog → content/storefront/blog}/BlogPostArticle.astro +7 -7
  28. package/apps/storefront/src/components/{blog → content/storefront/blog}/PostAccessBadge.astro +1 -1
  29. package/apps/storefront/src/components/{blog → content/storefront/blog}/PostGrid.astro +3 -3
  30. package/apps/storefront/src/components/{blog → content/storefront/blog}/ReactionBar.astro +1 -1
  31. package/apps/storefront/src/components/{blog → content/storefront/blog}/ShareRow.astro +1 -1
  32. package/apps/storefront/src/components/{chrome → content/storefront/chrome}/MegaMenu.astro +3 -3
  33. package/apps/storefront/src/components/{chrome → content/storefront/chrome}/NavDropdown.astro +2 -2
  34. package/apps/storefront/src/components/{chrome → content/storefront/chrome}/SiteFooter.astro +5 -5
  35. package/apps/storefront/src/components/{chrome → content/storefront/chrome}/SiteHeader.astro +8 -8
  36. package/apps/storefront/src/components/{chrome → content/storefront/chrome}/UtilityNav.astro +2 -2
  37. package/apps/storefront/src/components/content/{Callout.astro → storefront/content/Callout.astro} +1 -1
  38. package/apps/storefront/src/components/content/{PromoTiles.astro → storefront/content/PromoTiles.astro} +3 -3
  39. package/apps/storefront/src/components/content/{ProseSections.astro → storefront/content/ProseSections.astro} +3 -3
  40. package/apps/storefront/src/components/{home → content/storefront/home}/Hero.astro +4 -4
  41. package/apps/storefront/src/components/{islands → content/storefront/islands}/MobileNav.tsx +2 -2
  42. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/CardGrid.astro +2 -2
  43. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/CodeSample.astro +1 -1
  44. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/CtaBand.astro +2 -2
  45. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/Faq.astro +5 -5
  46. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/Integrations.astro +3 -3
  47. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/MarketingBlocks.astro +11 -11
  48. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/MarketingCtas.astro +1 -1
  49. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/MarketingHero.astro +2 -2
  50. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/ProofStrip.astro +1 -1
  51. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/SplitCompare.astro +2 -2
  52. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/Steps.astro +2 -2
  53. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/Testimonials.astro +2 -2
  54. package/apps/storefront/src/components/{marketing → content/storefront/marketing}/TrustBar.astro +1 -1
  55. package/apps/storefront/src/components/{style-guide → content/storefront/style-guide}/StyleGuideNav.astro +1 -1
  56. package/apps/storefront/src/components/{the-build → content/storefront/the-build}/TheBuildIndexView.astro +5 -5
  57. package/apps/storefront/src/components/customers/storefront/islands/SavedList.tsx +2 -2
  58. package/apps/storefront/src/config/adminTargetTenant.ts +1 -1
  59. package/apps/storefront/src/config/devTenants.ts +1 -1
  60. package/apps/storefront/src/config/resolver.ts +1 -1
  61. package/apps/storefront/src/layouts/Layout.astro +28 -28
  62. package/apps/storefront/src/lib/{admin → access/admin}/README.md +3 -3
  63. package/apps/storefront/src/lib/{admin → access/admin}/adminShell.ts +1 -1
  64. package/apps/storefront/src/lib/{admin → access/admin}/envelope.ts +2 -2
  65. package/apps/storefront/src/lib/{admin → access/admin}/viewmodels/settings.ts +2 -2
  66. package/apps/storefront/src/lib/{auth → access/auth}/adminApiGuard.ts +2 -2
  67. package/apps/storefront/src/lib/{auth → access/auth}/adminEntry.ts +2 -2
  68. package/apps/storefront/src/lib/{auth → access/auth}/adminLanding.ts +1 -1
  69. package/apps/storefront/src/lib/{auth → access/auth}/identityToken.ts +1 -1
  70. package/apps/storefront/src/lib/{auth → access/auth}/loginGate.ts +2 -2
  71. package/apps/storefront/src/lib/{auth → access/auth}/totAccessClient.ts +4 -4
  72. package/apps/storefront/src/lib/{dashboard → access/dashboard}/delegateGate.ts +2 -2
  73. package/apps/storefront/src/lib/{dashboard → access/dashboard}/staffAdmission.ts +1 -1
  74. package/apps/storefront/src/lib/{dashboard → access/dashboard}/tenantSelection.ts +1 -1
  75. package/apps/storefront/src/lib/{admin/services/mock → access/fixtures}/settings.ts +4 -4
  76. package/apps/storefront/src/lib/{email → access/notifications}/magicLinkInviteEmail.ts +1 -1
  77. package/apps/storefront/src/lib/{shared → access/shared}/accessExplain.ts +1 -1
  78. package/apps/storefront/src/lib/{adminTenantEnvelope.ts → access/shared/adminTenantEnvelope.ts} +3 -3
  79. package/apps/storefront/src/lib/{shared → access/shared}/developerInvites.ts +4 -4
  80. package/apps/storefront/src/lib/{shared → access/shared}/invitePreflight.ts +1 -1
  81. package/apps/storefront/src/lib/{shared → access/shared}/principalGrants.ts +2 -2
  82. package/apps/storefront/src/lib/{shared → access/shared}/viewerGrant.ts +1 -1
  83. package/apps/storefront/src/lib/activity/fixtures/evidence.ts +2 -2
  84. package/apps/storefront/src/lib/activity/uiActor.ts +4 -4
  85. package/apps/storefront/src/lib/activity/workerCommit.ts +1 -1
  86. package/apps/storefront/src/lib/admin/services/mock/index.ts +4 -4
  87. package/apps/storefront/src/lib/assets/shared/imageAttrs.ts +1 -1
  88. package/apps/storefront/src/lib/{admin → automation/admin}/viewmodels/aiWorkflows.ts +3 -3
  89. package/apps/storefront/src/lib/{admin → automation}/ai/askEnvelope.ts +1 -1
  90. package/apps/storefront/src/lib/{admin → automation}/ai/operationalRuns.ts +4 -4
  91. package/apps/storefront/src/lib/{admin/services/mock → automation/fixtures}/aiWorkflows.ts +4 -4
  92. package/apps/storefront/src/lib/basePath.ts +2 -2
  93. package/apps/storefront/src/lib/catalog/fixtures/products.ts +4 -4
  94. package/apps/storefront/src/lib/catalog/shared/featuredProductsPresentation.ts +1 -1
  95. package/apps/storefront/src/lib/catalog/tot/tenantCatalog.ts +1 -1
  96. package/apps/storefront/src/lib/checkout/admin/checkoutStyleTarget.ts +2 -2
  97. package/apps/storefront/src/lib/checkout/fixtures/checkoutSettings.ts +1 -1
  98. package/apps/storefront/src/lib/compliance/browser/checkoutVerificationFlow.ts +1 -1
  99. package/apps/storefront/src/lib/compliance/verification/totVerificationClient.ts +1 -1
  100. package/apps/storefront/src/lib/{blog → content/blog}/access.ts +1 -1
  101. package/apps/storefront/src/lib/{blog → content/blog}/collection.ts +9 -9
  102. package/apps/storefront/src/lib/{blog → content/blog}/postView.ts +5 -5
  103. package/apps/storefront/src/lib/{blog → content/blog}/provider.ts +7 -7
  104. package/apps/storefront/src/lib/{chrome → content/chrome}/footerLegal.ts +2 -2
  105. package/apps/storefront/src/lib/{chrome → content/chrome}/trackingPlacements.ts +1 -1
  106. package/apps/storefront/src/lib/{seo → content/seo}/faqItems.ts +1 -1
  107. package/apps/storefront/src/lib/{seo → content/seo}/structuredData.ts +1 -1
  108. package/apps/storefront/src/lib/{breadcrumbs.ts → content/shared/breadcrumbs.ts} +1 -1
  109. package/apps/storefront/src/lib/{heroSlideshow.ts → content/shared/heroSlideshow.ts} +1 -1
  110. package/apps/storefront/src/lib/{homeVisualParity.ts → content/shared/homeVisualParity.ts} +1 -1
  111. package/apps/storefront/src/lib/{jsonld.ts → content/shared/jsonld.ts} +1 -1
  112. package/apps/storefront/src/lib/{rawChrome.ts → content/shared/rawChrome.ts} +12 -12
  113. package/apps/storefront/src/lib/{rawMarketingHtml.ts → content/shared/rawMarketingHtml.ts} +3 -3
  114. package/apps/storefront/src/lib/{styleGuideThemes.ts → content/shared/styleGuideThemes.ts} +3 -3
  115. package/apps/storefront/src/lib/{storyblok → content/storyblok}/content-model.ts +1 -1
  116. package/apps/storefront/src/lib/{storyblok → content/storyblok}/provider.ts +27 -27
  117. package/apps/storefront/src/lib/{the-build → content/the-build}/provider.ts +1 -1
  118. package/apps/storefront/src/lib/{the-build → content/the-build}/toc.ts +1 -1
  119. package/apps/storefront/src/lib/customers/fixtures/customers.ts +3 -3
  120. package/apps/storefront/src/lib/d1/schema-apps.ts +2 -2
  121. package/apps/storefront/src/lib/{admin → developer-experience/admin}/memoizeByEnvelope.ts +1 -1
  122. package/apps/storefront/src/lib/{dev → developer-experience/dev}/activityIngestToken.ts +2 -2
  123. package/apps/storefront/src/lib/{dev → developer-experience/dev}/cliSignInCode.ts +3 -3
  124. package/apps/storefront/src/lib/{dev → developer-experience/dev}/livePreview.ts +1 -1
  125. package/apps/storefront/src/lib/{dev → developer-experience/dev}/previewStatus.ts +2 -2
  126. package/apps/storefront/src/lib/{dev → developer-experience/dev}/rendezvousBroker.ts +2 -2
  127. package/apps/storefront/src/lib/{dev → developer-experience/dev}/subjectReissue.ts +2 -2
  128. package/apps/storefront/src/lib/email/candidateConflictEmail.ts +1 -1
  129. package/apps/storefront/src/lib/{messaging → engagement/messaging}/messagesClient.ts +1 -1
  130. package/apps/storefront/src/lib/{newsletter → engagement/newsletter}/digest.ts +2 -2
  131. package/apps/storefront/src/lib/{newsletter → engagement/newsletter}/resendClient.ts +1 -1
  132. package/apps/storefront/src/lib/{newsletter → engagement/newsletter}/send.ts +2 -2
  133. package/apps/storefront/src/lib/{newsletter → engagement/newsletter}/subscribers.ts +1 -1
  134. package/apps/storefront/src/lib/{social → engagement/social}/golive.ts +2 -2
  135. package/apps/storefront/src/lib/{social → engagement/social}/notify.ts +1 -1
  136. package/apps/storefront/src/lib/{social → engagement/social}/tokenStore.ts +3 -3
  137. package/apps/storefront/src/lib/fulfillment/fulfillmentService.ts +3 -3
  138. package/apps/storefront/src/lib/integrations/integration/browserEnvironment.ts +1 -1
  139. package/apps/storefront/src/lib/{apps → measurement/consent}/consentConfigRead.ts +1 -1
  140. package/apps/storefront/src/lib/{tracking → measurement/tracking}/d1Control.ts +2 -2
  141. package/apps/storefront/src/lib/{tracking → measurement/tracking}/interactionCollector.ts +2 -2
  142. package/apps/storefront/src/lib/{tracking → measurement/tracking}/interactionStore.ts +0 -0
  143. package/apps/storefront/src/lib/{tracking → measurement/tracking}/pruneRollup.ts +2 -2
  144. package/apps/storefront/src/lib/{tracking → measurement/tracking}/publishSafetyNet.ts +1 -1
  145. package/apps/storefront/src/lib/{tracking → measurement/tracking}/tenantD1Registry.ts +2 -2
  146. package/apps/storefront/src/lib/{monitoring → observability/monitoring}/manifest.ts +2 -2
  147. package/apps/storefront/src/lib/{analytics → observability/performance}/budgets.json +1 -1
  148. package/apps/storefront/src/lib/orders/fixtures/orders.ts +4 -4
  149. package/apps/storefront/src/lib/previewReload.ts +1 -1
  150. package/apps/storefront/src/lib/publication/contentProvider.ts +7 -7
  151. package/apps/storefront/src/lib/publication/mountedDiscovery.ts +1 -1
  152. package/apps/storefront/src/lib/publication/rootDiscovery.ts +4 -4
  153. package/apps/storefront/src/lib/reporting/fixtures/reporting.ts +3 -3
  154. package/apps/storefront/src/lib/runtimeEnv.ts +1 -1
  155. package/apps/storefront/src/lib/subscriptions/fixtures/subscriptions.ts +3 -3
  156. package/apps/storefront/src/middleware/controlPlane.ts +7 -7
  157. package/apps/storefront/src/middleware/index.ts +11 -11
  158. package/apps/storefront/src/middleware/renderChain.ts +6 -6
  159. package/apps/storefront/src/pages/[...slug].astro +13 -13
  160. package/apps/storefront/src/pages/api/admin/activity-alerts.ts +1 -1
  161. package/apps/storefront/src/pages/api/admin/commerce-readiness.ts +1 -1
  162. package/apps/storefront/src/pages/api/admin/fulfillment/batches.ts +1 -1
  163. package/apps/storefront/src/pages/api/admin/fulfillment/orders/[id]/address.ts +1 -1
  164. package/apps/storefront/src/pages/api/admin/fulfillment/orders/[id].ts +1 -1
  165. package/apps/storefront/src/pages/api/admin/interaction-insights.ts +4 -4
  166. package/apps/storefront/src/pages/api/admin/orders/[id].ts +1 -1
  167. package/apps/storefront/src/pages/api/admin/orders.ts +1 -1
  168. package/apps/storefront/src/pages/api/auth/logout.ts +2 -2
  169. package/apps/storefront/src/pages/api/auth/magic-exchange.ts +6 -6
  170. package/apps/storefront/src/pages/api/auth/send.ts +2 -2
  171. package/apps/storefront/src/pages/api/auth/step-up-send.ts +1 -1
  172. package/apps/storefront/src/pages/api/auth/step-up-verify.ts +3 -3
  173. package/apps/storefront/src/pages/api/auth/verify.ts +4 -4
  174. package/apps/storefront/src/pages/api/blog/[collection]/[slug]/react.ts +2 -2
  175. package/apps/storefront/src/pages/api/newsletter/[collection]/subscribe.ts +4 -4
  176. package/apps/storefront/src/pages/api/newsletter/confirm.ts +1 -1
  177. package/apps/storefront/src/pages/api/newsletter/unsubscribe.ts +1 -1
  178. package/apps/storefront/src/pages/api/rum/vitals.ts +2 -2
  179. package/apps/storefront/src/pages/api/tracking/interaction.ts +5 -5
  180. package/apps/storefront/src/pages/auth/login.astro +2 -2
  181. package/apps/storefront/src/pages/auth/magic.astro +1 -1
  182. package/apps/storefront/src/pages/blog/[slug].astro +2 -2
  183. package/apps/storefront/src/pages/blog/author/[author].astro +8 -8
  184. package/apps/storefront/src/pages/blog/category/[category].astro +8 -8
  185. package/apps/storefront/src/pages/blog/index.astro +4 -4
  186. package/apps/storefront/src/pages/blog/page/[n].astro +4 -4
  187. package/apps/storefront/src/pages/blog/tag/[tag].astro +8 -8
  188. package/apps/storefront/src/pages/cart.ts +1 -1
  189. package/apps/storefront/src/pages/collections/[handle].astro +7 -7
  190. package/apps/storefront/src/pages/collections/index.astro +4 -4
  191. package/apps/storefront/src/pages/index.astro +10 -10
  192. package/apps/storefront/src/pages/llms.txt.ts +2 -2
  193. package/apps/storefront/src/pages/products/[handle].astro +11 -11
  194. package/apps/storefront/src/pages/saved.astro +2 -2
  195. package/apps/storefront/src/pages/search.astro +5 -5
  196. package/apps/storefront/src/pages/sitemap.xml.ts +8 -8
  197. package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +24 -24
  198. package/apps/storefront/src/pages/style-guide/[tenant]/chrome/[theme].astro +2 -2
  199. package/apps/storefront/src/pages/style-guide/[tenant]/guide/[theme].astro +3 -3
  200. package/apps/storefront/src/pages/style-guide/[tenant]/index.astro +3 -3
  201. package/apps/storefront/src/pages/style-guide/index.astro +1 -1
  202. package/apps/storefront/src/pages/the-build/[slug].astro +10 -10
  203. package/apps/storefront/src/pages/the-build/index.astro +5 -5
  204. package/apps/storefront/src/pages/the-build/page/[n].astro +5 -5
  205. package/apps/storefront/src/pages/the-build/rss.xml.ts +4 -4
  206. package/docs/widget-library-guide.md +36 -36
  207. package/package.json +1 -1
  208. package/packages/public-runtime/src/chrome.ts +4 -4
  209. package/packages/public-runtime/src/tracking-id-derivation.ts +1 -1
  210. package/scripts/dev/locate.mjs +1 -1
  211. package/apps/storefront/src/lib/admin/ai/index.ts +0 -6
  212. /package/apps/storefront/src/components/{auth → access/storefront/auth}/AuthBadge.astro +0 -0
  213. /package/apps/storefront/src/components/{Badge.astro → content/storefront/Badge.astro} +0 -0
  214. /package/apps/storefront/src/components/{EmptyState.astro → content/storefront/EmptyState.astro} +0 -0
  215. /package/apps/storefront/src/components/{Section.astro → content/storefront/Section.astro} +0 -0
  216. /package/apps/storefront/src/components/{chrome → content/storefront/chrome}/AnnouncementBar.astro +0 -0
  217. /package/apps/storefront/src/components/{commerce → content/storefront/commerce}/ArticleCard.astro +0 -0
  218. /package/apps/storefront/src/components/content/{NeedsReviewCallout.astro → storefront/content/NeedsReviewCallout.astro} +0 -0
  219. /package/apps/storefront/src/components/content/{ProseToc.astro → storefront/content/ProseToc.astro} +0 -0
  220. /package/apps/storefront/src/components/content/{RichText.astro → storefront/content/RichText.astro} +0 -0
  221. /package/apps/storefront/src/components/content/{TrustStrip.astro → storefront/content/TrustStrip.astro} +0 -0
  222. /package/apps/storefront/src/lib/{auth → access/auth}/brokerAssertion.ts +0 -0
  223. /package/apps/storefront/src/lib/{auth → access/auth}/devAuth.ts +0 -0
  224. /package/apps/storefront/src/lib/{auth → access/auth}/gatePage.ts +0 -0
  225. /package/apps/storefront/src/lib/{auth → access/auth}/internalContentAuthority.ts +0 -0
  226. /package/apps/storefront/src/lib/{auth → access/auth}/mcpClientAssertion.ts +0 -0
  227. /package/apps/storefront/src/lib/{auth → access/auth}/operatorSession.ts +0 -0
  228. /package/apps/storefront/src/lib/{auth → access/auth}/route.ts +0 -0
  229. /package/apps/storefront/src/lib/{auth → access/auth}/session.ts +0 -0
  230. /package/apps/storefront/src/lib/{auth → access/auth}/stepUpChallenge.ts +0 -0
  231. /package/apps/storefront/src/lib/{dashboard → access/dashboard}/staffVendorAccess.ts +0 -0
  232. /package/apps/storefront/src/lib/{dashboard → access/dashboard}/vendorQuery.ts +0 -0
  233. /package/apps/storefront/src/lib/{admin/services/mock → access/fixtures}/tenants.ts +0 -0
  234. /package/apps/storefront/src/lib/{privacy → access/privacy}/emailHint.ts +0 -0
  235. /package/apps/storefront/src/lib/{rate → access/rate}/kvWindow.ts +0 -0
  236. /package/apps/storefront/src/lib/{shared → access/shared}/capability.ts +0 -0
  237. /package/apps/storefront/src/lib/{cspStaticHashes.ts → access/shared/cspStaticHashes.ts} +0 -0
  238. /package/apps/storefront/src/lib/{demoGate.ts → access/shared/demoGate.ts} +0 -0
  239. /package/apps/storefront/src/lib/{maintenance.ts → access/shared/maintenance.ts} +0 -0
  240. /package/apps/storefront/src/lib/{securityHeaders.ts → access/shared/securityHeaders.ts} +0 -0
  241. /package/apps/storefront/src/lib/{tenantOrigins.ts → access/shared/tenantOrigins.ts} +0 -0
  242. /package/apps/storefront/src/lib/{tenantRouting.ts → access/shared/tenantRouting.ts} +0 -0
  243. /package/apps/storefront/src/lib/{admin → automation}/ai/approvalMode.ts +0 -0
  244. /package/apps/storefront/src/lib/{admin → automation}/ai/audit.ts +0 -0
  245. /package/apps/storefront/src/lib/{admin → automation}/ai/recommendation.ts +0 -0
  246. /package/apps/storefront/src/lib/{blog → content/blog}/collectionPaths.ts +0 -0
  247. /package/apps/storefront/src/lib/{blog → content/blog}/markdown.ts +0 -0
  248. /package/apps/storefront/src/lib/{blog → content/blog}/pagination.ts +0 -0
  249. /package/apps/storefront/src/lib/{blog → content/blog}/presentation.ts +0 -0
  250. /package/apps/storefront/src/lib/{blog → content/blog}/reactions.ts +0 -0
  251. /package/apps/storefront/src/lib/{blog → content/blog}/rss.ts +0 -0
  252. /package/apps/storefront/src/lib/{blog → content/blog}/teaser.ts +0 -0
  253. /package/apps/storefront/src/lib/{blog → content/blog}/types.ts +0 -0
  254. /package/apps/storefront/src/lib/{blog → content/blog}/viewCounts.ts +0 -0
  255. /package/apps/storefront/src/lib/{chrome → content/chrome}/ctaIdentity.ts +0 -0
  256. /package/apps/storefront/src/lib/{chrome → content/chrome}/examples/tokenoftrust.chrome-assignments.example.json +0 -0
  257. /package/apps/storefront/src/lib/{chrome → content/chrome}/examples/tokenoftrust.chrome.example.json +0 -0
  258. /package/apps/storefront/src/lib/{chrome → content/chrome}/managedCart.ts +0 -0
  259. /package/apps/storefront/src/lib/{chrome → content/chrome}/model.ts +0 -0
  260. /package/apps/storefront/src/lib/{chrome → content/chrome}/navCurrent.ts +0 -0
  261. /package/apps/storefront/src/lib/{chrome → content/chrome}/newsletterAgeAttestation.ts +0 -0
  262. /package/apps/storefront/src/lib/{chrome → content/chrome}/parseConfig.ts +0 -0
  263. /package/apps/storefront/src/lib/{chrome → content/chrome}/variant.ts +0 -0
  264. /package/apps/storefront/src/lib/{commerce → content/policies}/shippingPolicy.ts +0 -0
  265. /package/apps/storefront/src/lib/{seo → content/seo}/alternates.ts +0 -0
  266. /package/apps/storefront/src/lib/{seo → content/seo}/documentTitle.ts +0 -0
  267. /package/apps/storefront/src/lib/{seo → content/seo}/meta.ts +0 -0
  268. /package/apps/storefront/src/lib/{seo → content/seo}/urlForm.ts +0 -0
  269. /package/apps/storefront/src/lib/{asyncCss.ts → content/shared/asyncCss.ts} +0 -0
  270. /package/apps/storefront/src/lib/{colors.ts → content/shared/colors.ts} +0 -0
  271. /package/apps/storefront/src/lib/{format.ts → content/shared/format.ts} +0 -0
  272. /package/apps/storefront/src/lib/{i18n.ts → content/shared/i18n.ts} +0 -0
  273. /package/apps/storefront/src/lib/{jsonScript.ts → content/shared/jsonScript.ts} +0 -0
  274. /package/apps/storefront/src/lib/{placeholder.ts → content/shared/placeholder.ts} +0 -0
  275. /package/apps/storefront/src/lib/{sections.ts → content/shared/sections.ts} +0 -0
  276. /package/apps/storefront/src/lib/{styleGuidePaths.ts → content/shared/styleGuidePaths.ts} +0 -0
  277. /package/apps/storefront/src/lib/{the-build → content/the-build}/pagination.ts +0 -0
  278. /package/apps/storefront/src/lib/{the-build → content/the-build}/readingTime.ts +0 -0
  279. /package/apps/storefront/src/lib/{admin → developer-experience/admin}/seed.ts +0 -0
  280. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/activityStore.ts +0 -0
  281. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/ai-widget-client.js +0 -0
  282. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/apiBase.ts +0 -0
  283. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/ask.ts +0 -0
  284. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/clickToSource.ts +0 -0
  285. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/copyCommand.ts +0 -0
  286. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/files.ts +0 -0
  287. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/hostedActivity.ts +0 -0
  288. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/infoPopover.ts +0 -0
  289. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/mcpCopy.ts +0 -0
  290. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/monitor.ts +0 -0
  291. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/stepper.ts +0 -0
  292. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/cockpit/themeToggle.ts +0 -0
  293. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/devDraft.ts +0 -0
  294. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/obstacleStore.ts +0 -0
  295. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/runtimeStore.ts +0 -0
  296. /package/apps/storefront/src/lib/{dev → developer-experience/dev}/storeStatus.ts +0 -0
  297. /package/apps/storefront/src/lib/{fixtures → developer-experience/fixtures}/regulated-commerce-truth/index.ts +0 -0
  298. /package/apps/storefront/src/lib/{fixtures → developer-experience/fixtures}/ws3-readonly-clone-preflight/index.ts +0 -0
  299. /package/apps/storefront/src/lib/{http → developer-experience/http}/fetchTransport.ts +0 -0
  300. /package/apps/storefront/src/lib/{http → developer-experience/http}/mcpServiceCall.ts +0 -0
  301. /package/apps/storefront/src/lib/{memoryKv.ts → developer-experience/shared/memoryKv.ts} +0 -0
  302. /package/apps/storefront/src/lib/{cloudflare-workers.d.ts → developer-experience/types/cloudflare-workers.d.ts} +0 -0
  303. /package/apps/storefront/src/lib/{newsletter → engagement/newsletter}/confirmationEmail.ts +0 -0
  304. /package/apps/storefront/src/lib/{newsletter → engagement/newsletter}/consent.ts +0 -0
  305. /package/apps/storefront/src/lib/{admin → measurement/admin}/consentSettingsClient.ts +0 -0
  306. /package/apps/storefront/src/lib/{analytics → measurement/analytics}/index.ts +0 -0
  307. /package/apps/storefront/src/lib/{apps/orders → measurement/attribution}/attributionService.ts +0 -0
  308. /package/apps/storefront/src/lib/{apps/orders → measurement/attribution}/orderConversionD1.ts +0 -0
  309. /package/apps/storefront/src/lib/{apps/orders → measurement/attribution}/verifiedProviderMeasurement.ts +0 -0
  310. /package/apps/storefront/src/lib/{tracking → measurement/tracking}/collectorAllowlist.ts +0 -0
  311. /package/apps/storefront/src/lib/{tracking → measurement/tracking}/collectorIngest.ts +0 -0
  312. /package/apps/storefront/src/lib/{tracking → measurement/tracking}/interactionHealth.ts +0 -0
  313. /package/apps/storefront/src/lib/{tracking → measurement/tracking}/interactionSchema.ts +0 -0
  314. /package/apps/storefront/src/lib/{tracking → measurement/tracking}/tenantReadAccess.ts +0 -0
  315. /package/apps/storefront/src/lib/{tracking-writeback → measurement/tracking-writeback}/rewriteTrackingIds.ts +0 -0
  316. /package/apps/storefront/src/lib/{tracking-writeback → measurement/tracking-writeback}/writebackCandidate.ts +0 -0
  317. /package/apps/storefront/src/lib/{diag → observability/diag}/capture.ts +0 -0
  318. /package/apps/storefront/src/lib/{diag → observability/diag}/consoleLine.ts +0 -0
  319. /package/apps/storefront/src/lib/{diag → observability/diag}/debugConsole.ts +0 -0
  320. /package/apps/storefront/src/lib/{diag → observability/diag}/debugMode.ts +0 -0
  321. /package/apps/storefront/src/lib/{diag → observability/diag}/debugWindow.ts +0 -0
  322. /package/apps/storefront/src/lib/{diag → observability/diag}/redact.ts +0 -0
  323. /package/apps/storefront/src/lib/{diag → observability/diag}/reference.ts +0 -0
  324. /package/apps/storefront/src/lib/{diag → observability/diag}/referenceStore.ts +0 -0
  325. /package/apps/storefront/src/lib/{diag → observability/diag}/report.ts +0 -0
  326. /package/apps/storefront/src/lib/{diag → observability/diag}/session.ts +0 -0
  327. /package/apps/storefront/src/lib/{analytics → observability/performance}/lighthouseReport.ts +0 -0
  328. /package/apps/storefront/src/lib/{analytics → observability/performance}/perfBudgets.ts +0 -0
  329. /package/apps/storefront/src/lib/{analytics → observability/performance}/rumAlert.ts +0 -0
  330. /package/apps/storefront/src/lib/{analytics → observability/performance}/webVitals.ts +0 -0
  331. /package/apps/storefront/src/lib/{health.ts → observability/shared/health.ts} +0 -0
@@ -31,7 +31,7 @@ const cliVersion = (() => {
31
31
  const cliInstallSpec = cliVersion ? `@tokenoftrust/cli@${cliVersion}` : "@tokenoftrust/cli";
32
32
 
33
33
  // The commit THIS build was cut from, baked in at BUILD time so /health can report
34
- // exactly which code is live (see src/lib/health.ts + src/middleware). Prefer a CI-
34
+ // exactly which code is live (see src/lib/observability/shared/health.ts + src/middleware). Prefer a CI-
35
35
  // provided SHA (Workers Builds / GitHub Actions / CF Pages) so the value is right even
36
36
  // when the build runs from a shallow/detached checkout; fall back to `git rev-parse`
37
37
  // for local deploys. deploy.sh's source guard pins HEAD to origin/<deploySourceBranch>,
@@ -192,7 +192,7 @@ export function seedKnown(root, known) {
192
192
  // - content/**.html — read fresh from disk per request
193
193
  // (LocalContentProvider.readRawDevFile), so just reload. (The Vite HMR client
194
194
  // is injected into these otherwise-pipeline-bypassing pages in dev; see
195
- // rawHtmlResponse in src/lib/rawMarketingHtml.ts.)
195
+ // rawHtmlResponse in src/lib/content/shared/rawMarketingHtml.ts.)
196
196
  // - public/** — re-mirror the one changed asset into public/tenants/<id>/
197
197
  // (skipping R2-versioned tenants, like copy-tenant-assets.mjs), then reload.
198
198
  // content/*.json and other themes/*.json globs are ordinary glob imports, so
@@ -16,7 +16,7 @@ import type {
16
16
  PublicationRoutePlanV1,
17
17
  } from "@tot/public-runtime";
18
18
  import type { ToTClient } from "@/lib/catalog/tot/ToTClient";
19
- import type { ContentProvider } from "@/lib/storyblok/provider";
19
+ import type { ContentProvider } from "@/lib/content/storyblok/provider";
20
20
 
21
21
  /**
22
22
  * Minimal binding shapes. We intentionally do NOT depend on
@@ -3,18 +3,18 @@
3
3
  The storefront's go-live framework enforces a performance gate. This directory
4
4
  is the **lab half** (a checked-in budget manifest + a CI-runnable assertion
5
5
  harness); the **field half** (Real User Monitoring) lives in
6
- `../src/lib/analytics/`.
6
+ `../src/lib/measurement/analytics/index/`.
7
7
 
8
8
  ## The pieces
9
9
 
10
10
  | File | Role |
11
11
  |------|------|
12
- | `../src/lib/analytics/budgets.json` | **Source of truth.** Route budgets (LCP/INP/CLS p75 + JS/CSS/image/total KiB) + the third-party script allowlist. Edit here; everything derives from it. |
13
- | `../src/lib/analytics/perfBudgets.ts` | Typed lens + **pure** budget-assertion logic (`evaluateManifest`) + the Lighthouse-budgets exporter (`toLighthouseBudgets`). Unit-tested in `perfBudgets.test.ts`. |
14
- | `../src/lib/analytics/lighthouseReport.ts` | Pure adapter: a Lighthouse result (LHR JSON) → a `RouteMeasurement` the gate evaluates. Unit-tested in `lighthouseReport.test.ts`. |
12
+ | `../src/lib/observability/performance/budgets.json` | **Source of truth.** Route budgets (LCP/INP/CLS p75 + JS/CSS/image/total KiB) + the third-party script allowlist. Edit here; everything derives from it. |
13
+ | `../src/lib/observability/performance/perfBudgets.ts` | Typed lens + **pure** budget-assertion logic (`evaluateManifest`) + the Lighthouse-budgets exporter (`toLighthouseBudgets`). Unit-tested in `perfBudgets.test.ts`. |
14
+ | `../src/lib/observability/performance/lighthouseReport.ts` | Pure adapter: a Lighthouse result (LHR JSON) → a `RouteMeasurement` the gate evaluates. Unit-tested in `lighthouseReport.test.ts`. |
15
15
  | `assert-budgets.ts` | Thin CLI: reads measurements / LHRs, runs the gate, exits non-zero on a violation. |
16
- | `../src/lib/analytics/webVitals.ts` | Field RUM beacon (LCP/INP/CLS from real visitors → the RUM sink). |
17
- | `../src/lib/analytics/rumAlert.ts` | Pure sink-side regression-alert contract; feeds F16's `core-web-vitals` monitor. Unit-tested in `rumAlert.test.ts`. |
16
+ | `../src/lib/observability/performance/webVitals.ts` | Field RUM beacon (LCP/INP/CLS from real visitors → the RUM sink). |
17
+ | `../src/lib/observability/performance/rumAlert.ts` | Pure sink-side regression-alert contract; feeds F16's `core-web-vitals` monitor. Unit-tested in `rumAlert.test.ts`. |
18
18
 
19
19
  The budget numbers are enforced identically in three places, all reading the one
20
20
  manifest: the lab gate here, a Lighthouse `--budget-path` run (via
@@ -56,7 +56,7 @@ silently drift.
56
56
 
57
57
  ## Field RUM
58
58
 
59
- `startWebVitals()` (from `../src/lib/analytics/webVitals.ts`) is called from the
59
+ `startWebVitals()` (from `../src/lib/observability/performance/webVitals.ts`) is called from the
60
60
  client entry; it measures LCP/INP/CLS per real navigation, buckets each into the
61
61
  same budgeted route id the lab gate uses, and beacons finished samples to the RUM
62
62
  sink (`RUM_BEACON_PATH`). The sink rolls samples up per route/hour and calls
@@ -41,8 +41,8 @@ import {
41
41
  ROUTE_IDS,
42
42
  type RouteId,
43
43
  type RouteMeasurement,
44
- } from "../src/lib/analytics/perfBudgets.js";
45
- import { lhrToMeasurement, type LighthouseResult } from "../src/lib/analytics/lighthouseReport.js";
44
+ } from "../src/lib/observability/performance/perfBudgets.js";
45
+ import { lhrToMeasurement, type LighthouseResult } from "../src/lib/observability/performance/lighthouseReport.js";
46
46
 
47
47
  function die(msg: string, code = 2): never {
48
48
  process.stderr.write(`assert-budgets: ${msg}\n`);
@@ -413,7 +413,7 @@ a.article-card__tag:hover { text-decoration: underline; }
413
413
  .footer-bottom { margin-top: 28px; padding-top: 18px; border-top: 1px solid color-mix(in srgb, var(--color-primary-contrast) 16%, transparent); display: flex; flex-wrap: wrap; gap: 10px 24px; justify-content: space-between; align-items: center; }
414
414
  .footer-bottom p, .footer-bottom a { color: color-mix(in srgb, var(--color-primary-contrast) 60%, transparent); font-size: .875rem; }
415
415
  /* The Legal link row (a "Legal"-titled footer column, moved here — see
416
- lib/chrome/footerLegal.ts). Wraps under the copyright at narrow widths
416
+ lib/content/chrome/footerLegal.ts). Wraps under the copyright at narrow widths
417
417
  rather than overflowing the bar. */
418
418
  .footer-bottom nav ul { display: flex; flex-wrap: wrap; gap: 6px 20px; list-style: none; margin: 0; padding: 0; }
419
419
  .footer-bottom nav a:hover { color: var(--color-primary-contrast); text-decoration: underline; }
@@ -19,7 +19,7 @@
19
19
  page-local CSS for standard patterns").
20
20
 
21
21
  OPT-IN, not automatic. A tenant links this only when its chrome.json sets
22
- `sharedMarketingCss: true` (see lib/rawChrome.ts SHARED_MARKETING_STYLESHEET) —
22
+ `sharedMarketingCss: true` (see lib/content/shared/rawChrome.ts SHARED_MARKETING_STYLESHEET) —
23
23
  the same deliberate-adoption gate `sharedChrome` uses, so a SHIPPED tenant that
24
24
  already hand-authored its own page CSS (e.g. sample-store-2's tenant-scoped
25
25
  /tenants/sample-store-2.net/pages/page.css, which reuses names like `.cta-band` /
@@ -7,7 +7,7 @@
7
7
  import type { CatalogCollection } from "@tot/public-runtime";
8
8
  import Img from "@/components/assets/storefront/Img.astro";
9
9
  import { withBase } from "@/lib/basePath";
10
- import { pageUrlForm } from "@/lib/seo/urlForm";
10
+ import { pageUrlForm } from "@/lib/content/seo/urlForm";
11
11
 
12
12
  interface Props {
13
13
  collection: CatalogCollection;
@@ -7,15 +7,15 @@
7
7
  * color swatches; price with struck compare-at. Theme-agnostic.
8
8
  */
9
9
  import type { CatalogProduct } from "@tot/public-runtime";
10
- import { discountPercent, truncate } from "@/lib/format";
10
+ import { discountPercent, truncate } from "@/lib/content/shared/format";
11
11
  import { isOnSale, isNew, isAvailable, fromPrice } from "@/lib/catalog/tot/query";
12
- import { colorOptionValues, resolveSwatch, isLightFill } from "@/lib/colors";
12
+ import { colorOptionValues, resolveSwatch, isLightFill } from "@/lib/content/shared/colors";
13
13
  import Img from "@/components/assets/storefront/Img.astro";
14
- import Badge from "@/components/Badge.astro";
14
+ import Badge from "@/components/content/storefront/Badge.astro";
15
15
  import PriceDisplay from "@/components/catalog/storefront/commerce/PriceDisplay.astro";
16
16
  import RatingStars from "@/components/catalog/storefront/commerce/RatingStars.astro";
17
17
  import { withBase } from "@/lib/basePath";
18
- import { pageUrlForm } from "@/lib/seo/urlForm";
18
+ import { pageUrlForm } from "@/lib/content/seo/urlForm";
19
19
 
20
20
  interface Props {
21
21
  product: CatalogProduct;
@@ -13,7 +13,7 @@
13
13
  * public/shared/commerce-chrome.css, for tenants that ship hand-authored HTML
14
14
  * through the rawMarketingHtml splice pipeline. Keep the two visually equivalent.
15
15
  */
16
- import Section from "@/components/Section.astro";
16
+ import Section from "@/components/content/storefront/Section.astro";
17
17
  import Img from "@/components/assets/storefront/Img.astro";
18
18
  import { withBase } from "@/lib/basePath";
19
19
 
@@ -10,9 +10,9 @@
10
10
  * atom is usable outside a CatalogProduct context (cart line, PDP, fixtures).
11
11
  */
12
12
  import type { CatalogProduct } from "@tot/public-runtime";
13
- import { formatPrice, discountPercent } from "@/lib/format";
13
+ import { formatPrice, discountPercent } from "@/lib/content/shared/format";
14
14
  import { fromPrice, isOnSale } from "@/lib/catalog/tot/query";
15
- import Badge from "@/components/Badge.astro";
15
+ import Badge from "@/components/content/storefront/Badge.astro";
16
16
 
17
17
  interface Props {
18
18
  /** Derive amount/compareAt/from/currency from a product. */
@@ -14,13 +14,13 @@
14
14
  * through `Astro.locals.tot`; or `tabs` for the multi-source tabbed variant.
15
15
  */
16
16
  import type { CatalogProduct } from "@tot/public-runtime";
17
- import Section from "@/components/Section.astro";
17
+ import Section from "@/components/content/storefront/Section.astro";
18
18
  import ProductCard from "@/components/catalog/storefront/ProductCard.astro";
19
19
  import {
20
20
  resolveSectionSource,
21
21
  DEFAULT_SECTION_LIMIT,
22
22
  type SectionSource,
23
- } from "@/lib/sections";
23
+ } from "@/lib/content/shared/sections";
24
24
 
25
25
  interface Tab {
26
26
  label: string;
@@ -9,14 +9,14 @@
9
9
  * that this component resolves through `Astro.locals.tot`.
10
10
  */
11
11
  import type { CatalogProduct } from "@tot/public-runtime";
12
- import Section from "@/components/Section.astro";
12
+ import Section from "@/components/content/storefront/Section.astro";
13
13
  import ProductCard from "@/components/catalog/storefront/ProductCard.astro";
14
- import EmptyState from "@/components/EmptyState.astro";
14
+ import EmptyState from "@/components/content/storefront/EmptyState.astro";
15
15
  import {
16
16
  resolveSectionSource,
17
17
  DEFAULT_SECTION_LIMIT,
18
18
  type SectionSource,
19
- } from "@/lib/sections";
19
+ } from "@/lib/content/shared/sections";
20
20
 
21
21
  interface Props {
22
22
  source?: SectionSource;
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import type { Review } from "@tot/public-runtime";
16
16
  import RatingStars from "./RatingStars.astro";
17
- import { formatDate } from "@/lib/format";
17
+ import { formatDate } from "@/lib/content/shared/format";
18
18
 
19
19
  interface Props {
20
20
  reviews: Review[];
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks";
17
17
  import type { CatalogImage } from "@tot/public-runtime";
18
- import { placeholderDataUri, isUsableImageUrl } from "@/lib/placeholder";
18
+ import { placeholderDataUri, isUsableImageUrl } from "@/lib/content/shared/placeholder";
19
19
  import { resolveImage } from "@/lib/assets/shared/imageAttrs";
20
20
 
21
21
  interface Props {
@@ -7,8 +7,8 @@
7
7
  * reduced-motion-safe entrance via CSS.
8
8
  */
9
9
  import { useEffect, useRef, useState } from "preact/hooks";
10
- import { formatPrice } from "@/lib/format";
11
- import { placeholderDataUri, isUsableImageUrl } from "@/lib/placeholder";
10
+ import { formatPrice } from "@/lib/content/shared/format";
11
+ import { placeholderDataUri, isUsableImageUrl } from "@/lib/content/shared/placeholder";
12
12
  import { withClientBase } from "@/lib/basePath";
13
13
 
14
14
  interface QV {
@@ -6,8 +6,8 @@
6
6
  * something to show (no layout shift, no empty state noise).
7
7
  */
8
8
  import { useEffect, useState } from "preact/hooks";
9
- import { formatPrice } from "@/lib/format";
10
- import { placeholderDataUri, isUsableImageUrl } from "@/lib/placeholder";
9
+ import { formatPrice } from "@/lib/content/shared/format";
10
+ import { placeholderDataUri, isUsableImageUrl } from "@/lib/content/shared/placeholder";
11
11
  import { withClientBase } from "@/lib/basePath";
12
12
 
13
13
  export interface RVItem {
@@ -12,8 +12,8 @@
12
12
  */
13
13
  import { useCallback, useEffect, useRef, useState } from "preact/hooks";
14
14
  import type { TypeaheadDoc } from "@/lib/catalog/search/index";
15
- import { formatPrice } from "@/lib/format";
16
- import { placeholderDataUri, isUsableImageUrl } from "@/lib/placeholder";
15
+ import { formatPrice } from "@/lib/content/shared/format";
16
+ import { placeholderDataUri, isUsableImageUrl } from "@/lib/content/shared/placeholder";
17
17
  import { withClientBase } from "@/lib/basePath";
18
18
 
19
19
  interface Props {
@@ -26,7 +26,7 @@ import type {
26
26
  MembershipStackingPolicy,
27
27
  } from "@tot/public-runtime";
28
28
  import { priceForPurchaseOption } from "@tot/public-runtime";
29
- import { formatPrice } from "@/lib/format";
29
+ import { formatPrice } from "@/lib/content/shared/format";
30
30
  import { useCheckoutHandoffCorrelation } from "@/lib/checkout/browser/useCheckoutHandoffCorrelation";
31
31
 
32
32
  export type PublicSelectorVariant = Pick<CatalogVariant,
@@ -7,8 +7,8 @@
7
7
  * reimplement verification here. Affirmation is remembered in localStorage.
8
8
  */
9
9
  import { useEffect, useRef, useState } from "preact/hooks";
10
- import type { ChromeAgeGate } from "@/lib/chrome/model";
11
- import { deriveAgeGateStorageKey, isSafeAgeGateHref, resolveAgeGateCopy } from "@/lib/chrome/model";
10
+ import type { ChromeAgeGate } from "@/lib/content/chrome/model";
11
+ import { deriveAgeGateStorageKey, isSafeAgeGateHref, resolveAgeGateCopy } from "@/lib/content/chrome/model";
12
12
 
13
13
  export interface Props {
14
14
  minAge: number;
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import { render } from "preact";
19
19
  import { useEffect } from "preact/hooks";
20
- import type { ChromeAgeGate } from "@/lib/chrome/model";
20
+ import type { ChromeAgeGate } from "@/lib/content/chrome/model";
21
21
  import AgeGate from "./AgeGate";
22
22
 
23
23
  export interface Props {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  /**
3
3
  * <AsyncStylesheet> — loads a non-critical stylesheet without blocking render,
4
- * and without FOUC, under the storefront's strict CSP (see lib/asyncCss.ts for
4
+ * and without FOUC, under the storefront's strict CSP (see lib/content/shared/asyncCss.ts for
5
5
  * why this can't be the usual `onload="this.rel='stylesheet'"` attribute
6
6
  * trick). Use for CSS a page doesn't need for first paint — e.g. a below-fold
7
7
  * section, an optional widget, a print stylesheet's screen equivalent. Do NOT
@@ -13,7 +13,7 @@
13
13
  * such link to `rel="stylesheet"` after it's fetched) plus a `<noscript>`
14
14
  * fallback so the styles still apply with JS disabled.
15
15
  */
16
- import { ASYNC_CSS_ATTR } from "@/lib/asyncCss";
16
+ import { ASYNC_CSS_ATTR } from "@/lib/content/shared/asyncCss";
17
17
 
18
18
  interface Props {
19
19
  href: string;
@@ -10,12 +10,12 @@
10
10
  * failing even 2.5.8's 24px floor on every page that renders a trail. The extra height centres
11
11
  * around the text, so the crumb does not move.
12
12
  *
13
- * Build `crumbs` with `siteTrail` (lib/breadcrumbs.ts) and pass the SAME array to `breadcrumbLd`.
13
+ * Build `crumbs` with `siteTrail` (lib/content/shared/breadcrumbs.ts) and pass the SAME array to `breadcrumbLd`.
14
14
  * `class` adds a hook for the page's own styles (`breadcrumbs` on the blog templates).
15
15
  */
16
16
  import { withBase } from "@/lib/basePath";
17
- import { pageUrlForm } from "@/lib/seo/urlForm";
18
- import type { Crumb } from "@/lib/breadcrumbs";
17
+ import { pageUrlForm } from "@/lib/content/seo/urlForm";
18
+ import type { Crumb } from "@/lib/content/shared/breadcrumbs";
19
19
 
20
20
  interface Props {
21
21
  crumbs: Crumb[];
@@ -3,11 +3,11 @@
3
3
  * <Seo> — per-page title/meta, Open Graph, Twitter card, canonical, JSON-LD.
4
4
  * (brief §8). Tenant-aware: OG image + site name come from the resolved tenant.
5
5
  */
6
- import { articleSeoMetaTags, resolveOgImage, type ArticleMeta } from "@/lib/seo/meta.js";
7
- import { withXDefault, type Alternate } from "@/lib/seo/alternates.js";
8
- import { safeJsonScriptContent } from "@/lib/jsonScript";
9
- import { documentTitle } from "@/lib/seo/documentTitle";
10
- import { canonicalUrl } from "@/lib/seo/urlForm";
6
+ import { articleSeoMetaTags, resolveOgImage, type ArticleMeta } from "@/lib/content/seo/meta.js";
7
+ import { withXDefault, type Alternate } from "@/lib/content/seo/alternates.js";
8
+ import { safeJsonScriptContent } from "@/lib/content/shared/jsonScript";
9
+ import { documentTitle } from "@/lib/content/seo/documentTitle";
10
+ import { canonicalUrl } from "@/lib/content/seo/urlForm";
11
11
 
12
12
  interface JsonLd {
13
13
  [key: string]: unknown;
@@ -4,12 +4,12 @@
4
4
  // component so the hero/grid/pagination markup, and the tenant-copy + pagination
5
5
  // contract it implements, can't drift between the two routes (fb-1791301493691-brzl6f).
6
6
  import Layout from "@/layouts/Layout.astro";
7
- import PostAccessBadge from "@/components/blog/PostAccessBadge.astro";
8
- import type { BlogPostSummary } from "@/lib/blog/types.js";
9
- import type { BlogIndexCopy } from "@/lib/blog/pagination.js";
10
- import type { BlogPresentation } from "@/lib/blog/presentation.js";
11
- import { categorySlug } from "@/lib/blog/collection.js";
12
- import { collectionPathsV1 } from "@/lib/blog/collectionPaths.js";
7
+ import PostAccessBadge from "@/components/content/storefront/blog/PostAccessBadge.astro";
8
+ import type { BlogPostSummary } from "@/lib/content/blog/types.js";
9
+ import type { BlogIndexCopy } from "@/lib/content/blog/pagination.js";
10
+ import type { BlogPresentation } from "@/lib/content/blog/presentation.js";
11
+ import { categorySlug } from "@/lib/content/blog/collection.js";
12
+ import { collectionPathsV1 } from "@/lib/content/blog/collectionPaths.js";
13
13
 
14
14
  interface Props {
15
15
  basePath: string;
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  // Paywall card shown under the teaser of a gated post the viewer can't read in
3
- // full. Mirrors the "Coming soon" host gate (`src/lib/auth/gatePage.ts`):
3
+ // full. Mirrors the "Coming soon" host gate (`src/lib/access/auth/gatePage.ts`):
4
4
  // badge + headline + one line of value + a single CTA — restyled with the site's
5
5
  // design tokens so it reads as native article chrome, and preceded by a fade that
6
6
  // dissolves the truncated body into the card.
7
- import type { BlogAccess } from "@/lib/blog/types.js";
7
+ import type { BlogAccess } from "@/lib/content/blog/types.js";
8
8
 
9
9
  interface Props {
10
10
  access: BlogAccess;
@@ -8,13 +8,13 @@
8
8
  * the request.
9
9
  */
10
10
  import Layout from "@/layouts/Layout.astro";
11
- import { sourceSeoTitle } from "@/lib/seo/documentTitle";
12
- import Breadcrumbs from "@/components/Breadcrumbs.astro";
13
- import BlogPaywall from "@/components/blog/BlogPaywall.astro";
14
- import ReactionBar from "@/components/blog/ReactionBar.astro";
15
- import ShareRow from "@/components/blog/ShareRow.astro";
16
- import { languageLabel } from "@/lib/i18n.js";
17
- import type { BlogPostViewPropsV1 } from "@/lib/blog/postView.js";
11
+ import { sourceSeoTitle } from "@/lib/content/seo/documentTitle";
12
+ import Breadcrumbs from "@/components/content/storefront/Breadcrumbs.astro";
13
+ import BlogPaywall from "@/components/content/storefront/blog/BlogPaywall.astro";
14
+ import ReactionBar from "@/components/content/storefront/blog/ReactionBar.astro";
15
+ import ShareRow from "@/components/content/storefront/blog/ShareRow.astro";
16
+ import { languageLabel } from "@/lib/content/shared/i18n.js";
17
+ import type { BlogPostViewPropsV1 } from "@/lib/content/blog/postView.js";
18
18
 
19
19
  type Props = BlogPostViewPropsV1;
20
20
 
@@ -3,7 +3,7 @@
3
3
  // `post.access` and renders nothing for public posts. No gating logic lives
4
4
  // here — entitlement is decided in the route via `viewerHasBlogAccess`; this
5
5
  // is purely a "this story is members-only" indicator on listings and archives.
6
- import type { BlogAccess } from "@/lib/blog/types.js";
6
+ import type { BlogAccess } from "@/lib/content/blog/types.js";
7
7
 
8
8
  interface Props {
9
9
  access?: BlogAccess;
@@ -2,9 +2,9 @@
2
2
  // Reader-facing card grid for a list of blog posts, shared by the collection's
3
3
  // category and tag index pages. `paths` are the collection's URLs for the space that serves
4
4
  // the page (collectionPathsV1); `basePath` is the tenant/preview path prefix from Astro.locals.
5
- import type { BlogPostSummary } from "@/lib/blog/types.js";
6
- import type { CollectionPathsV1 } from "@/lib/blog/collectionPaths.js";
7
- import PostAccessBadge from "@/components/blog/PostAccessBadge.astro";
5
+ import type { BlogPostSummary } from "@/lib/content/blog/types.js";
6
+ import type { CollectionPathsV1 } from "@/lib/content/blog/collectionPaths.js";
7
+ import PostAccessBadge from "@/components/content/storefront/blog/PostAccessBadge.astro";
8
8
 
9
9
  interface Props {
10
10
  posts: BlogPostSummary[];
@@ -8,7 +8,7 @@
8
8
  * moderation — an emoji tally, the first reader-sentiment signal (complements
9
9
  * view counts). Tenant/collection-generic: mounts on any post route.
10
10
  */
11
- import { getReactionCounts, REACTIONS, type Reaction } from "@/lib/blog/reactions.js";
11
+ import { getReactionCounts, REACTIONS, type Reaction } from "@/lib/content/blog/reactions.js";
12
12
  import { readKv } from "@/lib/runtimeEnv";
13
13
  import { withBase } from "@/lib/basePath";
14
14
 
@@ -5,7 +5,7 @@
5
5
  * works under the strict CSP (no inline handler, no `javascript:` URL) on every serving plane.
6
6
  * Each item carries `share-row__item--<target>` so tenant CSS can give it the source theme's icon.
7
7
  */
8
- import type { ShareLink } from "@/lib/blog/presentation.js";
8
+ import type { ShareLink } from "@/lib/content/blog/presentation.js";
9
9
 
10
10
  interface Props {
11
11
  links: ShareLink[];
@@ -7,9 +7,9 @@
7
7
  * Used by <SiteHeader> for the desktop nav, and registerable standalone in the
8
8
  * style guide.
9
9
  */
10
- import type { ChromeNavItem } from "@/lib/chrome/model";
11
- import NavDropdown from "@/components/chrome/NavDropdown.astro";
12
- import { CHROME_PLACEMENT } from "@/lib/chrome/trackingPlacements";
10
+ import type { ChromeNavItem } from "@/lib/content/chrome/model";
11
+ import NavDropdown from "@/components/content/storefront/chrome/NavDropdown.astro";
12
+ import { CHROME_PLACEMENT } from "@/lib/content/chrome/trackingPlacements";
13
13
 
14
14
  interface Props {
15
15
  items: ChromeNavItem[];
@@ -15,9 +15,9 @@
15
15
  * With an optional caret, a "NEW"-style badge, and a highlighted `flag` variant.
16
16
  * Tenant-agnostic; theme-token skinned.
17
17
  */
18
- import type { ChromeNavItem, ChromeLink } from "@/lib/chrome/model";
18
+ import type { ChromeNavItem, ChromeLink } from "@/lib/content/chrome/model";
19
19
  import { withBase } from "@/lib/basePath";
20
- import { isCurrentNavHref } from "@/lib/chrome/navCurrent";
20
+ import { isCurrentNavHref } from "@/lib/content/chrome/navCurrent";
21
21
  import { trackingAttributes } from "@tot/public-runtime";
22
22
 
23
23
  interface Props {
@@ -7,16 +7,16 @@
7
7
  * The newsletter is a plain POST form (progressive); it does not embed any cart
8
8
  * or checkout logic (commerce boundary).
9
9
  */
10
- import type { ChromeLink, FooterColumn, FooterNewsletter, SocialLink, ChromeLogo, FooterVariant } from "@/lib/chrome/model";
10
+ import type { ChromeLink, FooterColumn, FooterNewsletter, SocialLink, ChromeLogo, FooterVariant } from "@/lib/content/chrome/model";
11
11
  import { withBase } from "@/lib/basePath";
12
- import { CHROME_PLACEMENT } from "@/lib/chrome/trackingPlacements";
13
- import { resolveNewsletterAgeAttestation } from "@/lib/chrome/newsletterAgeAttestation";
12
+ import { CHROME_PLACEMENT } from "@/lib/content/chrome/trackingPlacements";
13
+ import { resolveNewsletterAgeAttestation } from "@/lib/content/chrome/newsletterAgeAttestation";
14
14
  import { trackingAttributes } from "@tot/public-runtime";
15
15
 
16
16
  interface Props {
17
17
  columns: FooterColumn[];
18
18
  brand?: { logo?: ChromeLogo; wordmark?: string; contact?: string[] };
19
- /** Content-shape variant (lib/chrome/model.ts FooterVariant). */
19
+ /** Content-shape variant (lib/content/chrome/model.ts FooterVariant). */
20
20
  variant?: FooterVariant;
21
21
  newsletter?: FooterNewsletter;
22
22
  /** Payment method labels rendered as chips (e.g. "Visa", "PayPal"). */
@@ -30,7 +30,7 @@ interface Props {
30
30
  legal?: string;
31
31
  /** Bottom-bar policy links (e.g. Privacy Policy, Terms), shown alongside `legal`.
32
32
  * The links of a `Legal`-titled footer column, which the caller MOVES out of
33
- * `columns` (lib/chrome/footerLegal.ts) — passing them in both places would
33
+ * `columns` (lib/content/chrome/footerLegal.ts) — passing them in both places would
34
34
  * render each one twice. */
35
35
  bottomLinks?: ChromeLink[];
36
36
  class?: string;
@@ -13,14 +13,14 @@
13
13
  * COMMERCE BOUNDARY: the cart is a LINK only — no cart state, no add-to-cart.
14
14
  * The count is a static affordance the managed cart can hydrate later.
15
15
  */
16
- import type { ChromeNavItem, ChromeLogo, ChromeCta, HeaderVariant } from "@/lib/chrome/model";
17
- import MegaMenu from "@/components/chrome/MegaMenu.astro";
18
- import NavDropdown from "@/components/chrome/NavDropdown.astro";
16
+ import type { ChromeNavItem, ChromeLogo, ChromeCta, HeaderVariant } from "@/lib/content/chrome/model";
17
+ import MegaMenu from "@/components/content/storefront/chrome/MegaMenu.astro";
18
+ import NavDropdown from "@/components/content/storefront/chrome/NavDropdown.astro";
19
19
  import SearchTypeahead from "@/components/catalog/storefront/islands/SearchTypeahead.tsx";
20
- import MobileNav from "@/components/islands/MobileNav.tsx";
20
+ import MobileNav from "@/components/content/storefront/islands/MobileNav.tsx";
21
21
  import { withBase } from "@/lib/basePath";
22
- import { ctaIdentityAttr } from "@/lib/chrome/ctaIdentity";
23
- import { CHROME_PLACEMENT } from "@/lib/chrome/trackingPlacements";
22
+ import { ctaIdentityAttr } from "@/lib/content/chrome/ctaIdentity";
23
+ import { CHROME_PLACEMENT } from "@/lib/content/chrome/trackingPlacements";
24
24
  import { trackingAttributes } from "@tot/public-runtime";
25
25
 
26
26
  interface Props {
@@ -28,7 +28,7 @@ interface Props {
28
28
  /** Fallback wordmark text when no logo image. */
29
29
  wordmark?: string;
30
30
  /**
31
- * Home/brand link target (lib/chrome/model.ts ChromeBrand.href). Run through
31
+ * Home/brand link target (lib/content/chrome/model.ts ChromeBrand.href). Run through
32
32
  * `withBase` same as every other same-origin href. Omit to default to "/".
33
33
  */
34
34
  brandHref?: string;
@@ -55,7 +55,7 @@ interface Props {
55
55
  /** A brand-fixed "dark" header bar (e.g. a navy bar with a light logo) vs. the default light bar. */
56
56
  variant?: "light" | "dark";
57
57
  /**
58
- * Content-shape variant (lib/chrome/model.ts HeaderVariant) — independent of
58
+ * Content-shape variant (lib/content/chrome/model.ts HeaderVariant) — independent of
59
59
  * `variant`'s light/dark TONE above. "minimal" (e.g. checkout/policy pages)
60
60
  * renders brand + a reduced action set only: no search, no marketing CTAs,
61
61
  * no saved-items affordance, no primary-nav bar, no mobile-menu toggle.
@@ -5,9 +5,9 @@
5
5
  * agnostic; theme-token skinned. Hidden on small screens (it's a desktop
6
6
  * convenience — the mobile menu carries these links).
7
7
  */
8
- import type { ChromeLink, SocialLink } from "@/lib/chrome/model";
8
+ import type { ChromeLink, SocialLink } from "@/lib/content/chrome/model";
9
9
  import { withBase } from "@/lib/basePath";
10
- import { CHROME_PLACEMENT } from "@/lib/chrome/trackingPlacements";
10
+ import { CHROME_PLACEMENT } from "@/lib/content/chrome/trackingPlacements";
11
11
  import { trackingAttributes } from "@tot/public-runtime";
12
12
 
13
13
  interface Props {
@@ -16,7 +16,7 @@
16
16
  */
17
17
  import type { CalloutModel, CalloutTone } from "@/lib/content/callout";
18
18
  import { calloutPresentation } from "@/lib/content/callout";
19
- import RichText from "@/components/content/RichText.astro";
19
+ import RichText from "@/components/content/storefront/content/RichText.astro";
20
20
 
21
21
  interface Props {
22
22
  callout: CalloutModel;
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  /** Static, provider-neutral commerce promo presentations. */
3
- import Section from "@/components/Section.astro";
4
- import type { PromoTilesBlock } from "@/lib/storyblok/content-model";
5
- import { promoTilesView } from "@/lib/homeVisualParity";
3
+ import Section from "@/components/content/storefront/Section.astro";
4
+ import type { PromoTilesBlock } from "@/lib/content/storyblok/content-model";
5
+ import { promoTilesView } from "@/lib/content/shared/homeVisualParity";
6
6
 
7
7
  interface Props {
8
8
  block: PromoTilesBlock;
@@ -14,9 +14,9 @@
14
14
  */
15
15
  import type { ProseSection } from "@/lib/content/prose";
16
16
  import { normalizeProse, withHeadingIds } from "@/lib/content/prose";
17
- import RichText from "@/components/content/RichText.astro";
18
- import Callout from "@/components/content/Callout.astro";
19
- import NeedsReviewCallout from "@/components/content/NeedsReviewCallout.astro";
17
+ import RichText from "@/components/content/storefront/content/RichText.astro";
18
+ import Callout from "@/components/content/storefront/content/Callout.astro";
19
+ import NeedsReviewCallout from "@/components/content/storefront/content/NeedsReviewCallout.astro";
20
20
 
21
21
  interface Props {
22
22
  sections: ProseSection[];
@@ -19,12 +19,12 @@
19
19
  * The eyebrow (`.hero__eyebrow`) reads `--color-hero-eyebrow` first, so a theme
20
20
  * recolours it with `color.hero-eyebrow` and tenant CSS can target the hook class.
21
21
  */
22
- import type { HeroBlock } from "@/lib/storyblok/content-model";
22
+ import type { HeroBlock } from "@/lib/content/storyblok/content-model";
23
23
  import type { CatalogProduct } from "@tot/public-runtime";
24
24
  import Img from "@/components/assets/storefront/Img.astro";
25
25
  import { withBase } from "@/lib/basePath";
26
- import { pageUrlForm } from "@/lib/seo/urlForm";
27
- import { heroSlideshowView } from "@/lib/heroSlideshow";
26
+ import { pageUrlForm } from "@/lib/content/seo/urlForm";
27
+ import { heroSlideshowView } from "@/lib/content/shared/heroSlideshow";
28
28
 
29
29
  interface Props {
30
30
  block: HeroBlock;
@@ -306,7 +306,7 @@ const notice = block.notice?.trim();
306
306
  </style>
307
307
 
308
308
  <script>
309
- import { heroAutoplayAllowed, nextHeroSlideIndex } from "@/lib/heroSlideshow";
309
+ import { heroAutoplayAllowed, nextHeroSlideIndex } from "@/lib/content/shared/heroSlideshow";
310
310
 
311
311
  const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
312
312