@thorprovider/blocks 1.0.0 → 3.0.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 (859) hide show
  1. package/README.md +274 -46
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
  4. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
  5. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
  6. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
  7. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
  8. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
  9. package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
  10. package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
  11. package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
  12. package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
  13. package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
  14. package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
  15. package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
  16. package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
  17. package/dist/blocks/application/login-forms/login-page.js +209 -0
  18. package/dist/blocks/application/login-forms/login-page.js.map +1 -0
  19. package/dist/blocks/application/login-forms/login-page.mjs +185 -0
  20. package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
  21. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
  22. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
  23. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
  24. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
  25. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
  26. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
  27. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
  28. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
  29. package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
  30. package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
  31. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
  32. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
  33. package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
  34. package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
  35. package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
  36. package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
  37. package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
  38. package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
  39. package/dist/blocks/application/verification/verify-1.d.ts +35 -0
  40. package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
  41. package/dist/blocks/application/verification/verify-1.js +243 -0
  42. package/dist/blocks/application/verification/verify-1.js.map +1 -0
  43. package/dist/blocks/application/verification/verify-1.mjs +219 -0
  44. package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
  45. package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
  46. package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
  47. package/dist/blocks/application/verification/verify-confetti.js +145 -0
  48. package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
  49. package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
  50. package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
  51. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
  52. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
  53. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
  54. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
  55. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
  56. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
  57. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
  58. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
  59. package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
  60. package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
  61. package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
  62. package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
  63. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
  64. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
  65. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
  66. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
  67. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
  68. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
  69. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
  70. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
  71. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
  72. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
  73. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
  74. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
  75. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
  76. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
  77. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
  78. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
  79. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
  80. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
  81. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
  82. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
  83. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
  84. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
  85. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
  86. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
  87. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
  88. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
  89. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
  90. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
  91. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
  92. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
  93. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
  94. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
  95. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
  96. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
  97. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
  98. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
  99. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
  100. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
  101. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
  102. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
  103. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
  104. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
  105. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
  106. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
  107. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
  108. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
  109. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
  110. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
  111. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
  112. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
  113. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
  114. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
  115. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
  116. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
  117. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
  118. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
  119. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
  120. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
  121. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
  122. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
  123. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
  124. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
  125. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
  126. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
  127. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
  128. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
  129. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
  130. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
  131. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
  132. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
  133. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
  134. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
  135. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
  136. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
  137. package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
  138. package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
  139. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
  140. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
  141. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
  142. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
  143. package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
  144. package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
  145. package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
  146. package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
  147. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
  148. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
  149. package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
  150. package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
  151. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
  152. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
  153. package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
  154. package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
  155. package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
  156. package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
  157. package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
  158. package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
  159. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
  160. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
  161. package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
  162. package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
  163. package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
  164. package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
  165. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
  166. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
  167. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
  168. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
  169. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
  170. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
  171. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
  172. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
  173. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
  174. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
  175. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
  176. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
  177. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
  178. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
  179. package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
  180. package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
  181. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
  182. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
  183. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
  184. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
  185. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
  186. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
  187. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
  188. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
  189. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
  190. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
  191. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
  192. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
  193. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
  194. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
  195. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
  196. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
  197. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
  198. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
  199. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
  200. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
  201. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
  202. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
  203. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
  204. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
  205. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
  206. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
  207. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
  208. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
  209. package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
  210. package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
  211. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
  212. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
  213. package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
  214. package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
  215. package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
  216. package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
  217. package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
  218. package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
  219. package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
  220. package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
  221. package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
  222. package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
  223. package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
  224. package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
  225. package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
  226. package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
  227. package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
  228. package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
  229. package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
  230. package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
  231. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
  232. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
  233. package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
  234. package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
  235. package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
  236. package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
  237. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
  238. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
  239. package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
  240. package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
  241. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
  242. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
  243. package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
  244. package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
  245. package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
  246. package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
  247. package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
  248. package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
  249. package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
  250. package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
  251. package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
  252. package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
  253. package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
  254. package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
  255. package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
  256. package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
  257. package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
  258. package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
  259. package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
  260. package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
  261. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
  262. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
  263. package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
  264. package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
  265. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
  266. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
  267. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
  268. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
  269. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
  270. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
  271. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
  272. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
  273. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
  274. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
  275. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
  276. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
  277. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
  278. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
  279. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
  280. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
  281. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
  282. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
  283. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
  284. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
  285. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
  286. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
  287. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
  288. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
  289. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
  290. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
  291. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
  292. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
  293. package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
  294. package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
  295. package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
  296. package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
  297. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
  298. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
  299. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
  300. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
  301. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
  302. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
  303. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
  304. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
  305. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
  306. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
  307. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
  308. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
  309. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
  310. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
  311. package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
  312. package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
  313. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
  314. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
  315. package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
  316. package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
  317. package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
  318. package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
  319. package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
  320. package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
  321. package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
  322. package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
  323. package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
  324. package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
  325. package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
  326. package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
  327. package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
  328. package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
  329. package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
  330. package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
  331. package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
  332. package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
  333. package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
  334. package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
  335. package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
  336. package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
  337. package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
  338. package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
  339. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
  340. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
  341. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
  342. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
  343. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
  344. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
  345. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
  346. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
  347. package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
  348. package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
  349. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
  350. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
  351. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
  352. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
  353. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
  354. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
  355. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
  356. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
  357. package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
  358. package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
  359. package/dist/blocks/marketing/banners/avatar-group.js +90 -0
  360. package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
  361. package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
  362. package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
  363. package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
  364. package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
  365. package/dist/blocks/marketing/banners/banner-1.js +177 -0
  366. package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
  367. package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
  368. package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
  369. package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
  370. package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
  371. package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
  372. package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
  373. package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
  374. package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
  375. package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
  376. package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
  377. package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
  378. package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
  379. package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
  380. package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
  381. package/dist/blocks/marketing/features/feature.d.ts +45 -0
  382. package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
  383. package/dist/blocks/marketing/features/feature.js +135 -0
  384. package/dist/blocks/marketing/features/feature.js.map +1 -0
  385. package/dist/blocks/marketing/features/feature.mjs +111 -0
  386. package/dist/blocks/marketing/features/feature.mjs.map +1 -0
  387. package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
  388. package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
  389. package/dist/blocks/marketing/footers/footer-section.js +356 -0
  390. package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
  391. package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
  392. package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
  393. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
  394. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
  395. package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
  396. package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
  397. package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
  398. package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
  399. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
  400. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
  401. package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
  402. package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
  403. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
  404. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
  405. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
  406. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
  407. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
  408. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
  409. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
  410. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
  411. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
  412. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
  413. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
  414. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
  415. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
  416. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
  417. package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
  418. package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
  419. package/dist/blocks/marketing/navbars/navbar.js +484 -0
  420. package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
  421. package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
  422. package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
  423. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
  424. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
  425. package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
  426. package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
  427. package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
  428. package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
  429. package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
  430. package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
  431. package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
  432. package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
  433. package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
  434. package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
  435. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
  436. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
  437. package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
  438. package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
  439. package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
  440. package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
  441. package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
  442. package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
  443. package/dist/blocks/shared/reaction-toggle.js +138 -0
  444. package/dist/blocks/shared/reaction-toggle.js.map +1 -0
  445. package/dist/blocks/shared/reaction-toggle.mjs +114 -0
  446. package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
  447. package/dist/hooks/use-mobile.d.ts +2 -0
  448. package/dist/hooks/use-mobile.d.ts.map +1 -0
  449. package/dist/hooks/use-mobile.js +53 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-mobile.mjs +19 -0
  452. package/dist/hooks/use-mobile.mjs.map +1 -0
  453. package/dist/index.d.ts +100 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +339 -0
  456. package/dist/index.js.map +1 -0
  457. package/dist/index.mjs +238 -0
  458. package/dist/index.mjs.map +1 -0
  459. package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
  460. package/dist/lib/cart.d.ts.map +1 -0
  461. package/dist/lib/cart.js +31 -0
  462. package/dist/lib/cart.js.map +1 -0
  463. package/dist/lib/cart.mjs +7 -0
  464. package/dist/lib/cart.mjs.map +1 -0
  465. package/dist/lib/contracts.d.ts +4008 -0
  466. package/dist/lib/contracts.d.ts.map +1 -0
  467. package/dist/lib/contracts.js +828 -0
  468. package/dist/lib/contracts.js.map +1 -0
  469. package/dist/lib/contracts.mjs +737 -0
  470. package/dist/lib/contracts.mjs.map +1 -0
  471. package/dist/lib/money.d.ts +28 -0
  472. package/dist/lib/money.d.ts.map +1 -0
  473. package/dist/lib/money.js +50 -0
  474. package/dist/lib/money.js.map +1 -0
  475. package/dist/lib/money.mjs +24 -0
  476. package/dist/lib/money.mjs.map +1 -0
  477. package/dist/lib/types/menu.d.ts +40 -0
  478. package/dist/lib/types/menu.d.ts.map +1 -0
  479. package/dist/lib/types/menu.js +50 -0
  480. package/dist/lib/types/menu.js.map +1 -0
  481. package/dist/lib/types/menu.mjs +25 -0
  482. package/dist/lib/types/menu.mjs.map +1 -0
  483. package/dist/lib/types.d.ts +5 -0
  484. package/dist/lib/types.d.ts.map +1 -0
  485. package/dist/lib/types.js +17 -0
  486. package/dist/lib/types.js.map +1 -0
  487. package/dist/lib/types.mjs +1 -0
  488. package/dist/lib/types.mjs.map +1 -0
  489. package/dist/lib/utils.d.ts +7 -0
  490. package/dist/lib/utils.d.ts.map +1 -0
  491. package/dist/lib/utils.js +33 -0
  492. package/dist/lib/utils.js.map +1 -0
  493. package/dist/lib/utils.mjs +9 -0
  494. package/dist/lib/utils.mjs.map +1 -0
  495. package/dist/ui/accordion.d.ts +8 -0
  496. package/dist/ui/accordion.d.ts.map +1 -0
  497. package/dist/ui/accordion.js +93 -0
  498. package/dist/ui/accordion.js.map +1 -0
  499. package/dist/ui/accordion.mjs +66 -0
  500. package/dist/ui/accordion.mjs.map +1 -0
  501. package/dist/ui/avatar.d.ts +12 -0
  502. package/dist/ui/avatar.d.ts.map +1 -0
  503. package/dist/ui/avatar.js +134 -0
  504. package/dist/ui/avatar.js.map +1 -0
  505. package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
  506. package/dist/ui/avatar.mjs.map +1 -0
  507. package/dist/ui/badge.d.ts +10 -0
  508. package/dist/ui/badge.d.ts.map +1 -0
  509. package/dist/ui/badge.js +69 -0
  510. package/dist/ui/badge.js.map +1 -0
  511. package/dist/ui/badge.mjs +44 -0
  512. package/dist/ui/badge.mjs.map +1 -0
  513. package/dist/ui/breadcrumb.d.ts +12 -0
  514. package/dist/ui/breadcrumb.d.ts.map +1 -0
  515. package/dist/ui/breadcrumb.js +134 -0
  516. package/dist/ui/breadcrumb.js.map +1 -0
  517. package/dist/ui/breadcrumb.mjs +104 -0
  518. package/dist/ui/breadcrumb.mjs.map +1 -0
  519. package/dist/ui/button-group.d.ts +12 -0
  520. package/dist/ui/button-group.d.ts.map +1 -0
  521. package/dist/ui/button-group.js +104 -0
  522. package/dist/ui/button-group.js.map +1 -0
  523. package/dist/ui/button-group.mjs +77 -0
  524. package/dist/ui/button-group.mjs.map +1 -0
  525. package/dist/ui/button.d.ts +11 -0
  526. package/dist/ui/button.d.ts.map +1 -0
  527. package/dist/ui/button.js +82 -0
  528. package/dist/ui/button.js.map +1 -0
  529. package/dist/ui/button.mjs +57 -0
  530. package/dist/ui/button.mjs.map +1 -0
  531. package/dist/ui/card.d.ts +10 -0
  532. package/dist/ui/card.d.ts.map +1 -0
  533. package/dist/ui/card.js +121 -0
  534. package/dist/ui/card.js.map +1 -0
  535. package/dist/ui/card.mjs +91 -0
  536. package/dist/ui/card.mjs.map +1 -0
  537. package/dist/ui/carousel.d.ts +20 -0
  538. package/dist/ui/carousel.d.ts.map +1 -0
  539. package/dist/ui/carousel.js +238 -0
  540. package/dist/ui/carousel.js.map +1 -0
  541. package/dist/ui/carousel.mjs +200 -0
  542. package/dist/ui/carousel.mjs.map +1 -0
  543. package/dist/ui/dialog.d.ts +18 -0
  544. package/dist/ui/dialog.d.ts.map +1 -0
  545. package/dist/ui/dialog.js +181 -0
  546. package/dist/ui/dialog.js.map +1 -0
  547. package/dist/ui/dialog.mjs +148 -0
  548. package/dist/ui/dialog.mjs.map +1 -0
  549. package/dist/ui/drawer.d.ts +14 -0
  550. package/dist/ui/drawer.d.ts.map +1 -0
  551. package/dist/ui/drawer.js +163 -0
  552. package/dist/ui/drawer.js.map +1 -0
  553. package/dist/ui/drawer.mjs +130 -0
  554. package/dist/ui/drawer.mjs.map +1 -0
  555. package/dist/ui/dropdown-menu.d.ts +26 -0
  556. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  557. package/dist/ui/dropdown-menu.js +271 -0
  558. package/dist/ui/dropdown-menu.js.map +1 -0
  559. package/dist/ui/dropdown-menu.mjs +233 -0
  560. package/dist/ui/dropdown-menu.mjs.map +1 -0
  561. package/dist/ui/empty.d.ts +12 -0
  562. package/dist/ui/empty.d.ts.map +1 -0
  563. package/dist/ui/empty.js +132 -0
  564. package/dist/ui/empty.js.map +1 -0
  565. package/dist/ui/empty.mjs +103 -0
  566. package/dist/ui/empty.mjs.map +1 -0
  567. package/dist/ui/field.d.ts +25 -0
  568. package/dist/ui/field.d.ts.map +1 -0
  569. package/dist/ui/field.js +264 -0
  570. package/dist/ui/field.js.map +1 -0
  571. package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
  572. package/dist/ui/field.mjs.map +1 -0
  573. package/dist/ui/input-group.d.ts +17 -0
  574. package/dist/ui/input-group.d.ts.map +1 -0
  575. package/dist/ui/input-group.js +185 -0
  576. package/dist/ui/input-group.js.map +1 -0
  577. package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
  578. package/dist/ui/input-group.mjs.map +1 -0
  579. package/dist/ui/input-otp.d.ts +12 -0
  580. package/dist/ui/input-otp.d.ts.map +1 -0
  581. package/dist/ui/input-otp.js +105 -0
  582. package/dist/ui/input-otp.js.map +1 -0
  583. package/dist/ui/input-otp.mjs +68 -0
  584. package/dist/ui/input-otp.mjs.map +1 -0
  585. package/dist/ui/input.d.ts +4 -0
  586. package/dist/ui/input.d.ts.map +1 -0
  587. package/dist/ui/input.js +46 -0
  588. package/dist/ui/input.js.map +1 -0
  589. package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
  590. package/dist/ui/input.mjs.map +1 -0
  591. package/dist/ui/label.d.ts +5 -0
  592. package/dist/ui/label.d.ts.map +1 -0
  593. package/dist/ui/label.js +48 -0
  594. package/dist/ui/label.js.map +1 -0
  595. package/dist/ui/label.mjs +24 -0
  596. package/dist/ui/label.mjs.map +1 -0
  597. package/dist/ui/navigation-menu.d.ts +15 -0
  598. package/dist/ui/navigation-menu.d.ts.map +1 -0
  599. package/dist/ui/navigation-menu.js +203 -0
  600. package/dist/ui/navigation-menu.js.map +1 -0
  601. package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
  602. package/dist/ui/navigation-menu.mjs.map +1 -0
  603. package/dist/ui/pagination.d.ts +14 -0
  604. package/dist/ui/pagination.d.ts.map +1 -0
  605. package/dist/ui/pagination.js +149 -0
  606. package/dist/ui/pagination.js.map +1 -0
  607. package/dist/ui/pagination.mjs +123 -0
  608. package/dist/ui/pagination.mjs.map +1 -0
  609. package/dist/ui/progress.d.ts +5 -0
  610. package/dist/ui/progress.d.ts.map +1 -0
  611. package/dist/ui/progress.js +57 -0
  612. package/dist/ui/progress.js.map +1 -0
  613. package/dist/ui/progress.mjs +33 -0
  614. package/dist/ui/progress.mjs.map +1 -0
  615. package/dist/ui/radio-group.d.ts +6 -0
  616. package/dist/ui/radio-group.d.ts.map +1 -0
  617. package/dist/ui/radio-group.js +72 -0
  618. package/dist/ui/radio-group.js.map +1 -0
  619. package/dist/ui/radio-group.mjs +47 -0
  620. package/dist/ui/radio-group.mjs.map +1 -0
  621. package/dist/ui/select.d.ts +16 -0
  622. package/dist/ui/select.d.ts.map +1 -0
  623. package/dist/ui/select.js +213 -0
  624. package/dist/ui/select.js.map +1 -0
  625. package/dist/ui/select.mjs +180 -0
  626. package/dist/ui/select.mjs.map +1 -0
  627. package/dist/ui/separator.d.ts +5 -0
  628. package/dist/ui/separator.d.ts.map +1 -0
  629. package/dist/ui/separator.js +52 -0
  630. package/dist/ui/separator.js.map +1 -0
  631. package/dist/ui/separator.mjs +28 -0
  632. package/dist/ui/separator.mjs.map +1 -0
  633. package/dist/ui/sheet.d.ts +15 -0
  634. package/dist/ui/sheet.d.ts.map +1 -0
  635. package/dist/ui/sheet.js +160 -0
  636. package/dist/ui/sheet.js.map +1 -0
  637. package/dist/ui/sheet.mjs +129 -0
  638. package/dist/ui/sheet.mjs.map +1 -0
  639. package/dist/ui/sidebar.d.ts +70 -0
  640. package/dist/ui/sidebar.d.ts.map +1 -0
  641. package/dist/ui/sidebar.js +697 -0
  642. package/dist/ui/sidebar.js.map +1 -0
  643. package/dist/ui/sidebar.mjs +651 -0
  644. package/dist/ui/sidebar.mjs.map +1 -0
  645. package/dist/ui/skeleton.d.ts +3 -0
  646. package/dist/ui/skeleton.d.ts.map +1 -0
  647. package/dist/ui/skeleton.js +40 -0
  648. package/dist/ui/skeleton.js.map +1 -0
  649. package/dist/ui/skeleton.mjs +16 -0
  650. package/dist/ui/skeleton.mjs.map +1 -0
  651. package/dist/ui/table.d.ts +11 -0
  652. package/dist/ui/table.d.ts.map +1 -0
  653. package/dist/ui/table.js +147 -0
  654. package/dist/ui/table.js.map +1 -0
  655. package/dist/ui/table.mjs +116 -0
  656. package/dist/ui/table.mjs.map +1 -0
  657. package/dist/ui/tabs.d.ts +12 -0
  658. package/dist/ui/tabs.d.ts.map +1 -0
  659. package/dist/ui/tabs.js +121 -0
  660. package/dist/ui/tabs.js.map +1 -0
  661. package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
  662. package/dist/ui/tabs.mjs.map +1 -0
  663. package/dist/ui/textarea.d.ts +4 -0
  664. package/dist/ui/textarea.d.ts.map +1 -0
  665. package/dist/ui/textarea.js +43 -0
  666. package/dist/ui/textarea.js.map +1 -0
  667. package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
  668. package/dist/ui/textarea.mjs.map +1 -0
  669. package/dist/ui/toggle-group.d.ts +10 -0
  670. package/dist/ui/toggle-group.d.ts.map +1 -0
  671. package/dist/ui/toggle-group.js +105 -0
  672. package/dist/ui/toggle-group.js.map +1 -0
  673. package/dist/ui/toggle-group.mjs +70 -0
  674. package/dist/ui/toggle-group.mjs.map +1 -0
  675. package/dist/ui/toggle.d.ts +10 -0
  676. package/dist/ui/toggle.d.ts.map +1 -0
  677. package/dist/ui/toggle.js +70 -0
  678. package/dist/ui/toggle.js.map +1 -0
  679. package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
  680. package/dist/ui/toggle.mjs.map +1 -0
  681. package/dist/ui/tooltip.d.ts +8 -0
  682. package/dist/ui/tooltip.d.ts.map +1 -0
  683. package/dist/ui/tooltip.js +84 -0
  684. package/dist/ui/tooltip.js.map +1 -0
  685. package/dist/ui/tooltip.mjs +57 -0
  686. package/dist/ui/tooltip.mjs.map +1 -0
  687. package/package.json +8 -1
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -107
  690. package/components.json +0 -33
  691. package/docs/standards/data-contracts.md +0 -81
  692. package/docs/standards/theming.md +0 -112
  693. package/scripts/fix-esm-extensions.mjs +0 -40
  694. package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
  695. package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
  696. package/src/blocks/application/login-forms/login-page-1.tsx +0 -246
  697. package/src/blocks/application/login-forms/login-page-2.tsx +0 -207
  698. package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
  699. package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -320
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -231
  701. package/src/blocks/application/verification/verify-1.tsx +0 -307
  702. package/src/blocks/application/verification/verify-confetti.tsx +0 -192
  703. package/src/blocks/e-commerce/category-filters/category-filter-1.tsx +0 -260
  704. package/src/blocks/e-commerce/category-filters/category-filter-2-filter-panel.tsx +0 -222
  705. package/src/blocks/e-commerce/category-filters/category-filter-2.test.tsx +0 -513
  706. package/src/blocks/e-commerce/category-filters/category-filter-2.tsx +0 -921
  707. package/src/blocks/e-commerce/category-filters/category-filter-4-chip-rail.tsx +0 -57
  708. package/src/blocks/e-commerce/category-filters/category-filter-4-drawer.tsx +0 -124
  709. package/src/blocks/e-commerce/category-filters/category-filter-4-fields.tsx +0 -170
  710. package/src/blocks/e-commerce/category-filters/category-filter-4-sidebar.tsx +0 -52
  711. package/src/blocks/e-commerce/category-filters/category-filter-4-sort-sheet.tsx +0 -57
  712. package/src/blocks/e-commerce/category-filters/category-filter-4-state.ts +0 -68
  713. package/src/blocks/e-commerce/category-filters/category-filter-4.tsx +0 -298
  714. package/src/blocks/e-commerce/checkout-forms/card-formatting.test.ts +0 -47
  715. package/src/blocks/e-commerce/checkout-forms/card-formatting.ts +0 -9
  716. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  717. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  718. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  719. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  720. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  721. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-contact-step.tsx +0 -96
  722. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-country-field.tsx +0 -51
  723. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-order-summary.tsx +0 -252
  724. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-payment-step.tsx +0 -188
  725. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-progress.tsx +0 -36
  726. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-shipping-step.tsx +0 -156
  727. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.test.tsx +0 -216
  728. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.tsx +0 -338
  729. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-order-summary.tsx +0 -130
  730. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-payment-card.tsx +0 -175
  731. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-shipping-card.tsx +0 -190
  732. package/src/blocks/e-commerce/checkout-forms/checkout-form-2.tsx +0 -312
  733. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-information-step.tsx +0 -91
  734. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-order-summary.tsx +0 -110
  735. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-payment-step.tsx +0 -137
  736. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-progress.tsx +0 -68
  737. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-review-step.tsx +0 -79
  738. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-shipping-step.tsx +0 -172
  739. package/src/blocks/e-commerce/checkout-forms/checkout-form-3.tsx +0 -392
  740. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  741. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  742. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  743. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  744. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  745. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  746. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  747. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  748. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  749. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  750. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  751. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  752. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  753. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  754. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  755. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  756. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  757. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  758. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  759. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  760. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  761. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  762. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  763. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  764. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  765. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  766. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -424
  767. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  768. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  769. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  770. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  771. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  772. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  773. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  774. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  775. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  776. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  777. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  778. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  779. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  780. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  781. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  782. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  783. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  784. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  785. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  786. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  787. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  788. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  789. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  790. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  791. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  792. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  793. package/src/blocks/marketing/features/feature.tsx +0 -195
  794. package/src/blocks/marketing/footers/footer-section-1.test.tsx +0 -117
  795. package/src/blocks/marketing/footers/footer-section-1.tsx +0 -178
  796. package/src/blocks/marketing/footers/footer-section-3.tsx +0 -192
  797. package/src/blocks/marketing/footers/footer-section-4.tsx +0 -355
  798. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  799. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  800. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  801. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  802. package/src/blocks/marketing/navbars/navbar-1.tsx +0 -267
  803. package/src/blocks/marketing/navbars/navbar-2.tsx +0 -351
  804. package/src/blocks/marketing/navbars/navbar-3.tsx +0 -303
  805. package/src/blocks/marketing/navbars/navbar-4-account-menu.test.tsx +0 -56
  806. package/src/blocks/marketing/navbars/navbar-4-account-menu.tsx +0 -134
  807. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.test.tsx +0 -204
  808. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.tsx +0 -371
  809. package/src/blocks/marketing/navbars/navbar-4-like-button.tsx +0 -177
  810. package/src/blocks/marketing/navbars/navbar-4-mobile-nav.tsx +0 -104
  811. package/src/blocks/marketing/navbars/navbar-4-product-grid.tsx +0 -219
  812. package/src/blocks/marketing/navbars/navbar-4-search-bar.tsx +0 -52
  813. package/src/blocks/marketing/navbars/navbar-4.test.tsx +0 -264
  814. package/src/blocks/marketing/navbars/navbar-4.tsx +0 -604
  815. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  816. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  817. package/src/blocks/marketing/testimonials/testimonial-1.tsx +0 -141
  818. package/src/blocks/marketing/testimonials/testimonial-2.tsx +0 -108
  819. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  820. package/src/hooks/use-mobile.ts +0 -19
  821. package/src/index.ts +0 -285
  822. package/src/lib/cart.test.ts +0 -15
  823. package/src/lib/contracts-curated.test.ts +0 -225
  824. package/src/lib/contracts-server-boundary.test.ts +0 -52
  825. package/src/lib/contracts.test.ts +0 -173
  826. package/src/lib/contracts.ts +0 -795
  827. package/src/lib/money.test.ts +0 -64
  828. package/src/lib/money.ts +0 -65
  829. package/src/lib/types/menu.ts +0 -43
  830. package/src/lib/types.ts +0 -4
  831. package/src/lib/utils.ts +0 -10
  832. package/src/ui/accordion.tsx +0 -65
  833. package/src/ui/badge.tsx +0 -47
  834. package/src/ui/breadcrumb.tsx +0 -108
  835. package/src/ui/button-group.tsx +0 -83
  836. package/src/ui/button.tsx +0 -63
  837. package/src/ui/card.tsx +0 -91
  838. package/src/ui/carousel.tsx +0 -241
  839. package/src/ui/dialog.tsx +0 -158
  840. package/src/ui/drawer.tsx +0 -134
  841. package/src/ui/dropdown-menu.tsx +0 -256
  842. package/src/ui/empty.tsx +0 -103
  843. package/src/ui/input-otp.tsx +0 -76
  844. package/src/ui/label.tsx +0 -23
  845. package/src/ui/pagination.tsx +0 -127
  846. package/src/ui/progress.tsx +0 -30
  847. package/src/ui/radio-group.tsx +0 -44
  848. package/src/ui/select.tsx +0 -189
  849. package/src/ui/separator.tsx +0 -27
  850. package/src/ui/sheet.tsx +0 -142
  851. package/src/ui/sidebar.tsx +0 -726
  852. package/src/ui/skeleton.tsx +0 -13
  853. package/src/ui/table.tsx +0 -115
  854. package/src/ui/toggle-group.tsx +0 -83
  855. package/src/ui/tooltip.tsx +0 -56
  856. package/tsconfig.build.json +0 -12
  857. package/tsconfig.json +0 -20
  858. package/tsup.config.ts +0 -19
  859. package/vitest.config.ts +0 -17
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "@thorprovider/blocks"
3
3
  purpose: "Reusable, framework-agnostic storefront blocks built from ShadcnStore UI, decoupled from data and backend"
