@thorprovider/blocks 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (859) hide show
  1. package/README.md +274 -46
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
  4. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
  5. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
  6. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
  7. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
  8. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
  9. package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
  10. package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
  11. package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
  12. package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
  13. package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
  14. package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
  15. package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
  16. package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
  17. package/dist/blocks/application/login-forms/login-page.js +209 -0
  18. package/dist/blocks/application/login-forms/login-page.js.map +1 -0
  19. package/dist/blocks/application/login-forms/login-page.mjs +185 -0
  20. package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
  21. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
  22. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
  23. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
  24. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
  25. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
  26. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
  27. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
  28. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
  29. package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
  30. package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
  31. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
  32. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
  33. package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
  34. package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
  35. package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
  36. package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
  37. package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
  38. package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
  39. package/dist/blocks/application/verification/verify-1.d.ts +35 -0
  40. package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
  41. package/dist/blocks/application/verification/verify-1.js +243 -0
  42. package/dist/blocks/application/verification/verify-1.js.map +1 -0
  43. package/dist/blocks/application/verification/verify-1.mjs +219 -0
  44. package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
  45. package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
  46. package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
  47. package/dist/blocks/application/verification/verify-confetti.js +145 -0
  48. package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
  49. package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
  50. package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
  51. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
  52. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
  53. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
  54. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
  55. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
  56. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
  57. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
  58. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
  59. package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
  60. package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
  61. package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
  62. package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
  63. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
  64. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
  65. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
  66. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
  67. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
  68. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
  69. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
  70. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
  71. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
  72. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
  73. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
  74. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
  75. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
  76. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
  77. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
  78. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
  79. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
  80. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
  81. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
  82. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
  83. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
  84. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
  85. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
  86. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
  87. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
  88. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
  89. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
  90. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
  91. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
  92. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
  93. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
  94. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
  95. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
  96. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
  97. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
  98. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
  99. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
  100. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
  101. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
  102. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
  103. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
  104. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
  105. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
  106. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
  107. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
  108. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
  109. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
  110. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
  111. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
  112. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
  113. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
  114. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
  115. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
  116. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
  117. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
  118. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
  119. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
  120. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
  121. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
  122. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
  123. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
  124. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
  125. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
  126. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
  127. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
  128. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
  129. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
  130. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
  131. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
  132. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
  133. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
  134. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
  135. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
  136. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
  137. package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
  138. package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
  139. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
  140. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
  141. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
  142. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
  143. package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
  144. package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
  145. package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
  146. package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
  147. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
  148. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
  149. package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
  150. package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
  151. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
  152. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
  153. package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
  154. package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
  155. package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
  156. package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
  157. package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
  158. package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
  159. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
  160. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
  161. package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
  162. package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
  163. package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
  164. package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
  165. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
  166. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
  167. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
  168. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
  169. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
  170. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
  171. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
  172. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
  173. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
  174. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
  175. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
  176. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
  177. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
  178. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
  179. package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
  180. package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
  181. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
  182. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
  183. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
  184. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
  185. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
  186. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
  187. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
  188. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
  189. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
  190. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
  191. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
  192. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
  193. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
  194. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
  195. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
  196. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
  197. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
  198. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
  199. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
  200. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
  201. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
  202. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
  203. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
  204. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
  205. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
  206. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
  207. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
  208. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
  209. package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
  210. package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
  211. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
  212. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
  213. package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
  214. package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
  215. package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
  216. package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
  217. package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
  218. package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
  219. package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
  220. package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
  221. package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
  222. package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
  223. package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
  224. package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
  225. package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
  226. package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
  227. package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
  228. package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
  229. package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
  230. package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
  231. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
  232. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
  233. package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
  234. package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
  235. package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
  236. package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
  237. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
  238. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
  239. package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
  240. package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
  241. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
  242. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
  243. package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
  244. package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
  245. package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
  246. package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
  247. package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
  248. package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
  249. package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
  250. package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
  251. package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
  252. package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
  253. package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
  254. package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
  255. package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
  256. package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
  257. package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
  258. package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
  259. package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
  260. package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
  261. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
  262. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
  263. package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
  264. package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
  265. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
  266. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
  267. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
  268. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
  269. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
  270. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
  271. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
  272. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
  273. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
  274. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
  275. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
  276. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
  277. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
  278. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
  279. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
  280. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
  281. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
  282. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
  283. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
  284. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
  285. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
  286. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
  287. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
  288. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
  289. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
  290. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
  291. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
  292. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
  293. package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
  294. package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
  295. package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
  296. package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
  297. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
  298. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
  299. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
  300. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
  301. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
  302. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
  303. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
  304. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
  305. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
  306. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
  307. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
  308. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
  309. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
  310. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
  311. package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
  312. package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
  313. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
  314. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
  315. package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
  316. package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
  317. package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
  318. package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
  319. package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
  320. package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
  321. package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
  322. package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
  323. package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
  324. package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
  325. package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
  326. package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
  327. package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
  328. package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
  329. package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
  330. package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
  331. package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
  332. package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
  333. package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
  334. package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
  335. package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
  336. package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
  337. package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
  338. package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
  339. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
  340. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
  341. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
  342. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
  343. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
  344. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
  345. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
  346. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
  347. package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
  348. package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
  349. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
  350. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
  351. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
  352. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
  353. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
  354. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
  355. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
  356. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
  357. package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
  358. package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
  359. package/dist/blocks/marketing/banners/avatar-group.js +90 -0
  360. package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
  361. package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
  362. package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
  363. package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
  364. package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
  365. package/dist/blocks/marketing/banners/banner-1.js +177 -0
  366. package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
  367. package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
  368. package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
  369. package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
  370. package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
  371. package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
  372. package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
  373. package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
  374. package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
  375. package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
  376. package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
  377. package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
  378. package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
  379. package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
  380. package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
  381. package/dist/blocks/marketing/features/feature.d.ts +45 -0
  382. package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
  383. package/dist/blocks/marketing/features/feature.js +135 -0
  384. package/dist/blocks/marketing/features/feature.js.map +1 -0
  385. package/dist/blocks/marketing/features/feature.mjs +111 -0
  386. package/dist/blocks/marketing/features/feature.mjs.map +1 -0
  387. package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
  388. package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
  389. package/dist/blocks/marketing/footers/footer-section.js +356 -0
  390. package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
  391. package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
  392. package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
  393. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
  394. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
  395. package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
  396. package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
  397. package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
  398. package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
  399. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
  400. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
  401. package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
  402. package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
  403. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
  404. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
  405. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
  406. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
  407. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
  408. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
  409. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
  410. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
  411. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
  412. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
  413. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
  414. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
  415. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
  416. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
  417. package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
  418. package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
  419. package/dist/blocks/marketing/navbars/navbar.js +484 -0
  420. package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
  421. package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
  422. package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
  423. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
  424. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
  425. package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
  426. package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
  427. package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
  428. package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
  429. package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
  430. package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
  431. package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
  432. package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
  433. package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
  434. package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
  435. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
  436. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
  437. package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
  438. package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
  439. package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
  440. package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
  441. package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
  442. package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
  443. package/dist/blocks/shared/reaction-toggle.js +138 -0
  444. package/dist/blocks/shared/reaction-toggle.js.map +1 -0
  445. package/dist/blocks/shared/reaction-toggle.mjs +114 -0
  446. package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
  447. package/dist/hooks/use-mobile.d.ts +2 -0
  448. package/dist/hooks/use-mobile.d.ts.map +1 -0
  449. package/dist/hooks/use-mobile.js +53 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-mobile.mjs +19 -0
  452. package/dist/hooks/use-mobile.mjs.map +1 -0
  453. package/dist/index.d.ts +100 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +339 -0
  456. package/dist/index.js.map +1 -0
  457. package/dist/index.mjs +238 -0
  458. package/dist/index.mjs.map +1 -0
  459. package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
  460. package/dist/lib/cart.d.ts.map +1 -0
  461. package/dist/lib/cart.js +31 -0
  462. package/dist/lib/cart.js.map +1 -0
  463. package/dist/lib/cart.mjs +7 -0
  464. package/dist/lib/cart.mjs.map +1 -0
  465. package/dist/lib/contracts.d.ts +4008 -0
  466. package/dist/lib/contracts.d.ts.map +1 -0
  467. package/dist/lib/contracts.js +828 -0
  468. package/dist/lib/contracts.js.map +1 -0
  469. package/dist/lib/contracts.mjs +737 -0
  470. package/dist/lib/contracts.mjs.map +1 -0
  471. package/dist/lib/money.d.ts +28 -0
  472. package/dist/lib/money.d.ts.map +1 -0
  473. package/dist/lib/money.js +50 -0
  474. package/dist/lib/money.js.map +1 -0
  475. package/dist/lib/money.mjs +24 -0
  476. package/dist/lib/money.mjs.map +1 -0
  477. package/dist/lib/types/menu.d.ts +40 -0
  478. package/dist/lib/types/menu.d.ts.map +1 -0
  479. package/dist/lib/types/menu.js +50 -0
  480. package/dist/lib/types/menu.js.map +1 -0
  481. package/dist/lib/types/menu.mjs +25 -0
  482. package/dist/lib/types/menu.mjs.map +1 -0
  483. package/dist/lib/types.d.ts +5 -0
  484. package/dist/lib/types.d.ts.map +1 -0
  485. package/dist/lib/types.js +17 -0
  486. package/dist/lib/types.js.map +1 -0
  487. package/dist/lib/types.mjs +1 -0
  488. package/dist/lib/types.mjs.map +1 -0
  489. package/dist/lib/utils.d.ts +7 -0
  490. package/dist/lib/utils.d.ts.map +1 -0
  491. package/dist/lib/utils.js +33 -0
  492. package/dist/lib/utils.js.map +1 -0
  493. package/dist/lib/utils.mjs +9 -0
  494. package/dist/lib/utils.mjs.map +1 -0
  495. package/dist/ui/accordion.d.ts +8 -0
  496. package/dist/ui/accordion.d.ts.map +1 -0
  497. package/dist/ui/accordion.js +93 -0
  498. package/dist/ui/accordion.js.map +1 -0
  499. package/dist/ui/accordion.mjs +66 -0
  500. package/dist/ui/accordion.mjs.map +1 -0
  501. package/dist/ui/avatar.d.ts +12 -0
  502. package/dist/ui/avatar.d.ts.map +1 -0
  503. package/dist/ui/avatar.js +134 -0
  504. package/dist/ui/avatar.js.map +1 -0
  505. package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
  506. package/dist/ui/avatar.mjs.map +1 -0
  507. package/dist/ui/badge.d.ts +10 -0
  508. package/dist/ui/badge.d.ts.map +1 -0
  509. package/dist/ui/badge.js +69 -0
  510. package/dist/ui/badge.js.map +1 -0
  511. package/dist/ui/badge.mjs +44 -0
  512. package/dist/ui/badge.mjs.map +1 -0
  513. package/dist/ui/breadcrumb.d.ts +12 -0
  514. package/dist/ui/breadcrumb.d.ts.map +1 -0
  515. package/dist/ui/breadcrumb.js +134 -0
  516. package/dist/ui/breadcrumb.js.map +1 -0
  517. package/dist/ui/breadcrumb.mjs +104 -0
  518. package/dist/ui/breadcrumb.mjs.map +1 -0
  519. package/dist/ui/button-group.d.ts +12 -0
  520. package/dist/ui/button-group.d.ts.map +1 -0
  521. package/dist/ui/button-group.js +104 -0
  522. package/dist/ui/button-group.js.map +1 -0
  523. package/dist/ui/button-group.mjs +77 -0
  524. package/dist/ui/button-group.mjs.map +1 -0
  525. package/dist/ui/button.d.ts +11 -0
  526. package/dist/ui/button.d.ts.map +1 -0
  527. package/dist/ui/button.js +82 -0
  528. package/dist/ui/button.js.map +1 -0
  529. package/dist/ui/button.mjs +57 -0
  530. package/dist/ui/button.mjs.map +1 -0
  531. package/dist/ui/card.d.ts +10 -0
  532. package/dist/ui/card.d.ts.map +1 -0
  533. package/dist/ui/card.js +121 -0
  534. package/dist/ui/card.js.map +1 -0
  535. package/dist/ui/card.mjs +91 -0
  536. package/dist/ui/card.mjs.map +1 -0
  537. package/dist/ui/carousel.d.ts +20 -0
  538. package/dist/ui/carousel.d.ts.map +1 -0
  539. package/dist/ui/carousel.js +238 -0
  540. package/dist/ui/carousel.js.map +1 -0
  541. package/dist/ui/carousel.mjs +200 -0
  542. package/dist/ui/carousel.mjs.map +1 -0
  543. package/dist/ui/dialog.d.ts +18 -0
  544. package/dist/ui/dialog.d.ts.map +1 -0
  545. package/dist/ui/dialog.js +181 -0
  546. package/dist/ui/dialog.js.map +1 -0
  547. package/dist/ui/dialog.mjs +148 -0
  548. package/dist/ui/dialog.mjs.map +1 -0
  549. package/dist/ui/drawer.d.ts +14 -0
  550. package/dist/ui/drawer.d.ts.map +1 -0
  551. package/dist/ui/drawer.js +163 -0
  552. package/dist/ui/drawer.js.map +1 -0
  553. package/dist/ui/drawer.mjs +130 -0
  554. package/dist/ui/drawer.mjs.map +1 -0
  555. package/dist/ui/dropdown-menu.d.ts +26 -0
  556. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  557. package/dist/ui/dropdown-menu.js +271 -0
  558. package/dist/ui/dropdown-menu.js.map +1 -0
  559. package/dist/ui/dropdown-menu.mjs +233 -0
  560. package/dist/ui/dropdown-menu.mjs.map +1 -0
  561. package/dist/ui/empty.d.ts +12 -0
  562. package/dist/ui/empty.d.ts.map +1 -0
  563. package/dist/ui/empty.js +132 -0
  564. package/dist/ui/empty.js.map +1 -0
  565. package/dist/ui/empty.mjs +103 -0
  566. package/dist/ui/empty.mjs.map +1 -0
  567. package/dist/ui/field.d.ts +25 -0
  568. package/dist/ui/field.d.ts.map +1 -0
  569. package/dist/ui/field.js +264 -0
  570. package/dist/ui/field.js.map +1 -0
  571. package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
  572. package/dist/ui/field.mjs.map +1 -0
  573. package/dist/ui/input-group.d.ts +17 -0
  574. package/dist/ui/input-group.d.ts.map +1 -0
  575. package/dist/ui/input-group.js +185 -0
  576. package/dist/ui/input-group.js.map +1 -0
  577. package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
  578. package/dist/ui/input-group.mjs.map +1 -0
  579. package/dist/ui/input-otp.d.ts +12 -0
  580. package/dist/ui/input-otp.d.ts.map +1 -0
  581. package/dist/ui/input-otp.js +105 -0
  582. package/dist/ui/input-otp.js.map +1 -0
  583. package/dist/ui/input-otp.mjs +68 -0
  584. package/dist/ui/input-otp.mjs.map +1 -0
  585. package/dist/ui/input.d.ts +4 -0
  586. package/dist/ui/input.d.ts.map +1 -0
  587. package/dist/ui/input.js +46 -0
  588. package/dist/ui/input.js.map +1 -0
  589. package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
  590. package/dist/ui/input.mjs.map +1 -0
  591. package/dist/ui/label.d.ts +5 -0
  592. package/dist/ui/label.d.ts.map +1 -0
  593. package/dist/ui/label.js +48 -0
  594. package/dist/ui/label.js.map +1 -0
  595. package/dist/ui/label.mjs +24 -0
  596. package/dist/ui/label.mjs.map +1 -0
  597. package/dist/ui/navigation-menu.d.ts +15 -0
  598. package/dist/ui/navigation-menu.d.ts.map +1 -0
  599. package/dist/ui/navigation-menu.js +203 -0
  600. package/dist/ui/navigation-menu.js.map +1 -0
  601. package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
  602. package/dist/ui/navigation-menu.mjs.map +1 -0
  603. package/dist/ui/pagination.d.ts +14 -0
  604. package/dist/ui/pagination.d.ts.map +1 -0
  605. package/dist/ui/pagination.js +149 -0
  606. package/dist/ui/pagination.js.map +1 -0
  607. package/dist/ui/pagination.mjs +123 -0
  608. package/dist/ui/pagination.mjs.map +1 -0
  609. package/dist/ui/progress.d.ts +5 -0
  610. package/dist/ui/progress.d.ts.map +1 -0
  611. package/dist/ui/progress.js +57 -0
  612. package/dist/ui/progress.js.map +1 -0
  613. package/dist/ui/progress.mjs +33 -0
  614. package/dist/ui/progress.mjs.map +1 -0
  615. package/dist/ui/radio-group.d.ts +6 -0
  616. package/dist/ui/radio-group.d.ts.map +1 -0
  617. package/dist/ui/radio-group.js +72 -0
  618. package/dist/ui/radio-group.js.map +1 -0
  619. package/dist/ui/radio-group.mjs +47 -0
  620. package/dist/ui/radio-group.mjs.map +1 -0
  621. package/dist/ui/select.d.ts +16 -0
  622. package/dist/ui/select.d.ts.map +1 -0
  623. package/dist/ui/select.js +213 -0
  624. package/dist/ui/select.js.map +1 -0
  625. package/dist/ui/select.mjs +180 -0
  626. package/dist/ui/select.mjs.map +1 -0
  627. package/dist/ui/separator.d.ts +5 -0
  628. package/dist/ui/separator.d.ts.map +1 -0
  629. package/dist/ui/separator.js +52 -0
  630. package/dist/ui/separator.js.map +1 -0
  631. package/dist/ui/separator.mjs +28 -0
  632. package/dist/ui/separator.mjs.map +1 -0
  633. package/dist/ui/sheet.d.ts +15 -0
  634. package/dist/ui/sheet.d.ts.map +1 -0
  635. package/dist/ui/sheet.js +160 -0
  636. package/dist/ui/sheet.js.map +1 -0
  637. package/dist/ui/sheet.mjs +129 -0
  638. package/dist/ui/sheet.mjs.map +1 -0
  639. package/dist/ui/sidebar.d.ts +70 -0
  640. package/dist/ui/sidebar.d.ts.map +1 -0
  641. package/dist/ui/sidebar.js +697 -0
  642. package/dist/ui/sidebar.js.map +1 -0
  643. package/dist/ui/sidebar.mjs +651 -0
  644. package/dist/ui/sidebar.mjs.map +1 -0
  645. package/dist/ui/skeleton.d.ts +3 -0
  646. package/dist/ui/skeleton.d.ts.map +1 -0
  647. package/dist/ui/skeleton.js +40 -0
  648. package/dist/ui/skeleton.js.map +1 -0
  649. package/dist/ui/skeleton.mjs +16 -0
  650. package/dist/ui/skeleton.mjs.map +1 -0
  651. package/dist/ui/table.d.ts +11 -0
  652. package/dist/ui/table.d.ts.map +1 -0
  653. package/dist/ui/table.js +147 -0
  654. package/dist/ui/table.js.map +1 -0
  655. package/dist/ui/table.mjs +116 -0
  656. package/dist/ui/table.mjs.map +1 -0
  657. package/dist/ui/tabs.d.ts +12 -0
  658. package/dist/ui/tabs.d.ts.map +1 -0
  659. package/dist/ui/tabs.js +121 -0
  660. package/dist/ui/tabs.js.map +1 -0
  661. package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
  662. package/dist/ui/tabs.mjs.map +1 -0
  663. package/dist/ui/textarea.d.ts +4 -0
  664. package/dist/ui/textarea.d.ts.map +1 -0
  665. package/dist/ui/textarea.js +43 -0
  666. package/dist/ui/textarea.js.map +1 -0
  667. package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
  668. package/dist/ui/textarea.mjs.map +1 -0
  669. package/dist/ui/toggle-group.d.ts +10 -0
  670. package/dist/ui/toggle-group.d.ts.map +1 -0
  671. package/dist/ui/toggle-group.js +105 -0
  672. package/dist/ui/toggle-group.js.map +1 -0
  673. package/dist/ui/toggle-group.mjs +70 -0
  674. package/dist/ui/toggle-group.mjs.map +1 -0
  675. package/dist/ui/toggle.d.ts +10 -0
  676. package/dist/ui/toggle.d.ts.map +1 -0
  677. package/dist/ui/toggle.js +70 -0
  678. package/dist/ui/toggle.js.map +1 -0
  679. package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
  680. package/dist/ui/toggle.mjs.map +1 -0
  681. package/dist/ui/tooltip.d.ts +8 -0
  682. package/dist/ui/tooltip.d.ts.map +1 -0
  683. package/dist/ui/tooltip.js +84 -0
  684. package/dist/ui/tooltip.js.map +1 -0
  685. package/dist/ui/tooltip.mjs +57 -0
  686. package/dist/ui/tooltip.mjs.map +1 -0
  687. package/package.json +8 -1
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -107
  690. package/components.json +0 -33
  691. package/docs/standards/data-contracts.md +0 -81
  692. package/docs/standards/theming.md +0 -112
  693. package/scripts/fix-esm-extensions.mjs +0 -40
  694. package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
  695. package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
  696. package/src/blocks/application/login-forms/login-page-1.tsx +0 -246
  697. package/src/blocks/application/login-forms/login-page-2.tsx +0 -207
  698. package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
  699. package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -320
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -231
  701. package/src/blocks/application/verification/verify-1.tsx +0 -307
  702. package/src/blocks/application/verification/verify-confetti.tsx +0 -192
  703. package/src/blocks/e-commerce/category-filters/category-filter-1.tsx +0 -260
  704. package/src/blocks/e-commerce/category-filters/category-filter-2-filter-panel.tsx +0 -222
  705. package/src/blocks/e-commerce/category-filters/category-filter-2.test.tsx +0 -513
  706. package/src/blocks/e-commerce/category-filters/category-filter-2.tsx +0 -921
  707. package/src/blocks/e-commerce/category-filters/category-filter-4-chip-rail.tsx +0 -57
  708. package/src/blocks/e-commerce/category-filters/category-filter-4-drawer.tsx +0 -124
  709. package/src/blocks/e-commerce/category-filters/category-filter-4-fields.tsx +0 -170
  710. package/src/blocks/e-commerce/category-filters/category-filter-4-sidebar.tsx +0 -52
  711. package/src/blocks/e-commerce/category-filters/category-filter-4-sort-sheet.tsx +0 -57
  712. package/src/blocks/e-commerce/category-filters/category-filter-4-state.ts +0 -68
  713. package/src/blocks/e-commerce/category-filters/category-filter-4.tsx +0 -298
  714. package/src/blocks/e-commerce/checkout-forms/card-formatting.test.ts +0 -47
  715. package/src/blocks/e-commerce/checkout-forms/card-formatting.ts +0 -9
  716. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  717. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  718. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  719. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  720. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  721. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-contact-step.tsx +0 -96
  722. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-country-field.tsx +0 -51
  723. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-order-summary.tsx +0 -252
  724. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-payment-step.tsx +0 -188
  725. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-progress.tsx +0 -36
  726. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-shipping-step.tsx +0 -156
  727. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.test.tsx +0 -216
  728. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.tsx +0 -338
  729. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-order-summary.tsx +0 -130
  730. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-payment-card.tsx +0 -175
  731. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-shipping-card.tsx +0 -190
  732. package/src/blocks/e-commerce/checkout-forms/checkout-form-2.tsx +0 -312
  733. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-information-step.tsx +0 -91
  734. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-order-summary.tsx +0 -110
  735. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-payment-step.tsx +0 -137
  736. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-progress.tsx +0 -68
  737. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-review-step.tsx +0 -79
  738. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-shipping-step.tsx +0 -172
  739. package/src/blocks/e-commerce/checkout-forms/checkout-form-3.tsx +0 -392
  740. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  741. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  742. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  743. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  744. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  745. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  746. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  747. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  748. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  749. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  750. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  751. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  752. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  753. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  754. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  755. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  756. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  757. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  758. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  759. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  760. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  761. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  762. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  763. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  764. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  765. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  766. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -424
  767. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  768. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  769. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  770. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  771. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  772. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  773. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  774. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  775. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  776. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  777. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  778. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  779. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  780. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  781. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  782. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  783. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  784. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  785. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  786. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  787. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  788. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  789. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  790. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  791. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  792. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  793. package/src/blocks/marketing/features/feature.tsx +0 -195
  794. package/src/blocks/marketing/footers/footer-section-1.test.tsx +0 -117
  795. package/src/blocks/marketing/footers/footer-section-1.tsx +0 -178
  796. package/src/blocks/marketing/footers/footer-section-3.tsx +0 -192
  797. package/src/blocks/marketing/footers/footer-section-4.tsx +0 -355
  798. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  799. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  800. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  801. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  802. package/src/blocks/marketing/navbars/navbar-1.tsx +0 -267
  803. package/src/blocks/marketing/navbars/navbar-2.tsx +0 -351
  804. package/src/blocks/marketing/navbars/navbar-3.tsx +0 -303
  805. package/src/blocks/marketing/navbars/navbar-4-account-menu.test.tsx +0 -56
  806. package/src/blocks/marketing/navbars/navbar-4-account-menu.tsx +0 -134
  807. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.test.tsx +0 -204
  808. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.tsx +0 -371
  809. package/src/blocks/marketing/navbars/navbar-4-like-button.tsx +0 -177
  810. package/src/blocks/marketing/navbars/navbar-4-mobile-nav.tsx +0 -104
  811. package/src/blocks/marketing/navbars/navbar-4-product-grid.tsx +0 -219
  812. package/src/blocks/marketing/navbars/navbar-4-search-bar.tsx +0 -52
  813. package/src/blocks/marketing/navbars/navbar-4.test.tsx +0 -264
  814. package/src/blocks/marketing/navbars/navbar-4.tsx +0 -604
  815. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  816. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  817. package/src/blocks/marketing/testimonials/testimonial-1.tsx +0 -141
  818. package/src/blocks/marketing/testimonials/testimonial-2.tsx +0 -108
  819. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  820. package/src/hooks/use-mobile.ts +0 -19
  821. package/src/index.ts +0 -285
  822. package/src/lib/cart.test.ts +0 -15
  823. package/src/lib/contracts-curated.test.ts +0 -225
  824. package/src/lib/contracts-server-boundary.test.ts +0 -52
  825. package/src/lib/contracts.test.ts +0 -173
  826. package/src/lib/contracts.ts +0 -795
  827. package/src/lib/money.test.ts +0 -64
  828. package/src/lib/money.ts +0 -65
  829. package/src/lib/types/menu.ts +0 -43
  830. package/src/lib/types.ts +0 -4
  831. package/src/lib/utils.ts +0 -10
  832. package/src/ui/accordion.tsx +0 -65
  833. package/src/ui/badge.tsx +0 -47
  834. package/src/ui/breadcrumb.tsx +0 -108
  835. package/src/ui/button-group.tsx +0 -83
  836. package/src/ui/button.tsx +0 -63
  837. package/src/ui/card.tsx +0 -91
  838. package/src/ui/carousel.tsx +0 -241
  839. package/src/ui/dialog.tsx +0 -158
  840. package/src/ui/drawer.tsx +0 -134
  841. package/src/ui/dropdown-menu.tsx +0 -256
  842. package/src/ui/empty.tsx +0 -103
  843. package/src/ui/input-otp.tsx +0 -76
  844. package/src/ui/label.tsx +0 -23
  845. package/src/ui/pagination.tsx +0 -127
  846. package/src/ui/progress.tsx +0 -30
  847. package/src/ui/radio-group.tsx +0 -44
  848. package/src/ui/select.tsx +0 -189
  849. package/src/ui/separator.tsx +0 -27
  850. package/src/ui/sheet.tsx +0 -142
  851. package/src/ui/sidebar.tsx +0 -726
  852. package/src/ui/skeleton.tsx +0 -13
  853. package/src/ui/table.tsx +0 -115
  854. package/src/ui/toggle-group.tsx +0 -83
  855. package/src/ui/tooltip.tsx +0 -56
  856. package/tsconfig.build.json +0 -12
  857. package/tsconfig.json +0 -20
  858. package/tsup.config.ts +0 -19
  859. package/vitest.config.ts +0 -17
@@ -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":[]}