@thorprovider/blocks 2.0.0 → 3.0.1

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 (842) hide show
  1. package/README.md +120 -8
  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 +10 -2
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -155
  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.test.tsx +0 -190
  697. package/src/blocks/application/login-forms/login-page.tsx +0 -240
  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 -318
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -229
  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/application/viewport-ownership.test.tsx +0 -41
  704. package/src/blocks/e-commerce/category-filters/category-listing-filter-fields.tsx +0 -218
  705. package/src/blocks/e-commerce/category-filters/category-listing.test.tsx +0 -601
  706. package/src/blocks/e-commerce/category-filters/category-listing.tsx +0 -934
  707. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  708. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  709. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  710. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  711. package/src/blocks/e-commerce/checkout-forms/checkout-contact-step.tsx +0 -149
  712. package/src/blocks/e-commerce/checkout-forms/checkout-country-field.tsx +0 -53
  713. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  714. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  715. package/src/blocks/e-commerce/checkout-forms/checkout-order-summary.tsx +0 -230
  716. package/src/blocks/e-commerce/checkout-forms/checkout-payment-step.tsx +0 -100
  717. package/src/blocks/e-commerce/checkout-forms/checkout-progress.tsx +0 -62
  718. package/src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx +0 -59
  719. package/src/blocks/e-commerce/checkout-forms/checkout-shipping-step.tsx +0 -180
  720. package/src/blocks/e-commerce/checkout-forms/checkout.test.tsx +0 -478
  721. package/src/blocks/e-commerce/checkout-forms/checkout.tsx +0 -550
  722. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  723. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  724. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  725. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  726. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  727. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  728. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  729. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  730. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  731. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  732. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  733. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  734. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  735. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  736. package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.test.tsx +0 -56
  737. package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.tsx +0 -134
  738. package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.test.tsx +0 -204
  739. package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.tsx +0 -371
  740. package/src/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.tsx +0 -96
  741. package/src/blocks/e-commerce/navigation/storefront-navbar-search-bar.tsx +0 -52
  742. package/src/blocks/e-commerce/navigation/storefront-navbar.test.tsx +0 -264
  743. package/src/blocks/e-commerce/navigation/storefront-navbar.tsx +0 -604
  744. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  745. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  746. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  747. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  748. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  749. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  750. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  751. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  752. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  753. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  754. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  755. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -447
  756. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  757. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  758. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  759. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  760. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  761. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  762. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  763. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  764. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  765. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  766. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  767. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  768. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  769. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  770. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  771. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  772. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  773. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  774. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  775. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  776. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  777. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  778. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  779. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  780. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  781. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  782. package/src/blocks/marketing/features/feature.tsx +0 -195
  783. package/src/blocks/marketing/footers/footer-section-accessibility.test.tsx +0 -118
  784. package/src/blocks/marketing/footers/footer-section-actions.test.tsx +0 -131
  785. package/src/blocks/marketing/footers/footer-section-data.test.tsx +0 -127
  786. package/src/blocks/marketing/footers/footer-section-native-links.test.tsx +0 -100
  787. package/src/blocks/marketing/footers/footer-section-public-api.test.tsx +0 -11
  788. package/src/blocks/marketing/footers/footer-section.test.tsx +0 -46
  789. package/src/blocks/marketing/footers/footer-section.tsx +0 -532
  790. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  791. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  792. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  793. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  794. package/src/blocks/marketing/navbars/navbar-public-api.test.tsx +0 -57
  795. package/src/blocks/marketing/navbars/navbar.mega.test.tsx +0 -149
  796. package/src/blocks/marketing/navbars/navbar.test.tsx +0 -155
  797. package/src/blocks/marketing/navbars/navbar.tsx +0 -735
  798. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  799. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  800. package/src/blocks/marketing/testimonials/testimonial-section.test.tsx +0 -171
  801. package/src/blocks/marketing/testimonials/testimonial-section.tsx +0 -237
  802. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  803. package/src/hooks/use-mobile.ts +0 -19
  804. package/src/index.ts +0 -284
  805. package/src/lib/cart.test.ts +0 -15
  806. package/src/lib/contracts-curated.test.ts +0 -225
  807. package/src/lib/contracts-server-boundary.test.ts +0 -52
  808. package/src/lib/contracts.test.ts +0 -228
  809. package/src/lib/contracts.ts +0 -857
  810. package/src/lib/money.test.ts +0 -64
  811. package/src/lib/money.ts +0 -65
  812. package/src/lib/types/menu.ts +0 -43
  813. package/src/lib/types.ts +0 -4
  814. package/src/lib/utils.ts +0 -10
  815. package/src/ui/accordion.tsx +0 -65
  816. package/src/ui/badge.tsx +0 -47
  817. package/src/ui/breadcrumb.tsx +0 -108
  818. package/src/ui/button-group.tsx +0 -83
  819. package/src/ui/button.tsx +0 -63
  820. package/src/ui/card.tsx +0 -91
  821. package/src/ui/carousel.tsx +0 -241
  822. package/src/ui/dialog.tsx +0 -158
  823. package/src/ui/drawer.tsx +0 -134
  824. package/src/ui/dropdown-menu.tsx +0 -256
  825. package/src/ui/empty.tsx +0 -103
  826. package/src/ui/input-otp.tsx +0 -76
  827. package/src/ui/label.tsx +0 -23
  828. package/src/ui/pagination.tsx +0 -127
  829. package/src/ui/progress.tsx +0 -30
  830. package/src/ui/radio-group.tsx +0 -44
  831. package/src/ui/select.tsx +0 -189
  832. package/src/ui/separator.tsx +0 -27
  833. package/src/ui/sheet.tsx +0 -142
  834. package/src/ui/sidebar.tsx +0 -726
  835. package/src/ui/skeleton.tsx +0 -13
  836. package/src/ui/table.tsx +0 -115
  837. package/src/ui/toggle-group.tsx +0 -83
  838. package/src/ui/tooltip.tsx +0 -56
  839. package/tsconfig.build.json +0 -12
  840. package/tsconfig.json +0 -20
  841. package/tsup.config.ts +0 -19
  842. package/vitest.config.ts +0 -17