4
- lastReviewed: "2026-10-17"
4
+ lastReviewed: "2026-10-22"
5
5
  ---
6
6
 
7
7
  # @thorprovider/blocks
@@ -39,58 +39,163 @@ Blocks follow `src/blocks/<category>/<section>/<block>.tsx`. Each block co-locat
39
39
 
40
40
  | Export | Category | Description |
41
41
  | --- | --- | --- |
42
- | `Navbar1` | Marketing | Simple navbar with logo, links, sign-in, CTA and cart count |
43
- | `Navbar2` | Marketing | Mega-menu navbar with grouped flyouts and featured card |
44
- | `Navbar3` | Marketing | Floating navbar that condenses into a rounded pill on scroll |
45
- | `Navbar4` | Marketing | Storefront navbar: utility bar, category links, search, account menu, cart sheet |
42
+ | `Navbar` | Marketing | Page-level navigation header: `bar`, `mega` (grouped flyouts plus optional featured promo) or `floating` (self-reserving pinned pill) |
43
+ | `StorefrontNavbar` | E-commerce | Commerce navigation shell: utility strip, category mega menu, optional search, account menu, cart sheet |
46
44
  | `Banner1` | Marketing | Announcement banner (bar or pill) with dismiss |
47
45
  | `HeroSection1` | Marketing | Hero with badge, headline, CTA, reviewer avatars, rating and image |
