@thorprovider/blocks 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (859) hide show
  1. package/README.md +274 -46
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
  4. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
  5. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
  6. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
  7. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
  8. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
  9. package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
  10. package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
  11. package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
  12. package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
  13. package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
  14. package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
  15. package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
  16. package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
  17. package/dist/blocks/application/login-forms/login-page.js +209 -0
  18. package/dist/blocks/application/login-forms/login-page.js.map +1 -0
  19. package/dist/blocks/application/login-forms/login-page.mjs +185 -0
  20. package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
  21. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
  22. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
  23. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
  24. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
  25. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
  26. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
  27. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
  28. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
  29. package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
  30. package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
  31. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
  32. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
  33. package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
  34. package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
  35. package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
  36. package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
  37. package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
  38. package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
  39. package/dist/blocks/application/verification/verify-1.d.ts +35 -0
  40. package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
  41. package/dist/blocks/application/verification/verify-1.js +243 -0
  42. package/dist/blocks/application/verification/verify-1.js.map +1 -0
  43. package/dist/blocks/application/verification/verify-1.mjs +219 -0
  44. package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
  45. package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
  46. package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
  47. package/dist/blocks/application/verification/verify-confetti.js +145 -0
  48. package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
  49. package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
  50. package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
  51. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
  52. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
  53. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
  54. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
  55. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
  56. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
  57. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
  58. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
  59. package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
  60. package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
  61. package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
  62. package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
  63. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
  64. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
  65. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
  66. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
  67. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
  68. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
  69. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
  70. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
  71. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
  72. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
  73. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
  74. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
  75. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
  76. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
  77. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
  78. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
  79. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
  80. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
  81. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
  82. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
  83. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
  84. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
  85. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
  86. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
  87. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
  88. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
  89. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
  90. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
  91. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
  92. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
  93. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
  94. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
  95. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
  96. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
  97. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
  98. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
  99. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
  100. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
  101. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
  102. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
  103. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
  104. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
  105. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
  106. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
  107. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
  108. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
  109. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
  110. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
  111. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
  112. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
  113. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
  114. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
  115. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
  116. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
  117. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
  118. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
  119. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
  120. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
  121. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
  122. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
  123. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
  124. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
  125. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
  126. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
  127. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
  128. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
  129. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
  130. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
  131. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
  132. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
  133. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
  134. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
  135. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
  136. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
  137. package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
  138. package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
  139. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
  140. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
  141. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
  142. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
  143. package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
  144. package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
  145. package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
  146. package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
  147. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
  148. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
  149. package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
  150. package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
  151. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
  152. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
  153. package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
  154. package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
  155. package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
  156. package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
  157. package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
  158. package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
  159. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
  160. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
  161. package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
  162. package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
  163. package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
  164. package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
  165. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
  166. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
  167. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
  168. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
  169. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
  170. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
  171. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
  172. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
  173. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
  174. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
  175. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
  176. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
  177. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
  178. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
  179. package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
  180. package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
  181. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
  182. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
  183. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
  184. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
  185. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
  186. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
  187. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
  188. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
  189. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
  190. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
  191. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
  192. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
  193. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
  194. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
  195. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
  196. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
  197. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
  198. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
  199. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
  200. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
  201. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
  202. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
  203. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
  204. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
  205. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
  206. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
  207. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
  208. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
  209. package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
  210. package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
  211. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
  212. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
  213. package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
  214. package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
  215. package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
  216. package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
  217. package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
  218. package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
  219. package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
  220. package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
  221. package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
  222. package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
  223. package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
  224. package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
  225. package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
  226. package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
  227. package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
  228. package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
  229. package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
  230. package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
  231. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
  232. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
  233. package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
  234. package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
  235. package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
  236. package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
  237. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
  238. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
  239. package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
  240. package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
  241. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
  242. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
  243. package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
  244. package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
  245. package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
  246. package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
  247. package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
  248. package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
  249. package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
  250. package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
  251. package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
  252. package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
  253. package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
  254. package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
  255. package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
  256. package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
  257. package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
  258. package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
  259. package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
  260. package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
  261. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
  262. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
  263. package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
  264. package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
  265. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
  266. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
  267. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
  268. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
  269. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
  270. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
  271. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
  272. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
  273. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
  274. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
  275. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
  276. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
  277. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
  278. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
  279. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
  280. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
  281. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
  282. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
  283. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
  284. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
  285. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
  286. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
  287. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
  288. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
  289. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
  290. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
  291. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
  292. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
  293. package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
  294. package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
  295. package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
  296. package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
  297. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
  298. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
  299. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
  300. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
  301. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
  302. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
  303. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
  304. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
  305. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
  306. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
  307. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
  308. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
  309. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
  310. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
  311. package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
  312. package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
  313. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
  314. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
  315. package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
  316. package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
  317. package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
  318. package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
  319. package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
  320. package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
  321. package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
  322. package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
  323. package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
  324. package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
  325. package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
  326. package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
  327. package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
  328. package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
  329. package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
  330. package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
  331. package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
  332. package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
  333. package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
  334. package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
  335. package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
  336. package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
  337. package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
  338. package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
  339. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
  340. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
  341. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
  342. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
  343. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
  344. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
  345. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
  346. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
  347. package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
  348. package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
  349. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
  350. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
  351. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
  352. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
  353. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
  354. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
  355. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
  356. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
  357. package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
  358. package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
  359. package/dist/blocks/marketing/banners/avatar-group.js +90 -0
  360. package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
  361. package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
  362. package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
  363. package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
  364. package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
  365. package/dist/blocks/marketing/banners/banner-1.js +177 -0
  366. package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
  367. package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
  368. package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
  369. package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
  370. package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
  371. package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
  372. package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
  373. package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
  374. package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
  375. package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
  376. package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
  377. package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
  378. package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
  379. package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
  380. package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
  381. package/dist/blocks/marketing/features/feature.d.ts +45 -0
  382. package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
  383. package/dist/blocks/marketing/features/feature.js +135 -0
  384. package/dist/blocks/marketing/features/feature.js.map +1 -0
  385. package/dist/blocks/marketing/features/feature.mjs +111 -0
  386. package/dist/blocks/marketing/features/feature.mjs.map +1 -0
  387. package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
  388. package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
  389. package/dist/blocks/marketing/footers/footer-section.js +356 -0
  390. package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
  391. package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
  392. package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
  393. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
  394. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
  395. package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
  396. package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
  397. package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
  398. package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
  399. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
  400. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
  401. package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
  402. package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
  403. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
  404. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
  405. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
  406. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
  407. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
  408. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
  409. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
  410. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
  411. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
  412. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
  413. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
  414. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
  415. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
  416. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
  417. package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
  418. package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
  419. package/dist/blocks/marketing/navbars/navbar.js +484 -0
  420. package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
  421. package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
  422. package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
  423. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
  424. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
  425. package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
  426. package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
  427. package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
  428. package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
  429. package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
  430. package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
  431. package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
  432. package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
  433. package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
  434. package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
  435. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
  436. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
  437. package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
  438. package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
  439. package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
  440. package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
  441. package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
  442. package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
  443. package/dist/blocks/shared/reaction-toggle.js +138 -0
  444. package/dist/blocks/shared/reaction-toggle.js.map +1 -0
  445. package/dist/blocks/shared/reaction-toggle.mjs +114 -0
  446. package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
  447. package/dist/hooks/use-mobile.d.ts +2 -0
  448. package/dist/hooks/use-mobile.d.ts.map +1 -0
  449. package/dist/hooks/use-mobile.js +53 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-mobile.mjs +19 -0
  452. package/dist/hooks/use-mobile.mjs.map +1 -0
  453. package/dist/index.d.ts +100 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +339 -0
  456. package/dist/index.js.map +1 -0
  457. package/dist/index.mjs +238 -0
  458. package/dist/index.mjs.map +1 -0
  459. package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
  460. package/dist/lib/cart.d.ts.map +1 -0
  461. package/dist/lib/cart.js +31 -0
  462. package/dist/lib/cart.js.map +1 -0
  463. package/dist/lib/cart.mjs +7 -0
  464. package/dist/lib/cart.mjs.map +1 -0
  465. package/dist/lib/contracts.d.ts +4008 -0
  466. package/dist/lib/contracts.d.ts.map +1 -0
  467. package/dist/lib/contracts.js +828 -0
  468. package/dist/lib/contracts.js.map +1 -0
  469. package/dist/lib/contracts.mjs +737 -0
  470. package/dist/lib/contracts.mjs.map +1 -0
  471. package/dist/lib/money.d.ts +28 -0
  472. package/dist/lib/money.d.ts.map +1 -0
  473. package/dist/lib/money.js +50 -0
  474. package/dist/lib/money.js.map +1 -0
  475. package/dist/lib/money.mjs +24 -0
  476. package/dist/lib/money.mjs.map +1 -0
  477. package/dist/lib/types/menu.d.ts +40 -0
  478. package/dist/lib/types/menu.d.ts.map +1 -0
  479. package/dist/lib/types/menu.js +50 -0
  480. package/dist/lib/types/menu.js.map +1 -0
  481. package/dist/lib/types/menu.mjs +25 -0
  482. package/dist/lib/types/menu.mjs.map +1 -0
  483. package/dist/lib/types.d.ts +5 -0
  484. package/dist/lib/types.d.ts.map +1 -0
  485. package/dist/lib/types.js +17 -0
  486. package/dist/lib/types.js.map +1 -0
  487. package/dist/lib/types.mjs +1 -0
  488. package/dist/lib/types.mjs.map +1 -0
  489. package/dist/lib/utils.d.ts +7 -0
  490. package/dist/lib/utils.d.ts.map +1 -0
  491. package/dist/lib/utils.js +33 -0
  492. package/dist/lib/utils.js.map +1 -0
  493. package/dist/lib/utils.mjs +9 -0
  494. package/dist/lib/utils.mjs.map +1 -0
  495. package/dist/ui/accordion.d.ts +8 -0
  496. package/dist/ui/accordion.d.ts.map +1 -0
  497. package/dist/ui/accordion.js +93 -0
  498. package/dist/ui/accordion.js.map +1 -0
  499. package/dist/ui/accordion.mjs +66 -0
  500. package/dist/ui/accordion.mjs.map +1 -0
  501. package/dist/ui/avatar.d.ts +12 -0
  502. package/dist/ui/avatar.d.ts.map +1 -0
  503. package/dist/ui/avatar.js +134 -0
  504. package/dist/ui/avatar.js.map +1 -0
  505. package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
  506. package/dist/ui/avatar.mjs.map +1 -0
  507. package/dist/ui/badge.d.ts +10 -0
  508. package/dist/ui/badge.d.ts.map +1 -0
  509. package/dist/ui/badge.js +69 -0
  510. package/dist/ui/badge.js.map +1 -0
  511. package/dist/ui/badge.mjs +44 -0
  512. package/dist/ui/badge.mjs.map +1 -0
  513. package/dist/ui/breadcrumb.d.ts +12 -0
  514. package/dist/ui/breadcrumb.d.ts.map +1 -0
  515. package/dist/ui/breadcrumb.js +134 -0
  516. package/dist/ui/breadcrumb.js.map +1 -0
  517. package/dist/ui/breadcrumb.mjs +104 -0
  518. package/dist/ui/breadcrumb.mjs.map +1 -0
  519. package/dist/ui/button-group.d.ts +12 -0
  520. package/dist/ui/button-group.d.ts.map +1 -0
  521. package/dist/ui/button-group.js +104 -0
  522. package/dist/ui/button-group.js.map +1 -0
  523. package/dist/ui/button-group.mjs +77 -0
  524. package/dist/ui/button-group.mjs.map +1 -0
  525. package/dist/ui/button.d.ts +11 -0
  526. package/dist/ui/button.d.ts.map +1 -0
  527. package/dist/ui/button.js +82 -0
  528. package/dist/ui/button.js.map +1 -0
  529. package/dist/ui/button.mjs +57 -0
  530. package/dist/ui/button.mjs.map +1 -0
  531. package/dist/ui/card.d.ts +10 -0
  532. package/dist/ui/card.d.ts.map +1 -0
  533. package/dist/ui/card.js +121 -0
  534. package/dist/ui/card.js.map +1 -0
  535. package/dist/ui/card.mjs +91 -0
  536. package/dist/ui/card.mjs.map +1 -0
  537. package/dist/ui/carousel.d.ts +20 -0
  538. package/dist/ui/carousel.d.ts.map +1 -0
  539. package/dist/ui/carousel.js +238 -0
  540. package/dist/ui/carousel.js.map +1 -0
  541. package/dist/ui/carousel.mjs +200 -0
  542. package/dist/ui/carousel.mjs.map +1 -0
  543. package/dist/ui/dialog.d.ts +18 -0
  544. package/dist/ui/dialog.d.ts.map +1 -0
  545. package/dist/ui/dialog.js +181 -0
  546. package/dist/ui/dialog.js.map +1 -0
  547. package/dist/ui/dialog.mjs +148 -0
  548. package/dist/ui/dialog.mjs.map +1 -0
  549. package/dist/ui/drawer.d.ts +14 -0
  550. package/dist/ui/drawer.d.ts.map +1 -0
  551. package/dist/ui/drawer.js +163 -0
  552. package/dist/ui/drawer.js.map +1 -0
  553. package/dist/ui/drawer.mjs +130 -0
  554. package/dist/ui/drawer.mjs.map +1 -0
  555. package/dist/ui/dropdown-menu.d.ts +26 -0
  556. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  557. package/dist/ui/dropdown-menu.js +271 -0
  558. package/dist/ui/dropdown-menu.js.map +1 -0
  559. package/dist/ui/dropdown-menu.mjs +233 -0
  560. package/dist/ui/dropdown-menu.mjs.map +1 -0
  561. package/dist/ui/empty.d.ts +12 -0
  562. package/dist/ui/empty.d.ts.map +1 -0
  563. package/dist/ui/empty.js +132 -0
  564. package/dist/ui/empty.js.map +1 -0
  565. package/dist/ui/empty.mjs +103 -0
  566. package/dist/ui/empty.mjs.map +1 -0
  567. package/dist/ui/field.d.ts +25 -0
  568. package/dist/ui/field.d.ts.map +1 -0
  569. package/dist/ui/field.js +264 -0
  570. package/dist/ui/field.js.map +1 -0
  571. package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
  572. package/dist/ui/field.mjs.map +1 -0
  573. package/dist/ui/input-group.d.ts +17 -0
  574. package/dist/ui/input-group.d.ts.map +1 -0
  575. package/dist/ui/input-group.js +185 -0
  576. package/dist/ui/input-group.js.map +1 -0
  577. package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
  578. package/dist/ui/input-group.mjs.map +1 -0
  579. package/dist/ui/input-otp.d.ts +12 -0
  580. package/dist/ui/input-otp.d.ts.map +1 -0
  581. package/dist/ui/input-otp.js +105 -0
  582. package/dist/ui/input-otp.js.map +1 -0
  583. package/dist/ui/input-otp.mjs +68 -0
  584. package/dist/ui/input-otp.mjs.map +1 -0
  585. package/dist/ui/input.d.ts +4 -0
  586. package/dist/ui/input.d.ts.map +1 -0
  587. package/dist/ui/input.js +46 -0
  588. package/dist/ui/input.js.map +1 -0
  589. package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
  590. package/dist/ui/input.mjs.map +1 -0
  591. package/dist/ui/label.d.ts +5 -0
  592. package/dist/ui/label.d.ts.map +1 -0
  593. package/dist/ui/label.js +48 -0
  594. package/dist/ui/label.js.map +1 -0
  595. package/dist/ui/label.mjs +24 -0
  596. package/dist/ui/label.mjs.map +1 -0
  597. package/dist/ui/navigation-menu.d.ts +15 -0
  598. package/dist/ui/navigation-menu.d.ts.map +1 -0
  599. package/dist/ui/navigation-menu.js +203 -0
  600. package/dist/ui/navigation-menu.js.map +1 -0
  601. package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
  602. package/dist/ui/navigation-menu.mjs.map +1 -0
  603. package/dist/ui/pagination.d.ts +14 -0
  604. package/dist/ui/pagination.d.ts.map +1 -0
  605. package/dist/ui/pagination.js +149 -0
  606. package/dist/ui/pagination.js.map +1 -0
  607. package/dist/ui/pagination.mjs +123 -0
  608. package/dist/ui/pagination.mjs.map +1 -0
  609. package/dist/ui/progress.d.ts +5 -0
  610. package/dist/ui/progress.d.ts.map +1 -0
  611. package/dist/ui/progress.js +57 -0
  612. package/dist/ui/progress.js.map +1 -0
  613. package/dist/ui/progress.mjs +33 -0
  614. package/dist/ui/progress.mjs.map +1 -0
  615. package/dist/ui/radio-group.d.ts +6 -0
  616. package/dist/ui/radio-group.d.ts.map +1 -0
  617. package/dist/ui/radio-group.js +72 -0
  618. package/dist/ui/radio-group.js.map +1 -0
  619. package/dist/ui/radio-group.mjs +47 -0
  620. package/dist/ui/radio-group.mjs.map +1 -0
  621. package/dist/ui/select.d.ts +16 -0
  622. package/dist/ui/select.d.ts.map +1 -0
  623. package/dist/ui/select.js +213 -0
  624. package/dist/ui/select.js.map +1 -0
  625. package/dist/ui/select.mjs +180 -0
  626. package/dist/ui/select.mjs.map +1 -0
  627. package/dist/ui/separator.d.ts +5 -0
  628. package/dist/ui/separator.d.ts.map +1 -0
  629. package/dist/ui/separator.js +52 -0
  630. package/dist/ui/separator.js.map +1 -0
  631. package/dist/ui/separator.mjs +28 -0
  632. package/dist/ui/separator.mjs.map +1 -0
  633. package/dist/ui/sheet.d.ts +15 -0
  634. package/dist/ui/sheet.d.ts.map +1 -0
  635. package/dist/ui/sheet.js +160 -0
  636. package/dist/ui/sheet.js.map +1 -0
  637. package/dist/ui/sheet.mjs +129 -0
  638. package/dist/ui/sheet.mjs.map +1 -0
  639. package/dist/ui/sidebar.d.ts +70 -0
  640. package/dist/ui/sidebar.d.ts.map +1 -0
  641. package/dist/ui/sidebar.js +697 -0
  642. package/dist/ui/sidebar.js.map +1 -0
  643. package/dist/ui/sidebar.mjs +651 -0
  644. package/dist/ui/sidebar.mjs.map +1 -0
  645. package/dist/ui/skeleton.d.ts +3 -0
  646. package/dist/ui/skeleton.d.ts.map +1 -0
  647. package/dist/ui/skeleton.js +40 -0
  648. package/dist/ui/skeleton.js.map +1 -0
  649. package/dist/ui/skeleton.mjs +16 -0
  650. package/dist/ui/skeleton.mjs.map +1 -0
  651. package/dist/ui/table.d.ts +11 -0
  652. package/dist/ui/table.d.ts.map +1 -0
  653. package/dist/ui/table.js +147 -0
  654. package/dist/ui/table.js.map +1 -0
  655. package/dist/ui/table.mjs +116 -0
  656. package/dist/ui/table.mjs.map +1 -0
  657. package/dist/ui/tabs.d.ts +12 -0
  658. package/dist/ui/tabs.d.ts.map +1 -0
  659. package/dist/ui/tabs.js +121 -0
  660. package/dist/ui/tabs.js.map +1 -0
  661. package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
  662. package/dist/ui/tabs.mjs.map +1 -0
  663. package/dist/ui/textarea.d.ts +4 -0
  664. package/dist/ui/textarea.d.ts.map +1 -0
  665. package/dist/ui/textarea.js +43 -0
  666. package/dist/ui/textarea.js.map +1 -0
  667. package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
  668. package/dist/ui/textarea.mjs.map +1 -0
  669. package/dist/ui/toggle-group.d.ts +10 -0
  670. package/dist/ui/toggle-group.d.ts.map +1 -0
  671. package/dist/ui/toggle-group.js +105 -0
  672. package/dist/ui/toggle-group.js.map +1 -0
  673. package/dist/ui/toggle-group.mjs +70 -0
  674. package/dist/ui/toggle-group.mjs.map +1 -0
  675. package/dist/ui/toggle.d.ts +10 -0
  676. package/dist/ui/toggle.d.ts.map +1 -0
  677. package/dist/ui/toggle.js +70 -0
  678. package/dist/ui/toggle.js.map +1 -0
  679. package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
  680. package/dist/ui/toggle.mjs.map +1 -0
  681. package/dist/ui/tooltip.d.ts +8 -0
  682. package/dist/ui/tooltip.d.ts.map +1 -0
  683. package/dist/ui/tooltip.js +84 -0
  684. package/dist/ui/tooltip.js.map +1 -0
  685. package/dist/ui/tooltip.mjs +57 -0
  686. package/dist/ui/tooltip.mjs.map +1 -0
  687. package/package.json +8 -1
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -107
  690. package/components.json +0 -33
  691. package/docs/standards/data-contracts.md +0 -81
  692. package/docs/standards/theming.md +0 -112
  693. package/scripts/fix-esm-extensions.mjs +0 -40
  694. package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
  695. package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
  696. package/src/blocks/application/login-forms/login-page-1.tsx +0 -246
  697. package/src/blocks/application/login-forms/login-page-2.tsx +0 -207
  698. package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
  699. package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -320
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -231
  701. package/src/blocks/application/verification/verify-1.tsx +0 -307
  702. package/src/blocks/application/verification/verify-confetti.tsx +0 -192
  703. package/src/blocks/e-commerce/category-filters/category-filter-1.tsx +0 -260
  704. package/src/blocks/e-commerce/category-filters/category-filter-2-filter-panel.tsx +0 -222
  705. package/src/blocks/e-commerce/category-filters/category-filter-2.test.tsx +0 -513
  706. package/src/blocks/e-commerce/category-filters/category-filter-2.tsx +0 -921
  707. package/src/blocks/e-commerce/category-filters/category-filter-4-chip-rail.tsx +0 -57
  708. package/src/blocks/e-commerce/category-filters/category-filter-4-drawer.tsx +0 -124
  709. package/src/blocks/e-commerce/category-filters/category-filter-4-fields.tsx +0 -170
  710. package/src/blocks/e-commerce/category-filters/category-filter-4-sidebar.tsx +0 -52
  711. package/src/blocks/e-commerce/category-filters/category-filter-4-sort-sheet.tsx +0 -57
  712. package/src/blocks/e-commerce/category-filters/category-filter-4-state.ts +0 -68
  713. package/src/blocks/e-commerce/category-filters/category-filter-4.tsx +0 -298
  714. package/src/blocks/e-commerce/checkout-forms/card-formatting.test.ts +0 -47
  715. package/src/blocks/e-commerce/checkout-forms/card-formatting.ts +0 -9
  716. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  717. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  718. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  719. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  720. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  721. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-contact-step.tsx +0 -96
  722. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-country-field.tsx +0 -51
  723. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-order-summary.tsx +0 -252
  724. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-payment-step.tsx +0 -188
  725. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-progress.tsx +0 -36
  726. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-shipping-step.tsx +0 -156
  727. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.test.tsx +0 -216
  728. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.tsx +0 -338
  729. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-order-summary.tsx +0 -130
  730. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-payment-card.tsx +0 -175
  731. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-shipping-card.tsx +0 -190
  732. package/src/blocks/e-commerce/checkout-forms/checkout-form-2.tsx +0 -312
  733. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-information-step.tsx +0 -91
  734. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-order-summary.tsx +0 -110
  735. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-payment-step.tsx +0 -137
  736. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-progress.tsx +0 -68
  737. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-review-step.tsx +0 -79
  738. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-shipping-step.tsx +0 -172
  739. package/src/blocks/e-commerce/checkout-forms/checkout-form-3.tsx +0 -392
  740. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  741. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  742. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  743. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  744. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  745. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  746. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  747. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  748. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  749. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  750. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  751. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  752. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  753. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  754. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  755. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  756. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  757. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  758. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  759. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  760. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  761. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  762. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  763. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  764. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  765. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  766. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -424
  767. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  768. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  769. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  770. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  771. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  772. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  773. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  774. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  775. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  776. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  777. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  778. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  779. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  780. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  781. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  782. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  783. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  784. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  785. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  786. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  787. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  788. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  789. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  790. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  791. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  792. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  793. package/src/blocks/marketing/features/feature.tsx +0 -195
  794. package/src/blocks/marketing/footers/footer-section-1.test.tsx +0 -117
  795. package/src/blocks/marketing/footers/footer-section-1.tsx +0 -178
  796. package/src/blocks/marketing/footers/footer-section-3.tsx +0 -192
  797. package/src/blocks/marketing/footers/footer-section-4.tsx +0 -355
  798. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  799. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  800. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  801. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  802. package/src/blocks/marketing/navbars/navbar-1.tsx +0 -267
  803. package/src/blocks/marketing/navbars/navbar-2.tsx +0 -351
  804. package/src/blocks/marketing/navbars/navbar-3.tsx +0 -303
  805. package/src/blocks/marketing/navbars/navbar-4-account-menu.test.tsx +0 -56
  806. package/src/blocks/marketing/navbars/navbar-4-account-menu.tsx +0 -134
  807. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.test.tsx +0 -204
  808. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.tsx +0 -371
  809. package/src/blocks/marketing/navbars/navbar-4-like-button.tsx +0 -177
  810. package/src/blocks/marketing/navbars/navbar-4-mobile-nav.tsx +0 -104
  811. package/src/blocks/marketing/navbars/navbar-4-product-grid.tsx +0 -219
  812. package/src/blocks/marketing/navbars/navbar-4-search-bar.tsx +0 -52
  813. package/src/blocks/marketing/navbars/navbar-4.test.tsx +0 -264
  814. package/src/blocks/marketing/navbars/navbar-4.tsx +0 -604
  815. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  816. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  817. package/src/blocks/marketing/testimonials/testimonial-1.tsx +0 -141
  818. package/src/blocks/marketing/testimonials/testimonial-2.tsx +0 -108
  819. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  820. package/src/hooks/use-mobile.ts +0 -19
  821. package/src/index.ts +0 -285
  822. package/src/lib/cart.test.ts +0 -15
  823. package/src/lib/contracts-curated.test.ts +0 -225
  824. package/src/lib/contracts-server-boundary.test.ts +0 -52
  825. package/src/lib/contracts.test.ts +0 -173
  826. package/src/lib/contracts.ts +0 -795
  827. package/src/lib/money.test.ts +0 -64
  828. package/src/lib/money.ts +0 -65
  829. package/src/lib/types/menu.ts +0 -43
  830. package/src/lib/types.ts +0 -4
  831. package/src/lib/utils.ts +0 -10
  832. package/src/ui/accordion.tsx +0 -65
  833. package/src/ui/badge.tsx +0 -47
  834. package/src/ui/breadcrumb.tsx +0 -108
  835. package/src/ui/button-group.tsx +0 -83
  836. package/src/ui/button.tsx +0 -63
  837. package/src/ui/card.tsx +0 -91
  838. package/src/ui/carousel.tsx +0 -241
  839. package/src/ui/dialog.tsx +0 -158
  840. package/src/ui/drawer.tsx +0 -134
  841. package/src/ui/dropdown-menu.tsx +0 -256
  842. package/src/ui/empty.tsx +0 -103
  843. package/src/ui/input-otp.tsx +0 -76
  844. package/src/ui/label.tsx +0 -23
  845. package/src/ui/pagination.tsx +0 -127
  846. package/src/ui/progress.tsx +0 -30
  847. package/src/ui/radio-group.tsx +0 -44
  848. package/src/ui/select.tsx +0 -189
  849. package/src/ui/separator.tsx +0 -27
  850. package/src/ui/sheet.tsx +0 -142
  851. package/src/ui/sidebar.tsx +0 -726
  852. package/src/ui/skeleton.tsx +0 -13
  853. package/src/ui/table.tsx +0 -115
  854. package/src/ui/toggle-group.tsx +0 -83
  855. package/src/ui/tooltip.tsx +0 -56
  856. package/tsconfig.build.json +0 -12
  857. package/tsconfig.json +0 -20
  858. package/tsup.config.ts +0 -19
  859. package/vitest.config.ts +0 -17
