@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 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/category-filters/category-listing.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useId, useState, type ReactNode } from 'react'\nimport { Search, SlidersHorizontal, X } from 'lucide-react'\n\nimport { Badge } from '../../../ui/badge'\nimport { Button } from '../../../ui/button'\nimport { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from '../../../ui/drawer'\nimport { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyTitle } from '../../../ui/empty'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n} from '../../../ui/pagination'\nimport { RadioGroup, RadioGroupItem } from '../../../ui/radio-group'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../ui/select'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { Skeleton } from '../../../ui/skeleton'\nimport { cn } from '../../../lib/utils'\nimport type { ProductPresentation } from '../../../lib/contracts'\n\nimport { ProductCard } from '../product-list/product-card'\n\nimport { CategoryListingFilterFields } from './category-listing-filter-fields'\n\n/** The bounded presentation surface. The data contract and callbacks are identical. */\nexport type CategoryListingPresentation = 'sidebar' | 'toolbar'\n\nexport interface CategoryListingOption {\n id: string\n label: string\n}\n\nexport interface CategoryListingPriceRange {\n min: number\n max: number\n step: number\n}\n\nexport interface CategoryListingSortOption {\n value: string\n label: string\n}\n\n/**\n * A provider-backed facet value. `count` is rendered only when it is a real\n * non-negative number — a true zero is preserved, never recomputed or summed.\n */\nexport interface CategoryListingFacetOption {\n value: string\n label: string\n count?: number\n}\n\n/**\n * A generic facet group. The block never derives sector-specific fields\n * (frame size, colourway, range…) and never invents groups or options.\n */\nexport interface CategoryListingFacetGroup {\n id: string\n label: string\n options: CategoryListingFacetOption[]\n}\n\n/** The absolute canonical filter set emitted upward. */\nexport interface CategoryListingFilters {\n categories: string[]\n collections: string[]\n priceRange?: [number, number]\n facets?: Record<string, string[]>\n}\n\n/**\n * A typed catalog-query error the listing renders for repair. It mirrors the\n * runtime boundary error: `fields` names the exact raw parameters to remove and\n * `feature` is present only for `unmounted-capability`. The block never builds a\n * host URL — it emits the fields through `onRepair`.\n */\nexport interface CategoryListingQueryError {\n code: 'invalid-query' | 'unsupported-query' | 'unmounted-capability'\n /** Exact raw URL parameter names that must be removed to repair the query. */\n fields: string[]\n message?: string\n feature?: 'catalog-search' | 'category-filters'\n}\n\n/**\n * The observable listing status. The host derives it from the URL boundary and\n * the provider outcome; the block only renders it. Distinct states stay\n * distinct — a valid empty result is never shown as an error and a raw failure\n * is never swallowed as empty.\n */\nexport type CategoryListingStatus =\n | { state: 'loading' }\n | { state: 'ready' }\n | { state: 'empty' }\n | { state: 'invalid-query'; error: CategoryListingQueryError }\n | { state: 'unsupported-query'; error: CategoryListingQueryError }\n | { state: 'unmounted-capability'; error: CategoryListingQueryError }\n | { state: 'error'; message?: string }\n\n/** The kind of canonical filter an active chip represents. */\nexport type CategoryListingActiveFilterKind =\n | 'text'\n | 'category'\n | 'collection'\n | 'price'\n | 'attribute'\n\n/**\n * A removable active-filter chip. Built only from the actual canonical query:\n * `params` are the raw URL parameter names carrying the filter and `value` is\n * the specific list value to drop.\n */\nexport interface CategoryListingActiveFilter {\n /** Stable identity for React keys and removal callbacks. */\n id: string\n kind: CategoryListingActiveFilterKind\n /** Human-readable label shown on the chip. */\n label: string\n /** Raw URL parameter names that carry this filter. */\n params: string[]\n /** The specific list value this chip removes; absent for scalar filters. */\n value?: string\n}\n\nexport interface CategoryListingProps {\n /** Bounded presentation option; defaults to `sidebar`. */\n presentation?: CategoryListingPresentation\n\n /** Exactly the provider-paged products for the current page. Never re-paginated. */\n products: ProductPresentation[]\n pagination: (number | string)[]\n\n // ── Controlled canonical-query values ─────────────────────────────────────\n // The listing owns no private query state: these values are authoritative and\n // every interaction reports the absolute next value through a callback.\n searchValue: string\n selectedCategories: string[]\n selectedCollections: string[]\n selectedSort: string\n selectedPage: number\n selectedPageSize: number\n selectedPriceRange?: [number, number]\n selectedFacets?: Record<string, string[]>\n\n // ── Provider-declared option sets ─────────────────────────────────────────\n categories?: CategoryListingOption[]\n collections?: CategoryListingOption[]\n sortOptions?: CategoryListingSortOption[]\n /**\n * Real backend-provided price range only. When absent the price control is\n * omitted; the block never falls back to a fabricated `0..1000` default.\n */\n priceRange?: CategoryListingPriceRange\n /** Generic provider-backed facet groups; a group renders only when non-empty. */\n facets?: CategoryListingFacetGroup[]\n viewOptions?: number[]\n\n // ── Per-control visibility (selected from installed features) ─────────────\n showSearch: boolean\n showFilters: boolean\n showSort: boolean\n /** Price remains gated on a real `priceRange` even when this is true. */\n showPrice?: boolean\n\n // ── Observable listing states + active-filter chips ───────────────────────\n status: CategoryListingStatus\n activeFilters: CategoryListingActiveFilter[]\n\n // ── Copy ──────────────────────────────────────────────────────────────────\n filtersTitle?: string\n applyFiltersLabel?: string\n selectedText?: string\n clearAllLabel?: string\n priceRangeTitle?: string\n minLabel?: string\n maxLabel?: string\n categoriesTitle?: string\n collectionsTitle?: string\n sortTitle?: string\n viewLabel?: string\n viewPlaceholder?: string\n sortPlaceholder?: string\n productsTitle?: string\n currentLabel?: string\n searchLabel?: string\n searchPlaceholder?: string\n loadingLabel?: string\n emptyTitle?: string\n emptyDescription?: string\n clearFiltersLabel?: string\n invalidQueryTitle?: string\n unsupportedQueryTitle?: string\n unmountedCapabilityTitle?: string\n errorTitle?: string\n errorDescription?: string\n repairLabel?: string\n retryLabel?: string\n activeFiltersTitle?: string\n removeFilterLabel?: string\n\n // ── Emit-only callbacks: the block never fetches or rewrites the URL ─────\n onProductClick?: (product: ProductPresentation) => void\n onPageChange?: (page: number) => void\n onPageSizeChange?: (pageSize: number) => void\n onSortChange?: (sort: string) => void\n onFilterChange?: (next: CategoryListingFilters) => void\n onSearchChange?: (value: string) => void\n /** Empty-state clear: drops the active filters but never base scope/sort/pageSize. */\n onClearFilters?: () => void\n /** Invalid/unsupported/unmounted repair: receives the exact bad fields to remove. */\n onRepair?: (remove: string[]) => void\n /** Query/network failure retry: preserves the current query/input. */\n onRetry?: () => void\n /** Removes a single active-filter chip. */\n onRemoveFilter?: (filter: CategoryListingActiveFilter) => void\n}\n\nconst DEFAULT_VIEW_OPTIONS = [10, 25, 50, 100]\n\n/**\n * Pure selection reducer shared by checkbox handlers. Exported so the emitted\n * contract is unit-testable without a DOM (this package's tests render with\n * `react-dom/server`).\n */\nexport function toggleFilterValue(\n current: readonly string[],\n value: string,\n checked: boolean,\n): string[] {\n return checked ? [...current, value] : current.filter(candidate => candidate !== value)\n}\n\n/** Assemble the typed absolute filter change emitted upward. */\nexport function buildFilterChange(input: {\n categories: string[]\n collections: string[]\n priceRange?: [number, number]\n facets?: Record<string, string[]>\n}): CategoryListingFilters {\n const change: CategoryListingFilters = {\n categories: input.categories,\n collections: input.collections,\n }\n if (input.priceRange) change.priceRange = input.priceRange\n if (input.facets) change.facets = input.facets\n return change\n}\n\n/**\n * Reconcile the controlled search draft with the URL-backed `searchValue`.\n *\n * The URL is authoritative, but it only updates after an async server\n * navigation. Binding the input directly to that lagging prop makes React reset\n * it to the previous server value on every re-render, so fast typing loses every\n * character but the last. This pure function keeps a local draft authoritative\n * while the shopper is typing and adopts an external `searchValue`\n * (navigation / reload / back-forward) only when no uncommitted edit is pending.\n */\nexport function reconcileSearchDraft(input: {\n searchValue?: string\n prevSearchValue?: string\n draft: string\n}): { draft: string; prevSearchValue?: string } | null {\n const { searchValue, prevSearchValue, draft } = input\n if (searchValue === undefined || searchValue === prevSearchValue) return null\n const clean = prevSearchValue === undefined || draft === prevSearchValue\n return { draft: clean ? searchValue : draft, prevSearchValue: searchValue }\n}\n\nexport interface CategoryListingStatusViewProps {\n status: CategoryListingStatus\n activeFilters?: CategoryListingActiveFilter[]\n activeFiltersTitle?: string\n removeFilterLabel?: string\n loadingLabel?: string\n emptyTitle?: string\n emptyDescription?: string\n clearFiltersLabel?: string\n invalidQueryTitle?: string\n unsupportedQueryTitle?: string\n unmountedCapabilityTitle?: string\n errorTitle?: string\n errorDescription?: string\n repairLabel?: string\n retryLabel?: string\n onClearFilters?: () => void\n onRepair?: (remove: string[]) => void\n onRetry?: () => void\n onRemoveFilter?: (filter: CategoryListingActiveFilter) => void\n}\n\n/** Human-readable description naming the exact offending parameters. */\nfunction describeQueryError(\n error: CategoryListingQueryError,\n state: 'invalid-query' | 'unsupported-query' | 'unmounted-capability',\n): string {\n const fields = error.fields.join(', ')\n if (state === 'unmounted-capability' && error.feature) {\n return `${fields} pertenece a la función «${error.feature}», que no está instalada.`\n }\n return error.message ?? `Parámetros: ${fields}`\n}\n\n/**\n * Hooks-free presentation of the observable listing states and the removable\n * active-filter chips. Kept separate from `CategoryListing` so the interaction\n * contract (clear / repair / retry / chip removal) is testable by invoking the\n * rendered handlers without a DOM. It renders no products and performs no fetch.\n */\nexport function CategoryListingStatusView({\n status,\n activeFilters = [],\n activeFiltersTitle = 'Filtros activos',\n removeFilterLabel = 'Quitar filtro',\n loadingLabel = 'Cargando productos',\n emptyTitle = 'Sin resultados',\n emptyDescription = 'Ningún producto coincide con los filtros activos.',\n clearFiltersLabel = 'Limpiar filtros',\n invalidQueryTitle = 'Consulta no válida',\n unsupportedQueryTitle = 'Filtro no disponible',\n unmountedCapabilityTitle = 'Función no disponible',\n errorTitle = 'No se pudieron cargar los productos',\n errorDescription = 'Inténtalo de nuevo.',\n repairLabel = 'Corregir búsqueda',\n retryLabel = 'Reintentar',\n onClearFilters,\n onRepair,\n onRetry,\n onRemoveFilter,\n}: CategoryListingStatusViewProps) {\n const chips =\n activeFilters.length > 0 ? (\n <div role='group' aria-label={activeFiltersTitle} className='flex flex-wrap items-center gap-2'>\n {activeFilters.map(filter => (\n <Badge key={filter.id} variant='secondary' className='gap-1 pr-1'>\n <span>{filter.label}</span>\n <Button\n type='button'\n variant='ghost'\n size='icon-xs'\n className='size-4 cursor-pointer rounded-full'\n aria-label={`${removeFilterLabel}: ${filter.label}`}\n data-action='remove-filter'\n data-filter-id={filter.id}\n onClick={() => onRemoveFilter?.(filter)}\n >\n <X aria-hidden='true' />\n </Button>\n </Badge>\n ))}\n </div>\n ) : null\n\n if (status.state === 'ready') return chips\n\n let body: ReactNode\n switch (status.state) {\n case 'loading':\n body = (\n <div role='status' aria-live='polite' aria-busy='true' className='flex flex-col gap-4'>\n <span className='sr-only'>{loadingLabel}</span>\n <div className='grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6 lg:grid-cols-3'>\n {Array.from({ length: 6 }, (_, index) => (\n <div key={index} className='flex flex-col gap-2'>\n <Skeleton className='aspect-3/4 w-full rounded-lg' />\n <Skeleton className='h-4 w-3/4' />\n <Skeleton className='h-4 w-1/3' />\n </div>\n ))}\n </div>\n </div>\n )\n break\n case 'empty':\n body = (\n <Empty role='status'>\n <EmptyHeader>\n <EmptyTitle>{emptyTitle}</EmptyTitle>\n <EmptyDescription>{emptyDescription}</EmptyDescription>\n </EmptyHeader>\n {onClearFilters ? (\n <EmptyContent>\n <Button type='button' variant='outline' data-action='clear-filters' onClick={() => onClearFilters()}>\n {clearFiltersLabel}\n </Button>\n </EmptyContent>\n ) : null}\n </Empty>\n )\n break\n case 'invalid-query':\n case 'unsupported-query':\n case 'unmounted-capability':\n body = (\n <Empty role='alert'>\n <EmptyHeader>\n <EmptyTitle>\n {status.state === 'invalid-query'\n ? invalidQueryTitle\n : status.state === 'unsupported-query'\n ? unsupportedQueryTitle\n : unmountedCapabilityTitle}\n </EmptyTitle>\n <EmptyDescription>{describeQueryError(status.error, status.state)}</EmptyDescription>\n </EmptyHeader>\n {onRepair ? (\n <EmptyContent>\n <Button\n type='button'\n variant='outline'\n data-action='repair'\n onClick={() => onRepair(status.error.fields)}\n >\n {repairLabel}\n </Button>\n </EmptyContent>\n ) : null}\n </Empty>\n )\n break\n case 'error':\n body = (\n <Empty role='alert'>\n <EmptyHeader>\n <EmptyTitle>{errorTitle}</EmptyTitle>\n <EmptyDescription>{status.message ?? errorDescription}</EmptyDescription>\n </EmptyHeader>\n {onRetry ? (\n <EmptyContent>\n <Button type='button' variant='default' data-action='retry' onClick={() => onRetry()}>\n {retryLabel}\n </Button>\n </EmptyContent>\n ) : null}\n </Empty>\n )\n break\n }\n\n return (\n <div className='flex flex-col gap-4'>\n {chips}\n {body}\n </div>\n )\n}\n\nexport function CategoryListing({\n presentation = 'sidebar',\n products,\n pagination,\n searchValue,\n selectedCategories,\n selectedCollections,\n selectedSort,\n selectedPage,\n selectedPageSize,\n selectedPriceRange,\n selectedFacets = {},\n categories = [],\n collections = [],\n sortOptions = [],\n priceRange: priceRangeConfig,\n facets = [],\n viewOptions = DEFAULT_VIEW_OPTIONS,\n showSearch,\n showFilters,\n showSort,\n showPrice = true,\n status,\n activeFilters,\n filtersTitle = 'Filtros',\n applyFiltersLabel = 'Aplicar filtros',\n selectedText = 'Filtros',\n clearAllLabel = 'Restablecer',\n priceRangeTitle = 'Rango de precio',\n minLabel = 'Mínimo',\n maxLabel = 'Máximo',\n categoriesTitle = 'Categoría',\n collectionsTitle = 'Colección',\n sortTitle = 'Ordenar por',\n viewLabel = 'Ver',\n viewPlaceholder = 'Seleccionar',\n sortPlaceholder = 'Ordenar por',\n productsTitle = 'Productos',\n currentLabel = '(actual)',\n searchLabel = 'Buscar',\n searchPlaceholder = 'Buscar',\n loadingLabel,\n emptyTitle,\n emptyDescription,\n clearFiltersLabel,\n invalidQueryTitle,\n unsupportedQueryTitle,\n unmountedCapabilityTitle,\n errorTitle,\n errorDescription,\n repairLabel,\n retryLabel,\n activeFiltersTitle,\n removeFilterLabel,\n onProductClick,\n onPageChange,\n onPageSizeChange,\n onSortChange,\n onFilterChange,\n onSearchChange,\n onClearFilters,\n onRepair,\n onRetry,\n onRemoveFilter,\n}: CategoryListingProps) {\n const searchInputId = useId()\n const [draftSearch, setDraftSearch] = useState(searchValue)\n const [prevSearchValue, setPrevSearchValue] = useState<string | undefined>(searchValue)\n const [isSheetOpen, setIsSheetOpen] = useState(false)\n const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false)\n const [isSortDrawerOpen, setIsSortDrawerOpen] = useState(false)\n\n const reconciledSearch = reconcileSearchDraft({ searchValue, prevSearchValue, draft: draftSearch })\n if (reconciledSearch) {\n setPrevSearchValue(reconciledSearch.prevSearchValue)\n if (reconciledSearch.draft !== draftSearch) setDraftSearch(reconciledSearch.draft)\n }\n\n // The desktop surface owns the filters; close every mobile overlay when the\n // viewport crosses into the desktop layout.\n useEffect(() => {\n const mediaQuery = window.matchMedia('(min-width: 1024px)')\n const handleChange = (event: MediaQueryListEvent) => {\n if (event.matches) {\n setIsSheetOpen(false)\n setIsFilterDrawerOpen(false)\n setIsSortDrawerOpen(false)\n }\n }\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [])\n\n const priceRangeValue: [number, number] = priceRangeConfig\n ? (selectedPriceRange ?? [priceRangeConfig.min, priceRangeConfig.max])\n : [0, 0]\n\n const emitFilters = (overrides: Partial<CategoryListingFilters> = {}) => {\n onFilterChange?.(\n buildFilterChange({\n categories: selectedCategories,\n collections: selectedCollections,\n ...(priceRangeConfig ? { priceRange: priceRangeValue } : {}),\n facets: selectedFacets,\n ...overrides,\n }),\n )\n }\n\n const handleCategoryChange = (category: string, checked: boolean) => {\n emitFilters({ categories: toggleFilterValue(selectedCategories, category, checked) })\n }\n\n const handleCollectionChange = (collection: string, checked: boolean) => {\n emitFilters({ collections: toggleFilterValue(selectedCollections, collection, checked) })\n }\n\n const handleFacetChange = (group: CategoryListingFacetGroup, value: string, checked: boolean) => {\n const current = selectedFacets[group.id] ?? []\n const nextValues = toggleFilterValue(current, value, checked)\n const nextFacets: Record<string, string[]> = { ...selectedFacets }\n if (nextValues.length > 0) nextFacets[group.id] = nextValues\n else delete nextFacets[group.id]\n emitFilters({ facets: nextFacets })\n }\n\n const handlePriceChange = (next: [number, number]) => {\n emitFilters({ priceRange: next })\n }\n\n const handleClearAll = () => {\n emitFilters({\n categories: [],\n collections: [],\n ...(priceRangeConfig ? { priceRange: [priceRangeConfig.min, priceRangeConfig.max] as [number, number] } : {}),\n facets: {},\n })\n }\n\n const handlePageSizeChange = (size: number) => {\n if (Number.isFinite(size)) onPageSizeChange?.(size)\n }\n\n const handlePageChange = (page: number | string) => {\n if (page === '...') return\n const numeric = Number(page)\n if (Number.isFinite(numeric)) onPageChange?.(numeric)\n }\n\n const handleSortChange = (sort: string) => {\n onSortChange?.(sort)\n }\n\n const handleSearchChange = (text: string) => {\n setDraftSearch(text)\n onSearchChange?.(text)\n }\n\n const fields = (\n <CategoryListingFilterFields\n selectedText={selectedText}\n clearAllLabel={clearAllLabel}\n priceRangeTitle={priceRangeTitle}\n priceRange={priceRangeValue}\n priceRangeConfig={showPrice ? priceRangeConfig : undefined}\n minLabel={minLabel}\n maxLabel={maxLabel}\n onPriceChange={handlePriceChange}\n categoriesTitle={categoriesTitle}\n categories={categories}\n selectedCategories={selectedCategories}\n onCategoryChange={handleCategoryChange}\n collectionsTitle={collectionsTitle}\n collections={collections}\n selectedCollections={selectedCollections}\n onCollectionChange={handleCollectionChange}\n facets={facets}\n selectedFacets={selectedFacets}\n onFacetChange={handleFacetChange}\n onClearAll={handleClearAll}\n />\n )\n\n const sortControl = (ariaLabel: string) =>\n showSort && sortOptions.length > 0 ? (\n <Select value={selectedSort} onValueChange={handleSortChange}>\n <SelectTrigger className='h-8 w-[180px]' aria-label={ariaLabel}>\n <SelectValue placeholder={sortPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {sortOptions.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null\n\n const searchControl = showSearch ? (\n <div className='relative w-full sm:w-64'>\n <label htmlFor={searchInputId} className='sr-only'>\n {searchLabel}\n </label>\n <Search\n aria-hidden='true'\n className='text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2'\n />\n <Input\n id={searchInputId}\n type='search'\n value={draftSearch}\n onChange={event => handleSearchChange(event.target.value)}\n placeholder={searchPlaceholder}\n aria-label={searchLabel}\n className='h-8 pl-8'\n />\n </div>\n ) : null\n\n const pageSizeControl =\n viewOptions.length > 0 ? (\n <div className='hidden items-center gap-2 sm:flex'>\n <span className='text-sm'>{viewLabel}</span>\n <Select\n value={String(selectedPageSize)}\n onValueChange={value => {\n const option = viewOptions.find(candidate => String(candidate) === value)\n handlePageSizeChange(option ?? Number(value))\n }}\n >\n <SelectTrigger className='h-8 w-[100px]' aria-label={viewLabel}>\n <SelectValue placeholder={viewPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {viewOptions.map(option => (\n <SelectItem key={option} value={String(option)}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null\n\n const statusView = (\n <CategoryListingStatusView\n status={status}\n activeFilters={activeFilters}\n loadingLabel={loadingLabel}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n clearFiltersLabel={clearFiltersLabel}\n invalidQueryTitle={invalidQueryTitle}\n unsupportedQueryTitle={unsupportedQueryTitle}\n unmountedCapabilityTitle={unmountedCapabilityTitle}\n errorTitle={errorTitle}\n errorDescription={errorDescription}\n repairLabel={repairLabel}\n retryLabel={retryLabel}\n activeFiltersTitle={activeFiltersTitle}\n removeFilterLabel={removeFilterLabel}\n onClearFilters={onClearFilters}\n onRepair={onRepair}\n onRetry={onRetry}\n onRemoveFilter={onRemoveFilter}\n />\n )\n\n const results =\n status.state === 'ready' ? (\n <section aria-labelledby='products-heading' className='flex flex-col gap-6'>\n <h2 id='products-heading' className='sr-only'>\n {productsTitle}\n </h2>\n <ul\n data-slot='category-listing-products'\n className={cn(\n 'grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6',\n presentation === 'sidebar' ? 'lg:grid-cols-3' : 'lg:grid-cols-4',\n )}\n >\n {products.map(product => (\n <li key={product.id}>\n <ProductCard\n item={product}\n presentation='minimal'\n hideAddToCart\n onProductClick={onProductClick}\n />\n </li>\n ))}\n </ul>\n\n {pagination.length > 0 ? (\n <Pagination aria-label='Paginación'>\n <PaginationContent>\n {pagination.map((page, index) =>\n page === '...' ? (\n <PaginationEllipsis key={`${page}-${index}`} />\n ) : (\n <PaginationItem key={page}>\n <Button\n type='button'\n variant={selectedPage === page ? 'outline' : 'ghost'}\n size='icon'\n data-slot='pagination-link'\n data-active={selectedPage === page}\n aria-current={selectedPage === page ? 'page' : undefined}\n className='size-8 cursor-pointer p-0'\n onClick={() => handlePageChange(page)}\n >\n {page}\n {selectedPage === page && <span className='sr-only'>{currentLabel}</span>}\n </Button>\n </PaginationItem>\n ),\n )}\n </PaginationContent>\n </Pagination>\n ) : null}\n </section>\n ) : null\n\n return (\n <div className='mx-auto w-full max-w-7xl px-4 py-8 sm:px-6 lg:px-8'>\n <div className={cn('flex flex-col gap-8', presentation === 'sidebar' && 'lg:flex-row')}>\n {presentation === 'sidebar' && showFilters ? (\n <aside className='hidden w-full flex-none lg:block lg:w-72'>\n <div className='max-h-100vh sticky top-4 overflow-y-auto'>\n <div className='flex flex-col gap-6 pb-6'>{fields}</div>\n </div>\n </aside>\n ) : null}\n\n <main className='flex min-w-0 flex-1 flex-col gap-6'>\n {presentation === 'toolbar' ? (\n <>\n <div className='bg-background/95 supports-[backdrop-filter]:bg-background/80 sticky top-0 z-10 -mx-4 flex items-center gap-2 border-b px-4 py-2 backdrop-blur lg:hidden'>\n {showFilters ? (\n <Button\n type='button'\n variant='outline'\n size='sm'\n className='h-9 flex-1 cursor-pointer justify-start'\n onClick={() => setIsFilterDrawerOpen(true)}\n >\n <SlidersHorizontal aria-hidden='true' />\n {filtersTitle}\n {activeFilters.length > 0 ? (\n <Badge variant='secondary' className='ms-auto'>\n {activeFilters.length}\n </Badge>\n ) : null}\n </Button>\n ) : null}\n {showSort && sortOptions.length > 0 ? (\n <Button\n type='button'\n variant='outline'\n size='sm'\n className='h-9 cursor-pointer'\n aria-label={sortTitle}\n onClick={() => setIsSortDrawerOpen(true)}\n >\n {sortTitle}\n </Button>\n ) : null}\n </div>\n\n <div className='hidden items-center gap-3 lg:flex'>\n {showFilters ? (\n <Button\n type='button'\n variant='outline'\n size='sm'\n className='h-8 cursor-pointer'\n onClick={() => setIsFilterDrawerOpen(true)}\n >\n <SlidersHorizontal aria-hidden='true' />\n {filtersTitle}\n {activeFilters.length > 0 ? (\n <Badge variant='secondary'>{activeFilters.length}</Badge>\n ) : null}\n </Button>\n ) : null}\n <div className='ms-auto'>{sortControl(sortTitle)}</div>\n </div>\n </>\n ) : null}\n\n <div className='flex flex-wrap items-center justify-between gap-4'>\n <div className='flex flex-1 items-center gap-4'>\n {presentation === 'sidebar' && showFilters ? (\n <Sheet open={isSheetOpen} onOpenChange={setIsSheetOpen}>\n <SheetTrigger asChild>\n <Button\n variant='outline'\n size='sm'\n className='h-8 cursor-pointer px-3 text-xs lg:hidden'\n >\n <SlidersHorizontal aria-hidden='true' />\n {filtersTitle}\n </Button>\n </SheetTrigger>\n <SheetContent side='left' className='w-full p-0 sm:w-[380px] lg:hidden'>\n <SheetHeader className='border-b px-6 py-4'>\n <SheetTitle className='text-lg'>{filtersTitle}</SheetTitle>\n </SheetHeader>\n <div className='h-[calc(100vh-4rem)] overflow-y-auto p-6'>\n <div className='flex flex-col gap-6'>{fields}</div>\n </div>\n </SheetContent>\n </Sheet>\n ) : null}\n {searchControl}\n {pageSizeControl}\n </div>\n {presentation === 'sidebar' ? (\n <div className='flex items-center gap-4'>{sortControl(sortPlaceholder)}</div>\n ) : null}\n </div>\n\n {statusView}\n {results}\n </main>\n </div>\n\n {presentation === 'toolbar' && showFilters ? (\n <Drawer open={isFilterDrawerOpen} onOpenChange={setIsFilterDrawerOpen}>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle>{filtersTitle}</DrawerTitle>\n </DrawerHeader>\n <div className='min-h-0 flex-1 overflow-y-auto px-4'>{fields}</div>\n <div className='flex items-center gap-2 border-t p-4 pb-[max(1rem,env(safe-area-inset-bottom))]'>\n <Button type='button' variant='ghost' onClick={handleClearAll}>\n {clearAllLabel}\n </Button>\n <Button type='button' className='flex-1' onClick={() => setIsFilterDrawerOpen(false)}>\n {applyFiltersLabel}\n </Button>\n </div>\n </DrawerContent>\n </Drawer>\n ) : null}\n\n {presentation === 'toolbar' && showSort && sortOptions.length > 0 ? (\n <Drawer open={isSortDrawerOpen} onOpenChange={setIsSortDrawerOpen}>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle>{sortTitle}</DrawerTitle>\n </DrawerHeader>\n <div className='px-4 pb-6'>\n <RadioGroup\n value={selectedSort}\n onValueChange={value => {\n if (typeof value === 'string') {\n handleSortChange(value)\n setIsSortDrawerOpen(false)\n }\n }}\n className='gap-3'\n >\n {sortOptions.map(option => (\n <div key={option.value} className='flex items-center gap-2'>\n <RadioGroupItem value={option.value} id={`listing-sort-${option.value}`} />\n <Label htmlFor={`listing-sort-${option.value}`} className='min-h-11 font-normal'>\n {option.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n </div>\n </DrawerContent>\n </Drawer>\n ) : null}\n </div>\n )\n}\n\nexport default CategoryListing\n"],"mappings":"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","names":[]}
@@ -0,0 +1,4 @@
1
+ import { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox';
2
+ export declare function CheckboxCheck({ className, indeterminate, ...props }: CheckboxPrimitive.Root.Props): import("react").JSX.Element;
3
+ export default CheckboxCheck;
4
+ //# sourceMappingURL=checkbox-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-check.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/checkout-forms/checkbox-check.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AASvE,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,+BA2DjG;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,97 @@
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 checkbox_check_exports = {};
21
+ __export(checkbox_check_exports, {
22
+ CheckboxCheck: () => CheckboxCheck,
23
+ default: () => checkbox_check_default
24
+ });
25
+ module.exports = __toCommonJS(checkbox_check_exports);
26
+ var import_jsx_runtime = require("react/jsx-runtime");
27
+ var import_react = require("react");
28
+ var import_checkbox = require("@base-ui/react/checkbox");
29
+ var import_utils = require("../../../lib/utils.js");
30
+ const BOX_MS = 150;
31
+ const DRAW_MS = 350;
32
+ const UNCHECK_MS = 150;
33
+ const EASE = "cubic-bezier(0.22, 1, 0.36, 1)";
34
+ function CheckboxCheck({ className, indeterminate, ...props }) {
35
+ const pathRef = (0, import_react.useRef)(null);
36
+ const [length, setLength] = (0, import_react.useState)(15);
37
+ (0, import_react.useLayoutEffect)(() => {
38
+ const path = pathRef.current;
39
+ if (path) {
40
+ setLength(Math.ceil(path.getTotalLength()));
41
+ }
42
+ }, []);
43
+ const mark = indeterminate ? "M2.12 5.08H8.47" : "M1.69 5.08L3.81 7.2L8.47 2.54";
44
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
45
+ import_checkbox.Checkbox.Root,
46
+ {
47
+ "data-slot": "checkbox",
48
+ className: (0, import_utils.cn)(
49
+ "peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
50
+ "motion-reduce:transition-none",
51
+ className
52
+ ),
53
+ style: { transition: `background-color ${BOX_MS}ms ${EASE}, border-color ${BOX_MS}ms ${EASE}` },
54
+ indeterminate,
55
+ ...props,
56
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
57
+ import_checkbox.Checkbox.Indicator,
58
+ {
59
+ keepMounted: true,
60
+ "data-slot": "checkbox-indicator",
61
+ className: (0, import_utils.cn)(
62
+ "grid size-3.5 place-content-center text-current",
63
+ "[&_path]:[transition:stroke-dashoffset_var(--check-uncheck)_var(--check-ease)]",
64
+ "[&_path]:[stroke-dashoffset:var(--check-len)]",
65
+ "data-checked:[&_path]:[stroke-dashoffset:0]",
66
+ "data-checked:[&_path]:[transition-duration:var(--check-draw)]",
67
+ "motion-reduce:[&_path]:transition-none"
68
+ ),
69
+ style: {
70
+ "--check-len": length,
71
+ "--check-draw": `${DRAW_MS}ms`,
72
+ "--check-uncheck": `${UNCHECK_MS}ms`,
73
+ "--check-ease": EASE
74
+ },
75
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 10.1668 10.1668", fill: "none", "aria-hidden": true, className: "size-full overflow-visible", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
+ "path",
77
+ {
78
+ ref: pathRef,
79
+ d: mark,
80
+ stroke: "currentColor",
81
+ strokeWidth: 0.9,
82
+ strokeLinecap: "round",
83
+ strokeLinejoin: "round",
84
+ style: { strokeDasharray: length }
85
+ }
86
+ ) })
87
+ }
88
+ )
89
+ }
90
+ );
91
+ }
92
+ var checkbox_check_default = CheckboxCheck;
93
+ // Annotate the CommonJS export names for ESM import in node:
94
+ 0 && (module.exports = {
95
+ CheckboxCheck
96
+ });
97
+ //# sourceMappingURL=checkbox-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkbox-check.tsx"],"sourcesContent":["'use client'\n\nimport { useLayoutEffect, useRef, useState } from 'react'\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\n\nimport { cn } from '../../../lib/utils'\n\nconst BOX_MS = 150\nconst DRAW_MS = 350\nconst UNCHECK_MS = 150\nconst EASE = 'cubic-bezier(0.22, 1, 0.36, 1)'\n\nexport function CheckboxCheck({ className, indeterminate, ...props }: CheckboxPrimitive.Root.Props) {\n const pathRef = useRef<SVGPathElement>(null)\n const [length, setLength] = useState(15)\n\n useLayoutEffect(() => {\n const path = pathRef.current\n if (path) {\n setLength(Math.ceil(path.getTotalLength()))\n }\n }, [])\n\n const mark = indeterminate ? 'M2.12 5.08H8.47' : 'M1.69 5.08L3.81 7.2L8.47 2.54'\n\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary',\n 'motion-reduce:transition-none',\n className\n )}\n style={{ transition: `background-color ${BOX_MS}ms ${EASE}, border-color ${BOX_MS}ms ${EASE}` }}\n indeterminate={indeterminate}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n keepMounted\n data-slot=\"checkbox-indicator\"\n className={cn(\n 'grid size-3.5 place-content-center text-current',\n '[&_path]:[transition:stroke-dashoffset_var(--check-uncheck)_var(--check-ease)]',\n '[&_path]:[stroke-dashoffset:var(--check-len)]',\n 'data-checked:[&_path]:[stroke-dashoffset:0]',\n 'data-checked:[&_path]:[transition-duration:var(--check-draw)]',\n 'motion-reduce:[&_path]:transition-none'\n )}\n style={\n {\n '--check-len': length,\n '--check-draw': `${DRAW_MS}ms`,\n '--check-uncheck': `${UNCHECK_MS}ms`,\n '--check-ease': EASE,\n } as React.CSSProperties\n }\n >\n <svg viewBox=\"0 0 10.1668 10.1668\" fill=\"none\" aria-hidden className=\"size-full overflow-visible\">\n <path\n ref={pathRef}\n d={mark}\n stroke=\"currentColor\"\n strokeWidth={0.9}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ strokeDasharray: length }}\n />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport default CheckboxCheck"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0DU;AAxDV,mBAAkD;AAClD,sBAA8C;AAE9C,mBAAmB;AAEnB,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,OAAO;AAEN,SAAS,cAAc,EAAE,WAAW,eAAe,GAAG,MAAM,GAAiC;AAClG,QAAM,cAAU,qBAAuB,IAAI;AAC3C,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAS,EAAE;AAEvC,oCAAgB,MAAM;AACpB,UAAM,OAAO,QAAQ;AACrB,QAAI,MAAM;AACR,gBAAU,KAAK,KAAK,KAAK,eAAe,CAAC,CAAC;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO,gBAAgB,oBAAoB;AAEjD,SACE;AAAA,IAAC,gBAAAA,SAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,eAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,YAAY,oBAAoB,MAAM,MAAM,IAAI,kBAAkB,MAAM,MAAM,IAAI,GAAG;AAAA,MAC9F;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,gBAAAA,SAAkB;AAAA,QAAlB;AAAA,UACC,aAAW;AAAA,UACX,aAAU;AAAA,UACV,eAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,OACE;AAAA,YACE,eAAe;AAAA,YACf,gBAAgB,GAAG,OAAO;AAAA,YAC1B,mBAAmB,GAAG,UAAU;AAAA,YAChC,gBAAgB;AAAA,UAClB;AAAA,UAGF,sDAAC,SAAI,SAAQ,uBAAsB,MAAK,QAAO,eAAW,MAAC,WAAU,8BACnE;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,GAAG;AAAA,cACH,QAAO;AAAA,cACP,aAAa;AAAA,cACb,eAAc;AAAA,cACd,gBAAe;AAAA,cACf,OAAO,EAAE,iBAAiB,OAAO;AAAA;AAAA,UACnC,GACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,yBAAQ;","names":["CheckboxPrimitive"]}
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useLayoutEffect, useRef, useState } from "react";
4
+ import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
5
+ import { cn } from "../../../lib/utils.mjs";
6
+ const BOX_MS = 150;
7
+ const DRAW_MS = 350;
8
+ const UNCHECK_MS = 150;
9
+ const EASE = "cubic-bezier(0.22, 1, 0.36, 1)";
10
+ function CheckboxCheck({ className, indeterminate, ...props }) {
11
+ const pathRef = useRef(null);
12
+ const [length, setLength] = useState(15);
13
+ useLayoutEffect(() => {
14
+ const path = pathRef.current;
15
+ if (path) {
16
+ setLength(Math.ceil(path.getTotalLength()));
17
+ }
18
+ }, []);
19
+ const mark = indeterminate ? "M2.12 5.08H8.47" : "M1.69 5.08L3.81 7.2L8.47 2.54";
20
+ return /* @__PURE__ */ jsx(
21
+ CheckboxPrimitive.Root,
22
+ {
23
+ "data-slot": "checkbox",
24
+ className: cn(
25
+ "peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
26
+ "motion-reduce:transition-none",
27
+ className
28
+ ),
29
+ style: { transition: `background-color ${BOX_MS}ms ${EASE}, border-color ${BOX_MS}ms ${EASE}` },
30
+ indeterminate,
31
+ ...props,
32
+ children: /* @__PURE__ */ jsx(
33
+ CheckboxPrimitive.Indicator,
34
+ {
35
+ keepMounted: true,
36
+ "data-slot": "checkbox-indicator",
37
+ className: cn(
38
+ "grid size-3.5 place-content-center text-current",
39
+ "[&_path]:[transition:stroke-dashoffset_var(--check-uncheck)_var(--check-ease)]",
40
+ "[&_path]:[stroke-dashoffset:var(--check-len)]",
41
+ "data-checked:[&_path]:[stroke-dashoffset:0]",
42
+ "data-checked:[&_path]:[transition-duration:var(--check-draw)]",
43
+ "motion-reduce:[&_path]:transition-none"
44
+ ),
45
+ style: {
46
+ "--check-len": length,
47
+ "--check-draw": `${DRAW_MS}ms`,
48
+ "--check-uncheck": `${UNCHECK_MS}ms`,
49
+ "--check-ease": EASE
50
+ },
51
+ children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 10.1668 10.1668", fill: "none", "aria-hidden": true, className: "size-full overflow-visible", children: /* @__PURE__ */ jsx(
52
+ "path",
53
+ {
54
+ ref: pathRef,
55
+ d: mark,
56
+ stroke: "currentColor",
57
+ strokeWidth: 0.9,
58
+ strokeLinecap: "round",
59
+ strokeLinejoin: "round",
60
+ style: { strokeDasharray: length }
61
+ }
62
+ ) })
63
+ }
64
+ )
65
+ }
66
+ );
67
+ }
68
+ var checkbox_check_default = CheckboxCheck;
69
+ export {
70
+ CheckboxCheck,
71
+ checkbox_check_default as default
72
+ };
73
+ //# sourceMappingURL=checkbox-check.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkbox-check.tsx"],"sourcesContent":["'use client'\n\nimport { useLayoutEffect, useRef, useState } from 'react'\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\n\nimport { cn } from '../../../lib/utils'\n\nconst BOX_MS = 150\nconst DRAW_MS = 350\nconst UNCHECK_MS = 150\nconst EASE = 'cubic-bezier(0.22, 1, 0.36, 1)'\n\nexport function CheckboxCheck({ className, indeterminate, ...props }: CheckboxPrimitive.Root.Props) {\n const pathRef = useRef<SVGPathElement>(null)\n const [length, setLength] = useState(15)\n\n useLayoutEffect(() => {\n const path = pathRef.current\n if (path) {\n setLength(Math.ceil(path.getTotalLength()))\n }\n }, [])\n\n const mark = indeterminate ? 'M2.12 5.08H8.47' : 'M1.69 5.08L3.81 7.2L8.47 2.54'\n\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary',\n 'motion-reduce:transition-none',\n className\n )}\n style={{ transition: `background-color ${BOX_MS}ms ${EASE}, border-color ${BOX_MS}ms ${EASE}` }}\n indeterminate={indeterminate}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n keepMounted\n data-slot=\"checkbox-indicator\"\n className={cn(\n 'grid size-3.5 place-content-center text-current',\n '[&_path]:[transition:stroke-dashoffset_var(--check-uncheck)_var(--check-ease)]',\n '[&_path]:[stroke-dashoffset:var(--check-len)]',\n 'data-checked:[&_path]:[stroke-dashoffset:0]',\n 'data-checked:[&_path]:[transition-duration:var(--check-draw)]',\n 'motion-reduce:[&_path]:transition-none'\n )}\n style={\n {\n '--check-len': length,\n '--check-draw': `${DRAW_MS}ms`,\n '--check-uncheck': `${UNCHECK_MS}ms`,\n '--check-ease': EASE,\n } as React.CSSProperties\n }\n >\n <svg viewBox=\"0 0 10.1668 10.1668\" fill=\"none\" aria-hidden className=\"size-full overflow-visible\">\n <path\n ref={pathRef}\n d={mark}\n stroke=\"currentColor\"\n strokeWidth={0.9}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ strokeDasharray: length }}\n />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport default CheckboxCheck"],"mappings":";AA0DU;AAxDV,SAAS,iBAAiB,QAAQ,gBAAgB;AAClD,SAAS,YAAY,yBAAyB;AAE9C,SAAS,UAAU;AAEnB,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,OAAO;AAEN,SAAS,cAAc,EAAE,WAAW,eAAe,GAAG,MAAM,GAAiC;AAClG,QAAM,UAAU,OAAuB,IAAI;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AAEvC,kBAAgB,MAAM;AACpB,UAAM,OAAO,QAAQ;AACrB,QAAI,MAAM;AACR,gBAAU,KAAK,KAAK,KAAK,eAAe,CAAC,CAAC;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO,gBAAgB,oBAAoB;AAEjD,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,YAAY,oBAAoB,MAAM,MAAM,IAAI,kBAAkB,MAAM,MAAM,IAAI,GAAG;AAAA,MAC9F;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAW;AAAA,UACX,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,OACE;AAAA,YACE,eAAe;AAAA,YACf,gBAAgB,GAAG,OAAO;AAAA,YAC1B,mBAAmB,GAAG,UAAU;AAAA,YAChC,gBAAgB;AAAA,UAClB;AAAA,UAGF,8BAAC,SAAI,SAAQ,uBAAsB,MAAK,QAAO,eAAW,MAAC,WAAU,8BACnE;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,GAAG;AAAA,cACH,QAAO;AAAA,cACP,aAAa;AAAA,cACb,eAAc;AAAA,cACd,gBAAe;AAAA,cACf,OAAO,EAAE,iBAAiB,OAAO;AAAA;AAAA,UACnC,GACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,yBAAQ;","names":[]}
@@ -0,0 +1,41 @@
1
+ import type { FulfilmentStage, FulfilmentStageDetail } from './checkout-confirmation';
2
+ interface CheckoutConfirmationFulfilmentProgressProps {
3
+ order: {
4
+ currentStage?: FulfilmentStage;
5
+ estimatedDelivery?: string | null;
6
+ trackingHref?: string;
7
+ };
8
+ /** Ordered by `Object.keys(fulfilmentDetails)` from the orchestrator. */
9
+ stages: FulfilmentStageDetail[];
10
+ progressLabel?: string;
11
+ estimatedDeliveryLabel?: string;
12
+ currentStageLabel?: string;
13
+ inProgressLabel?: string;
14
+ expectedByLabel?: string;
15
+ completedLabel?: string;
16
+ statusLabel?: string;
17
+ locationLabel?: string;
18
+ trackOrderLabel?: string;
19
+ /** Kept for API symmetry with the orchestrator; the fulfilment card renders no prices. */
20
+ formatPrice?: (value: number) => string;
21
+ }
22
+ /**
23
+ * The four fulfilment stages, as tabs that actually open.
24
+ *
25
+ * This was a static `<ol>` that looked exactly like a tab strip — four labels with an underline
26
+ * under each — and did nothing when pressed. A control that looks pressable and is not is worse
27
+ * than no control: the reader tries it, nothing happens, and they conclude the page is broken
28
+ * rather than that the row was decoration.
29
+ *
30
+ * So it is a real `Tabs`, and each stage opens the one thing a reader on this screen wants that
31
+ * the label alone cannot give them: when it happened, where, and what it means. Radix Tabs
32
+ * supplies roving focus, arrow-key movement and the tab/panel wiring; a row of buttons with a
33
+ * `useState` would have to fake all three.
34
+ *
35
+ * Every stage is reachable, including ones still ahead — a reader is entitled to look at what
36
+ * "Delivered" will mean before it happens. What a future stage does not get is a fabricated
37
+ * timestamp; it says what it is waiting for instead.
38
+ */
39
+ export declare function CheckoutConfirmationFulfilmentProgress({ order, stages, progressLabel, estimatedDeliveryLabel, currentStageLabel, inProgressLabel, expectedByLabel, completedLabel, statusLabel, locationLabel, trackOrderLabel, }: CheckoutConfirmationFulfilmentProgressProps): import("react").JSX.Element;
40
+ export {};
41
+ //# sourceMappingURL=checkout-confirmation-fulfilment-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-confirmation-fulfilment-progress.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAerF,UAAU,2CAA2C;IACnD,KAAK,EAAE;QACL,YAAY,CAAC,EAAE,eAAe,CAAA;QAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACjC,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,yEAAyE;IACzE,MAAM,EAAE,qBAAqB,EAAE,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CACxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sCAAsC,CAAC,EACrD,KAAK,EACL,MAAM,EACN,aAA0B,EAC1B,sBAA2C,EAC3C,iBAAkC,EAClC,eAA4B,EAC5B,eAAkC,EAClC,cAA6B,EAC7B,WAAsB,EACtB,aAA2B,EAC3B,eAAsC,GACvC,EAAE,2CAA2C,+BAyH7C"}
@@ -0,0 +1,115 @@
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 checkout_confirmation_fulfilment_progress_exports = {};
21
+ __export(checkout_confirmation_fulfilment_progress_exports, {
22
+ CheckoutConfirmationFulfilmentProgress: () => CheckoutConfirmationFulfilmentProgress
23
+ });
24
+ module.exports = __toCommonJS(checkout_confirmation_fulfilment_progress_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_react = require("react");
27
+ var import_lucide_react = require("lucide-react");
28
+ var import_button = require("../../../ui/button.js");
29
+ var import_card = require("../../../ui/card.js");
30
+ var import_tabs = require("../../../ui/tabs.js");
31
+ var import_utils = require("../../../lib/utils.js");
32
+ const longDate = new Intl.DateTimeFormat("en-US", { dateStyle: "long" });
33
+ const stampDate = new Intl.DateTimeFormat("en-US", {
34
+ dateStyle: "medium",
35
+ timeStyle: "short"
36
+ });
37
+ const STAGE_LABELS = {
38
+ Confirmed: "Confirmado",
39
+ Packed: "Empaquetado",
40
+ Shipped: "Enviado",
41
+ Delivered: "Entregado"
42
+ };
43
+ function CheckoutConfirmationFulfilmentProgress({
44
+ order,
45
+ stages,
46
+ progressLabel = "Progreso",
47
+ estimatedDeliveryLabel = "Entrega estimada",
48
+ currentStageLabel = "Etapa actual",
49
+ inProgressLabel = "En curso",
50
+ expectedByLabel = "Se espera para",
51
+ completedLabel = "Completada",
52
+ statusLabel = "Estado",
53
+ locationLabel = "Ubicaci\xF3n",
54
+ trackOrderLabel = "Seguir este pedido"
55
+ }) {
56
+ const currentIndex = order.currentStage ? stages.findIndex((stage) => stage.stage === order.currentStage) : -1;
57
+ const [selected, setSelected] = (0, import_react.useState)(order.currentStage ?? stages[0]?.stage ?? "");
58
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_card.Card, { className: "mt-10", children: [
59
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_card.CardHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_card.CardTitle, { className: "flex flex-wrap items-center justify-between gap-2 text-base", children: [
60
+ progressLabel,
61
+ order.estimatedDelivery ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-sm font-normal", children: `${estimatedDeliveryLabel} ${longDate.format(new Date(order.estimatedDelivery))}` }) : null
62
+ ] }) }),
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_card.CardContent, { children: [
64
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tabs.Tabs, { value: selected, onValueChange: (value) => setSelected(String(value)), children: [
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tabs.TabsList, { variant: "line", className: "h-auto! w-full justify-start gap-2 overflow-x-auto p-0 pb-2", children: stages.map((stage, index) => {
66
+ const done = index <= currentIndex;
67
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tabs.TabsTrigger, { value: stage.stage, className: "h-auto flex-1 justify-start gap-2 px-1 py-2", children: [
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
69
+ "span",
70
+ {
71
+ "aria-hidden": "true",
72
+ className: (0, import_utils.cn)(
73
+ "flex size-6 shrink-0 items-center justify-center rounded-full text-xs",
74
+ done ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"
75
+ ),
76
+ children: done ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { className: "size-3.5" }) : index + 1
77
+ }
78
+ ),
79
+ STAGE_LABELS[stage.stage],
80
+ index === currentIndex ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sr-only", children: currentStageLabel }) : null,
81
+ index === currentIndex ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": "true", className: "bg-primary size-1.5 shrink-0 rounded-full" }) : null
82
+ ] }, stage.stage);
83
+ }) }),
84
+ stages.map((detail, index) => {
85
+ const done = index <= currentIndex;
86
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tabs.TabsContent, { value: detail.stage, className: "pt-4", children: [
87
+ index === currentIndex ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-primary mb-2 text-xs font-medium tracking-[0.12em] uppercase", children: currentStageLabel }) : null,
88
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm", children: detail.summary }),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", { className: "text-muted-foreground mt-3 flex flex-col gap-1.5 text-sm sm:flex-row sm:gap-6", children: [
90
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { className: "sr-only", children: detail.at ? completedLabel : statusLabel }),
92
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Clock, { className: "size-4 shrink-0", "aria-hidden": "true" }),
93
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "tabular-nums", children: detail.at ? stampDate.format(new Date(detail.at)) : done ? inProgressLabel : order.estimatedDelivery ? `${expectedByLabel} ${longDate.format(new Date(order.estimatedDelivery))}` : null })
94
+ ] }),
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
96
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { className: "sr-only", children: locationLabel }),
97
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.MapPin, { className: "size-4 shrink-0", "aria-hidden": "true" }),
98
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { children: detail.location })
99
+ ] })
100
+ ] })
101
+ ] }, detail.stage);
102
+ })
103
+ ] }),
104
+ order.trackingHref ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_button.Button, { className: "mt-6 w-full sm:w-auto", asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("a", { href: order.trackingHref, children: [
105
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Truck, {}),
106
+ trackOrderLabel
107
+ ] }) }) : null
108
+ ] })
109
+ ] });
110
+ }
111
+ // Annotate the CommonJS export names for ESM import in node:
112
+ 0 && (module.exports = {
113
+ CheckoutConfirmationFulfilmentProgress
114
+ });
115
+ //# sourceMappingURL=checkout-confirmation-fulfilment-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { Check, Clock, MapPin, Truck } from 'lucide-react'\nimport { Button } from '../../../ui/button'\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../ui/card'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../ui/tabs'\nimport { cn } from '../../../lib/utils'\nimport type { FulfilmentStage, FulfilmentStageDetail } from './checkout-confirmation'\n\nconst longDate = new Intl.DateTimeFormat('en-US', { dateStyle: 'long' })\nconst stampDate = new Intl.DateTimeFormat('en-US', {\n dateStyle: 'medium',\n timeStyle: 'short',\n})\n\nconst STAGE_LABELS: Record<FulfilmentStage, string> = {\n Confirmed: 'Confirmado',\n Packed: 'Empaquetado',\n Shipped: 'Enviado',\n Delivered: 'Entregado',\n}\n\ninterface CheckoutConfirmationFulfilmentProgressProps {\n order: {\n currentStage?: FulfilmentStage\n estimatedDelivery?: string | null\n trackingHref?: string\n }\n /** Ordered by `Object.keys(fulfilmentDetails)` from the orchestrator. */\n stages: FulfilmentStageDetail[]\n progressLabel?: string\n estimatedDeliveryLabel?: string\n currentStageLabel?: string\n inProgressLabel?: string\n expectedByLabel?: string\n completedLabel?: string\n statusLabel?: string\n locationLabel?: string\n trackOrderLabel?: string\n /** Kept for API symmetry with the orchestrator; the fulfilment card renders no prices. */\n formatPrice?: (value: number) => string\n}\n\n/**\n * The four fulfilment stages, as tabs that actually open.\n *\n * This was a static `<ol>` that looked exactly like a tab strip — four labels with an underline\n * under each — and did nothing when pressed. A control that looks pressable and is not is worse\n * than no control: the reader tries it, nothing happens, and they conclude the page is broken\n * rather than that the row was decoration.\n *\n * So it is a real `Tabs`, and each stage opens the one thing a reader on this screen wants that\n * the label alone cannot give them: when it happened, where, and what it means. Radix Tabs\n * supplies roving focus, arrow-key movement and the tab/panel wiring; a row of buttons with a\n * `useState` would have to fake all three.\n *\n * Every stage is reachable, including ones still ahead — a reader is entitled to look at what\n * \"Delivered\" will mean before it happens. What a future stage does not get is a fabricated\n * timestamp; it says what it is waiting for instead.\n */\nexport function CheckoutConfirmationFulfilmentProgress({\n order,\n stages,\n progressLabel = 'Progreso',\n estimatedDeliveryLabel = 'Entrega estimada',\n currentStageLabel = 'Etapa actual',\n inProgressLabel = 'En curso',\n expectedByLabel = 'Se espera para',\n completedLabel = 'Completada',\n statusLabel = 'Estado',\n locationLabel = 'Ubicación',\n trackOrderLabel = 'Seguir este pedido',\n}: CheckoutConfirmationFulfilmentProgressProps) {\n const currentIndex = order.currentStage\n ? stages.findIndex(stage => stage.stage === order.currentStage)\n : -1\n const [selected, setSelected] = useState<string>(order.currentStage ?? stages[0]?.stage ?? '')\n\n return (\n <Card className='mt-10'>\n <CardHeader>\n <CardTitle className='flex flex-wrap items-center justify-between gap-2 text-base'>\n {progressLabel}\n {order.estimatedDelivery ? (\n <span className='text-muted-foreground text-sm font-normal'>\n {`${estimatedDeliveryLabel} ${longDate.format(new Date(order.estimatedDelivery))}`}\n </span>\n ) : null}\n </CardTitle>\n </CardHeader>\n\n <CardContent>\n <Tabs value={selected} onValueChange={value => setSelected(String(value))}>\n {/*\n `variant='line'` because these are stages along a route, not a segmented control —\n the underline reads as progress in a way a filled pill does not.\n\n `h-auto!` because `TabsList` pins itself to `h-8` through a\n `group-data-horizontal/tabs:` variant, which a plain `h-auto` cannot outrank and\n tailwind-merge does not treat as the same utility. Left alone it clipped the 24px\n stage markers. The list scrolls rather than wrapping on a narrow screen, so the four\n stages stay in one order.\n\n `pb-2` is load-bearing, not spacing. `TabsTrigger` draws its active underline at\n `bottom-[-5px]`, i.e. outside its own box, and CSS forces an axis to `auto` when the\n other one is not `visible` — so asking for `overflow-x-auto` silently made the\n vertical axis scrollable too, and those 7px of underline became a stray vertical\n scrollbar beside the tabs at every width. The padding puts the underline back inside\n the box, which leaves nothing to scroll.\n */}\n <TabsList variant='line' className='h-auto! w-full justify-start gap-2 overflow-x-auto p-0 pb-2'>\n {stages.map((stage, index) => {\n const done = index <= currentIndex\n\n return (\n <TabsTrigger key={stage.stage} value={stage.stage} className='h-auto flex-1 justify-start gap-2 px-1 py-2'>\n <span\n aria-hidden='true'\n className={cn(\n 'flex size-6 shrink-0 items-center justify-center rounded-full text-xs',\n done ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'\n )}\n >\n {done ? <Check className='size-3.5' /> : index + 1}\n </span>\n {STAGE_LABELS[stage.stage]}\n {/*\n The stage the order is actually at, marked on the strip itself. Without it\n the only sign of \"where we are\" would be whichever tab happens to be open,\n which changes the moment the reader looks at another one.\n */}\n {index === currentIndex ? <span className='sr-only'>{currentStageLabel}</span> : null}\n {index === currentIndex ? (\n <span aria-hidden='true' className='bg-primary size-1.5 shrink-0 rounded-full' />\n ) : null}\n </TabsTrigger>\n )\n })}\n </TabsList>\n\n {stages.map((detail, index) => {\n const done = index <= currentIndex\n\n return (\n <TabsContent key={detail.stage} value={detail.stage} className='pt-4'>\n {index === currentIndex ? (\n <p className='text-primary mb-2 text-xs font-medium tracking-[0.12em] uppercase'>\n {currentStageLabel}\n </p>\n ) : null}\n <p className='text-sm'>{detail.summary}</p>\n\n <dl className='text-muted-foreground mt-3 flex flex-col gap-1.5 text-sm sm:flex-row sm:gap-6'>\n <div className='flex items-center gap-2'>\n <dt className='sr-only'>{detail.at ? completedLabel : statusLabel}</dt>\n <Clock className='size-4 shrink-0' aria-hidden='true' />\n <dd className='tabular-nums'>\n {detail.at\n ? stampDate.format(new Date(detail.at))\n : done\n ? inProgressLabel\n : order.estimatedDelivery\n ? `${expectedByLabel} ${longDate.format(new Date(order.estimatedDelivery))}`\n : null}\n </dd>\n </div>\n\n <div className='flex items-center gap-2'>\n <dt className='sr-only'>{locationLabel}</dt>\n <MapPin className='size-4 shrink-0' aria-hidden='true' />\n <dd>{detail.location}</dd>\n </div>\n </dl>\n </TabsContent>\n )\n })}\n </Tabs>\n\n {/*\n Render as an anchor through Radix `asChild` when a real tracking URL exists; with no\n href the button is omitted rather than pointing at a fabricated destination.\n */}\n {order.trackingHref ? (\n <Button className='mt-6 w-full sm:w-auto' asChild>\n <a href={order.trackingHref}>\n <Truck />\n {trackOrderLabel}\n </a>\n </Button>\n ) : null}\n </CardContent>\n </Card>\n )\n}"],"mappings":"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","names":[]}
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Check, Clock, MapPin, Truck } from "lucide-react";
5
+ import { Button } from "../../../ui/button.mjs";
6
+ import { Card, CardContent, CardHeader, CardTitle } from "../../../ui/card.mjs";
7
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../../ui/tabs.mjs";
8
+ import { cn } from "../../../lib/utils.mjs";
9
+ const longDate = new Intl.DateTimeFormat("en-US", { dateStyle: "long" });
10
+ const stampDate = new Intl.DateTimeFormat("en-US", {
11
+ dateStyle: "medium",
12
+ timeStyle: "short"
13
+ });
14
+ const STAGE_LABELS = {
15
+ Confirmed: "Confirmado",
16
+ Packed: "Empaquetado",
17
+ Shipped: "Enviado",
18
+ Delivered: "Entregado"
19
+ };
20
+ function CheckoutConfirmationFulfilmentProgress({
21
+ order,
22
+ stages,
23
+ progressLabel = "Progreso",
24
+ estimatedDeliveryLabel = "Entrega estimada",
25
+ currentStageLabel = "Etapa actual",
26
+ inProgressLabel = "En curso",
27
+ expectedByLabel = "Se espera para",
28
+ completedLabel = "Completada",
29
+ statusLabel = "Estado",
30
+ locationLabel = "Ubicaci\xF3n",
31
+ trackOrderLabel = "Seguir este pedido"
32
+ }) {
33
+ const currentIndex = order.currentStage ? stages.findIndex((stage) => stage.stage === order.currentStage) : -1;
34
+ const [selected, setSelected] = useState(order.currentStage ?? stages[0]?.stage ?? "");
35
+ return /* @__PURE__ */ jsxs(Card, { className: "mt-10", children: [
36
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "flex flex-wrap items-center justify-between gap-2 text-base", children: [
37
+ progressLabel,
38
+ order.estimatedDelivery ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm font-normal", children: `${estimatedDeliveryLabel} ${longDate.format(new Date(order.estimatedDelivery))}` }) : null
39
+ ] }) }),
40
+ /* @__PURE__ */ jsxs(CardContent, { children: [
41
+ /* @__PURE__ */ jsxs(Tabs, { value: selected, onValueChange: (value) => setSelected(String(value)), children: [
42
+ /* @__PURE__ */ jsx(TabsList, { variant: "line", className: "h-auto! w-full justify-start gap-2 overflow-x-auto p-0 pb-2", children: stages.map((stage, index) => {
43
+ const done = index <= currentIndex;
44
+ return /* @__PURE__ */ jsxs(TabsTrigger, { value: stage.stage, className: "h-auto flex-1 justify-start gap-2 px-1 py-2", children: [
45
+ /* @__PURE__ */ jsx(
46
+ "span",
47
+ {
48
+ "aria-hidden": "true",
49
+ className: cn(
50
+ "flex size-6 shrink-0 items-center justify-center rounded-full text-xs",
51
+ done ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"
52
+ ),
53
+ children: done ? /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) : index + 1
54
+ }
55
+ ),
56
+ STAGE_LABELS[stage.stage],
57
+ index === currentIndex ? /* @__PURE__ */ jsx("span", { className: "sr-only", children: currentStageLabel }) : null,
58
+ index === currentIndex ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "bg-primary size-1.5 shrink-0 rounded-full" }) : null
59
+ ] }, stage.stage);
60
+ }) }),
61
+ stages.map((detail, index) => {
62
+ const done = index <= currentIndex;
63
+ return /* @__PURE__ */ jsxs(TabsContent, { value: detail.stage, className: "pt-4", children: [
64
+ index === currentIndex ? /* @__PURE__ */ jsx("p", { className: "text-primary mb-2 text-xs font-medium tracking-[0.12em] uppercase", children: currentStageLabel }) : null,
65
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: detail.summary }),
66
+ /* @__PURE__ */ jsxs("dl", { className: "text-muted-foreground mt-3 flex flex-col gap-1.5 text-sm sm:flex-row sm:gap-6", children: [
67
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
68
+ /* @__PURE__ */ jsx("dt", { className: "sr-only", children: detail.at ? completedLabel : statusLabel }),
69
+ /* @__PURE__ */ jsx(Clock, { className: "size-4 shrink-0", "aria-hidden": "true" }),
70
+ /* @__PURE__ */ jsx("dd", { className: "tabular-nums", children: detail.at ? stampDate.format(new Date(detail.at)) : done ? inProgressLabel : order.estimatedDelivery ? `${expectedByLabel} ${longDate.format(new Date(order.estimatedDelivery))}` : null })
71
+ ] }),
72
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
73
+ /* @__PURE__ */ jsx("dt", { className: "sr-only", children: locationLabel }),
74
+ /* @__PURE__ */ jsx(MapPin, { className: "size-4 shrink-0", "aria-hidden": "true" }),
75
+ /* @__PURE__ */ jsx("dd", { children: detail.location })
76
+ ] })
77
+ ] })
78
+ ] }, detail.stage);
79
+ })
80
+ ] }),
81
+ order.trackingHref ? /* @__PURE__ */ jsx(Button, { className: "mt-6 w-full sm:w-auto", asChild: true, children: /* @__PURE__ */ jsxs("a", { href: order.trackingHref, children: [
82
+ /* @__PURE__ */ jsx(Truck, {}),
83
+ trackOrderLabel
84
+ ] }) }) : null
85
+ ] })
86
+ ] });
87
+ }
88
+ export {
89
+ CheckoutConfirmationFulfilmentProgress
90
+ };
91
+ //# sourceMappingURL=checkout-confirmation-fulfilment-progress.mjs.map