48
46
  | `CtaSection1` | Marketing | Full-width call-to-action with badge, headline and two CTAs |
49
47
  | `Feature` | Marketing | Canonical benefits section: `cards` (icon feature grid) or `split` (editorial split with a required image) presentation |
50
- | `Testimonial1` | Marketing | Testimonial carousel with rating stars |
51
- | `Testimonial2` | Marketing | Bento testimonials grid |
48
+ | `TestimonialSection` | Marketing | Canonical testimonial collection section with `carousel` and `bento` presentations |
52
49
  | `FaqBlock1` | Marketing | FAQ accordion (single or multiple open) |
53
50
  | `PricingSection1` | Marketing | Pricing tiers with popular badge |
54
51
  | `Statistic1` | Marketing | Metrics grid with progress bars |
55
52
  | `LogoCloud1` | Marketing | Logo cloud with skeleton fallback |
56
- | `FooterSection1` | Marketing | Footer with brand, link columns and newsletter |
57
- | `FooterSection3` | Marketing | Newsletter + six-column footer with social links |
53
+ | `FooterSection` | Marketing | Canonical page-level footer with `brand-columns`, `newsletter-grid` or `contact` presentation |
58
54
  | `ProductCard` | E-commerce | Canonical product card (item cell of a listing); `presentation` `classic`/`minimal`/`rich`, canonical `ProductPresentation` items with `Money` prices, evidence-only merchandising |
