@fayz-ai/storefront 0.9.0 → 0.11.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.
Files changed (391) hide show
  1. package/README.md +3 -3
  2. package/dist/app/createStorefrontApp.d.ts +65 -0
  3. package/dist/app/createStorefrontApp.d.ts.map +1 -0
  4. package/dist/{define.d.ts → app/define.d.ts} +3 -3
  5. package/dist/app/define.d.ts.map +1 -0
  6. package/dist/app/hydration.d.ts +37 -0
  7. package/dist/app/hydration.d.ts.map +1 -0
  8. package/dist/app/prerender.d.ts +57 -0
  9. package/dist/app/prerender.d.ts.map +1 -0
  10. package/dist/{router.d.ts → app/router.d.ts} +140 -113
  11. package/dist/app/router.d.ts.map +1 -0
  12. package/dist/{scaffold.d.ts → app/scaffold.d.ts} +2 -2
  13. package/dist/app/scaffold.d.ts.map +1 -0
  14. package/dist/app/serving.d.ts +70 -0
  15. package/dist/app/serving.d.ts.map +1 -0
  16. package/dist/app/static-render.d.ts +46 -0
  17. package/dist/app/static-render.d.ts.map +1 -0
  18. package/dist/blocks/block-at-path.d.ts +59 -0
  19. package/dist/blocks/block-at-path.d.ts.map +1 -0
  20. package/dist/blocks/page-blocks.d.ts +163 -0
  21. package/dist/blocks/page-blocks.d.ts.map +1 -0
  22. package/dist/blocks/page-data.d.ts +105 -0
  23. package/dist/blocks/page-data.d.ts.map +1 -0
  24. package/dist/{blocks.d.ts → blocks/registry.d.ts} +1 -1
  25. package/dist/blocks/registry.d.ts.map +1 -0
  26. package/dist/{sections.d.ts → blocks/sections.d.ts} +40 -2
  27. package/dist/blocks/sections.d.ts.map +1 -0
  28. package/dist/chunk-6IXTENLB.js +162 -0
  29. package/dist/chunk-6IXTENLB.js.map +1 -0
  30. package/dist/chunk-SX3J3QIT.js +11046 -0
  31. package/dist/chunk-SX3J3QIT.js.map +1 -0
  32. package/dist/components/PaymentTerms.d.ts +34 -0
  33. package/dist/components/PaymentTerms.d.ts.map +1 -0
  34. package/dist/components/Skeleton.d.ts +17 -0
  35. package/dist/components/Skeleton.d.ts.map +1 -0
  36. package/dist/components/SmoothImage.d.ts +1 -1
  37. package/dist/components/SmoothImage.d.ts.map +1 -1
  38. package/dist/components/account/CustomerAccountShell.d.ts +17 -0
  39. package/dist/components/account/CustomerAccountShell.d.ts.map +1 -0
  40. package/dist/components/account/SignInModal.d.ts.map +1 -0
  41. package/dist/components/account/section.d.ts +15 -0
  42. package/dist/components/account/section.d.ts.map +1 -0
  43. package/dist/components/cart/CartDrawer.d.ts.map +1 -0
  44. package/dist/components/cart/QuantityInput.d.ts.map +1 -0
  45. package/dist/components/checkout/CheckoutPayment.d.ts +17 -0
  46. package/dist/components/checkout/CheckoutPayment.d.ts.map +1 -0
  47. package/dist/components/checkout/CheckoutSteps.d.ts +9 -0
  48. package/dist/components/checkout/CheckoutSteps.d.ts.map +1 -0
  49. package/dist/components/checkout/DeliveryEstimator.d.ts.map +1 -0
  50. package/dist/components/collection/CategoryShowcase.d.ts +44 -0
  51. package/dist/components/collection/CategoryShowcase.d.ts.map +1 -0
  52. package/dist/components/collection/FiltersPanel.d.ts +19 -0
  53. package/dist/components/collection/FiltersPanel.d.ts.map +1 -0
  54. package/dist/components/collection/ProductGrid.d.ts.map +1 -0
  55. package/dist/components/layout/PageBodyBlocks.d.ts +40 -0
  56. package/dist/components/layout/PageBodyBlocks.d.ts.map +1 -0
  57. package/dist/components/layout/SearchOverlay.d.ts +13 -0
  58. package/dist/components/layout/SearchOverlay.d.ts.map +1 -0
  59. package/dist/components/layout/StorefrontErrorBoundary.d.ts.map +1 -0
  60. package/dist/components/layout/StorefrontFooter.d.ts.map +1 -0
  61. package/dist/components/layout/StorefrontHeader.d.ts.map +1 -0
  62. package/dist/components/layout/Toaster.d.ts.map +1 -0
  63. package/dist/components/marketing/CollectionSections.d.ts +463 -0
  64. package/dist/components/marketing/CollectionSections.d.ts.map +1 -0
  65. package/dist/components/marketing/ConversionSections.d.ts +221 -0
  66. package/dist/components/marketing/ConversionSections.d.ts.map +1 -0
  67. package/dist/components/marketing/EditorialSections.d.ts +248 -0
  68. package/dist/components/marketing/EditorialSections.d.ts.map +1 -0
  69. package/dist/components/marketing/EntityList.d.ts +97 -0
  70. package/dist/components/marketing/EntityList.d.ts.map +1 -0
  71. package/dist/components/marketing/FormBlock.d.ts +167 -0
  72. package/dist/components/marketing/FormBlock.d.ts.map +1 -0
  73. package/dist/components/marketing/HeroSection.d.ts +125 -0
  74. package/dist/components/marketing/HeroSection.d.ts.map +1 -0
  75. package/dist/components/marketing/MediaCarousel.d.ts +135 -0
  76. package/dist/components/marketing/MediaCarousel.d.ts.map +1 -0
  77. package/dist/components/marketing/MiscSections.d.ts +252 -0
  78. package/dist/components/marketing/MiscSections.d.ts.map +1 -0
  79. package/dist/components/order/OrderTrackingTimeline.d.ts.map +1 -0
  80. package/dist/components/order/SuccessMark.d.ts +10 -0
  81. package/dist/components/order/SuccessMark.d.ts.map +1 -0
  82. package/dist/components/product/ProductCard.d.ts +14 -0
  83. package/dist/components/product/ProductCard.d.ts.map +1 -0
  84. package/dist/components/product/ProductEnquiryForm.d.ts.map +1 -0
  85. package/dist/components/product/ProductGallery.d.ts +36 -0
  86. package/dist/components/product/ProductGallery.d.ts.map +1 -0
  87. package/dist/components/{ProductOptionSelector.d.ts → product/ProductOptionSelector.d.ts} +1 -1
  88. package/dist/components/product/ProductOptionSelector.d.ts.map +1 -0
  89. package/dist/components/product/ProductRail.d.ts +93 -0
  90. package/dist/components/product/ProductRail.d.ts.map +1 -0
  91. package/dist/components/product/ProductReviews.d.ts +39 -0
  92. package/dist/components/product/ProductReviews.d.ts.map +1 -0
  93. package/dist/components/product/ProductSlider.d.ts +169 -0
  94. package/dist/components/product/ProductSlider.d.ts.map +1 -0
  95. package/dist/components/product/ProductSpecs.d.ts.map +1 -0
  96. package/dist/components/product/RelatedProducts.d.ts.map +1 -0
  97. package/dist/{auth.d.ts → data/auth.d.ts} +9 -0
  98. package/dist/data/auth.d.ts.map +1 -0
  99. package/dist/data/facets.d.ts +39 -0
  100. package/dist/data/facets.d.ts.map +1 -0
  101. package/dist/data/loaders.d.ts +52 -0
  102. package/dist/data/loaders.d.ts.map +1 -0
  103. package/dist/data/local-orders.d.ts +5 -0
  104. package/dist/data/local-orders.d.ts.map +1 -0
  105. package/dist/data/order-status.d.ts.map +1 -0
  106. package/dist/data/product-options.d.ts +36 -0
  107. package/dist/data/product-options.d.ts.map +1 -0
  108. package/dist/data/shipping-items.d.ts +20 -0
  109. package/dist/data/shipping-items.d.ts.map +1 -0
  110. package/dist/diagnostics/seo-audit.d.ts +54 -0
  111. package/dist/diagnostics/seo-audit.d.ts.map +1 -0
  112. package/dist/diagnostics/seo-audit.js +3 -0
  113. package/dist/diagnostics/seo-audit.js.map +1 -0
  114. package/dist/document/change.d.ts +100 -0
  115. package/dist/document/change.d.ts.map +1 -0
  116. package/dist/document/config.d.ts +311 -0
  117. package/dist/document/config.d.ts.map +1 -0
  118. package/dist/document/describe.d.ts +135 -0
  119. package/dist/document/describe.d.ts.map +1 -0
  120. package/dist/document/overlay.d.ts +58 -0
  121. package/dist/document/overlay.d.ts.map +1 -0
  122. package/dist/{presets.d.ts → document/presets.d.ts} +2 -2
  123. package/dist/document/presets.d.ts.map +1 -0
  124. package/dist/document/render.d.ts +171 -0
  125. package/dist/document/render.d.ts.map +1 -0
  126. package/dist/document/round-trip.d.ts +46 -0
  127. package/dist/document/round-trip.d.ts.map +1 -0
  128. package/dist/document/sections.d.ts +194 -0
  129. package/dist/document/sections.d.ts.map +1 -0
  130. package/dist/document/store-policy.d.ts +29 -0
  131. package/dist/document/store-policy.d.ts.map +1 -0
  132. package/dist/document/upgrade.d.ts +112 -0
  133. package/dist/document/upgrade.d.ts.map +1 -0
  134. package/dist/document/validate.d.ts +24 -0
  135. package/dist/document/validate.d.ts.map +1 -0
  136. package/dist/{component-contracts.d.ts → extend/component-contracts.d.ts} +74 -22
  137. package/dist/extend/component-contracts.d.ts.map +1 -0
  138. package/dist/extend/component-override.d.ts +38 -0
  139. package/dist/extend/component-override.d.ts.map +1 -0
  140. package/dist/extend/component-selectors.d.ts.map +1 -0
  141. package/dist/extend/editor-bridge.d.ts +59 -0
  142. package/dist/extend/editor-bridge.d.ts.map +1 -0
  143. package/dist/extend/extension-points.d.ts +103 -0
  144. package/dist/extend/extension-points.d.ts.map +1 -0
  145. package/dist/extend/slots.d.ts +216 -0
  146. package/dist/extend/slots.d.ts.map +1 -0
  147. package/dist/hooks/index.d.ts +25 -6
  148. package/dist/hooks/index.d.ts.map +1 -1
  149. package/dist/hooks/use-address.d.ts +26 -0
  150. package/dist/hooks/use-address.d.ts.map +1 -0
  151. package/dist/hooks/use-cart.d.ts +3 -0
  152. package/dist/hooks/use-cart.d.ts.map +1 -0
  153. package/dist/hooks/use-catalog.d.ts +24 -0
  154. package/dist/hooks/use-catalog.d.ts.map +1 -0
  155. package/dist/hooks/use-categories.d.ts +19 -0
  156. package/dist/hooks/use-categories.d.ts.map +1 -0
  157. package/dist/hooks/use-checkout.d.ts +41 -0
  158. package/dist/hooks/use-checkout.d.ts.map +1 -0
  159. package/dist/hooks/use-discount-validator.d.ts +20 -0
  160. package/dist/hooks/use-discount-validator.d.ts.map +1 -0
  161. package/dist/hooks/use-enquiry.d.ts +7 -0
  162. package/dist/hooks/use-enquiry.d.ts.map +1 -0
  163. package/dist/hooks/{useMyOrders.d.ts → use-my-orders.d.ts} +1 -1
  164. package/dist/hooks/use-my-orders.d.ts.map +1 -0
  165. package/dist/hooks/use-order.d.ts +17 -0
  166. package/dist/hooks/use-order.d.ts.map +1 -0
  167. package/dist/hooks/use-payment-methods.d.ts +19 -0
  168. package/dist/hooks/use-payment-methods.d.ts.map +1 -0
  169. package/dist/hooks/use-policies.d.ts +25 -0
  170. package/dist/hooks/use-policies.d.ts.map +1 -0
  171. package/dist/hooks/use-product.d.ts +15 -0
  172. package/dist/hooks/use-product.d.ts.map +1 -0
  173. package/dist/hooks/{useProducts.d.ts → use-products.d.ts} +1 -1
  174. package/dist/hooks/use-products.d.ts.map +1 -0
  175. package/dist/hooks/use-region.d.ts +15 -0
  176. package/dist/hooks/use-region.d.ts.map +1 -0
  177. package/dist/hooks/use-shipping.d.ts +32 -0
  178. package/dist/hooks/use-shipping.d.ts.map +1 -0
  179. package/dist/hooks/use-storefront-actions.d.ts +12 -0
  180. package/dist/hooks/use-storefront-actions.d.ts.map +1 -0
  181. package/dist/hooks/use-storefront-head.d.ts +19 -0
  182. package/dist/hooks/use-storefront-head.d.ts.map +1 -0
  183. package/dist/hooks/use-storefront.d.ts +3 -0
  184. package/dist/hooks/use-storefront.d.ts.map +1 -0
  185. package/dist/index.d.ts +124 -54
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +1310 -5010
  188. package/dist/index.js.map +1 -1
  189. package/dist/lib/errors.d.ts +9 -0
  190. package/dist/lib/errors.d.ts.map +1 -0
  191. package/dist/lib/format.d.ts.map +1 -0
  192. package/dist/lib/motion.d.ts.map +1 -0
  193. package/dist/lib/seo.d.ts +26 -0
  194. package/dist/lib/seo.d.ts.map +1 -0
  195. package/dist/{testids.d.ts → lib/testids.d.ts} +33 -0
  196. package/dist/lib/testids.d.ts.map +1 -0
  197. package/dist/{theme.d.ts → lib/theme.d.ts} +41 -3
  198. package/dist/lib/theme.d.ts.map +1 -0
  199. package/dist/render.d.ts +5 -0
  200. package/dist/render.d.ts.map +1 -0
  201. package/dist/render.js +359 -0
  202. package/dist/render.js.map +1 -0
  203. package/dist/stores/cart.store.d.ts +34 -2
  204. package/dist/stores/cart.store.d.ts.map +1 -1
  205. package/dist/stores/catalog.store.d.ts +11 -0
  206. package/dist/stores/catalog.store.d.ts.map +1 -1
  207. package/dist/stores/delivery.store.d.ts +9 -0
  208. package/dist/stores/delivery.store.d.ts.map +1 -1
  209. package/dist/views/CatalogPage.d.ts.map +1 -0
  210. package/dist/views/CheckoutPage.d.ts.map +1 -0
  211. package/dist/views/ContentPage.d.ts +11 -0
  212. package/dist/views/ContentPage.d.ts.map +1 -0
  213. package/dist/views/HomePage.d.ts +9 -0
  214. package/dist/views/HomePage.d.ts.map +1 -0
  215. package/dist/views/MyPurchasesPage.d.ts.map +1 -0
  216. package/dist/views/NotFoundPage.d.ts.map +1 -0
  217. package/dist/views/OrderConfirmationPage.d.ts.map +1 -0
  218. package/dist/{pages → views}/PolicyPage.d.ts.map +1 -1
  219. package/dist/views/ProductDetailPage.d.ts.map +1 -0
  220. package/dist/views/StorefrontPage.d.ts +35 -0
  221. package/dist/views/StorefrontPage.d.ts.map +1 -0
  222. package/dist/workflows/checkout.d.ts +1 -1
  223. package/dist/workflows/checkout.d.ts.map +1 -1
  224. package/package.json +21 -14
  225. package/dist/auth.d.ts.map +0 -1
  226. package/dist/blocks.d.ts.map +0 -1
  227. package/dist/component-contracts.d.ts.map +0 -1
  228. package/dist/component-selectors.d.ts.map +0 -1
  229. package/dist/components/CartDrawer.d.ts.map +0 -1
  230. package/dist/components/CustomerAccountShell.d.ts +0 -13
  231. package/dist/components/CustomerAccountShell.d.ts.map +0 -1
  232. package/dist/components/DeliveryEstimator.d.ts.map +0 -1
  233. package/dist/components/FiltersPanel.d.ts +0 -3
  234. package/dist/components/FiltersPanel.d.ts.map +0 -1
  235. package/dist/components/OrderTrackingTimeline.d.ts.map +0 -1
  236. package/dist/components/ProductCard.d.ts +0 -4
  237. package/dist/components/ProductCard.d.ts.map +0 -1
  238. package/dist/components/ProductEnquiryForm.d.ts.map +0 -1
  239. package/dist/components/ProductGallery.d.ts +0 -22
  240. package/dist/components/ProductGallery.d.ts.map +0 -1
  241. package/dist/components/ProductGrid.d.ts.map +0 -1
  242. package/dist/components/ProductOptionSelector.d.ts.map +0 -1
  243. package/dist/components/ProductSpecs.d.ts.map +0 -1
  244. package/dist/components/QuantityInput.d.ts.map +0 -1
  245. package/dist/components/RelatedProducts.d.ts.map +0 -1
  246. package/dist/components/SignInModal.d.ts.map +0 -1
  247. package/dist/components/StorefrontErrorBoundary.d.ts.map +0 -1
  248. package/dist/components/StorefrontFooter.d.ts.map +0 -1
  249. package/dist/components/StorefrontHeader.d.ts.map +0 -1
  250. package/dist/components/Toaster.d.ts.map +0 -1
  251. package/dist/components/sections/CategoryShowcase.d.ts +0 -6
  252. package/dist/components/sections/CategoryShowcase.d.ts.map +0 -1
  253. package/dist/components/sections/HeroSection.d.ts +0 -9
  254. package/dist/components/sections/HeroSection.d.ts.map +0 -1
  255. package/dist/components/sections/MediaCarousel.d.ts +0 -11
  256. package/dist/components/sections/MediaCarousel.d.ts.map +0 -1
  257. package/dist/components/sections/MiscSections.d.ts +0 -33
  258. package/dist/components/sections/MiscSections.d.ts.map +0 -1
  259. package/dist/components/sections/ProductRail.d.ts +0 -9
  260. package/dist/components/sections/ProductRail.d.ts.map +0 -1
  261. package/dist/components/sections/ProductSlider.d.ts +0 -15
  262. package/dist/components/sections/ProductSlider.d.ts.map +0 -1
  263. package/dist/config.d.ts +0 -174
  264. package/dist/config.d.ts.map +0 -1
  265. package/dist/createStorefrontApp.d.ts +0 -28
  266. package/dist/createStorefrontApp.d.ts.map +0 -1
  267. package/dist/define.d.ts.map +0 -1
  268. package/dist/format.d.ts.map +0 -1
  269. package/dist/hooks/useCategories.d.ts +0 -6
  270. package/dist/hooks/useCategories.d.ts.map +0 -1
  271. package/dist/hooks/useDiscountValidator.d.ts +0 -14
  272. package/dist/hooks/useDiscountValidator.d.ts.map +0 -1
  273. package/dist/hooks/useMyOrders.d.ts.map +0 -1
  274. package/dist/hooks/useProduct.d.ts +0 -7
  275. package/dist/hooks/useProduct.d.ts.map +0 -1
  276. package/dist/hooks/useProducts.d.ts.map +0 -1
  277. package/dist/hooks/useStorefront.d.ts +0 -35
  278. package/dist/hooks/useStorefront.d.ts.map +0 -1
  279. package/dist/hooks/useStorefrontHead.d.ts +0 -11
  280. package/dist/hooks/useStorefrontHead.d.ts.map +0 -1
  281. package/dist/motion.d.ts.map +0 -1
  282. package/dist/order-status.d.ts.map +0 -1
  283. package/dist/pages/CatalogPage.d.ts.map +0 -1
  284. package/dist/pages/CheckoutPage.d.ts.map +0 -1
  285. package/dist/pages/HomePage.d.ts +0 -9
  286. package/dist/pages/HomePage.d.ts.map +0 -1
  287. package/dist/pages/MyPurchasesPage.d.ts.map +0 -1
  288. package/dist/pages/NotFoundPage.d.ts.map +0 -1
  289. package/dist/pages/OrderConfirmationPage.d.ts.map +0 -1
  290. package/dist/pages/ProductDetailPage.d.ts.map +0 -1
  291. package/dist/presets.d.ts.map +0 -1
  292. package/dist/product-options.d.ts +0 -12
  293. package/dist/product-options.d.ts.map +0 -1
  294. package/dist/router.d.ts.map +0 -1
  295. package/dist/scaffold.d.ts.map +0 -1
  296. package/dist/sections.d.ts.map +0 -1
  297. package/dist/testids.d.ts.map +0 -1
  298. package/dist/theme.d.ts.map +0 -1
  299. package/src/auth.ts +0 -227
  300. package/src/blocks.tsx +0 -51
  301. package/src/catalog.ts +0 -3
  302. package/src/component-contracts.ts +0 -154
  303. package/src/component-selectors.ts +0 -31
  304. package/src/components/CartDrawer.tsx +0 -279
  305. package/src/components/CustomerAccountShell.tsx +0 -102
  306. package/src/components/DeliveryEstimator.tsx +0 -157
  307. package/src/components/FiltersPanel.tsx +0 -109
  308. package/src/components/OrderTrackingTimeline.tsx +0 -135
  309. package/src/components/Price.tsx +0 -32
  310. package/src/components/ProductCard.tsx +0 -120
  311. package/src/components/ProductEnquiryForm.tsx +0 -175
  312. package/src/components/ProductGallery.tsx +0 -174
  313. package/src/components/ProductGrid.tsx +0 -43
  314. package/src/components/ProductOptionSelector.tsx +0 -50
  315. package/src/components/ProductSpecs.tsx +0 -75
  316. package/src/components/QuantityInput.tsx +0 -52
  317. package/src/components/RelatedProducts.tsx +0 -40
  318. package/src/components/SignInModal.tsx +0 -120
  319. package/src/components/SmoothImage.tsx +0 -59
  320. package/src/components/StorefrontErrorBoundary.tsx +0 -51
  321. package/src/components/StorefrontFooter.tsx +0 -110
  322. package/src/components/StorefrontHeader.tsx +0 -477
  323. package/src/components/Toaster.tsx +0 -60
  324. package/src/components/sections/CategoryShowcase.tsx +0 -80
  325. package/src/components/sections/HeroSection.tsx +0 -193
  326. package/src/components/sections/MediaCarousel.tsx +0 -141
  327. package/src/components/sections/MiscSections.tsx +0 -158
  328. package/src/components/sections/ProductRail.tsx +0 -81
  329. package/src/components/sections/ProductSlider.tsx +0 -119
  330. package/src/config.ts +0 -229
  331. package/src/createStorefrontApp.tsx +0 -247
  332. package/src/define.ts +0 -34
  333. package/src/format.ts +0 -7
  334. package/src/hooks/index.ts +0 -6
  335. package/src/hooks/useCategories.ts +0 -26
  336. package/src/hooks/useDiscountValidator.ts +0 -43
  337. package/src/hooks/useMyOrders.ts +0 -41
  338. package/src/hooks/useProduct.ts +0 -36
  339. package/src/hooks/useProducts.ts +0 -39
  340. package/src/hooks/useStorefront.ts +0 -58
  341. package/src/hooks/useStorefrontHead.ts +0 -25
  342. package/src/index.ts +0 -202
  343. package/src/motion.tsx +0 -94
  344. package/src/order-status.ts +0 -33
  345. package/src/pages/CatalogPage.tsx +0 -118
  346. package/src/pages/CheckoutPage.tsx +0 -689
  347. package/src/pages/HomePage.tsx +0 -16
  348. package/src/pages/MyPurchasesPage.tsx +0 -311
  349. package/src/pages/NotFoundPage.tsx +0 -25
  350. package/src/pages/OrderConfirmationPage.tsx +0 -190
  351. package/src/pages/PolicyPage.tsx +0 -47
  352. package/src/pages/ProductDetailPage.tsx +0 -264
  353. package/src/presets.ts +0 -324
  354. package/src/product-options.ts +0 -63
  355. package/src/router.ts +0 -49
  356. package/src/scaffold.tsx +0 -115
  357. package/src/sections.ts +0 -116
  358. package/src/shop.ts +0 -4
  359. package/src/stores/cart.store.ts +0 -185
  360. package/src/stores/catalog.store.ts +0 -39
  361. package/src/stores/delivery.store.ts +0 -152
  362. package/src/stores/session.store.ts +0 -28
  363. package/src/stores/toast.store.ts +0 -43
  364. package/src/testids.ts +0 -136
  365. package/src/theme.ts +0 -194
  366. package/src/ui.ts +0 -5
  367. package/src/workflows/checkout.ts +0 -119
  368. /package/dist/components/{SignInModal.d.ts → account/SignInModal.d.ts} +0 -0
  369. /package/dist/components/{CartDrawer.d.ts → cart/CartDrawer.d.ts} +0 -0
  370. /package/dist/components/{QuantityInput.d.ts → cart/QuantityInput.d.ts} +0 -0
  371. /package/dist/components/{DeliveryEstimator.d.ts → checkout/DeliveryEstimator.d.ts} +0 -0
  372. /package/dist/components/{ProductGrid.d.ts → collection/ProductGrid.d.ts} +0 -0
  373. /package/dist/components/{StorefrontErrorBoundary.d.ts → layout/StorefrontErrorBoundary.d.ts} +0 -0
  374. /package/dist/components/{StorefrontFooter.d.ts → layout/StorefrontFooter.d.ts} +0 -0
  375. /package/dist/components/{StorefrontHeader.d.ts → layout/StorefrontHeader.d.ts} +0 -0
  376. /package/dist/components/{Toaster.d.ts → layout/Toaster.d.ts} +0 -0
  377. /package/dist/components/{OrderTrackingTimeline.d.ts → order/OrderTrackingTimeline.d.ts} +0 -0
  378. /package/dist/components/{ProductEnquiryForm.d.ts → product/ProductEnquiryForm.d.ts} +0 -0
  379. /package/dist/components/{ProductSpecs.d.ts → product/ProductSpecs.d.ts} +0 -0
  380. /package/dist/components/{RelatedProducts.d.ts → product/RelatedProducts.d.ts} +0 -0
  381. /package/dist/{order-status.d.ts → data/order-status.d.ts} +0 -0
  382. /package/dist/{component-selectors.d.ts → extend/component-selectors.d.ts} +0 -0
  383. /package/dist/{format.d.ts → lib/format.d.ts} +0 -0
  384. /package/dist/{motion.d.ts → lib/motion.d.ts} +0 -0
  385. /package/dist/{pages → views}/CatalogPage.d.ts +0 -0
  386. /package/dist/{pages → views}/CheckoutPage.d.ts +0 -0
  387. /package/dist/{pages → views}/MyPurchasesPage.d.ts +0 -0
  388. /package/dist/{pages → views}/NotFoundPage.d.ts +0 -0
  389. /package/dist/{pages → views}/OrderConfirmationPage.d.ts +0 -0
  390. /package/dist/{pages → views}/PolicyPage.d.ts +0 -0
  391. /package/dist/{pages → views}/ProductDetailPage.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diagnostics/seo-audit.ts"],"names":[],"mappings":"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","file":"chunk-6IXTENLB.js","sourcesContent":["// ---------------------------------------------------------------------------\n// What a rendered storefront page is actually worth to a crawler.\n//\n// The audit runs over a plain description of a page rather than over a live\n// DOM, so the same rules answer three different questions: a dev toolbar\n// inspecting the page it is sitting in, a CI check parsing fetched HTML, and a\n// prerender pass validating what it just wrote. Rules that live in three places\n// disagree within a month.\n//\n// Every finding carries `why`. A score with no explanation tells you a page is\n// a 62 and leaves you guessing; the point is to say which sentence of HTML is\n// missing and what it costs.\n// ---------------------------------------------------------------------------\n\nexport type SeoFindingStatus = 'pass' | 'warn' | 'fail'\n\nexport interface SeoFinding {\n id: string\n label: string\n status: SeoFindingStatus\n /** What was actually found. */\n detail: string\n /** Why it matters — the consequence, not the rule. */\n why: string\n /** Weight in the score. Higher = more consequential. */\n weight: number\n}\n\nexport interface SeoAuditInput {\n /** In-app path, used to detect fragment addressing. */\n path: string\n /** Full URL as the browser sees it, when available. */\n url?: string\n title?: string | null\n meta: Array<{ name?: string; property?: string; content: string }>\n links: Array<{ rel: string; href: string }>\n /** `@type` of every JSON-LD block on the page. */\n jsonLdTypes: string[]\n h1Count: number\n imageCount: number\n imagesMissingAlt: number\n /** Text length of the main content region — the body a crawler indexes. */\n contentTextLength: number\n /** Number of loading placeholders still in the markup. */\n skeletonCount: number\n /** HTTP status, when the caller knows it. */\n statusCode?: number\n}\n\nexport interface SeoAuditResult {\n /** 0–100, weighted by consequence. */\n score: number\n grade: 'A' | 'B' | 'C' | 'D' | 'F'\n findings: SeoFinding[]\n passed: number\n total: number\n}\n\nconst metaContent = (input: SeoAuditInput, key: string): string | undefined =>\n input.meta.find((m) => m.name === key || m.property === key)?.content?.trim() || undefined\n\nfunction gradeFor(score: number): SeoAuditResult['grade'] {\n if (score >= 90) return 'A'\n if (score >= 75) return 'B'\n if (score >= 60) return 'C'\n if (score >= 40) return 'D'\n return 'F'\n}\n\nexport function auditStorefrontSeo(input: SeoAuditInput): SeoAuditResult {\n const f: SeoFinding[] = []\n const add = (\n id: string,\n label: string,\n status: SeoFindingStatus,\n detail: string,\n why: string,\n weight: number,\n ) => f.push({ id, label, status, detail, why, weight })\n\n // --- Addressing -----------------------------------------------------------\n const isFragment = (input.url ?? input.path).includes('#/')\n add(\n 'real-url',\n 'Real URL',\n isFragment ? 'fail' : 'pass',\n isFragment ? 'Page is addressed by fragment (#/…)' : input.path,\n 'A URL fragment is never sent to the server, so every page of the store collapses into one address: one entry in the index, one set of meta tags, no per-page link preview, and nothing to prerender.',\n 25,\n )\n\n // --- Server-rendered body -------------------------------------------------\n const hasBody = input.contentTextLength >= 200\n add(\n 'server-content',\n 'Content in the HTML',\n hasBody ? (input.skeletonCount > 0 ? 'warn' : 'pass') : 'fail',\n `${input.contentTextLength} chars of main content` +\n (input.skeletonCount > 0 ? `, ${input.skeletonCount} loading placeholders still present` : ''),\n 'Crawlers do run JavaScript, but on a slower second pass and with less weight. Content already in the HTML is indexed on the first pass, and is what a link preview or a text-only client sees at all.',\n 20,\n )\n\n // --- Title ----------------------------------------------------------------\n const title = input.title?.trim()\n const titleLen = title?.length ?? 0\n add(\n 'title',\n 'Title',\n !title ? 'fail' : titleLen > 60 || titleLen < 15 ? 'warn' : 'pass',\n title ? `${titleLen} chars — “${title.slice(0, 70)}”` : 'missing',\n 'The title is the clickable line in search results and the tab name. Under ~15 chars wastes the slot; over ~60 gets truncated mid-word.',\n 15,\n )\n\n // --- Description ----------------------------------------------------------\n const desc = metaContent(input, 'description')\n const descLen = desc?.length ?? 0\n add(\n 'description',\n 'Meta description',\n !desc ? 'fail' : descLen > 160 || descLen < 50 ? 'warn' : 'pass',\n desc ? `${descLen} chars` : 'missing',\n 'Not a ranking factor, but it is the snippet under the title. Absent, the engine invents one from page text; over ~160 chars it is cut off.',\n 10,\n )\n\n // --- Canonical ------------------------------------------------------------\n const canonical = input.links.find((l) => l.rel === 'canonical')?.href\n const canonicalAbsolute = canonical?.startsWith('http') ?? false\n add(\n 'canonical',\n 'Canonical URL',\n !canonical ? 'fail' : !canonicalAbsolute ? 'warn' : 'pass',\n canonical ?? 'missing',\n 'Tells the engine which URL is authoritative when the same page is reachable with tracking parameters. Must be absolute — a relative canonical is ignored.',\n 10,\n )\n\n // --- Social ---------------------------------------------------------------\n const ogTitle = metaContent(input, 'og:title')\n const ogImage = metaContent(input, 'og:image')\n const ogType = metaContent(input, 'og:type')\n const socialOk = Boolean(ogTitle && ogImage)\n add(\n 'social',\n 'Link preview (OpenGraph)',\n socialOk ? 'pass' : ogTitle ? 'warn' : 'fail',\n [ogTitle && 'og:title', ogImage && 'og:image', ogType && `og:type=${ogType}`]\n .filter(Boolean)\n .join(', ') || 'missing',\n 'What WhatsApp, Instagram and Slack render when the link is shared. Without og:image the share is a bare grey rectangle — for a store shared in messaging apps this is often worth more than search rank.',\n 10,\n )\n\n // --- Structured data ------------------------------------------------------\n const types = input.jsonLdTypes\n add(\n 'structured-data',\n 'Structured data',\n types.length ? 'pass' : 'warn',\n types.length ? types.join(', ') : 'none',\n 'Product JSON-LD makes a page eligible for rich results — price, availability and rating shown directly in search. BreadcrumbList replaces the bare URL with a readable path.',\n 5,\n )\n\n // --- Headings -------------------------------------------------------------\n add(\n 'h1',\n 'Single H1',\n input.h1Count === 1 ? 'pass' : input.h1Count === 0 ? 'fail' : 'warn',\n `${input.h1Count} found`,\n 'The H1 is the page’s stated subject. None leaves it ambiguous; several compete with each other.',\n 3,\n )\n\n // --- Images ---------------------------------------------------------------\n add(\n 'image-alt',\n 'Image alt text',\n input.imagesMissingAlt === 0 ? 'pass' : input.imagesMissingAlt > 3 ? 'fail' : 'warn',\n `${input.imagesMissingAlt}/${input.imageCount} missing alt`,\n 'Alt text is how a product image enters image search, and how a screen reader describes it. On a catalogue page the images are the product.',\n 2,\n )\n\n // --- Status ---------------------------------------------------------------\n if (input.statusCode != null) {\n const notFoundish = /não encontrada|not found|404/i.test(input.title ?? '')\n const soft404 = notFoundish && input.statusCode === 200\n add(\n 'status',\n 'HTTP status',\n soft404 ? 'fail' : 'pass',\n `${input.statusCode}${soft404 ? ' on a not-found page' : ''}`,\n 'A missing page answering 200 is a “soft 404”: the engine indexes it as real content and the site accumulates near-duplicate empty pages.',\n 5,\n )\n }\n\n const total = f.reduce((s, x) => s + x.weight, 0)\n const earned = f.reduce(\n (s, x) => s + (x.status === 'pass' ? x.weight : x.status === 'warn' ? x.weight * 0.5 : 0),\n 0,\n )\n const score = total === 0 ? 0 : Math.round((earned / total) * 100)\n\n return {\n score,\n grade: gradeFor(score),\n findings: f,\n passed: f.filter((x) => x.status === 'pass').length,\n total: f.length,\n }\n}\n\n/**\n * Collect audit input from a live document. Browser-only by definition — the\n * server-side counterpart builds the same shape from its SeoConfig.\n */\nexport function collectSeoAuditInput(doc: Document, path: string): SeoAuditInput {\n const main = doc.querySelector('main') ?? doc.body\n const images = Array.from(doc.querySelectorAll('img'))\n const jsonLdTypes: string[] = []\n for (const el of Array.from(doc.querySelectorAll('script[type=\"application/ld+json\"]'))) {\n try {\n const parsed = JSON.parse(el.textContent ?? '')\n for (const node of Array.isArray(parsed) ? parsed : [parsed]) {\n if (node && typeof node['@type'] === 'string') jsonLdTypes.push(node['@type'])\n }\n } catch {\n jsonLdTypes.push('(unparseable)')\n }\n }\n\n return {\n path,\n url: doc.location?.href,\n title: doc.title,\n meta: Array.from(doc.querySelectorAll('meta')).map((m) => ({\n name: m.getAttribute('name') ?? undefined,\n property: m.getAttribute('property') ?? undefined,\n content: m.getAttribute('content') ?? '',\n })),\n links: Array.from(doc.querySelectorAll('link[rel]')).map((l) => ({\n rel: l.getAttribute('rel') ?? '',\n href: l.getAttribute('href') ?? '',\n })),\n jsonLdTypes,\n h1Count: doc.querySelectorAll('h1').length,\n imageCount: images.length,\n imagesMissingAlt: images.filter((i) => !i.getAttribute('alt')?.trim()).length,\n contentTextLength: (main?.textContent ?? '').replace(/\\s+/g, ' ').trim().length,\n skeletonCount: doc.querySelectorAll('.animate-pulse').length,\n }\n}\n"]}