@@ -1,795 +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
- export const navbar4PropsSchema = z.object({
499
- storeCategories: z.array(storeCategorySchema),
500
- shippingNote: z.string().optional(),
501
- utilityLinks: z.array(utilityLinkSchema),
502
- logoText: z.string(),
503
- logoHref: z.string().optional(),
504
- /** Optional accent for a trailing segment of `logoText`; omitted → unchanged. */
505
- logoAccent: logoAccentSchema.optional(),
506
- /**
507
- * Consumer-supplied classes merged onto the block's outer surface as the
508
- * final argument (e.g. a semantic surface token). Omitted → unchanged.
509
- */
510
- className: z.string().optional(),
511
- accountHref: z.string().optional(),
512
- searchQuery: z.string().optional(),
513
- items: z.array(navCartItemSchema).optional(),
514
- /** Authoritative backend subtotal for the mini-cart. */
515
- subtotal: moneySchema.optional(),
516
- subtotalUnavailableLabel: z.string().optional(),
517
- user: storeUserSchema.optional(),
518
- accountMenuItems: z.array(accountMenuItemSchema).optional(),
519
- accountPending: z.boolean().optional(),
520
- accountUnavailable: z.boolean().optional(),
521
- })
522
- export type Navbar4SpecProps = z.infer<typeof navbar4PropsSchema>
523
-
524
- /**
525
- * Serializable contracts for the two bounded editorial sections (`faq`, `cta`).
526
- * These are the serializable subset of `FaqBlock1Props`/`CtaSection1Props`: the
527
- * React-only callbacks (`onPrimaryClick`/`onSecondaryClick`) are intentionally
528
- * excluded — the catalog adapter binds them (see design D3).
529
- */
530
- export const ctaSchema = z.object({
531
- label: z.string(),
532
- href: z.string().optional(),
533
- })
534
- export type CtaSpec = z.infer<typeof ctaSchema>
535
-
536
- /**
537
- * Serializable subset of the canonical `StorefrontHero`'s props (callbacks
538
- * excluded). Every popularity, review, count, or countdown field is optional
539
- * host-supplied evidence: omitted fields render nothing (honest omission)
540
- * instead of fabricated defaults, and prices are formatted from the supplied
541
- * ISO 4217 `currency` via `Intl.NumberFormat` (never hardcoded).
542
- */
543
- export const storefrontHeroProductSchema = z.object({
544
- id: z.string(),
545
- name: z.string(),
546
- price: z.number(),
547
- originalPrice: z.number().optional(),
548
- image: z.string().optional(),
549
- imageAlt: z.string().optional(),
550
- brand: z.string().optional(),
551
- colors: z.array(z.string()).optional(),
552
- rating: z.number().optional(),
553
- reviewCount: z.number().optional(),
554
- inStock: z.boolean().optional(),
555
- isNew: z.boolean().optional(),
556
- tag: z.string().optional(),
557
- })
558
- export type StorefrontHeroProduct = z.infer<typeof storefrontHeroProductSchema>
559
-
560
- export const storefrontHeroPropsSchema = z.object({
561
- title: z.string(),
562
- description: z.string(),
563
- presentation: z.enum(['compact', 'showcase', 'editorial', 'promotional']).optional(),
564
- currency: z.string().optional(),
565
- products: z.array(storefrontHeroProductSchema),
566
- badge: z.string().optional(),
567
- titleAccent: z.string().optional(),
568
- primaryCta: ctaSchema.optional(),
569
- secondaryCta: ctaSchema.optional(),
570
- heroImage: heroImageSchema.optional(),
571
- departments: z
572
- .array(
573
- z.object({
574
- id: z.string(),
575
- name: z.string(),
576
- image: z.string().optional(),
577
- imageAlt: z.string().optional(),
578
- count: z.string().optional(),
579
- href: z.string().optional(),
580
- }),
581
- )
582
- .optional(),
583
- featuredDeals: z
584
- .array(
585
- z.object({
586
- id: z.string(),
587
- name: z.string(),
588
- description: z.string().optional(),
589
- image: z.string().optional(),
590
- imageAlt: z.string().optional(),
591
- price: z.number(),
592
- originalPrice: z.number().optional(),
593
- cta: ctaSchema.optional(),
594
- }),
595
- )
596
- .optional(),
597
- storeLocator: z
598
- .object({
599
- title: z.string(),
600
- description: z.string(),
601
- ctaLabel: z.string(),
602
- ctaHref: z.string().optional(),
603
- })
604
- .optional(),
605
- shippingInfo: z.string().optional(),
606
- deals: z
607
- .array(
608
- z.object({
609
- id: z.string(),
610
- title: z.string(),
611
- discount: z.string().optional(),
612
- endTime: z.string().optional(),
613
- }),
614
- )
615
- .optional(),
616
- categories: z
617
- .array(
618
- z.object({
619
- id: z.string(),
620
- name: z.string(),
621
- image: z.string().optional(),
622
- imageAlt: z.string().optional(),
623
- count: z.string().optional(),
624
- href: z.string().optional(),
625
- }),
626
- )
627
- .optional(),
628
- rotationInterval: z.number().optional(),
629
- addToCartLabel: z.string().optional(),
630
- buyNowLabel: z.string().optional(),
631
- newLabel: z.string().optional(),
632
- outOfStockLabel: z.string().optional(),
633
- colorsLabel: z.string().optional(),
634
- discountSuffixLabel: z.string().optional(),
635
- searchPlaceholder: z.string().optional(),
636
- searchLabel: z.string().optional(),
637
- featuredDescription: z.string().optional(),
638
- shopNowLabel: z.string().optional(),
639
- endsInLabel: z.string().optional(),
640
- productsLabel: z.string().optional(),
641
- viewLabel: z.string().optional(),
642
- })
643
- export type StorefrontHeroSpecProps = z.infer<typeof storefrontHeroPropsSchema>
644
-
645
- export const faqItemSchema = z.object({
646
- value: z.string(),
647
- question: z.string(),
648
- answer: z.string(),
649
- })
650
- export type FaqItemSpec = z.infer<typeof faqItemSchema>
651
-
652
- export const faqBlock1PropsSchema = z.object({
653
- items: z.array(faqItemSchema),
654
- title: z.string().optional(),
655
- description: z.string().optional(),
656
- accordionType: z.enum(['single', 'multiple']).optional(),
657
- })
658
- export type FaqBlock1SpecProps = z.infer<typeof faqBlock1PropsSchema>
659
-
660
- export const ctaSection1PropsSchema = z.object({
661
- badgeText: z.string().optional(),
662
- title: z.string().optional(),
663
- description: z.string().optional(),
664
- primaryCta: ctaSchema.optional(),
665
- secondaryCta: ctaSchema.optional(),
666
- })
667
- export type CtaSection1SpecProps = z.infer<typeof ctaSection1PropsSchema>
668
-
669
- /**
670
- * Serializable contract for the canonical `Feature` benefits section. The
671
- * item `icon` is a Lucide icon NAME (e.g. `'Zap'`) that the registry resolves
672
- * to a component at the seam; the React-only callbacks (`onCtaClick`,
673
- * `onLearnMore`) are intentionally excluded — the catalog adapter binds them.
674
- */
675
- export const featureItemSpecSchema = z.object({
676
- id: z.string(),
677
- title: z.string(),
678
- description: z.string(),
679
- icon: z.string(),
680
- })
681
-
682
- /**
683
- * `cards` branch: the card grid never owns an image. The presentation is
684
- * optional so an omitted value resolves to `cards`.
685
- */
686
- export const featureCardsSpecSchema = z.object({
687
- items: z.array(featureItemSpecSchema),
688
- presentation: z.literal('cards').optional(),
689
- badge: z.string().optional(),
690
- title: z.string().optional(),
691
- description: z.string().optional(),
692
- ctaLabel: z.string().optional(),
693
- learnMoreLabel: z.string().optional(),
694
- className: z.string().optional(),
695
- })
696
- export type FeatureCardsSpecProps = z.infer<typeof featureCardsSpecSchema>
697
-
698
- /**
699
- * `split` branch: the editorial image is mandatory and must carry a non-empty
700
- * `src`. `alt` stays required so the caller decides whether the image is
701
- * informative or decorative. `cards`-only chrome is intentionally absent.
702
- */
703
- export const featureSplitSpecSchema = z.object({
704
- items: z.array(featureItemSpecSchema),
705
- presentation: z.literal('split'),
706
- title: z.string().optional(),
707
- description: z.string().optional(),
708
- image: z.object({ src: z.string().trim().min(1), alt: z.string() }),
709
- className: z.string().optional(),
710
- })
711
- export type FeatureSplitSpecProps = z.infer<typeof featureSplitSpecSchema>
712
-
713
- /**
714
- * Serialized `Feature` union. The split branch is listed first so
715
- * `presentation: 'split'` resolves deterministically; an omitted presentation
716
- * falls through to `cards`. A split input without a non-empty image matches
717
- * neither branch and fails to parse.
718
- */
719
- export const featurePropsSchema = z.union([featureSplitSpecSchema, featureCardsSpecSchema])
720
- export type FeatureSpecProps = z.infer<typeof featurePropsSchema>
721
-
722
- /**
723
- * Canonical category contract for the consolidated `ProductCategory` block.
724
- *
725
- * `categories` is the canonical category projection (a `@thorprovider/types`
726
- * `ProductCategory` subset): ids are canonical strings, optional fields are
727
- * omitted rather than serialized as `""`, and there are no demo-only required
728
- * fields (no required subtitle, sector icon enum, or Lucide component). `icon`
729
- * is a plain, serializable icon-key string resolved by the block against a
730
- * bounded map with a neutral fallback. The `presentation` value is a bounded
731
- * structure switch, never a per-store fork. Callbacks are runtime props and are
732
- * excluded here (see the component).
733
- */
734
- export const productCategoryItemSchema = z.object({
735
- id: z.string(),
736
- handle: z.string().optional(),
737
- name: z.string(),
738
- description: z.string().optional(),
739
- /** Optional real count; an unknown count is omitted, never fabricated as `0`. */
740
- itemCount: z.number().optional(),
741
- /** Omitted (never `""`) when the backend has no image. */
742
- image: z.string().optional(),
743
- trending: z.boolean().optional(),
744
- /** Serializable icon key (e.g. `'shirt'`); unknown keys render a neutral fallback. */
745
- icon: z.string().optional(),
746
- subcategories: z.array(z.string()).optional(),
747
- featured: z.boolean().optional(),
748
- })
749
- export type ProductCategoryItem = z.infer<typeof productCategoryItemSchema>
750
-
751
- export const productCategoryPropsSchema = z.object({
752
- categories: z.array(productCategoryItemSchema),
753
- presentation: z.enum(['grid', 'icons', 'list']).optional(),
754
- title: z.string().optional(),
755
- description: z.string().optional(),
756
- badge: z.string().optional(),
757
- cta: ctaSchema.optional(),
758
- /** Controlled search value; filtering is owned by the host. */
759
- query: z.string().optional(),
760
- searchPlaceholder: z.string().optional(),
761
- searchLabel: z.string().optional(),
762
- emptyLabel: z.string().optional(),
763
- noResultsLabel: z.string().optional(),
764
- browseLabel: z.string().optional(),
765
- viewAllLabel: z.string().optional(),
766
- trendingLabel: z.string().optional(),
767
- featuredLabel: z.string().optional(),
768
- itemsLabel: z.string().optional(),
769
- imageFallback: z.string().optional(),
770
- className: z.string().optional(),
771
- })
772
- export type ProductCategorySpecProps = z.infer<typeof productCategoryPropsSchema>
773
-
774
- export const categoryCardPropsSchema = z.object({
775
- category: productCategoryItemSchema,
776
- presentation: z.enum(['grid', 'icons', 'list']).optional(),
777
- browseLabel: z.string().optional(),
778
- itemsLabel: z.string().optional(),
779
- trendingLabel: z.string().optional(),
780
- featuredLabel: z.string().optional(),
781
- imageFallback: z.string().optional(),
782
- })
783
- export type CategoryCardSpecProps = z.infer<typeof categoryCardPropsSchema>
784
-
785
- export const categoryGridPropsSchema = productCategoryPropsSchema.extend({
786
- maxItems: z.number().int().positive().optional(),
787
- loading: z.boolean().optional(),
788
- skeletonCount: z.number().int().positive().optional(),
789
- })
790
- export type CategoryGridSpecProps = z.infer<typeof categoryGridPropsSchema>
791
-
792
- // Pure monetary helpers, re-exported from the server-safe contracts entry so a
793
- // host boundary can validate/format `Money` without importing the React entry.
794
- export { isCompleteFiniteDecimal, isAvailableMoney, formatMoney } from './money'
795
- export { resolveAbsoluteQuantity } from './cart'