59
55
  | `ProductShowcase1` | E-commerce | Combined grid-and-carousel of product cards with manual paging |
60
56
  | `ProductOverview` | E-commerce | Canonical product detail; bounded `presentation` `standard`/`gallery`/`rich` (rich adds optional specs/features/reviews tabs) |
61
57
  | `ProductQuickView` | E-commerce | Quick-view dialog with gallery, variants and quantity |
62
- | `ReviewRating1` | E-commerce | Review list with rating summary |
63
- | `ReviewRating2` | E-commerce | Rating summary with distribution and review carousel |
58
+ | `ReviewSummary` | E-commerce | Canonical review aggregate unit; required `averageRating`, `totalReviews` and 1–5 `distribution`, bars ordered 5→1 with counts |
59
+ | `ReviewList` | E-commerce | Canonical review collection section; bounded `presentation` `list`/`carousel`, host-authoritative engagement, host-owned pagination, empty state |
60
+ | `ReviewCard` | E-commerce | Canonical review item cell (author, date, rating, content, optional helpful count and actions) used inside `ReviewList` |
61
+ | `ReviewComposer` | E-commerce | Canonical controlled review form; `useId` field ids, native radio rating group, host `isSubmitting`/`error`, input preserved on failure |
64
62
  | `ProductCategory` | E-commerce | Canonical category block; bounded `presentation` `grid` (image cards) / `icons` (compact icon grid) / `list` (rows with subcategory chips and optional controlled search) |
