@fayz-ai/storefront 0.9.0 → 0.10.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/README.md +3 -3
- package/dist/app/createStorefrontApp.d.ts +65 -0
- package/dist/app/createStorefrontApp.d.ts.map +1 -0
- package/dist/{define.d.ts → app/define.d.ts} +3 -3
- package/dist/app/define.d.ts.map +1 -0
- package/dist/app/hydration.d.ts +37 -0
- package/dist/app/hydration.d.ts.map +1 -0
- package/dist/app/prerender.d.ts +57 -0
- package/dist/app/prerender.d.ts.map +1 -0
- package/dist/{router.d.ts → app/router.d.ts} +140 -113
- package/dist/app/router.d.ts.map +1 -0
- package/dist/{scaffold.d.ts → app/scaffold.d.ts} +2 -2
- package/dist/app/scaffold.d.ts.map +1 -0
- package/dist/app/serving.d.ts +70 -0
- package/dist/app/serving.d.ts.map +1 -0
- package/dist/app/static-render.d.ts +46 -0
- package/dist/app/static-render.d.ts.map +1 -0
- package/dist/blocks/block-at-path.d.ts +59 -0
- package/dist/blocks/block-at-path.d.ts.map +1 -0
- package/dist/blocks/page-blocks.d.ts +163 -0
- package/dist/blocks/page-blocks.d.ts.map +1 -0
- package/dist/blocks/page-data.d.ts +105 -0
- package/dist/blocks/page-data.d.ts.map +1 -0
- package/dist/{blocks.d.ts → blocks/registry.d.ts} +1 -1
- package/dist/blocks/registry.d.ts.map +1 -0
- package/dist/{sections.d.ts → blocks/sections.d.ts} +40 -2
- package/dist/blocks/sections.d.ts.map +1 -0
- package/dist/chunk-6B7H3IZ6.js +10232 -0
- package/dist/chunk-6B7H3IZ6.js.map +1 -0
- package/dist/chunk-6IXTENLB.js +162 -0
- package/dist/chunk-6IXTENLB.js.map +1 -0
- package/dist/components/PaymentTerms.d.ts +34 -0
- package/dist/components/PaymentTerms.d.ts.map +1 -0
- package/dist/components/SmoothImage.d.ts +1 -1
- package/dist/components/SmoothImage.d.ts.map +1 -1
- package/dist/components/account/CustomerAccountShell.d.ts.map +1 -0
- package/dist/components/account/SignInModal.d.ts.map +1 -0
- package/dist/components/cart/CartDrawer.d.ts.map +1 -0
- package/dist/components/cart/QuantityInput.d.ts.map +1 -0
- package/dist/components/checkout/DeliveryEstimator.d.ts.map +1 -0
- package/dist/components/collection/CategoryShowcase.d.ts +44 -0
- package/dist/components/collection/CategoryShowcase.d.ts.map +1 -0
- package/dist/components/collection/FiltersPanel.d.ts +19 -0
- package/dist/components/collection/FiltersPanel.d.ts.map +1 -0
- package/dist/components/collection/ProductGrid.d.ts.map +1 -0
- package/dist/components/layout/PageBodyBlocks.d.ts +40 -0
- package/dist/components/layout/PageBodyBlocks.d.ts.map +1 -0
- package/dist/components/layout/SearchOverlay.d.ts +13 -0
- package/dist/components/layout/SearchOverlay.d.ts.map +1 -0
- package/dist/components/layout/StorefrontErrorBoundary.d.ts.map +1 -0
- package/dist/components/layout/StorefrontFooter.d.ts.map +1 -0
- package/dist/components/layout/StorefrontHeader.d.ts.map +1 -0
- package/dist/components/layout/Toaster.d.ts.map +1 -0
- package/dist/components/marketing/CollectionSections.d.ts +463 -0
- package/dist/components/marketing/CollectionSections.d.ts.map +1 -0
- package/dist/components/marketing/ConversionSections.d.ts +221 -0
- package/dist/components/marketing/ConversionSections.d.ts.map +1 -0
- package/dist/components/marketing/EditorialSections.d.ts +248 -0
- package/dist/components/marketing/EditorialSections.d.ts.map +1 -0
- package/dist/components/marketing/EntityList.d.ts +97 -0
- package/dist/components/marketing/EntityList.d.ts.map +1 -0
- package/dist/components/marketing/FormBlock.d.ts +167 -0
- package/dist/components/marketing/FormBlock.d.ts.map +1 -0
- package/dist/components/marketing/HeroSection.d.ts +125 -0
- package/dist/components/marketing/HeroSection.d.ts.map +1 -0
- package/dist/components/marketing/MediaCarousel.d.ts +135 -0
- package/dist/components/marketing/MediaCarousel.d.ts.map +1 -0
- package/dist/components/marketing/MiscSections.d.ts +252 -0
- package/dist/components/marketing/MiscSections.d.ts.map +1 -0
- package/dist/components/order/OrderTrackingTimeline.d.ts.map +1 -0
- package/dist/components/product/ProductCard.d.ts +14 -0
- package/dist/components/product/ProductCard.d.ts.map +1 -0
- package/dist/components/product/ProductEnquiryForm.d.ts.map +1 -0
- package/dist/components/product/ProductGallery.d.ts +36 -0
- package/dist/components/product/ProductGallery.d.ts.map +1 -0
- package/dist/components/{ProductOptionSelector.d.ts → product/ProductOptionSelector.d.ts} +1 -1
- package/dist/components/product/ProductOptionSelector.d.ts.map +1 -0
- package/dist/components/product/ProductRail.d.ts +93 -0
- package/dist/components/product/ProductRail.d.ts.map +1 -0
- package/dist/components/product/ProductReviews.d.ts +39 -0
- package/dist/components/product/ProductReviews.d.ts.map +1 -0
- package/dist/components/product/ProductSlider.d.ts +169 -0
- package/dist/components/product/ProductSlider.d.ts.map +1 -0
- package/dist/components/product/ProductSpecs.d.ts.map +1 -0
- package/dist/components/product/RelatedProducts.d.ts.map +1 -0
- package/dist/{auth.d.ts → data/auth.d.ts} +9 -0
- package/dist/data/auth.d.ts.map +1 -0
- package/dist/data/facets.d.ts +39 -0
- package/dist/data/facets.d.ts.map +1 -0
- package/dist/data/loaders.d.ts +56 -0
- package/dist/data/loaders.d.ts.map +1 -0
- package/dist/data/order-status.d.ts.map +1 -0
- package/dist/data/product-options.d.ts +36 -0
- package/dist/data/product-options.d.ts.map +1 -0
- package/dist/diagnostics/seo-audit.d.ts +54 -0
- package/dist/diagnostics/seo-audit.d.ts.map +1 -0
- package/dist/diagnostics/seo-audit.js +3 -0
- package/dist/diagnostics/seo-audit.js.map +1 -0
- package/dist/document/change.d.ts +100 -0
- package/dist/document/change.d.ts.map +1 -0
- package/dist/{config.d.ts → document/config.d.ts} +126 -7
- package/dist/document/config.d.ts.map +1 -0
- package/dist/document/describe.d.ts +135 -0
- package/dist/document/describe.d.ts.map +1 -0
- package/dist/document/overlay.d.ts +58 -0
- package/dist/document/overlay.d.ts.map +1 -0
- package/dist/{presets.d.ts → document/presets.d.ts} +2 -2
- package/dist/document/presets.d.ts.map +1 -0
- package/dist/document/render.d.ts +171 -0
- package/dist/document/render.d.ts.map +1 -0
- package/dist/document/round-trip.d.ts +46 -0
- package/dist/document/round-trip.d.ts.map +1 -0
- package/dist/document/sections.d.ts +194 -0
- package/dist/document/sections.d.ts.map +1 -0
- package/dist/document/upgrade.d.ts +112 -0
- package/dist/document/upgrade.d.ts.map +1 -0
- package/dist/document/validate.d.ts +24 -0
- package/dist/document/validate.d.ts.map +1 -0
- package/dist/{component-contracts.d.ts → extend/component-contracts.d.ts} +74 -22
- package/dist/extend/component-contracts.d.ts.map +1 -0
- package/dist/extend/component-override.d.ts +38 -0
- package/dist/extend/component-override.d.ts.map +1 -0
- package/dist/extend/component-selectors.d.ts.map +1 -0
- package/dist/extend/editor-bridge.d.ts +59 -0
- package/dist/extend/editor-bridge.d.ts.map +1 -0
- package/dist/extend/extension-points.d.ts +103 -0
- package/dist/extend/extension-points.d.ts.map +1 -0
- package/dist/extend/slots.d.ts +216 -0
- package/dist/extend/slots.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +25 -6
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/use-address.d.ts +26 -0
- package/dist/hooks/use-address.d.ts.map +1 -0
- package/dist/hooks/use-cart.d.ts +3 -0
- package/dist/hooks/use-cart.d.ts.map +1 -0
- package/dist/hooks/use-catalog.d.ts +24 -0
- package/dist/hooks/use-catalog.d.ts.map +1 -0
- package/dist/hooks/use-categories.d.ts +19 -0
- package/dist/hooks/use-categories.d.ts.map +1 -0
- package/dist/hooks/use-checkout.d.ts +41 -0
- package/dist/hooks/use-checkout.d.ts.map +1 -0
- package/dist/hooks/use-discount-validator.d.ts +20 -0
- package/dist/hooks/use-discount-validator.d.ts.map +1 -0
- package/dist/hooks/use-enquiry.d.ts +7 -0
- package/dist/hooks/use-enquiry.d.ts.map +1 -0
- package/dist/hooks/{useMyOrders.d.ts → use-my-orders.d.ts} +1 -1
- package/dist/hooks/use-my-orders.d.ts.map +1 -0
- package/dist/hooks/use-order.d.ts +17 -0
- package/dist/hooks/use-order.d.ts.map +1 -0
- package/dist/hooks/use-payment-methods.d.ts +19 -0
- package/dist/hooks/use-payment-methods.d.ts.map +1 -0
- package/dist/hooks/use-policies.d.ts +25 -0
- package/dist/hooks/use-policies.d.ts.map +1 -0
- package/dist/hooks/use-product.d.ts +15 -0
- package/dist/hooks/use-product.d.ts.map +1 -0
- package/dist/hooks/{useProducts.d.ts → use-products.d.ts} +1 -1
- package/dist/hooks/use-products.d.ts.map +1 -0
- package/dist/hooks/use-region.d.ts +15 -0
- package/dist/hooks/use-region.d.ts.map +1 -0
- package/dist/hooks/use-shipping.d.ts +29 -0
- package/dist/hooks/use-shipping.d.ts.map +1 -0
- package/dist/hooks/use-storefront-actions.d.ts +12 -0
- package/dist/hooks/use-storefront-actions.d.ts.map +1 -0
- package/dist/hooks/use-storefront-head.d.ts +19 -0
- package/dist/hooks/use-storefront-head.d.ts.map +1 -0
- package/dist/hooks/use-storefront.d.ts +3 -0
- package/dist/hooks/use-storefront.d.ts.map +1 -0
- package/dist/index.d.ts +123 -54
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1311 -5012
- package/dist/index.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/seo.d.ts +26 -0
- package/dist/lib/seo.d.ts.map +1 -0
- package/dist/{testids.d.ts → lib/testids.d.ts} +21 -0
- package/dist/lib/testids.d.ts.map +1 -0
- package/dist/{theme.d.ts → lib/theme.d.ts} +41 -3
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/render.d.ts +5 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +359 -0
- package/dist/render.js.map +1 -0
- package/dist/stores/cart.store.d.ts +6 -2
- package/dist/stores/cart.store.d.ts.map +1 -1
- package/dist/stores/catalog.store.d.ts +11 -0
- package/dist/stores/catalog.store.d.ts.map +1 -1
- package/dist/views/CatalogPage.d.ts.map +1 -0
- package/dist/views/CheckoutPage.d.ts.map +1 -0
- package/dist/views/ContentPage.d.ts +11 -0
- package/dist/views/ContentPage.d.ts.map +1 -0
- package/dist/views/HomePage.d.ts +9 -0
- package/dist/views/HomePage.d.ts.map +1 -0
- package/dist/views/MyPurchasesPage.d.ts.map +1 -0
- package/dist/views/NotFoundPage.d.ts.map +1 -0
- package/dist/{pages → views}/OrderConfirmationPage.d.ts.map +1 -1
- package/dist/{pages → views}/PolicyPage.d.ts.map +1 -1
- package/dist/views/ProductDetailPage.d.ts.map +1 -0
- package/dist/views/StorefrontPage.d.ts +35 -0
- package/dist/views/StorefrontPage.d.ts.map +1 -0
- package/dist/workflows/checkout.d.ts +1 -1
- package/dist/workflows/checkout.d.ts.map +1 -1
- package/package.json +21 -14
- package/dist/auth.d.ts.map +0 -1
- package/dist/blocks.d.ts.map +0 -1
- package/dist/component-contracts.d.ts.map +0 -1
- package/dist/component-selectors.d.ts.map +0 -1
- package/dist/components/CartDrawer.d.ts.map +0 -1
- package/dist/components/CustomerAccountShell.d.ts.map +0 -1
- package/dist/components/DeliveryEstimator.d.ts.map +0 -1
- package/dist/components/FiltersPanel.d.ts +0 -3
- package/dist/components/FiltersPanel.d.ts.map +0 -1
- package/dist/components/OrderTrackingTimeline.d.ts.map +0 -1
- package/dist/components/ProductCard.d.ts +0 -4
- package/dist/components/ProductCard.d.ts.map +0 -1
- package/dist/components/ProductEnquiryForm.d.ts.map +0 -1
- package/dist/components/ProductGallery.d.ts +0 -22
- package/dist/components/ProductGallery.d.ts.map +0 -1
- package/dist/components/ProductGrid.d.ts.map +0 -1
- package/dist/components/ProductOptionSelector.d.ts.map +0 -1
- package/dist/components/ProductSpecs.d.ts.map +0 -1
- package/dist/components/QuantityInput.d.ts.map +0 -1
- package/dist/components/RelatedProducts.d.ts.map +0 -1
- package/dist/components/SignInModal.d.ts.map +0 -1
- package/dist/components/StorefrontErrorBoundary.d.ts.map +0 -1
- package/dist/components/StorefrontFooter.d.ts.map +0 -1
- package/dist/components/StorefrontHeader.d.ts.map +0 -1
- package/dist/components/Toaster.d.ts.map +0 -1
- package/dist/components/sections/CategoryShowcase.d.ts +0 -6
- package/dist/components/sections/CategoryShowcase.d.ts.map +0 -1
- package/dist/components/sections/HeroSection.d.ts +0 -9
- package/dist/components/sections/HeroSection.d.ts.map +0 -1
- package/dist/components/sections/MediaCarousel.d.ts +0 -11
- package/dist/components/sections/MediaCarousel.d.ts.map +0 -1
- package/dist/components/sections/MiscSections.d.ts +0 -33
- package/dist/components/sections/MiscSections.d.ts.map +0 -1
- package/dist/components/sections/ProductRail.d.ts +0 -9
- package/dist/components/sections/ProductRail.d.ts.map +0 -1
- package/dist/components/sections/ProductSlider.d.ts +0 -15
- package/dist/components/sections/ProductSlider.d.ts.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/createStorefrontApp.d.ts +0 -28
- package/dist/createStorefrontApp.d.ts.map +0 -1
- package/dist/define.d.ts.map +0 -1
- package/dist/format.d.ts.map +0 -1
- package/dist/hooks/useCategories.d.ts +0 -6
- package/dist/hooks/useCategories.d.ts.map +0 -1
- package/dist/hooks/useDiscountValidator.d.ts +0 -14
- package/dist/hooks/useDiscountValidator.d.ts.map +0 -1
- package/dist/hooks/useMyOrders.d.ts.map +0 -1
- package/dist/hooks/useProduct.d.ts +0 -7
- package/dist/hooks/useProduct.d.ts.map +0 -1
- package/dist/hooks/useProducts.d.ts.map +0 -1
- package/dist/hooks/useStorefront.d.ts +0 -35
- package/dist/hooks/useStorefront.d.ts.map +0 -1
- package/dist/hooks/useStorefrontHead.d.ts +0 -11
- package/dist/hooks/useStorefrontHead.d.ts.map +0 -1
- package/dist/motion.d.ts.map +0 -1
- package/dist/order-status.d.ts.map +0 -1
- package/dist/pages/CatalogPage.d.ts.map +0 -1
- package/dist/pages/CheckoutPage.d.ts.map +0 -1
- package/dist/pages/HomePage.d.ts +0 -9
- package/dist/pages/HomePage.d.ts.map +0 -1
- package/dist/pages/MyPurchasesPage.d.ts.map +0 -1
- package/dist/pages/NotFoundPage.d.ts.map +0 -1
- package/dist/pages/ProductDetailPage.d.ts.map +0 -1
- package/dist/presets.d.ts.map +0 -1
- package/dist/product-options.d.ts +0 -12
- package/dist/product-options.d.ts.map +0 -1
- package/dist/router.d.ts.map +0 -1
- package/dist/scaffold.d.ts.map +0 -1
- package/dist/sections.d.ts.map +0 -1
- package/dist/testids.d.ts.map +0 -1
- package/dist/theme.d.ts.map +0 -1
- package/src/auth.ts +0 -227
- package/src/blocks.tsx +0 -51
- package/src/catalog.ts +0 -3
- package/src/component-contracts.ts +0 -154
- package/src/component-selectors.ts +0 -31
- package/src/components/CartDrawer.tsx +0 -279
- package/src/components/CustomerAccountShell.tsx +0 -102
- package/src/components/DeliveryEstimator.tsx +0 -157
- package/src/components/FiltersPanel.tsx +0 -109
- package/src/components/OrderTrackingTimeline.tsx +0 -135
- package/src/components/Price.tsx +0 -32
- package/src/components/ProductCard.tsx +0 -120
- package/src/components/ProductEnquiryForm.tsx +0 -175
- package/src/components/ProductGallery.tsx +0 -174
- package/src/components/ProductGrid.tsx +0 -43
- package/src/components/ProductOptionSelector.tsx +0 -50
- package/src/components/ProductSpecs.tsx +0 -75
- package/src/components/QuantityInput.tsx +0 -52
- package/src/components/RelatedProducts.tsx +0 -40
- package/src/components/SignInModal.tsx +0 -120
- package/src/components/SmoothImage.tsx +0 -59
- package/src/components/StorefrontErrorBoundary.tsx +0 -51
- package/src/components/StorefrontFooter.tsx +0 -110
- package/src/components/StorefrontHeader.tsx +0 -477
- package/src/components/Toaster.tsx +0 -60
- package/src/components/sections/CategoryShowcase.tsx +0 -80
- package/src/components/sections/HeroSection.tsx +0 -193
- package/src/components/sections/MediaCarousel.tsx +0 -141
- package/src/components/sections/MiscSections.tsx +0 -158
- package/src/components/sections/ProductRail.tsx +0 -81
- package/src/components/sections/ProductSlider.tsx +0 -119
- package/src/config.ts +0 -229
- package/src/createStorefrontApp.tsx +0 -247
- package/src/define.ts +0 -34
- package/src/format.ts +0 -7
- package/src/hooks/index.ts +0 -6
- package/src/hooks/useCategories.ts +0 -26
- package/src/hooks/useDiscountValidator.ts +0 -43
- package/src/hooks/useMyOrders.ts +0 -41
- package/src/hooks/useProduct.ts +0 -36
- package/src/hooks/useProducts.ts +0 -39
- package/src/hooks/useStorefront.ts +0 -58
- package/src/hooks/useStorefrontHead.ts +0 -25
- package/src/index.ts +0 -202
- package/src/motion.tsx +0 -94
- package/src/order-status.ts +0 -33
- package/src/pages/CatalogPage.tsx +0 -118
- package/src/pages/CheckoutPage.tsx +0 -689
- package/src/pages/HomePage.tsx +0 -16
- package/src/pages/MyPurchasesPage.tsx +0 -311
- package/src/pages/NotFoundPage.tsx +0 -25
- package/src/pages/OrderConfirmationPage.tsx +0 -190
- package/src/pages/PolicyPage.tsx +0 -47
- package/src/pages/ProductDetailPage.tsx +0 -264
- package/src/presets.ts +0 -324
- package/src/product-options.ts +0 -63
- package/src/router.ts +0 -49
- package/src/scaffold.tsx +0 -115
- package/src/sections.ts +0 -116
- package/src/shop.ts +0 -4
- package/src/stores/cart.store.ts +0 -185
- package/src/stores/catalog.store.ts +0 -39
- package/src/stores/delivery.store.ts +0 -152
- package/src/stores/session.store.ts +0 -28
- package/src/stores/toast.store.ts +0 -43
- package/src/testids.ts +0 -136
- package/src/theme.ts +0 -194
- package/src/ui.ts +0 -5
- package/src/workflows/checkout.ts +0 -119
- /package/dist/components/{CustomerAccountShell.d.ts → account/CustomerAccountShell.d.ts} +0 -0
- /package/dist/components/{SignInModal.d.ts → account/SignInModal.d.ts} +0 -0
- /package/dist/components/{CartDrawer.d.ts → cart/CartDrawer.d.ts} +0 -0
- /package/dist/components/{QuantityInput.d.ts → cart/QuantityInput.d.ts} +0 -0
- /package/dist/components/{DeliveryEstimator.d.ts → checkout/DeliveryEstimator.d.ts} +0 -0
- /package/dist/components/{ProductGrid.d.ts → collection/ProductGrid.d.ts} +0 -0
- /package/dist/components/{StorefrontErrorBoundary.d.ts → layout/StorefrontErrorBoundary.d.ts} +0 -0
- /package/dist/components/{StorefrontFooter.d.ts → layout/StorefrontFooter.d.ts} +0 -0
- /package/dist/components/{StorefrontHeader.d.ts → layout/StorefrontHeader.d.ts} +0 -0
- /package/dist/components/{Toaster.d.ts → layout/Toaster.d.ts} +0 -0
- /package/dist/components/{OrderTrackingTimeline.d.ts → order/OrderTrackingTimeline.d.ts} +0 -0
- /package/dist/components/{ProductEnquiryForm.d.ts → product/ProductEnquiryForm.d.ts} +0 -0
- /package/dist/components/{ProductSpecs.d.ts → product/ProductSpecs.d.ts} +0 -0
- /package/dist/components/{RelatedProducts.d.ts → product/RelatedProducts.d.ts} +0 -0
- /package/dist/{order-status.d.ts → data/order-status.d.ts} +0 -0
- /package/dist/{component-selectors.d.ts → extend/component-selectors.d.ts} +0 -0
- /package/dist/{format.d.ts → lib/format.d.ts} +0 -0
- /package/dist/{motion.d.ts → lib/motion.d.ts} +0 -0
- /package/dist/{pages → views}/CatalogPage.d.ts +0 -0
- /package/dist/{pages → views}/CheckoutPage.d.ts +0 -0
- /package/dist/{pages → views}/MyPurchasesPage.d.ts +0 -0
- /package/dist/{pages → views}/NotFoundPage.d.ts +0 -0
- /package/dist/{pages → views}/OrderConfirmationPage.d.ts +0 -0
- /package/dist/{pages → views}/PolicyPage.d.ts +0 -0
- /package/dist/{pages → views}/ProductDetailPage.d.ts +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { BlockNode } from '@fayz-ai/core';
|
|
2
|
+
import type { PageDataEntry, PageDataNeed } from '../blocks/page-data';
|
|
3
|
+
/**
|
|
4
|
+
* What a route declared for the document head during a static render.
|
|
5
|
+
*
|
|
6
|
+
* Title and description are the client-rendered baseline. The rest is what a
|
|
7
|
+
* page needs to be worth anything once it HAS its own URL: a canonical so the
|
|
8
|
+
* engine knows which address is authoritative, an image and type so a share in
|
|
9
|
+
* a messaging app is not a grey rectangle, and JSON-LD so a product is eligible
|
|
10
|
+
* for a rich result instead of a plain blue link.
|
|
11
|
+
*/
|
|
12
|
+
export interface StaticHeadInput {
|
|
13
|
+
title?: string;
|
|
14
|
+
description?: string | null;
|
|
15
|
+
/** Absolute URL. A relative canonical is ignored by search engines. */
|
|
16
|
+
canonical?: string;
|
|
17
|
+
/** Absolute URL of the image a share should show. */
|
|
18
|
+
image?: string;
|
|
19
|
+
/** OpenGraph type — 'website', 'article', 'product'. */
|
|
20
|
+
type?: string;
|
|
21
|
+
/** schema.org objects, emitted as <script type="application/ld+json">. */
|
|
22
|
+
jsonLd?: Array<Record<string, unknown>>;
|
|
23
|
+
}
|
|
24
|
+
export interface StaticRenderPass {
|
|
25
|
+
/** Called once per scope, so a page plus its slots report the whole rendered
|
|
26
|
+
* composition — including forced-layout repairs (I7). */
|
|
27
|
+
tree(nodes: readonly BlockNode[]): void;
|
|
28
|
+
needs(needs: readonly PageDataNeed[]): void;
|
|
29
|
+
head(input: StaticHeadInput): void;
|
|
30
|
+
/** Resolved by an earlier pass, keyed by `dataNeedKey`. A key present here is
|
|
31
|
+
* served instead of being fetched. */
|
|
32
|
+
entries: Readonly<Record<string, PageDataEntry>>;
|
|
33
|
+
/**
|
|
34
|
+
* Absolute origin the rendered page will be served from, when the caller
|
|
35
|
+
* knows it. Pages need it to declare a canonical or an og:image, and a static
|
|
36
|
+
* render has no `window.location` to infer one from — so it travels with the
|
|
37
|
+
* pass rather than being guessed per page.
|
|
38
|
+
*/
|
|
39
|
+
origin?: string;
|
|
40
|
+
}
|
|
41
|
+
/** The pass currently rendering, or null — which is every browser render. */
|
|
42
|
+
export declare function currentStaticRenderPass(): StaticRenderPass | null;
|
|
43
|
+
/** Run one synchronous render with `pass` installed. Nesting restores the
|
|
44
|
+
* previous pass, so a renderer inside a renderer cannot strand the global. */
|
|
45
|
+
export declare function withStaticRenderPass<T>(pass: StaticRenderPass, render: () => T): T;
|
|
46
|
+
//# sourceMappingURL=static-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-render.d.ts","sourceRoot":"","sources":["../../src/app/static-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAYtE;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B;8DAC0D;IAC1D,IAAI,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAAA;IAC3C,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IAClC;2CACuC;IACvC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;IAChD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID,6EAA6E;AAC7E,wBAAgB,uBAAuB,IAAI,gBAAgB,GAAG,IAAI,CAEjE;AAED;+EAC+E;AAC/E,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAQlF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { BlockDescriptor } from '@fayz-ai/core';
|
|
2
|
+
import type { StoreDocument } from '../document/sections';
|
|
3
|
+
export interface BlockAtPath {
|
|
4
|
+
/** The path as given, echoed so a caller can key state by it. */
|
|
5
|
+
path: string;
|
|
6
|
+
/** The block's registered type. */
|
|
7
|
+
type: string;
|
|
8
|
+
/**
|
|
9
|
+
* Where this block's settings live: `<path>.props` for the nested form,
|
|
10
|
+
* `<path>` itself for the flat one. Both forms MIX inside one array, so a
|
|
11
|
+
* caller appending `.props` by hand is right about some blocks and silently
|
|
12
|
+
* wrong about the rest. Pass this to `settingChange` and it cannot happen.
|
|
13
|
+
*/
|
|
14
|
+
settingsPath: string;
|
|
15
|
+
/** Current values, whichever form they took — the form's initial state. */
|
|
16
|
+
props: Record<string, unknown>;
|
|
17
|
+
/** Empty when the block declares no settings, which is itself the answer. */
|
|
18
|
+
settings: BlockDescriptor['settings'];
|
|
19
|
+
/** For a caller that wants labels, help text or presets. */
|
|
20
|
+
descriptor: BlockDescriptor | null;
|
|
21
|
+
}
|
|
22
|
+
export type BlockAtPathError = {
|
|
23
|
+
code: 'unparseable-path';
|
|
24
|
+
message: string;
|
|
25
|
+
} | {
|
|
26
|
+
code: 'no-block-at-path';
|
|
27
|
+
message: string;
|
|
28
|
+
} | {
|
|
29
|
+
code: 'unknown-block';
|
|
30
|
+
message: string;
|
|
31
|
+
valid: string[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Resolve a picked path against a Store Document.
|
|
35
|
+
*
|
|
36
|
+
* Every failure names what went wrong and, for an unknown block, the valid set
|
|
37
|
+
* (I2) — an editor that silently renders an empty panel teaches a merchant that
|
|
38
|
+
* the editor is broken.
|
|
39
|
+
*/
|
|
40
|
+
export declare function blockAtPath(document: StoreDocument | Record<string, unknown>, path: string): {
|
|
41
|
+
ok: true;
|
|
42
|
+
block: BlockAtPath;
|
|
43
|
+
} | {
|
|
44
|
+
ok: false;
|
|
45
|
+
error: BlockAtPathError;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The change that saves one edited setting.
|
|
49
|
+
*
|
|
50
|
+
* Takes `settingsPath`, not the block's path: only `blockAtPath` has seen the
|
|
51
|
+
* node and knows which form it took. Hardcoding `.props.` here wrote an ignored
|
|
52
|
+
* key on every flat block — a save that reported success and changed nothing.
|
|
53
|
+
*/
|
|
54
|
+
export declare function settingChange(settingsPath: string, settingId: string, value: unknown): {
|
|
55
|
+
op: 'set' | 'remove';
|
|
56
|
+
path: string;
|
|
57
|
+
value?: unknown;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=block-at-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-at-path.d.ts","sourceRoot":"","sources":["../../src/blocks/block-at-path.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAUzD,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,6EAA6E;IAC7E,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IACrC,4DAA4D;IAC5D,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;CACnC;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AA0B/D;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,IAAI,EAAE,MAAM,GACX;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAmD3E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG;IACtF,EAAE,EAAE,KAAK,GAAG,QAAQ,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAMA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { BlockDataNeeds, BlockNode } from '@fayz-ai/core';
|
|
2
|
+
import type { StorefrontSection } from './sections';
|
|
3
|
+
import type { StorefrontTheme } from '../lib/theme';
|
|
4
|
+
/** Pages that are composed from blocks, and the `enabledOn` vocabulary.
|
|
5
|
+
* `content` is the editorial kind: a titled page that is nothing but blocks —
|
|
6
|
+
* no commerce body, no catalog assumptions. */
|
|
7
|
+
export type StorefrontPageKind = 'home' | 'catalog' | 'product' | 'collection' | 'content';
|
|
8
|
+
/**
|
|
9
|
+
* A block instance in a page tree — the general form.
|
|
10
|
+
*
|
|
11
|
+
* `id` matters more than it looks: two product rails on one page are
|
|
12
|
+
* indistinguishable without it, so an external editor cannot target one of them
|
|
13
|
+
* and an AI-generated diff cannot say which it changed. VTEX solved the same
|
|
14
|
+
* problem with `rich-text#hero`; this is the same idea spelled as a field.
|
|
15
|
+
*/
|
|
16
|
+
export interface StorefrontBlockRef {
|
|
17
|
+
/** Registered block id — an SDK section, a plugin block, or an app's own. */
|
|
18
|
+
type: string;
|
|
19
|
+
id?: string;
|
|
20
|
+
props?: Record<string, unknown>;
|
|
21
|
+
children?: readonly StorefrontBlockRef[];
|
|
22
|
+
/**
|
|
23
|
+
* Instance-level data needs, merged over the block meta's `data` declaration
|
|
24
|
+
* by need name — how a document points a block's loader at a route param
|
|
25
|
+
* (`{ products: { loader: 'products.list', params: { category: { $param:
|
|
26
|
+
* 'slug' } } } }`). Resolved once per page by the page-data scope.
|
|
27
|
+
*/
|
|
28
|
+
data?: BlockDataNeeds;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* What a page's block list accepts.
|
|
32
|
+
*
|
|
33
|
+
* The typed union keeps checking SDK sections (a bad `variant` is still a type
|
|
34
|
+
* error); the open ref form is what lets an app place its own registered block
|
|
35
|
+
* without casting.
|
|
36
|
+
*/
|
|
37
|
+
export type StorefrontBlockLike = StorefrontSection | StorefrontBlockRef;
|
|
38
|
+
export interface StorefrontPageConfig {
|
|
39
|
+
blocks: readonly StorefrontBlockLike[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* An editorial page, expressible entirely in the document: a slug, a title, a
|
|
43
|
+
* route, and blocks. This is the page kind that absorbs the "brand site half"
|
|
44
|
+
* of a store — biography, philosophy, press, collections — which today lives
|
|
45
|
+
* as hand-written custom routes (cristinarotondaro carries ~240 lines of them).
|
|
46
|
+
*
|
|
47
|
+
* The store chrome (header, footer, cart) still frames the page; what a
|
|
48
|
+
* content page does NOT get is a commerce body block or any catalog
|
|
49
|
+
* assumption. It is blocks all the way down.
|
|
50
|
+
*/
|
|
51
|
+
export interface StorefrontContentPageConfig extends StorefrontPageConfig {
|
|
52
|
+
/** Document/page title (`<title>` gets "<title> — <store>"). Defaults to the slug. */
|
|
53
|
+
title?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Route path. Defaults to `/<slug>`. May declare params (`/categoria/:slug`)
|
|
56
|
+
* — one page then serves every match, and its blocks read the params through
|
|
57
|
+
* `$param` loader bindings (M3). validateStore checks that every binding
|
|
58
|
+
* names a param the path declares.
|
|
59
|
+
*/
|
|
60
|
+
path?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Theme overlay applied ONLY inside this page, merged over the store theme.
|
|
63
|
+
*
|
|
64
|
+
* This is what makes a campaign page — a licensed line, a seasonal drop, a
|
|
65
|
+
* collab — expressible as a content page instead of a microsite. Stores
|
|
66
|
+
* routinely build those elsewhere and lose the funnel with them: the "buy"
|
|
67
|
+
* CTA leaves for another domain and the cart, the session and the
|
|
68
|
+
* attribution go with it.
|
|
69
|
+
*
|
|
70
|
+
* The overlay is emitted scoped to `[data-page="<slug>"]`, so a hot-pink
|
|
71
|
+
* summer drop cannot repaint the header, the cart drawer or any other route.
|
|
72
|
+
* It merges key by key, so a page that sets only `colors.primary` keeps the
|
|
73
|
+
* store's typography and every other token.
|
|
74
|
+
*/
|
|
75
|
+
theme?: Partial<StorefrontTheme>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Merge a page's theme overlay over the store theme.
|
|
79
|
+
*
|
|
80
|
+
* Nested groups merge rather than replace: a page declaring one colour must not
|
|
81
|
+
* silently drop the store's fonts, radii and brand tokens back to SDK defaults.
|
|
82
|
+
*/
|
|
83
|
+
export declare function mergePageTheme(base: StorefrontTheme | undefined, overlay: Partial<StorefrontTheme> | undefined): StorefrontTheme | undefined;
|
|
84
|
+
/** The wrapper attribute + selector a page's scoped theme is emitted under. */
|
|
85
|
+
export declare function pageThemeSelector(slug: string): string;
|
|
86
|
+
/** The params a route path pattern declares ('/categoria/:slug' → ['slug']). */
|
|
87
|
+
export declare function routePathParams(path: string): string[];
|
|
88
|
+
export interface StorefrontPagesConfig {
|
|
89
|
+
home?: StorefrontPageConfig;
|
|
90
|
+
catalog?: StorefrontPageConfig;
|
|
91
|
+
product?: StorefrontPageConfig;
|
|
92
|
+
collection?: StorefrontPageConfig;
|
|
93
|
+
/** Editorial pages, keyed by slug. */
|
|
94
|
+
content?: Record<string, StorefrontContentPageConfig>;
|
|
95
|
+
}
|
|
96
|
+
/** Route path of one content page (explicit `path`, or `/<slug>`). */
|
|
97
|
+
export declare function contentPagePath(slug: string, page: StorefrontContentPageConfig): string;
|
|
98
|
+
export interface ContentPageMatch {
|
|
99
|
+
slug: string;
|
|
100
|
+
page: StorefrontContentPageConfig;
|
|
101
|
+
/** Params extracted from the page's path pattern, when it declares any. */
|
|
102
|
+
params: Record<string, string>;
|
|
103
|
+
}
|
|
104
|
+
/** The content page a path resolves to, if the store declared one. Paths are
|
|
105
|
+
* patterns (`/categoria/:slug`), so one declared page can serve a family of
|
|
106
|
+
* URLs and hand the matched params to its blocks' `$param` bindings. */
|
|
107
|
+
export declare function matchContentPage(pages: StorefrontPagesConfig | undefined, path: string): ContentPageMatch | null;
|
|
108
|
+
/** Block ids for the native page bodies — Shopify's `main` section, by another name. */
|
|
109
|
+
export declare const CATALOG_BODY_BLOCK = "catalogBody";
|
|
110
|
+
export declare const PRODUCT_BODY_BLOCK = "productBody";
|
|
111
|
+
/**
|
|
112
|
+
* Keys that are block identity rather than props, in the nested form.
|
|
113
|
+
*
|
|
114
|
+
* Exported for the same reason `blockInstanceId` is: it must be ONE rule.
|
|
115
|
+
* Whoever asks "where do this block's settings live" — the renderer here, the
|
|
116
|
+
* editor via `blockAtPath`, the overlay's settings/structure guard — has to get
|
|
117
|
+
* the same answer, or an edit an editor accepts is one the renderer ignores.
|
|
118
|
+
*/
|
|
119
|
+
export declare const BLOCK_STRUCTURAL_KEYS: ReadonlySet<string>;
|
|
120
|
+
/**
|
|
121
|
+
* Does this entry keep its settings under `props` (nested form) or inline on
|
|
122
|
+
* the entry itself (flat form)?
|
|
123
|
+
*
|
|
124
|
+
* Both forms are first-class and they MIX inside one array — artorious's home
|
|
125
|
+
* page is 3 nested and 5 flat — so nothing may assume the shape from the path
|
|
126
|
+
* it took to get here.
|
|
127
|
+
*/
|
|
128
|
+
export declare function isNestedBlockRef(entry: unknown): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* The id a block instance is known by: the authored `id`, or `<type>-<index>`
|
|
131
|
+
* when it has none.
|
|
132
|
+
*
|
|
133
|
+
* Exported because it must be ONE rule. A block with no authored id still
|
|
134
|
+
* reaches the outside world under its synthesized id — `renderStore` reports
|
|
135
|
+
* it, an editor targets it, a generated diff names it — so `applyChange` has
|
|
136
|
+
* to resolve `blocks[#banner-0]` to the same entry the renderer called
|
|
137
|
+
* `banner-0`. Two implementations of this rule would make the id an agent is
|
|
138
|
+
* handed by one ability unusable by another.
|
|
139
|
+
*/
|
|
140
|
+
export declare function blockInstanceId(entry: unknown, index: number): string;
|
|
141
|
+
/** Normalize an authored block list into the block tree the renderer consumes. */
|
|
142
|
+
export declare function toBlockNodes(blocks: readonly StorefrontBlockLike[]): BlockNode[];
|
|
143
|
+
/**
|
|
144
|
+
* The default tree for a page kind — what the SDK renders when a store has not
|
|
145
|
+
* composed the page. For catalog and product that is the native body alone,
|
|
146
|
+
* which is why adopting `pages` is a no-op until a store adds something.
|
|
147
|
+
*/
|
|
148
|
+
export declare function defaultPageBlocks(kind: StorefrontPageKind): BlockNode[];
|
|
149
|
+
export interface PageBlockDiagnostic {
|
|
150
|
+
level: 'error' | 'warning';
|
|
151
|
+
rule: string;
|
|
152
|
+
detail: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Diagnostics for one composed page.
|
|
156
|
+
*
|
|
157
|
+
* These are reported, not enforced. A store in production must not go blank
|
|
158
|
+
* because a block was placed on a page its author did not anticipate — so the
|
|
159
|
+
* hard stop belongs in the editor (which reads the same `enabledOn` through
|
|
160
|
+
* `describeBlocks`), and this is the development-time equivalent.
|
|
161
|
+
*/
|
|
162
|
+
export declare function checkPageBlocks(kind: StorefrontPageKind, nodes: readonly BlockNode[]): PageBlockDiagnostic[];
|
|
163
|
+
//# sourceMappingURL=page-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-blocks.d.ts","sourceRoot":"","sources":["../../src/blocks/page-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { BlockDataNeed, BlockNode } from '@fayz-ai/core';
|
|
3
|
+
export type PageDataStatus = 'idle' | 'loading' | 'ready' | 'error';
|
|
4
|
+
export interface PageDataEntry {
|
|
5
|
+
status: 'loading' | 'ready' | 'error';
|
|
6
|
+
data?: unknown;
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
9
|
+
/** One collected, binding-resolved, deduped need. */
|
|
10
|
+
export interface PageDataNeed {
|
|
11
|
+
key: string;
|
|
12
|
+
loader: string;
|
|
13
|
+
params: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a declared need's param bindings against the page's route params and
|
|
17
|
+
* the declaring block's props (setting defaults filled in, so the declaration
|
|
18
|
+
* and the rendered block agree on unset props). A binding that resolves to
|
|
19
|
+
* `undefined` drops its param — dataNeedKey drops undefined anyway, so the
|
|
20
|
+
* declared need and a hook asking with explicit `undefined`s share a key.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveDataParams(need: BlockDataNeed, context: {
|
|
23
|
+
params: Record<string, string>;
|
|
24
|
+
props: Record<string, unknown>;
|
|
25
|
+
}): Record<string, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* Walk a block tree (children included) and collect every declared need,
|
|
28
|
+
* bindings resolved, deduped by canonical (loader, params) key.
|
|
29
|
+
*/
|
|
30
|
+
export declare function collectDataNeeds(nodes: readonly BlockNode[], routeParams?: Record<string, string>): PageDataNeed[];
|
|
31
|
+
/** Resolve ONE need through the provider port. Never throws: an unknown
|
|
32
|
+
* loader or a failing read becomes an 'error' entry for that need alone. */
|
|
33
|
+
export declare function resolvePageDataNeed(need: Pick<PageDataNeed, 'loader' | 'params'>): Promise<PageDataEntry>;
|
|
34
|
+
/** Resolve a set of needs concurrently, isolated per need. Test seam and the
|
|
35
|
+
* future server-side entry point — the scope component uses the same calls. */
|
|
36
|
+
export declare function resolvePageData(needs: readonly PageDataNeed[]): Promise<Record<string, PageDataEntry>>;
|
|
37
|
+
export interface PageDataScopeProps {
|
|
38
|
+
nodes: readonly BlockNode[];
|
|
39
|
+
/** Route params the tree's `$param` bindings resolve against. */
|
|
40
|
+
params?: Record<string, string>;
|
|
41
|
+
/**
|
|
42
|
+
* Pre-resolved entries, keyed by dataNeedKey — the server-side/static-render
|
|
43
|
+
* seam (L4): `resolvePageData(collectDataNeeds(nodes))` ahead of render,
|
|
44
|
+
* then hand the results in. Keys already 'ready' here are never re-fetched;
|
|
45
|
+
* anything missing resolves client-side as usual.
|
|
46
|
+
*/
|
|
47
|
+
initial?: Record<string, PageDataEntry>;
|
|
48
|
+
children: React.ReactNode;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Collects and resolves the data needs of one block tree, and provides the
|
|
52
|
+
* results. Scopes nest (a slot inside a page): a child scope reuses every
|
|
53
|
+
* entry an ancestor already resolved and only fetches its own remainder, so
|
|
54
|
+
* dedupe holds across the whole rendered page, not per tree.
|
|
55
|
+
*/
|
|
56
|
+
export declare function PageDataScope({ nodes, params, initial, children }: PageDataScopeProps): React.JSX.Element;
|
|
57
|
+
export interface UseLoaderResult<T> {
|
|
58
|
+
status: PageDataStatus;
|
|
59
|
+
data: T | null;
|
|
60
|
+
error: string | null;
|
|
61
|
+
/** Re-run the read (bypasses the page-resolved entry from then on). */
|
|
62
|
+
reload: () => void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A block's (or page's) read: `useLoader('products.list', { filter, limit })`.
|
|
66
|
+
*
|
|
67
|
+
* When a PageDataScope above already resolved the same (loader, params) pair —
|
|
68
|
+
* because this block, or ANY block on the page, declared it — the resolved
|
|
69
|
+
* entry is returned and no request is made. Otherwise the hook resolves the
|
|
70
|
+
* loader itself, through the same provider port, so a component used outside a
|
|
71
|
+
* composed page (a store's hand-written route) keeps working identically.
|
|
72
|
+
* Pass `null` params to disable the read.
|
|
73
|
+
*/
|
|
74
|
+
export declare function useLoader<T>(loader: string, params: Record<string, unknown> | null): UseLoaderResult<T>;
|
|
75
|
+
/**
|
|
76
|
+
* A BLOCK's named data need: `useBlockData(node, 'products', fallback)`.
|
|
77
|
+
*
|
|
78
|
+
* Reads the block's effective declaration — meta `data` with the document
|
|
79
|
+
* instance's `data` merged over it — and resolves its bindings with the SAME
|
|
80
|
+
* inputs the page resolver used (scope route params, node props over setting
|
|
81
|
+
* defaults), so the two always compute the same key. That is what makes a
|
|
82
|
+
* document able to rebind a param (`category: { $param: 'slug' }`) and have
|
|
83
|
+
* the rendered block follow: the block asks for its declared need, not for a
|
|
84
|
+
* hardcoded one.
|
|
85
|
+
*
|
|
86
|
+
* `fallback` covers the component being used directly as JSX (a store's
|
|
87
|
+
* hand-written route), where there is no node and no declaration to read.
|
|
88
|
+
*/
|
|
89
|
+
export declare function useBlockData<T>(node: BlockNode | undefined, name: string, fallback: {
|
|
90
|
+
loader: string;
|
|
91
|
+
params: Record<string, unknown>;
|
|
92
|
+
}): UseLoaderResult<T> & {
|
|
93
|
+
loader: string;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* What a block renders when its declared data failed: nothing for shoppers, a
|
|
97
|
+
* visible card for builders — the same visibility rule as a crashed block
|
|
98
|
+
* (M2's per-block error boundary, WooCommerce's `CURRENT_USER_IS_ADMIN ?
|
|
99
|
+
* onError : () => null`).
|
|
100
|
+
*/
|
|
101
|
+
export declare function BlockDataError({ loader, message }: {
|
|
102
|
+
loader: string;
|
|
103
|
+
message?: string | null;
|
|
104
|
+
}): React.JSX.Element | null;
|
|
105
|
+
//# sourceMappingURL=page-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-data.d.ts","sourceRoot":"","sources":["../../src/blocks/page-data.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,4 @@ import type { StorefrontSection } from './sections';
|
|
|
3
3
|
export declare function registerStorefrontBlocks(): void;
|
|
4
4
|
/** Convert the typed storefront section blueprint into a generic block tree. */
|
|
5
5
|
export declare function sectionsToBlocks(sections: readonly StorefrontSection[]): BlockNode[];
|
|
6
|
-
//# sourceMappingURL=
|
|
6
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/blocks/registry.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAkEnD,wBAAgB,wBAAwB,IAAI,IAAI,CA4C/C;AAKD,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,EAAE,CAKpF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { HeroVariant } from '
|
|
1
|
+
import type { HeroVariant } from '../lib/theme';
|
|
2
|
+
import type { StorefrontBlockLike } from './page-blocks';
|
|
2
3
|
import type React from 'react';
|
|
3
4
|
export interface HeroSlide {
|
|
4
5
|
title: string;
|
|
@@ -93,7 +94,20 @@ export type StorefrontSection = {
|
|
|
93
94
|
/** @deprecated Use StorefrontSection. Kept for existing generated stores. */
|
|
94
95
|
export type HomeSection = StorefrontSection;
|
|
95
96
|
export interface HomeConfig {
|
|
96
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Accepts an app's own registered block, not just the SDK's typed sections.
|
|
99
|
+
*
|
|
100
|
+
* `home` and `pages.home` are the same page written two ways, and
|
|
101
|
+
* `pages.home.blocks` has taken `StorefrontBlockLike` since the page-tree
|
|
102
|
+
* work — so the short form five of seven live stores actually write was the
|
|
103
|
+
* one that still could not name a block the union has never heard of. That
|
|
104
|
+
* asymmetry is what forced `sections: mySections as never`, which throws away
|
|
105
|
+
* type checking on the whole array to place one custom block.
|
|
106
|
+
*
|
|
107
|
+
* The typed union is still first in the union, so a bad `variant` on an SDK
|
|
108
|
+
* section remains a type error.
|
|
109
|
+
*/
|
|
110
|
+
sections: readonly StorefrontBlockLike[];
|
|
97
111
|
}
|
|
98
112
|
export interface NavLink {
|
|
99
113
|
label: string;
|
|
@@ -124,4 +138,28 @@ export interface FooterConfig {
|
|
|
124
138
|
}
|
|
125
139
|
/** Wide gradient SVG data-URI — deterministic hero/banner art, no network. */
|
|
126
140
|
export declare function bannerPlaceholder(label: string, hueA: number, hueB: number, w?: number, h?: number): string;
|
|
141
|
+
/**
|
|
142
|
+
* The aspect ratios the SDK's layouts are built around. A replacement image
|
|
143
|
+
* that honours these drops in; one that does not will letterbox or crop.
|
|
144
|
+
*
|
|
145
|
+
* product 3:4 portrait (cards, gallery) 750 × 1000
|
|
146
|
+
* banner ~21:9 wide (promo strips) 1600 × 700
|
|
147
|
+
* category 4:5 portrait (showcase tiles) 480 × 600
|
|
148
|
+
*
|
|
149
|
+
* `product` is 3:4 because that is what ProductCard's `imageAspect: 'portrait'`
|
|
150
|
+
* actually renders (`aspect-[3/4]`). Amboras's placeholder README prescribes
|
|
151
|
+
* "3:4 portrait (800x1000px)" — 800 × 1000 is 4:5, so following their pixels
|
|
152
|
+
* would letterbox every card by 5%. Ratios are worth copying; arithmetic is
|
|
153
|
+
* worth checking.
|
|
154
|
+
*/
|
|
155
|
+
export declare const PLACEHOLDER_ASPECTS: {
|
|
156
|
+
readonly product: readonly [750, 1000];
|
|
157
|
+
readonly banner: readonly [1600, 700];
|
|
158
|
+
readonly category: readonly [480, 600];
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Portrait product placeholder as an SVG data-URI — deterministic per product
|
|
162
|
+
* name, no network. Defaults to the prescribed 3:4.
|
|
163
|
+
*/
|
|
164
|
+
export declare function productPlaceholder(label: string, w?: number, h?: number): string;
|
|
127
165
|
//# sourceMappingURL=sections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/blocks/sections.ts"],"names":[],"mappings":"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"}
|