@thorprovider/blocks 2.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 (842) hide show
  1. package/README.md +120 -8
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
  4. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
  5. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
  6. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
  7. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
  8. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
  9. package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
  10. package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
  11. package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
  12. package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
  13. package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
  14. package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
  15. package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
  16. package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
  17. package/dist/blocks/application/login-forms/login-page.js +209 -0
  18. package/dist/blocks/application/login-forms/login-page.js.map +1 -0
  19. package/dist/blocks/application/login-forms/login-page.mjs +185 -0
  20. package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
  21. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
  22. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
  23. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
  24. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
  25. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
  26. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
  27. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
  28. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
  29. package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
  30. package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
  31. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
  32. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
  33. package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
  34. package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
  35. package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
  36. package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
  37. package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
  38. package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
  39. package/dist/blocks/application/verification/verify-1.d.ts +35 -0
  40. package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
  41. package/dist/blocks/application/verification/verify-1.js +243 -0
  42. package/dist/blocks/application/verification/verify-1.js.map +1 -0
  43. package/dist/blocks/application/verification/verify-1.mjs +219 -0
  44. package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
  45. package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
  46. package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
  47. package/dist/blocks/application/verification/verify-confetti.js +145 -0
  48. package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
  49. package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
  50. package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
  51. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
  52. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
  53. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
  54. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
  55. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
  56. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
  57. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
  58. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
  59. package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
  60. package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
  61. package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
  62. package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
  63. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
  64. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
  65. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
  66. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
  67. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
  68. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
  69. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
  70. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
  71. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
  72. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
  73. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
  74. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
  75. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
  76. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
  77. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
  78. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
  79. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
  80. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
  81. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
  82. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
  83. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
  84. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
  85. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
  86. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
  87. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
  88. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
  89. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
  90. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
  91. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
  92. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
  93. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
  94. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
  95. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
  96. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
  97. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
  98. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
  99. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
  100. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
  101. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
  102. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
  103. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
  104. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
  105. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
  106. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
  107. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
  108. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
  109. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
  110. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
  111. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
  112. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
  113. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
  114. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
  115. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
  116. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
  117. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
  118. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
  119. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
  120. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
  121. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
  122. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
  123. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
  124. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
  125. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
  126. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
  127. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
  128. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
  129. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
  130. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
  131. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
  132. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
  133. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
  134. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
  135. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
  136. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
  137. package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
  138. package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
  139. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
  140. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
  141. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
  142. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
  143. package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
  144. package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
  145. package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
  146. package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
  147. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
  148. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
  149. package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
  150. package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
  151. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
  152. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
  153. package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
  154. package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
  155. package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
  156. package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
  157. package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
  158. package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
  159. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
  160. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
  161. package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
  162. package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
  163. package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
  164. package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
  165. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
  166. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
  167. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
  168. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
  169. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
  170. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
  171. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
  172. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
  173. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
  174. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
  175. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
  176. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
  177. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
  178. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
  179. package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
  180. package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
  181. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
  182. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
  183. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
  184. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
  185. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
  186. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
  187. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
  188. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
  189. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
  190. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
  191. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
  192. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
  193. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
  194. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
  195. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
  196. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
  197. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
  198. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
  199. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
  200. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
  201. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
  202. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
  203. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
  204. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
  205. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
  206. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
  207. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
  208. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
  209. package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
  210. package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
  211. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
  212. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
  213. package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
  214. package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
  215. package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
  216. package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
  217. package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
  218. package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
  219. package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
  220. package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
  221. package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
  222. package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
  223. package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
  224. package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
  225. package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
  226. package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
  227. package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
  228. package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
  229. package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
  230. package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
  231. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
  232. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
  233. package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
  234. package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
  235. package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
  236. package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
  237. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
  238. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
  239. package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
  240. package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
  241. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
  242. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
  243. package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
  244. package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
  245. package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
  246. package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
  247. package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
  248. package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
  249. package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
  250. package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
  251. package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
  252. package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
  253. package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
  254. package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
  255. package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
  256. package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
  257. package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
  258. package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
  259. package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
  260. package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
  261. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
  262. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
  263. package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
  264. package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
  265. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
  266. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
  267. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
  268. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
  269. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
  270. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
  271. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
  272. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
  273. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
  274. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
  275. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
  276. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
  277. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
  278. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
  279. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
  280. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
  281. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
  282. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
  283. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
  284. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
  285. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
  286. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
  287. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
  288. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
  289. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
  290. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
  291. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
  292. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
  293. package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
  294. package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
  295. package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
  296. package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
  297. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
  298. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
  299. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
  300. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
  301. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
  302. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
  303. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
  304. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
  305. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
  306. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
  307. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
  308. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
  309. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
  310. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
  311. package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
  312. package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
  313. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
  314. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
  315. package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
  316. package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
  317. package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
  318. package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
  319. package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
  320. package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
  321. package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
  322. package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
  323. package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
  324. package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
  325. package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
  326. package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
  327. package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
  328. package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
  329. package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
  330. package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
  331. package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
  332. package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
  333. package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
  334. package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
  335. package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
  336. package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
  337. package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
  338. package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
  339. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
  340. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
  341. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
  342. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
  343. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
  344. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
  345. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
  346. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
  347. package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
  348. package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
  349. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
  350. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
  351. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
  352. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
  353. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
  354. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
  355. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
  356. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
  357. package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
  358. package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
  359. package/dist/blocks/marketing/banners/avatar-group.js +90 -0
  360. package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
  361. package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
  362. package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
  363. package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
  364. package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
  365. package/dist/blocks/marketing/banners/banner-1.js +177 -0
  366. package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
  367. package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
  368. package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
  369. package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
  370. package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
  371. package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
  372. package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
  373. package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
  374. package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
  375. package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
  376. package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
  377. package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
  378. package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
  379. package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
  380. package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
  381. package/dist/blocks/marketing/features/feature.d.ts +45 -0
  382. package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
  383. package/dist/blocks/marketing/features/feature.js +135 -0
  384. package/dist/blocks/marketing/features/feature.js.map +1 -0
  385. package/dist/blocks/marketing/features/feature.mjs +111 -0
  386. package/dist/blocks/marketing/features/feature.mjs.map +1 -0
  387. package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
  388. package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
  389. package/dist/blocks/marketing/footers/footer-section.js +356 -0
  390. package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
  391. package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
  392. package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
  393. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
  394. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
  395. package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
  396. package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
  397. package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
  398. package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
  399. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
  400. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
  401. package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
  402. package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
  403. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
  404. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
  405. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
  406. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
  407. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
  408. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
  409. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
  410. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
  411. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
  412. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
  413. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
  414. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
  415. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
  416. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
  417. package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
  418. package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
  419. package/dist/blocks/marketing/navbars/navbar.js +484 -0
  420. package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
  421. package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
  422. package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
  423. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
  424. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
  425. package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
  426. package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
  427. package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
  428. package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
  429. package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
  430. package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
  431. package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
  432. package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
  433. package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
  434. package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
  435. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
  436. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
  437. package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
  438. package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
  439. package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
  440. package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
  441. package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
  442. package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
  443. package/dist/blocks/shared/reaction-toggle.js +138 -0
  444. package/dist/blocks/shared/reaction-toggle.js.map +1 -0
  445. package/dist/blocks/shared/reaction-toggle.mjs +114 -0
  446. package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
  447. package/dist/hooks/use-mobile.d.ts +2 -0
  448. package/dist/hooks/use-mobile.d.ts.map +1 -0
  449. package/dist/hooks/use-mobile.js +53 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-mobile.mjs +19 -0
  452. package/dist/hooks/use-mobile.mjs.map +1 -0
  453. package/dist/index.d.ts +100 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +339 -0
  456. package/dist/index.js.map +1 -0
  457. package/dist/index.mjs +238 -0
  458. package/dist/index.mjs.map +1 -0
  459. package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
  460. package/dist/lib/cart.d.ts.map +1 -0
  461. package/dist/lib/cart.js +31 -0
  462. package/dist/lib/cart.js.map +1 -0
  463. package/dist/lib/cart.mjs +7 -0
  464. package/dist/lib/cart.mjs.map +1 -0
  465. package/dist/lib/contracts.d.ts +4008 -0
  466. package/dist/lib/contracts.d.ts.map +1 -0
  467. package/dist/lib/contracts.js +828 -0
  468. package/dist/lib/contracts.js.map +1 -0
  469. package/dist/lib/contracts.mjs +737 -0
  470. package/dist/lib/contracts.mjs.map +1 -0
  471. package/dist/lib/money.d.ts +28 -0
  472. package/dist/lib/money.d.ts.map +1 -0
  473. package/dist/lib/money.js +50 -0
  474. package/dist/lib/money.js.map +1 -0
  475. package/dist/lib/money.mjs +24 -0
  476. package/dist/lib/money.mjs.map +1 -0
  477. package/dist/lib/types/menu.d.ts +40 -0
  478. package/dist/lib/types/menu.d.ts.map +1 -0
  479. package/dist/lib/types/menu.js +50 -0
  480. package/dist/lib/types/menu.js.map +1 -0
  481. package/dist/lib/types/menu.mjs +25 -0
  482. package/dist/lib/types/menu.mjs.map +1 -0
  483. package/dist/lib/types.d.ts +5 -0
  484. package/dist/lib/types.d.ts.map +1 -0
  485. package/dist/lib/types.js +17 -0
  486. package/dist/lib/types.js.map +1 -0
  487. package/dist/lib/types.mjs +1 -0
  488. package/dist/lib/types.mjs.map +1 -0
  489. package/dist/lib/utils.d.ts +7 -0
  490. package/dist/lib/utils.d.ts.map +1 -0
  491. package/dist/lib/utils.js +33 -0
  492. package/dist/lib/utils.js.map +1 -0
  493. package/dist/lib/utils.mjs +9 -0
  494. package/dist/lib/utils.mjs.map +1 -0
  495. package/dist/ui/accordion.d.ts +8 -0
  496. package/dist/ui/accordion.d.ts.map +1 -0
  497. package/dist/ui/accordion.js +93 -0
  498. package/dist/ui/accordion.js.map +1 -0
  499. package/dist/ui/accordion.mjs +66 -0
  500. package/dist/ui/accordion.mjs.map +1 -0
  501. package/dist/ui/avatar.d.ts +12 -0
  502. package/dist/ui/avatar.d.ts.map +1 -0
  503. package/dist/ui/avatar.js +134 -0
  504. package/dist/ui/avatar.js.map +1 -0
  505. package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
  506. package/dist/ui/avatar.mjs.map +1 -0
  507. package/dist/ui/badge.d.ts +10 -0
  508. package/dist/ui/badge.d.ts.map +1 -0
  509. package/dist/ui/badge.js +69 -0
  510. package/dist/ui/badge.js.map +1 -0
  511. package/dist/ui/badge.mjs +44 -0
  512. package/dist/ui/badge.mjs.map +1 -0
  513. package/dist/ui/breadcrumb.d.ts +12 -0
  514. package/dist/ui/breadcrumb.d.ts.map +1 -0
  515. package/dist/ui/breadcrumb.js +134 -0
  516. package/dist/ui/breadcrumb.js.map +1 -0
  517. package/dist/ui/breadcrumb.mjs +104 -0
  518. package/dist/ui/breadcrumb.mjs.map +1 -0
  519. package/dist/ui/button-group.d.ts +12 -0
  520. package/dist/ui/button-group.d.ts.map +1 -0
  521. package/dist/ui/button-group.js +104 -0
  522. package/dist/ui/button-group.js.map +1 -0
  523. package/dist/ui/button-group.mjs +77 -0
  524. package/dist/ui/button-group.mjs.map +1 -0
  525. package/dist/ui/button.d.ts +11 -0
  526. package/dist/ui/button.d.ts.map +1 -0
  527. package/dist/ui/button.js +82 -0
  528. package/dist/ui/button.js.map +1 -0
  529. package/dist/ui/button.mjs +57 -0
  530. package/dist/ui/button.mjs.map +1 -0
  531. package/dist/ui/card.d.ts +10 -0
  532. package/dist/ui/card.d.ts.map +1 -0
  533. package/dist/ui/card.js +121 -0
  534. package/dist/ui/card.js.map +1 -0
  535. package/dist/ui/card.mjs +91 -0
  536. package/dist/ui/card.mjs.map +1 -0
  537. package/dist/ui/carousel.d.ts +20 -0
  538. package/dist/ui/carousel.d.ts.map +1 -0
  539. package/dist/ui/carousel.js +238 -0
  540. package/dist/ui/carousel.js.map +1 -0
  541. package/dist/ui/carousel.mjs +200 -0
  542. package/dist/ui/carousel.mjs.map +1 -0
  543. package/dist/ui/dialog.d.ts +18 -0
  544. package/dist/ui/dialog.d.ts.map +1 -0
  545. package/dist/ui/dialog.js +181 -0
  546. package/dist/ui/dialog.js.map +1 -0
  547. package/dist/ui/dialog.mjs +148 -0
  548. package/dist/ui/dialog.mjs.map +1 -0
  549. package/dist/ui/drawer.d.ts +14 -0
  550. package/dist/ui/drawer.d.ts.map +1 -0
  551. package/dist/ui/drawer.js +163 -0
  552. package/dist/ui/drawer.js.map +1 -0
  553. package/dist/ui/drawer.mjs +130 -0
  554. package/dist/ui/drawer.mjs.map +1 -0
  555. package/dist/ui/dropdown-menu.d.ts +26 -0
  556. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  557. package/dist/ui/dropdown-menu.js +271 -0
  558. package/dist/ui/dropdown-menu.js.map +1 -0
  559. package/dist/ui/dropdown-menu.mjs +233 -0
  560. package/dist/ui/dropdown-menu.mjs.map +1 -0
  561. package/dist/ui/empty.d.ts +12 -0
  562. package/dist/ui/empty.d.ts.map +1 -0
  563. package/dist/ui/empty.js +132 -0
  564. package/dist/ui/empty.js.map +1 -0
  565. package/dist/ui/empty.mjs +103 -0
  566. package/dist/ui/empty.mjs.map +1 -0
  567. package/dist/ui/field.d.ts +25 -0
  568. package/dist/ui/field.d.ts.map +1 -0
  569. package/dist/ui/field.js +264 -0
  570. package/dist/ui/field.js.map +1 -0
  571. package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
  572. package/dist/ui/field.mjs.map +1 -0
  573. package/dist/ui/input-group.d.ts +17 -0
  574. package/dist/ui/input-group.d.ts.map +1 -0
  575. package/dist/ui/input-group.js +185 -0
  576. package/dist/ui/input-group.js.map +1 -0
  577. package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
  578. package/dist/ui/input-group.mjs.map +1 -0
  579. package/dist/ui/input-otp.d.ts +12 -0
  580. package/dist/ui/input-otp.d.ts.map +1 -0
  581. package/dist/ui/input-otp.js +105 -0
  582. package/dist/ui/input-otp.js.map +1 -0
  583. package/dist/ui/input-otp.mjs +68 -0
  584. package/dist/ui/input-otp.mjs.map +1 -0
  585. package/dist/ui/input.d.ts +4 -0
  586. package/dist/ui/input.d.ts.map +1 -0
  587. package/dist/ui/input.js +46 -0
  588. package/dist/ui/input.js.map +1 -0
  589. package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
  590. package/dist/ui/input.mjs.map +1 -0
  591. package/dist/ui/label.d.ts +5 -0
  592. package/dist/ui/label.d.ts.map +1 -0
  593. package/dist/ui/label.js +48 -0
  594. package/dist/ui/label.js.map +1 -0
  595. package/dist/ui/label.mjs +24 -0
  596. package/dist/ui/label.mjs.map +1 -0
  597. package/dist/ui/navigation-menu.d.ts +15 -0
  598. package/dist/ui/navigation-menu.d.ts.map +1 -0
  599. package/dist/ui/navigation-menu.js +203 -0
  600. package/dist/ui/navigation-menu.js.map +1 -0
  601. package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
  602. package/dist/ui/navigation-menu.mjs.map +1 -0
  603. package/dist/ui/pagination.d.ts +14 -0
  604. package/dist/ui/pagination.d.ts.map +1 -0
  605. package/dist/ui/pagination.js +149 -0
  606. package/dist/ui/pagination.js.map +1 -0
  607. package/dist/ui/pagination.mjs +123 -0
  608. package/dist/ui/pagination.mjs.map +1 -0
  609. package/dist/ui/progress.d.ts +5 -0
  610. package/dist/ui/progress.d.ts.map +1 -0
  611. package/dist/ui/progress.js +57 -0
  612. package/dist/ui/progress.js.map +1 -0
  613. package/dist/ui/progress.mjs +33 -0
  614. package/dist/ui/progress.mjs.map +1 -0
  615. package/dist/ui/radio-group.d.ts +6 -0
  616. package/dist/ui/radio-group.d.ts.map +1 -0
  617. package/dist/ui/radio-group.js +72 -0
  618. package/dist/ui/radio-group.js.map +1 -0
  619. package/dist/ui/radio-group.mjs +47 -0
  620. package/dist/ui/radio-group.mjs.map +1 -0
  621. package/dist/ui/select.d.ts +16 -0
  622. package/dist/ui/select.d.ts.map +1 -0
  623. package/dist/ui/select.js +213 -0
  624. package/dist/ui/select.js.map +1 -0
  625. package/dist/ui/select.mjs +180 -0
  626. package/dist/ui/select.mjs.map +1 -0
  627. package/dist/ui/separator.d.ts +5 -0
  628. package/dist/ui/separator.d.ts.map +1 -0
  629. package/dist/ui/separator.js +52 -0
  630. package/dist/ui/separator.js.map +1 -0
  631. package/dist/ui/separator.mjs +28 -0
  632. package/dist/ui/separator.mjs.map +1 -0
  633. package/dist/ui/sheet.d.ts +15 -0
  634. package/dist/ui/sheet.d.ts.map +1 -0
  635. package/dist/ui/sheet.js +160 -0
  636. package/dist/ui/sheet.js.map +1 -0
  637. package/dist/ui/sheet.mjs +129 -0
  638. package/dist/ui/sheet.mjs.map +1 -0
  639. package/dist/ui/sidebar.d.ts +70 -0
  640. package/dist/ui/sidebar.d.ts.map +1 -0
  641. package/dist/ui/sidebar.js +697 -0
  642. package/dist/ui/sidebar.js.map +1 -0
  643. package/dist/ui/sidebar.mjs +651 -0
  644. package/dist/ui/sidebar.mjs.map +1 -0
  645. package/dist/ui/skeleton.d.ts +3 -0
  646. package/dist/ui/skeleton.d.ts.map +1 -0
  647. package/dist/ui/skeleton.js +40 -0
  648. package/dist/ui/skeleton.js.map +1 -0
  649. package/dist/ui/skeleton.mjs +16 -0
  650. package/dist/ui/skeleton.mjs.map +1 -0
  651. package/dist/ui/table.d.ts +11 -0
  652. package/dist/ui/table.d.ts.map +1 -0
  653. package/dist/ui/table.js +147 -0
  654. package/dist/ui/table.js.map +1 -0
  655. package/dist/ui/table.mjs +116 -0
  656. package/dist/ui/table.mjs.map +1 -0
  657. package/dist/ui/tabs.d.ts +12 -0
  658. package/dist/ui/tabs.d.ts.map +1 -0
  659. package/dist/ui/tabs.js +121 -0
  660. package/dist/ui/tabs.js.map +1 -0
  661. package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
  662. package/dist/ui/tabs.mjs.map +1 -0
  663. package/dist/ui/textarea.d.ts +4 -0
  664. package/dist/ui/textarea.d.ts.map +1 -0
  665. package/dist/ui/textarea.js +43 -0
  666. package/dist/ui/textarea.js.map +1 -0
  667. package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
  668. package/dist/ui/textarea.mjs.map +1 -0
  669. package/dist/ui/toggle-group.d.ts +10 -0
  670. package/dist/ui/toggle-group.d.ts.map +1 -0
  671. package/dist/ui/toggle-group.js +105 -0
  672. package/dist/ui/toggle-group.js.map +1 -0
  673. package/dist/ui/toggle-group.mjs +70 -0
  674. package/dist/ui/toggle-group.mjs.map +1 -0
  675. package/dist/ui/toggle.d.ts +10 -0
  676. package/dist/ui/toggle.d.ts.map +1 -0
  677. package/dist/ui/toggle.js +70 -0
  678. package/dist/ui/toggle.js.map +1 -0
  679. package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
  680. package/dist/ui/toggle.mjs.map +1 -0
  681. package/dist/ui/tooltip.d.ts +8 -0
  682. package/dist/ui/tooltip.d.ts.map +1 -0
  683. package/dist/ui/tooltip.js +84 -0
  684. package/dist/ui/tooltip.js.map +1 -0
  685. package/dist/ui/tooltip.mjs +57 -0
  686. package/dist/ui/tooltip.mjs.map +1 -0
  687. package/package.json +8 -1
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -155
  690. package/components.json +0 -33
  691. package/docs/standards/data-contracts.md +0 -81
  692. package/docs/standards/theming.md +0 -112
  693. package/scripts/fix-esm-extensions.mjs +0 -40
  694. package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
  695. package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
  696. package/src/blocks/application/login-forms/login-page.test.tsx +0 -190
  697. package/src/blocks/application/login-forms/login-page.tsx +0 -240
  698. package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
  699. package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -318
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -229
  701. package/src/blocks/application/verification/verify-1.tsx +0 -307
  702. package/src/blocks/application/verification/verify-confetti.tsx +0 -192
  703. package/src/blocks/application/viewport-ownership.test.tsx +0 -41
  704. package/src/blocks/e-commerce/category-filters/category-listing-filter-fields.tsx +0 -218
  705. package/src/blocks/e-commerce/category-filters/category-listing.test.tsx +0 -601
  706. package/src/blocks/e-commerce/category-filters/category-listing.tsx +0 -934
  707. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  708. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  709. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  710. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  711. package/src/blocks/e-commerce/checkout-forms/checkout-contact-step.tsx +0 -149
  712. package/src/blocks/e-commerce/checkout-forms/checkout-country-field.tsx +0 -53
  713. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  714. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  715. package/src/blocks/e-commerce/checkout-forms/checkout-order-summary.tsx +0 -230
  716. package/src/blocks/e-commerce/checkout-forms/checkout-payment-step.tsx +0 -100
  717. package/src/blocks/e-commerce/checkout-forms/checkout-progress.tsx +0 -62
  718. package/src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx +0 -59
  719. package/src/blocks/e-commerce/checkout-forms/checkout-shipping-step.tsx +0 -180
  720. package/src/blocks/e-commerce/checkout-forms/checkout.test.tsx +0 -478
  721. package/src/blocks/e-commerce/checkout-forms/checkout.tsx +0 -550
  722. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  723. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  724. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  725. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  726. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  727. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  728. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  729. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  730. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  731. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  732. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  733. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  734. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  735. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  736. package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.test.tsx +0 -56
  737. package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.tsx +0 -134
  738. package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.test.tsx +0 -204
  739. package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.tsx +0 -371
  740. package/src/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.tsx +0 -96
  741. package/src/blocks/e-commerce/navigation/storefront-navbar-search-bar.tsx +0 -52
  742. package/src/blocks/e-commerce/navigation/storefront-navbar.test.tsx +0 -264
  743. package/src/blocks/e-commerce/navigation/storefront-navbar.tsx +0 -604
  744. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  745. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  746. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  747. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  748. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  749. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  750. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  751. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  752. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  753. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  754. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  755. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -447
  756. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  757. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  758. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  759. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  760. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  761. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  762. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  763. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  764. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  765. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  766. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  767. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  768. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  769. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  770. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  771. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  772. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  773. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  774. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  775. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  776. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  777. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  778. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  779. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  780. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  781. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  782. package/src/blocks/marketing/features/feature.tsx +0 -195
  783. package/src/blocks/marketing/footers/footer-section-accessibility.test.tsx +0 -118
  784. package/src/blocks/marketing/footers/footer-section-actions.test.tsx +0 -131
  785. package/src/blocks/marketing/footers/footer-section-data.test.tsx +0 -127
  786. package/src/blocks/marketing/footers/footer-section-native-links.test.tsx +0 -100
  787. package/src/blocks/marketing/footers/footer-section-public-api.test.tsx +0 -11
  788. package/src/blocks/marketing/footers/footer-section.test.tsx +0 -46
  789. package/src/blocks/marketing/footers/footer-section.tsx +0 -532
  790. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  791. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  792. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  793. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  794. package/src/blocks/marketing/navbars/navbar-public-api.test.tsx +0 -57
  795. package/src/blocks/marketing/navbars/navbar.mega.test.tsx +0 -149
  796. package/src/blocks/marketing/navbars/navbar.test.tsx +0 -155
  797. package/src/blocks/marketing/navbars/navbar.tsx +0 -735
  798. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  799. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  800. package/src/blocks/marketing/testimonials/testimonial-section.test.tsx +0 -171
  801. package/src/blocks/marketing/testimonials/testimonial-section.tsx +0 -237
  802. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  803. package/src/hooks/use-mobile.ts +0 -19
  804. package/src/index.ts +0 -284
  805. package/src/lib/cart.test.ts +0 -15
  806. package/src/lib/contracts-curated.test.ts +0 -225
  807. package/src/lib/contracts-server-boundary.test.ts +0 -52
  808. package/src/lib/contracts.test.ts +0 -228
  809. package/src/lib/contracts.ts +0 -857
  810. package/src/lib/money.test.ts +0 -64
  811. package/src/lib/money.ts +0 -65
  812. package/src/lib/types/menu.ts +0 -43
  813. package/src/lib/types.ts +0 -4
  814. package/src/lib/utils.ts +0 -10
  815. package/src/ui/accordion.tsx +0 -65
  816. package/src/ui/badge.tsx +0 -47
  817. package/src/ui/breadcrumb.tsx +0 -108
  818. package/src/ui/button-group.tsx +0 -83
  819. package/src/ui/button.tsx +0 -63
  820. package/src/ui/card.tsx +0 -91
  821. package/src/ui/carousel.tsx +0 -241
  822. package/src/ui/dialog.tsx +0 -158
  823. package/src/ui/drawer.tsx +0 -134
  824. package/src/ui/dropdown-menu.tsx +0 -256
  825. package/src/ui/empty.tsx +0 -103
  826. package/src/ui/input-otp.tsx +0 -76
  827. package/src/ui/label.tsx +0 -23
  828. package/src/ui/pagination.tsx +0 -127
  829. package/src/ui/progress.tsx +0 -30
  830. package/src/ui/radio-group.tsx +0 -44
  831. package/src/ui/select.tsx +0 -189
  832. package/src/ui/separator.tsx +0 -27
  833. package/src/ui/sheet.tsx +0 -142
  834. package/src/ui/sidebar.tsx +0 -726
  835. package/src/ui/skeleton.tsx +0 -13
  836. package/src/ui/table.tsx +0 -115
  837. package/src/ui/toggle-group.tsx +0 -83
  838. package/src/ui/tooltip.tsx +0 -56
  839. package/tsconfig.build.json +0 -12
  840. package/tsconfig.json +0 -20
  841. package/tsup.config.ts +0 -19
  842. package/vitest.config.ts +0 -17
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/shopping-carts/shopping-cart.tsx"],"sourcesContent":["'use client'\n\nimport { useId, useState } from 'react'\nimport { ShoppingCart as ShoppingCartIcon, Zap, Clock, CreditCard, Wallet, Minus, Plus, X } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { Money } from '@thorprovider/types'\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../ui/card'\nimport { Button } from '../../../ui/button'\nimport { Input } from '../../../ui/input'\nimport { Separator } from '../../../ui/separator'\nimport { Progress } from '../../../ui/progress'\nimport { cn } from '../../../lib/utils'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type { CartTotals, ShoppingCartItem, ShoppingCartSuggestion } from '../../../lib/contracts'\n\n/** Host-supplied promotion definition. Icons are React-side only. */\nexport interface ShoppingCartPromotion {\n threshold: number\n reward: string\n icon: LucideIcon\n}\n\nexport type ShoppingCartTotalsState = 'idle' | 'pending' | 'error'\n\nexport type ShoppingCartPresentation = 'compact' | 'page'\n\nexport interface ShoppingCartProps {\n /** Canonical cart lines keyed by backend cart line-item id. */\n items: ShoppingCartItem[]\n promotions?: ShoppingCartPromotion[]\n recentlyViewed?: ShoppingCartSuggestion[]\n /**\n * Layout presentation. `compact` (default) is the collapsible quick-cart\n * card; `page` is a wide, always-expanded review layout with a primary\n * heading, no collapse control, and normal page scrolling. Both use the same\n * line controls and authoritative monetary rendering.\n */\n presentation?: ShoppingCartPresentation\n /**\n * Backend-authoritative totals. The cart renders these verbatim; it never\n * computes subtotal/tax/shipping/total locally.\n */\n totals?: CartTotals\n /** Controlled state of the totals fetch/mutation. */\n totalsState?: ShoppingCartTotalsState\n totalsErrorLabel?: string\n /** Shown when a required total amount is absent or malformed (never as zero). */\n totalsUnavailableLabel?: string\n /** Shown for a line whose supplied line total is absent or malformed. */\n amountUnavailableLabel?: string\n retryLabel?: string\n onRetryTotals?: () => void\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n // labels (Spanish defaults):\n titleLabel?: string // 'Carrito de compras'\n subtotalLabel?: string // 'Subtotal'\n discountLabel?: string\n taxLabel?: string // 'Impuestos'\n shippingLabel?: string // 'Envío'\n shippingFreeLabel?: string // 'Gratis'\n totalLabel?: string // 'Total'\n totalsPendingLabel?: string\n awayFromLabel?: string // 'Te faltan ${amount} para'\n activatedLabel?: string // '¡{reward} activada!'\n itemsLabel?: string // 'artículos'\n expressCheckoutLabel?: string // 'Compra rápida'\n expressLabel?: string // 'Rápido'\n standardLabel?: string // 'Estándar'\n estimatedDeliveryLabel?: string\n secureCheckoutLabel?: string // 'Pago seguro • SSL cifrado'\n recentlyViewedLabel?: string // 'Vistos recientemente'\n promoPromptLabel?: string // '¿Tienes un código de descuento?'\n promoPlaceholderLabel?: string // 'Introduce tu código'\n promoApplyLabel?: string // 'Aplicar'\n collapseLabel?: string // 'Contraer carrito'\n expandLabel?: string // 'Expandir carrito'\n checkoutLabel?: string // 'Ver carrito y finalizar'\n quickCheckoutLabel?: string // 'Compra rápida'\n checkoutNowLabel?: string // 'Finalizar ahora'\n emptyLabel?: string\n removeLabel?: string\n decreaseLabel?: string\n increaseLabel?: string\n continueShoppingLabel?: string // 'Seguir comprando'\n // action availability:\n /** Suppress the checkout action (e.g. the checkout feature is not installed). */\n checkoutUnavailable?: boolean\n /** Disable checkout while the cart is not ready (pending/error/invalid totals). */\n checkoutDisabled?: boolean\n // callbacks:\n /**\n * ABSOLUTE quantity for a backend cart line-item id (distinct from the\n * Navbar's DELTA). The boundary mutates the cart by line-item id.\n */\n onQuantityChange?: (id: string, quantity: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n onCheckout?: () => void\n onQuickCheckout?: () => void\n onPayWithApple?: () => void\n onPayWithGoogle?: () => void\n /**\n * Report an entered promotion code to the host. The block never validates\n * or resolves codes; the authoritative result arrives through `totals`\n * (discount) and `promotions`. When absent, the promo affordance is not\n * rendered.\n */\n onApplyPromo?: (code: string) => void\n onRecentlyViewedClick?: (id: string) => void\n /** Page presentation only: navigate back to browsing. */\n onContinueShopping?: () => void\n}\n\nconst fallbackFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' })\n\nconst interpolate = (template: string, values: Record<string, string>) =>\n template.replace(/\\$\\{(\\w+)\\}|\\{(\\w+)\\}/g, (match, dollarKey, braceKey) => {\n const key = dollarKey ?? braceKey\n return values[key] ?? match\n })\n\nexport function ShoppingCart({\n items,\n promotions,\n recentlyViewed,\n presentation = 'compact',\n totals,\n totalsState = 'idle',\n totalsErrorLabel = 'No se pudieron actualizar los totales.',\n totalsUnavailableLabel = 'Totales no disponibles.',\n amountUnavailableLabel = '—',\n retryLabel = 'Reintentar',\n onRetryTotals,\n formatMoney: formatMoneyProp,\n titleLabel = 'Carrito de compras',\n subtotalLabel = 'Subtotal',\n discountLabel = 'Descuento',\n taxLabel = 'Impuestos',\n shippingLabel = 'Envío',\n shippingFreeLabel = 'Gratis',\n totalLabel = 'Total',\n totalsPendingLabel = 'Actualizando totales…',\n awayFromLabel = 'Te faltan ${amount} para',\n activatedLabel = '¡{reward} activada!',\n itemsLabel = 'artículos',\n expressCheckoutLabel = 'Compra rápida',\n expressLabel = 'Rápido',\n standardLabel = 'Estándar',\n estimatedDeliveryLabel,\n secureCheckoutLabel = 'Pago seguro • SSL cifrado',\n recentlyViewedLabel = 'Vistos recientemente',\n promoPromptLabel = '¿Tienes un código de descuento?',\n promoPlaceholderLabel = 'Introduce tu código',\n promoApplyLabel = 'Aplicar',\n collapseLabel = 'Contraer carrito',\n expandLabel = 'Expandir carrito',\n checkoutLabel = 'Ver carrito y finalizar',\n quickCheckoutLabel = 'Compra rápida',\n checkoutNowLabel = 'Finalizar ahora',\n emptyLabel = 'Tu carrito está vacío',\n removeLabel = 'Quitar',\n decreaseLabel = 'Disminuir cantidad',\n increaseLabel = 'Aumentar cantidad',\n continueShoppingLabel = 'Seguir comprando',\n checkoutUnavailable,\n checkoutDisabled,\n onQuantityChange,\n onRemove,\n onCheckout,\n onQuickCheckout,\n onPayWithApple,\n onPayWithGoogle,\n onApplyPromo,\n onRecentlyViewedClick,\n onContinueShopping,\n}: ShoppingCartProps) {\n const [isExpanded, setIsExpanded] = useState(true)\n const [quickCheckout, setQuickCheckout] = useState(false)\n const [promoCode, setPromoCode] = useState('')\n const promoInputId = useId()\n\n const isPage = presentation === 'page'\n // The page presentation is always expanded; only the compact card collapses.\n const expanded = isPage ? true : isExpanded\n // Display currency derives from the authoritative Money subtotal; the USD\n // formatter is only the fallback when no authoritative currency exists.\n const format = formatMoneyProp\n ? (value: number) => {\n const money: Money = { amount: String(value), currencyCode: totals?.subtotal?.currencyCode ?? 'USD' }\n return formatMoneyProp(money)\n }\n : totals?.subtotal?.currencyCode && totals.subtotal.currencyCode !== 'USD'\n ? (value: number) =>\n new Intl.NumberFormat('en-US', { style: 'currency', currency: totals.subtotal.currencyCode }).format(value)\n : (value: number) => fallbackFormatter.format(value)\n const money = (value: Money | null | undefined) => formatMoney(value, formatMoneyProp)\n const subtotalAmount = isAvailableMoney(totals?.subtotal) ? Number(totals.subtotal.amount) : 0\n const itemCount = items.reduce((sum, item) => sum + item.quantity, 0)\n const hasExpress = Boolean(onQuickCheckout || onPayWithApple || onPayWithGoogle)\n // While totals/mutations are pending, keep confirmed data visible but block\n // conflicting edits and checkout until the backend responds.\n const mutationsDisabled = totalsState === 'pending'\n\n const sortedPromotions = [...(promotions ?? [])].sort((a, b) => a.threshold - b.threshold)\n const currentPromo = (() => {\n if (!isAvailableMoney(totals?.subtotal)) return null\n for (let i = sortedPromotions.length - 1; i >= 0; i--) {\n if (subtotalAmount >= sortedPromotions[i].threshold) {\n return { ...sortedPromotions[i], achieved: true }\n }\n }\n const next = sortedPromotions.find(p => subtotalAmount < p.threshold)\n return next ? { ...next, achieved: false } : null\n })()\n const progressPercentage =\n currentPromo && !currentPromo.achieved\n ? Math.min(100, (subtotalAmount / currentPromo.threshold) * 100)\n : 100\n\n const lineAmount = (item: ShoppingCartItem): string | null => {\n // The backend-authoritative line total renders verbatim. A malformed amount\n // is unavailable (never a fabricated zero); `unitPrice` is never multiplied\n // locally — the cart contract forbids local `unit × qty` arithmetic.\n if (item.lineTotal === undefined) return null\n return money(item.lineTotal)\n }\n\n const renderTotals = () => {\n if (totalsState === 'pending') {\n return (\n <div className='flex flex-col gap-2' aria-live='polite'>\n <p className='text-muted-foreground text-sm'>{totalsPendingLabel}</p>\n </div>\n )\n }\n if (totalsState === 'error') {\n return (\n <div className='flex flex-col gap-2' role='alert'>\n <p className='text-destructive text-sm'>{totalsErrorLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n if (!totals) return null\n\n const subtotalText = money(totals.subtotal)\n const totalText = money(totals.total)\n // Required totals: if either is absent/malformed, show an explicit\n // unavailable state (with recovery) rather than a fabricated zero.\n if (subtotalText === null || totalText === null) {\n return (\n <div className='flex flex-col gap-2' role='status'>\n <p className='text-muted-foreground text-sm'>{totalsUnavailableLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n\n const shippingText = money(totals.shipping)\n return (\n <>\n <div className='flex justify-between text-sm'>\n <span>{subtotalLabel}</span>\n <span className='tabular-nums'>{subtotalText}</span>\n </div>\n {isAvailableMoney(totals.discount) ? (\n <div className='flex justify-between text-sm'>\n <span>{discountLabel}</span>\n <span className='tabular-nums'>{money(totals.discount)}</span>\n </div>\n ) : null}\n {isAvailableMoney(totals.tax) ? (\n <div className='flex justify-between text-sm'>\n <span>{taxLabel}</span>\n <span className='tabular-nums'>{money(totals.tax)}</span>\n </div>\n ) : null}\n {shippingText !== null ? (\n <div className='flex justify-between text-sm text-success'>\n <span>{shippingLabel}</span>\n <span className='tabular-nums'>\n {Number(totals.shipping?.amount) === 0 ? shippingFreeLabel : shippingText}\n </span>\n </div>\n ) : null}\n <Separator />\n <div className='flex justify-between font-semibold'>\n <span>{totalLabel}</span>\n <span className='tabular-nums'>{totalText}</span>\n </div>\n </>\n )\n }\n\n const renderPromoEntry = () =>\n onApplyPromo ? (\n <form\n className='flex flex-col gap-2'\n onSubmit={event => {\n event.preventDefault()\n const code = promoCode.trim()\n if (!code) return\n onApplyPromo(code)\n setPromoCode('')\n }}\n >\n <label className='text-sm' htmlFor={promoInputId}>\n {promoPromptLabel}\n </label>\n <div className='flex gap-2'>\n <Input\n id={promoInputId}\n value={promoCode}\n onChange={event => setPromoCode(event.target.value)}\n placeholder={promoPlaceholderLabel}\n className='h-9 flex-1'\n />\n <Button type='submit' variant='outline' size='sm' className='h-9' disabled={mutationsDisabled}>\n {promoApplyLabel}\n </Button>\n </div>\n </form>\n ) : null\n\n return (\n <section className='py-8'>\n <div className={cn('mx-auto px-4', isPage ? 'max-w-3xl' : 'max-w-md')}>\n {isPage ? (\n <h1 className='mb-6 text-2xl font-semibold tracking-tight'>{titleLabel}</h1>\n ) : null}\n <Card className={isPage ? 'shadow-sm' : 'shadow-lg'}>\n {/* Header */}\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-3'>\n <CardTitle className='flex items-center gap-2'>\n <ShoppingCartIcon className='size-5' />\n {titleLabel} ({itemCount})\n </CardTitle>\n {!isPage ? (\n <Button\n variant='ghost'\n className='h-8 cursor-pointer px-3 text-xs'\n size='sm'\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? collapseLabel : expandLabel}\n >\n {isExpanded ? <X /> : <Plus />}\n </Button>\n ) : null}\n </CardHeader>\n\n <CardContent className='flex flex-col gap-6'>\n {items.length === 0 ? (\n <div className='flex flex-col items-center justify-center gap-4 py-6 text-center'>\n <ShoppingCartIcon className='text-muted-foreground/50 size-10' />\n <p className='text-muted-foreground text-sm'>{emptyLabel}</p>\n {isPage && onContinueShopping ? (\n <Button variant='outline' onClick={onContinueShopping}>\n {continueShoppingLabel}\n </Button>\n ) : null}\n </div>\n ) : (\n <>\n {/* Promotion Progress */}\n {currentPromo && !currentPromo.achieved ? (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between text-sm'>\n <span className='text-muted-foreground'>\n {interpolate(awayFromLabel, {\n amount: format(currentPromo.threshold - subtotalAmount),\n })}\n </span>\n <div className='flex items-center gap-1'>\n <currentPromo.icon className='text-primary size-4' />\n <span className='text-primary font-medium'>{currentPromo.reward}</span>\n </div>\n </div>\n <Progress value={progressPercentage} className='h-2' />\n </div>\n ) : null}\n\n {/* Active Promotion */}\n {currentPromo?.achieved ? (\n <div className='rounded-lg bg-success/10 p-3'>\n <div className='flex items-center gap-2 text-success'>\n <currentPromo.icon className='size-4' />\n <span className='text-sm font-medium'>\n {interpolate(activatedLabel, { reward: currentPromo.reward })}\n </span>\n </div>\n </div>\n ) : null}\n\n {expanded && (\n <>\n {/* Cart Items */}\n <div\n className={cn(\n 'flex flex-col gap-4',\n !isPage &&\n 'scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent max-h-64 overflow-y-auto',\n )}\n >\n {items.map(item => (\n <div key={item.id} className='flex items-start gap-3'>\n {item.image ? (\n <img src={item.image || undefined} alt='' className='h-12 w-12 rounded-md object-cover' />\n ) : (\n <div aria-hidden='true' className='bg-muted h-12 w-12 shrink-0 rounded-md' />\n )}\n\n <div className='flex flex-1 flex-col gap-1'>\n <h3 className='line-clamp-2 text-sm font-medium'>{item.name}</h3>\n {item.variant ? <p className='text-muted-foreground text-xs'>{item.variant}</p> : null}\n\n <div className='flex items-center justify-between'>\n <span className='text-sm font-semibold'>{lineAmount(item) ?? amountUnavailableLabel}</span>\n\n <div className='flex items-center'>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity - 1)\n : undefined\n }\n disabled={item.quantity <= 1 || mutationsDisabled}\n aria-label={`${decreaseLabel}, ${item.name}`}\n >\n <Minus />\n </Button>\n <span className='mx-2 w-6 text-center text-sm'>{item.quantity}</span>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity + 1)\n : undefined\n }\n aria-label={`${increaseLabel}, ${item.name}`}\n disabled={mutationsDisabled}\n >\n <Plus />\n </Button>\n <Button\n variant='ghost'\n size='sm'\n className='text-destructive hover:text-destructive ms-2 size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={onRemove ? () => onRemove(item.id) : undefined}\n disabled={mutationsDisabled}\n aria-label={`${removeLabel} ${item.name}`}\n >\n <X />\n </Button>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <Separator />\n\n {/* Order Summary — backend-authoritative only */}\n <div className='flex flex-col gap-2'>{renderTotals()}</div>\n\n {/* Promo code entry — reports to the host, never resolves locally */}\n {renderPromoEntry()}\n\n {/* Quick Actions */}\n <div className='flex flex-col gap-3'>\n {/* Express Checkout Toggle — only when the host supplies a handler */}\n {hasExpress ? (\n <>\n <div className='flex items-center justify-between text-sm'>\n <span>{expressCheckoutLabel}</span>\n <Button\n variant='outline'\n size='sm'\n onClick={() => setQuickCheckout(!quickCheckout)}\n className='h-8 cursor-pointer'\n aria-pressed={quickCheckout}\n >\n <Zap />\n {quickCheckout ? standardLabel : expressLabel}\n </Button>\n </div>\n\n {quickCheckout ? (\n <div className='grid grid-cols-2 gap-2'>\n {onPayWithApple ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithApple}>\n <Wallet />\n Apple Pay\n </Button>\n ) : null}\n {onPayWithGoogle ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithGoogle}>\n <CreditCard />\n Google Pay\n </Button>\n ) : null}\n </div>\n ) : null}\n </>\n ) : null}\n\n {/* Checkout Button */}\n {!checkoutUnavailable ? (\n <Button\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={hasExpress && quickCheckout ? onQuickCheckout : onCheckout}\n disabled={checkoutDisabled || totalsState === 'pending'}\n >\n {hasExpress && quickCheckout ? quickCheckoutLabel : checkoutLabel}\n </Button>\n ) : null}\n\n {/* Continue shopping — page presentation only */}\n {isPage && onContinueShopping ? (\n <Button\n variant='outline'\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={onContinueShopping}\n >\n {continueShoppingLabel}\n </Button>\n ) : null}\n\n {/* Estimated Delivery — only when supplied, never fabricated */}\n {estimatedDeliveryLabel ? (\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <Clock className='size-3' />\n <span>{estimatedDeliveryLabel}</span>\n </div>\n ) : null}\n </div>\n\n {/* Security Badge */}\n <div className='bg-muted/50 rounded-lg p-3 text-center'>\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <div className='size-2 rounded-full bg-success' aria-hidden='true' />\n <span>{secureCheckoutLabel}</span>\n </div>\n </div>\n </>\n )}\n\n {/* Collapsed Summary */}\n {!expanded && (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between'>\n <span className='text-muted-foreground text-sm'>\n {itemCount} {itemsLabel}\n </span>\n {isAvailableMoney(totals?.total) ? (\n <span className='font-semibold tabular-nums'>{money(totals.total)}</span>\n ) : null}\n </div>\n\n <Button size='sm' className='h-8 w-full cursor-pointer px-3 text-xs' onClick={onCheckout}>\n {checkoutNowLabel}\n </Button>\n </div>\n )}\n\n {/* Recently Viewed — host-supplied suggestions only */}\n {expanded && recentlyViewed && recentlyViewed.length > 0 && (\n <div className='flex flex-col gap-3'>\n <h4 className='text-sm font-medium'>{recentlyViewedLabel}</h4>\n <div className='grid grid-cols-3 gap-2'>\n {recentlyViewed.map(item => {\n const suggestionPrice = money(item.unitPrice)\n return (\n <button\n key={item.id}\n type='button'\n className={cn(\n 'group text-start',\n onRecentlyViewedClick && 'cursor-pointer',\n )}\n onClick={onRecentlyViewedClick ? () => onRecentlyViewedClick(item.id) : undefined}\n >\n <div className='bg-muted mb-1 aspect-square overflow-hidden'>\n {item.image ? (\n <img\n src={item.image || undefined}\n alt={item.name}\n className='size-full rounded-md object-cover'\n />\n ) : null}\n </div>\n <p className='text-muted-foreground truncate text-xs'>{item.name}</p>\n {suggestionPrice !== null ? (\n <p className='text-xs font-medium tabular-nums'>{suggestionPrice}</p>\n ) : null}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n </Card>\n </div>\n </section>\n )\n}\n\nexport default ShoppingCart\n"],"mappings":"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","names":["money","ShoppingCartIcon"]}
@@ -0,0 +1,393 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useId, useState } from "react";
4
+ import { ShoppingCart as ShoppingCartIcon, Zap, Clock, CreditCard, Wallet, Minus, Plus, X } from "lucide-react";
5
+ import { Card, CardContent, CardHeader, CardTitle } from "../../../ui/card.mjs";
6
+ import { Button } from "../../../ui/button.mjs";
7
+ import { Input } from "../../../ui/input.mjs";
8
+ import { Separator } from "../../../ui/separator.mjs";
9
+ import { Progress } from "../../../ui/progress.mjs";
10
+ import { cn } from "../../../lib/utils.mjs";
11
+ import { formatMoney, isAvailableMoney } from "../../../lib/money.mjs";
12
+ const fallbackFormatter = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" });
13
+ const interpolate = (template, values) => template.replace(/\$\{(\w+)\}|\{(\w+)\}/g, (match, dollarKey, braceKey) => {
14
+ const key = dollarKey ?? braceKey;
15
+ return values[key] ?? match;
16
+ });
17
+ function ShoppingCart({
18
+ items,
19
+ promotions,
20
+ recentlyViewed,
21
+ presentation = "compact",
22
+ totals,
23
+ totalsState = "idle",
24
+ totalsErrorLabel = "No se pudieron actualizar los totales.",
25
+ totalsUnavailableLabel = "Totales no disponibles.",
26
+ amountUnavailableLabel = "\u2014",
27
+ retryLabel = "Reintentar",
28
+ onRetryTotals,
29
+ formatMoney: formatMoneyProp,
30
+ titleLabel = "Carrito de compras",
31
+ subtotalLabel = "Subtotal",
32
+ discountLabel = "Descuento",
33
+ taxLabel = "Impuestos",
34
+ shippingLabel = "Env\xEDo",
35
+ shippingFreeLabel = "Gratis",
36
+ totalLabel = "Total",
37
+ totalsPendingLabel = "Actualizando totales\u2026",
38
+ awayFromLabel = "Te faltan ${amount} para",
39
+ activatedLabel = "\xA1{reward} activada!",
40
+ itemsLabel = "art\xEDculos",
41
+ expressCheckoutLabel = "Compra r\xE1pida",
42
+ expressLabel = "R\xE1pido",
43
+ standardLabel = "Est\xE1ndar",
44
+ estimatedDeliveryLabel,
45
+ secureCheckoutLabel = "Pago seguro \u2022 SSL cifrado",
46
+ recentlyViewedLabel = "Vistos recientemente",
47
+ promoPromptLabel = "\xBFTienes un c\xF3digo de descuento?",
48
+ promoPlaceholderLabel = "Introduce tu c\xF3digo",
49
+ promoApplyLabel = "Aplicar",
50
+ collapseLabel = "Contraer carrito",
51
+ expandLabel = "Expandir carrito",
52
+ checkoutLabel = "Ver carrito y finalizar",
53
+ quickCheckoutLabel = "Compra r\xE1pida",
54
+ checkoutNowLabel = "Finalizar ahora",
55
+ emptyLabel = "Tu carrito est\xE1 vac\xEDo",
56
+ removeLabel = "Quitar",
57
+ decreaseLabel = "Disminuir cantidad",
58
+ increaseLabel = "Aumentar cantidad",
59
+ continueShoppingLabel = "Seguir comprando",
60
+ checkoutUnavailable,
61
+ checkoutDisabled,
62
+ onQuantityChange,
63
+ onRemove,
64
+ onCheckout,
65
+ onQuickCheckout,
66
+ onPayWithApple,
67
+ onPayWithGoogle,
68
+ onApplyPromo,
69
+ onRecentlyViewedClick,
70
+ onContinueShopping
71
+ }) {
72
+ const [isExpanded, setIsExpanded] = useState(true);
73
+ const [quickCheckout, setQuickCheckout] = useState(false);
74
+ const [promoCode, setPromoCode] = useState("");
75
+ const promoInputId = useId();
76
+ const isPage = presentation === "page";
77
+ const expanded = isPage ? true : isExpanded;
78
+ const format = formatMoneyProp ? (value) => {
79
+ const money2 = { amount: String(value), currencyCode: totals?.subtotal?.currencyCode ?? "USD" };
80
+ return formatMoneyProp(money2);
81
+ } : totals?.subtotal?.currencyCode && totals.subtotal.currencyCode !== "USD" ? (value) => new Intl.NumberFormat("en-US", { style: "currency", currency: totals.subtotal.currencyCode }).format(value) : (value) => fallbackFormatter.format(value);
82
+ const money = (value) => formatMoney(value, formatMoneyProp);
83
+ const subtotalAmount = isAvailableMoney(totals?.subtotal) ? Number(totals.subtotal.amount) : 0;
84
+ const itemCount = items.reduce((sum, item) => sum + item.quantity, 0);
85
+ const hasExpress = Boolean(onQuickCheckout || onPayWithApple || onPayWithGoogle);
86
+ const mutationsDisabled = totalsState === "pending";
87
+ const sortedPromotions = [...promotions ?? []].sort((a, b) => a.threshold - b.threshold);
88
+ const currentPromo = (() => {
89
+ if (!isAvailableMoney(totals?.subtotal)) return null;
90
+ for (let i = sortedPromotions.length - 1; i >= 0; i--) {
91
+ if (subtotalAmount >= sortedPromotions[i].threshold) {
92
+ return { ...sortedPromotions[i], achieved: true };
93
+ }
94
+ }
95
+ const next = sortedPromotions.find((p) => subtotalAmount < p.threshold);
96
+ return next ? { ...next, achieved: false } : null;
97
+ })();
98
+ const progressPercentage = currentPromo && !currentPromo.achieved ? Math.min(100, subtotalAmount / currentPromo.threshold * 100) : 100;
99
+ const lineAmount = (item) => {
100
+ if (item.lineTotal === void 0) return null;
101
+ return money(item.lineTotal);
102
+ };
103
+ const renderTotals = () => {
104
+ if (totalsState === "pending") {
105
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", "aria-live": "polite", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: totalsPendingLabel }) });
106
+ }
107
+ if (totalsState === "error") {
108
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", role: "alert", children: [
109
+ /* @__PURE__ */ jsx("p", { className: "text-destructive text-sm", children: totalsErrorLabel }),
110
+ onRetryTotals ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", className: "w-fit", onClick: onRetryTotals, children: retryLabel }) : null
111
+ ] });
112
+ }
113
+ if (!totals) return null;
114
+ const subtotalText = money(totals.subtotal);
115
+ const totalText = money(totals.total);
116
+ if (subtotalText === null || totalText === null) {
117
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", role: "status", children: [
118
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: totalsUnavailableLabel }),
119
+ onRetryTotals ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", className: "w-fit", onClick: onRetryTotals, children: retryLabel }) : null
120
+ ] });
121
+ }
122
+ const shippingText = money(totals.shipping);
123
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
124
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
125
+ /* @__PURE__ */ jsx("span", { children: subtotalLabel }),
126
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: subtotalText })
127
+ ] }),
128
+ isAvailableMoney(totals.discount) ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
129
+ /* @__PURE__ */ jsx("span", { children: discountLabel }),
130
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: money(totals.discount) })
131
+ ] }) : null,
132
+ isAvailableMoney(totals.tax) ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
133
+ /* @__PURE__ */ jsx("span", { children: taxLabel }),
134
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: money(totals.tax) })
135
+ ] }) : null,
136
+ shippingText !== null ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm text-success", children: [
137
+ /* @__PURE__ */ jsx("span", { children: shippingLabel }),
138
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: Number(totals.shipping?.amount) === 0 ? shippingFreeLabel : shippingText })
139
+ ] }) : null,
140
+ /* @__PURE__ */ jsx(Separator, {}),
141
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between font-semibold", children: [
142
+ /* @__PURE__ */ jsx("span", { children: totalLabel }),
143
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: totalText })
144
+ ] })
145
+ ] });
146
+ };
147
+ const renderPromoEntry = () => onApplyPromo ? /* @__PURE__ */ jsxs(
148
+ "form",
149
+ {
150
+ className: "flex flex-col gap-2",
151
+ onSubmit: (event) => {
152
+ event.preventDefault();
153
+ const code = promoCode.trim();
154
+ if (!code) return;
155
+ onApplyPromo(code);
156
+ setPromoCode("");
157
+ },
158
+ children: [
159
+ /* @__PURE__ */ jsx("label", { className: "text-sm", htmlFor: promoInputId, children: promoPromptLabel }),
160
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
161
+ /* @__PURE__ */ jsx(
162
+ Input,
163
+ {
164
+ id: promoInputId,
165
+ value: promoCode,
166
+ onChange: (event) => setPromoCode(event.target.value),
167
+ placeholder: promoPlaceholderLabel,
168
+ className: "h-9 flex-1"
169
+ }
170
+ ),
171
+ /* @__PURE__ */ jsx(Button, { type: "submit", variant: "outline", size: "sm", className: "h-9", disabled: mutationsDisabled, children: promoApplyLabel })
172
+ ] })
173
+ ]
174
+ }
175
+ ) : null;
176
+ return /* @__PURE__ */ jsx("section", { className: "py-8", children: /* @__PURE__ */ jsxs("div", { className: cn("mx-auto px-4", isPage ? "max-w-3xl" : "max-w-md"), children: [
177
+ isPage ? /* @__PURE__ */ jsx("h1", { className: "mb-6 text-2xl font-semibold tracking-tight", children: titleLabel }) : null,
178
+ /* @__PURE__ */ jsxs(Card, { className: isPage ? "shadow-sm" : "shadow-lg", children: [
179
+ /* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-3", children: [
180
+ /* @__PURE__ */ jsxs(CardTitle, { className: "flex items-center gap-2", children: [
181
+ /* @__PURE__ */ jsx(ShoppingCartIcon, { className: "size-5" }),
182
+ titleLabel,
183
+ " (",
184
+ itemCount,
185
+ ")"
186
+ ] }),
187
+ !isPage ? /* @__PURE__ */ jsx(
188
+ Button,
189
+ {
190
+ variant: "ghost",
191
+ className: "h-8 cursor-pointer px-3 text-xs",
192
+ size: "sm",
193
+ onClick: () => setIsExpanded(!isExpanded),
194
+ "aria-expanded": isExpanded,
195
+ "aria-label": isExpanded ? collapseLabel : expandLabel,
196
+ children: isExpanded ? /* @__PURE__ */ jsx(X, {}) : /* @__PURE__ */ jsx(Plus, {})
197
+ }
198
+ ) : null
199
+ ] }),
200
+ /* @__PURE__ */ jsx(CardContent, { className: "flex flex-col gap-6", children: items.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-6 text-center", children: [
201
+ /* @__PURE__ */ jsx(ShoppingCartIcon, { className: "text-muted-foreground/50 size-10" }),
202
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: emptyLabel }),
203
+ isPage && onContinueShopping ? /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onContinueShopping, children: continueShoppingLabel }) : null
204
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
205
+ currentPromo && !currentPromo.achieved ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
206
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm", children: [
207
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: interpolate(awayFromLabel, {
208
+ amount: format(currentPromo.threshold - subtotalAmount)
209
+ }) }),
210
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
211
+ /* @__PURE__ */ jsx(currentPromo.icon, { className: "text-primary size-4" }),
212
+ /* @__PURE__ */ jsx("span", { className: "text-primary font-medium", children: currentPromo.reward })
213
+ ] })
214
+ ] }),
215
+ /* @__PURE__ */ jsx(Progress, { value: progressPercentage, className: "h-2" })
216
+ ] }) : null,
217
+ currentPromo?.achieved ? /* @__PURE__ */ jsx("div", { className: "rounded-lg bg-success/10 p-3", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-success", children: [
218
+ /* @__PURE__ */ jsx(currentPromo.icon, { className: "size-4" }),
219
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: interpolate(activatedLabel, { reward: currentPromo.reward }) })
220
+ ] }) }) : null,
221
+ expanded && /* @__PURE__ */ jsxs(Fragment, { children: [
222
+ /* @__PURE__ */ jsx(
223
+ "div",
224
+ {
225
+ className: cn(
226
+ "flex flex-col gap-4",
227
+ !isPage && "scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent max-h-64 overflow-y-auto"
228
+ ),
229
+ children: items.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
230
+ item.image ? /* @__PURE__ */ jsx("img", { src: item.image || void 0, alt: "", className: "h-12 w-12 rounded-md object-cover" }) : /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "bg-muted h-12 w-12 shrink-0 rounded-md" }),
231
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col gap-1", children: [
232
+ /* @__PURE__ */ jsx("h3", { className: "line-clamp-2 text-sm font-medium", children: item.name }),
233
+ item.variant ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs", children: item.variant }) : null,
234
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
235
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: lineAmount(item) ?? amountUnavailableLabel }),
236
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
237
+ /* @__PURE__ */ jsx(
238
+ Button,
239
+ {
240
+ variant: "ghost",
241
+ size: "sm",
242
+ className: "size-6 h-8 cursor-pointer p-0 px-3 text-xs",
243
+ onClick: onQuantityChange ? () => onQuantityChange(item.id, item.quantity - 1) : void 0,
244
+ disabled: item.quantity <= 1 || mutationsDisabled,
245
+ "aria-label": `${decreaseLabel}, ${item.name}`,
246
+ children: /* @__PURE__ */ jsx(Minus, {})
247
+ }
248
+ ),
249
+ /* @__PURE__ */ jsx("span", { className: "mx-2 w-6 text-center text-sm", children: item.quantity }),
250
+ /* @__PURE__ */ jsx(
251
+ Button,
252
+ {
253
+ variant: "ghost",
254
+ size: "sm",
255
+ className: "size-6 h-8 cursor-pointer p-0 px-3 text-xs",
256
+ onClick: onQuantityChange ? () => onQuantityChange(item.id, item.quantity + 1) : void 0,
257
+ "aria-label": `${increaseLabel}, ${item.name}`,
258
+ disabled: mutationsDisabled,
259
+ children: /* @__PURE__ */ jsx(Plus, {})
260
+ }
261
+ ),
262
+ /* @__PURE__ */ jsx(
263
+ Button,
264
+ {
265
+ variant: "ghost",
266
+ size: "sm",
267
+ className: "text-destructive hover:text-destructive ms-2 size-6 h-8 cursor-pointer p-0 px-3 text-xs",
268
+ onClick: onRemove ? () => onRemove(item.id) : void 0,
269
+ disabled: mutationsDisabled,
270
+ "aria-label": `${removeLabel} ${item.name}`,
271
+ children: /* @__PURE__ */ jsx(X, {})
272
+ }
273
+ )
274
+ ] })
275
+ ] })
276
+ ] })
277
+ ] }, item.id))
278
+ }
279
+ ),
280
+ /* @__PURE__ */ jsx(Separator, {}),
281
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: renderTotals() }),
282
+ renderPromoEntry(),
283
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
284
+ hasExpress ? /* @__PURE__ */ jsxs(Fragment, { children: [
285
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm", children: [
286
+ /* @__PURE__ */ jsx("span", { children: expressCheckoutLabel }),
287
+ /* @__PURE__ */ jsxs(
288
+ Button,
289
+ {
290
+ variant: "outline",
291
+ size: "sm",
292
+ onClick: () => setQuickCheckout(!quickCheckout),
293
+ className: "h-8 cursor-pointer",
294
+ "aria-pressed": quickCheckout,
295
+ children: [
296
+ /* @__PURE__ */ jsx(Zap, {}),
297
+ quickCheckout ? standardLabel : expressLabel
298
+ ]
299
+ }
300
+ )
301
+ ] }),
302
+ quickCheckout ? /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
303
+ onPayWithApple ? /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", className: "h-8 cursor-pointer px-3 text-xs", onClick: onPayWithApple, children: [
304
+ /* @__PURE__ */ jsx(Wallet, {}),
305
+ "Apple Pay"
306
+ ] }) : null,
307
+ onPayWithGoogle ? /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", className: "h-8 cursor-pointer px-3 text-xs", onClick: onPayWithGoogle, children: [
308
+ /* @__PURE__ */ jsx(CreditCard, {}),
309
+ "Google Pay"
310
+ ] }) : null
311
+ ] }) : null
312
+ ] }) : null,
313
+ !checkoutUnavailable ? /* @__PURE__ */ jsx(
314
+ Button,
315
+ {
316
+ size: "lg",
317
+ className: "h-10 w-full cursor-pointer px-8",
318
+ onClick: hasExpress && quickCheckout ? onQuickCheckout : onCheckout,
319
+ disabled: checkoutDisabled || totalsState === "pending",
320
+ children: hasExpress && quickCheckout ? quickCheckoutLabel : checkoutLabel
321
+ }
322
+ ) : null,
323
+ isPage && onContinueShopping ? /* @__PURE__ */ jsx(
324
+ Button,
325
+ {
326
+ variant: "outline",
327
+ size: "lg",
328
+ className: "h-10 w-full cursor-pointer px-8",
329
+ onClick: onContinueShopping,
330
+ children: continueShoppingLabel
331
+ }
332
+ ) : null,
333
+ estimatedDeliveryLabel ? /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-center justify-center gap-2 text-xs", children: [
334
+ /* @__PURE__ */ jsx(Clock, { className: "size-3" }),
335
+ /* @__PURE__ */ jsx("span", { children: estimatedDeliveryLabel })
336
+ ] }) : null
337
+ ] }),
338
+ /* @__PURE__ */ jsx("div", { className: "bg-muted/50 rounded-lg p-3 text-center", children: /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-center justify-center gap-2 text-xs", children: [
339
+ /* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-success", "aria-hidden": "true" }),
340
+ /* @__PURE__ */ jsx("span", { children: secureCheckoutLabel })
341
+ ] }) })
342
+ ] }),
343
+ !expanded && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
344
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
345
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-sm", children: [
346
+ itemCount,
347
+ " ",
348
+ itemsLabel
349
+ ] }),
350
+ isAvailableMoney(totals?.total) ? /* @__PURE__ */ jsx("span", { className: "font-semibold tabular-nums", children: money(totals.total) }) : null
351
+ ] }),
352
+ /* @__PURE__ */ jsx(Button, { size: "sm", className: "h-8 w-full cursor-pointer px-3 text-xs", onClick: onCheckout, children: checkoutNowLabel })
353
+ ] }),
354
+ expanded && recentlyViewed && recentlyViewed.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
355
+ /* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: recentlyViewedLabel }),
356
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-2", children: recentlyViewed.map((item) => {
357
+ const suggestionPrice = money(item.unitPrice);
358
+ return /* @__PURE__ */ jsxs(
359
+ "button",
360
+ {
361
+ type: "button",
362
+ className: cn(
363
+ "group text-start",
364
+ onRecentlyViewedClick && "cursor-pointer"
365
+ ),
366
+ onClick: onRecentlyViewedClick ? () => onRecentlyViewedClick(item.id) : void 0,
367
+ children: [
368
+ /* @__PURE__ */ jsx("div", { className: "bg-muted mb-1 aspect-square overflow-hidden", children: item.image ? /* @__PURE__ */ jsx(
369
+ "img",
370
+ {
371
+ src: item.image || void 0,
372
+ alt: item.name,
373
+ className: "size-full rounded-md object-cover"
374
+ }
375
+ ) : null }),
376
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground truncate text-xs", children: item.name }),
377
+ suggestionPrice !== null ? /* @__PURE__ */ jsx("p", { className: "text-xs font-medium tabular-nums", children: suggestionPrice }) : null
378
+ ]
379
+ },
380
+ item.id
381
+ );
382
+ }) })
383
+ ] })
384
+ ] }) })
385
+ ] })
386
+ ] }) });
387
+ }
388
+ var shopping_cart_default = ShoppingCart;
389
+ export {
390
+ ShoppingCart,
391
+ shopping_cart_default as default
392
+ };
393
+ //# sourceMappingURL=shopping-cart.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/shopping-carts/shopping-cart.tsx"],"sourcesContent":["'use client'\n\nimport { useId, useState } from 'react'\nimport { ShoppingCart as ShoppingCartIcon, Zap, Clock, CreditCard, Wallet, Minus, Plus, X } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { Money } from '@thorprovider/types'\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../ui/card'\nimport { Button } from '../../../ui/button'\nimport { Input } from '../../../ui/input'\nimport { Separator } from '../../../ui/separator'\nimport { Progress } from '../../../ui/progress'\nimport { cn } from '../../../lib/utils'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type { CartTotals, ShoppingCartItem, ShoppingCartSuggestion } from '../../../lib/contracts'\n\n/** Host-supplied promotion definition. Icons are React-side only. */\nexport interface ShoppingCartPromotion {\n threshold: number\n reward: string\n icon: LucideIcon\n}\n\nexport type ShoppingCartTotalsState = 'idle' | 'pending' | 'error'\n\nexport type ShoppingCartPresentation = 'compact' | 'page'\n\nexport interface ShoppingCartProps {\n /** Canonical cart lines keyed by backend cart line-item id. */\n items: ShoppingCartItem[]\n promotions?: ShoppingCartPromotion[]\n recentlyViewed?: ShoppingCartSuggestion[]\n /**\n * Layout presentation. `compact` (default) is the collapsible quick-cart\n * card; `page` is a wide, always-expanded review layout with a primary\n * heading, no collapse control, and normal page scrolling. Both use the same\n * line controls and authoritative monetary rendering.\n */\n presentation?: ShoppingCartPresentation\n /**\n * Backend-authoritative totals. The cart renders these verbatim; it never\n * computes subtotal/tax/shipping/total locally.\n */\n totals?: CartTotals\n /** Controlled state of the totals fetch/mutation. */\n totalsState?: ShoppingCartTotalsState\n totalsErrorLabel?: string\n /** Shown when a required total amount is absent or malformed (never as zero). */\n totalsUnavailableLabel?: string\n /** Shown for a line whose supplied line total is absent or malformed. */\n amountUnavailableLabel?: string\n retryLabel?: string\n onRetryTotals?: () => void\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n // labels (Spanish defaults):\n titleLabel?: string // 'Carrito de compras'\n subtotalLabel?: string // 'Subtotal'\n discountLabel?: string\n taxLabel?: string // 'Impuestos'\n shippingLabel?: string // 'Envío'\n shippingFreeLabel?: string // 'Gratis'\n totalLabel?: string // 'Total'\n totalsPendingLabel?: string\n awayFromLabel?: string // 'Te faltan ${amount} para'\n activatedLabel?: string // '¡{reward} activada!'\n itemsLabel?: string // 'artículos'\n expressCheckoutLabel?: string // 'Compra rápida'\n expressLabel?: string // 'Rápido'\n standardLabel?: string // 'Estándar'\n estimatedDeliveryLabel?: string\n secureCheckoutLabel?: string // 'Pago seguro • SSL cifrado'\n recentlyViewedLabel?: string // 'Vistos recientemente'\n promoPromptLabel?: string // '¿Tienes un código de descuento?'\n promoPlaceholderLabel?: string // 'Introduce tu código'\n promoApplyLabel?: string // 'Aplicar'\n collapseLabel?: string // 'Contraer carrito'\n expandLabel?: string // 'Expandir carrito'\n checkoutLabel?: string // 'Ver carrito y finalizar'\n quickCheckoutLabel?: string // 'Compra rápida'\n checkoutNowLabel?: string // 'Finalizar ahora'\n emptyLabel?: string\n removeLabel?: string\n decreaseLabel?: string\n increaseLabel?: string\n continueShoppingLabel?: string // 'Seguir comprando'\n // action availability:\n /** Suppress the checkout action (e.g. the checkout feature is not installed). */\n checkoutUnavailable?: boolean\n /** Disable checkout while the cart is not ready (pending/error/invalid totals). */\n checkoutDisabled?: boolean\n // callbacks:\n /**\n * ABSOLUTE quantity for a backend cart line-item id (distinct from the\n * Navbar's DELTA). The boundary mutates the cart by line-item id.\n */\n onQuantityChange?: (id: string, quantity: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n onCheckout?: () => void\n onQuickCheckout?: () => void\n onPayWithApple?: () => void\n onPayWithGoogle?: () => void\n /**\n * Report an entered promotion code to the host. The block never validates\n * or resolves codes; the authoritative result arrives through `totals`\n * (discount) and `promotions`. When absent, the promo affordance is not\n * rendered.\n */\n onApplyPromo?: (code: string) => void\n onRecentlyViewedClick?: (id: string) => void\n /** Page presentation only: navigate back to browsing. */\n onContinueShopping?: () => void\n}\n\nconst fallbackFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' })\n\nconst interpolate = (template: string, values: Record<string, string>) =>\n template.replace(/\\$\\{(\\w+)\\}|\\{(\\w+)\\}/g, (match, dollarKey, braceKey) => {\n const key = dollarKey ?? braceKey\n return values[key] ?? match\n })\n\nexport function ShoppingCart({\n items,\n promotions,\n recentlyViewed,\n presentation = 'compact',\n totals,\n totalsState = 'idle',\n totalsErrorLabel = 'No se pudieron actualizar los totales.',\n totalsUnavailableLabel = 'Totales no disponibles.',\n amountUnavailableLabel = '—',\n retryLabel = 'Reintentar',\n onRetryTotals,\n formatMoney: formatMoneyProp,\n titleLabel = 'Carrito de compras',\n subtotalLabel = 'Subtotal',\n discountLabel = 'Descuento',\n taxLabel = 'Impuestos',\n shippingLabel = 'Envío',\n shippingFreeLabel = 'Gratis',\n totalLabel = 'Total',\n totalsPendingLabel = 'Actualizando totales…',\n awayFromLabel = 'Te faltan ${amount} para',\n activatedLabel = '¡{reward} activada!',\n itemsLabel = 'artículos',\n expressCheckoutLabel = 'Compra rápida',\n expressLabel = 'Rápido',\n standardLabel = 'Estándar',\n estimatedDeliveryLabel,\n secureCheckoutLabel = 'Pago seguro • SSL cifrado',\n recentlyViewedLabel = 'Vistos recientemente',\n promoPromptLabel = '¿Tienes un código de descuento?',\n promoPlaceholderLabel = 'Introduce tu código',\n promoApplyLabel = 'Aplicar',\n collapseLabel = 'Contraer carrito',\n expandLabel = 'Expandir carrito',\n checkoutLabel = 'Ver carrito y finalizar',\n quickCheckoutLabel = 'Compra rápida',\n checkoutNowLabel = 'Finalizar ahora',\n emptyLabel = 'Tu carrito está vacío',\n removeLabel = 'Quitar',\n decreaseLabel = 'Disminuir cantidad',\n increaseLabel = 'Aumentar cantidad',\n continueShoppingLabel = 'Seguir comprando',\n checkoutUnavailable,\n checkoutDisabled,\n onQuantityChange,\n onRemove,\n onCheckout,\n onQuickCheckout,\n onPayWithApple,\n onPayWithGoogle,\n onApplyPromo,\n onRecentlyViewedClick,\n onContinueShopping,\n}: ShoppingCartProps) {\n const [isExpanded, setIsExpanded] = useState(true)\n const [quickCheckout, setQuickCheckout] = useState(false)\n const [promoCode, setPromoCode] = useState('')\n const promoInputId = useId()\n\n const isPage = presentation === 'page'\n // The page presentation is always expanded; only the compact card collapses.\n const expanded = isPage ? true : isExpanded\n // Display currency derives from the authoritative Money subtotal; the USD\n // formatter is only the fallback when no authoritative currency exists.\n const format = formatMoneyProp\n ? (value: number) => {\n const money: Money = { amount: String(value), currencyCode: totals?.subtotal?.currencyCode ?? 'USD' }\n return formatMoneyProp(money)\n }\n : totals?.subtotal?.currencyCode && totals.subtotal.currencyCode !== 'USD'\n ? (value: number) =>\n new Intl.NumberFormat('en-US', { style: 'currency', currency: totals.subtotal.currencyCode }).format(value)\n : (value: number) => fallbackFormatter.format(value)\n const money = (value: Money | null | undefined) => formatMoney(value, formatMoneyProp)\n const subtotalAmount = isAvailableMoney(totals?.subtotal) ? Number(totals.subtotal.amount) : 0\n const itemCount = items.reduce((sum, item) => sum + item.quantity, 0)\n const hasExpress = Boolean(onQuickCheckout || onPayWithApple || onPayWithGoogle)\n // While totals/mutations are pending, keep confirmed data visible but block\n // conflicting edits and checkout until the backend responds.\n const mutationsDisabled = totalsState === 'pending'\n\n const sortedPromotions = [...(promotions ?? [])].sort((a, b) => a.threshold - b.threshold)\n const currentPromo = (() => {\n if (!isAvailableMoney(totals?.subtotal)) return null\n for (let i = sortedPromotions.length - 1; i >= 0; i--) {\n if (subtotalAmount >= sortedPromotions[i].threshold) {\n return { ...sortedPromotions[i], achieved: true }\n }\n }\n const next = sortedPromotions.find(p => subtotalAmount < p.threshold)\n return next ? { ...next, achieved: false } : null\n })()\n const progressPercentage =\n currentPromo && !currentPromo.achieved\n ? Math.min(100, (subtotalAmount / currentPromo.threshold) * 100)\n : 100\n\n const lineAmount = (item: ShoppingCartItem): string | null => {\n // The backend-authoritative line total renders verbatim. A malformed amount\n // is unavailable (never a fabricated zero); `unitPrice` is never multiplied\n // locally — the cart contract forbids local `unit × qty` arithmetic.\n if (item.lineTotal === undefined) return null\n return money(item.lineTotal)\n }\n\n const renderTotals = () => {\n if (totalsState === 'pending') {\n return (\n <div className='flex flex-col gap-2' aria-live='polite'>\n <p className='text-muted-foreground text-sm'>{totalsPendingLabel}</p>\n </div>\n )\n }\n if (totalsState === 'error') {\n return (\n <div className='flex flex-col gap-2' role='alert'>\n <p className='text-destructive text-sm'>{totalsErrorLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n if (!totals) return null\n\n const subtotalText = money(totals.subtotal)\n const totalText = money(totals.total)\n // Required totals: if either is absent/malformed, show an explicit\n // unavailable state (with recovery) rather than a fabricated zero.\n if (subtotalText === null || totalText === null) {\n return (\n <div className='flex flex-col gap-2' role='status'>\n <p className='text-muted-foreground text-sm'>{totalsUnavailableLabel}</p>\n {onRetryTotals ? (\n <Button variant='outline' size='sm' className='w-fit' onClick={onRetryTotals}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n )\n }\n\n const shippingText = money(totals.shipping)\n return (\n <>\n <div className='flex justify-between text-sm'>\n <span>{subtotalLabel}</span>\n <span className='tabular-nums'>{subtotalText}</span>\n </div>\n {isAvailableMoney(totals.discount) ? (\n <div className='flex justify-between text-sm'>\n <span>{discountLabel}</span>\n <span className='tabular-nums'>{money(totals.discount)}</span>\n </div>\n ) : null}\n {isAvailableMoney(totals.tax) ? (\n <div className='flex justify-between text-sm'>\n <span>{taxLabel}</span>\n <span className='tabular-nums'>{money(totals.tax)}</span>\n </div>\n ) : null}\n {shippingText !== null ? (\n <div className='flex justify-between text-sm text-success'>\n <span>{shippingLabel}</span>\n <span className='tabular-nums'>\n {Number(totals.shipping?.amount) === 0 ? shippingFreeLabel : shippingText}\n </span>\n </div>\n ) : null}\n <Separator />\n <div className='flex justify-between font-semibold'>\n <span>{totalLabel}</span>\n <span className='tabular-nums'>{totalText}</span>\n </div>\n </>\n )\n }\n\n const renderPromoEntry = () =>\n onApplyPromo ? (\n <form\n className='flex flex-col gap-2'\n onSubmit={event => {\n event.preventDefault()\n const code = promoCode.trim()\n if (!code) return\n onApplyPromo(code)\n setPromoCode('')\n }}\n >\n <label className='text-sm' htmlFor={promoInputId}>\n {promoPromptLabel}\n </label>\n <div className='flex gap-2'>\n <Input\n id={promoInputId}\n value={promoCode}\n onChange={event => setPromoCode(event.target.value)}\n placeholder={promoPlaceholderLabel}\n className='h-9 flex-1'\n />\n <Button type='submit' variant='outline' size='sm' className='h-9' disabled={mutationsDisabled}>\n {promoApplyLabel}\n </Button>\n </div>\n </form>\n ) : null\n\n return (\n <section className='py-8'>\n <div className={cn('mx-auto px-4', isPage ? 'max-w-3xl' : 'max-w-md')}>\n {isPage ? (\n <h1 className='mb-6 text-2xl font-semibold tracking-tight'>{titleLabel}</h1>\n ) : null}\n <Card className={isPage ? 'shadow-sm' : 'shadow-lg'}>\n {/* Header */}\n <CardHeader className='flex flex-row items-center justify-between space-y-0 pb-3'>\n <CardTitle className='flex items-center gap-2'>\n <ShoppingCartIcon className='size-5' />\n {titleLabel} ({itemCount})\n </CardTitle>\n {!isPage ? (\n <Button\n variant='ghost'\n className='h-8 cursor-pointer px-3 text-xs'\n size='sm'\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? collapseLabel : expandLabel}\n >\n {isExpanded ? <X /> : <Plus />}\n </Button>\n ) : null}\n </CardHeader>\n\n <CardContent className='flex flex-col gap-6'>\n {items.length === 0 ? (\n <div className='flex flex-col items-center justify-center gap-4 py-6 text-center'>\n <ShoppingCartIcon className='text-muted-foreground/50 size-10' />\n <p className='text-muted-foreground text-sm'>{emptyLabel}</p>\n {isPage && onContinueShopping ? (\n <Button variant='outline' onClick={onContinueShopping}>\n {continueShoppingLabel}\n </Button>\n ) : null}\n </div>\n ) : (\n <>\n {/* Promotion Progress */}\n {currentPromo && !currentPromo.achieved ? (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between text-sm'>\n <span className='text-muted-foreground'>\n {interpolate(awayFromLabel, {\n amount: format(currentPromo.threshold - subtotalAmount),\n })}\n </span>\n <div className='flex items-center gap-1'>\n <currentPromo.icon className='text-primary size-4' />\n <span className='text-primary font-medium'>{currentPromo.reward}</span>\n </div>\n </div>\n <Progress value={progressPercentage} className='h-2' />\n </div>\n ) : null}\n\n {/* Active Promotion */}\n {currentPromo?.achieved ? (\n <div className='rounded-lg bg-success/10 p-3'>\n <div className='flex items-center gap-2 text-success'>\n <currentPromo.icon className='size-4' />\n <span className='text-sm font-medium'>\n {interpolate(activatedLabel, { reward: currentPromo.reward })}\n </span>\n </div>\n </div>\n ) : null}\n\n {expanded && (\n <>\n {/* Cart Items */}\n <div\n className={cn(\n 'flex flex-col gap-4',\n !isPage &&\n 'scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent max-h-64 overflow-y-auto',\n )}\n >\n {items.map(item => (\n <div key={item.id} className='flex items-start gap-3'>\n {item.image ? (\n <img src={item.image || undefined} alt='' className='h-12 w-12 rounded-md object-cover' />\n ) : (\n <div aria-hidden='true' className='bg-muted h-12 w-12 shrink-0 rounded-md' />\n )}\n\n <div className='flex flex-1 flex-col gap-1'>\n <h3 className='line-clamp-2 text-sm font-medium'>{item.name}</h3>\n {item.variant ? <p className='text-muted-foreground text-xs'>{item.variant}</p> : null}\n\n <div className='flex items-center justify-between'>\n <span className='text-sm font-semibold'>{lineAmount(item) ?? amountUnavailableLabel}</span>\n\n <div className='flex items-center'>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity - 1)\n : undefined\n }\n disabled={item.quantity <= 1 || mutationsDisabled}\n aria-label={`${decreaseLabel}, ${item.name}`}\n >\n <Minus />\n </Button>\n <span className='mx-2 w-6 text-center text-sm'>{item.quantity}</span>\n <Button\n variant='ghost'\n size='sm'\n className='size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={\n onQuantityChange\n ? () => onQuantityChange(item.id, item.quantity + 1)\n : undefined\n }\n aria-label={`${increaseLabel}, ${item.name}`}\n disabled={mutationsDisabled}\n >\n <Plus />\n </Button>\n <Button\n variant='ghost'\n size='sm'\n className='text-destructive hover:text-destructive ms-2 size-6 h-8 cursor-pointer p-0 px-3 text-xs'\n onClick={onRemove ? () => onRemove(item.id) : undefined}\n disabled={mutationsDisabled}\n aria-label={`${removeLabel} ${item.name}`}\n >\n <X />\n </Button>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <Separator />\n\n {/* Order Summary — backend-authoritative only */}\n <div className='flex flex-col gap-2'>{renderTotals()}</div>\n\n {/* Promo code entry — reports to the host, never resolves locally */}\n {renderPromoEntry()}\n\n {/* Quick Actions */}\n <div className='flex flex-col gap-3'>\n {/* Express Checkout Toggle — only when the host supplies a handler */}\n {hasExpress ? (\n <>\n <div className='flex items-center justify-between text-sm'>\n <span>{expressCheckoutLabel}</span>\n <Button\n variant='outline'\n size='sm'\n onClick={() => setQuickCheckout(!quickCheckout)}\n className='h-8 cursor-pointer'\n aria-pressed={quickCheckout}\n >\n <Zap />\n {quickCheckout ? standardLabel : expressLabel}\n </Button>\n </div>\n\n {quickCheckout ? (\n <div className='grid grid-cols-2 gap-2'>\n {onPayWithApple ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithApple}>\n <Wallet />\n Apple Pay\n </Button>\n ) : null}\n {onPayWithGoogle ? (\n <Button size='sm' variant='outline' className='h-8 cursor-pointer px-3 text-xs' onClick={onPayWithGoogle}>\n <CreditCard />\n Google Pay\n </Button>\n ) : null}\n </div>\n ) : null}\n </>\n ) : null}\n\n {/* Checkout Button */}\n {!checkoutUnavailable ? (\n <Button\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={hasExpress && quickCheckout ? onQuickCheckout : onCheckout}\n disabled={checkoutDisabled || totalsState === 'pending'}\n >\n {hasExpress && quickCheckout ? quickCheckoutLabel : checkoutLabel}\n </Button>\n ) : null}\n\n {/* Continue shopping — page presentation only */}\n {isPage && onContinueShopping ? (\n <Button\n variant='outline'\n size='lg'\n className='h-10 w-full cursor-pointer px-8'\n onClick={onContinueShopping}\n >\n {continueShoppingLabel}\n </Button>\n ) : null}\n\n {/* Estimated Delivery — only when supplied, never fabricated */}\n {estimatedDeliveryLabel ? (\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <Clock className='size-3' />\n <span>{estimatedDeliveryLabel}</span>\n </div>\n ) : null}\n </div>\n\n {/* Security Badge */}\n <div className='bg-muted/50 rounded-lg p-3 text-center'>\n <div className='text-muted-foreground flex items-center justify-center gap-2 text-xs'>\n <div className='size-2 rounded-full bg-success' aria-hidden='true' />\n <span>{secureCheckoutLabel}</span>\n </div>\n </div>\n </>\n )}\n\n {/* Collapsed Summary */}\n {!expanded && (\n <div className='flex flex-col gap-3'>\n <div className='flex items-center justify-between'>\n <span className='text-muted-foreground text-sm'>\n {itemCount} {itemsLabel}\n </span>\n {isAvailableMoney(totals?.total) ? (\n <span className='font-semibold tabular-nums'>{money(totals.total)}</span>\n ) : null}\n </div>\n\n <Button size='sm' className='h-8 w-full cursor-pointer px-3 text-xs' onClick={onCheckout}>\n {checkoutNowLabel}\n </Button>\n </div>\n )}\n\n {/* Recently Viewed — host-supplied suggestions only */}\n {expanded && recentlyViewed && recentlyViewed.length > 0 && (\n <div className='flex flex-col gap-3'>\n <h4 className='text-sm font-medium'>{recentlyViewedLabel}</h4>\n <div className='grid grid-cols-3 gap-2'>\n {recentlyViewed.map(item => {\n const suggestionPrice = money(item.unitPrice)\n return (\n <button\n key={item.id}\n type='button'\n className={cn(\n 'group text-start',\n onRecentlyViewedClick && 'cursor-pointer',\n )}\n onClick={onRecentlyViewedClick ? () => onRecentlyViewedClick(item.id) : undefined}\n >\n <div className='bg-muted mb-1 aspect-square overflow-hidden'>\n {item.image ? (\n <img\n src={item.image || undefined}\n alt={item.name}\n className='size-full rounded-md object-cover'\n />\n ) : null}\n </div>\n <p className='text-muted-foreground truncate text-xs'>{item.name}</p>\n {suggestionPrice !== null ? (\n <p className='text-xs font-medium tabular-nums'>{suggestionPrice}</p>\n ) : null}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n </Card>\n </div>\n </section>\n )\n}\n\nexport default ShoppingCart\n"],"mappings":"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","names":["money"]}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface StoreContainer1Props {
3
+ size?: 'default' | 'narrow' | 'wide' | 'full';
4
+ className?: string;
5
+ children?: ReactNode;
6
+ }
7
+ /**
8
+ * Trivial presentational layout container used as the root of spec-driven
9
+ * storefront pages. Constrains content width; children render as-is.
10
+ */
11
+ export declare function StoreContainer1({ size, className, children, }: StoreContainer1Props): import("react").JSX.Element;
12
+ export default StoreContainer1;
13
+ //# sourceMappingURL=store-container-1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-container-1.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/store-containers/store-container-1.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,oBAAoB,+BAEtB;AAED,eAAe,eAAe,CAAA"}