65
- | `CategoryFilter1` | E-commerce | Category filter bar |
66
- | `CategoryFilter2` | E-commerce | Filter sidebar with mobile sheet |
63
+ | `CategoryListing` | E-commerce | Canonical category listing (results + pagination) with a controlled query and bounded `presentation` `sidebar` (persistent desktop panel + mobile sheet) / `toolbar` (sticky mobile toolbar + drawers); generic facet groups render only from real metadata |
67
64
  | `ShoppingCart` | E-commerce | Canonical cart; backend-authoritative `Money` totals and item lines, optional promo entry and recently-viewed suggestions; `presentation` `compact` (collapsible card) or `page` (full-width review) |
68
- | `CheckoutForm1` | E-commerce | Essential checkout fields |
69
- | `CheckoutForm2` | E-commerce | Single-page checkout with order summary beside |
65
+ | `Checkout` | E-commerce | Canonical page-level checkout; controlled values, backend-authoritative `Money` totals, `PaymentMethod[]` data with no raw card input; `presentation` `single-page` or `stepper`, optional `showReviewStep` |
70
66
  | `CheckoutConfirmation` | E-commerce | Order confirmation with fulfilment timeline |
71
- | `OrderHistory1` | E-commerce | Orders list |
72
- | `OrderHistory2` | E-commerce | Order cards with carousel items |
67
+ | `OrderHistory` | E-commerce | Canonical order-history collection; `presentation` `cards` or `rows`, order-level `Money` totals rendered verbatim, status as data, host-owned pagination and actions |
68
+ | `OrderLine` | E-commerce | Canonical order-line item cell (`name`, optional image/details, quantity, `Money` line total) used inside `OrderHistory` |
73
69
  | `StorefrontHero` | E-commerce | Canonical storefront hero; `presentation` `compact` (gradient headline, CTAs, product grid), `showcase` (search + rotating product carousel), `editorial` (departments, featured deals, store locator) or `promotional` (rotating deals bar, category cards) |
74
70
  | `AppShell1` | Application | Application shell with navigation slots |
75
- | `LoginPage1` | Application | Login card with remember-me and social buttons |
76
- | `LoginPage2` | Application | Login with prominent social options |
77
- | `SignUpPage1` | Application | Registration card with social options |
71
+ | `LoginPage` | Application | Canonical sign-in form with explicit `card` or `social` presentation |
72
+ | `SignUpPage1` | Application | Registration form with social options (same profile as `LoginPage`) |
78
73
  | `ForgotPasswordPage1` | Application | Four-step password recovery wizard |
79
74
  | `Verify1` | Application | Two-factor verification (OTP or backup code) |
80
75
 
81
- Interactions are exposed as callbacks (e.g. `onAddToCart`, `onBuyNow`, `onSelectColor`). `StorefrontHero` renders each affordance only when its handler is supplied (no dead controls); other blocks keep elements in the DOM with no-op behavior when a callback is absent.
76
+ Interactions are exposed as callbacks (e.g. `onAddToCart`, `onBuyNow`, `onSelectColor`). `StorefrontHero` and `LoginPage` render optional affordances only when their handlers are supplied; other blocks may keep elements in the DOM with no-op behavior when a callback is absent.
77
+
78
+ ### Category listing
79
+
80
+ `CategoryListing` is the single controlled listing controller. Products, pagination, the selected query values, active-filter chips and the status are props; the block emits `on*Change`/`onClearFilters`/`onRepair`/`onRetry` and never fetches, parses the URL, or keeps a private query. `presentation` changes only the chrome: `sidebar` keeps a persistent desktop panel plus a mobile sheet, `toolbar` adds a sticky mobile toolbar with filter/sort drawers. Results render through the canonical `ProductCard`, so the listing never owns card markup. Facets are option-only groups (`{ id, label, options: [{ value, label, count? }] }`) supplied by the host; a group renders only when real metadata provides it, a real `0` count is displayed, and an absent/invalid count is omitted rather than invented.
81
+
82
+ ### Footer sections
83
+
84
+ `FooterSection` is the canonical page-level footer. Its required `presentation`
85
+ is `brand-columns`, `newsletter-grid`, or `contact`; provide serializable text,
86
+ links, and social records as props. Social records use `{ label, href?, icon }`
87
+ with an optional `ariaLabel`; callbacks and visible fallback text keep using the
88
+ raw `label`. Bind icon IDs to `LucideIcon` components through `socialIcons`, and
89
+ keep that map, `logo` nodes, and callbacks outside JSON fixtures.
90
+
91
+ Column/legal and social links have separate `linkBehavior` and
92
+ `socialLinkBehavior` props, both defaulting to `host`. Host mode requires the
93
+ matching callback and renders callback-less destinations as text; `native`
94
+ preserves browser navigation. Contact address, phone, and email hrefs are native.
95
+ Newsletter controls stay visible but disabled without `onNewsletterSubmit`;
96
+ the callback receives the entered email and the block performs no network request.
97
+
98
+ The numbered `FooterSection1`, `FooterSection3`, and `FooterSection4` exports,
99
+ deep module paths, and legacy prop contracts have been removed. Migrate to
100
+ `FooterSection` by supplying an explicit presentation and canonical serializable
101
+ content props. Select `linkBehavior="native"` or
102
+ `socialLinkBehavior="native"` when browser navigation is intended; both default
103
+ to host-controlled behavior. Canonical link types are exported as
104
+ `CanonicalFooterLink` and `CanonicalFooterLinkColumn` to avoid collisions with
105
+ other package contracts.
106
+
107
+ ### Login page
108
+
109
+ `LoginPage` is a sign-in composition with one shared credential form and a
110
+ required `presentation` of `card` or `social`. Both presentations submit the
111
+ same `{ email, password, remember }` payload. `remember` starts as `false` and
112
+ is reported to the host; the block does not decide session persistence.
113
+
114
+ The block renders into the host page and does not own it: no viewport height, no
115
+ page landmark, no page backdrop, no vertical centring. `card` caps its width at
116
+ `max-w-md` and `social` at the same cap, and the mounting page supplies the
117
+ canvas — a route shell, a modal, a split screen, or a template the host owns.
118
+ Before the shell was removed, each of these blocks painted a full-viewport
119
+ surface; a host that relied on that canvas must now provide it.
120
+
121
+ Provider data stays serializable. Pass provider IDs and labels separately from
122
+ the icon components, and provide a selection callback so provider buttons are
123
+ only rendered when they can act. IDs must be unique within the list; an
124
+ unmapped icon falls back to the visible provider label:
125
+
126
+ ```tsx
127
+ import { AtSign } from 'lucide-react'
128
+ import { LoginPage } from '@thorprovider/blocks'
129
+
130
+ <LoginPage
131
+ presentation='social'
132
+ providers={[{ id: 'email', label: 'Email' }]}
133
+ providerIcons={{ email: AtSign }}
134
+ onProviderSelect={providerId => startProviderLogin(providerId)}
135
+ onSubmit={({ email, password, remember }) => signIn({ email, password, remember })}
136
+ />
137
+ ```
138
+
139
+ The numbered `LoginPage1` and `LoginPage2` exports, deep module paths, and legacy
140
+ prop contracts have been removed. Migrate to `LoginPage` and select `card` or
141
+ `social` explicitly; both presentations use the canonical
142
+ `{ email, password, remember }` host callback contract.
143
+
144
+ ## Testimonials
145
+
146
+ `TestimonialSection` renders a collection of testimonials in one of two explicit
147
+ presentations: `carousel` or `bento`. Each item requires a stable, collection-unique
148
+ `id`, `name`, and `content`. `role`, `avatar`, and `rating` are optional and are
149
+ rendered only when supplied; the block never invents attribution or ratings and
150
+ does not emit an empty image source.
151
+
152
+ ```tsx
153
+ import { TestimonialSection } from '@thorprovider/blocks'
154
+
155
+ const testimonials = [
156
+ { id: 't-1', name: 'Rosa Díaz', role: 'Propietaria', content: 'Excelente servicio.' },
157
+ ]
158
+
159
+ <TestimonialSection
160
+ presentation="carousel"
161
+ items={testimonials}
162
+ title="Lo que dicen nuestros clientes"
163
+ carouselLabels={{
164
+ previous: 'Testimonio anterior',
165
+ next: 'Testimonio siguiente',
166
+ slide: 'Ir al testimonio {n}',
167
+ }}
168
+ />
169
+ ```
170
+
171
+ For `carousel`, `carouselLabels` is required and supplies localized previous,
172
+ next, and slide-button labels; `{n}` is replaced with the one-based page number.
173
+ Arrows and dots appear only when the collection spans more than one page, so a
174
+ collection that fits the viewport renders no navigation at all. The page count is
175
+ re-measured on resize and on re-render, so the same collection can show controls
176
+ on a narrow screen and hide them on a wide one. The native buttons support
177
+ keyboard activation, and the selected page is exposed with `aria-current`. For
178
+ `bento`, omit `carouselLabels`; one-to-three items render
179
+ without empty cards, and collections larger than four repeat the four-tile visual
180
+ rhythm without dropping entries. An empty `items` array renders no section or
181
+ controls. `title`, `description`, and `className` are optional for either
182
+ presentation.
183
+
184
+ The numbered `Testimonial1` and `Testimonial2` exports, deep module paths, and
185
+ legacy prop contracts have been removed. Migrate to `TestimonialSection` with
186
+ shared testimonial items and select `carousel` or `bento` explicitly.
82
187
 
