@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,271 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var product_quick_view_dialog_exports = {};
21
+ __export(product_quick_view_dialog_exports, {
22
+ ProductQuickViewDialog: () => ProductQuickViewDialog,
23
+ default: () => product_quick_view_dialog_default
24
+ });
25
+ module.exports = __toCommonJS(product_quick_view_dialog_exports);
26
+ var import_jsx_runtime = require("react/jsx-runtime");
27
+ var import_react = require("react");
28
+ var import_react2 = require("motion/react");
29
+ var import_lucide_react = require("lucide-react");
30
+ var import_badge = require("../../../ui/badge.js");
31
+ var import_button = require("../../../ui/button.js");
32
+ var import_button_group = require("../../../ui/button-group.js");
33
+ var import_dialog = require("../../../ui/dialog.js");
34
+ var import_separator = require("../../../ui/separator.js");
35
+ var import_toggle_group = require("../../../ui/toggle-group.js");
36
+ const money = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0 });
37
+ const confirmationMs = 2400;
38
+ function defaultSelection(product) {
39
+ return Object.fromEntries(
40
+ product.variants.map((variant) => {
41
+ const stated = variant.options.find(
42
+ (option) => option.value === variant.defaultValue && option.available
43
+ );
44
+ const fallback = variant.options.find((option) => option.available) ?? variant.options[0];
45
+ return [variant.key, (stated ?? fallback).value];
46
+ })
47
+ );
48
+ }
49
+ function ProductQuickViewDialog({
50
+ products,
51
+ activeIndex,
52
+ onActiveIndexChange,
53
+ onClose,
54
+ onAddToCart
55
+ }) {
56
+ const reduceMotion = (0, import_react2.useReducedMotion)();
57
+ const product = activeIndex === null ? null : products[activeIndex];
58
+ const [selection, setSelection] = (0, import_react.useState)({});
59
+ const [quantity, setQuantity] = (0, import_react.useState)(1);
60
+ const [addedCount, setAddedCount] = (0, import_react.useState)(0);
61
+ (0, import_react.useEffect)(() => {
62
+ if (!product) {
63
+ return;
64
+ }
65
+ setSelection(defaultSelection(product));
66
+ setQuantity(1);
67
+ setAddedCount(0);
68
+ }, [product?.id]);
69
+ (0, import_react.useEffect)(() => {
70
+ if (addedCount === 0) {
71
+ return;
72
+ }
73
+ const timer = setTimeout(() => setAddedCount(0), confirmationMs);
74
+ return () => clearTimeout(timer);
75
+ }, [addedCount]);
76
+ const selectionSummary = (0, import_react.useMemo)(() => {
77
+ if (!product) {
78
+ return "";
79
+ }
80
+ return product.variants.map((variant) => variant.options.find((option) => option.value === selection[variant.key])?.label).filter(Boolean).join(" \xB7 ");
81
+ }, [product, selection]);
82
+ if (!product || activeIndex === null) {
83
+ return null;
84
+ }
85
+ const discount = product.compareAt ? Math.round((1 - product.price / product.compareAt) * 100) : null;
86
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialog.Dialog, { open: true, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dialog.DialogContent, { className: "max-h-[92dvh] w-full overflow-y-auto p-0 sm:max-w-4xl md:h-[38rem] md:max-h-[92dvh] md:overflow-hidden", children: [
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dialog.DialogHeader, { className: "sr-only", children: [
88
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialog.DialogTitle, { children: product.name }),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialog.DialogDescription, { children: product.description })
90
+ ] }),
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid gap-0 md:h-full md:min-h-0 md:grid-cols-[minmax(0,0.95fr)_minmax(0,1fr)]", children: [
92
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "bg-muted/40 flex flex-col gap-3 p-4 sm:p-5 md:min-h-0 md:justify-center md:overflow-y-auto", children: [
93
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "bg-muted relative aspect-square w-full overflow-hidden rounded-lg", children: [
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.AnimatePresence, { initial: false, mode: "popLayout", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
95
+ import_react2.motion.img,
96
+ {
97
+ src: product.image || void 0,
98
+ alt: product.imageAlt,
99
+ className: "absolute inset-0 size-full object-cover",
100
+ initial: reduceMotion ? false : { opacity: 0 },
101
+ animate: { opacity: 1 },
102
+ exit: reduceMotion ? void 0 : { opacity: 0 },
103
+ transition: { duration: 0.24, ease: "easeOut" },
104
+ decoding: "async"
105
+ },
106
+ product.id
107
+ ) }),
108
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_badge.Badge, { variant: "secondary", className: "absolute top-3 left-3 rounded-full", children: product.category })
109
+ ] }),
110
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
111
+ import_toggle_group.ToggleGroup,
112
+ {
113
+ type: "multiple",
114
+ spacing: 2,
115
+ value: [String(activeIndex)],
116
+ onValueChange: (value) => value[0] && onActiveIndexChange(Number(value[0])),
117
+ "aria-label": "Elegir producto",
118
+ className: "grid w-full grid-cols-4",
119
+ children: products.map((entry, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
120
+ import_toggle_group.ToggleGroupItem,
121
+ {
122
+ value: String(index),
123
+ "aria-label": entry.name,
124
+ className: "data-[state=on]:ring-primary size-auto min-w-0 overflow-hidden rounded-md p-0 ring-2 ring-transparent transition-shadow data-[state=on]:bg-transparent",
125
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
126
+ "img",
127
+ {
128
+ src: entry.image || void 0,
129
+ alt: "",
130
+ className: "bg-muted aspect-square w-full object-cover",
131
+ loading: "lazy",
132
+ decoding: "async"
133
+ }
134
+ )
135
+ },
136
+ entry.id
137
+ ))
138
+ }
139
+ ),
140
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-center font-mono text-xs tabular-nums", children: `${activeIndex + 1} / ${products.length}` })
141
+ ] }),
142
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col p-4 pt-5 sm:p-6 md:min-h-0 md:overflow-y-auto", children: [
143
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-xs tracking-[0.16em] uppercase", children: product.tagline }),
144
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "mt-2 text-2xl font-semibold tracking-tight text-balance", children: product.name }),
145
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-3 flex flex-wrap items-center gap-x-3 gap-y-2", children: [
146
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xl font-semibold tabular-nums", children: money.format(product.price) }),
147
+ product.compareAt ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground text-sm line-through tabular-nums", children: money.format(product.compareAt) }) : null,
148
+ discount ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_badge.Badge, { variant: "secondary", className: "rounded-full font-normal", children: `${discount}% de descuento` }) : null,
149
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-muted-foreground flex items-center gap-1.5 text-sm", children: [
150
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Star, { className: "size-3.5 fill-foreground text-foreground", "aria-hidden": "true" }),
151
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-foreground font-medium tabular-nums", children: product.rating }),
152
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "tabular-nums", children: [
153
+ "(",
154
+ product.reviewCount,
155
+ ")"
156
+ ] })
157
+ ] })
158
+ ] }),
159
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground mt-4 text-sm leading-6 text-pretty", children: product.description }),
160
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-5 flex flex-col gap-5", children: product.variants.map((variant) => (
161
+ /*
162
+ A fieldset per variant, and a ToggleGroup inside it rather than a row of
163
+ Buttons with a hand-rolled `aria-pressed`. A loop of buttons has to fake single
164
+ selection and roving focus, and gets the focus order wrong the moment one of
165
+ them is disabled — which, with a sold-out finish, is most of them.
166
+ */
167
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("fieldset", { children: [
168
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("legend", { className: "flex w-full items-baseline gap-2 text-sm font-medium", children: [
169
+ variant.label,
170
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground font-normal", children: variant.options.find((option) => option.value === selection[variant.key])?.label })
171
+ ] }),
172
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
173
+ import_toggle_group.ToggleGroup,
174
+ {
175
+ type: "multiple",
176
+ spacing: 2,
177
+ variant: "outline",
178
+ value: [selection[variant.key] ?? ""],
179
+ onValueChange: (value) => value[0] && setSelection((current) => ({ ...current, [variant.key]: value[0] })),
180
+ "aria-label": variant.label,
181
+ className: "mt-2 flex-wrap",
182
+ children: variant.options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
183
+ import_toggle_group.ToggleGroupItem,
184
+ {
185
+ value: option.value,
186
+ disabled: !option.available,
187
+ "aria-label": option.available ? option.label : `${option.label}, agotado`,
188
+ className: "data-[state=on]:border-primary data-[state=on]:ring-primary/30 gap-2 data-[state=on]:ring-2",
189
+ children: [
190
+ option.swatch ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
191
+ "span",
192
+ {
193
+ "aria-hidden": "true",
194
+ className: "ring-border size-3 rounded-full ring-1",
195
+ style: { backgroundColor: option.swatch }
196
+ }
197
+ ) : null,
198
+ option.label
199
+ ]
200
+ },
201
+ option.value
202
+ ))
203
+ }
204
+ )
205
+ ] }, variant.key)
206
+ )) }),
207
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-6 flex flex-wrap items-center gap-3", children: [
208
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_button_group.ButtonGroup, { "aria-label": "Cantidad", children: [
209
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
210
+ import_button.Button,
211
+ {
212
+ variant: "outline",
213
+ size: "icon",
214
+ "aria-label": "Reducir cantidad",
215
+ disabled: quantity <= 1,
216
+ onClick: () => setQuantity((current) => Math.max(1, current - 1)),
217
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Minus, {})
218
+ }
219
+ ),
220
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_button_group.ButtonGroupText, { "aria-live": "polite", className: "bg-background min-w-10 justify-center tabular-nums", children: quantity }),
221
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
222
+ import_button.Button,
223
+ {
224
+ variant: "outline",
225
+ size: "icon",
226
+ "aria-label": "Aumentar cantidad",
227
+ onClick: () => setQuantity((current) => current + 1),
228
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Plus, {})
229
+ }
230
+ )
231
+ ] }),
232
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
233
+ import_button.Button,
234
+ {
235
+ className: "flex-1",
236
+ onClick: () => {
237
+ setAddedCount(quantity);
238
+ onAddToCart?.(product, quantity, selection);
239
+ },
240
+ children: addedCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
241
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { "aria-hidden": "true" }),
242
+ "A\xF1adido al carrito"
243
+ ] }) : `A\xF1adir al carrito \xB7 ${money.format(product.price * quantity)}`
244
+ }
245
+ )
246
+ ] }),
247
+ product.unitsLeft ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground mt-3 text-xs", children: `Solo quedan ${product.unitsLeft} en ${selectionSummary || "esta opci\xF3n"}.` }) : null,
248
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { role: "status", "aria-live": "polite", className: "sr-only", children: addedCount > 0 ? `${addedCount} \xD7 ${product.name}, ${selectionSummary}, a\xF1adido a tu carrito` : "" }),
249
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_separator.Separator, { className: "mt-6" }),
250
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { className: "text-muted-foreground mt-4 grid gap-1.5 text-sm sm:grid-cols-2", children: product.details.map((detail) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", { className: "flex items-start gap-2", children: [
251
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { className: "text-primary mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }),
252
+ detail
253
+ ] }, detail)) }),
254
+ product.href ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
255
+ "a",
256
+ {
257
+ href: product.href,
258
+ className: "text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 mt-5 w-fit rounded-sm text-sm underline underline-offset-4 outline-none focus-visible:ring-[3px]",
259
+ children: "Ver la p\xE1gina completa del producto"
260
+ }
261
+ ) : null
262
+ ] })
263
+ ] })
264
+ ] }) });
265
+ }
266
+ var product_quick_view_dialog_default = ProductQuickViewDialog;
267
+ // Annotate the CommonJS export names for ESM import in node:
268
+ 0 && (module.exports = {
269
+ ProductQuickViewDialog
270
+ });
271
+ //# sourceMappingURL=product-quick-view-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Check, Minus, Plus, Star } from 'lucide-react'\n\nimport { Badge } from '../../../ui/badge'\nimport { Button } from '../../../ui/button'\nimport { ButtonGroup, ButtonGroupText } from '../../../ui/button-group'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../../../ui/dialog'\nimport { Separator } from '../../../ui/separator'\nimport { ToggleGroup, ToggleGroupItem } from '../../../ui/toggle-group'\n\nimport type { QuickViewProduct } from './product-quick-view'\n\nconst money = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', maximumFractionDigits: 0 })\n\n/** How long the added-to-cart confirmation stays up before the button returns to its label. */\nconst confirmationMs = 2400\n\n/**\n * What a product opens on: its stated default where it has one, and otherwise the first option\n * that is actually in stock — never a sold-out one, which would put the panel in a state whose\n * add-to-cart button cannot honestly be pressed.\n */\nfunction defaultSelection(product: QuickViewProduct): Record<string, string> {\n return Object.fromEntries(\n product.variants.map(variant => {\n const stated = variant.options.find(\n option => option.value === variant.defaultValue && option.available\n )\n const fallback = variant.options.find(option => option.available) ?? variant.options[0]\n\n return [variant.key, (stated ?? fallback).value]\n })\n )\n}\n\n/**\n * The panel a quick view opens, and the reason the pattern exists.\n *\n * A quick view is not a small product page. It is a promise that the reader will not lose the\n * grid, so this one keeps the whole catalogue reachable from inside: the strip under the picture\n * is the other products, not other angles of this one. Choosing from it re-dresses the panel\n * around a new product, the grid behind marks where the reader has got to, and closing returns\n * them to a grid they never actually left.\n */\nexport function ProductQuickViewDialog({\n products,\n activeIndex,\n onActiveIndexChange,\n onClose,\n onAddToCart,\n}: {\n products: QuickViewProduct[]\n /** Which product is open, or `null` when the dialog is closed. */\n activeIndex: number | null\n onActiveIndexChange: (index: number) => void\n onClose: () => void\n onAddToCart?: (\n product: QuickViewProduct,\n quantity: number,\n selection: Record<string, string>\n ) => void\n}) {\n const reduceMotion = useReducedMotion()\n const product = activeIndex === null ? null : products[activeIndex]\n\n const [selection, setSelection] = useState<Record<string, string>>({})\n const [quantity, setQuantity] = useState(1)\n const [addedCount, setAddedCount] = useState(0)\n\n /*\n One effect keyed on the product's identity rather than three scattered resets. Carrying a\n \"brushed brass\" across from a pendant to a sofa is worse than starting again, and a quantity\n of four floor lamps should not become four sofas because the reader stepped sideways.\n */\n useEffect(() => {\n if (!product) {\n return\n }\n\n setSelection(defaultSelection(product))\n setQuantity(1)\n setAddedCount(0)\n }, [product?.id]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (addedCount === 0) {\n return\n }\n\n const timer = setTimeout(() => setAddedCount(0), confirmationMs)\n\n return () => clearTimeout(timer)\n }, [addedCount])\n\n /*\n The chosen options in words, for the live region and the stock line. Built from the variant\n order rather than from the selection object, so it reads the way the controls are stacked\n instead of in whatever order the keys happen to sit in.\n */\n const selectionSummary = useMemo(() => {\n if (!product) {\n return ''\n }\n\n return product.variants\n .map(variant => variant.options.find(option => option.value === selection[variant.key])?.label)\n .filter(Boolean)\n .join(' · ')\n }, [product, selection])\n\n if (!product || activeIndex === null) {\n return null\n }\n\n const discount = product.compareAt ? Math.round((1 - product.price / product.compareAt) * 100) : null\n\n return (\n <Dialog open onOpenChange={next => !next && onClose()}>\n {/*\n `max-h` plus `overflow-y-auto` is what makes this usable below a laptop. The popup is\n fixed and centred with a translate, so without a bound it grew past both edges of a phone\n and the add-to-cart button ended up off the bottom of the screen with no way to reach it\n — the page behind a fixed element cannot scroll to it either.\n */}\n <DialogContent className='max-h-[92dvh] w-full overflow-y-auto p-0 sm:max-w-4xl md:h-[38rem] md:max-h-[92dvh] md:overflow-hidden'>\n <DialogHeader className='sr-only'>\n <DialogTitle>{product.name}</DialogTitle>\n <DialogDescription>{product.description}</DialogDescription>\n </DialogHeader>\n\n {/*\n A fixed height from `md`, and the detail column scrolls inside it.\n\n The popup is centred with a -50% translate, so its height decides where its top edge\n lands. Every product carries a different length of description and a different number\n of variant rows, so stepping through the strip re-measured the panel and slid the whole\n dialog up and down under the reader's cursor - the thumbnail they wanted next was no\n longer where they were pointing. Holding the height still makes the strip a control\n rather than a moving target. Below `md` the columns stack and the whole popup scrolls,\n where a fixed height would be the wrong answer.\n */}\n <div className='grid gap-0 md:h-full md:min-h-0 md:grid-cols-[minmax(0,0.95fr)_minmax(0,1fr)]'>\n <div className='bg-muted/40 flex flex-col gap-3 p-4 sm:p-5 md:min-h-0 md:justify-center md:overflow-y-auto'>\n {/*\n The picture cross-fades rather than cutting. At this size a hard swap reads as a\n flicker, and the fade is what ties the thumbnail that was pressed to the picture\n that arrives.\n */}\n <div className='bg-muted relative aspect-square w-full overflow-hidden rounded-lg'>\n <AnimatePresence initial={false} mode='popLayout'>\n <motion.img\n key={product.id}\n src={product.image || undefined}\n alt={product.imageAlt}\n className='absolute inset-0 size-full object-cover'\n initial={reduceMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={reduceMotion ? undefined : { opacity: 0 }}\n transition={{ duration: 0.24, ease: 'easeOut' }}\n decoding='async'\n />\n </AnimatePresence>\n\n <Badge variant='secondary' className='absolute top-3 left-3 rounded-full'>\n {product.category}\n </Badge>\n </div>\n\n {/*\n `spacing={2}` rather than a `gap-2` class. A ToggleGroup at the default spacing of\n zero is a segmented control: it strips the item radii, collapses the shared borders\n and adds `px-2` to every item through a `group-data-[spacing=0]` selector that no\n plain `p-0` utility can outrank. That padding around a small thumbnail was the odd\n width and the odd gaps; asking for real spacing turns the whole rule off.\n\n A ToggleGroup rather than a row of buttons for the same reason it is used for the\n variants: single selection, roving focus and arrow-key movement, none of which a\n loop of buttons gets without being told.\n */}\n <ToggleGroup\n type='multiple'\n spacing={2}\n value={[String(activeIndex)]}\n onValueChange={value => value[0] && onActiveIndexChange(Number(value[0]))}\n aria-label='Elegir producto'\n className='grid w-full grid-cols-4'\n >\n {products.map((entry, index) => (\n <ToggleGroupItem\n key={entry.id}\n value={String(index)}\n aria-label={entry.name}\n className='data-[state=on]:ring-primary size-auto min-w-0 overflow-hidden rounded-md p-0 ring-2 ring-transparent transition-shadow data-[state=on]:bg-transparent'\n >\n <img\n src={entry.image || undefined}\n alt=''\n className='bg-muted aspect-square w-full object-cover'\n loading='lazy'\n decoding='async'\n />\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n\n <p className='text-muted-foreground text-center font-mono text-xs tabular-nums'>\n {`${activeIndex + 1} / ${products.length}`}\n </p>\n </div>\n\n <div className='flex flex-col p-4 pt-5 sm:p-6 md:min-h-0 md:overflow-y-auto'>\n <p className='text-muted-foreground text-xs tracking-[0.16em] uppercase'>{product.tagline}</p>\n\n <h2 className='mt-2 text-2xl font-semibold tracking-tight text-balance'>{product.name}</h2>\n\n <div className='mt-3 flex flex-wrap items-center gap-x-3 gap-y-2'>\n <p className='text-xl font-semibold tabular-nums'>{money.format(product.price)}</p>\n {product.compareAt ? (\n <p className='text-muted-foreground text-sm line-through tabular-nums'>\n {money.format(product.compareAt)}\n </p>\n ) : null}\n {discount ? (\n <Badge variant='secondary' className='rounded-full font-normal'>{`${discount}% de descuento`}</Badge>\n ) : null}\n <p className='text-muted-foreground flex items-center gap-1.5 text-sm'>\n {/*\n Rating stars use the foreground token so they inherit theme contrast,\n matching storefront-hero-1 and the canonical review card. The rating number sits\n right beside the star, so the star is never the only carrier.\n */}\n <Star className='size-3.5 fill-foreground text-foreground' aria-hidden='true' />\n <span className='text-foreground font-medium tabular-nums'>{product.rating}</span>\n <span className='tabular-nums'>({product.reviewCount})</span>\n </p>\n </div>\n\n <p className='text-muted-foreground mt-4 text-sm leading-6 text-pretty'>{product.description}</p>\n\n <div className='mt-5 flex flex-col gap-5'>\n {product.variants.map(variant => (\n /*\n A fieldset per variant, and a ToggleGroup inside it rather than a row of\n Buttons with a hand-rolled `aria-pressed`. A loop of buttons has to fake single\n selection and roving focus, and gets the focus order wrong the moment one of\n them is disabled — which, with a sold-out finish, is most of them.\n */\n <fieldset key={variant.key}>\n <legend className='flex w-full items-baseline gap-2 text-sm font-medium'>\n {variant.label}\n <span className='text-muted-foreground font-normal'>\n {variant.options.find(option => option.value === selection[variant.key])?.label}\n </span>\n </legend>\n\n <ToggleGroup\n type='multiple'\n spacing={2}\n variant='outline'\n value={[selection[variant.key] ?? '']}\n onValueChange={value =>\n value[0] && setSelection(current => ({ ...current, [variant.key]: value[0] }))\n }\n aria-label={variant.label}\n className='mt-2 flex-wrap'\n >\n {variant.options.map(option => (\n <ToggleGroupItem\n key={option.value}\n value={option.value}\n disabled={!option.available}\n // Sold out is a word, not just a dimmed control.\n aria-label={option.available ? option.label : `${option.label}, agotado`}\n className='data-[state=on]:border-primary data-[state=on]:ring-primary/30 gap-2 data-[state=on]:ring-2'\n >\n {option.swatch ? (\n <span\n aria-hidden='true'\n className='ring-border size-3 rounded-full ring-1'\n style={{ backgroundColor: option.swatch }}\n />\n ) : null}\n {option.label}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n </fieldset>\n ))}\n </div>\n\n <div className='mt-6 flex flex-wrap items-center gap-3'>\n {/*\n A ButtonGroup, so the stepper's shared border, its corner radii and its focus\n stacking come from the component rather than from `rounded-r-none` by hand.\n\n The readout is a `ButtonGroupText`, not a bare div. The group styles its children\n through `[&>[data-slot]…]` selectors, so an element without a `data-slot` is\n invisible to every one of them: it kept its own radius, lost no border where the\n group expected a seam, and threw off which child counted as last - which is the\n detached middle box with a stray rule under it.\n */}\n <ButtonGroup aria-label='Cantidad'>\n <Button\n variant='outline'\n size='icon'\n aria-label='Reducir cantidad'\n disabled={quantity <= 1}\n onClick={() => setQuantity(current => Math.max(1, current - 1))}\n >\n <Minus />\n </Button>\n {/*\n `aria-live` rather than a label: the number changes under the reader's own\n button presses, and announcing it is the only way they hear the result.\n */}\n <ButtonGroupText aria-live='polite' className='bg-background min-w-10 justify-center tabular-nums'>\n {quantity}\n </ButtonGroupText>\n <Button\n variant='outline'\n size='icon'\n aria-label='Aumentar cantidad'\n onClick={() => setQuantity(current => current + 1)}\n >\n <Plus />\n </Button>\n </ButtonGroup>\n\n <Button\n className='flex-1'\n onClick={() => {\n setAddedCount(quantity)\n onAddToCart?.(product, quantity, selection)\n }}\n >\n {addedCount > 0 ? (\n <>\n <Check aria-hidden='true' />\n Añadido al carrito\n </>\n ) : (\n `Añadir al carrito · ${money.format(product.price * quantity)}`\n )}\n </Button>\n </div>\n\n {product.unitsLeft ? (\n <p className='text-muted-foreground mt-3 text-xs'>\n {`Solo quedan ${product.unitsLeft} en ${selectionSummary || 'esta opción'}.`}\n </p>\n ) : null}\n\n {/* The one announcement, off-screen, that the visible confirmation stands in for. */}\n <p role='status' aria-live='polite' className='sr-only'>\n {addedCount > 0 ? `${addedCount} × ${product.name}, ${selectionSummary}, añadido a tu carrito` : ''}\n </p>\n\n <Separator className='mt-6' />\n\n <ul className='text-muted-foreground mt-4 grid gap-1.5 text-sm sm:grid-cols-2'>\n {product.details.map(detail => (\n <li key={detail} className='flex items-start gap-2'>\n <Check className='text-primary mt-0.5 size-3.5 shrink-0' aria-hidden='true' />\n {detail}\n </li>\n ))}\n </ul>\n\n {product.href ? (\n <a\n href={product.href}\n className='text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 mt-5 w-fit rounded-sm text-sm underline underline-offset-4 outline-none focus-visible:ring-[3px]'\n >\n Ver la página completa del producto\n </a>\n ) : null}\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nexport default ProductQuickViewDialog"],"mappings":"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","names":["import_react"]}
@@ -0,0 +1,253 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useState } from "react";
4
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react";
5
+ import { Check, Minus, Plus, Star } from "lucide-react";
6
+ import { Badge } from "../../../ui/badge.mjs";
7
+ import { Button } from "../../../ui/button.mjs";
8
+ import { ButtonGroup, ButtonGroupText } from "../../../ui/button-group.mjs";
9
+ import {
10
+ Dialog,
11
+ DialogContent,
12
+ DialogDescription,
13
+ DialogHeader,
14
+ DialogTitle
15
+ } from "../../../ui/dialog.mjs";
16
+ import { Separator } from "../../../ui/separator.mjs";
17
+ import { ToggleGroup, ToggleGroupItem } from "../../../ui/toggle-group.mjs";
18
+ const money = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0 });
19
+ const confirmationMs = 2400;
20
+ function defaultSelection(product) {
21
+ return Object.fromEntries(
22
+ product.variants.map((variant) => {
23
+ const stated = variant.options.find(
24
+ (option) => option.value === variant.defaultValue && option.available
25
+ );
26
+ const fallback = variant.options.find((option) => option.available) ?? variant.options[0];
27
+ return [variant.key, (stated ?? fallback).value];
28
+ })
29
+ );
30
+ }
31
+ function ProductQuickViewDialog({
32
+ products,
33
+ activeIndex,
34
+ onActiveIndexChange,
35
+ onClose,
36
+ onAddToCart
37
+ }) {
38
+ const reduceMotion = useReducedMotion();
39
+ const product = activeIndex === null ? null : products[activeIndex];
40
+ const [selection, setSelection] = useState({});
41
+ const [quantity, setQuantity] = useState(1);
42
+ const [addedCount, setAddedCount] = useState(0);
43
+ useEffect(() => {
44
+ if (!product) {
45
+ return;
46
+ }
47
+ setSelection(defaultSelection(product));
48
+ setQuantity(1);
49
+ setAddedCount(0);
50
+ }, [product?.id]);
51
+ useEffect(() => {
52
+ if (addedCount === 0) {
53
+ return;
54
+ }
55
+ const timer = setTimeout(() => setAddedCount(0), confirmationMs);
56
+ return () => clearTimeout(timer);
57
+ }, [addedCount]);
58
+ const selectionSummary = useMemo(() => {
59
+ if (!product) {
60
+ return "";
61
+ }
62
+ return product.variants.map((variant) => variant.options.find((option) => option.value === selection[variant.key])?.label).filter(Boolean).join(" \xB7 ");
63
+ }, [product, selection]);
64
+ if (!product || activeIndex === null) {
65
+ return null;
66
+ }
67
+ const discount = product.compareAt ? Math.round((1 - product.price / product.compareAt) * 100) : null;
68
+ return /* @__PURE__ */ jsx(Dialog, { open: true, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-h-[92dvh] w-full overflow-y-auto p-0 sm:max-w-4xl md:h-[38rem] md:max-h-[92dvh] md:overflow-hidden", children: [
69
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
70
+ /* @__PURE__ */ jsx(DialogTitle, { children: product.name }),
71
+ /* @__PURE__ */ jsx(DialogDescription, { children: product.description })
72
+ ] }),
73
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-0 md:h-full md:min-h-0 md:grid-cols-[minmax(0,0.95fr)_minmax(0,1fr)]", children: [
74
+ /* @__PURE__ */ jsxs("div", { className: "bg-muted/40 flex flex-col gap-3 p-4 sm:p-5 md:min-h-0 md:justify-center md:overflow-y-auto", children: [
75
+ /* @__PURE__ */ jsxs("div", { className: "bg-muted relative aspect-square w-full overflow-hidden rounded-lg", children: [
76
+ /* @__PURE__ */ jsx(AnimatePresence, { initial: false, mode: "popLayout", children: /* @__PURE__ */ jsx(
77
+ motion.img,
78
+ {
79
+ src: product.image || void 0,
80
+ alt: product.imageAlt,
81
+ className: "absolute inset-0 size-full object-cover",
82
+ initial: reduceMotion ? false : { opacity: 0 },
83
+ animate: { opacity: 1 },
84
+ exit: reduceMotion ? void 0 : { opacity: 0 },
85
+ transition: { duration: 0.24, ease: "easeOut" },
86
+ decoding: "async"
87
+ },
88
+ product.id
89
+ ) }),
90
+ /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "absolute top-3 left-3 rounded-full", children: product.category })
91
+ ] }),
92
+ /* @__PURE__ */ jsx(
93
+ ToggleGroup,
94
+ {
95
+ type: "multiple",
96
+ spacing: 2,
97
+ value: [String(activeIndex)],
98
+ onValueChange: (value) => value[0] && onActiveIndexChange(Number(value[0])),
99
+ "aria-label": "Elegir producto",
100
+ className: "grid w-full grid-cols-4",
101
+ children: products.map((entry, index) => /* @__PURE__ */ jsx(
102
+ ToggleGroupItem,
103
+ {
104
+ value: String(index),
105
+ "aria-label": entry.name,
106
+ className: "data-[state=on]:ring-primary size-auto min-w-0 overflow-hidden rounded-md p-0 ring-2 ring-transparent transition-shadow data-[state=on]:bg-transparent",
107
+ children: /* @__PURE__ */ jsx(
108
+ "img",
109
+ {
110
+ src: entry.image || void 0,
111
+ alt: "",
112
+ className: "bg-muted aspect-square w-full object-cover",
113
+ loading: "lazy",
114
+ decoding: "async"
115
+ }
116
+ )
117
+ },
118
+ entry.id
119
+ ))
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-center font-mono text-xs tabular-nums", children: `${activeIndex + 1} / ${products.length}` })
123
+ ] }),
124
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col p-4 pt-5 sm:p-6 md:min-h-0 md:overflow-y-auto", children: [
125
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs tracking-[0.16em] uppercase", children: product.tagline }),
126
+ /* @__PURE__ */ jsx("h2", { className: "mt-2 text-2xl font-semibold tracking-tight text-balance", children: product.name }),
127
+ /* @__PURE__ */ jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-x-3 gap-y-2", children: [
128
+ /* @__PURE__ */ jsx("p", { className: "text-xl font-semibold tabular-nums", children: money.format(product.price) }),
129
+ product.compareAt ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm line-through tabular-nums", children: money.format(product.compareAt) }) : null,
130
+ discount ? /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "rounded-full font-normal", children: `${discount}% de descuento` }) : null,
131
+ /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground flex items-center gap-1.5 text-sm", children: [
132
+ /* @__PURE__ */ jsx(Star, { className: "size-3.5 fill-foreground text-foreground", "aria-hidden": "true" }),
133
+ /* @__PURE__ */ jsx("span", { className: "text-foreground font-medium tabular-nums", children: product.rating }),
134
+ /* @__PURE__ */ jsxs("span", { className: "tabular-nums", children: [
135
+ "(",
136
+ product.reviewCount,
137
+ ")"
138
+ ] })
139
+ ] })
140
+ ] }),
141
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-4 text-sm leading-6 text-pretty", children: product.description }),
142
+ /* @__PURE__ */ jsx("div", { className: "mt-5 flex flex-col gap-5", children: product.variants.map((variant) => (
143
+ /*
144
+ A fieldset per variant, and a ToggleGroup inside it rather than a row of
145
+ Buttons with a hand-rolled `aria-pressed`. A loop of buttons has to fake single
146
+ selection and roving focus, and gets the focus order wrong the moment one of
147
+ them is disabled — which, with a sold-out finish, is most of them.
148
+ */
149
+ /* @__PURE__ */ jsxs("fieldset", { children: [
150
+ /* @__PURE__ */ jsxs("legend", { className: "flex w-full items-baseline gap-2 text-sm font-medium", children: [
151
+ variant.label,
152
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground font-normal", children: variant.options.find((option) => option.value === selection[variant.key])?.label })
153
+ ] }),
154
+ /* @__PURE__ */ jsx(
155
+ ToggleGroup,
156
+ {
157
+ type: "multiple",
158
+ spacing: 2,
159
+ variant: "outline",
160
+ value: [selection[variant.key] ?? ""],
161
+ onValueChange: (value) => value[0] && setSelection((current) => ({ ...current, [variant.key]: value[0] })),
162
+ "aria-label": variant.label,
163
+ className: "mt-2 flex-wrap",
164
+ children: variant.options.map((option) => /* @__PURE__ */ jsxs(
165
+ ToggleGroupItem,
166
+ {
167
+ value: option.value,
168
+ disabled: !option.available,
169
+ "aria-label": option.available ? option.label : `${option.label}, agotado`,
170
+ className: "data-[state=on]:border-primary data-[state=on]:ring-primary/30 gap-2 data-[state=on]:ring-2",
171
+ children: [
172
+ option.swatch ? /* @__PURE__ */ jsx(
173
+ "span",
174
+ {
175
+ "aria-hidden": "true",
176
+ className: "ring-border size-3 rounded-full ring-1",
177
+ style: { backgroundColor: option.swatch }
178
+ }
179
+ ) : null,
180
+ option.label
181
+ ]
182
+ },
183
+ option.value
184
+ ))
185
+ }
186
+ )
187
+ ] }, variant.key)
188
+ )) }),
189
+ /* @__PURE__ */ jsxs("div", { className: "mt-6 flex flex-wrap items-center gap-3", children: [
190
+ /* @__PURE__ */ jsxs(ButtonGroup, { "aria-label": "Cantidad", children: [
191
+ /* @__PURE__ */ jsx(
192
+ Button,
193
+ {
194
+ variant: "outline",
195
+ size: "icon",
196
+ "aria-label": "Reducir cantidad",
197
+ disabled: quantity <= 1,
198
+ onClick: () => setQuantity((current) => Math.max(1, current - 1)),
199
+ children: /* @__PURE__ */ jsx(Minus, {})
200
+ }
201
+ ),
202
+ /* @__PURE__ */ jsx(ButtonGroupText, { "aria-live": "polite", className: "bg-background min-w-10 justify-center tabular-nums", children: quantity }),
203
+ /* @__PURE__ */ jsx(
204
+ Button,
205
+ {
206
+ variant: "outline",
207
+ size: "icon",
208
+ "aria-label": "Aumentar cantidad",
209
+ onClick: () => setQuantity((current) => current + 1),
210
+ children: /* @__PURE__ */ jsx(Plus, {})
211
+ }
212
+ )
213
+ ] }),
214
+ /* @__PURE__ */ jsx(
215
+ Button,
216
+ {
217
+ className: "flex-1",
218
+ onClick: () => {
219
+ setAddedCount(quantity);
220
+ onAddToCart?.(product, quantity, selection);
221
+ },
222
+ children: addedCount > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
223
+ /* @__PURE__ */ jsx(Check, { "aria-hidden": "true" }),
224
+ "A\xF1adido al carrito"
225
+ ] }) : `A\xF1adir al carrito \xB7 ${money.format(product.price * quantity)}`
226
+ }
227
+ )
228
+ ] }),
229
+ product.unitsLeft ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-3 text-xs", children: `Solo quedan ${product.unitsLeft} en ${selectionSummary || "esta opci\xF3n"}.` }) : null,
230
+ /* @__PURE__ */ jsx("p", { role: "status", "aria-live": "polite", className: "sr-only", children: addedCount > 0 ? `${addedCount} \xD7 ${product.name}, ${selectionSummary}, a\xF1adido a tu carrito` : "" }),
231
+ /* @__PURE__ */ jsx(Separator, { className: "mt-6" }),
232
+ /* @__PURE__ */ jsx("ul", { className: "text-muted-foreground mt-4 grid gap-1.5 text-sm sm:grid-cols-2", children: product.details.map((detail) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2", children: [
233
+ /* @__PURE__ */ jsx(Check, { className: "text-primary mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }),
234
+ detail
235
+ ] }, detail)) }),
236
+ product.href ? /* @__PURE__ */ jsx(
237
+ "a",
238
+ {
239
+ href: product.href,
240
+ className: "text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 mt-5 w-fit rounded-sm text-sm underline underline-offset-4 outline-none focus-visible:ring-[3px]",
241
+ children: "Ver la p\xE1gina completa del producto"
242
+ }
243
+ ) : null
244
+ ] })
245
+ ] })
246
+ ] }) });
247
+ }
248
+ var product_quick_view_dialog_default = ProductQuickViewDialog;
249
+ export {
250
+ ProductQuickViewDialog,
251
+ product_quick_view_dialog_default as default
252
+ };
253
+ //# sourceMappingURL=product-quick-view-dialog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Check, Minus, Plus, Star } from 'lucide-react'\n\nimport { Badge } from '../../../ui/badge'\nimport { Button } from '../../../ui/button'\nimport { ButtonGroup, ButtonGroupText } from '../../../ui/button-group'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../../../ui/dialog'\nimport { Separator } from '../../../ui/separator'\nimport { ToggleGroup, ToggleGroupItem } from '../../../ui/toggle-group'\n\nimport type { QuickViewProduct } from './product-quick-view'\n\nconst money = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', maximumFractionDigits: 0 })\n\n/** How long the added-to-cart confirmation stays up before the button returns to its label. */\nconst confirmationMs = 2400\n\n/**\n * What a product opens on: its stated default where it has one, and otherwise the first option\n * that is actually in stock — never a sold-out one, which would put the panel in a state whose\n * add-to-cart button cannot honestly be pressed.\n */\nfunction defaultSelection(product: QuickViewProduct): Record<string, string> {\n return Object.fromEntries(\n product.variants.map(variant => {\n const stated = variant.options.find(\n option => option.value === variant.defaultValue && option.available\n )\n const fallback = variant.options.find(option => option.available) ?? variant.options[0]\n\n return [variant.key, (stated ?? fallback).value]\n })\n )\n}\n\n/**\n * The panel a quick view opens, and the reason the pattern exists.\n *\n * A quick view is not a small product page. It is a promise that the reader will not lose the\n * grid, so this one keeps the whole catalogue reachable from inside: the strip under the picture\n * is the other products, not other angles of this one. Choosing from it re-dresses the panel\n * around a new product, the grid behind marks where the reader has got to, and closing returns\n * them to a grid they never actually left.\n */\nexport function ProductQuickViewDialog({\n products,\n activeIndex,\n onActiveIndexChange,\n onClose,\n onAddToCart,\n}: {\n products: QuickViewProduct[]\n /** Which product is open, or `null` when the dialog is closed. */\n activeIndex: number | null\n onActiveIndexChange: (index: number) => void\n onClose: () => void\n onAddToCart?: (\n product: QuickViewProduct,\n quantity: number,\n selection: Record<string, string>\n ) => void\n}) {\n const reduceMotion = useReducedMotion()\n const product = activeIndex === null ? null : products[activeIndex]\n\n const [selection, setSelection] = useState<Record<string, string>>({})\n const [quantity, setQuantity] = useState(1)\n const [addedCount, setAddedCount] = useState(0)\n\n /*\n One effect keyed on the product's identity rather than three scattered resets. Carrying a\n \"brushed brass\" across from a pendant to a sofa is worse than starting again, and a quantity\n of four floor lamps should not become four sofas because the reader stepped sideways.\n */\n useEffect(() => {\n if (!product) {\n return\n }\n\n setSelection(defaultSelection(product))\n setQuantity(1)\n setAddedCount(0)\n }, [product?.id]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (addedCount === 0) {\n return\n }\n\n const timer = setTimeout(() => setAddedCount(0), confirmationMs)\n\n return () => clearTimeout(timer)\n }, [addedCount])\n\n /*\n The chosen options in words, for the live region and the stock line. Built from the variant\n order rather than from the selection object, so it reads the way the controls are stacked\n instead of in whatever order the keys happen to sit in.\n */\n const selectionSummary = useMemo(() => {\n if (!product) {\n return ''\n }\n\n return product.variants\n .map(variant => variant.options.find(option => option.value === selection[variant.key])?.label)\n .filter(Boolean)\n .join(' · ')\n }, [product, selection])\n\n if (!product || activeIndex === null) {\n return null\n }\n\n const discount = product.compareAt ? Math.round((1 - product.price / product.compareAt) * 100) : null\n\n return (\n <Dialog open onOpenChange={next => !next && onClose()}>\n {/*\n `max-h` plus `overflow-y-auto` is what makes this usable below a laptop. The popup is\n fixed and centred with a translate, so without a bound it grew past both edges of a phone\n and the add-to-cart button ended up off the bottom of the screen with no way to reach it\n — the page behind a fixed element cannot scroll to it either.\n */}\n <DialogContent className='max-h-[92dvh] w-full overflow-y-auto p-0 sm:max-w-4xl md:h-[38rem] md:max-h-[92dvh] md:overflow-hidden'>\n <DialogHeader className='sr-only'>\n <DialogTitle>{product.name}</DialogTitle>\n <DialogDescription>{product.description}</DialogDescription>\n </DialogHeader>\n\n {/*\n A fixed height from `md`, and the detail column scrolls inside it.\n\n The popup is centred with a -50% translate, so its height decides where its top edge\n lands. Every product carries a different length of description and a different number\n of variant rows, so stepping through the strip re-measured the panel and slid the whole\n dialog up and down under the reader's cursor - the thumbnail they wanted next was no\n longer where they were pointing. Holding the height still makes the strip a control\n rather than a moving target. Below `md` the columns stack and the whole popup scrolls,\n where a fixed height would be the wrong answer.\n */}\n <div className='grid gap-0 md:h-full md:min-h-0 md:grid-cols-[minmax(0,0.95fr)_minmax(0,1fr)]'>\n <div className='bg-muted/40 flex flex-col gap-3 p-4 sm:p-5 md:min-h-0 md:justify-center md:overflow-y-auto'>\n {/*\n The picture cross-fades rather than cutting. At this size a hard swap reads as a\n flicker, and the fade is what ties the thumbnail that was pressed to the picture\n that arrives.\n */}\n <div className='bg-muted relative aspect-square w-full overflow-hidden rounded-lg'>\n <AnimatePresence initial={false} mode='popLayout'>\n <motion.img\n key={product.id}\n src={product.image || undefined}\n alt={product.imageAlt}\n className='absolute inset-0 size-full object-cover'\n initial={reduceMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={reduceMotion ? undefined : { opacity: 0 }}\n transition={{ duration: 0.24, ease: 'easeOut' }}\n decoding='async'\n />\n </AnimatePresence>\n\n <Badge variant='secondary' className='absolute top-3 left-3 rounded-full'>\n {product.category}\n </Badge>\n </div>\n\n {/*\n `spacing={2}` rather than a `gap-2` class. A ToggleGroup at the default spacing of\n zero is a segmented control: it strips the item radii, collapses the shared borders\n and adds `px-2` to every item through a `group-data-[spacing=0]` selector that no\n plain `p-0` utility can outrank. That padding around a small thumbnail was the odd\n width and the odd gaps; asking for real spacing turns the whole rule off.\n\n A ToggleGroup rather than a row of buttons for the same reason it is used for the\n variants: single selection, roving focus and arrow-key movement, none of which a\n loop of buttons gets without being told.\n */}\n <ToggleGroup\n type='multiple'\n spacing={2}\n value={[String(activeIndex)]}\n onValueChange={value => value[0] && onActiveIndexChange(Number(value[0]))}\n aria-label='Elegir producto'\n className='grid w-full grid-cols-4'\n >\n {products.map((entry, index) => (\n <ToggleGroupItem\n key={entry.id}\n value={String(index)}\n aria-label={entry.name}\n className='data-[state=on]:ring-primary size-auto min-w-0 overflow-hidden rounded-md p-0 ring-2 ring-transparent transition-shadow data-[state=on]:bg-transparent'\n >\n <img\n src={entry.image || undefined}\n alt=''\n className='bg-muted aspect-square w-full object-cover'\n loading='lazy'\n decoding='async'\n />\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n\n <p className='text-muted-foreground text-center font-mono text-xs tabular-nums'>\n {`${activeIndex + 1} / ${products.length}`}\n </p>\n </div>\n\n <div className='flex flex-col p-4 pt-5 sm:p-6 md:min-h-0 md:overflow-y-auto'>\n <p className='text-muted-foreground text-xs tracking-[0.16em] uppercase'>{product.tagline}</p>\n\n <h2 className='mt-2 text-2xl font-semibold tracking-tight text-balance'>{product.name}</h2>\n\n <div className='mt-3 flex flex-wrap items-center gap-x-3 gap-y-2'>\n <p className='text-xl font-semibold tabular-nums'>{money.format(product.price)}</p>\n {product.compareAt ? (\n <p className='text-muted-foreground text-sm line-through tabular-nums'>\n {money.format(product.compareAt)}\n </p>\n ) : null}\n {discount ? (\n <Badge variant='secondary' className='rounded-full font-normal'>{`${discount}% de descuento`}</Badge>\n ) : null}\n <p className='text-muted-foreground flex items-center gap-1.5 text-sm'>\n {/*\n Rating stars use the foreground token so they inherit theme contrast,\n matching storefront-hero-1 and the canonical review card. The rating number sits\n right beside the star, so the star is never the only carrier.\n */}\n <Star className='size-3.5 fill-foreground text-foreground' aria-hidden='true' />\n <span className='text-foreground font-medium tabular-nums'>{product.rating}</span>\n <span className='tabular-nums'>({product.reviewCount})</span>\n </p>\n </div>\n\n <p className='text-muted-foreground mt-4 text-sm leading-6 text-pretty'>{product.description}</p>\n\n <div className='mt-5 flex flex-col gap-5'>\n {product.variants.map(variant => (\n /*\n A fieldset per variant, and a ToggleGroup inside it rather than a row of\n Buttons with a hand-rolled `aria-pressed`. A loop of buttons has to fake single\n selection and roving focus, and gets the focus order wrong the moment one of\n them is disabled — which, with a sold-out finish, is most of them.\n */\n <fieldset key={variant.key}>\n <legend className='flex w-full items-baseline gap-2 text-sm font-medium'>\n {variant.label}\n <span className='text-muted-foreground font-normal'>\n {variant.options.find(option => option.value === selection[variant.key])?.label}\n </span>\n </legend>\n\n <ToggleGroup\n type='multiple'\n spacing={2}\n variant='outline'\n value={[selection[variant.key] ?? '']}\n onValueChange={value =>\n value[0] && setSelection(current => ({ ...current, [variant.key]: value[0] }))\n }\n aria-label={variant.label}\n className='mt-2 flex-wrap'\n >\n {variant.options.map(option => (\n <ToggleGroupItem\n key={option.value}\n value={option.value}\n disabled={!option.available}\n // Sold out is a word, not just a dimmed control.\n aria-label={option.available ? option.label : `${option.label}, agotado`}\n className='data-[state=on]:border-primary data-[state=on]:ring-primary/30 gap-2 data-[state=on]:ring-2'\n >\n {option.swatch ? (\n <span\n aria-hidden='true'\n className='ring-border size-3 rounded-full ring-1'\n style={{ backgroundColor: option.swatch }}\n />\n ) : null}\n {option.label}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n </fieldset>\n ))}\n </div>\n\n <div className='mt-6 flex flex-wrap items-center gap-3'>\n {/*\n A ButtonGroup, so the stepper's shared border, its corner radii and its focus\n stacking come from the component rather than from `rounded-r-none` by hand.\n\n The readout is a `ButtonGroupText`, not a bare div. The group styles its children\n through `[&>[data-slot]…]` selectors, so an element without a `data-slot` is\n invisible to every one of them: it kept its own radius, lost no border where the\n group expected a seam, and threw off which child counted as last - which is the\n detached middle box with a stray rule under it.\n */}\n <ButtonGroup aria-label='Cantidad'>\n <Button\n variant='outline'\n size='icon'\n aria-label='Reducir cantidad'\n disabled={quantity <= 1}\n onClick={() => setQuantity(current => Math.max(1, current - 1))}\n >\n <Minus />\n </Button>\n {/*\n `aria-live` rather than a label: the number changes under the reader's own\n button presses, and announcing it is the only way they hear the result.\n */}\n <ButtonGroupText aria-live='polite' className='bg-background min-w-10 justify-center tabular-nums'>\n {quantity}\n </ButtonGroupText>\n <Button\n variant='outline'\n size='icon'\n aria-label='Aumentar cantidad'\n onClick={() => setQuantity(current => current + 1)}\n >\n <Plus />\n </Button>\n </ButtonGroup>\n\n <Button\n className='flex-1'\n onClick={() => {\n setAddedCount(quantity)\n onAddToCart?.(product, quantity, selection)\n }}\n >\n {addedCount > 0 ? (\n <>\n <Check aria-hidden='true' />\n Añadido al carrito\n </>\n ) : (\n `Añadir al carrito · ${money.format(product.price * quantity)}`\n )}\n </Button>\n </div>\n\n {product.unitsLeft ? (\n <p className='text-muted-foreground mt-3 text-xs'>\n {`Solo quedan ${product.unitsLeft} en ${selectionSummary || 'esta opción'}.`}\n </p>\n ) : null}\n\n {/* The one announcement, off-screen, that the visible confirmation stands in for. */}\n <p role='status' aria-live='polite' className='sr-only'>\n {addedCount > 0 ? `${addedCount} × ${product.name}, ${selectionSummary}, añadido a tu carrito` : ''}\n </p>\n\n <Separator className='mt-6' />\n\n <ul className='text-muted-foreground mt-4 grid gap-1.5 text-sm sm:grid-cols-2'>\n {product.details.map(detail => (\n <li key={detail} className='flex items-start gap-2'>\n <Check className='text-primary mt-0.5 size-3.5 shrink-0' aria-hidden='true' />\n {detail}\n </li>\n ))}\n </ul>\n\n {product.href ? (\n <a\n href={product.href}\n className='text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 mt-5 w-fit rounded-sm text-sm underline underline-offset-4 outline-none focus-visible:ring-[3px]'\n >\n Ver la página completa del producto\n </a>\n ) : null}\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nexport default ProductQuickViewDialog"],"mappings":"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","names":[]}