@@ -1,857 +0,0 @@
1
- import { z } from 'zod'
2
- import type { Money, PaymentMethod, ProductPreview } from '@thorprovider/types'
3
-
4
- /**
5
- * Serialization contracts for spec-driven storefronts.
6
- *
7
- * These Zod schemas are the *serializable subset* of what a spec may write for
8
- * a block. The component keeps its rich React interface; the catalog/registry
9
- * is the adapter that maps these props to real component props and binds
10
- * callbacks (see storefronts-on-blocks design D3). `z.infer` is the typed
11
- * boundary between spec and catalog — a prop outside the schema is a compile
12
- * error, not a runtime surprise.
13
- *
14
- * Data shapes are projections of the @thorprovider/types canon so that
15
- * @thorprovider/adapters output validates without conflict:
16
- * - Prices are plain numbers here while the canon `Money` is a decimal string
17
- * ({ amount: "45.00", currencyCode }). The projection happens at the
18
- * loader boundary.
19
- * - Blocks use `title` while the canon `ProductPreview` uses `name`. Reconcile
20
- * via the canonical aliases below or the catalog/loader adapter.
21
- */
22
- export type CanonMoney = Money
23
- export type CanonProduct = ProductPreview
24
-
25
- /**
26
- * Fallback data-URI for required image fields when the data source has no
27
- * image. Image fields are non-optional `z.string()` in these contracts, so the
28
- * boundary must never emit `""` (React warns about `src=""`); it must emit a
29
- * real, renderable value. Hosts may override with their own branded fallback
30
- * (e.g. electrostore's `CATEGORY_IMAGE_FALLBACK`), but blocks ship a neutral
31
- * one so direct consumers are safe by default.
32
- */
33
- export const PRODUCT_IMAGE_FALLBACK =
34
- 'data:image/svg+xml;charset=utf-8,' +
35
- encodeURIComponent(
36
- `<svg xmlns='http://www.w3.org/2000/svg' width='600' height='600'><rect width='100%' height='100%' fill='#e2e8f0'/><g fill='none' stroke='#94a3b8' stroke-width='12' stroke-linecap='round'><path d='M150 300h300M300 150v300'/><path d='M220 230h50M220 300h50M220 370h50'/><path d='M330 230h50M330 300h50M330 370h50'/></g></svg>`,
37
- )
38
-
39
- // ---------------------------------------------------------------------------
40
- // Data contracts
41
- // ---------------------------------------------------------------------------
42
-
43
- /**
44
- * Canonical `Money` (`@thorprovider/types`): a decimal string in major units
45
- * (`"69.99"`), never cents. A missing price is represented by omitting the
46
- * field (or `null` on a nullable field), not by an empty string.
47
- *
48
- * The amount stays a permissive `z.string()` on purpose: an unresolved backend
49
- * price may arrive as the canonical sentinel `""`, and tightening the schema
50
- * would reject the whole view instead of letting the presentation layer render
51
- * an unavailable state. Validity is enforced at render time by
52
- * `isAvailableMoney`/`formatMoney` (a `""`/malformed amount never becomes `$0`).
53
- */
54
- export const moneySchema: z.ZodType<Money> = z.object({
55
- amount: z.string(),
56
- currencyCode: z.string(),
57
- })
58
-
59
- const imageSchema = z.object({
60
- id: z.string().optional(),
61
- url: z.string(),
62
- altText: z.string(),
63
- width: z.number().optional(),
64
- height: z.number().optional(),
65
- })
66
-
67
- const selectedOptionSchema = z.object({
68
- name: z.string(),
69
- value: z.string(),
70
- })
71
-
72
- export const productDetailVariantSchema = z.object({
73
- id: z.string(),
74
- title: z.string(),
75
- sku: z.string().optional(),
76
- availableForSale: z.boolean(),
77
- selectedOptions: z.array(selectedOptionSchema),
78
- /** Omit or null when the backend has no resolved price (purchase disabled). */
79
- price: moneySchema.nullish(),
80
- compareAtPrice: moneySchema.optional(),
81
- image: imageSchema.optional(),
82
- })
83
- export type ProductDetailVariantSpec = z.infer<typeof productDetailVariantSchema>
84
-
85
- export const productDetailProductSchema = z.object({
86
- id: z.string(),
87
- handle: z.string().optional(),
88
- title: z.string(),
89
- description: z.string().optional(),
90
- vendor: z.string().optional(),
91
- options: z.array(z.object({ id: z.string(), name: z.string(), values: z.array(z.string()) })),
92
- variants: z.array(productDetailVariantSchema),
93
- images: z.array(imageSchema),
94
- featuredImage: imageSchema.optional(),
95
- })
96
- export type ProductDetailProductSpec = z.infer<typeof productDetailProductSchema>
97
-
98
- /**
99
- * Canonical ProductOverview contract. Uses the canonical product projection and adds the
100
- * bounded `presentation` option plus the `rich` presentation's optional data. Callbacks are not
101
- * part of the schema (they are runtime props).
102
- */
103
- export const productOverviewReviewSchema = z.object({
104
- id: z.number(),
105
- author: z.string(),
106
- rating: z.number(),
107
- comment: z.string(),
108
- date: z.string(),
109
- helpful: z.number().optional(),
110
- })
111
-
112
- export const productOverviewPropsSchema = z.object({
113
- product: productDetailProductSchema,
114
- presentation: z.enum(['standard', 'gallery', 'rich']).optional(),
115
- selectedVariantId: z.string().nullable().optional(),
116
- quantity: z.number().optional(),
117
- rating: z.object({ value: z.number(), count: z.number() }).optional(),
118
- deliveryEstimate: z.string().optional(),
119
- shipping: moneySchema.optional(),
120
- specifications: z.record(z.string(), z.string()).optional(),
121
- features: z.array(z.string()).optional(),
122
- reviews: z.array(productOverviewReviewSchema).optional(),
123
- sizesLabel: z.string().optional(),
124
- variantLabel: z.string().optional(),
125
- reviewsLabel: z.string().optional(),
126
- addToCartLabel: z.string().optional(),
127
- outOfStockLabel: z.string().optional(),
128
- unavailablePriceLabel: z.string().optional(),
129
- selectVariantLabel: z.string().optional(),
130
- quantityLabel: z.string().optional(),
131
- deliveryEstimateLabel: z.string().optional(),
132
- shippingLabel: z.string().optional(),
133
- badgeLabel: z.string().optional(),
134
- availabilityLabel: z.string().optional(),
135
- skuLabel: z.string().optional(),
136
- overviewLabel: z.string().optional(),
137
- specsLabel: z.string().optional(),
138
- featuresLabel: z.string().optional(),
139
- specificationsLabel: z.string().optional(),
140
- galleryLabel: z.string().optional(),
141
- photosLabel: z.string().optional(),
142
- saveLabel: z.string().optional(),
143
- savedLabel: z.string().optional(),
144
- shareLabel: z.string().optional(),
145
- basedOnReviewsLabel: z.string().optional(),
146
- foundHelpfulLabel: z.string().optional(),
147
- ofCounterLabel: z.string().optional(),
148
- freeDeliveryLabel: z.string().optional(),
149
- })
150
- export type ProductOverviewSpecProps = z.infer<typeof productOverviewPropsSchema>
151
-
152
- export const cardProductSchema = z.object({
153
- id: z.union([z.string(), z.number()]),
154
- title: z.string(),
155
- price: z.number(),
156
- originalPrice: z.number().optional(),
157
- image: z.string(),
158
- badge: z.string().optional(),
159
- })
160
- export type CardProduct = z.infer<typeof cardProductSchema>
161
-
162
- export const cartItemSchema = z.object({
163
- id: z.string(),
164
- name: z.string(),
165
- price: z.number(),
166
- quantity: z.number().int().min(0),
167
- /** Optional; absent images are omitted, never serialized as `""`. */
168
- image: z.string().optional(),
169
- variant: z.string().optional(),
170
- /** Canonical backend per-unit price, preferred for display when present. */
171
- unitPrice: moneySchema.optional(),
172
- /** Canonical backend line total, preferred over `price * quantity`. */
173
- lineTotal: moneySchema.optional(),
174
- })
175
- export type CartItem = z.infer<typeof cartItemSchema>
176
-
177
- export const cartTotalsSchema = z.object({
178
- subtotal: moneySchema,
179
- discount: moneySchema.optional(),
180
- tax: moneySchema.optional(),
181
- shipping: moneySchema.optional(),
182
- total: moneySchema,
183
- })
184
- export type CartTotals = z.infer<typeof cartTotalsSchema>
185
-
186
- export const recentlyViewedItemSchema = z.object({
187
- id: z.string(),
188
- name: z.string(),
189
- price: z.number(),
190
- image: z.string(),
191
- })
192
- export type RecentlyViewedItem = z.infer<typeof recentlyViewedItemSchema>
193
-
194
- export const promotionSchema = z.object({
195
- threshold: z.number(),
196
- reward: z.string(),
197
- icon: z.string().default('gift'),
198
- })
199
- export type Promotion = z.infer<typeof promotionSchema>
200
-
201
- const storeCategoryBase = {
202
- label: z.string(),
203
- href: z.string(),
204
- emphasis: z.boolean().optional(),
205
- }
206
-
207
- export const storeCategorySchema: z.ZodType<StoreCategory> = z.lazy(() =>
208
- z.object({
209
- ...storeCategoryBase,
210
- children: z.array(storeCategorySchema).optional(),
211
- }),
212
- )
213
- export type StoreCategory = {
214
- label: string
215
- href: string
216
- children?: StoreCategory[]
217
- emphasis?: boolean
218
- }
219
-
220
- export const utilityLinkSchema = z.object({
221
- label: z.string(),
222
- href: z.string(),
223
- })
224
- export type UtilityLink = z.infer<typeof utilityLinkSchema>
225
-
226
- export const navCartItemSchema = z.object({
227
- id: z.string(),
228
- name: z.string(),
229
- variant: z.string().optional(),
230
- price: z.number(),
231
- qty: z.number().int().min(0),
232
- /** Optional; absent images are omitted, never serialized as `""`. */
233
- image: z.string().optional(),
234
- })
235
- export type NavCartItem = z.infer<typeof navCartItemSchema>
236
-
237
- export const storeUserSchema = z.object({
238
- name: z.string(),
239
- email: z.string(),
240
- avatar: z.string().optional(),
241
- initials: z.string(),
242
- })
243
- export type StoreUser = z.infer<typeof storeUserSchema>
244
-
245
- export const accountMenuItemSchema = z.object({
246
- label: z.string(),
247
- href: z.string(),
248
- description: z.string().optional(),
249
- icon: z.enum(['orders', 'wishlist', 'addresses', 'settings']).optional(),
250
- })
251
- export type AccountMenuItem = z.infer<typeof accountMenuItemSchema>
252
-
253
- /**
254
- * Serialization contract for a payment method offered at checkout.
255
- *
256
- * A projection of `@thorprovider/types` `PaymentMethod` — the storefront-facing
257
- * shape produced by the adapters transform. Checkout blocks render the method
258
- * list from this data instead of hardcoding providers.
259
- */
260
- export const paymentMethodSchema: z.ZodType<PaymentMethod> = z.object({
261
- id: z.string(),
262
- name: z.string(),
263
- type: z.enum([
264
- 'card',
265
- 'wallet',
266
- 'bank_transfer',
267
- 'buy_now_pay_later',
268
- 'cash_on_delivery',
269
- 'crypto',
270
- 'other',
271
- ]),
272
- isEnabled: z.boolean(),
273
- requiresSetup: z.boolean(),
274
- description: z.string().optional(),
275
- metadata: z.record(z.string(), z.unknown()).optional(),
276
- features: z
277
- .object({
278
- saveForLater: z.boolean().optional(),
279
- requires3DS: z.boolean().optional(),
280
- supportsRefunds: z.boolean().optional(),
281
- minAmount: z.number().optional(),
282
- maxAmount: z.number().optional(),
283
- supportedCurrencies: z.array(z.string()).optional(),
284
- requiresVerification: z.boolean().optional(),
285
- })
286
- .optional(),
287
- logo: z.string().optional(),
288
- })
289
-
290
- // ---------------------------------------------------------------------------
291
- // Block prop schemas
292
- // ---------------------------------------------------------------------------
293
-
294
- export const buttonPropsSchema = z.object({
295
- variant: z
296
- .enum(['default', 'destructive', 'outline', 'secondary', 'ghost', 'link'])
297
- .optional(),
298
- size: z
299
- .enum(['default', 'xs', 'sm', 'lg', 'icon', 'icon-xs', 'icon-sm', 'icon-lg'])
300
- .optional(),
301
- disabled: z.boolean().optional(),
302
- className: z.string().optional(),
303
- })
304
- export type ButtonSpecProps = z.infer<typeof buttonPropsSchema>
305
-
306
- export const storeContainer1PropsSchema = z.object({
307
- size: z.enum(['default', 'narrow', 'wide', 'full']).optional(),
308
- className: z.string().optional(),
309
- })
310
- export type StoreContainer1SpecProps = z.infer<typeof storeContainer1PropsSchema>
311
-
312
- /**
313
- * Canonical product presentation — the serializable projection a storefront host
314
- * produces from a canonical `Product` for the merchandising sections. Unlike
315
- * `cardProductSchema` (legacy, numeric `price`), `price`/`compareAtPrice` carry
316
- * canonical `Money` (decimal major-unit string + currency code), so the block
317
- * formats in the shopper's currency and locale and renders a truthful
318
- * unavailable state instead of `$0`. Optional fields are omitted, never `""`.
319
- *
320
- * This contract is additive: `cardProductSchema` and its consumers are
321
- * unchanged, and a legacy numeric `price` still renders the legacy output.
322
- */
323
- export const productPresentationSchema = z.object({
324
- id: z.union([z.string(), z.number()]),
325
- title: z.string(),
326
- /** Omitted (never `""`) when the backend has no image. */
327
- image: z.string().optional(),
328
- imageAlt: z.string().optional(),
329
- /** Product destination; omitted when unknown. */
330
- href: z.string().optional(),
331
- price: moneySchema,
332
- /** Comparison ("was") price; rendered only when valid and higher than `price`. */
333
- compareAtPrice: moneySchema.optional(),
334
- /** Only from real evidence; omitted otherwise (never fabricated). */
335
- rating: z.number().optional(),
336
- badge: z.string().optional(),
337
- })
338
- export type ProductPresentation = z.infer<typeof productPresentationSchema>
339
-
340
- /**
341
- * Canonical product card contract (item cell of a product listing). The cell
342
- * consumes one canonical `ProductPresentation` projection only — the legacy
343
- * numeric-price card shape is not accepted. `presentation` is the bounded
344
- * structure switch (`classic`/`minimal`/`rich`) and `wishlisted` is the
345
- * host-resolved membership state; callbacks and label strings are runtime
346
- * props and are excluded here. Collection concerns (heading, item cap, loading
347
- * and empty states) belong to `ProductGrid`.
348
- */
349
- export const productCardPropsSchema = z.object({
350
- item: productPresentationSchema,
351
- presentation: z.enum(['classic', 'minimal', 'rich']).optional(),
352
- wishlisted: z.boolean().optional(),
353
- })
354
- export type ProductCardSpecProps = z.infer<typeof productCardPropsSchema>
355
-
356
- /**
357
- * Canonical product grid contract (listing). Consumes a collection of
358
- * canonical `ProductPresentation` items and owns the listing's heading, item
359
- * cap, wishlist membership, and loading/empty/ready states. `wishlistedIds` is
360
- * resolved per cell before rendering, so the cell receives only its own
361
- * boolean. Callbacks and label strings are runtime props and are excluded
362
- * here. Error state belongs to the host.
363
- */
364
- export const productGridPropsSchema = z.object({
365
- items: z.array(productPresentationSchema),
366
- presentation: z.enum(['classic', 'minimal', 'rich']).optional(),
367
- heading: z.string().optional(),
368
- maxItems: z.number().int().positive().optional(),
369
- wishlistedIds: z.array(z.union([z.string(), z.number()])).readonly().optional(),
370
- loading: z.boolean().optional(),
371
- skeletonCount: z.number().int().positive().optional(),
372
- emptyLabel: z.string().optional(),
373
- })
374
- export type ProductGridSpecProps = z.infer<typeof productGridPropsSchema>
375
-
376
- /**
377
- * Serializable contract for the combined grid-and-carousel product
378
- * presentation (`ProductShowcase1`). The grid pages are fixed-size, navigated
379
- * manually (prev/next) with a visible current-page indication; there is no
380
- * autoplay and no infinite loop. React-only callbacks are excluded.
381
- */
382
- export const productShowcase1PropsSchema = z.object({
383
- products: z.array(productPresentationSchema),
384
- heading: z.string().optional(),
385
- description: z.string().optional(),
386
- pageSize: z.number().int().positive().optional(),
387
- prevLabel: z.string().optional(),
388
- nextLabel: z.string().optional(),
389
- pageLabel: z.string().optional(),
390
- unavailablePriceLabel: z.string().optional(),
391
- emptyLabel: z.string().optional(),
392
- addToCartLabel: z.string().optional(),
393
- })
394
- export type ProductShowcase1SpecProps = z.infer<typeof productShowcase1PropsSchema>
395
-
396
- /**
397
- * Canonical shopping cart contract (consolidated shopping-cart family). Lines
398
- * are keyed by the backend cart line-item id and carry canonical `Money`
399
- * amounts only — the legacy numeric-price shape is not accepted: a line always
400
- * carries the backend-authoritative `lineTotal`, and an optional `unitPrice` is
401
- * carried verbatim (never used for a local `price * quantity` computation).
402
- * Suggestions fold the numbered carts' recommendations: optional image (omitted
403
- * when absent) and optional canonical `Money` price. `presentation` is the
404
- * bounded structure switch (`compact`/`page`); callbacks and interaction state
405
- * are runtime props and are excluded here.
406
- */
407
- export const shoppingCartItemSchema = z.object({
408
- id: z.string(),
409
- name: z.string(),
410
- quantity: z.number().int().min(0),
411
- /** Optional; absent images are omitted, never serialized as `""`. */
412
- image: z.string().optional(),
413
- variant: z.string().optional(),
414
- /** Canonical backend line total; a malformed amount renders as unavailable. */
415
- lineTotal: moneySchema,
416
- /** Canonical backend unit price; carried verbatim, never used locally. */
417
- unitPrice: moneySchema.optional(),
418
- })
419
- export type ShoppingCartItem = z.infer<typeof shoppingCartItemSchema>
420
-
421
- export const shoppingCartSuggestionSchema = z.object({
422
- id: z.string(),
423
- name: z.string(),
424
- /** Optional; absent images are omitted, never serialized as `""`. */
425
- image: z.string().optional(),
426
- unitPrice: moneySchema.optional(),
427
- })
428
- export type ShoppingCartSuggestion = z.infer<typeof shoppingCartSuggestionSchema>
429
-
430
- export const shoppingCartPropsSchema = z.object({
431
- items: z.array(shoppingCartItemSchema),
432
- promotions: z.array(promotionSchema).default([]),
433
- recentlyViewed: z.array(shoppingCartSuggestionSchema).optional(),
434
- presentation: z.enum(['compact', 'page']).optional(),
435
- /** Backend-authoritative totals; rendered verbatim, never computed locally. */
436
- totals: cartTotalsSchema.optional(),
437
- totalsState: z.enum(['idle', 'pending', 'error']).optional(),
438
- totalsErrorLabel: z.string().optional(),
439
- totalsUnavailableLabel: z.string().optional(),
440
- amountUnavailableLabel: z.string().optional(),
441
- retryLabel: z.string().optional(),
442
- titleLabel: z.string().optional(),
443
- subtotalLabel: z.string().optional(),
444
- discountLabel: z.string().optional(),
445
- taxLabel: z.string().optional(),
446
- shippingLabel: z.string().optional(),
447
- shippingFreeLabel: z.string().optional(),
448
- totalLabel: z.string().optional(),
449
- totalsPendingLabel: z.string().optional(),
450
- awayFromLabel: z.string().optional(),
451
- activatedLabel: z.string().optional(),
452
- itemsLabel: z.string().optional(),
453
- expressCheckoutLabel: z.string().optional(),
454
- expressLabel: z.string().optional(),
455
- standardLabel: z.string().optional(),
456
- estimatedDeliveryLabel: z.string().optional(),
457
- secureCheckoutLabel: z.string().optional(),
458
- recentlyViewedLabel: z.string().optional(),
459
- promoPromptLabel: z.string().optional(),
460
- promoPlaceholderLabel: z.string().optional(),
461
- promoApplyLabel: z.string().optional(),
462
- collapseLabel: z.string().optional(),
463
- expandLabel: z.string().optional(),
464
- checkoutLabel: z.string().optional(),
465
- quickCheckoutLabel: z.string().optional(),
466
- checkoutNowLabel: z.string().optional(),
467
- emptyLabel: z.string().optional(),
468
- removeLabel: z.string().optional(),
469
- decreaseLabel: z.string().optional(),
470
- increaseLabel: z.string().optional(),
471
- })
472
- export type ShoppingCartSpecProps = z.infer<typeof shoppingCartPropsSchema>
473
-
474
- /**
475
- * Optional brand seams shared by the existing blocks. These mirror the
476
- * components' optional props as a serializable subset (no React): an accent
477
- * marks a trailing segment of the wordmark/brand name, and an editorial image
478
- * is a native `<img>` source. Omitting each keeps the block's current output.
479
- */
480
- export const logoAccentSchema = z.object({
481
- text: z.string(),
482
- className: z.string().optional(),
483
- })
484
- export type LogoAccent = z.infer<typeof logoAccentSchema>
485
-
486
- export const brandAccentSchema = z.object({
487
- text: z.string(),
488
- className: z.string().optional(),
489
- })
490
- export type BrandAccent = z.infer<typeof brandAccentSchema>
491
-
492
- export const heroImageSchema = z.object({
493
- src: z.string(),
494
- alt: z.string(),
495
- })
496
- export type HeroImage = z.infer<typeof heroImageSchema>
497
-
498
- /**
499
- * Serializable contract for the canonical commerce storefront shell
500
- * (`StorefrontNavbar`). Identity, cart, and search state stay host-owned: the
501
- * schema carries content and display state only, never cart arithmetic.
502
- */
503
- export const storefrontNavbarPropsSchema = z.object({
504
- storeCategories: z.array(storeCategorySchema),
505
- shippingNote: z.string().optional(),
506
- utilityLinks: z.array(utilityLinkSchema),
507
- logoText: z.string(),
508
- logoHref: z.string().optional(),
509
- /** Optional accent for a trailing segment of `logoText`; omitted → unchanged. */
510
- logoAccent: logoAccentSchema.optional(),
511
- /**
512
- * Consumer-supplied classes merged onto the block's outer surface as the
513
- * final argument (e.g. a semantic surface token). Omitted → unchanged.
514
- */
515
- className: z.string().optional(),
516
- accountHref: z.string().optional(),
517
- searchQuery: z.string().optional(),
518
- items: z.array(navCartItemSchema).optional(),
519
- /** Authoritative backend subtotal for the mini-cart. */
520
- subtotal: moneySchema.optional(),
521
- subtotalUnavailableLabel: z.string().optional(),
522
- user: storeUserSchema.optional(),
523
- accountMenuItems: z.array(accountMenuItemSchema).optional(),
524
- accountPending: z.boolean().optional(),
525
- accountUnavailable: z.boolean().optional(),
526
- })
527
- export type StorefrontNavbarSpecProps = z.infer<typeof storefrontNavbarPropsSchema>
528
-
529
- /**
530
- * Serializable contracts for the two bounded editorial sections (`faq`, `cta`).
531
- * These are the serializable subset of `FaqBlock1Props`/`CtaSection1Props`: the
532
- * React-only callbacks (`onPrimaryClick`/`onSecondaryClick`) are intentionally
533
- * excluded — the catalog adapter binds them (see design D3).
534
- */
535
- export const ctaSchema = z.object({
536
- label: z.string(),
537
- href: z.string().optional(),
538
- })
539
- export type CtaSpec = z.infer<typeof ctaSchema>
540
-
541
- /** Bounded presentations of the page-level navigation header. */
542
- export const navbarPresentationSchema = z.enum(['bar', 'mega', 'floating'])
543
- export type NavbarPresentationSpec = z.infer<typeof navbarPresentationSchema>
544
-
545
- export const navbarItemSchema = z.object({
546
- label: z.string(),
547
- href: z.string(),
548
- description: z.string().optional(),
549
- /** Key resolved through the consumer's host-bound `iconMap`. */
550
- icon: z.string().optional(),
551
- })
552
- export type NavbarItemSpec = z.infer<typeof navbarItemSchema>
553
-
554
- export const navbarGroupSchema = z.object({
555
- title: z.string().optional(),
556
- items: z.array(navbarItemSchema),
557
- })
558
- export type NavbarGroupSpec = z.infer<typeof navbarGroupSchema>
559
-
560
- export const navbarLinkSchema = z.object({
561
- label: z.string(),
562
- href: z.string().optional(),
563
- groups: z.array(navbarGroupSchema).optional(),
564
- emphasis: z.boolean().optional(),
565
- })
566
- export type NavbarLinkSpec = z.infer<typeof navbarLinkSchema>
567
-
568
- export const navbarFeaturedSchema = z.object({
569
- eyebrow: z.string(),
570
- title: z.string(),
571
- description: z.string().optional(),
572
- href: z.string(),
573
- linkLabel: z.string().optional(),
574
- image: z.string().optional(),
575
- imageAlt: z.string().optional(),
576
- })
577
- export type NavbarFeaturedSpec = z.infer<typeof navbarFeaturedSchema>
578
-
579
- /**
580
- * Serializable contract for the canonical page-level header (`Navbar`). The
581
- * serializable subset excludes the React-only bindings: `iconMap`, `onSignIn`,
582
- * and `onCtaClick` are bound by the host, exactly like the footer's icon map.
583
- */
584
- export const navbarPropsSchema = z.object({
585
- presentation: navbarPresentationSchema.optional(),
586
- logoText: z.string(),
587
- logoHref: z.string().optional(),
588
- currentPath: z.string().optional(),
589
- links: z.array(navbarLinkSchema),
590
- featured: navbarFeaturedSchema.optional(),
591
- signIn: ctaSchema.optional(),
592
- cta: ctaSchema.optional(),
593
- /** Consumer-supplied classes merged onto the header surface last. */
594
- className: z.string().optional(),
595
- })
596
- export type NavbarSpecProps = z.infer<typeof navbarPropsSchema>
597
-
598
- /**
599
- * Serializable subset of the canonical `StorefrontHero`'s props (callbacks
600
- * excluded). Every popularity, review, count, or countdown field is optional
601
- * host-supplied evidence: omitted fields render nothing (honest omission)
602
- * instead of fabricated defaults, and prices are formatted from the supplied
603
- * ISO 4217 `currency` via `Intl.NumberFormat` (never hardcoded).
604
- */
605
- export const storefrontHeroProductSchema = z.object({
606
- id: z.string(),
607
- name: z.string(),
608
- price: z.number(),
609
- originalPrice: z.number().optional(),
610
- image: z.string().optional(),
611
- imageAlt: z.string().optional(),
612
- brand: z.string().optional(),
613
- colors: z.array(z.string()).optional(),
614
- rating: z.number().optional(),
615
- reviewCount: z.number().optional(),
616
- inStock: z.boolean().optional(),
617
- isNew: z.boolean().optional(),
618
- tag: z.string().optional(),
619
- })
620
- export type StorefrontHeroProduct = z.infer<typeof storefrontHeroProductSchema>
621
-
622
- export const storefrontHeroPropsSchema = z.object({
623
- title: z.string(),
624
- description: z.string(),
625
- presentation: z.enum(['compact', 'showcase', 'editorial', 'promotional']).optional(),
626
- currency: z.string().optional(),
627
- products: z.array(storefrontHeroProductSchema),
628
- badge: z.string().optional(),
629
- titleAccent: z.string().optional(),
630
- primaryCta: ctaSchema.optional(),
631
- secondaryCta: ctaSchema.optional(),
632
- heroImage: heroImageSchema.optional(),
633
- departments: z
634
- .array(
635
- z.object({
636
- id: z.string(),
637
- name: z.string(),
638
- image: z.string().optional(),
639
- imageAlt: z.string().optional(),
640
- count: z.string().optional(),
641
- href: z.string().optional(),
642
- }),
643
- )
644
- .optional(),
645
- featuredDeals: z
646
- .array(
647
- z.object({
648
- id: z.string(),
649
- name: z.string(),
650
- description: z.string().optional(),
651
- image: z.string().optional(),
652
- imageAlt: z.string().optional(),
653
- price: z.number(),
654
- originalPrice: z.number().optional(),
655
- cta: ctaSchema.optional(),
656
- }),
657
- )
658
- .optional(),
659
- storeLocator: z
660
- .object({
661
- title: z.string(),
662
- description: z.string(),
663
- ctaLabel: z.string(),
664
- ctaHref: z.string().optional(),
665
- })
666
- .optional(),
667
- shippingInfo: z.string().optional(),
668
- deals: z
669
- .array(
670
- z.object({
671
- id: z.string(),
672
- title: z.string(),
673
- discount: z.string().optional(),
674
- endTime: z.string().optional(),
675
- }),
676
- )
677
- .optional(),
678
- categories: z
679
- .array(
680
- z.object({
681
- id: z.string(),
682
- name: z.string(),
683
- image: z.string().optional(),
684
- imageAlt: z.string().optional(),
685
- count: z.string().optional(),
686
- href: z.string().optional(),
687
- }),
688
- )
689
- .optional(),
690
- rotationInterval: z.number().optional(),
691
- addToCartLabel: z.string().optional(),
692
- buyNowLabel: z.string().optional(),
693
- newLabel: z.string().optional(),
694
- outOfStockLabel: z.string().optional(),
695
- colorsLabel: z.string().optional(),
696
- discountSuffixLabel: z.string().optional(),
697
- searchPlaceholder: z.string().optional(),
698
- searchLabel: z.string().optional(),
699
- featuredDescription: z.string().optional(),
700
- shopNowLabel: z.string().optional(),
701
- endsInLabel: z.string().optional(),
702
- productsLabel: z.string().optional(),
703
- viewLabel: z.string().optional(),
704
- })
705
- export type StorefrontHeroSpecProps = z.infer<typeof storefrontHeroPropsSchema>
706
-
707
- export const faqItemSchema = z.object({
708
- value: z.string(),
709
- question: z.string(),
710
- answer: z.string(),
711
- })
712
- export type FaqItemSpec = z.infer<typeof faqItemSchema>
713
-
714
- export const faqBlock1PropsSchema = z.object({
715
- items: z.array(faqItemSchema),
716
- title: z.string().optional(),
717
- description: z.string().optional(),
718
- accordionType: z.enum(['single', 'multiple']).optional(),
719
- })
720
- export type FaqBlock1SpecProps = z.infer<typeof faqBlock1PropsSchema>
721
-
722
- export const ctaSection1PropsSchema = z.object({
723
- badgeText: z.string().optional(),
724
- title: z.string().optional(),
725
- description: z.string().optional(),
726
- primaryCta: ctaSchema.optional(),
727
- secondaryCta: ctaSchema.optional(),
728
- })
729
- export type CtaSection1SpecProps = z.infer<typeof ctaSection1PropsSchema>
730
-
731
- /**
732
- * Serializable contract for the canonical `Feature` benefits section. The
733
- * item `icon` is a Lucide icon NAME (e.g. `'Zap'`) that the registry resolves
734
- * to a component at the seam; the React-only callbacks (`onCtaClick`,
735
- * `onLearnMore`) are intentionally excluded — the catalog adapter binds them.
736
- */
737
- export const featureItemSpecSchema = z.object({
738
- id: z.string(),
739
- title: z.string(),
740
- description: z.string(),
741
- icon: z.string(),
742
- })
743
-
744
- /**
745
- * `cards` branch: the card grid never owns an image. The presentation is
746
- * optional so an omitted value resolves to `cards`.
747
- */
748
- export const featureCardsSpecSchema = z.object({
749
- items: z.array(featureItemSpecSchema),
750
- presentation: z.literal('cards').optional(),
751
- badge: z.string().optional(),
752
- title: z.string().optional(),
753
- description: z.string().optional(),
754
- ctaLabel: z.string().optional(),
755
- learnMoreLabel: z.string().optional(),
756
- className: z.string().optional(),
757
- })
758
- export type FeatureCardsSpecProps = z.infer<typeof featureCardsSpecSchema>
759
-
760
- /**
761
- * `split` branch: the editorial image is mandatory and must carry a non-empty
762
- * `src`. `alt` stays required so the caller decides whether the image is
763
- * informative or decorative. `cards`-only chrome is intentionally absent.
764
- */
765
- export const featureSplitSpecSchema = z.object({
766
- items: z.array(featureItemSpecSchema),
767
- presentation: z.literal('split'),
768
- title: z.string().optional(),
769
- description: z.string().optional(),
770
- image: z.object({ src: z.string().trim().min(1), alt: z.string() }),
771
- className: z.string().optional(),
772
- })
773
- export type FeatureSplitSpecProps = z.infer<typeof featureSplitSpecSchema>
774
-
775
- /**
776
- * Serialized `Feature` union. The split branch is listed first so
777
- * `presentation: 'split'` resolves deterministically; an omitted presentation
778
- * falls through to `cards`. A split input without a non-empty image matches
779
- * neither branch and fails to parse.
780
- */
781
- export const featurePropsSchema = z.union([featureSplitSpecSchema, featureCardsSpecSchema])
782
- export type FeatureSpecProps = z.infer<typeof featurePropsSchema>
783
-
784
- /**
785
- * Canonical category contract for the consolidated `ProductCategory` block.
786
- *
787
- * `categories` is the canonical category projection (a `@thorprovider/types`
788
- * `ProductCategory` subset): ids are canonical strings, optional fields are
789
- * omitted rather than serialized as `""`, and there are no demo-only required
790
- * fields (no required subtitle, sector icon enum, or Lucide component). `icon`
791
- * is a plain, serializable icon-key string resolved by the block against a
792
- * bounded map with a neutral fallback. The `presentation` value is a bounded
793
- * structure switch, never a per-store fork. Callbacks are runtime props and are
794
- * excluded here (see the component).
795
- */
796
- export const productCategoryItemSchema = z.object({
797
- id: z.string(),
798
- handle: z.string().optional(),
799
- name: z.string(),
800
- description: z.string().optional(),
801
- /** Optional real count; an unknown count is omitted, never fabricated as `0`. */
802
- itemCount: z.number().optional(),
803
- /** Omitted (never `""`) when the backend has no image. */
804
- image: z.string().optional(),
805
- trending: z.boolean().optional(),
806
- /** Serializable icon key (e.g. `'shirt'`); unknown keys render a neutral fallback. */
807
- icon: z.string().optional(),
808
- subcategories: z.array(z.string()).optional(),
809
- featured: z.boolean().optional(),
810
- })
811
- export type ProductCategoryItem = z.infer<typeof productCategoryItemSchema>
812
-
813
- export const productCategoryPropsSchema = z.object({
814
- categories: z.array(productCategoryItemSchema),
815
- presentation: z.enum(['grid', 'icons', 'list']).optional(),
816
- title: z.string().optional(),
817
- description: z.string().optional(),
818
- badge: z.string().optional(),
819
- cta: ctaSchema.optional(),
820
- /** Controlled search value; filtering is owned by the host. */
821
- query: z.string().optional(),
822
- searchPlaceholder: z.string().optional(),
823
- searchLabel: z.string().optional(),
824
- emptyLabel: z.string().optional(),
825
- noResultsLabel: z.string().optional(),
826
- browseLabel: z.string().optional(),
827
- viewAllLabel: z.string().optional(),
828
- trendingLabel: z.string().optional(),
829
- featuredLabel: z.string().optional(),
830
- itemsLabel: z.string().optional(),
831
- imageFallback: z.string().optional(),
832
- className: z.string().optional(),
833
- })
834
- export type ProductCategorySpecProps = z.infer<typeof productCategoryPropsSchema>
835
-
836
- export const categoryCardPropsSchema = z.object({
837
- category: productCategoryItemSchema,
838
- presentation: z.enum(['grid', 'icons', 'list']).optional(),
839
- browseLabel: z.string().optional(),
840
- itemsLabel: z.string().optional(),
841
- trendingLabel: z.string().optional(),
842
- featuredLabel: z.string().optional(),
843
- imageFallback: z.string().optional(),
844
- })
845
- export type CategoryCardSpecProps = z.infer<typeof categoryCardPropsSchema>
846
-
847
- export const categoryGridPropsSchema = productCategoryPropsSchema.extend({
848
- maxItems: z.number().int().positive().optional(),
849
- loading: z.boolean().optional(),
850
- skeletonCount: z.number().int().positive().optional(),
851
- })
852
- export type CategoryGridSpecProps = z.infer<typeof categoryGridPropsSchema>
853
-
854
- // Pure monetary helpers, re-exported from the server-safe contracts entry so a
855
- // host boundary can validate/format `Money` without importing the React entry.
856
- export { isCompleteFiniteDecimal, isAvailableMoney, formatMoney } from './money'
857
- export { resolveAbsoluteQuantity } from './cart'