83
188
  ## Optional brand props
84
189
 
85
190
  Three existing blocks expose an optional brand seam. Omitting the prop renders
86
191
  the block's current output unchanged; no demo content is added.
87
192
 
88
- - `Navbar4` — `logoAccent?: { text: string; className?: string }` accents a
193
+ - `StorefrontNavbar` — `logoAccent?: { text: string; className?: string }` accents a
89
194
  trailing segment of `logoText`. With `logoText="ElectroCuba"` and
90
195
  `logoAccent={{ text: 'Cuba', className: 'text-brand-promo' }}`, the block
91
196
  renders `Electro` plus an accented `Cuba` span. If `text` is not a trailing
92
197
  segment of `logoText`, the wordmark renders unchanged.
93
- - `FooterSection1` — `brandAccent?: { text: string; className?: string }` applies
198
+ - `FooterSection` — `brandAccent?: { text: string; className?: string }` applies
94
199
  the same trailing-segment accent to `brandName`.
95
200
  - `StorefrontHero` — `heroImage?: { src: string; alt: string }` renders a native
96
201
  `<img>` when `src` is a non-empty string, and nothing when the prop is absent
@@ -101,13 +206,13 @@ the library hardcodes no brand color.
101
206
 
102
207
  ## Custom surface `className`
103
208
 
104
- `Navbar4` (outer `<header>`) and `FooterSection1` (outer `<footer>`) accept an
209
+ `Navbar4` (outer `<header>`) and `FooterSection` (outer `<footer>`) accept an
105
210
  optional `className`, merged with the existing `cn` helper. It is purely
106
211
  presentational: no layout, structure, or behavior prop, and no hardcoded color.
107
212
 
108
213
  - **Omitted `className`** — the block renders its default surface unchanged.
109
214
  `Navbar4` keeps `bg-background/95` **and** its
110
- `supports-backdrop-filter:bg-background/80` variant; `FooterSection1` keeps
215
+ `supports-backdrop-filter:bg-background/80` variant; `FooterSection` keeps
111
216
  `bg-secondary`.
112
217
  - **Supplied `className`** — the consumer owns the surface. The default
113
218
  background **and its backdrop-filter variant** are not applied, so a semantic
@@ -116,13 +221,13 @@ presentational: no layout, structure, or behavior prop, and no hardcoded color.
116
221
  it). Layout, border, sticky, and `backdrop-blur-md` classes stay internal.
117
222
 
118
223
  The consumer is responsible for the text, transparency, and context tokens of a
119
- supplied surface. `Navbar4` adapts its primary nav links: they inherit the
224
+ supplied surface. `StorefrontNavbar` adapts its primary nav links: they inherit the
120
225
  surface text color and add `hover:text-foreground` so `hover:bg-muted` never
121
226
  paints white-on-light. No magic colors are introduced by the block.
122
227
 
123
- ## Navbar4 account affordance
228
+ ## StorefrontNavbar account affordance
124
229
 
125
- `Navbar4` renders a **session-driven** account affordance exclusively from
230
+ `StorefrontNavbar` renders a **session-driven** account affordance exclusively from
126
231
  consumer-supplied props — it never resolves a session or authenticates itself.
127
232
  Given a `user` (`StoreUser`; `avatar` is optional) and `accountMenuItems`, it
128
233
  renders an authenticated account menu with the identity, the configured items,
@@ -140,10 +245,10 @@ authentication.
140
245
 
141
246
  ## Footer newsletter
142
247
 
143
- `FooterSection1` renders the interactive newsletter form (input + submit button)
144
- **only** when `newsletter.onSubmit` is supplied. A `newsletter` object without
145
- `onSubmit` renders no form, input, or button — never a fake form. Omit
146
- `newsletter` entirely to hide the newsletter block.
248
+ `FooterSection` renders the newsletter form disabled when
249
+ `onNewsletterSubmit` is absent. When supplied, the callback receives the entered
250
+ email; the block performs no network request. Omit `newsletter` to hide the
251
+ newsletter block.
147
252
 
148
253
  ## Cart presentation (controlled)
149
254
 
@@ -175,10 +280,10 @@ either is visible in the other.
175
280
  suggestion list (name, optional image, optional `Money` price) rendered only
176
281
  when supplied.
177
282
 
178
- `Navbar4` owns the lateral. Pass `cartOpen` + `onCartOpenChange` to control the
283
+ `StorefrontNavbar` owns the lateral. Pass `cartOpen` + `onCartOpenChange` to control the
179
284
  sheet's visibility from host state (omit both to keep the legacy uncontrolled
180
285
  sheet); the block keeps `aria-expanded`/`data-state` in sync. Its cart sheet
181
- (`Navbar4CartSheet`) takes an optional `canonical` mode where each line shows the
286
+ (`StorefrontNavbarCartSheet`) takes an optional `canonical` mode where each line shows the
182
287
  canonical `lineTotal` (never the placeholder numeric price), plus
183
288
  `checkoutUnavailable`/`viewCartUnavailable` to hide actions the store cannot
184
289
  serve, and a `state` (`'idle' | 'pending' | 'error'`) with retry for read/mutation
@@ -210,18 +315,141 @@ affordance only when supplied. Prices render through the canonical
210
315
  `formatMoney` path (no hardcoded currency), and every label is overridable
211
316
  with Spanish defaults (`Agregar al carrito`, `Precio no disponible`, …).
212
317
 
213
- ## Checkout blocks (controlled)
214
-
215
- `CheckoutForm1` (3-step wizard) and `CheckoutForm2` (single page) are **controlled components**: they receive the current form values through a `values` prop and report every edit through `onChange`. They hold no internal form state, so a renderer's validation context can read field values from its own state model. `CheckoutForm3` (4-step wizard) keeps the same contract with internal step state.
216
-
217
- - `paymentMethods?: PaymentMethod[]` — available payment methods as data (canonical `@thorprovider/types` `PaymentMethod`). The blocks render a radio list from this prop, show the selected method's name + `description`, and only render the card fields (`cardNumber`, `expiryDate`, `cvv`, `cardName`) when the selected method's `type === 'card'`. No payment method is hardcoded; pass an empty list to trigger the empty state.
218
- - `values: CheckoutForm1FormData` / `CheckoutForm2Data` — current field values (including `cardNumber`, `expiryDate`, `cvv`, `cardName`, and `paymentMethod` for `CheckoutForm1`/`CheckoutForm3`).
219
- - `onChange: (field, value) => void` — reported per edit; card grouping and MM/YY masking are applied by the block before the value reaches `onChange` (presentation only, no validation logic in the block).
220
- - `fieldErrors?: Partial<Record<FieldKey, Array<{ message?: string }>>>` — per-field error messages rendered via `FieldError` (`role="alert"`, `aria-invalid`/`aria-describedby` wiring). The same channel carries async/server errors (e.g. payment decline, invalid promo).
221
- - `fieldDescriptions?: Partial<Record<FieldKey, string>>` — helper text rendered via `FieldDescription`.
222
- - `validateStep?: (step: number) => boolean` (wizard only) — the block calls it on "Next"; advance only happens when it returns `true`, and the final submit only fires when every step validates.
318
+ ## Checkout block (page-level, controlled)
319
+
320
+ `Checkout` is the single public checkout surface; it replaces the numbered `CheckoutForm1`, `CheckoutForm2`, and `CheckoutForm3` blocks. It is a **controlled component**: field values arrive through `values` and every edit is reported through `onChange`, so the host owns all commercial state. The block owns only the ephemeral step index of the `stepper` presentation.
321
+
322
+ - `presentation: 'single-page' | 'stepper'` (required) — `single-page` renders every section visible at once (summary first in DOM order on mobile); `stepper` shows one step at a time with an accessible progress indicator. Both accept the same props and emit the same callbacks.
323
+ - `showReviewStep?: boolean` — appends a confirmation step (`stepper`) or section (`single-page`) before submission.
324
+ - `values: CheckoutValues` — `email`, `firstName`, `lastName`, `phone`, `address`, `city`, `state`, `zipCode`, `country`, `paymentMethod`, `saveInfo`, `newsletter`, `promoCode`. There are no card fields.
325
+ - `onChange: (field, value) => void` — reported per edit. The block holds no private copy of the form data and applies no masking.
326
+ - `orderSummary?: { items, totals? }` — line identity, name, quantity, optional variant/image, optional canonical `Money` `lineTotal` and `unitPrice`, plus backend `totals` (`subtotal`, optional `discount`/`tax`/`shipping`, `total`). Amounts render verbatim; required totals that are absent or malformed render as unavailable with the retry action, never as zero. No local arithmetic, tax rate, shipping cost, threshold, or hardcoded currency.
327
+ - `totalsState?: 'idle' | 'pending' | 'error'` and `onRetryTotals?` — controlled reads; pending and failed states render status/alert copy without inventing amounts.
328
+ - `countries?: { value, label }[]`, `shippingOptions?`, `selectedShippingOptionId?`, `onSelectShippingOption?` — host-owned options and selection. With no country list the block renders a text input; with no shipping options it renders no method section; nothing is pre-selected.
329
+ - `paymentMethods?: PaymentMethod[]` — payment methods as data (canonical `@thorprovider/types`). One option per method, the selected method's description, an empty state for an empty list, and a non-selectable rendering for `isEnabled === false`. The block renders **no raw card fields**: card collection belongs to the host payment-provider surface.
330
+ - `labels?: Partial<CheckoutLabels>` and `formatMoney?: (money: Money) => string` — every user-facing string is overridable (neutral English defaults) and amounts format through canonical `Money` with no hardcoded symbol.
331
+ - `fieldErrors?` / `fieldDescriptions?` — per-field messages and helper text, rendered with `role="alert"` and `aria-invalid`/`aria-describedby` wiring.
332
+ - `validateStep?: (step: CheckoutStepId) => boolean` and `onStepChange?` — the block consults `validateStep` before advancing and for every applicable step before submitting; `onStepChange` is a notification only, never a controlled value. Without the callback the block advances and leaves submit protection to the host.
333
+ - `onSubmit?`, `submitting?`, `submitError?`, `onRetrySubmit?` — submission is reported, with a pending guard and a recoverable error state; the block never creates an order, clears a cart, or claims success.
334
+
335
+ Validation itself is **not** implemented in the block. Declare checks in your store spec's validation configuration (built-in `required`/`email`/`pattern`/`minLength`/`maxLength`/cross-field `requiredIf`/`equalTo`/`lessThan`/`greaterThan`, plus catalog-registered custom functions) and evaluate them with the renderer; the messages live in the spec so they are per-store and per-language.
336
+
337
+ The order summary is an internal projection of `Checkout`, not a separate block. Order receipt and fulfilment progress remain `CheckoutConfirmation`.
338
+
339
+ ### Migrating from the numbered checkout blocks
340
+
341
+ | Retired | Replacement |
342
+ | --- | --- |
343
+ | `CheckoutForm1` | `<Checkout presentation="stepper" />` — same controlled values minus `cardNumber`/`expiryDate`/`cvv`/`cardName`/`sameAsBilling`; `validateStep` now receives a `CheckoutStepId` (`'contact' \| 'shipping' \| 'payment' \| 'review'`) instead of a number |
344
+ | `CheckoutForm2` | `<Checkout presentation="single-page" />` — the host supplies `Money` totals; the block no longer computes tax, shipping, or free-shipping thresholds |
345
+ | `CheckoutForm3` | `<Checkout presentation="stepper" showReviewStep />` — values become controlled; `apartment`, card fields, per-step icons, and internal `isStepComplete` state are gone |
346
+
347
+
348
+ ## Order history (canonical)
349
+
350
+ `OrderHistory` is the single public order-history surface; it replaces the
351
+ numbered `OrderHistory1` and `OrderHistory2` blocks. It renders a collection of
352
+ **orders**, and each order's lines render through `OrderLine`, the canonical
353
+ item cell. Pagination, ordering, detail navigation, loading/error states, and
354
+ the amount formatter all belong to the host.
355
+
356
+ - `orders: OrderHistoryOrder[]` — each order carries `id` (backend identity: the
357
+ React key and the value reported to the actions), `number` (rendered through
358
+ `orderLabel`), `date` (already formatted by the host), `status`
359
+ (`{ label, tone? }`), `total: Money`, `items: OrderLineData[]`, and an optional
360
+ `trackable`. Two orders may share a display number; `id` keeps them distinct.
361
+ - `presentation: 'cards' | 'rows'` (default `cards`) — a bounded structure
362
+ switch. `cards` renders one card per order (muted header strip, line grid,
363
+ total footer); `rows` renders one bordered row per order. Both accept the same
364
+ data and report the same actions. Responsiveness is grid/stack CSS only: no
365
+ viewport measurement, no item-visibility breakpoints, no carousel.
366
+ - `total: Money` is the backend order total and renders **verbatim**. The
367
+ collection never sums its lines, never multiplies a unit price by a quantity,
368
+ and never formats with a hardcoded currency: every amount goes through
369
+ `formatMoney`/`isAvailableMoney` from `lib/money.ts`, and an absent or
370
+ malformed amount renders `amountUnavailableLabel` (never `0`).
371
+ - `status` is data. `status.label` is rendered and `status.tone`
372
+ (`default | secondary | destructive | outline`) styles it, so the block never
373
+ compares a status string to a literal in any language.
374
+ - `onViewOrder(id)` and `onTrackOrder(id)` receive the backend order id. A
375
+ missing handler removes its control (no inert button), and the tracking action
376
+ additionally requires `trackable === true`. Neither action navigates, tracks,
377
+ or requests on its own.
378
+ - `labels?: Partial<OrderHistoryLabels>`, `locale?`, `formatMoney?(money)` —
379
+ every rendered string is overridable (Spanish defaults, like the rest of the
380
+ commerce family), placeholders (`Pedido {number}`, `Realizado el {date}`,
381
+ `Cantidad: {n}`) interpolate host data, and a host formatter wins over
382
+ `locale`, which wins over the canonical default. All paths still go through
383
+ `formatMoney`.
384
+ - Empty state: an empty `orders` array renders `emptyLabel` inside the labelled
385
+ region instead of an empty shell.
386
+
387
+ `OrderLine` is public so a host can render a single line outside the collection
388
+ (order detail, receipt line). It takes `{ name, image?, details?, quantity,
389
+ lineTotal }` plus optional copy and formatter props; an absent or empty `image`
390
+ renders a neutral placeholder — never `<img src="">` — and absent `details` is
391
+ omitted. It has no list semantics and owns no collection state.
392
+
393
+ ### Migrating from the numbered order-history blocks
394
+
395
+ | Retired | Replacement |
396
+ | --- | --- |
397
+ | `OrderHistory1` | `<OrderHistory presentation="rows" />` — the numbered block's flat per-item table becomes the order-level row presentation; each former row is an `OrderLineData` under its order (`OrderHistory1Order` → `OrderHistoryOrder` + `OrderLineData`) |
398
+ | `OrderHistory2` | `<OrderHistory presentation="cards" />` — the carousel, the numeric item-visibility breakpoints, and the internal `useWindowSize` measurement are gone; items render as a responsive grid |
399
+ | numeric `price: number` (`OrderHistory1`) | `lineTotal: Money` — the backend decimal is rendered verbatim, never recomputed with `toFixed` |
400
+ | string `price`/`total` (`OrderHistory2`) | `lineTotal: Money` / `total: Money` — the host stops pre-formatting; the block formats from the value's own currency code |
401
+ | `status: string` (`OrderHistory2`) | `status: { label, tone? }` — copy and styling arrive as data instead of an English string compared inside the block |
402
+ | flat `*Label` props (both) | `labels?: Partial<OrderHistoryLabels>` with `{number}`/`{date}`/`{n}` placeholders |
403
+
404
+
405
+ ## Reviews (canonical)
406
+
407
+ `ReviewSummary`, `ReviewList`, `ReviewCard`, and `ReviewComposer` replace the
408
+ numbered `ReviewRating1`, `ReviewRating2`, and `ReviewRating1ReviewForm`
409
+ surfaces. The family splits by class: an aggregate unit, a collection, its item
410
+ cell, and a form. A host composes only the pieces it has data for.
411
+
412
+ - `ReviewSummary` requires `averageRating`, `totalReviews`, and a complete 1–5
413
+ `distribution`. It never derives an average, never accepts a partial
414
+ distribution, and never fills five stars regardless of the value: the stars
415
+ come from `averageRating` clamped and rounded, the rows always render 5→1 with
416
+ their counts, and each percentage is `count / totalReviews` (a zero total
417
+ renders `0%`, never `NaN`). A host that holds reviews may derive those numbers
418
+ itself; the block may not, because it does not own the data.
419
+ - `ReviewList` renders exactly the reviews it receives — pagination, ordering,
420
+ loading, and error states belong to the host. `presentation: 'list' |
421
+ 'carousel'` is the bounded structure switch; both accept the same data and
422
+ report the same actions, and responsiveness is CSS only (no viewport
423
+ measurement). An empty array renders `emptyLabel` instead of an empty shell.
424
+ - `ReviewCard` takes one review: `{ id, author, avatar?, date, dateTime?,
425
+ rating, content, helpfulCount?, likedByViewer? }`. `date` is a display string
426
+ rendered verbatim; `dateTime` is emitted only when it parses, so an unparsable
427
+ date never throws. `helpfulCount` and `likedByViewer` are host-authoritative:
428
+ the cell renders them and reports intent, it never increments a count or
429
+ toggles its own state. The like control renders only with `onToggleLike` and
430
+ the comment control only with `onComment` — no handler, no control. An absent
431
+ or empty `avatar` renders initials, never `<img src="">`.
432
+ - `ReviewComposer` owns the draft and reports one submission
433
+ (`{ name, email, content, rating }`). `isSubmitting` and `error` come from the
434
+ host; a pending state disables submit, an error keeps every entered value, and
435
+ the fields clear only when the host advances `resetSignal` (after a successful
436
+ submission). Field ids come from `useId`, so two composers on one page never
437
+ collide, and the rating is one native radio group selectable with arrow keys.
438
+ - Every rendered string, including star and distribution accessible names, is
439
+ overridable through `labels`/`cardLabels` (Spanish defaults).
440
+
441
+ ### Migrating from the numbered review blocks
442
+
443
+ | Retired | Replacement |
444
+ | --- | --- |
445
+ | `ReviewRating1` (page shell, `pageTitle`, client pagination) | `<ReviewList reviews={...} />` plus `<ReviewSummary />` and `<ReviewComposer />` when the host holds those inputs; the page heading and pagination belong to the host |
446
+ | `ReviewRating2` (optional aggregate, carousel) | `<ReviewSummary averageRating totalReviews distribution />` + `<ReviewList presentation="carousel" />` |
447
+ | `ReviewRating1ReviewForm` (`form` labels, `onSubmitReview`) | `<ReviewComposer isSubmitting error resetSignal onSubmit />` |
448
+ | `ReviewRating1Review` (`id: number`, `userName`, `userAvatar`, `likes`) | `ReviewItemData` (`id: string`, `author`, `avatar`, `helpfulCount`, `likedByViewer`) |
449
+ | `reviewsPerPage` (client slicing) | host-owned pagination: the host supplies the page's reviews |
450
+ | local `isLiked` map and `likes + 1` | `likedByViewer` + `helpfulCount` from the host; `onToggleLike(id, liked)` reports intent |
451
+ | five filled stars / `count / maxCount` bars | stars from `averageRating`, bars from `count / totalReviews`, rows 5→1 |
223
452
 
224
- Validation itself is **not** implemented in the blocks. Declare checks in your store spec's validation configuration (built-in `required`/`email`/`pattern`/`minLength`/`maxLength`/cross-field `requiredIf`/`equalTo`/`lessThan`/`greaterThan`, plus catalog-registered custom functions like `luhn`/`cvv`/`expiryDate`) and evaluate them with the renderer; the messages live in the spec so they are per-store and per-language. Without a validation provider the blocks render with no inline errors.
225
453
 
226
454
  ## Usage
227
455
 
@@ -295,4 +523,4 @@ callbacks (`useCallback`); a fresh object literal always notifies a reference-on
295
523
  store guard; and every registered action completes its round-trip (handler → set +
296
524
  emit → spec `on` → recompute → bind). See
297
525
  [`docs/standards/interaction-contracts.md`](docs/standards/interaction-contracts.md)
298
- for the rules and the review checklist.
526
+ for the rules and the review checklist.